面试过程中被多次问道性能优化,想了解一下这类问题的期望答案

8 天前
WarWithinMe  WarWithinMe

最近面试发现有些面试官喜欢问“性能优化”问题,例如“你有没有什么性能优化的案例”等。

我自己做 UI 开发大概 16 年(包括大学时间),被问到这类问题,我第一反应就是没有什么问题足以让我记住一辈子,然后逢人就会拿出来娓娓道来。倒不是说我完全不去考虑性能问题,而是觉得这些都是基本操作,好像没有什么特别值得一提。我能想到的,比较宏观的有 iOS/MacOS 系统的 CALayer 需要通过 IPC (涉及到序列化和反序列化)让后台进程做图形渲染,那么遇到高性能绘图的需求,就需要考虑用别的方案以规避序列化这个耗时的操作;比较微观的有在写 GPU shader 的时候,如果 warp 线程组里面的 memory access 能按照硬件条件对齐地址,那么就可以一次性进行 memory 读取,否则会导致多次读取。感觉这些真讲起来也比较抽象,没这类经验的人听了也白听。然后,还有重度计算的任务看看能否拆成多个子任务然后丢给多个线程从而充分利用 CPU ;什么重交互的 UI (例如 feed 流),期望是在重度交互过程中能保持 60FPS 的帧率这类感觉都太基础。

在我看来优化的思路主要就是看看算法是否做了很多冗余的东西,降低其复杂度,避免不必要的代码。然后分析一下硬件瓶颈(每个硬件都能成为瓶颈,包括 CPU ,内存,磁盘,网络等),一般情况下想办法充分利用硬件资源即可。得要具体问题具体分析。

记得年前字节的面试官整个面试不停提及性能优化这个关键词,但最后我发现他在乎的是诸如用户输入事件需要 debounce 这类在做一个 search input 时的应该默认就加上的基本操作。。

所以大家面对这类问题都是会怎么回答,才能让面试官满意。或者说面试官到底期望一个什么样的答案?

2977 次点击
所在节点   职场话题  职场话题
24 条回复
chashao
chashao
8 天前
我认为回答给面试官性能优化的流程会比较好
比如我在做游戏的性能优化,一般得先通过数据找到问题出现的地方,这是一个由粗到细的过程(从线上性能数据日志开始),然后根据出现问题的地方设计优化方案,方案里会考虑当前引擎里能不能做、如何兼容旧引擎、会不会产生很大的 patch 量等因素,然后制作一个可以重复复现性能问题的 Demo ,通过方案使用与否的性能指标对比来落地,最后再通过线上数据得出优化结果。
kingcanfish
kingcanfish
8 天前
@ltaoo1o #12 同意的 我面试最害怕的就是面试官做过和我差不多的项目 然后他就会自然而然的往他自己的解法上靠, 实际上每个人项目条件和环境都不同,解决方案都是不同的,有些水平不高的面试官就认定他的解法时最优的,你没想到你就是不行 非常无语
nrtEBH
nrtEBH
8 天前
这是典型的开放性问题 类似后端面试的系统架构设计 考的一个是经验一个是实际经手案例 然后是结构化分析问题设定边界拆解回答的思维过程 在其中再继续深挖你的技术深度
LandCruiser
LandCruiser
8 天前
你麻省理工毕业的,或者谷歌工作回国的,面试官一个屁都不敢放,这个行业现在已经和技术没关系了。

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

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

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

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

© 2021 V2EX