阿里达摩院小蜜前端实习 - 二面已过
总时长约 50 min
1. 自我介绍,要我着重将实习做过的项目和学校的项目。
2. 将讲实习的时候在团队做的工程化建设
我讲了流水线的设计、流水线时间和结构的优化、代码规范与 git-hooks、自动更新需求单状态工具这些方面。
3. 如果让你开发一个前端工程化的手脚架工具,包括项目创建,发布,测试等?你会怎么设计
我谈了谈维护 一个默认的 template ,手脚架工具可以拿对应的项目配置文件。还有统一手脚架可以统一
4. 你简历中有写代码规范相关的,聊聊怎么设计的代码规范?
兼容公司代码规范的基础上,遵守团队的开发习惯。
5. 规范使用的 eslint 吗?谈谈 eslint 的原理?
刚好这个学期学编译原理。讲了讲词法分析语法分析还有 AST 。面试官还问我什么是 DFA ,我先讲了 FA 然后从人类设计思路的角度从 NFA 将到 DFA 。
6. 讲讲在学校做的项目?简历上说你做了性能优化?谈谈你怎么做的?
讲了 HTTP 1.1 迁移到 HTTP 2 ,顺便讲了 HTTP 2 的区别和分别有什么问题。(头部开销,头部表,编码压缩,pipeline 的问题 HOLB ,Server Push ,TCP 连接的复用,etc.
讲了 大量组件渲染的时候对于多次 layout 的优化(1. 让 DOM 离线然后修改后一次添加 2. 让动画启用 GPU 加速 ,并且分离图层 3.
讲了 React 多个 Context 嵌套的时候导致的不必要渲染的问题,以及优化
讲了 对于静态资源的缓存优化,顺便说了下 Cache-Control,Expires,Etag ,Last-Modified,If-Last-Modified-Since
讲了 JS 动画不要给太短的间隔时间,换用 rAF 进行调用
讲了 JS 加载的阻塞问题,顺带说了下async 和 defer。
讲了按需加载组件和模块,还有 code splitting 和 tree shaking
还讲了 React v15 的 Stack Reconcile 不可中断的问题,在大量组件场景下会卡顿。然后升级到 Fiber 基于链表做可中断的 Reconcile 。顺便说了下 Fiber 的思想和 Fiber Tree Update 的过程。
etc.
7. 怎么评价页面性能?
讲了用 Performance Profiling 和 Google PageSpeed Insights 工具
8. 有哪些关键的性能指标?你说到 Google Analytics 可以得到这些指标数据,那 GA 是怎么获取到这些数据的?
性能指标:First Contentful Paint (FCP) First Input Delay (FID) Page Load time
讲了下 window.performance API 以及 'web-vitals' 这个库
9. webpack 的打包过程
input 到 loder 然后生命周期内会执行 Plugin 最后输出到 output ,顺便提了下开发环境下的重打包会通知 devServer 然后通过 ws 通知浏览器进行 HMR。
这里答得不是很详细,还是要复习一下。
10. Promise 有什么问题?
Promise 一旦开始,就不可以被取消终止
Promise 不能被 try catch 捕获错误,因为 try catch 只能获取同步错误
Promise 的 then 链很长的时候,可读性很差
11. 还有其他异步方式吗?
回调函数、generator、async await
12. async / await 呢?对它有什么认识,还有它的问题?
异步操作同步写法、底层 generator、更符合线性思维更好读、可以 try catch 获取错误
问题:async / await 的传染性
12. 给一个 button 绑定一个实践,有几种方式?
1. <button onclick="fn()">
2. buttonNode.onclick = fn
3. buttonNode.addEventListener('eventName', callback);
13. 给一个 DOM 元素添加一个 sibling 节点,怎么实现?
13. 给一个 DOM 元素添加一个 sibling 节点,怎么实现?
讲了 insertAfter 还有手动进行添加操作、parentNode sibling childNodes 这些都要处理好,就是一个简单的节点添加。
其实之前实习的时候刚好遇到了相应的更复杂的场景
14. new 一个对象的具体过程
创建一个对象,[[Prototype]] 指针指向原型,调用构造函数,最后如果构造函数有 return 则返回 return 的对象。若没有 return 则返回先前创建的那个对象。
15. 数组和链表的区别以及它们对应的应用场景?
常规题
16. 讲讲排序算法?
我讲了快速排序、堆排序、选择排序、插入排序,及其各自的实现思想、时空复杂度。
17. 让你设计一个搜索框,你要注意什么?
我谈了防抖 debounce ,还有过长输入串会让后台 elastic search 的搜索性能使其低下,需要限制搜索的关键词长度。
18. 如果一个发起了两个请求,第二个请求先返回,第一个请求后返回,这种情况下怎么保证展示最新数据?
维护给每个请求/响应带上序列号,每次只会使用当前收到响应序列号最大的数据。
19. 反问环节。
我问了下面试官的前端学习历程。
一个小时不停在说话面到后面嘴都干了hhhh,下次记得倒杯水
#面经##阿里巴巴##实习##前端工程师#