最近面试发现有些面试官喜欢问“性能优化”问题,例如“你有没有什么性能优化的案例”等。
我自己做 UI 开发大概 16 年(包括大学时间),被问到这类问题,我第一反应就是没有什么问题足以让我记住一辈子,然后逢人就会拿出来娓娓道来。倒不是说我完全不去考虑性能问题,而是觉得这些都是基本操作,好像没有什么特别值得一提。我能想到的,比较宏观的有 iOS/MacOS 系统的 CALayer 需要通过 IPC (涉及到序列化和反序列化)让后台进程做图形渲染,那么遇到高性能绘图的需求,就需要考虑用别的方案以规避序列化这个耗时的操作;比较微观的有在写 GPU shader 的时候,如果 warp 线程组里面的 memory access 能按照硬件条件对齐地址,那么就可以一次性进行 memory 读取,否则会导致多次读取。感觉这些真讲起来也比较抽象,没这类经验的人听了也白听。然后,还有重度计算的任务看看能否拆成多个子任务然后丢给多个线程从而充分利用 CPU ;什么重交互的 UI (例如 feed 流),期望是在重度交互过程中能保持 60FPS 的帧率这类感觉都太基础。
在我看来优化的思路主要就是看看算法是否做了很多冗余的东西,降低其复杂度,避免不必要的代码。然后分析一下硬件瓶颈(每个硬件都能成为瓶颈,包括 CPU ,内存,磁盘,网络等),一般情况下想办法充分利用硬件资源即可。得要具体问题具体分析。
记得年前字节的面试官整个面试不停提及性能优化这个关键词,但最后我发现他在乎的是诸如用户输入事件需要 debounce 这类在做一个 search input 时的应该默认就加上的基本操作。。
所以大家面对这类问题都是会怎么回答,才能让面试官满意。或者说面试官到底期望一个什么样的答案?
|