面试福利4:某公司安卓系统开发一面二面真题分享

背景:

非常感谢相关学员朋友靠回忆提供出来的的真实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实战干货,请关注下面“千里马学框架”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值