2021 Android面经(高级/资深)

2021.3 自己的面试经历,只作为记录

一、小米互联网(offer)

小米一面

1签名机制
2thread里面可以创建handler.吗?
如果传入主线城的looper是可以的,否则是创建子线程的handler需要looper. prepare和loop支持
3 viewpager fragment懒加载
4 类使用后会本地话,怎么热修复替换 不懂
5多线程依次打印

小米二面

1、message复用原理?多线程通过锁共享
2、版本适配 个版本特性 8.0后台service,静态广播和动态广播区别?限制
访问sd卡根目录?
3、git提交 add commit push,前两个版本没有问题,突然出现问题怎么查找?二分查找 cherry-pick
4、通过wait notify实现子线程修改数据,主线程读取
5、surfaceview textviewer区别
6、自定义view requestlayout invalidate postInvalidate
7、卡顿 内存圆角 webview启动速度
8、recyclerview优化
9、apm原理
10、怎么分析anr的,sp及mmkv原理
https://blog.csdn.net/dadoneo/article/details/8270107/
11、serilization id有什么用
和parcelable区别
intent支持传递哪些类型的对象
怎么传递entity
binder
版本升级后怎么查看已经过期废弃的方法
https://blog.csdn.net/u012416928/article/details/47356887
handlerthread原理
okhttp几个intercepter okhttp几个实例
项目中网络用到的加密方案

小米3面

looper怎么保证每个线程一个的 使用hashmap存储可以吗 线程id为key 其实是可以的,只不过ThreadLocalMap采用的是
开放寻址法,能有效提升效率,而hashmap采用的链地址法
https://blog.csdn.net/qq_40207976/article/details/105742610
viewrootimpl在onresume onpause执行时是单实例的还是多实例的?多实例的,存在一个数组里面
view从哪个方法开始绘制的?流程wm.addview
动画原理
recyclerview提取的框架,缓存原理
架构方向有没有做过
设计一个下载模块
ActivityThread是thread吗 不是thread,就是一个class类,有main方法
applicationThread? 是ActivityThread内部类,是个binder 用于和ams进行通信

二、快手海外(二面挂,答得不错,故意刁难)

快手一面

项目 细节
static使用场景 修饰类时候
leakcanary原理
blockcanary原理
sleep wait区别
锁的区别 对象锁和类锁
一个线程中使用wait等待另一个线程的网络请求,如果请求的线程崩溃了,除了调用notify还能怎么通知wait停止等待(看下wait带参数的方法实现) 调用wait线程的interrupt方法
hashmap原理 容量为2的n次方的原因
升序链表输出去重结果

快手二面

项目
组图使用的bitmap有没有复用机制
json原理 json流式解析:
一次传入超大的JSON的数据(比如1G数据)到一个方法的内部,进行解析处理,很容易发生内存溢出,fastjson能流式的解析数据,比如1G的数据在获取传入方法内部之前先获取这1G的流,即每次只读取一点数据,依次去解析他的key-value,解析得到单个key:value之后,只将单个key:value传入方法内部,使用while循环读取流中的数据,读取一次传入方法解析,解析完成之后再读取流的下一个位置的数据,因为这样调用解析这个方法一次之后,方法内部的内存数据会被标记为可回收状态,下一次GC会回收资源,所以程序占用的内存很小,可以解决内存溢出问题

anr分析 anr机制是怎样的?如果项目一启动就anr怎么查找原因?如果没有trace日志有什么思路 oncreat中thread1000会anr吗
https://blog.csdn.net/weixin_35824356/article/details/113044153
http://gityuan.com/2016/07/02/android-anr/
http://gityuan.com/2016/12/02/app-not-response/

okhttp封装 okhttp复用机制 如果每次发送请求都创建一个新的连接怎么找原因?怎么确定网络是新建的连接
http://tommwq.tech/blog/2020/06/06/136

如果实现facebook的样式(骨架屏)怎么设计?可以让服务端提供一部分帮助 (缓存文案计算的高度,及预估行数)
activity管理 window管理 service管理
最近有学习什么新技术?jetpack的compose 有了解吗
觉得最厉害的点?

2n长度翻转链表 提示边翻转边计算,如果最后一段不够长度则再翻转回来,可以使O(2n)缩减为O(n) 我觉得意义不大

