本文以个人经验(面试别人和被别人面试)为基础,侧重介绍在加拿大申请前端初级开发岗位的准备工作,当然如果你在准备申请全栈方面的工作,这篇文章也能够帮你查漏补缺前端方面的知识。适合有基本Web开发经验的朋友食用。
前端开发的日常
若是去一个Startup,在没有一个完整的产品出来前,基本工作极有可能还是从0或简单基础开始架构开发页面。而去一个大公司接手一个已经推出的大型产品,那基本工作更倾向于维护和新组件开发。不同于在学校做web project,公司里的前端开发在前后端分离的基础上规范化了整个流水线,就是设计到开发再到测试再到部署;基本上很难出现一人接锅实现高耦合开发的情况。加上现在进步实在太快,像学校里用的jQuery之类的库在一个成熟的公司已经很难看到了,而且Bootstrap这样的第三方库通常也不会使用。再加上越来越多的产品开始用合适的框架进行重构,而这些都是通常学校里都不会教的,即意味着你要花很多时间去自学这些知识和技能。
就我现在工作下来,所碰到的日常任务主要是:
- 根据设计稿进行页面开发
- 维护产品内部前端组件库
- 对已上线产品的Bug进行修复
准备面试
就校招而言很多大厂科技公司都会放出大量SDE(Software Developer Engineer)的职位,但真正落实到实际岗位的job post并不是很多,而你更多地会在社招发现很多(类似于Site Reliability Engineer, Backend Developer)。绝大部分公司对于学生群体在特定领域的知识和经验积累不会有太高的要求,固然也可以理解不会有太高的期望。其实这是一件好事,若你找到SDE的工作以后,你会有机会接触各种各样的项目和技术方向,从而能够让你有足够的时间去寻找自己的发展方向。当然,若是你选择了特定职能的岗位,那你就应该已经做好心理准备且有足够的热忱和对你实力的把握。
先说申请。网上找工作的时候,你看到很长的Job Description会发现有60%都不会。不带慌的,毕竟很少有Entry-Level真的能像他上面说的能够熟练使用Vue+React+Angular(当然我也只是打个比方)。广义上公司方面是希望广撒网多捞鱼,但也不排除唬人的情况。我的申请判断是当我会40%就投,一方面是因为有web开发经验(哪怕做过一个web app就行了),另一方面是因为国外公司真的慷慨包容到在你有一定基础知识的情况下给你一段时间让你学习。当你有HTML+JS+CSS并且能够独立的做一个交互页面,那基本上就没什么问题。若是你有用过任何一个框架或库,那更胜一筹。
国外和国内前端开发的面试侧重是完全不一样的。如果说算法题是国外面试的八股文,那应试模式的基础理论知识便是国内面试的八股文。基本上一场前端面试和SDE的面试一样可以分为3个steps,项目介绍、技术栈知识、算法题。当然,也有大公司只攻算法题的,尤其是社招;这个除了猛攻Leetcode没有其他出路。简而言之,这3个部分比重不一样,难度也不一样。
先说项目介绍。面试好几家公司下来,我发现国外公司在校招中对申请者的实际工程经验和实践知识并没有太高的要求,通常都只会在面试开始的时候让你介绍自己的项目,之后会被问及几个问题。除非做的是很复杂的工程,会让面试官感兴趣,例如分布式;否则目前看来就单例模式的Web项目的而言,除了靠创意加分,吊足这帮有经验的人的胃口还是很难的。准备的时候多熟悉一下,面试的时候就把整个架构和设计思路理顺了之后往天上吹,像是RESTful、MVC、前后端分离之类的。
接下来就是技术栈知识。我去年实习期间参与面试工作时有一件事印象深刻:现在有很多人开始借鉴网上的那一套视觉化简历给自己所会的技能打分打星。毕竟没有一个客观的衡量标准去评价你的水平是“精通”还是“熟悉”还是“了解”,每个人的标准都不一样。如果你低估了自己的水平,那可能你就少了一个能在面试官面前狂秀技术的机会。但如果你高估了自己的水平,比方说对于自己的JavaScript打“8/10”,但是却连什么是原型链和闭包都答不上来,那基本上就已经就地毙了。所以,不要这样做。直接在简历上写会什么,至于会多少,面试官自己感兴趣会摸出来的。就这一个部分而言,负责任的面试官会从你刚刚介绍项目过程中把那些挖的坑一个一个往里深钻然后让你跳进去,这即是吹的代价。基本功扎实的完全不用担心,至今为止我还没有被问到很偏门的问题,比如说“Accept-Charset的HTTP Header是什么”;但也不排除有面试官早早google了一堆这样的问题就在你面前炫耀一波(别问,亲眼所见),真要碰到这样的情况也不带怕的,要知道跟这样的人共事基本上也没什么意思了。对于技术栈知识系统梳理没有经验的朋友,我推荐的最投机的方式就是看Job Description进行查漏补缺(当然还有更系统的方式,之后会介绍到)。这个基本上能直接反映出这个职位所在组的技术栈和日常工作,所以你可以在Job Description里的要求技能中进行筛选准备;一系列的选择加上梳理记忆一定程度上提高命中率,当然前提是你的时间绝对宽裕。
最后就是算法。前端方面的算法要求应该可以说是所有开发类岗位中要求低的了,除了之前阿里面试吃了一记红黑树和B+树的闷亏。就目前看来,基本上刷熟Leetcode Easy和高频Medium的题基本上就可以运筹帷幄了。我基本上所有的面试能用JavaScript的我都用JavaScript,除了亚麻的OA上了Python,然后Bloomberg面试被对方鄙视了,其他情况基本上一路畅通。然而极个别题目会因为BigNumber和IEEE 754的问题导致Failed Test,遇到这种情况再用其他语言也不迟。
推荐阅读
学习JavaScript数据结构与算法(第3版)
之前买的是第二版,涵盖了基本的数据结构和算法之余还加上了动态规划和各种图算法,整本书重点分别用ES5和ES6实现算法,基本上已经很够用了。第三版在难点方面主要添加了红黑树和回朔的讲解,这些是在第二版里面完全没有提到的。个人选择把这本书上的js实现全部吃透,后来再去开始慢慢用java实现的时候,上手非常快。
Web全栈工程师的自我修养
虽然从书名看来这本书是专门给“全栈工程师”设计的,但是我强烈推荐想往前端工程方向发展,尤其是科班出身的朋友一定要入手这本书,甚至能够做到有空就翻。这本书包含了对前端的知识体系的介绍,同样也让你对Web开发的后端和运维方面有大致的了解。一方面在面试的时候你能做一些Educated Bluffing的高难度姿势(手动滑稽),另一方面也方便你快速适应工作环境。
CS Interview Knowledge Map
一位国内大佬总结的前端面试题攻略,涵盖了很多近几年潮流中的重难点,除了JS的知识点以外还包括了对浏览器和性能的重难点讲解。对于已经掌握了基本知识但是很多方面还没有机会实践的朋友看这份材料能够有更加深刻的印象。这个大佬同样还在掘金上推出了<前端面试之道>,主推国内大厂前端面试准备,有兴趣的朋友可以看一下。
33 Concepts Every JavaScript Developer Should Know
文如其名,33个基础知识点。本质上是一篇索引文,对于某些生疏的知识点可以直接到这个上面翻阅然后去看推荐的资源。有英文也有中文。适合查漏补缺用。
JavaScript高级程序设计(第3版)
前端界的红宝书,国内前端界的圣经(都把JavaScript权威指南拿去垫显示器了)。不建议在临时抱佛脚的时候看这本书,毕竟信息量非常大,如果时间充裕的话我建议过一遍来扫盲。虽说重头戏是从第四章开始,但我建议可以先从DOM开始看,然后再回过来看很底层的内容。
你不知道的JavaScript 上卷 中卷 下卷
很多人都说JavaScript是让人完全摸不透的语言,毕竟坑实在太多。这个系列分上中下三本,基本涵盖到了所有JavaScript里的原理。同样,我不建议冲刺的时候看,因为信息量实在是太大而且非常深入。如果及早的准备的话,我觉得通读完这系列和红宝书之后你可以很大胆地在简历上的JavaScript那一栏标上“熟悉”。
front-end-interview-handbook
同样文如其名,面试的问题涵盖了HTML+CSS+JavaScript,用于自检和查漏补缺,就目前而言算是发现比较全面且刁钻的(各位可以到知乎上搜“前端面试题”,也可以收集到一堆)。其实不太建议日常学习的时候看这些东西,就像是给你灌汤药一样,你也做不到知根知底;但是就突击应试而言的确有一定的概率会歪打正着,比方说面试官准备题目的时候同样在看这些文档材料,所以若是想抱着运气的话可以一试。
ECMAScript 6 入门
大佬阮一峰(他的博客很值得经常翻阅)的作品,详细地解说了ES6的各种语法。如果你要是感兴趣想跟上时代可以考虑一看,但毕竟面试的时候不是必要的(如果Job Description里写明了ES6,那我强烈建议你看),所以把这个当作是附加项吧。
推荐网站
Leetcode
这个不用多说了,算法必备良药,二话不说就是一顿猛攻。
Codecademy
这个网站现在应该是众所周知了,主要还是吸引初学者。当时申请工作的时候主要用这个网站复习一系列Syntax和框架知识。建议花两天时间扫完一下课程:- Asynchronous JavaScript
- Learn Sass
- Learn Responsive Design
- Scrimba
这个网站是我今年在找JS的Machine Learning课的时候偶然发现的,一个很小众的网站,却一直走在前沿,紧跟ES6+和CSS3的节奏,还有Neural Network in JS。视频讲解加上交互编程界面,一节课的时长刚刚好。强烈推荐的课程有:- Introduction to ES6+
- Learn Flexbox
- An introduction to regular expression
- Learn React
- Introduction to TypeScript(这个是附加项)
- w3schools + MDN
日常跟MDN一样当手册查,关键时候把前者当绿宝书、后者当百科。把前面两个网站的练习全部刷完之后可以把这两个网站的内容全部过一遍当查漏补缺用的。更重要的是可以用来进行CSS的复习。
前端这个行业,算法要求不高,开发经验要求也不高,框架多种多样一切傻瓜化,甚至国内培训班主推的就是前端方面的培训,让人觉得这个圈子很容易生存。但是实际上,这个领域只有你一脚踏进来之后才能发现水深之程度难以想象。简而言之就是,入门容易,精通难。当然,还是期待有同在多伦多搞前端的朋友一起交流业务一起学习。
现阶段在IBM做前端工程师,可以提供岗位内推,基本上各个方向(开发、产品、财务……)都可以。
有兴趣的可以把简历和心意岗位的job id发到我邮箱。
评论