背景:
非常感谢相关学员朋友靠回忆提供出来的的真实framework面试题目,本次题目和答案均属于优秀学员面试的整个记录过程,当然我们的学员朋友本身也是顺利通过面试的。
他还给大家记录了当时如何回答面试题目的,大家可以看看下面的详细面试题,当然学员的不一定回答的非常全面和百分百正确,这里大家可以进行讨论留言等,后期整理更加完善的汇总到vip群中。

某公司面试题汇总
1、简单说说你做过的项目?
-自由窗口,分屏优化
-多屏互动
-投屏
2、有没有遇到过比较难解决的问题?
主要说的:马哥微信公众号中总结的黑屏、冻屏等问题
3、既然后黑屏冻屏的问题,你说说你分析的这个几个问题,是怎么分析的?
黑屏、闪黑类:
1.scrcpy 投屏判断显示驱动是否正常没问题
2.winscope抓取,查看SurfaceFlinger显示图层
3.判断需要显示的窗口,是否提交到合成中,以及相关属性是否异常,经常查看都就是透明度,裁剪crop,Visible,覆盖,父节点
4.通过相关属性变化,通过堆栈打印,查看调用流程继续分析
冻屏类:
1.getevent指令,判断触摸驱动是否没有问题
2.日志排查
adb logcat -b events | grep anr //可以看到ANR原因
adb logcat -b events | grep input //可以看到Focus变化
adb logcat -s InputDispatcher //确定产生ANR的时间
3.确定已经发送到应用,因为拿不到应用代码,所以使用perfetto 查看应用使用情况
4、对SurfaceFlinger做过什么修改?
回答:
主要用于分析代码,添加投屏截图水印。
对SurfaceFlinger中申请vsync,GPU合成,HWC合成有一定的了解。
5、BLASTBufferQueue中数据的流程?
1.创建BLASTBufferQueue 初始化 64个 slot
2.dequeueBuffer mBufferState=DEQUEUED
3.requestBuffer 返回GraphicBuffer
4.queueBuffer GPU回传回来的 acquireFence mBufferState=QUEUED
5.onFrameAvailable -> acqureNextBufferLocked() mBufferState=ACQUIRED
6.提交事务
7.回调callback releaseBuffer -> mBufferState=FREE
后面又问到slot数据?
BLASTBufferQueue创建的时候会初始化几个slot数组
mFreeSlots:初始化就会添加进去 默认3个【0 1 2】
mFreeBuffers:
mUnusedSlots:初始化就会添加进去【3 … 63】
mActiveBuffers:
dequeueBuffer操作:先从mFreeBuffers找,再从mFreeSlots找,取出后加入mActiveBuffers
-mFreeSlots【1 2】
-mFreeBuffers:
-mActiveBuffers:【0】
releaseBuffer操作:先从mActiveBuffers移除,再加入mFreeBuffers
-mFreeSlots【1 2】
-mFreeBuffers:【0】
-mActiveBuffers:
6、你说你熟悉perfetto,那么线程里面一个方法执行太久了,用perfetto怎么去分析?
我发现线程里面调度很慢用perfetto去分析怎么去分析???
回答:
-首先查看线程的运行状态,Runnable,Running,Sleep,阻塞
-运行时可以查看到CPU的信息,已经线程在CPU中的优先级 Priority 一般应用都是110,当前CPU执行时大核小核,以及CPU频率
-针对执行较慢的方法,添加ATrace查看执行时间
7、有没有用过 perfetto 去看帧率?
回答:
可以查看1秒内,vsync的上升沿和下降沿,变化频率
掉帧问题:就是App或者SF在规定时间内没有执行完渲染和合成,导致可能掉帧看到卡顿。
8、对系统启动有没有做过优化?
回答:
开机启动优化:logcat -b | grep boot_progress 可以查看到开机耗时情况
比如:优化瓶颈,裁剪不要的apk啥的
9、我想开机就启动一个Native进程 怎么去启动?
回答:
一开始没回答上。
10、系统的启动流程?
回答:
init进程读取init.rc,根据配置启动ServiceManager进程,SurfaceFlinger进程(SF注册服务到ServiceManager中,然后通过property启动BootAnimation),
Zygote进程,zygote进程孵化第一个子进程SystemServer,SystemServer启动各种服务并注册,然后就是StartHomeActivity(FallbackHome到Launcher),关闭开机动画。
写一个Native程序,可以通过配置init.rc,来开机启动。
11、修改过系统属性还有传感器吗?
回答:
没有修改过,只了解Settings下的 global和System相关属性。
12、App冷启动优化?
回答:
没有做过相关优化,启动比较慢的话,可以从Perfetto中分析下,耗时以及CPU调度情况。
如果App有相关耗时问题,需要让APP端检测下布局,启动线程数等等
如果在Framework中优化启动,性能够用的情况下,可以开机后启动相关App的进程。
面试总结
上面就是面试的10几个面试题目,其实真实面试聊得比上面这个多,不过整体上难度感觉不是很大,面试完成立即就让我等待一会,然后就进入了领导面试,HR面试。说实话感觉跟着马哥学了几个月后,自己的fw整体思维相比学之前有了巨大的提升,这里再次感谢马哥的课程和对我耐心的答疑服务,学习fw的过程虽然刚开始辛苦,但是伴随着一个课程的实战项目做出来,自己在系统上修改,而且刚开始经常有错误达不到马哥效果,然后自查不出问马哥,经过指导后搞定成功运行,这种收获的喜悦也是自己成长的见证。
这里特别感谢一下马哥答疑问题方式,他一般不是只给答案而是思路方向指导,这个我感觉其实更加贴近公司实战,因为实际工作中遇到各种问题都是找不到答案,要我合理的思路去排查。
马哥是教我遇到这类问题的排查思路和方向,然后让我自己按照这个方向查,马哥这种答疑方式其实非常好的锻炼了我的问题分析和解决能力,导致后续遇到相关问题都是比较有条理分析解决。
最后送各位师兄弟的话
当前就业环境都说难,AI替代程序员,普遍很多人传递一些程序员没活路声音。希望大家不要去理会这种声音,大家一定要脚踏实地,认真分析自己所在行业,找出一些自己可以进步深挖有门槛的领域,然后去深入它,让这个领域成为你的核心竞争力,成为你的铠甲。比如我真的去认真跟着马哥学习fw相关技能后,并且努力掌握这些技能后发现整个人变得自信了,而且找工作也变得容易了,而且还收到了几个offer,薪水还涨了。
最后希望各位师兄弟都可以找到满意的framework工作,也希望马哥课程越来越多,桃李满天下,越做越强。
原文地址:https://mp.weixin.qq.com/s/XisRp6WnU5Yen6nZDmI26g
更多framework实战干货,干货资料,请关注下面“千里马学框架”
851

被折叠的 条评论
为什么被折叠?



