Javajava面试Java 杂谈

阿里中间件Java岗4轮技术面面经

2018-08-31  本文已影响8人  java面试笔试

作者:碰碰猪

来源:牛客网

从7月5号第一次面试到8月6号HR面,最后8月24号收到录用意向书,将近两个月的时间。很高兴将我的经验分享给大家。

一面(一面问了大概50分钟)

问天池比赛

问项目,问项目使用的技术,项目中的并发操作等

顺势顺势问我Java的锁,我介绍了对象锁,队列同步器。问我线程怎么得到锁,我介绍了队列同步器获取锁的方法,应该再说对象锁的获取方式,现在想来,我当时没理解过来,忘了对象锁头。

问我接口和抽象类的异同,抽象类有没有构造,我说有,但不确定。面试官还是很亲和的,接着问我父类没有默认构造器,子类构造能否不显示调用,我说不能,因为一定会调用默认构造,但父类没有。这时他再问我,抽象类要是没有构造器,行不行,我说不行,子类不能隐式构造了,面试官非常循循善诱,我很感谢他。

问我jvm内存布局,我说的很清楚,包括1.8的方法区的改进。问我gc,回答的还行,但没有说g1,应该加上去的。

问我spring的框架,我说了beanfactory和appcationcontext架构。问我beanfactory和factorybean,我说反了。问我spring mvc的架构。

问我还接触过哪些开源,我说maven和netty,Hadoop,spark等。

笔试1

一面之后,面试官让我做了一套卷子,不是统一的,应该是面试官自己出的题,好多是截图来的哈哈。分为选择题和问答题。选择题主要是JAVA基础和JVM调优。JVM调优我不是很了解,JAVA基础问的也是挺难的。问答题比较普通,我记不清了。。

二面

二面问了1个小时左右

问我天池比赛等等不表。

问设计模式,让我说五种设计模式。然后问我单例模式的实现方式,加锁实现的细节(DLC)。

问我分布式下,多台机器统一id问题。我说zookeeper实现,本地机器码+中间件队列实现。然后问我有没有可以不用中间件队列,我说可以本地机器码+时间序列。问我同一台机器多个进程怎么办,我说本地机器码+本地同步递增id。

问我递增id实现。我说用信号量。问我Atomic行不行,我说可以,CAS。问我CAS详细,问我1.8有没有别的方法,我不清楚。问我乐观锁悲观锁区别,我解释并说java原生锁性能就很好,解释了原生锁的膨胀。问我两者的使用场景不同,我说主要看冲突多不多。

问我开源框架学习。我说spring和netty,以及阅读许多java源码。

问我zookeeper主机设置技巧,问我其事务实现,我说单数主机设置,master-slaver模型,统一事务时使用Raft算法,是paxos的特殊化实现。问我paxos详细步骤,我介绍了统一步骤。问我什么情况下提议者可以进入第二步,我说更大的,并且说了paxos的不足,实际工程中使用的改进multi-paxos等。

问我单机两进程,B必须在A结束后才能进行业务,怎么同步。我说zookeeper临时节点;我说信号量,问我实现,不清楚;我说让A占用某一文件句柄,B检查该文件的使用者,问我linux是怎么实现的,我不清楚;我说用socket模型,让Abind在某端口,当A结束时,会释放该端口,并且异常下,OS也会关闭该端口,缺点是有延迟。问我延迟多少,我说应该是以s为单位,具体不清楚。问我在哪儿修改,我说不知道,我linux使用不多。

最后,介绍了这个部门主要在深圳,问我意愿,我说no care。问我为什么选中间件,我说,因为cool,中国顶尖。

我问面试官对我的学习建议,让我多看开源框架,多看实际工程结构。我问面试评价,能否过,他说等通知。

三面

三面的面试官和我说,是二面的面试官请他来问下我的算法部分,因为我的研究生的研究的主要是优化算法,所以请他来考察下。没有自我介绍,直接是询问我的算法。

中午吃饭前打来的电话,我第一个没接到,第二个才接到。

从面试的声音听,面我的几个面试官都挺年轻的,态度也很好,我的感觉很好。

没有自我介绍,面试官直接说,是来考察我算法这块的。一开始我还以为是数据结构与算法这类,心里还有点慌,后来发现是针对我简历上吹的智能优化算法来问的,就没那么紧张了。

问我对一个问题,如何选择算法。我说一定要先分析问题的特点,找到问题解的特性,比如分布特性,聚集特性等,然后,选择适合的算法来求解。并且,有条件的情况下,多做对比实验来验证自己的方法优劣。

问我遗传算法的介绍,我用比喻介绍了遗传算法。问我遗传算法的关键步骤,我说一是交叉变异的算子设计,这影响到解的完备性;二是选择规则的确定,这也影响到进化的快慢等。

问我遗传算法的不足,我说了解的局部性,和无法保证最优解。问我解决办法,我说了几种常用的拥挤度,分级选择,增大随机性等方法来保证解的多样性。

问我有没有使用机器学习等,我说,正在目前的遗传算法中加入机器学习的部分,对每代进行数据分析云云。问我有没有使用深度学习,我说目前我们这个领域还没有相关论文,我们也是在初步的尝试云云。

问我以后想偏向算法还是开发,我说我个人更喜欢开发,因此也参加了很多比赛。

最后说,看我的笔试,如果可以就继续下一轮。

笔试2

三面后,面试官说我没有笔试,我说笔试了=。= 后来面试官又说,没有编程笔试,需要补一个。于是给我出了一个24H编程的题,不难,在此把题呈上。

题目:有10个文件,每个文件有1000万行,文件内容的每一行为一个整型数字;需要,写一个程序,将所有数字排序,分为10个文件输出,如0号文件包含前1000万个数字,1号文件文件包含1千万-2千万之间的数字,依次类推。

限制:如果使用java,-Xmx需要设置为32MB;其它语言也需限制内存为32MB。

要求:正确输出 使用多线程加分

编写时长:24 小时

我主要使用了分而治之,多线程处理的方式。注意下同步即可。

交叉面

交叉面,达摩院人工智能实验室的。

自我介绍

问我天池比赛,问我项目,问我研究方向。

问我平时学习方式,最近学习的内 容。

问AQS,问AQS实现原理。问AQS在闭锁,重入锁中的应用。

问自动化为啥这么多人搞计算机=。=

让我多推荐人去他们AI实验室~

小结

阿里面试给我最大的感觉就是面的轮数多,另外基础也问的很多。因为面的是中间件吧,WEB方向基本没有问,当然我也没有学过哈哈,感觉还是很幸运的。在此献给大家。之前也是看了很多牛客的面经,算是回馈牛客啦。

公众号:javafirst

上一篇下一篇

猜你喜欢

热点阅读