三、腾讯视频

猎头提供的资料:
四大组件介绍
ContentProvider和BroadCastReciver的原理和应用场景
Activity的创建采用的哪种设计模式
列举三种改变View宽高的方法
列举三种准确获取View宽高的方法
RecyclerView的缓存机制
Java动态代理
.class文件的内容结构
反射效率低的原因
https://blog.csdn.net/zhenghongcs/article/details/103143144
单例有几种实现方式
binder机制
recyclerview缓存机制
handler机制,子线程new handler为啥不行,ui却可以(looper机制)
invalidte调用时机
draw ondraw dispatchdrawchild调用顺序
两个有序数组顺序输出结果
png jpg区别
http1.0 1.1 1.2区别
插件化如何替换主题等属性
曝光首次进入统计
如何从一个大文件里高效读取以空格分离的数字,并且计算和,超过最大值后用字符串表示
gif webp动画区别

一面:

广告模块频繁刷新怎么定位的?怎么解决?
卡顿问题怎么解决的?圆角耗内存具体原理?性能对比?staticlayout
数据解析在主线程?
handler机制?
volatile关键字 举例场景
DCL单例
生命周期的线程池,怎么优化?lifexycle 具体实现?
glide加载框架,size是怎么处理的?如果imageview是wrap_content的size是多少?
bitmap怎么计算内存?怎么避免加载一个大图
常用的设计模式,举例子
算法:二叉树层序遍历
项目组:我的页 广告 oem 基础组建

二面:(时间原因,放弃)

四、头条(offer)

一面

activity启动流程,四种启动模式及适合的场景,a启动b声明周期,taskaffinty机制,activity被谁持有(activityStack)
内存泄漏场景
leakcanary原理
UncaughtExceptionHandler捕获崩溃,子线程崩溃也能捕获到吗 :需要给每个线程单独设置uncaughtEx...
打包流程
强软弱虚
垃圾回收机制整个大模块
handler 无消息时怎么处理 pipe-epoll机制;postDelay原理
volatile 举例子 禁止指令重排序的实现原理 dcl单例:1、分配内存空间 2、初始化对象 3、将对象指向内存地址
wait notify
notify all
https
匿名内部类为什么会内存泄露
sp优化 有没有尝试hook H在activity stop时候取消写入文件任务(头条方案)

算法:数组中出现频率最高的k个数,list. sort实现 时间复杂度

二面:

livedata原理 lifecycle livedata setvalue和postValue的区别,连续post两次和set两次有啥区别
websocket实现 ,怎么移除监听?(可以使用lifecycle注解监听生命周期)
recyclerview缓存,payloads局部刷新
okhttp intercepter 缓存和连接池复用 如果需要添加自定义header怎么实现?自定义networkIntercept; 如果想自定义解析方案,怎么设计回调
同步屏障?有没有利用postSyncBarrior实现一些功能?
卡顿和fps原理?启动优化(IdelHandler延时器)
handlerThread 原理? intentservice原理?怎么在onHandleIntent中更新ui
自定义view怎么局部刷新?只刷新部分ui,比如上面有视频播放,下面按钮不断缩小这种。

算法:k个一组翻转链表,不足k个也翻转

三面:

@人怎么实现的,textspan原理?在哪层绘制的?
最大的问题?
handler 各种细节
okhttp 缓存,磁盘缓存的结构,DskLru的结构?拦截器的好处?
webview缓存怎么实现的
算法:[a,b,c,a,e,f,f,f] 输出字符+index(1个时不输出数量)
eg:[a1,b,c,a2,e,f1,f2,f3]

五、小红书 视频发布项目组(二面挂)

一面

同步屏障 绘制原理 idelhandler
mvvm viewmodel livedata
动画原理
recyclerview优化
apm
在draw方法里调用settextcolor有什么问题
算法 合并两个有序链表

二面(问题太局限了,只关心他现在负责的模块,没做过不太懂)

