- 不能问一些简单的弱智白痴问题,必须要有深度,绝对不能让“大牛”感到:“面试官的问题很Low!”的感觉。
- 尽量少说话,不然万一问了“大牛”一个问题,“大牛”回答后,反问我一个,我回答不上来,那更糗。
- 还有几个,当时想出来的,现在想不起来了。。。。
综上,我上google,找技术群,搜了很多java和Android面试题,然后剔除那些我自己搞不太清楚的问题,战战兢兢的准备了几个自以为既不冷门,又稍有深度的问题。
面试过程: 我: 简述Handler消息机制。 “大牛”: 嗯? 我: (一定是问题没描述清楚,怎么上来就这么紧张,嗯,放松)就是说一下Handler发送和接收消息的实现,尤其是Message的消息载体的工作流程。 “大牛”:这个,额,不太清楚。。。 我:(赶紧换一个方向)Service和IntentService有什么区别? “大牛”: Service和什么? 我: IntentService。 “大牛”: 没用过。。(他开始有点不好意思) 我: (哦,没事,这个可能确实太冷门了)那Service和Activity之间的通讯怎么实现? “大牛”: 这个,通信,额,你指的是? 我: 就是传值,比如Service里面某个后台任务结束,怎么通知当前活动Activity,并且把结果传递出去? “大牛”: 哦,这个,啊,想想。。。 沉默10s后。。。 我: 额,比如用广播的方式?(我都尴尬的主动给了他一点提示) “大牛”: 哦,对,广播,Broadcast之类的。 我: 那还有其他方式吗? “大牛”:嗯,广播,额。。。(又是10s后)比如? 我: 接口回调。。。(算了不纠结这个,他知道广播,那顺便问个这个),那Context 的sendBroadcast和LocalBroadcastManager 的sendBroadcast有什么区别? “大牛”: 这个没听说过。。。。。。。
后面的问题,我从MVP、MVVM等流行结构框架问到多线程同步,然后再问点击事件分发,到自定义View,再聊动画效果实现,基础的ArrayList、HashMap底层实现,final static关键字用法,进阶的设计模式里面单例模式和观察者模式的实现,java类加载、内存分配,他没有一个问题能确确定定的回答出来,要么“不知道”、“没用过”,要不支支吾吾的说不出个123。
哦,对了,聊的过程中,他反复说自己用过什么什么第三方的库:什么ImageLoader、什么OKgo、什么Pull2RefreshListView等等等等显得自己很能干。
我问他:有没有开源过什么自己写的库? 他说没有。那我问他:读过ImageLoader的源码吗?ImageLoader的本地缓存机制是怎么实现的?他说不知道。我告诉他,你说的所有的库,我都用过,并且绝大部分我都看过源码实现,另外,像ImageLoader、Pull2RefreshListView这种库,我工作两年后就自己实现过简易的版本,还分别做过扩展。
最终最终我确定这个所谓的10年工作经验的“大牛”,就是网上那种“一个经验用了N年而不是有N年经验”的人。
回过头我又仔细看了看他的简历,10年过程中,这个人换了8家公司,最长的一家呆了不到2年,最短的半年就不干了,简历里也没有自己独立完成过的项目,简历上大部分所谓的Android项目,全部都是基础控件的简单罗列,没用过设计模式,没用过分层框架设计,跟我第一年参加工作写出的东西一个鸟样。
上面写了我面试别人的一次经历,谈不上高质量,但是我感觉我的问题应该算是基础并且覆盖面广的了,后期又面试了几个人,说实话都不尽如人意,这些面试者都有一个共同点:任何他们知道的知识点都是停留在知道、用过的层面,具体实现和怎么扩展优化都答不出来。
资源分享
点击:
**《Android架构视频+BAT面试专题PDF+学习笔记》**即可免费获取
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
2020年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2021年万事大吉。