背景:
非常感谢相关学员朋友靠回忆提供出来的的真实framework面试题目,本次题目和答案均属于优秀学员面试的整个记录过程,当然我们的学员朋友本身也是顺利通过面试的。
他还给大家记录了当时如何回答面试题目的,大家可以看看下面的详细面试题,当然学员的不一定回答的非常全面和百分百正确,这里大家可以进行讨论留言等,后期整理更加完善的汇总到vip群中。
面试过程1
1、多线程Handler?
回答:
多线程中使用Handler,用HandlerThread,主要说到ThreadLocal。
2、讲一讲多线程?
回答:
主要讲到了,Java中的线程池、关键字Synchronized/volatile、CAS问题。
3、layer泄露 或者 SurfaceFlinger图层数量超过限制了有什么解决办法?
回答:
SurfaceFlinger 图层泄露 / 数量过多 的本质是:
-客户端创建了 Surface(图层)但未释放
-Window/Surface 未被及时销毁
-某些 UI 元素反复创建图层,但没有复用或及时移除
SurfaceFlinger 使用 Layer 管理屏幕上的每个图层,如 App 窗口、系统 UI、动画、截图等。如果图层没有释放,SF 会持续持有它们
如何判断Layer泄漏?
adb shell dumpsys SurfaceFlinger --layers 查看图层z-order、类型、宽高、状态
使用 winscope 或 systrace/perfetto
常见 Layer 泄露场景
Dialog / PopupWindow 泄露:App 弹出对话框后未正确关闭或 Activity 被销毁后仍引用
SurfaceView 使用不当:Surface 未调用 release(),仍然保留在 SF 中
ViewRootImpl 没有解绑:Activity/Fragment 异常销毁后未释放 View
多次截图/动画未释放 使用:ScreenshotClient 等截屏 API 未释放图层资源
InputMethod (IME) 泄露:输入法长时间持有某些 Surface,未被正确清理
4、WMS中的冻屏有没有了解过
回答:
主要就是了解过,在进行屏幕旋转的时候,传感器会通知WMS进行方向旋转,在执行旋转动画前会进行冻屏操作,display和screen,回调App进行view重新绘制,
绘制完成后,WMS在刷新层级结构树时,解冻screen,然后判断所有的windowState绘制完成,解冻display并执行旋转动画。
5、讲一讲binder怎么通信???
IBinder、binder、bnbinder、bpbinder和你刚才讲的怎么对应?
回答:
进程通过Zygote孵化后,初始化binder线程池,open/mmap/ioctl等操作,进程就默认支持binder通信。
举例:App获取AMS代理,先是找到了AMS这个binder对象对应的binder_ref,这个 binder_ref 加载到自己的binder_ref中,binder_ref是int累加的,id是不固定的
通过id可以从用户态到内核态,一一对应上binder_ref,binder_ref 又和 binder_node 建立了关系。
客户端拿到服务端的handle封装到Java层就是BinderProxy代理对象,通过transact进行binder通信,调用到服务端Binder对象的onTransact执行具体的业务。
6、oneway模式了解吗?你简历上说oneway的bug,具体讲解一下?
回答:
异步请求就是oneway标识的方法,binder驱动中 oneway请求的方法不能有返回值和out inout标识的参数
oneway调用过后不需要等待服务端执行完成,通常用于SystemServer回调应用的,这样避免应用执行太久阻塞了SystemServer
风险:
oneway大量频繁的调用,会导致目标进程的共享内存耗尽,如果oneway在服务端的binder线程执行太久
下次进来的oneway请求,会加入async_todo队列,并且再次之前已经申请了目标进程的内存,所以需要等待释放。
7、设计模式你常用的有哪些?
回答:
在做App开发时用的相对较多,比如单例,生产者消费者,动态代理,工厂模式,适配器模式
做FWK时,主要还是在分析源码中看到工厂模式,观察者模式。
8、你做的项目有什么比较困难的地方?
回答:
在解决黑屏闪黑问题,举例黑屏等具体问题,分析流程。
9、有没有做过系统层面的优化?
回答:
没有做过,主要还是了解在aosp中google对Framework迭代的优化。
举例了层级结构树,BLASTBufferQueue新特性,SF中的app_vsync,sf_vsync,sfapp_vsync。
面试过程2(某二面):
1、主要的项目介绍一下?
-自由窗口,分屏优化
-多屏互动
-投屏
2、了解HIDL吗?
回答:
主要讲解马哥课程中经典HAL,HIDL,AIDL发展
3、使用HIDL时候,有什么权限相关配置?
回答:
Selinux的配置
4、经典HAL和HIDL原理明白吗,有没有写过?
回答:
项目:没有写过实际项目,但是自己学习的时候,参考Composer的HAL写过经典的hal和HIDL。
原理:还是马哥课程讲解的HAL原理,HIDL原理。
5、工作中印象比较深刻的问题?
回答:
可以选择马哥blog中相对比较难解的黑屏冻屏等问题。
6、那么这些比较难解问题,自己平时有写blog或者总结吗?
回答:
总结黑屏冻屏相关经验,写有道云笔记。具体总结还是马哥blog中很多黑屏冻屏问题。
7、简历中有写使用Lineageos刷机,是什么契机让你去学习这些的?
回答:
因为公司设备限制,需要学习新版本aosp,所以自己刷机学习更方便。
8、在解决问题的过程中,有比较相邻的aosp版本吗?
回答:
有的,举例相关问题分别查看aosp13 14 15 中版本的变化、
具体还是马哥课程+blog中学习到的。
当然上面也有可能回答不完善的地方,上面的答题记录也是我的真实过程,还好面试都通过了,欢迎各位网友指出补充哪块答得不好要完善的。
文章来源:https://mp.weixin.qq.com/s/gswpnpWEvro-8Y45cOG0bA
更多framework实战干货,请关注下面“千里马学框架”