视频发布 优化 分块 监测网络?怎么提升发送速度?转码率?转码在哪里做的?
view绘制流程
view是怎么显示出来的?cpu gpu 计算,surface flinger渲染出来。 sf工作在哪个进程?
为什么用glide,优势
webp
apm原理 卡顿准确方案?asm插庄
下载一个大文件有三个方案 1单例中子线程下载 2通过在service启动子线程下载
3在广播接收者中启动子线程下载 三个哪个方案好?为什么
后台进程杀死优先级 哪些因素影响oomadj
oom有什么原因?bitmap需要调用recycle吗
为什么?怎么计算bitmap占用的内存
算法 用数组实现一个队列?实现offer poll size方法 (需要考虑初始容量,扩容等因素)

六、百度直播(挂)

1面(面试官有几个说错的地方,不过百度很重视基础)

视频seekTo底层怎么实现的?为什么抽第一帧会黑屏
http是怎么发送数据的?三次握手 四次挥手 丢包、抖动
get post put(什么场景使用put,和post的区别)
websocket长连接怎么创建?心跳包怎么发送的(底层怎么实现的)?为什么是4分钟?如果心跳失败怎么处理。如果连接失败怎么处理?
如果连接失败了并且重试了,就任他失败不管了吗?轮询方案
图片加载:强、软、弱引用,Lru、activeresource是什么引用?什么情况下会执行acqure\dequre? 如果两个页面都有一个图片,内存是怎么存储的?如果后台一个页面被内存回收了,图片内存是怎么处理的?

七、滴滴出行平台(offer)

1面

换肤
动态下发模板 类似vlayout
recyclerview进行滑动时item还能收到事件吗
动画轮播
kotlin遇到哪些问题

2面

技术难点
LRU使用基础容器实现
圆角实现方案,阴影的情况怎么实现
kotlin使用情况
曝光策略
linkedhashmap实现

3面

提升代码稳定性的方案,怎么减少崩溃?如果写过崩溃,利用什么工具可以自动检测并修复
做过哪些优化
包体减小做了哪些工作
换肤方案
apk构建流程,task任务
java文件和class文件格式区别
java和kotlin互调遇到的坑
aop思想 :aspectj Asm

八、淘宝直播(挂,深度不够)

1面

okhttp调优
子线程的使用情况?线程池使用情况,监控
数据库使用情况?性能?
滑动流,内存不断升高,怎么快速入手找问题?
bitmap内存分配?8.0以后还需要调用recycle方法吗
在线性能监控?apm
做了哪些卡顿、内存优化?哪些数据存sp?哪些存数据库?
支不支持未发版,由服务端动态下发模板?

九、抖音(挂)

一面

线程池是怎么复用的(参考looper),线程池回收怎么区分核心线程和非核心
线程池参数意义
解释同步屏障
怎么拿到view的宽高,view.post为什么能保证拿到宽高
解释handler作用,原理 延迟30s,调系统时间一分钟以后,消息会接受到吗(会收到,SystemClock.uptimeMillis表示开机到现在的时间) idelhandler
动画原理,补间动画为什么点击事件没有变
二叉树按层遍历
搜索二叉树最小公共父节点

二面

livedata 怎么更新的
引用链怎么标记的、垃圾回收二次标记
什么时候执行action_cancel,怎么判断event.x,y不在view的区域内
从源码上讲讲 为什么action_move会交给action_down消费的view处理
怎么分析哪个view发生了泄露
事件分发
二叉树和为sum的全部路径
view.post原理
责任链模式,目的
设计模式

十、手机百度(备胎)

一面

二叉树非递归 前中后
jvm垃圾回收器
对称加密 非对称加密
签名机制 v1 v2 v3
binder 复习stub proxy代表的含义
listview +header实现下拉刷新怎么实现
如果这样的场景下:listView和header属于不同的view,相互为兄弟View,外部套一个大的viewGroup,如何进行事件分发?从初始态到用户拉下出现header的过程来依次分析
如果是这样的场景:listView和header属于同一个view层,那么下拉刷新又该如何实现?事件拦截又该如何去做?

二面

object有哪些方法
抽象类(对象) 接口场景(行为)
双检索单例
子线程不能更新ui原因
hashcode equal

三面

message复用
handler msg有优先级吗?同步屏障,异步消息
帧动画加载一万张图方案
线程卡顿工具
bitmap复用
idelhandler使用场景 activity destroy
垃圾回收原理
looper为什么不anr
卡顿
内存泄露检测
activity a b打开关闭后生命周期

你可能感兴趣的:(2021 Android面经(高级/资深))