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

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

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

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

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

举报· 1650 次点击
登录 注册 站外分享
15 条回复  
yty2012g 小成 昨天 14:09
我之前问类似于这样的问题(往往是配合具体场景),我想要听到候选人谈到的点: 1 、你是怎么发现/识别到性能优化点的?发现问题的方式方法很多,那你怎么识别到是这里需要做性能优化的? 2 、识别到性能优化点后,你是怎么思考解决的?你做过哪些思考和尝试,怎么体现出深度? 3 、升华一下,你怎么能避免以后不出现类似的性能问题?你能提炼/总结/沉淀出什么经验
yhxx 小成 昨天 13:43
从前端的角度来说一点我自己的理解吧 我几乎每次面试都会被问到这个话题,自己面试别人的时候也很喜欢问 首先从我的经历来看,肯定不是楼上老哥们说的“完全是八股文。面试人喜欢你就会要你, 不会太在意你的回答的。 面试官都是带着答案来问问题的,刚好能说到答案,面试官就会认为你会,很满意,和自己观点相同。” 这个话题一般比较开放,如果面试的是一个比较资深的岗位,期望的答案一般是希望能体现出候选人有渊博完备的知识体系,同时有丰富的实践经验和业务理解 ,最好还能有足够前瞻的技术视野。 比如可以从那个被问烂了的“从输入 url 开始到页面加载完成都发生了什么”聊起,讲一下有哪些流程,每个节点上有哪些优化点,哪些部分分别可以提升加载、渲染、交互的流畅程度,有什么弊端。 再整理一下如何衡量性能,都有哪些指标,监控 & 诊断、数据驱动优化。 业务中遇到了哪些性能问题,如何分析、如何解决,成效如何。 未来展望,比如 HTTP3 、边缘计算,balabala 其实面试中遇到这种题挺好的,完全可以充分体现自己的知识深度广度,更重要的是能耗掉相当多的面试时间。你也不想聊了 20 分钟之后,面试官:我没啥可问的了,我们来一道 3D 接雨水吧?
cobbage 小成 昨天 12:58
搞了一年的运维大部分优化搞的 sql 层面,业务 tob 的。想实战参与下别的手段上点中间件类的奈何没机会。前段基本(老项目)大部分搞点限制条件,渲染批量还是单个,看能缓存不,也有些项目有 bug 的碰到了一个级联多选疯狂请求后台的。
ltaoo1o 初学 昨天 12:53
面试官都是带着答案来问问题的,我之前也是。刚好能说到答案,面试官就会认为你会,很满意,和自己观点相同。 你说到一个面试官没接触过的,即使是对的,面试官自己都不懂,就不满意。好的面试官还会和你聊一聊,你这时候就要说服面试官,但是效果肯定不如说到预先的答案上好。 面试官水平有高有低,面试面的就是和面试官是否投缘,你会的刚好也是面试官会的,你的观点也刚好是面试官的观点,这样 100%稳了。
gransh 初学 昨天 12:53
那个词叫 [问到] ,我一眼看成性道...
iOCZS 小成 昨天 12:51
“他在乎的是诸如用户输入事件需要 debounce 这类在做一个 search input 时的应该默认就加上的基本操作”---这算鸡毛优化,属于交互规范了。 我觉得大部分项目不需要刻意优化,能做到适老、无障碍、合理降级已经非常不错了。 没有严重的内存泄漏、卡顿、崩溃已经达标。当然包的体积能小点最好了。
night98 小成 昨天 12:46
瞎编就行,构造一个场景,然后 balabala 说尝试各种方案,然后说一个最合理的方案就行了。要么就是直接找各种大佬的博客看优化案例然后自己虚构一个稍微改编一下,当然最好的方案还是自己实际遇到并处理过。
howfree 初学 昨天 12:16
1.我来现在的公司做了大半年的性能优化,有些项目交付的时候,需要压测报告,这个是硬指标,也面了很多人,主要就是招来做性能优化的,确实实际处理过性能优化的人,还是太少,大部分都是八股文的那些东西; 2.一个人做没做过性能优化,对于真的处理过的人来说,很容易判断出来 3.八股文如果比较强的话,也是加分项 4.更多考虑的还是处理疑难问题的实际经验和能力,性能优化就是很好的一个考察点,案例越详细,越真实,会更加分 5.也和大厂的朋友聊过,因为刚做的时候,也没经验,最开始就是调整代码(前后端调整,数据库层面、还有就是中间件的调整),再不行就向上调整需求方案,再不行就加钱,提高环境配置,工具可能就是 JProfiler,阿里的阿尔萨斯这些,但是更多的还是从实际情况入手 6.我是做 java 的,性能优化基础知识可能会比较注重线程池、多线程、数据库、缓存、mq 这些
ChatGOP 初学 昨天 12:00
说实话, 这些问题完全是八股文。面试人喜欢你就会要你, 不会太在意你的回答的。通常面试前一分钟基本决定了你的面试结果
12下一页
返回顶部