考察你的语法、原理等理解
(1)WebView/Cordova 的缺陷,或者说项目中碰到的瓶颈点有哪些?
体验不如原生,Android 上老版本的 WebView 性能较差;可以考虑打包单独的浏览器,并且将某些关键页面使用 Native 实现。
(2)对于 ES6 的认知,什么是变量提升?
ES6 弥补了传统 JavaScript 的缺陷,比如说变量的作用域、语法层面的赋值、定义等。面试者混淆了变量提升与词法作用域的概念。
(3)JavaScript 常见的异步写法,Promise.finally 的实现?
希望面试者能够已简单的抓取远程用户信息为例,实践几种常见的异步模式。面试者实现了基于 jQuery get 函数的抓取机制,返回了 Promise。面试者回答:Promise 内部包含了三个状态,不同状态间的转换会触发不同的 Callback。
面试者在实现过程中感觉缺乏 ESLint 规范实践,实现了基础原型。
(4)React 的设计理念,其与 jQuery, Vue.js 的区别
面试者回答:React 的核心是用 Virtual DOM 替代原有的 DOM 操作,实现了自己的事件系统,是单向数据流。jQuery 主要还是在操作 DOM,Vue.js 的部分理念来自于 React(X),Vue.js 的数据流默认为双向数据流。对于 React 组件系统、调和算法等认知不多。
(5)React 常见设计模式有哪些,手写 HOC
面试者对常见的 React 设计模式不太熟悉,回答较慢。面试者回答:高阶组件,利用高阶函数帮我们提取公共方法,来创造组件。要求面试者实现简单的处理加载状态的 HOC,面试者还是使用类似于 createClass 这样传统的写法。
(6)Redux 的设计理念,其与 Flux 的区别
面试者表示没了解过 Flux,Redux 是为了解决跨层级的 React 组件间数据传递问题,通过抽取单一的数据中心与触发 Action 来更新。面试者对于函数式编程、纯函数等理解感觉不深。
(7)Redux 常见的异步处理机制,简单的 Thunk 组件实现
通过中间件拦截的方式来处理异步 Action,常见的异步库包括 redux-thunk,redux-sagas。对于 Sagas 的具体使用也不太熟悉,对于中间件的机制和实现基本不了解。
缺陷,面试者使用 CoffeeScript 较多,对于 ES6、fetch 等缺乏理解或者应用,对于 React 的认知也较为停留在表面,缺乏实践,对于 Redux 的认知与实践也不多。
- 生命周期
- setState
- did
- HOC 手写
- 受控和非受控 手写
- 新特性
- Context
- 父子组件通信
- middleware
- redux-thunk
- 开源,动机,贡献者
- 换肤
- chunk
- slice & splice
- Symbol
- Promise
new Promise(() => console.log(1));
new Promise(() => console.log(2));
new Promise(() => console.log(3));
- geneartor, iterator, iteratable
- const let
- class
- 配置
- 忽略哪些
- amd, cmd, commonjs
- webpack chunk
- webpack1 -> webpack2
- display none; visibility; opacity
- mixin
- 局部变量
- 事件委托
- 父子包含关系
- 生命周期
- setState
- did
- HOC
- 受控和非受控
- lodash
- async await
- koa
- antd
💡 驼峰与下划线命名之间的转换 💡
/** 将大写转化为下划线 */
export const convertToUnderscore = key => {
key.replace(/[A-Z]/g, str => `_${str.toLowerCase()}`);
};
/** 将下划线转化为驼峰 */
export const convertToCamelCase = key => {
key.replace(/_./g, str => str[1].toUpperCase());
};📖 参考资料
map/reduce/filter 都是开发中常用的函数。
- 使用 reduce 进行数组扁平化