记一次凉凉的小米前端面试

毕业一年的跨专业萌新,在拉勾上投了武汉小米的简历,不出两天,简历被 HR 姐姐标为 “不合适”,心想自己这点履历和经验小米是看不上了。又过两天,大概晚上八九点钟,HR 姐姐突然打电话说邀请面试。也是有点奇怪。

从家到小米有两个小时车程,做公交车二层晃得竟然有点想吐了。心想做程序员一年,没学到啥高深的东西身体却不知不觉间变得这么差了;同时对此次面试也没抱太大期望,因为自身实力和小米的招聘要求还是差了一个档次。进入小米正门,左手边是小米信息部,右手边是 wps。想起来前不久在一个招聘群里面认识的 wps 的孝感老乡就在隔壁上班,也是一种缘分哈哈。

笔试

面试前要先做一份笔试题,题目大概是:

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、多语言网站建设应注意哪些事项?

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

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

}

时间有点紧不小心把 i<=n写成 i<n了,尴尬,怪自己不细心吧。

时限是 20 分钟,还有两三题记不清了。

面试

面试官很亲切,说话很流畅并且肯定,感觉是个知识体系非常齐全的大牛。以下题目顺序并不是面试官问的顺序:

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

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

面试官:还有呢

我:DNS 缓存

面试官:后端缓存了什么

我:缓存了 session

面试官:还有呢

我:... 答不上来了

2、说一下 vue 的生命周期

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

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 代码进行断点调试?

......

还有 n 多问题记不太清了...

然后面试官问了一些其他的东西,对小米有什么看法?995 上班、加班没有加班费能不能接收等等。心想小米在雷总的带领下还真是拼啊。

面试聊了一个小时,很多问题答烂了,今年应该是和小米无缘了。也明显看到了自身实力的不足。很感谢面试官给我这次面试机会。

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值