作者:New_X
前言
除非大厂,其他都问的差不多,问大部分也就着简历问,问了5年+的,也差不多就问这些...都是基础吧,区分度应该主要在于项目经验匹配度、职业素质、思维和运气上。
一、基础
1.自定义View的流程,requestLayout和invalidate的区别
--> ViewRoot的performTraversal切入measure、layout、draw(讲完基础,可提一提Surface的显示原理)
2.Handler原理,Handler/Looper/MessageQueue关系
--> 消息循环需要创建一个Looper并利用ThreadLocal绑定到当前线程,内部创建了MessageQueue(是个单链表结构),当前Handler通过Looper取消息,可向不同的Handler发送消息,达到线程间通信的目的(意识流的谈到了消息屏障和Choreographer)
3.子线程可以运行looper吗?多次looper. prepare会不会有问题?怎么进入循环的?looper.loop的关键点?消息延迟怎么实现?延时的依据是什么?为什么?
--> 可参考HandlerThread以及基于HandlerThread实现的IntentService(可以往ThreadLocal切入,也可以往底层运行机制);注意延时是根据开机后的时间,但可能因为消息堆积造成不精确
4.事件分发机制
--> 从Activity的dispatchTouchEvent切入,ViewGroup和View的onInterceptTouchEvent,onTouch优先于onClick
5.绘制为什么要二级缓冲?一级二级三级演变的原因?
--> 和消息循环的消息堆积类似,会滚雪球(双缓冲技术是游戏开发中的一个重要的技术,也是SurfaceView和View的一个主要区别,解决解决反复局部刷屏带来的闪烁)
6.Aspectj是运行时织入还是编译时织入?
--> 我的理解是都有的
7.jvm编译优化是什么意思?
--> 运行和编译时都有优化,以循环、反射、锁的优化举例(可以引申到方法内联、栈上分配、标量替换,再多总结总结jvm相关知识形成一个闭环,是个很大的亮点)
8.责任链在framework里的应用?
--> 事件分发、View绘制(更偏组合模式)
9.启动优化?异步了为什么还要优化?
--> 启动器(注意任务的依赖关系,参考work-steaking机制可作为后期优化方向)+ 结合业务 + SP的不足 + Provider + 锁检查等(业务不复杂,其实收益不明显,但是知道好过不知道,很多黑科技得慎用)
10.插件化原理,换肤原理,热修复原理,插件化怎么实现把apk渲染成界面的?
--> 这几个都是热门话题,其实现实中负责相关开发的应该不多,但是可以提现技术追求,答出要点即可,细坑背也没用的,你没做过啊
11.mmkv一般不是做缓存的吗?为什么和启动优化有关系?
--> 启动期间用到了SP,MMKV是可以无缝替代SP的,顺便可以提提mmap原理,引申到binder,谈谈为什么mmap可靠,mmap其实也不是银弹
12.说下udp、tcp和socket?
13.说下http,以及http是基于tcp还是udp?为什么?
14.tcp的可靠性怎么保证的?
15.数组和链表的区别?
16.app点击到启动第一个activity的流程?
17.项目是MVVM还是MVP,怎么实现的?有没有引入LiveData?
18.讲一下优化相关的
19.有没有做过Socket和串口通信,有用过蓝牙吗?
20.有没有用过kotlin?协程有了解吗?
21.用过Flutter?
22.分层架构怎么理解?
23.反射的原理和应用?
24.屏幕适配使用哪个方案?有了解过AutoSize吗?
25.onCreate和onPostCreate的区别(onResume和onPostResume的区别)?
26.深拷贝和浅拷贝的区别,序列化是深拷贝还是浅拷贝?
27.贝塞尔曲线怎么实现?
28.Activity、Window、View的联系?
29.View的绘制流程,测量模式?
30.Android的两个特别重要的服务是什么时候启动的?
31.滑动窗口如何实现?
32.start和run的区别?sleep和wait的区别?

33.Thread的join方法?
34.new Integer(123)和123的区别(Integer.valueOf(123))
35.private static 方法,子类能重写吗?
36.Looper.loop为什么不会导致ANR?
37.dialog和activity调用getWindow获取到的对象有什么不同?
38.Int可以作为线程安全的单位吗?AtomicInteger实现原理?
39.Intent的使用中有遇到什么问题吗?如何解决大图传输问题?
40.双向认证的流程?
41.启动模式的应用场景?
42.熟悉的设计模式?
43.异常设计?
44.如何排查内存泄露?
45.红黑树的实现原理?怎么染色的?
46.说下常见的排序算法?
47.说下常见的集合类?
48.说下JVM的特性?
49.浏览器输入一个url点击发送后发生了什么?
50.如何显示一张大图?
51.一些多线程和JVM的问题
52.线程池的实现原理?里面的队列有了解过吗?
二、开源库
1.ARouter原理,拦截器怎么实现的?
2.okhttp原理,有没有自定义过拦截器,遇到过什么问题?
3.glide的缓存策略
三、项目相关
1.项目中的亮点和难点?工作中对自己感觉提高最大的?
2.埋点实现,如何去除多余的业务埋点,有没有了解过无痕埋点和全埋点?无痕埋点如何加入业务数据。
四、发散性问题
1.未来的规划?
2.如何向一个不懂技术的说明白什么是多线程?
3.同一项任务再做一次,你会如何执行?
4.写几个Sql
5.遇到问题怎么解决?
其实没什么好分享的,虽然本来是抱着不进大厂以后就不走技术路线的想法准备的。刷了好几个framework、算法数据结构相关课程,梳理了多线程相关、JVM相关,也刷了一些leetCode等,而且一直工作认真负责,不断思考找突破点,不断跟进优化和埋点,差一步入C和OS,真的只是差一个看对眼的机会(不是自恋,这点信心还是有的,可以说只要不恶意刁难和我脑子不断路,难倒我的不多)。

原计划(本来是抱着不进个叫的出名字的公司就不打算走技术路线的心准备的):小公司热身 --> 拿几个可以的备用offer --> 试一试杭州的大厂 --> 不行,试试上海的 --> 再不行,试试北京的 --> 再不行,南下
但是,后面发现其实路子走窄了,应该备用和大厂面试组合着来的,大厂面试流程久,一直不敢投(原谅一个2020年到现在还没拿到一分钱工资的小Android的内心惶恐,怕上半年就稀里糊涂过了,要恰饭的嘛)
现在先找个离家近的,也比较稳的站稳脚跟(一是安全,二是稳,我觉得后面会越来越难了)。接下来抽时间整理整理现在的知识体系,然后继续挖深深度,遗憾的是这次没冲大厂,而且现在很累,想缓一缓,有机会直接去冲高级。运气也是很重要的一项因素,继续努力,为了早日加入大厂写代码,老了以后在大厂搞保洁。
作者寄语:希望疫情早日过去,希望我后面能好运一些。
最后
为了帮助大家提升进阶,3个月实现快速突破!我分享一份由几位大佬一起收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料供大家学习进阶
这些都是我闲暇还会反复翻阅的精品资料。在脑图中,每个知识专题都配有详细的知识点,还有相对应的实战项目,可以有效的帮助大家掌握知识、理解原理。当然你也可以拿去查漏补缺,提升自身的竞争力。
喜欢本文的话,不妨给我点个小赞、评论区留言或者转发支持一下呗~
点击【完整答案】加入我们的圈子领取资料和我们一起吧学习交流吧!

Android进阶学习全套手册

Android对标阿里P7学习视频

BATJ大厂Android高频面试题
