社招三年面经,系统性能优化

算是这岗位里屈指可数的面经了,看牛客几乎没有这块。

### 猿辅导 framework

1. 自我介绍,正在做的,做了什么?
项目,模型,方案开发,维护,移植。

开始了解模型是干啥的,模型的定义,做了什么后,开始问我在模型里的角色:

我的角色,参与业务逻辑的开发,对接systemUI和launcher等部门; 模型的搭建是大佬做的

2. linux中的epoll机制
没回答上来,转向kernel调度,内存

3. 一个应用是如何绑定到具体的核
cgroup
taskset——sched_setaffinity
问的很细节,具体到代码,
————cgropu, echo 写pid到对应的组, 或者是settaskprofiles函数

4. 问cgroup,聊到的很多一些cpuset等等,都会问到,很细节
sf设置cgroup,在源码,问到具体的源码和函数
————其实就是SetTaskProfiles,cgroup提供的api;aosp原生的就有;只需要修改组即可

5. 系统提供的接口,如何绑定pid到某个核
taskset——sched_setaffinity

6. mtk厂商的调度算法,
没回答上来,这个确实答不上来,kernel原生的都没搞明白

7. 转而问mtk的powerhal,sbe
其实也是我自己提到的,上一个没答上来;
简单介绍了powerhal,但是不感兴趣,就简单说了下,过去了

8. 开机过程的cpu调度
这个问题,我没明白问的啥,
**开机的性能优化,开机时间优化,开机后卡顿优化** 重点了,经常被问到

9. 开始问我开机的过程优化的方案,
我没搞过,说了preIO预读的,但是没说清除
**这里说了很久,给自己挖坑,方案还是要清除到每一行代码和逻辑原理**

更多的思考: 面试官思路很清晰,和我聊这个方案,从设计出发,比如是如何得到应用的耗时的,哪些应用的耗时。这个其实是
公司里的工具打出来的,但是听者不清楚,所以后续的方案;如果是非手机厂商,建议从一个方案如何设计的开始聊起。

聊到了空载负载,面试官疑问,负载下,io预读方案去加载到内存,岂不是引起了更高的负载;
以及我临时发挥了,io预读方案是解决高负载,高io下的问题, 面试官的疑问,是如何知道机器是处于高io下的;

10. 显示模块的流程
被指出说的很笼统,
**需要挑一个模块,看代码,详细的说出来机制原理,如何做到的**

11. 我说了比较熟悉的Choreographer,问我的机制,原理,承上启下

我没说清楚SBE的埋点,急拉策略和Choreographer的配合
**这里面试官其实懂很多,也知道Choreographer,但是只知道承上启下这些,如果说了面试官不懂的细节,就很加分;急拉 插帧**

12. 反问总结

整体回答的都太笼统,不能和面试官聊出细节出来,指出这些项的话,比如sf模块很底层如果能聊到细节,是如何和绘制线程配合
给buff相互传递的,都会很加分。

### 极氪汽车
1. 介绍

2. 应用冷热启动如何分析,优化方案(io预读)

————我说了PreIO

读取多少资源,odex、vdex

读取的动作是怎么读的,开一个线程?在哪里开的

内存很低的情况下,继续读取,是否存在问题?内存更低了?收益是如何拿到的?

3. 应用启动优化的其他策略

————我回答 绑核和提频; 但是这里策略有点少了

子线程的耗时会影响到主线程的UI线程,如何解决?

4. input流程
**事件分发流程学习**
耗时点会在哪,有什么优化方案
————我这里没啥优化方案说的

5. 开机流程

如何分析开机耗时,以及开机耗时的优化

6. 卡顿问题如何分析

———— 主要就是看traec

如何定义出卡顿,识别卡顿了,没有竞品参照?
**这里感觉msg是车机的确实没竞品的担心**

如果是应用自身卡顿,有什么解决(应用层优化了,书籍有)
———— 应用自身没办法解决

7. cgroup

问了其他的绑核能力,一个亲核的api,需要了解

cgroup如何实现的绑核

**cgroup的setTaskprofiles的函数固定核的原理,cgroup原理有没有了解**
用户写入 cpuset.cpus → 内核解析并更新 cpuset 的 allowed_cpus → 遍历 cgroup 中所有进程 → 调用 update_tasks_cpumask() → 更新进程的 cpus_allowed → 触发调度器重新决策

8. 进程优先级机制
———— 没了解

9. 多窗口下的焦点,这个是车机常见场景;多窗口模式
———— 不是很了解

10. 低内存查杀的机制和原理,lmkd
———— 只说了水位,原理没看

11. 内存优化参数的修改方面
———— gc的参数修改

修改阈值的优化参数方案

应用频繁触发gc的原因,如何调整阈值

gc的占用资源很高,如何优化
————结合管控

12. lowmemorykiller
原理?lmkd是如何知道系统的内存的

16. dfx

17. 模型的搭建

18.

### 得物

1. 逮着方案问,没啥技术含量,应用和系统做的事情不一样,会关注方案的细节,为什么这样,为什么不那样,怎么衡量出来的。每一步说不好,都是给自己挖坑。有算法题

## 商泰汽车

1. 自我介绍

2. 如何分析启动耗时
——应用启动过程,哪些地方会存在耗时

3. 开机问题分析
——开机流程
——开机过程做的优化方案

4. 改过什么参数
我说了gc参数,这里我说了gc参数,需要多加一些调优参数

5. 黑屏问题如何分析

6. 和sf相关的问题

7. 应用保活机制

8.

## 小米汽车
1. input流程,wq rq aq

2. 应用启动和动画流程

3. handle机制

4. 锁文件pinner、mlock

5. 应用启动流程

6. epoll

7. pagecache原理

8. 内核 公平调度原理 ,如何实现的公平机制

9. 方案深挖

6. 埋点,监控都问的十分细节, 丢帧的开始点,结束点,trace能力支持,system-server如何实现的
全部评论

相关推荐

评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务