大家好,我是吴师兄。
今天给大家分享一下技术面试中的手撕代码应该如何准备?。
不管是秋招还是社招,互联网大厂的技术面试中的手撕代码这一部分总是绕不过去的一关。不只是后端开发和算法岗,现在就连前端、运维、测试、数据等岗位也要考手撕代码了。
咱们从是什么、为什么、怎么做来分析这个问题。
手撕代码其实是广大求职者的一种略带戏谑的叫法,指的是在技术面试过程中,面试官给候选人出一道题目(大部分情况下是算法题,少数情况会出SQL题),让候选人在规定的时间内将题目完成。
之所以叫做手撕,大概是因为在口罩事件之前,一些线下面试会让候选人在一张白纸上直接写出代码/伪代码,而不会直接在电脑上运行程序。
由于目前大部分的技术面试都在线上进行,手撕代码的形式也就变成了在IDE或者在线编译网站中完成代码。
很多同学对手撕代码叫苦不迭,工作又不是做题,为什么偏偏要在面试中考察这样一个看似和未来业务关联不大的内容呢?
如果你吐槽数据结构与算法在未来用不上,那难道项目、八股就用得上吗?难道面试官会不清楚这一点吗?
实际上,相比起笔试可以代考、项目可以编造、八股可以硬背,面试的手撕代码部分反而是最公平、最能考察候选人水平的方式。
另外,从用人单位降本增效的角度来看,与其让更多的面试官花时间经历深挖简历,还不如一场算法笔试、一次手撕代码对人才的筛选力度大,这对企业来说是更加节约成本的招聘方式。
手撕代码和笔试是可以一起准备的,因为本质上考察的都是数据结构与算法知识。
算法题的考察实际上是一种半标准化考试:虽然没有考试大纲,但常考的知识点就是那些,题目通常以变换题干或结合不同知识点的方式来考察候选人能力。
各个知识点的难度可以大致用以下表格划分
难度 | 知识点 |
---|---|
入门 | 数组、字符串、链表、排序 |
简单 | 栈、队列、哈希表、双指针、贪心 |
中等 | 二叉树、堆、单调栈、滑窗、二分、位运算 |
困难 | DP、DFS、BFS、回溯、并查集、前缀树 |
上述表格只是一个非常粗糙的划分,需要循序渐进地进行准备和刷题。如果暂时无法自己想到解题思路,则可以先看答案,模仿他人代码,过段时间(比如一周)之后再重新尝试自己实现代码。
如果时间充裕且自我总结的能力强,那么完全可以自学网上的免费内容(比如代码随想录等),注意刷题过程中要做好每一个知识点的归纳。
如果时间紧张或者缺乏自驱力,那么找一个靠谱的算法老师或者参加算法培训,让有经验的人带着你一起学习,能够会得到事半功倍的效果。
另外,手撕代码和秋招笔试最大的不同在于讲这个动作。所以还得有意识地培养自己逐行讲解代码,讲解思路的能力。
这个其实有点像费曼学习法的过程:如果你能够把一道题目给其他人讲懂,那么说明你自己一定是真正学会了。
假设你已经把算法学得相对透彻,那么在技术面试的具体过程中,我们在一场手撕代码中向面试官展示出自己的水平呢?
" = "
前后加上空格,变量名命名清晰等等。另外,手撕代码和笔试略有不同的地方在于,更大概率会考察经典题,主要以LeetCode中的简单题和中等题为主,而且考察种子题的概率更大。所以一定要多加练习经典题型。
关于经典题型有哪些,可以看这篇文章,整理的非常非常详细了。