0
点赞
收藏
分享

微信扫一扫

第一次做面试官:说说Spring单例模式下Controller层为什么能多线程同时处理请求参数?


就在今年的某一天,小编的领导突然告诉小编,咱们要招新人了,你去从这些简历里筛一下,去面试看看,有没有还不错的。 然后就发现领导突然把小编拽进了一个群里,一封一封的简历把小编彻底淹没。。。。。



就这样小编颤颤巍巍的把几封认为还不错的给到了HR。心想,这第一次面试别人,比自己面试还紧张,这要是面试者有啥问题问我,被问住了,那就只能尴尬的笑一笑吗 emo。。。。。


翌日

“你好呀,我是xx公司的面试官,感谢你参加我们本次的面试,请先做个自我介绍吧!”

“面试官你好,巴拉巴拉巴拉巴拉”。

中间省略一堆项目的介绍和提问。小编真的挺认真对待第一次当面试官的,只要是简历上写了,小编都问了,但是好像面试者不太开心。。。。。。。

下面我们直奔这篇文章的主题

"嗯,我看你项目经历还不错,那我们再聊一聊Java基础和常用框架吧,你可以先说一说Spring单例模式下Controller层为什么能多线程同时处理请求参数"

“嗯...... ,因为加锁了。” 面试者答道。

“加锁了...那在什么地方加锁了呢?具体体现在哪里?”

"嗯...... 这个我还不太了解,我回去再看看源码。你能给我点思路吗?"

其实面试到这里也快结束了,但是小编还是给面试者解释了一下这个问题。

像我们以前在不用spring的时候,写一个对外的接口,要先继承 HttpServlet 类,去重写doGet和doPost方法,tomcat会在接收到一个socket连接的时候,将其请求参数封装,并调用这个doGet或doPost钩子方法(这里我们只说这两种常用的,其他的PUT HEAD等方法这里不提了)。 调用流程如下。

第一次做面试官:说说Spring单例模式下Controller层为什么能多线程同时处理请求参数?_加锁

其中 FrameworkServlet.processRequest()方法会将你的入参放入到一个ThreadLocal里,这就解决了单例Controller在多线程下同时处理请求参数的问题。 第一次做面试官:说说Spring单例模式下Controller层为什么能多线程同时处理请求参数?_加锁_02 因为ThreadLocal是线程独有的,在这里不会出现线程安全问题。

解释完这些后,小编很礼貌的和面试者说。

“我们今天的面试就先到这吧,我们会在本周内给你答复。”

微信搜一搜:云下凤澜 和小编一起聊一聊最新面试题

举报

相关推荐

第一次做接口测试用例

0 条评论