知识体系与面试世界观
大家好,我叫修言,《前端性能优化原理与实践》、《JavaScript 设计模式核心原理与应用实践》等书作者,目前供职于某大型电商互联网公司。
在进入前端世界的这几年里,笔者历任创业团队 TL 、滴滴出行前端工程师,到现在成长为大型互联网公司的业务线 Owner;从五人小组、十人团队、千人公司到万人集团;从作为面试官去面别人,到创业失败排着队被别人面、再到重新成长起来后去面别人 —— 这一路折腾下来,没少和面试这回事儿打交道。前后接触了大量形形色色的前端团队,也沉淀了太多与面试有关的思绪,最终形成了一套简单直接、可复用性较强的面试思路和解决方案。
在此基础上,经过反复的打磨、实践的验证和表达层面的梳理,便有了你手里这套专栏。
面试官看面试
应试教育体制下成长起来的孩子(包括我自己),我们都有一个共同的特点:容易被考试激发学习热情。
这点多年来一直被人诟病,不过在我看来,它不是一件完全的坏事。
具体到面试这个场景下,它甚至是一件好事 —— 很多工程师平时可能埋头工作(在校的同学可能是埋头理论课程的学习),每天都在为了解决具体的眼前的业务问题而想破脑袋,其实很少有机会向内反思、反思自己的知识体系、尝试去修缮或者重塑它 —— 毕竟眼前的问题已经够多了,先把活干完才是最要紧的。而 “干活” 往往意味着重复,意味着被消耗,它善于把开发者推进一个尴尬的 “吃老本” 的境地里去,难以脱身。可能唯有在面试这场 “大考” 来临前,大家才有机会留出相对完整的时间给自己,尝试去做一次大规模的知识扫盲和生涯复盘。
在撰写面试专栏之前,为了能尽可能地了解读者,笔者花了大量的时间面向不同层次的前端同学进行了面试方面的调研。这个过程中,对一个现象非常在意:很多同学的收藏夹里有大量的面经、真题甚至成套的面试教程,但是他们的知识体系仍然处于一个非常脆弱、一碰就碎的状态,完全扛不住我们作为面试官日常非常喜欢的 “一问再问,追问到底” 这种考查模式。
这也正常 —— 拥有一把锤子,不意味着你会立刻变成一个木匠。同理,手握大量的面经、真题、大部头,也不意味着就可以从小白摇身一变成 offer 收割机。这中间的跨越,第一步,也是最大的一个前提,就是需要你真正把基础给砸实,建立起一套在你脑子里扎下根儿、怎么甩都甩不丢的知识体系。
知识体系规划
我们整个专栏的知识体系规划如下:
如果你是我的老读者,相信你早已见过一份类似的思维导图。最原始的思维导图比上图内容复杂很多,那还是我在 2019 年下半年小范围给大家分享过的一张 “私货”,供有面试需求、却没有备考思路的同学面试参考用。随后,渐渐有不少同学找到我,反馈说不够具体,“看了修大这图,却还是过不好这一生” 是我在那段时间听过最多的吐槽。
去年年中我立了个 Flag,打算把关于面试的思考和沉淀给具象化。半年来,一边 996 一边研究自己做过的题、研究别人做过的题、研究自己出过的题和别人出过的题,现在,是我交作业的时候了。
关于方法论的思考
怎么建立面向面试的知识体系?似乎不管你去问谁,对方都只会告诉你:刷题!看书!
然而现实中,就算每个备战面试的同学都在玩命地刷、反复地看,但最终的结果仍是大相径庭的 —— 这是因为不同的人对学习材料的选择和运用不同。
有的同学比较幸运,能够几乎不走什么弯路、在有限的备战时间中迅速地搭建起自己的前端知识体系。但更多的人做不到、或者说没法一下就做到,此时你要做的不是一味地死磕和问责自己,而是向外去寻求一些帮助、尝试切换自己的作战模式 —— 一下不行,我们就两下、三下、四下去搞定它。
前端知识体系本身是庞大、琐碎的,在这样的前提下,又存在技术点迭代飞快、信息碎片化的特征。种种因素综合起来,使得前端面试的知识构建过程变成了一个漫长的、内耗极大的过程 —— 学习者不得不拉开一个相当长的战线,阅读大量的纸质书、电子书、面经和真题之后,筛除其中错误、无用的部分(新手或许还未必能够很好地完成这个过滤的过程),再像拼拼图一样把零散的知识块组装到一起,才能渐渐切入到面试这个 “局” 里来 —— 不容易,我现在想起来也觉得,真 tm 难啊。
跟上节奏,保持乐观
技术类内容是难啃的,如此海量的技术内容更是在挑战每一个同学的耐心和意志品质。有人说,“学习本身就不是一件容易事”,这话不假。但当一块知识的学习成本变得这么高、高到令人望而却步的时候,就意味着问题已经产生了,它需要被解决。正因为如此,笔者希望能创作一个大家能看得懂、看得下去的专栏,希望它能成为各位求职路上的一个亲切的伙伴,而不是一块让各位一想起就头大、可望而不可及的 “心病”。
“以面试为契机、帮助大家完成知识体系的搭建”,是这个专栏要带大家做的第一件事,也是最重要的一件事。做完了这份 “作业”,相信搞定一个 offer 对各位来说已经不成问题了。
做工程师,不做答题机器
话说回来,如果你的目标不仅仅是 “有一个 offer” 这么简单,而是想要挑战一份好工作、挑战大厂,那么各位还需要做一道 “附加题”—— 建立一套面向面试的思维方式。很多同学存在一个误区,认为我只要能记住那些繁复的知识点,比如闭包、上下文、某个轮子的特性之类的,我大概就 “无敌” 了。至于思维方式,这玩意儿听上去太虚了,不是我们做技术的需要关心的东西。
诚然,基本功确实每一个人都避不开的,但是在面试过程中,对面试官来说,他期望看到的并非一个没有感情的答题机器,而是一个具备强大思维能力的工程师 —— 一个能出活、能扛事儿、能解决问题的战斗伙伴。
“面向面试的思维方式”,如何定义、如何考察?如何将这种能力内化为自己的一套思维工具?
这就是我们专栏要解决的第二个问题。
这块知识,学起来比硬的技术点要费力多了 —— 它涉及到你对自己认知能力、认知水平的改造。我知道有的同学打开一份像这样的专栏,你可能就直奔着知识点就去了,迫切地想要解决一些相对具体的问题,从而刻意地忽略了这些更高层次、抽象的能力的学习。
不过没有关系,读就完了 —— 这部分知识会被我规划在专栏的最末尾处。习惯一个人说话,需要时间。相信在专栏的结尾、在跟我一起打了那么多大怪小怪之后,学习区区一个章节的 “面试思维课” 对你来说不会是什么难事。
此外,在搭建知识体系的过程中,我也会引导各位去思考 —— 这个题,为啥这样出?出这道题的时候,面试官在想什么?慢慢你就会领悟到,一道题之所以成为高频考题、或者说面试官之所以抓着某个点不放,一定有其背后的原因。如果能够理解面试官的脑回路,相信你在触及自己知识边界的题目面前,也能够巧妙地化险为夷、把握面试的主动权。