本文只对面试过程分享,至于简历编写、具体重点知识复习等不做讨论
一、面试情况
笔者一共经历了4轮面试,其中:
- 一面(电话技术面)
- 二面(电话技术面)
- 三面(视频技术面)
- 四面 (技术总监+HR交叉视频面)
阿里的流程相对而言较慢,需要足够的耐心才行!
二、面试题
部分已经遗忘,请谅解!
一面
- 讲一下你最有印象的项目(代表性),过程中会穿插一些子问题;
java
wait api
:在main
函数中 调用string.wait()
会出现什么情况,为什么?java nio
知识linux
条件变量- 操作系统相关命令是否熟悉,进程间管道通讯
http GET POST DELETE
方法含义,PUT
和POST
区别(幂等 | 非幂等)- 网络层协议:
tcp&udp
,https
握手过程? 如何防攻击的 - 算法:堆排序实现、两个超大文件求交集
- 手机来电显示的推销黑名单是如何实现的?
二面
- 根据简历上做过的项目发问。 e.g: 为什么要自定义实现
ImageLoader
,LruCache
实现原理;LinkeHashMap
是如何保证有序的?Bitmap#recycle
到底释放了啥?Handler
原理,Looper#loop
之后,消息是如何插入到消息队列的? - 组件化解耦 如何实现的?
- 进程保活机制,谈了下
Jobscheduler
。根据现有的方案如何更加优雅实现保活(不流氓) - 长连接这块有积累吗?
- 网络库是如何封装的,实现了哪些功能
Http
缓存,实际项目中用到的缓存策略- 内存泄漏,
java
几种引用方式,jvm
内存模型,java
堆和java
栈的区别,程序计数器有多少个? - 进程间通信?Android为什么用
Binder
- 美团的
walle
实现原理 Arouter
原理Tinker
热修复,为什么选择Tinker
, 热修复基础原理Activity
Window
View
三者之间关系EventBus
原理- 混合式开发,
js
和java
互调 ,了解哪些混合式开发框架,RN的优缺点
三面
重点挖掘所做项目本身,这里就不一一列举了
- 对所做项目深入挖掘进行提问 e.g
jenkins
- 热修复原理:类加载方案、底层替换方案、
Instant Run
方案 - 新技术、新动态的了解情况
- 一致性hash算法原理
- 数据结构:动态规划 实现整数序列的最大连续子序列问题
- 团队的一个情况介绍,组内 意见不一致,如何解决的?
四面
- 总监:也会考察项目本身、沟通能力、解决问题能力
- HR面:(不过多阐述)
以上的一些面试题,仅供参考,每个人情况不同,所问的肯定也不一样!!!
三、总结
面试前的准备
- 纵向深入、横向拓展。除了Android专业方向外,时下的热门技术(e.g 混合式跨平台框架 ....)也需要关注、学习,保持一个拥抱变化,客观看待、接纳的心态;计算机原理、网络,操作系统也需要关注,这些基础学科还是很重要的,关于这点很多人持有不同看法,这里笔者搬运一个小马哥演讲视频 ,详细戳我
- 抛弃掉
一口吃成大胖子
的思想。部分面试者想尽可能多的把一些知识点复习完,其实这不太可能实现,所以心态要摆正! - 简历上的项目需要重点关注
- 模拟面试,可以找一些信得过的小伙伴进行一次“演练”;视个人情况而定
- 小试牛刀。大部分面试者都会找一些小公司“练练手”找找感觉,然后再去自己心仪那家面试。司空见惯,值得一试!
面试后的体会
- 心态很重要,偶尔紧张怎么办?正常现象,即使面试失败,就当作一次学习的经历罢了!
- 不要轻易说“不知道”(前提:一知半解的问题)。尽可能把你所了解的表述出来,有些面试官可能会引导你去思考。实在不懂得就主动去请教
- 尽可能的主动,除了回答好问题本身,也可以适当对知识面进行拓展
- 适当表达出你想加入贵公司的意愿
鄙人的一些挫见,如有不到之处,望道友海涵