【小米】前端岗-实习面经(一、二面)

小米一面:
聊学习经历,聊一下项目(没深入,就是热个身吧)
上来就是三道代码题,这个没办法记不住,忘了copy下来了,涉及到的知识点:
闭包
作用域
宏任务、微任务
变量声明提升
事件循环

    1.讲了讲有哪些宏任务和微任务,以及它们的循环方式,之后思考对于宏任务和微任务队列的实现方式(给了几个思路,1. 二维数组 2. 哈希散列 3. 数组链表)

    2.垂直水平居中方式(4种 + 了解的两种,后面两种没说实现思路,只说了有这么个方式 grid 和table)要求手写

    3.Set、Map、WeakMap、WeakSet 区别(Map 和 Object 的效率问题,各自的 API,WeakMap 和 WeakSet 可迭代吗,JS 垃圾回收机制对 WeakMap 和 WeakSet 的影响)

    4.本地存储了解哪些?Cookie、localStorage、sessionStorage 区别?(Cookie 详细介绍,包括 HTTP 无状态、domain、path、secure、httpOnly、SameSite)

    5.Vue 组件间通信方式(9种,1. props父传子 2. emit 子传父 3. bus公共事件总线 4. Vuex 5. parent/children 6. Storage 7. provide/inject 8. attrs 9. ref 和 refs)

    6.Vue 中 key 的作用,为什么有高效性?(就地复用、Diff 算法)

    7.Webpack相关,Proxy 代理跨域的实现原理(本地 -> 代理服务器 -> 跨域接口),并要求用 node.js 手写出来一个简单的例子【不会!(理直气壮)】

    8.响应式布局,媒体查询 + 百分比布局 + rem,以及 rem 和 em 的区别(em 面试官说我搞错了,下去要学)

    9.单行文本省略,多行文本省略分情况实现(按行数或高度两种情况,面试官提醒注意分情况!)

    10.判断数组的方式(五种,1. typeof 2. constructor 3. instanceof 4. Object.prototype.toString.call 5. Array.isArray),然后说说 3. 4. 5. 方式的区别,顺便手写了 instanceof [ 省的讲一遍原型原型链了——从构造函数到寄生式继承 ]

    11.ES6 和 ES7 了解吗,我没先说 ES6,先讲了下 ES7 的 async 和 await,面试官就顺着这个开始问 setTimeout、Promise、async 和 await,然后实现原理 generator

    12.反问环节:

问了问对于前端的发展方向,面试官说有元宇宙、lowcode 低代码平台等等,我听的云里雾里,但也是个方向了,毕竟我一窍不通

面试感受:小米面试官特别随和,会引导你把一个东西说出来,会给你足够的思考时间,感觉就像是在平等交流一样,而不是以面试者和面试官的位置去交谈,很容易就会放松下来。最后,面试官长得也特别帅!!!

小米二面:

  1.防抖节流,原理介绍+应用场景,手写防抖和节流
2.介绍一下原型链,从构造函数到原型,再到原型链,盗用构造函数,原型式继承,寄生式继承,寄生式继承如何弥补了普通原型链的缺点。手写了原型式继承,以及手写寄生式继承如何连接父子构造函数。

3.做了一道事件循环代码顺序题目,关于Promise,setTimeout等,和平时见到的不太一样,有点绕,但是应该也不算难

4.问了 Vue 响应式原理,先手写了观察者模式(网上说是发布订阅模式,我觉得还是有区别的,发布订阅模式是 Vue 的 emit和 $on 的实现原理),之后讲 Vue 如何递归去把数据添加到响应式系统 【Object.defineProperty】,然后讲 Dep 和 Watcher 类,Vue 在 Compile 阶段如何识别 data 数据,实例化 Watcher 的过程【Dep.target】

5.问了问了不了解 computed 源码,不懂,面试官耐心的给我讲了讲

6.HTTPS 和 HTTP 区别,就是讲公开密钥加密还有共享密钥加密,权威机构认证证书那些东西

7.浏览器缓存机制,强缓存、协商缓存等,还有个启发式缓存机制

8.Vue 组件通信方式(9种)

感受:本来面一个小时,最后大概面了30分钟,直接过了,可能是我讲的很细(至少对于实习生面试有点吧)

以上就是小米前端实习岗位的一二面全部了。

发表评论

后才能评论