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

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

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

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

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

举报· 1655 次点击
登录 注册 站外分享
15 条回复  
happyz90 初学 昨天 11:35
我觉得这个问题更侧重于看你“分析问题解决问题”的能力,因为性能问题并不是一个固定的问题,不同的场景有不同的影响因素和优化手段。在对底层实现有一定的了解的基础上,准确识别瓶颈所在,然后根据具体上下文设计针对性的方案。既考察了对系统底层掌握程度,又能了解你灵活分析与解决问题的能力。
happyz90 初学 昨天 11:37
不小心点了回复,接上文。。。所以面试官重点想听的就是发现问题、分析问题、解决问题的「过程」。
WarWithinMe 楼主 初学 昨天 11:45
@happyz90 当时讲了一些前司项目上的问题,然后说了我自己的见解和解决方案,好像没有太大作用。比如前司架构因坚定执行函数式编程导致导致大量临时变量产生,从而周期性触发浏览器 GC ,就会周期性卡顿。或是编译 Skia 到 WebAssembly ,用它绘制 canvas ,并实现 tile rendering (类似 Figma 的技术),从而规避超大文档的渲染性能问题等。不过也有可能我表达有问题,或者这些事情不太符合预期?
happyz90 初学 昨天 11:52
@WarWithinMe 可能比较偏向于描述最终结论了?「是因为 xx 导致了卡顿」,而不是「怎样一步步排查而发现是因为 xx 导致的卡顿」。我觉得性能问题的重点就是过程,比如可能排查了一星期,最终只要改动一行代码。
WarWithinMe 楼主 初学 昨天 11:54
@happyz90 确实,有个面试官是跟我说“那你用到什么指标啥的”。。
murmur 小成 昨天 11:58
除了 pdd ,没几家配谈性能优化,现在的性能优化要么是骨架图这种虚假安慰,要么是砍功能 产品经理堆一堆屎给用户,后台又是隐私窃取又是 PCDN 还要保活,这个情况下能在低端机上真的做出优化的只有 pdd
ChatGOP 初学 昨天 12:00
说实话, 这些问题完全是八股文。面试人喜欢你就会要你, 不会太在意你的回答的。通常面试前一分钟基本决定了你的面试结果
howfree 初学 昨天 12:16
1.我来现在的公司做了大半年的性能优化,有些项目交付的时候,需要压测报告,这个是硬指标,也面了很多人,主要就是招来做性能优化的,确实实际处理过性能优化的人,还是太少,大部分都是八股文的那些东西; 2.一个人做没做过性能优化,对于真的处理过的人来说,很容易判断出来 3.八股文如果比较强的话,也是加分项 4.更多考虑的还是处理疑难问题的实际经验和能力,性能优化就是很好的一个考察点,案例越详细,越真实,会更加分 5.也和大厂的朋友聊过,因为刚做的时候,也没经验,最开始就是调整代码(前后端调整,数据库层面、还有就是中间件的调整),再不行就向上调整需求方案,再不行就加钱,提高环境配置,工具可能就是 JProfiler,阿里的阿尔萨斯这些,但是更多的还是从实际情况入手 6.我是做 java 的,性能优化基础知识可能会比较注重线程池、多线程、数据库、缓存、mq 这些
night98 小成 昨天 12:46
瞎编就行,构造一个场景,然后 balabala 说尝试各种方案,然后说一个最合理的方案就行了。要么就是直接找各种大佬的博客看优化案例然后自己虚构一个稍微改编一下,当然最好的方案还是自己实际遇到并处理过。
12下一页
返回顶部