如何看待程序员“面试造火箭、工作拧螺丝”?| 畅言
作者 | 桃翁
本文经授权转自前端桃园(ID:fetaoyuan)
很多人总是抱怨面试官问一些平时不常用的知识点,比如算法、网络(TCP)等等,也就是大家常说的:面试造火箭,工作拧螺丝。
但是有没有想过为什么整个前端圈,或者绝大部分面试,不仅是前端,各种职位都是这样呢?难道就没人来解决这个问题吗?
我觉得,事实上,这是一种合理的行为,并不是因为存在即合理,而是本来就应该这样,接下来我以两个方面阐述我的观点。
考验对专业知识的掌握的扎实程度
在张鑫旭的十问十答里的一个问题是,「前端开发基础扎实的标准是什么?」——这里面他对「扎实」的解释我觉得很适合来答这个问题。
「扎」其实可以理解为深度,你可以想象一个用一根针,扎你的皮肤,对一个点的压力,可以让你痛不欲生。
那么如何理解知识的深度呢?
我还是拿前端面试来举例,比如考一个快速排序,很多人就觉得这有什么好考的嘛,平时又用不到,引擎底层已经写好了 sort 方法,什么数量级用什么排序底层也已经实现好了,没必要考了呀。
但是其实面试官并不是想考你快排的代码是如何写的,说实话,花个十分钟,最多半小时,一个快排的代码你肯定可以记住。但是其实考察快排的真正原因可能不仅仅是考察代码,而是考察它的思想,分而治之(分治法),划分算法的运用。
另外可能会再问你,它的时间复杂度是多少,如何计算等这些问题,这些问题也不是来考你这一个算法的计算,而是通过这一个算法来看你知道怎么算时间复杂度不?以此来引导你为什么快速排序快,为什么同样是分治法的归并排序没有这么快......等等相关的算法方面的知识。
面试官所考察的问题只是各种底层思想的一个运用,通过这个实例应用来考察对底层思想的理解程度。所以很多时候大厂的面试总是从浅入深的问问题,直到把你问到不知道为止。
再谈谈「实」,实则可以理解为满,考察知识的广度。
想象一下什么样的情况你才会说一个东西实,给你一晚装满的米饭,并且还压一压,再放进去一些米饭,直到压不下去了为止,这个时候你会说满满的一晚米饭,很实在。
所以对「实」的理解就可以理解为满,全。
如何来体现你对知识的广度呢,也就是实。
比如可以考察一些你平时不常用的,但是你也许会用到的知识点。比如一些简单的算法和数据结构,链表呀,网络里面的 tcp/ip 协议族呀,函数式编程呀等等,一些 html5 的特性(比如 web-compoennt)等等。
你可能在平时编程中没用到,或者大多数前端工程师平时不会用到,但是这些是基本功是需要知道的,比如 React 源码中就用到一些简单的数据结构,链表(Fiber 树就是用链表的结构存的,是一个单链表,以及里面还有循环列表的增删改查),如果不知道树可以用链表存,如何对链表进行操作,那么可能你看源码就很成问题。里面还有一些位运算等,位运算平时也不常用吧,但是 fb 的工程师就用它来解决实际问题。
再比如 web-component,这已经是 w3c 提出的一个前端组件化的标准了,我国也有大佬用 web-component 实现了一些库,比如腾讯出的 OMI。
地址:https://github.com/Tencent/omi
所以狼叔在 「2019 大前端技术趋势深度解读」里提到可能他是下一代框架的标准。
我们前端变化得快,新东西也多,如何不跟上时代,多了解(主要了解,不是每个新东西都要去深究,因为你没那么多时间,大多数时间还是要用在平时用得到的地方)一些新东西。跟不上时代,也行就会慢慢的被淘汰,所以现在前端招聘基本上都会需要你会一门框架,不管是 React 、Vue、Angular,这些都是趋势,数据驱动,不再是以前拿起 jQuery 就是干了。
小节
在工作中常用的知识点,那些是最重要的,那么大家都会这些,如果你不知道点,别人不知道的东西,这些东西比别人掌握得更深一点,面试官为什么要你?也许你还是个双非(非982、211)。
我觉得在任何领域都适合一个定律,就是「T」字形发展,先把专业搞深一点,然后往两边扩展。
醉翁之意不在题
另外面试官也许会考你一些软技能,考你的不仅仅是面试题完成了那么简单。这点注意,越简单的题越不简单(好好理解这句话)。
我拿我自己的经历来举例,之前做小米的笔试题(是那种把题目发给你,两天内做好了发给他)的时候,有一道题是:求最大公约数的题目。
很多人看到这道题觉得很简单嘛,几行代码就搞定了,当时跟我一起做笔试题的几位竞争者也是,他们就写了一个算法。
而我当时想到,我觉得面试官在检查这道题的时候如果看代码还是有点麻烦,所以我就写了一个界面,界面上提供了可以点击的数字,还有输入框,还有几个计算按钮,一个结果框,用户可以通过点击数字,或者在输入框里输入数字进行计算最大公约数,还做了一些错误提示等。
这相当于做了一个应用,一个可以给用户使用的应用,所以最后因为这道题,我被录取了。
我被录取的原因,这些都是进去之后,老大告诉我的,当时很惊讶,竟然是因为这个。
所以之后我就越来越注重用户体验,多一些思考,让别人用自己做的东西的时候更舒服,更方便。
我期望的面试官
声明:我没当过面试官,所以以上内容大多是我思考(猜测)的,也可以用说用一种合理的解释,来解释了现在这种现象。
我期望的面试官是这样的,或者说如果我以后当了面试官我会怎么做。
作为面试官不是把面试者考倒,而是尽量挖掘面试者擅长的地方,然后去打破砂锅问到底的看对擅长的地方研究有多深,考察深度。
在考察的时候先考察广度,再考察深度,从广度的问题中提取擅长的点,然后再问下去。
一些小提示
一般面试官不会因为你某道题没答出来就否定你的。
面试官不喜欢简历上写的啥都会,一问每个知识点都掌握得很浅。
对于平时常用的框架,至少要知道核心原理。
这些是之前我们组面试官在讨论的时候提到的,希望能给大家帮助。
作者:我是桃翁,一个爱思考的前端er,想了解关于更多的面试相关的,请关注我的公号:前端桃园。
本文经作者授权转载,如需转载请联系原作者。
作为码一代,想教码二代却无从下手:
听说少儿编程很火,可它有哪些好处呢?
孩子多大开始学习比较好呢?又该如何学习呢?
最新的编程教育政策又有哪些呢?
下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)
戳他了解更多↓↓↓
热 文 推 荐
☞ 国际信奥金牌,保送清华姚班,这位 00 后是怎么做到的?| 人物志
System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"