Skip to content

小米面试

小米面试

统计信息:字数 6212 阅读13分钟

笔试

1、爬虫引擎是怎样抓取页面的

2、浏览器渲染页面的过程

  1. 用户输入 URL 地址
  2. 浏览器解析 URL 解析出主机名
  3. 浏览器将主机名转换成服务器 ip 地址(浏览器先查找本地 DNS 缓存列表 没有的话 再向浏览器默认的 DNS 服务器发送查询请求 同时缓存)
  4. 浏览器将端口号从 URL 中解析出来
  5. 浏览器建立一条与目标 Web 服务器的 TCP 连接(三次握手)
  6. 浏览器向服务器发送一条 HTTP 请求报文
  7. 服务器向浏览器返回一条 HTTP 响应报文
  8. 关闭连接 浏览器解析文档

网上找的标准答案,自己答得也是这么个意思,但是没这详细。

3、异步编程的四种方法

看到这题瞬间感觉阮老师简直就是中国前端界的教父级人物啊,面试官的理想答案应该是阮老师这篇文章:Javascript 异步编程的 4 种方法。自己特地看过,也总结在我的面试题总结里面了:前端面试偏门题总结(https://www.bougieblog.cn/article/Qk9VMTlHSUU.html)。但是记性太差还是答偏了,心里恨啊。

4、解释同步异步、阻塞非阻塞、并行并发之间的区别

这里补充一下并行和并发:并行是指运算中的两件或更多件事情在同一时刻发生。实事求是地说,这种情况只会在系统 CPU 拥有两个独立核心时发生,这样在任何时刻才会有不同的电脉冲信号发出。并发意味着至少两件事务在同一时间段发生。但注意,这里的事务是(高级的)任务,而不是(低级的)操作。所以,请分清并发和并行。

5、js 实现数值千分位

头条笔试碰到过了: number.toLocaleString()

6、多语言网站建设应注意哪些事项?

一开始以为多语言是 pythonjavaphp啥的,后面面试官说是各个国家语言。

7、React 非父子、兄弟组件传值

状态管理:Redux、Mobx 等等。

8、"123456789876543212345678987654321..." 的第 n 位是什么?

function getNum(n) {
    let num = 0,
        flag = true
    for (let i = 0; i < n; i++) {
        if (num === 1) flag = true
        if (num === 9) flag = false flag ? num++ : num--
    }
    return num
}

面试

1、浏览器打开一个页面前端缓存了哪些东西?

我:后端通过设置响应头 CacheControl设置资源过期时间,用于缓存一些静态资源

面试官:还有呢

我:DNS 缓存

面试官:后端缓存了什么

我:缓存了 session

面试官:还有呢

我:... 答不上来了

2、说一下 vue 的生命周期

一年的 Vue 不是白用的,顺利从 beforeCreatedestroyed过了一遍。

3、你的博客用的是 Koa,Express 用过吗?

我:用过,我的个人博客本来用的是 Express,后面改成 Koa 了

面试官:为什么要改?Express 不好用吗?

我:Koa 的路由用 async 和 await 处理,不会陷入回调地狱

面试官:Express 的路由也可以封装成 asyncawait,自己试过没有?

我:没有。。。

4、你的博客用的什么服务器?

我:用的 Node 服务器,pm2 做进程守护的

面试官:代码直接放上去运行的还是编译后运行的

我:(一脸懵比,脚本语言还能编译???)直接运行的

面试官:服务器是什么系统的?

我:windows sever...(感觉面试官笑了)

后来查了一下,segmentFault 的大佬们也说 Node JS 不用编译:运行在服务端的 Node.js 代码需要编译吗?(https://segmentfault.com/q/1010000009607720/a-1020000009607917),好想追问一下面试官到底怎么编译啊。

5、有没有自己实现过 Promise?

看了不少文章,自己也写过了,但问到细节还是答烂了。

6、有没有写过 Webpack 插件?

我:没有...

7、new 一个对象后发生了什么?

8、写过响应式网站吗?

我的个人博客就是响应式的,主要说了媒体查询和 rem 控制字体大小。

9、说一下原型和原型链

10、有没有自己写过比较复杂的正则?

11、有没有封装过 axios?

12、前后分离的系统,一个请求出错了,如何中断其它请求?

13、如何在 axios 中添加登陆验证?

14、rollup 了解过没?

15、为什么 rollup 打包赘余代码比较少?

16、有没有结合原生封装过 RN 组件?

17、为什么用高德地图不用百度地图?

18、怎样在 Android Studio 中对 React Native 的 js 代码进行断点调试?

补充一个 Tips,面试时看到武汉小米开发人员操作系统清一色的是 Ubuntu,想去面试的同学最好准备一下。

https://segmentfault.com/a/1190000015716464

小米-小米应用商店(过)

一面

小米的面试官给人的感觉很亲切很真诚,是一个体验很不错的面试。

  1. css实现图片自适应宽高
  2. 讲flex,手写出flex常用的属性,并且讲出作用
  3. BFC是什么
  4. 项目里面的前端鉴权是怎么实现的?
  5. vue里面的虚拟dom是怎么回事?
  6. vue双向绑定讲一讲
  7. 手写函数防抖和函数节流
  8. 讲讲常用的es6语法,比如let、promise、class等等
  9. 浏览器渲染过程,回流重绘等等,load、DOMContentLoaded等等事件的触发顺序
  10. 从小米应用商店里面随便找了一个需求让我现场实现,写伪代码

二面

  1. 讲项目里面的鉴权和图片懒加载怎么实现的
  2. 讲vue-lazyloader的原理,手写伪代码
  3. 讲express框架的设计思想
  4. 线上日志是如何处理的
  5. 讲事件循环
  6. 讲nodejs的eventEmitter的实现

三面

  1. 讲项目里面做的事情
  2. 讲vue的响应式原理、依赖收集、监听数组、虚拟dom等等
  3. 讲express的中间件系统是如何设计的
  4. 现场从小米应用商店中找出一个需求现场实现,说思路,写关键的代码

四面

  1. 讲vue-lazyloader源码以及设计
  2. 使用es5实现es6的class
  3. websocket握手过程
  4. 浏览器的事件循环和nodejs事件循环的区别

Last update: November 9, 2024