最近面试了多家互联网公司,最终收到了阿里offer,面试前在网上也搜集了面试题目,但有些不是过时的,就是题目杂乱,归纳不系统。 这次面试过后,我把面试上阿里的面试过程整理了一下,当做是一个总结,后来有朋友问我要面试记录,索性发布出来,跟大家一起分享。
因为之前有同事面试过京东、美团、滴滴等大型互联网公司,将面试题目整理好分享给我,如果大家感兴趣的话,推荐大家关注微信公众号Java资讯库,里面整理有算法面试题、BAT面试题以及面试技巧等。
一面
一面没有技术面直接就是组长面,首先是自我介绍,之后问了项目内容,我就说了下即时通讯和视频加工两个模块。他让我画出模块的架构图,这个建议大家准备一下,阿里和百度都有要求应聘者画模块图考察应聘者的开发层次和思路。本人没什么准备,不过当时设计评审时的UML还记着,就把模块图和类图画了下。
面试官又问,有没有遇到困难;我说有,性能瓶颈、卡顿的问题、瞬时信息量过大导致的UI卡死;他就问如何解决的,我说由实时刷新改为定时刷新;他问还有没有更好的实现方式,我回答有用任务队列。
我们又争论了下任务队列的设计应该用先进先出还是后进先出。这时候本人已经忘记是来面试的了,只想争赢,语速越来越快,声音也越来越大。他质疑我这个机制在效率调优上没有意义,因为系统会进行cell缓存;我说在中间的时候系统缓存可以生效,在最底部的时候就失效了,就会卡顿。最后还是我争赢了,时间就这么不知不觉中过了一个小时。
问通讯消息腾讯是如何做的,我说不知道我猜测是这么做的巴拉巴拉;问了我滤镜的使用和原理,如何美白,我说修改OpenGL的值就可以了,问如何进行视频合成,这个很简单把视频和音频轨道抽出来再用composition合成就可以了。问了下加水印、也是从文件中把视频轨道layer抽出再把图片layer加在这个layer上就可以了。
把开始时间和持续时间、帧率设置好就ok了,又问了下为什么来面试,一面官最后问我工作地点。
二面
一面结束让我去休息之后是二面,二面的面试官很nice。让我做自我介绍之前竟然先做了自我介绍,他负责的部门是核心部门。
面试的内容跟一面差不多。让我在白板上画我设计的系统架构图之后就是讲解,问了我的职业规划,我说现阶段还是想写代码。他问多久,我说2年吧,又问我对管理岗位怎么看,我说一个好的管理首先要能帮助组员解决问题,我现在水平还达不到这个境界,想多写点代码,代码量上去后设计能更合理一些,像这个设计当时有几个优化点没考虑到,有点遗憾。面试官问我有什么问题之后,我就询问了下他们部门的情况和企业文化,面试官好像比较满意,就让我去hr面,还特别强调就是跟hr聊聊不算面试。
hr面过程不表,就是问了下杭州房价问题,问我能不能来杭州发展,我说我考虑下,还不知道你们会不会录用,闲扯了半个小时,就打道回府了。3天后收到阿里的offer通知介绍,给的薪水又一次超过了本人的心理预期,还有本人一直梦寐以求的期权。
阿里的面试跟腾讯百度都不同,感觉更注重项目实践一些。总结来说BAT的技术面都差不多,只要把内功和外功都修炼好了再配合点实战经验基本上都可以应付三大的面试了。
面试的核心流程
技术一面、技术二面(组长面)、总监面、hr面,腾讯会多一个经理面;但是一般总监认为可行的人,9成的应聘者都会通过经理面的,除非发现严重的撒谎行为;hr面就是走过场,刷人的机率基本上为零。以前招聘过一个同学,hr想刷掉,理由是没有大公司经验,被我们组长一顿叼,说这个人各方面都很适合又踏实,如果你们觉得这个不行你们就要负责招一个你们认为行的,否则我们工作做不下去了,hr就软了。后来事实证明,这个同事工作完成的相当好,人的能力跟公司大小没关系。最难的就是二三面,人也基本上是这两面中刷下去的,大家一定要小心。我个人的经验来看,总监越严肃通过的机率越大,越客气就越危险。
面试准确讲不应该叫面试应该叫面谈,就是interview,劳资双方坐下来谈谈聊聊,互相了解。我们程序员作为技术工作者不是去求职的,只是去看看你的机会,你可以保留你的职位,我保留我的做事方法。
面试题目
-
ThreadLocal有什么缺陷?如果是线程池里的线程用ThreadLocal会有什么问题?
-
类的加载机制,为什么要用双亲委托?如何打破双亲委托加载机制
-
如果有一个100万的qps项目,你会从哪些方面考虑系统的设计?
-
你平时经常用到的设计模式有哪些?
-
熟悉Reactive开发模式吗?
-
你熟悉的分布式技术有哪些?了解他们底层的实现机制吗?
-
Springcloud 各个组件的运行机制是什么?
-
TreeMap与TreeSet实现原理是什么?
-
Array和ArrayList的区别?
-
JVM的数据区有哪些,作用是什么?
-
JVM堆内存结构是怎样的?哪些情况会触发GC?会触发哪些GC?
-
数据库你们是怎么优化的?
-
synchronization 和Lock有什么区别?
-
用过反向代理服务器吗?用来做什么?nginx负载均衡有哪些参数?
-
你熟悉的消息对列中间件的实现原理是什么?和其他消息中间对比,有什么优势?
-
Poll与ePool的区别?
-
BIO与NIO有什么区别?
-
手写代码题,不能是伪代码,能编译通过: 有一个变量list,元素存放集群的实例个数,有一个变量batch批次,根据批次均匀部署应用到集群的所有实例。
-
你的职业规划?年薪期望薪资?
关于Java行业前景
随着IT培训业的持续发展和大量的应届毕业生进入社会,Java程序员面临的竞争压力越来越大。那么,作为一名Java程序员,怎样努力才能快速成长为一名高级的程序员或者架构师,或者说一名优秀的高级架构师应该有怎样的技术知识体系,这不仅是一个刚刚踏入职场的初级程序员,也是工作三五年之后开始迷茫的老程序员,都必须要面对和想明白的问题。
为了帮助大家少走弯路,我请一线互联网工作过的同事总结出一套技术体系,由于内容庞大,特整理出一套视频。主要是针对BAT一线大型互联网公司的面试,涵盖Java工程化、高性能及分布式、性能调优、Spring、Netty源码分析和大数据等面试技巧,想要了解详情的可以加入Java后端技术群:819940388,免费的大型互联网Java技术视频分享给大家。
原文链接:my.oschina.net/u/3938812/b…