滴滴社招前端岗面试经历分享
一面
1、询问项目经历,项目里怎么做的性能优化?
2、webpack 原理
(1)初始化参数:从配置文件和 Shell 语句中读取与合并参数,得出最终的参数;
(2)开始编译:用上一步得到的参数初始化 Compiler 对象,加载所有配置的插件,执行对象的 run 方法开始执行编译;
(3)确定入口:根据配置中的 entry 找出所有的入口文件;
(4)编译模块:从入口文件出发,调用所有配置的 Loader 对模块进行翻译,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理;
(5)完成模块编译:在经过第4步使用 Loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系;
(6)输出资源:根据入口和模块之间的依赖关系,组装成一个个包含多个模块的 Chunk,再把每个 Chunk 转换成一个单独的文件加入到输出列表,这步是可以修改输出内容的最后机会;
(7)输出完成:在确定好输出内容后,根据配置确定输出的路径和文件名,把文件内容写入到文件系统。
(8)在以上过程中,Webpack 会在特定的时间点广播出特定的事件,插件在监听到感兴趣的事件后会执行特定的逻辑,并且插件可以调用 Webpack 提供的 API 改变 Webpack 的运行结果。
3、写过webpack loader 或者插件吗?
4、babel 原理
(1)babel的转译过程分为三个阶段:parsing、transforming、generating,以ES6代码转译为ES5代码为例,babel转译的具体过程如下:
•ES6代码输入
•babylon 进行解析得到 AST
•plugin 用 babel-traverse 对 AST 树进行遍历转译,得到新的AST树
•用 babel-generator 通过 AST 树生成 ES5 代码
5、写过 babel 插件吗?是用来干什么?怎么写的?
6、知道怎么转化成 AST 的吗?
7、虚拟 DOM 的理解
答:虚拟 DOM本质上是 JavaScript 对象,这个对象就是更加轻量级的对 DOM 的描述。
二面
1、了解多端的原理吗?
2、说说http 与 tcp 的关系
3、tcp 可以建立多个连接吗?
4、为什么要有三次握手,四次挥手
5、研究过 React 的运行时吗?
6、redux 的原理
7、redux 做状态管理和发布订阅模式有什么区别?
答:redux 其实也是一个发布订阅,但是 redux 可以做到数据的可预测和可回溯。
8、react-redux 的原理,它是怎么跟 react 关联起来的?
答:react-redux 的核心组件只有两个,Provider 和 connect,Provider 存放 Redux 里 store 的数据到 context 里,通过 connect 从 context 拿数据,通过 props 传递给 connect 所包裹的组件。
9、未来的职业规划。
三面
1、介绍项目
2、说一下你的项目有哪些复杂的点,以及怎么解决的
3、你们的业务组件库有多少个,是什么样的组件
4、权限组件是怎么设计的
5、会node 吗?
6、介绍一下你对中间件的理解
7、怎么保证后端服务稳定性,怎么做容灾
8、怎么让数据库查询更快
9、数据库是用的什么?
10、为什么用 mysql
四面
1、介绍一下项目的难点以及怎么解决的
2、自己有什么技术上的优势
3、最近在研究什么技术?
4、职业规划
5、移动端的业务有做过吗?
6、希望滴滴能提供给你什么?
7、当业务繁忙的时候会怎么安排时间?
#面经##社招##滴滴##前端工程师#