【回馈牛客】阿里中间件Java岗4轮技术面面经
一面
一面问了大概50分钟
问天池比赛
问项目,问项目使用的技术,项目中的并发操作等
顺势顺势问我Java的锁,我介绍了对象锁,队列同步器。问我线程怎么得到锁,我介绍了队列同步器获取锁的方法,应该再说对象锁的获取方式,现在想来,我当时没理解过来,忘了对象锁头。
问我接口和抽象类的异同,抽象类有没有构造,我说有,但不确定。面试官还是很亲和的,接着问我父类没有默认构造器,子类构造能否不显示调用,我说不能,因为一定会调用默认构造,但父类没有。这时他再问我,抽象类要是没有构造器,行不行,我说不行,子类不能隐式构造了,面试官非常循循善诱,我很感谢他。
问我jvm内存布局,我说的很清楚,包括1.8的方法区的改进。问我gc,回答的还行,但没有说g1,应该加上去的。
问我spring的框架,我说了beanfactory和appcationcontext架构。问我beanfactory和factorybean,我说反了。问我spring mvc的架构。
二面问了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在闭锁,重入锁中的应用。
问自动化为啥这么多人搞计算机=。=
阿里面试给我最大的感觉就是面的轮数多,另外基础也问的很多。因为面的是中间件吧,WEB方向基本没有问,当然我也没有学过哈哈,感觉还是很幸运的。在此献给大家。之前也是看了很多牛客的面经,算是回馈牛客啦。 #面经##阿里巴巴##Java工程师##秋招##内推#