JavaScript 面试中可能被问到的一些知识点收集:
如果你不能简单说清楚,就是你没完全明白。If you can't explain it simply, you don't understand it well enough.
-- 爱因斯坦
我一直把这句话奉为真正掌握知识的标杆,那么在面试中简明扼要地回答问题是检验是否真的明白某项技术的标准。
所以js-interview-review 是一篇非常好的文章,列出几项精简概念来检测开发者是否真的了解 JavaScript,并提供相关学习资料。
内容比较多,所以会慢慢看,然后做一些笔记 :wind_chime:
函数式编程
Functional programming in JavaScript 简单明了地介绍函数式编程
笔记:
简单来说,JavaScript的函数其实可以转化为变量使用,即:
function hello(){ ... } // => var hello = function() { ... }
那么函数式编程的意义在于把逻辑抽丝剥茧后转化为一个个小函数,用变量的形式存储和调用。
这样的话每个小逻辑可以更好的复用,而描述整个大逻辑的时候,只需要把小逻辑进行组装。
这样,整个函数结构清晰明了,而且利于 debug。
什么是事件循环以及 JavaScript 的异步机制
- Philip Roberts: What the heck is the event loop anyway? | JSConf EU 2014 讲解了事件处理机制的整个原理和过程
- Promises in Detail Promise的实现机制
- Promises - Part 8 of Functional Programming in JavaScript 简单介绍 Promise 以及怎样使用
笔记:
事件处理机制
浏览器中会提供一个专门的 JavaScript 处理引擎,比如 Chrome 的 V8 处理引擎。
然而 JavaScript 引擎并不是所有代码都处理,比如 setTimeout
/ addEventListener
等 Web API 其实是由浏览器专门处理而不是 V8。
V8 的处理机制为单线程,所以一次只处理一件事情,事件以栈的形式执行,那么首先入栈的为 main
函数,接着依次按照函数执行顺序将事件入栈,然后从栈顶开始一项一项事件执行完后出栈,直到最后的 main
函数出栈,整个函数执行完毕。
碰到使用 Web API 的函数时,栈接收后发现自身处理不了,便会将这些函数依次传给浏览器进行特别“照顾”。
浏览器处理完这些“特殊”函数后,依次传入一个任务队列里。
如果此时的 V8 处理栈空闲,那么任务队列里的函数依次进入栈内执行。
这就是为什么 setTimeout
函数总是最后才执行...
Example:
console.log(1); setTimeout(function() { console.log(3); }, 0); function two() { console.log(2); } two();
打印结果依次为 1,2,3
JavaScript 的核心概念:作用域链,原型链,作用域,闭包,构造器以及 this
- JavaScript. The core
- Execution contexts
- Variable object
- this
- Scope chain
- Functions
- Closures
- You don't know JS
- Scope & closures
- this & object prototypes
设计模式与继承
- Extending classes in JavaScript
- You Don't Know JS: Mixing (Up) "Class" Objects
- Essential JS Design Patterns
RESTful 的 API 设计
- json:api
- Best Practices for Designing a Pragmatic RESTful API
- Swagger RESTful API Documentation
- Stripe API
关于 DOM 的一切: HTML / CSS / Twitter Bootstrap / jQuery
- You Might Not Need jQuery
- CSS: Specificity Wars
- Flexbox Froggy
搜索引擎优化
- Search Engine Optimization Starter Guide
- Structured Data
MEAN 框架:MongoDB, Express, AngularJS, Node.js
MongoDB
- Aggregation Pipeline
- mongoose.js documentation
AngularJS
- AngularJS Developer Guide
- Understanding NgModelController
- A Guide to Transclusion in AngularJS
- Advanced Directives with AngularJS
Node.js
正则表达式
- RegexOne 尝试做题,然后会发现正则并没有想象中那么可怕
- Regex Crossword
测试
Mocha, Chai, Sinon
- Testing Javascript with Mocha, Chai, and Sinon
- Test automation
- Mocking Requests with Mocha, Chai and Sinon
- Sinon Spies vs. Stubs
AngularJS, Karma, Jasmine
- Mocking Dependencies in AngularJS Tests
- Unit Testing in AngularJS: Services, Controllers & Providers
- AngularJS Testing Tips: Testing Directives
- AngularJS Testing: Bootstrap Blocks, Routes, Events, and Animations
数据库
SQL
- A Visual Explanation of SQL Joins
- SQL Teaching
- SQL Bolt -- Learn SQL with Simple, Interactive Exercises
Postgres
项目迭代流程
原文 https://github.com/zchen9/code/issues/3