10.双缓冲机制。
11.丢帧的原因。
12.帧数计算。
13.设计如何检测过度绘制的工具,要具体到view。
14.blockcanary原理,目的。
15.listview的滑动优化,比如一个kmoji可以用textview渲染,也可以用imageview渲染,哪个更优。
16.toast为什么不需要权限就可以显示。
17.badwindowtoken的原因。
18.怎么实现悬浮窗。
启动加速
1.怎么做app启动加速
我的回答说利用intentService,就是异步加载机制。但是还不够。
2.引导我从app启动流程开始讲一遍,看从启动流程上能不能找到方法。
3.zygote的内部实现,zygote.fork有没有了解。
4.zygote跟ams的通信方式用的是什么。
5.整个启动过程中,mHandler做哪些事。
6.设计一个工具,监控启动时间,粒度要求在方法级别。
内存相关
1.讲下内存泄露。以handler匿名内部类做例子讲。泄露链是怎样的。
2.looper.prepare干了啥。
3.threadLocalMap的实现。
4.leakcanary原理。
5.为什么要做抖动的检查,有啥用,
6.为什么会出现抖动。
7.线上有泄露,怎么收集,排查,设计方案。
稳定性
1.解决线上稳定性bug的方法论。
2.讲个能体现亮点的解决线上bug的案例。
3.给了一个具体案例,让我现场分析原因。
主要考察思维方式吧。
4.怎么收集java的crash。
5.怎么收集native的crash。
6.用线程安全的数据结构,concurrentHashMap会出现modifyCountException么?
ANR相关
1.常见的anr问题怎么解。
2.不常见的anr,比如 msgQueue.nativePollOnce都很正常,怎么去定位,如果是线上,怎么去收集。
3.anr的原因
4.intentService会anr么,讲内部实现。
保活相关问题
1.杀进程机制的源码。
2.进程优先级。
3.怎么提升优先级。
4.常见的保活手段。
我这里着重讲了Tim的保活原理。还有第三方库Leonic的原理。
APP瘦身相关
1.andRes原理。
2.proguard源码。
3.Facebook 的redex,字节的bytex原理。
4.multidex原理。
5.很多资源包,如何瘦身。
维护的github库相关问题
1.防多开原理
2.检测模拟器原理
3.查root权限,如果是自编的rom怎么处理。
聊了下简历里的经历
1.contentProvider的初始化时机。
这里主要是问我LeakCanary1.* 跟2.*有啥不同引出的问题。
2.LocalBroadCast 和broadCast的区别。
3.xposed的原理。
4.beforeMethodHooked,xposed内部做了什么事
5.免root hook框架 legend的源码实现。
记不太清,好像我说的是native方法指针的变更。
6.一道算法。
7.设计一个埋点库。
需要哪些模块。
8.设计一个组件,统计activity的前台时长,fragment的前台时长。
字节后续的面试我忘了记录复盘了,现在也记不住了。这一轮面试反正是把我榨干了。
最后进入谈薪阶段。只不过没谈拢,哈哈。
腾讯面试
最后就是我一直想去的南山必胜客,粤海公仔厂了
这里面试具体轮次我就不细说了。题目其实也都是那些题目,重点提供平时要学习的方向吧。
1.聊简历,性能优化。
2.view的绘制流程,尽可能越详细,越全面越好。
因为有了字节之前的面试经验,这里聊了很多view相关的。
大概从ActivityThread讲起,到window,windowManager,viewRootImpl,
setContentView内部实现干了什么,layoutInflator
下发到requestLayout,performShechdules,checkThread,绘制屏障消息
双缓冲,sync信号,最后再performOnMesure,layout,draw。
这里真的是要求自己平时除了写界面,也一定要深入源码进行学习。
很多奇奇怪怪的业务问题,真的就是靠读源码解决。
3.问网络优化,当网络带宽足够大,信号足够好,下载大文件,怎么快?
开多个链接,wifi+4G同时,分片下。
协议层 ,udp去下,本地做完整性校验,我记得qq客户端时这样做的。
m3u8的思想去下。
4.apk安全措施,当apk已经被破解了,怎么处理?
我回答借助v1签名思想,本地做对文件md5的校验。或者借助v3的思想,连续签名。
5.两个设计模式的区别。具体哪两个我忘了。
6.三道算法题
第一题写一个必然死锁的代码。讲一下解决死锁的方式。锁对象的不同的区别。
第一个出现的字符。
数组里的元素,组合起来求最大值。
7.checkThread里的thread是什么时候被赋值的。
8.讲下数字证书是什么。
9.解决内存抖动的实际案例。
10.降低bug的实际案例。
11.设计一个如何处理 app接收到服务器脏数据的方案。
12.设计一个云相册。
13.classLoader机制的原理。
14.硬件加速的底层实现。
15.操作系统相关问题。
16.如何处理多语言问题。
17.jvm虚拟机相关问题,具体忘了。
18.职业规划相关。
最后欢迎大家来鹅厂,有一说一不吹牛逼,这里同事真的很不错。
下面是我花了将近一个月的时间整理的一份面试题库。这些面试题,包括我本人自己去面试遇到的,还有在面试之前刷过的题目,我都统一的整理了一下,希望对大家有用。
1.Activity启动模式
2.Activity的启动过程
3.进程通讯
4.Android Binder之应用层总结与分析
5.进程保活方法
6.从源码了解handler looper ,messageQueue思路
7.handler如何实现延时发消息postdelay()
8.Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
9.RxJava原理及如何封装使用
10.okhttp源码分析
11.retrofit源码分析
…
由于篇幅有限,只能分享部分面试题,更多面试题及答案可以我的【Github】阅读下载哦~无偿分享给大家,算是一个感恩回馈吧
12.LeakCanary核心原理源码浅析
13.LruCache 使用及原理
14.ARouter原理
15.注解框架实现原理
16.Android 如何编写基于编译时注解的项目
17.RxJava2+Retrofit2+OkHttp3的基础、封装和项目中的使用
18.Rxjava2.0+Retrofit+Okhttp(封装使用)+MVP框架搭建
19.Android 插件化和热修复知识梳理
20.Android开发中比较常见的内存泄漏问题及解决办法
21.如何检测和定位Android内存泄漏
22.图片占据的内存算法
23.为什么图片需要用软引用,MVP模式中的view接口用弱引用
24.基于DataBinding与LiveData的MVVM实践
25.App稳定性优化
26.App启动速度优化
27.App内存优化
28.App绘制优化
29.App瘦身
30.网络优化
31.App电量优化
32.安卓的安全优化
33.为什么WebView加载会慢呢?
34.如何优化自定义View
1.HashMap
2.ArrayList
3.LinkedList
4.Hashset源码分析
5.内存模型
6.垃圾回收算法(JVM)
7.垃圾回收机制和调用 System.gc()的区别?
8.类加载过程
9.反射
10.多线程和线程池
11.创建多线程方式、线程池工作原理
12.设计模式(六大基本原则、项目中常用的设计模式、手写单例等)
13.断点续传
14.Java 四大引用
15.Java 的泛型
16.接口、抽象类的区别
17.从 java 容器类的设计讨论抽象类和接口的应用
由于篇幅有限,只能分享部分面试题,更多面试题及答案可以我的【Github】阅读下载哦~无偿分享给大家,算是一个感恩回馈吧
1.常用的数据结构有哪些?
2.数组
3.链表
4.队列&堆栈
5.二叉树
6.HashMap
7.图
8.排序算法有哪些?
9.查找算法
10.串
1.HTTP协议