文章转载来源
https://leetcode.cn/circle/discuss/GSHJ5l/
自己平时作为力扣刷题人,也经常被题目虐的体无完肤,但最近面试了一些同学,发现一些感悟,特此记录。
核心是希望找一个结构化刷题方法,从之前的五步、到六步、再到七步刷题,也逐渐迭代更多。
复盘关键点:
从6步升级为7步曲结构面试法(需边思走测注,错):
需求确认,需要重复,以及注释并且了解清楚边界,拿到需求确认分
边界防护,拿到严谨性分,错误判断
思(solution)路说明,拿到沟通分,以及照顾面试官情绪。可以不说明多个方案,等到面试官问了再说出来优化方案。但是自己在草稿上思考要写几个点。(其实也可以说,可以训练自己的多方案能力。比如我有三个方案:暴力、贪心、递归。我准备用贪心实现。)
走查代码,写完后要走查一下,拿到严谨分,走查用一个案例。尤其是边界确认(技巧极值法)
测试代码,拿到测试分,表示严谨
注释,拿到代码风格
错题本复盘,记录自己出错的点以便复盘和记录
16关卡
最近面试一些同学,发现如何考察同学是一门艺术,同时也是臻选的方法(虽然自己在算法上也很菜)。仅仅看能不能kill,只能看出编码能力,但是绝大部分候选人如何区别。我想面试中至少有这16关:
能做出来吗?(关键技巧,比如常见的14中模式是否一样get,如果get这个候选人进入一个level)
入参考虑了吗?
题目清楚了吗?
预留可能的坑避免了吗?
代码速度如何?
代码风格如何?
边界考虑了吗?
有自查习惯吗?
bugfix能力如何?
是否思维敏捷?
有值得学习的地方吗?
引导思考能快速get吗?
follow up能够基本实现吗?
如果不能实现能讲清楚思路吗?
复杂度能能准确拿出来吗?
有沟通能力吗?
自己是否能过掉16关斩16将。
所以每次作为面试官来看大概会一项一项的拿分,拿分也就是心中会对候选人加分,再次总结为:
kill分 (get)
入参分 (get)
题目分 (get)
闭坑分 (get)
速度分 (get)
风格分 (get)
边界分 (get)
自查分 (get)
bugfix分 (get)
followup分(get)
沟通分 (get)
复杂度分 (get)
至此,一个候选人基本就出来了。高下立断。背后需要太多次训练才能养成习惯了。
面试杂谈
另外根据面试官这个测评维度来准备自己的题目也很重要。
首先面试官预约好之后,在面试前基本会准备好要考察的点,然后一一考察。
基本就是:
技术基础:
比如OS(Linux)、网络、C语言、数据结构、如果嵌入式有I2C协议等。也会串联问也可能深度问。
比如static3作用,提到了静态变量
-》 就会问静态变量存哪儿?如果回答.data
-》就再问.data还存了什么?如果回答初始化的全局变量
-》就再问未初始化的放哪?。。。
由此来看候选人的技术深度能力
项目背景:
一般会根据STAR了解候选人,做的项目,在项目中听到技术点一一深入下去问技术细节。
比如网络用到了tcp,会问为什么不用udp,
-》顺便就问了区别。如果区别回答中提到了tcp可靠性传输
-》顺便就问了滑动窗口原理。如果滑动窗口回答中提到了确认丢包。
-》 顺便就问了拥塞控制原理…
手撕代码:
那就是前面提到的结构化刷题了。只是面试官可能准备了所刷题目的坑有几个、followup有几个、分别考察什么等等。详细就是前面的16关模型了。
以上仅仅是个人思考,虽然自己算法也很菜,但感觉对于结构化刷题挺有用的,更重要的是自己提高了综合能力,尤其是在校同学的工程化能力,比AK更有效,不喜勿喷,欢迎点赞。
作者:北冥有鱼
链接:https://leetcode.cn/circle/discuss/GSHJ5l/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。