车载手机系统开发面试福利:安卓framework开发面试题目-某公司真题带面试者答案

背景:

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

千里马学框架

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

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

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

打赏作者

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

抵扣说明:

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

余额充值