- 一位资深Java的阿里系公司实战面试经验,套路还是面试官的多
- 来源:Java技术驿站
精品专栏
马老师说过,员工的离职原因很多,只有两点最真实:
1、钱,没给到位
2、心,受委屈了
以下是占小狼的一些实战面试经验分享,希望能帮助你们顺利拿到理想Offer!
项目经验
面试官在一开始会让你进行自我介绍,主要是想让你介绍一下自己做过的一些项目,看看你对这些项目的了解程度。
因为很多人简历上写的项目并非都是从头到尾都参与的,有些只是参与并实现了其中的一些模块而已,或是接手维护别人的项目,所以在你简历上所写的和面试过程中所说的项目经验,你自己必须能够了解来龙去脉。之后,面试官也会根据你的项目描述,对项目中的实现原理,或为什么要这样实现进行提问,如果你木讷住,不知如何作答,只会大大降低面试分。
面试场景:
面试官:(拿着简历)讲讲你最近做的这个项目
我:
&……%¥#`&¥@%¥!
,说了一大通PS:不知道面试官听进去多少,面试官会挑他熟知的知识点进行提问。
面试官:你说这个项目中用到了netty,能大概讲讲netty的线程模型么?
我:(幸好我看过netty的源码)netty通过Reactor模型基于多路复用器接收并处理用户请求(能讲就多讲一点),内部实现了两个线程池,boss线程池和work线程池,其中boss线程池的线程负责处理请求的accept事件,当接收到accept事件的请求时,把对应的socket封装到一个NioSocketChannel中,并交给work线程池,其中work线程池负责请求的read和write事件。
PS:通过口述加画图的方式,把请求的执行过程大概描述了一遍,时间有限,也不可能把所有的细节都说完,挑重点讲,挑记忆深刻的讲。
面试官:嗯,理解的还挺深入的...那你在做这个项目时有没有遇到什么困难,或者是觉得有挑战的地方?
我:因为之前确实碰到了这个问题,当时做这个项目时,对netty的不过熟悉,把请求的业务逻辑放在work线程池的线程中进行处理,进行压测的时候,发现qps总是上不去,后来看了源码之后才发现,由于业务逻辑的处理比较耗时,完全占用了work线程池的资源,导致新的请求一直处于等待状态。
PS:这时面试官想让你自己出题自己回答了,所以一定要回答,不回答就突显不出你这个项目了,要是这个问题没有准备过,只能临时发挥了,当然我就是属于临时发挥的
面试官:那最后是如何解决的?
我:最后把处理业务的逻辑封装成一个task提交给一个新建的业务线程池中执行,执行完之后由work线程池执行请求的write事件。
面试官:好的,你知道nio中selector可能触发bug么?
我:嗯,对的,selector的select方法,因为底层的epoll函数可能会发生空转,从而导致cpu100%。
面试官:那如何解决该问题?
我:这个问题在netty已经解决了,通过&^%&$^(把netty的解决方案说一遍)
面试官:嗯,对了,你们这个项目有给自己定指标么?
我:有的……把自己项目的指标说了一通,如何进行AB实验,如何迭代优化指标
面试官:嗯,好的 ,项目的问题先到这里,我们来考察一下java的基本点吧。>
如上只是本人所做的一个项目,当然了,具体项目具体分析,也不是每个面试官问的点都一样。如果面试官不懂netty,自然会挑别的问题进行提问,不过尽量尝试着把问题往自己熟悉的方向去靠。
面试知识点
1、线程池
线程池的实现原理,这个知识点真的很重要,几乎每次面试都会被问到,一般的提问方式有如下几种:
1、“讲讲线程池的实现原理”
2、“线程池中的coreNum和maxNum有什么不同”
3、“在不同的业务场景中,线程池参数如何设置”
面试场景:
面试官:平时线程池用的多么?
我:嗯,我的`项目中就用到了。
面试官:那好,你讲讲线程池的实现原理
我:能给我笔和纸么,我画图分析给你看看,……假设初始化一个线程池,核心线程数是5,最大线程数是……
面试官:嗯,好的,你继续...
我:在纸上画了正方形,这个代表一个线程池,初始化的时候,里面是没有线程的
面试官:嗯,好的,你继续...
我:又画了一个细长的长方形,这个代表阻塞队列,一开始里面也是没有任务的。当来了一个任务时,在正方形中画了一个小圆圈,代表初始化了一个线程,如果再来一个任务,就再画一个圆圈,表示再初始化了一个线程,连续画了5个圆圈之后,如果第6个任务过来了...
面试官:嗯,好的,你继续...
我:这时会把第6个任务放到阻塞队列中..
面试官:嗯,然后呢?
我:现在线程池中不是有5个线程了么,如果其中一个线程空闲了,就会从阻塞队列中获取第6个任务,进行执行..
面试官:嗯,对的,那如果任务产生的速度比消费的速度快呢?
我:如果线程池的5个线程都在running状态,那么任务就先保存在阻塞队列中
面试官:如果队列满了,怎么办?
我:如果队列满了,我们不是设置了最大线程数是10么,而线程池中只有5个线程,这时会新建一个线程去执行不能保存到阻塞队列的任务,然后我又在正方形中画了5个圆圈。
面试官:那如果线程池中的线程数达到10个了,阻塞队列也满了,怎么办?
我:这种情况通过自定义reject函数去处理这里任务了,舒了一口去,以为问完了...
面试官:好的,那如果运行一段时间之后,阻塞队列中的任务也执行完了,线程池中的线程会怎么样?
我:...这个好像超过核心线程数的线程会在空闲一段时间内自动回收...因为有点不记得这个逻辑了,回答的有点虚...
面试官:好的,那这种情况在什么场景下会发生?
我:这个...那个...我好像没有遇到过这样的情况……
面试官:嗯,好的,你回去之后再好好想想。
我:........
PS:面试真的会紧张,导致很多明明知道的东西却全忘记了。所以一定要放松放松。而且有蛮多面试官其实会很耐心,会引导你,但也会沿着你的思路一直细问下去,所以一定要确保自己思维逻辑清晰。
我居然忘记了“秒杀”这个场景!
2、锁的实现
在关于锁的面试过程中,一般主要问Synchronized和ReentrantLock的实现原理,更有甚者会问读写锁。
面试场景
面试官:都了解Java中的什么锁?
我:比如Synchronized和ReentrantLock...读写锁用的不多,就没研究了。
PS:我就怕被问读写锁,因为一直没去看。所以,对一些自己不了解的话题,尽量少说一点,也坦白承认自己不会。
面试官:那好,你先说说Synchronized的实现原理吧。
我:嗯,Synchronized是JVM实现的一种锁,其中锁的获取和释放分别是monitorenter和monitorexit指令,该锁在实现上分为了偏向锁、轻量级锁和重量级锁,其中偏向锁在1.6是默认开启的,轻量级锁在多线程竞争的情况下会膨胀成重量级锁,有关锁的数据都保存在对象头中……
面试官:哦,嗯,理解的还挺透彻,那你说说ReentrantLock的实现吧...
我:ReentrantLock是基于AQS实现的
面试官:什么是AQS?
我:在AQS内部会保存一个状态变量state,通过CAS修改该变量的值,修改成功的线程表示获取到该锁,没有修改成功,或者发现状态state已经是加锁状态,则通过一个Waiter对象封装线程,添加到等待队列中,并挂起等待被唤醒……
面试官:能说说CAS的实现原理么?
我:CAS是通过unsafe类的compareAndSwap方法实现的(心里得意的一笑)
面试官:哦,好的,那你知道这个方法的参数的含义的么?
我:这个方法看的时间有点久远了,第一个参数是要修改的对象,第二个参数是对象中要修改变量的偏移量,第三个参数是修改之前的值,第四个参数是预想修改后的值....
面试官:嗯,对的,那你知道操作系统级别是如何实现的么?
我:(我去你大爷...)我只记得X86中有一个cmp开头的指令,具体的我忘记了...
面试官:嗯,好,你知道CAS指令有什么缺点么
我:哦,CAS的缺点是存在ABA问题。
面试官:怎么讲?
我:就是一个变量V,如果变量V初次读取的时候是A,并且在准备赋值的时候检查到它仍然是A,那能说明它的值没有被其他线程修改过了吗?如果在这段期间它的值曾经被改成了B,然后又改回A,那CAS操作就会误认为它从来没有被修改过。
面试官:那怎么解决?
我:(有完没完了啊...我的心里是崩溃的)针对这种情况,java并发包中提供了一个带有标记的原子引用类"AtomicStampedReference",它可以通过控制变量值的版本来保证CAS的正确性。
面试官:嗯,好的,这个问题到此为止,我们再看看别的。 我:....我能喝口水么
3、ConcurrentHashMap
当考察数据结构时,面试官一开始会问HashMap的实现原理,当你说出HashMap并非线程安全之后,会让你自己引出ConcurrentHashMap,接着就可能开始如下的对话。
面试场景
面试官:谈谈ConcurrentHashMap实现原理
我:……基于分段锁的……,但是1.8之后改变实现方式了。
面试官:1.8啥方式?
我:……(把1.8的实现原理说了一通,其中提到了红黑树)...
面试官:能讲下红黑树的概念吗?
我:红黑树是一种二叉树,并且是平衡……%……¥……,
面试官:能讲下红黑树的……
我:打住,别问了,红黑树我只知道他是二叉树,比其他树多一个属性,其他的我都不知道。 面试官:好的,那换个,你知道它的size方法是如何实现的么?
我:size方法?是想要得到Map中的元素个数么?
面试官:对的....
我:我记得好像size方法返回是不准确的,平时也不会用到这个方法...
面试官:如果你觉得size方法返回值不准确,那如果让你自己实现,你觉得应该怎么实现呢?
我:(两眼一黑)等等,让我想想.....应该可以用AtomicInteger变量进行记录...嗯,对的,每次插入或删除的时候,操作这个变量,我得意的一笑...
面试官:哦,是么,那如果我觉得这个AtomicInteger这个变量性能不好,还能再优化么?
我:懵逼脸...(当时居然把volitile变量给忘记了)...好像没有了,我想不出来了...
面试官:哦,那回头你再看看源码吧,jdk中已经实现了...
我:哦,是么....
面试官:那今天的面试到此结束,我们后面会通知你。
我:……(结束专业用语)
教育
-
- 不要再问孩子“作业写完了吗?”
- 每一个幸福快乐的妈妈都在“母亲大学”找到了力量孩子一放学回家,你就急着问他,“你作业写完没”“没写完赶紧去写”......殊不知这句话背后,透露出多少你不知道的秘密。请全天下的父母记住一句话:“孩子不怕...
- 母亲大学
-
- 注意!涉及沈阳考区4万多考生!参加这项考试需持核酸检测证明
- 紧急通知:4月1日起沈阳地铁有重大调整!2021年度二级建造师执业资格考试于5月29日、30日举行。明日是最后一天,也是报考人数最多的一天,沈阳考区报考人数为40536人。沈阳市考试院再次提醒所有考生,参加考试必...
- 沈阳晚报
-
- 清华副校长怒批中国学生:你们这么优秀,去国外打工却很满足?
- 清华副校长施一公:我们有多少极其优秀的中国学生去了国外能脱颖而出的?这个比例非常小!每一年能考上清华、北大的学生也是几千人而已,就拿去年2020年来说,清华北大的招生人数一共也才7000多人,还包含了内地...
- 爸妈说事
-
- 请转到朋友圈!中考、高考生家长会感谢你的,这个对他们有用!
- 没有意外 就是成功——写给中、高考考生的家长们四年前我的孩子参加了中考,一年前我又成为一个没有节假日、没有周末的高三学生家长,陪孩子度过了高考。现在回想起来,还清楚记得那时的心情:每天仔细地操持着...
- 班主任研究会
-
- 人民日报:老师,从疲劳到癌症只需四步!请保重好身体!(再忙也要读一读)
- 2020年9月高考优秀作文专辑9月出炉,买买买!高考第一品牌语文月刊代码46-88每月一本定价12元。其中每年8月高考优秀作文点评专辑、9月高考试题分析专辑、12月最新高考分类练习专辑、4月最高高考冲刺AB卷二...
- 语文日刊
-
- 2021报考捡漏,这几所大学的分校,毕业证一样,报考分数竟相差50分
- 分校、分校区,虽然只是一字之差,但是证书的含金量天差地别。但是,有些分校毕业证书完全一样,录取分数却相差很大,今天慧姐就来盘点一下。一、概述校区,实际上就是同一所高校,并未单列招生代码,只是学生生...
- 高中学生家长慧
-
- 梁鸿鹰:翻看着发黄变脆的纸页|往事
- 1978年日记所见文|梁鸿鹰教育……就像是在土地上种庄稼。我们的天性好比土壤,我们的教师的训诲好比种子,对青年人的教诲就好比适时播种……——希波克拉底我们出生时所缺少的一切,成年时所需要的一切,都来自...
- 当代
-
- 一个都不少,全部考上大学!
- 点蓝色字关注“央视新闻”高考临近在许多高三学子紧张备考之际江苏扬州有一群学生,已被高校录取但这个成绩背后饱含着汗水与泪水因为他们全部都是聋人↓↓↓“单考单招”考试中班上10名学生全部上榜今年4月扬州...
- 央视新闻
-
- 男孩留遗言跳楼自杀:“对不起,我控制不住玩手机,你们生个更好的吧!”,想要毁掉一
- 中小学家长慧点击上方蓝字关注关注点击进入→在线教育,为孩子找一个优秀的辅导教师文 | 朗读君来源 | 朗读君英语(ID:langdujun170)手机好似一个杀手,随时在威胁着孩子们。几天前,看到一则新闻:安徽黄山的...
- 中小学家长慧
-
- 中考提前5分钟发卷子,竟然是让做这些的!
- 考了那么多试,各位考场达人是否认真思考过:为啥所有考试都是提前5分钟发卷?不研究,不知道,一研究吓一跳!万万没想到,提前5分钟发卷还有这等用处!考前5分钟用不好,考试全白考!到底这5分钟的正确打开方式...
- 袁意
-
- 江门市开展党史学习教育工作会议召开,省委巡回指导组到会指导
- 昨日,江门市开展党史学习教育工作会议召开,深入学习贯彻习近平总书记在党史学习教育动员大会上的重要讲话精神,认真落实中央决策部署及省委工作安排,传达省委党史学习教育巡回指导工作任务和有关要求,推动我...
- 江门发布
-
- 贵安新区公布2021年义务教育阶段招生方案
- 近日,贵安新区2021年义务教育阶段招生工作实施方案公布。详情如下:招生原则 (一)坚持依法办学原则。由贵安新区社会事务协调局、各乡镇人民政府和贵安教育管理处统筹,按照“公平、公正、公开”的原则,全...
- 贵阳晚报
-
- 关于选大学及专业的13条忠告,很专业、很走心!
- 随着高考的临近,大家越来越关注志愿填报的相关信息,今天分享一个家长对于帮孩子挑大学选专业的一些经验总结,并提出了13个忠告。内容稍长,但回答了对高考志愿的大部分困惑,值得细读。选择正确才能收获跟努力...
- 好课堂
-
- 王元:纯粹数学的美丽与哀愁
- 没有应用的数学才是好的好就好在它没有应用王元:纯粹数学的美丽与哀愁本刊记者/宋春丹发于2021.5.31总第997期《中国新闻周刊》5月14日,中科院院士、中科院数学所原所长王元在北京病逝,享年91岁。在中科院数学...
- 中国新闻周刊
-
- 北大教授吐槽学渣女儿:跟倒数第二名有很大差距!网友评论亮了
- “不辅导作业父慈女孝,辅导作业鸡飞狗跳。”近日北京大学教育学院副教授丁延庆一段吐槽女儿的视频火了。丁教授全名丁延庆,他6岁能背下整本新华字典,本科就读于北大,后来进入哥伦比亚大学学习,获得了教育学...
- 齐鲁晚报