最近跟我的一些读者交流,有一位读者的经历让我记忆深刻:
“有一次和大学同学聚会,和几个在BAT的同学聊了聊技术,发现自己在创业公司这几年,完全是吃老本的状态,没有什么机会精进技术,同样是工作了三年,和同学的差距越来越大”
我继续问他,他说真正让他受打击的是这个月的一次面试。
“面的是一个大厂,面试官问了很多问题,一大半的问题我都是一知半解,回答上来问题也是特没底。
大概回顾了这场面试:上来先是问了Java基础知识,自定义view,算法等等,这部分我还算准备的充分。第二部分开始复杂了,主要是底层、NDK、设计模式、调优方面的问题,像是如何检测一段代码的执行时间?滑动不流畅怎么处理??
我之前工作上经历的少,加上自己技术储备浅薄,到这部分时我就感觉自己快凉了。面试到最后,问了mvvm架构相关的,当时已经懵了,我只记得一个问题:让你做一个项目,怎么选择mvvm架构和MVP架构?我。。。。“
面完后他说,觉得自己在技术上欠了很多债,最惨的是,在这之前他根本不知道。
听了这位读者的经历,于是有了今天这篇文章。很多工作了1-3年的Android人,想够一够 3w月薪的岗位,但在底层技术上却有很大的问题:
毕业几年,表面上用过很多技术,但都没能深入学习,一年的工作经验,干了好几年。结果就是遇到实际问题时无从下手,最终还是走着普通工程师的道路,和高手的距离越来越远。
都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。
一面
1.自我介绍
2.应用启动流程,activity 启动流程,为什么要每个应用有一个自己的虚拟机,这个虚拟机和JVM的关系。
3.hashmap的基本原理
4.来说一说,在5.0以上和4.0加载dex时的方式有什么区别?
5.说一下你了解的Android虚拟机有哪些?
6.这两个虚拟机有什么区别吗?(上题说了ART虚拟机,dalvik虚拟机)
7.Handler持有Activity的引用会造成内存泄漏,那么如何避免?
8.ANR 的原理说一说
9.三次握手,四次挥手简单说下
10.okHttp的原理了解吗?使用时是如何对它封装的?
11.http和https什么区别?
12.算法题:双链表反转
二面
1.Acitivty的四种启动模式与特点。
2.广播使用的方式和场景以及广播的几种分类。
3.FrameLayout 、 LinearLayout 、 RelativeLayout 各自特点及绘制效率对比。
4.Android中的MVC、MVP模式。
5.App的启动过程。
6.Android怎么加速启动Activity。
7.Bitmap的四种属性,如何加载大图(inJustDecodeBounds)。
8.Touch事件分发机制和冲突处理。
9.Android IPC:Binder原理。
10.Class文件结构(常量池)。
11.Java内存模型结构(主内存和工作内存)及操作,原子性可见性和有序性等。
12.启动线程和安全的终止线程。(interrupt)
13.TCP可靠传输原理实现(滑动窗口)。
14.Cookie与Session的作用和原理。
15.Https加密原理。
三面
1、TCP/UDP的区别,有看过具体报文的信息吗
2、你觉得开发一个SDK,需要注意哪些地方,有没有做过SDK性能测试
3、有了解过音视频的编解码吗
4、开放题:让你加载一个200M左右的GIF,如何实现及优化,不可降低画质
5、反问环节
HR面的话就不列举啦,就是一贯的聊一些职业规划,了解一下你的性格特点之类的。
总结
最后小编想说:不论以后选择什么方向发展,目前重要的是把Android方面的技术学好,毕竟其实对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
这里附上我整理的几十套腾讯、字节跳动,京东,小米,头条、阿里、美团等公司19年的Android面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
详细整理在腾讯文档可以见;
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
技术进阶之路很漫长,一起共勉吧~