JD
职位描述
1.负责组件库与业务页面开发。
2.带领团队完成技术产品实现。
3.负责大型多应用架构设计。
4.利用前端技术与服务端协同完成团队业务目标。
职位要求
1.熟练掌握JavaScript。
2.熟悉常用工程化工具,掌握模块化思想和技术实现方案。
3.熟练掌握React前端框架,了解技术底层。同时了解vue以及angular等其他框架者优先。
4.熟练掌握react生态常用工具,redux/react-router等。
5.熟悉各种Web前端技术,包括HTML/XML/CSS等,有基于Ajax的前端应用开发经验。
6.有良好的编码习惯,对前端技术有持续的热情,个性乐观开朗,逻辑性强,善于和各种背景的人合作。
7.具有TS/移动设备上前端开发/NodeJS/服务端开发等经验者优先。
翻译一下JD
为什么起这个标题呢?因为有很多人看到职位描述,可能就在和自己做的事情一一比对,把关键字都核对上。而很多前端同学看到职位要求第一条里的图形学,可能就开始打退堂鼓了。或者看到几个关键字自己都认识,就觉得没问题,还挺简单的。
就这样望而却步真的好吗?为什么职位描述看着简单,面试却这么难呢?你真的读懂这份职位描述了吗?
现在,不妨先停一下,就上面的问题,我们来细细品一下。什么叫读懂职位描述呢?从我个人的理解,读懂职位描述,应该是读懂这个职位需要哪些基础能力,以及可能遇到哪些挑战。我们写自己简历的时候,“精通react”和“熟练使用react”,相信大家不会随意去写。同样的,JD里面的:掌握、熟练掌握、了解、熟悉,也不是随意写的,这代表了团队对新同学的能力要求。
回想写自己简历的时候,我们会对这个前缀扪心自问一下。因为会担心一旦写了精通,面试官的问题会更难,甚至觉得只有源码倒背如流的人,才能称得上精通。当然也会有同学非常自信,用react做过几个项目,就写上了精通react。
这两种都可以称为精通,也都不可以。没有客观标准,又怎么去衡量呢?而标准在哪里呢?所以在这里,我从阿里面试官角度,给出我认为的标准,尽可能的做到客观可量化。那么,基于上面这份职位标准,我来翻译一下职位要求:
首先,总览全部的要求,会发现这个职位虽然提到了3d相关的技能,但是大部分却是应用开发相关的能力,所以这个职位并不是想找专业的3d领域同学,而是需要一个工程化能力强,对3d有了解的同学。
1.熟练掌握JavaScript。
初级:
JavaScript各种概念都得了解,《JavaScript语言精粹》这本书的目录都得有概念,并且这些核心点都能脱口而出是什么。这里列举一些做参考:
知道组合寄生继承,知道class继承。
知道怎么创建类function + class。
知道闭包在实际场景中怎么用,常见的坑。
知道模块是什么,怎么用。
知道event loop是什么,能举例说明event loop怎么影响平时的编码。
掌握基础数据结构,比如堆、栈、树,并了解这些数据结构计算机基础中的作用。
知道ES6数组相关方法,比如forEach,map,reduce。
中级:
知道class继承与组合寄生继承的差别,并能举例说明。
知道event loop原理,知道宏微任务,并且能从个人理解层面说出为什么要区分。知道node和浏览器在实现loop时候的差别。
能将继承、作用域、闭包、模块这些概念融汇贯通,并且结合实际例子说明这几个概念怎样结合在一起。
能脱口而出2种以上设计模式的核心思想,并结合js语言特性举例或口喷基础实现。
掌握一些基础算法核心思想或简单算法问题,比如排序,大数相加。
2.熟悉常用工程化工具,掌握模块化思想和技术实现方案。
初级:
知道webpack,rollup以及他们适用的场景。
知道webpack v4和v3的区别。
脱口而出webpack基础配置。
知道webpack打包结果的代码结构和执行流程,知道index.js,runtime.js是干嘛的。
知道amd,cmd,commonjs,es module分别是什么。
知道所有模块化标准定义一个模块怎么写。给出2个文件,能口喷一段代码完成模块打包和执行的核心逻辑。
中级:
知道webpack打包链路,知道plugin生命周期,知道怎么写一个plugin和loader。
知道常见loader做了什么事情,能几句话说明白,比如babel-loader,vue-loader。
能结合性能优化聊webpack配置怎么做,能清楚说明白核心要点有哪些,并说明解决什么问题,需要哪些外部依赖,比如cdn,接入层等。
了解异步模块加载的实现原理,能口喷代码实现核心逻辑。
高级:
能设计出或具体说明白团队研发基础设施。具体包括但不限于:
项目脚手架搭建,及如何以工具形态共享。
团队eslint规范如何设计,及如何统一更新。
工具化打包发布流程,包括本地调试、云构建、线上发布体系、一键部署能力。同时,方案不仅限于前端工程部分,包含相关服务端基础设施,比如cdn服务搭建,接入层缓存方案设计,域名管控等。
客户端缓存及预加载方案。
3.熟练掌握React前端框架,了解技术底层。同时了解vue以及angular等其他框架者优先。
初级:
知道react常见优化方案,脱口而出常用生命周期,知道他们是干什么的。
知道react大致实现思路,能对比react和js控制原生dom的差异,能口喷一个简化版的react。
知道diff算法大致实现思路。
对state和props有自己的使用心得,结合受控组件、hoc等特性描述,需要说明各种方案的适用场景。
以上几点react替换为vue或angular同样适用。
中级:
能说明白为什么要实现fiber,以及可能带来的坑。
能说明白为什么要实现hook。
能说明白为什么要用immutable,以及用或者不用的考虑。
知道react不常用的特性,比如context,portal。
能用自己的理解说明白react like框架的本质,能说明白如何让这些框架共存。
高级:
能设计出框架无关的技术架构。包括但不限于:
说明如何解决可能存在的冲突问题,需要结合实际案例。
能说明架构分层逻辑、各层的核心模块,以及核心模块要解决的问题。能结合实际场景例举一些坑或者优雅的处理方案则更佳。
4.熟练掌握react生态常用工具,redux/react-router等。
初级:
知道react-router,redux,redux-thunk,react-redux,immutable,antd或同级别社区组件库。
知道vue和angular对应全家桶分别有哪些。
知道浏览器react相关插件有什么,怎么用。
知道react-router v3/v4的差异。
知道antd组件化设计思路。
知道thunk干嘛用的,怎么实现的。
中级:
看过全家桶源码,不要求每行都看,但是知道核心实现原理和底层依赖。能口喷几行关键代码把对应类库实现即达标。
能从数据驱动角度透彻的说明白redux,能够口喷原生js和redux结合要怎么做。
能结合redux,vuex,mobx等数据流谈谈自己对vue和react的异同。
高级:
有基于全家桶构建复杂应用的经验,比如最近很火的微前端和这些类库结合的时候要注意什么,会有什么坑,怎么解决