查看原文
其他

如何看待程序员“面试造火箭、工作拧螺丝”?| 畅言

桃翁 程序人生 2019-04-27

作者 | 桃翁

本文经授权转自前端桃园(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)

戳他了解更多↓↓↓

 热 文 推 荐 

 程序员的双肩包,大概能装下整个宇宙!

 Erlang 之父去世,他留给程序员两点忠告

 我们在抵制 996 时,反对的到底是什么?

 国际信奥金牌,保送清华姚班,这位 00 后是怎么做到的?| 人物志

☞ 为什么雷军指责“华为不懂研发”?| 畅言

 强推!十大顶级大数据可视化工具 | 程序员硬核评测

☞ 裁员25%, 梅西也拯救不了全球第一款区块链手机!

☞ 深入卷积神经网络背后的数学原理 | 技术头条

☞ 程序员被骗"黑砖窑":监禁、恐吓、996无休编程!

System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

你点的每个“在看”,我都认真当成了喜欢

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存