作为一名程序猿、攻城狮,要清楚自己的实力,自己所处的阶段,这样才能更好的扬长补短。常问自己几个问题:我最擅长什么,我比别人有哪些优势?我的短板在哪些方面?我在整个行业所处什么阶段,在这个阶段我该如何提升自己? 对于前端工程师等级的划分,每个人都可能有自己的理解,正所谓,一千个读者就有一千个哈姆雷特。下面是我对前端工程师划分的一些拙见。
这个阶段一般具备以下几点:
- 基础的JavaScript编程能力
- 基本能看懂别人写的代码
- 有一定的代码调试能力
举些例子:
substr() ,sibString(), split(), slice() ...
var url = window.location.href;
if(url === 'http://www.xieliqun.com'){
window.location.href = 'https://github.com/tsrot';
}else{
window.location.href = '/404';
}
var foo = 'hello world!';
var arr = [];
for(var i=0;i<foo.length;i++){
var fooArr = arr.push(foo[i]);
console.log(fooArr);
}
初级工程师应该能够:
- 解决一些例如特效方面的问题
- 能使用一些框架,例如jQuery、bootstrap等
- 能使用ajax进行简单的前后通信
- 能DOM编程解决一些问题
- 能熟练使用浏览器的调试工具
- 了解一些HTML 5 API
- 了解ES5 规范
举些例子:
在这个阶段只要能正确解决问题就好了。你可以自己去写代码实现,无论是原生,还是使用jQuery,你也可以百度去网上找一些焦点图的插件,或别人总结的方法。只要能够无错地完成需求,不考虑代码冗余之类的带来的性能问题。
假如完成一个可控制的球在水平面跳动的效果。你应该想怎样触发球,是hover还是click,球怎样跳动起来,是用css样式来控制,还是用jQuery的animate函数来执行动画。
你要完整的说出它的思路,首先用户输入完用户名,失去焦点(blur)后,然后通过ajax POST或者GET把用户名提交到后端,此时后端会给你一个接口,你把用户名传到这个接口,后端应该会返回一个true or false给你,根据返回的结果,作出相应的用户提示。
原生方法:appendChild()、removeChild()、innerHTML、replaceChild() ... jQuery方法:append()、empty()、html()、remove()、replaceAll() ...
localStorage 、sessionStorage、ApplicationCache、postMessage、file、canvas ...
语法上更严格了,定义变量必需使用var,否则报错。 对Object的控制更精确了,Object.defineProperty可控制对象的读写枚举等,更加丰富了一个对象。对数组Array和字符串 String也增加了一些方法,等等。
中级工程师应该具备:
- 深入理解this、闭包、事件模型、原型和原型链、作用域链、继承等概念
- 尽量使用ES5编写代码,了解ES6
- 熟悉前后端通信方式
- 熟悉一些前端技术框架设计思想、优劣势等
- 熟悉模块化、面向对象、MVC等编程思想
- 能自己独立封装一些组件
- 编码时尽量考虑性能优化
- 了解常见的http状态码
- 了解前端工程化思想
- 了解一些最新的技术框架等
- 了解函数式编程思想
举些例子:自找答案
- setTimeout中function里面的this指向什么?
- 写一个最常见的闭包问题?
- 如何深度克隆一个对象?
- 前后端有哪些通信方式?
- jQuery里的ready函数是怎样实现的,和原生的load有什么不同?
- 谈谈commonJS和AMD的区别?
- JavaScript是如何实现面向对象的?
- 谈一谈JavaScript的性能优化问题?
- bower、grunt、gulp、yeoman、webpack的了解?
- JavaScript的异步编程?
高级前端工程师应该具备:
- 使用前端工程化思维开发
- JavaScript对DOM操作的各种方式与性能开销
- 熟悉RESTful架构、跨域等技术
- 能对代码进行良好的性能优化
- 了解常用框架功能原理的代码实现
- 熟悉前端开发的一些安全问题
- 熟悉常见跨浏览器问题
- 了解必要的计算机网络协议
- 熟悉JavaScript的前后端开发
- 熟悉各种开发设计模式
- 了解前端的一些测试方法
举些例子:自找答案
- 如何解决回调层级过深的问题?
- CORS跨域的原理?
- 谈谈各种本地存储方案的优势与弊端?
- JS延迟加载的方式有哪些?
- 哪些操作会造成内存泄漏?
- 写一个通用的事件侦听器函数?
- 介绍一下XSS和CSRF的原理和防范?
- 如何实现一个简易个模块管理库?
- 介绍for in的技术细节与性能问题?
- jQuery操作DOM细节?
- 谈谈JS的满加载和断点续调问题?
- 如何实现JS的依赖注入?