作者:浩南
前言
前段时间从某小厂离职,转投阿里钉钉,因简历优秀,很顺利地拿到了面试通知,但之后的进展却让我怀疑人生,或者说让我很懵逼。尽然被阿里钉钉一面就被怼得体无完肤?甚至让我开始怀疑自己,技术是不是菜的抠脚,工作了几年没有任何进步呢?
但我还是相信自己是有实力的。事后经过朋友推荐,去了美团面试,面试美团的过程极为顺利,很快就拿到了offer。这让我更弄不懂了,3面拿美团offer的水平,面试阿里钉钉居然一面就被吊打?
索性,想分享一下这次的面试经历,让大伙好好帮我参考参考,出一出主意!另外,我下文还整理了一些自己的学习文档,需要我分享的朋友,可以直接去我【GitHub 地址】:https://github.com/733gh/Android-T3 查看
阿里钉钉一面(面试时长80min)
1、 自我介绍,对自己项目的介绍,架构图呈现
2、因为说自己以后的发展方向是音视频,所以问了我用过哪些现有框架
3、项目中的一些优化问题,MVC -> MVP,Handler的内存泄漏情况分析等,对MVP和MVVM的理解。
4、项目中的第三方库选择的问题,因为简历中写了我对第三方库选择的问题,比如选ObjectBox和greenDao的问题,图片加载框架问题
5、HashMap和HashTable,引申ConCurrentHashmap的深入,version1.7和1,8的区别,以及高并发下HashMap发生的问题
6、四大启动模式,以及场景对应
7、 Handler的机制介绍,不存在消息时的IdleHandler的运作机制,为什么不能在子线程初始化问题
8、设计模式中的单例介绍,使用场景(Okhttp的Seesion存储等等),在线编写
9、快排算法
10、OkHttp的源码分析,及整体架构的流程图绘制
11、四大组件的完整介绍,及深入,答了IntentService、LocalBroadcast
12、 四大引用的问题和MVP框架相结合进行回答
- 网络中的响应码对大体进行回答,具体回答了200、404、500、304等
14、 View绘制流程问题,如何不使用xml,来实现中间位置的定位
15、 事件分发机制流程讲解,以及如何实现单击事件和长按事件的判定
16、关于为什么选用mqtt协议的问题,优势,原理等等(没答上来,只说针对性做过测压,以及oceanlink和mqtt的对比)
美团3面:2轮技术面+HR面(美团真经,值得参考)
美团面试过程很顺,一面问得比较基础,所以整个人都还挺自信的一个状态,面试官也全程是一个比较“nice”的问题方式,所以比较轻松,因此面试得顺利,拿offer也快。以下是美团面经分分享。
美团一面
1、 进程和线程
2、 线程池 / 怎么停止线程 / 新建一个thread大概会消耗多少内存空间
3、 get/post区别
4、 客户端请求一个接口 会经历什么过程
5、 LinkedList/ArrayList
6、 主键/外键
7、 equals/hashcode 如果让hashcode返回一个random的数字会有什么问题
8、 算法:平衡数
9、 死锁 必要条件/怎么避免
10、 泛型
11、 怎么攻击https
美团二面
1、mvp / mvc
2、面向接口编程
3、控制反转
4、泛型
5、怎么防止https攻击
6、为什么会有哈希,它在其他领域的应用了解吗
7、用oop的思想写个树的遍历
美团三面
1、请你自我介绍一下
2、怎么学习的
3、除了IT,平时喜欢做什么
4、怎么领导一个团队
5、你对未来的职业规划?
大厂面试题答案
实际上,我并不是一个幸运的人,而是一个努力的,今天的这些,也全是靠我的努力得来的,尽管阿里云一面就凉,但能进入华为,也算是我多年的累积,以下就分享一下个人的一个学习方法和经验总结。
学习方法及经验总结
以下所展示的全部学习文档,均可以免费分享,可直接去我 Github 查阅!
(1)多刷题
自己多刷一些面试题是非常重要的,即使是在自己不需要面试的情况下,也要经常了解现在的大厂小厂面试都会问一些什么?现在比较流行的技术是什么等等诸如此类。那么我是如何刷题的呢?刷题主要分为Android技术(内含Java基础)以及算法两大类,搜集了目前比较新的一些题册,包括【Android面试指导】以及【算法刷题】,如算法方面就有LeetCode。
Android面试指导:
算法刷题LeetCode:
(2)多看看技术牛的实战书
实际上很多人目前的一个状态是缺乏实战经验,或者说是不知道该如何上手实战。那么,看一些技术比较过硬的大牛写的实战书籍对自己是很有好处的,多少能够学习到一些实战经验。目前我手上整理到的实战书籍也算是比较全面,包括阿里巴巴Android开发手册、美团技术团队项目实战、Android源码设计模式解析与实战 、Android架构师手册_建模与图形思考、APP架构之后端接口设计方案之初探、Android开发教程笔记完全版等文档。
(3)多交流,多思考
最后要强调的重点就是——多交流,多思考。现在很多程序员陷入一个怪圈,整天只会在办公室里机械的工作,实际上程序员要想有很大很明显的进步,交流是少不了的。那么怎么结识比自己厉害的技术牛呢?实际上渠道有很多,我个人的做法是:
①看一些技术直播,在直播间交友;
②加一些技术性的交流群,多交流问题;
③参加一些线下活动,如面基、研讨会等等。
写在最后
学习如攀登,虽然有身心的疲惫,但更有沿途的优美风光,更无论登顶之后的极目远眺。之后,你总会感叹曾经的付出是值得的。
以上所展示的面试题也好、学习文档也罢,均可以免费分享给大家,有需要的小伙伴,可直接去我 Github 查阅!