一面
1、View绘制流程。onMeasure、onLayout、onDraw。
2、竖向的TextView如何实现。TextView文字描边效果如何实现。
3、事件分发。冲突解决。
4、动画
5、RecyclerView的特点和缓存
6、SparseArray和ArrayMap。具体实现原理和特性
7、说一下kotlin的优缺点。let和with的区别
8、接口和抽象类的区别,接口中可以有属性么?
9、用过哪些设计模式?策略模式和桥接模式的区别
10、多线程如何实现?有哪些方式?
11、线程池的参数
12、你如何自己实现一个LRUCache?Android里面的LRUCache是如何实现的?
13、synchronized和volatile的区别?为何不用volatile替代synchronized?类锁和对象锁互斥么?
14、gcroot的类型
15、jvm的运行时数据结构。栈帧中会有什么异常?方法区里面存放的是什么数据?
16、动态代理的实现。
17、Gradle的实现,gradle中task的生命周期。
18、Aop、AspectJ、ASM了解么
19、组件化和模块化的区别。ARouter的缺点。
20、MVP、MVVM的优缺点,jetpack中的组件
21、okhttp源码。
22、glide缓存
23、你对flutter的理解
二面
1、react的单向数据流
2、redux的状态管理,如何实现的?关键角色有哪些?
3、flutter的channel通信有哪几种?你用的哪种?插件你如何实现的?
4、flutter的包体积优化
5、自定义View的关键步骤,注意事项,你的理解
6、MeasureSpec讲一下
7、包体积优化
8、混淆的步骤和原理
9、module间的资源文件merge后,生成过多的R文件,处理过么?如何处理?
10、Bitmap内存大小,注意事项,如何优化
11、启动速度优化
12、glide中对Bitmap做了哪些操作?三级缓存?为何在有了内存缓存后,还要持有ActivityRef这个呢?
13、gradle声明周期,task,插件
14、注解:Source和Class、Runtime注解的区别
15、卡顿优化
16、内存泄漏检测及优化
17、RecyclerView的缓存,局部刷新用过么?
18、List的滑动卡顿如何优化
19、Activity中的Window的初始化和显示过程
20、Application中可以显示Dialog么?为什么?
21、泛型擦除,为何会有擦除?擦除的时机。通配符。
下面这段代码有问题么?有什么问题?为何会有这个问题?
List<? extends Object> list = new ArrayList<>();
list.add(123);
Object obj = list.get(0);
22、synchronized的同步原语
23、锁的几种状态
24、Android热修复原理,tinker的patch文件如何生成,patch文件是全部加载dex文件首部么?
25、插件化原理
26、两个用单链表表示的大数相加,求他们的和。单链表元素的值为0~9。
三面
1、讲下hashmap;链表转红黑树的限制为何是8;红黑树的时间复杂度;红黑树转链表的限制为何是6;current hashmap在所有情况下都是线程安全的吗?hashtable呢?
2、synchronized实现。非静态方法A和B在同一个类中,方法A用synchronized修饰,当A方法因为多线程请求有线程阻塞在对象锁上的时候,B方法的访问受不受影响?
3、既然泛型有编译期类型擦除,那么运行时无法获取到具体类型;而反射能在运行时获取到Class的类型;它们一个获取不到,一个可以获取到,这不就是矛盾么?请解释下细节。
4、在同一个手机上,如果把drawable-xxhdpi下的图片移动到drawable-xhdpi下,图片内存是如何变的,解释原理。如果在drawable-hdpi、drawable-xxhdpi下放置了图片,但是手机是xhdpi的,会优先加载哪个,加载优先级是怎样的?如果是400_800,1080_1920这种呢,会如何查找?xhdpi和400*800同时存在时,会如何查找?布局文件呢?
5、图片内存优化;
6、Handler机制。MessageQueue中的Message是如何排列的?Msg的runnable对象可以外部设置么,比如说不用Handler#post系列方法(反射可以实现);
7、application中持有静态的用户信息,有何缺点?如何改进?
8、mvp和mvvm,jetpack
四面
1、选一个你的项目讲一下
2、技术选型是如何做的
3、优化内存
4、上传的重试机制
5、OOM和内存泄漏
6、包体积优化
7、你最擅长的点
8、你的职业规划
最后的我,很幸运,在2021的七月份,拿到我人生中第一个互联网大厂的offer。当后面HR跟我谈薪的时候,我才明白这一次我真的成功了。在高兴和惊喜同时我也想分享我的个人面试心得,希望能给到准备冲大厂的朋友一点帮助。
三、面试后的个人心得
准备周期
面试之前,最好先系统的复习一下基础知识,然后再复盘下自己的项目经历,把亮点都发掘出来。复习周期个人建议是一个月到三个月,时间不宜太久,久了就容易懈怠或者闭门造车,三个月的时候最好出去开始试水,检验一下自己的学习效果。
复习计划的制定和进度的把控也很重要,可以参考我的学习计划去学习,再根据自己的实际情况去做适当的调整。
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
【Android高级架构视频学习资源】
**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!