Android 面试奇怪问题

2018-05-21 16:06:24 +08:00
 GLee9507
今天面试一家做车载的公司,被问到一个奇怪的问题。---如何优化、降低 CPU 使用率?
唉,没回答上来,我觉得 CPU 使用率是无法人为干预的,大家怎么看?
13122 次点击
所在节点    Android
58 条回复
zynlp
2018-05-21 18:14:55 +08:00
尽量用 gpu 算不就降低 cpu 利用率了吗?
holmesabc
2018-05-21 18:38:02 +08:00
这玩意肯定是双方相互理解上去了问题。
对方肯定是想问怎么优化性能之类的。


这个肯定要先知道那里有问题,再针对问题对解喽。

所以说看 profile,找问题题。再列举一些可能的性况,如何解就好了。
zhoucan007
2018-05-21 18:55:49 +08:00
android 本质上运行的还是个虚拟机,如果是我的话,会从 Java 代码优化层面去说吧
arthasgxy
2018-05-21 19:42:40 +08:00
我个人感觉,,如果面试官不是大牛的话。。他其实就是想考验一下你有没有想法。。
简单来讲,做功能,大家都会做,损一点的说法甚至可以把码农说成搬运工。

而如果你只会写功能,不会优化,对方就会觉得你是搬运工了。。。

当然,我感觉对方表述也有问题。。感觉像是两重意思都说得通:
1、如何提高代码性能?
2、如何在原有代码性能没有提高的情况下,通过某种“作弊”的手段降低 cpu 使用率,以让用户感觉到你的程序比别人的牛
masterAtyan
2018-05-21 19:43:12 +08:00
@zhoucan007 android 的虚拟机是不能调优的。 @nullcc 已经说了,CPU 占用率高,本质上还是密集的逻辑运算多。像是驱动之类的,涉及 IO 的操作,跟 CPU 占用率关系不大。主要的思路还是优化算法方面,android 的话还有绘制方面可以讲,至于利用 GPU 也是高大上的事情,可以不了解
fancyhan
2018-05-21 19:58:07 +08:00
开放问题啊,随便说说就好,你这样是自己水平不行
GLee9507
2018-05-22 08:17:00 +08:00
@fancyhan
@masterAtyan
确实,我只说出了内存优化,布局优化,绘制优化,面试官感觉不太满意。Android 中 CPU 优化我确实不知道怎么答。。
GLee9507
2018-05-22 08:19:51 +08:00
@holmesabc 嗯是,我比较迟钝,可能没有 GET 到面试官提问的点,当时应该让他列举一些场景。
GLee9507
2018-05-22 08:28:14 +08:00
@arthasgxy 嗯,你说的对。我只说出了内存优化,布局优化,绘制优化,面试官感觉不太满意。Android 中 CPU 优化我确实不知道怎么答。
GLee9507
2018-05-22 08:30:10 +08:00
@nullcc Android 总不能 Thread.sleep 吧,况且我认为线程睡眠是有一定开销的
zhuangBwang
2018-05-22 08:46:34 +08:00
本质上还是想程序问对电池的优化吧
GLee9507
2018-05-22 08:51:51 +08:00
@zhuangBwang 不是呀,是车载终端
zhuangBwang
2018-05-22 08:59:04 +08:00
@GLee9507 我的意思是电池优化的措施一般就是降低 CPU 的占用率,所以电池怎么优化,不外乎减少过度绘制,避免密集型运算,使用 Job Schedule 等等
GLee9507
2018-05-22 10:28:42 +08:00
@zhuangBwang 说得对,有道理
preach
2018-05-22 10:42:14 +08:00
炫技而已 这种直接不去
iwtbauh
2018-05-22 11:31:49 +08:00
“ CPU 使用率是无法人为干预的”
从某种意义上就是正确的

CPU 通电以后,就一直是 100%占用状态。

windows 用户打开任务管理器,看看所有进程,即使其他进程一共占用了 1%的 CPU,是不是还有一个包含“ Idle ”字样的进程占用了剩余 99%的 CPU。

这个进程 Linux 也有,叫 swapper,但是不会显示给用户。(但其实是有的,不信去看内核源码)

从计算机科学上讲,CPU 使用率的却无法人为干预,因为 CPU 一直都是 100%在使用。

原因在于,操作系统实质上是一个死循环
while (1)
{

}

内核会在中断时执行其他代码,最终达到一个“安全的任务调度点”时调度执行其他任务。
enenaaa
2018-05-22 13:19:18 +08:00
@iwtbauh 现在的 cpu 早就可以根据负载情况来动态调整功率了。 你没发现玩大型游戏时风扇转得特别狠吗。
操作系统是通过软硬件中断来调度的, 可不会搞死循环这套。
599316527
2018-05-22 13:33:36 +08:00
大体上讲两个方向吧,一个通过优化算法尽可能减少计算量;另一个空间换时间,缓存结果,尽量少算
iwtbauh
2018-05-22 13:38:57 +08:00
@enenaaa 调整的是频率,而不是占用率,占用率是没法调整的,CPU 通电以后就会一直转,频率是可以由 CPU 驱动程序管理。但是占用率你没有办法调整,不管频率调整得再低,CPU 该转还是转,还是 100%


这个调度和死循环并不冲突啊,,按你这么说没有中断的时候你让操作系统干什么呢,这个时候是操作系统以 idle “进程”的身份在执行这个死循环,因为 CPU 需要一直运行。
enenaaa
2018-05-22 14:34:01 +08:00
@iwtbauh #39
你貌似对占用率有误解? 一个进程占用当前 cpu 的时间比例是占用率,这当然根据该进程的运行情况来确定。进程没计算需求时挂起,自然减少占用率。
至于 cpu 总的使用率, 进入 idle 后是等待中断, 不是正常运行状态。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/456552

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX