当前位置: 首页 > 面试经验 >

小米北京前端一面二面(oc)

优质
小牛编辑
80浏览
2023-03-28

小米北京前端一面二面(oc)

上周日大半夜简历过筛,周一电话约周二下午2点一面,然后一小时后二面
本人一共面试过一次,小米是我第一次面的大厂,人生第二次面试

一面 一个半小时 面试官比较牛逼,会照顾到你的基础会引导你,但是也会故意的刁难你一下
没有录屏,除了代码题前面问题没有顺序先后,前半小时项目穿插源码为主,后一个小时场景八股和输出题算法题,真正能八股的很少很少

1.第一题,开门红,我看到你项目实现了滚动懒加载,写个下拉刷新吧 要求 // distance <= 50
//主要思路 好像没说对不对
if(clientHeight - (scrollHeight - scrollTop) <= 50) //do something
2.你项目用的类还是hooks,用过什么hooks
hooks背诵
3.hooks相对于类组件解决了什么问题呢
类状态冗余绑定this问题,状态细粒化
4.那如果一个函数组件 有很多的useState怎么办,会出什么问题呢,你要怎么优化呢
多个useState的派发状态更新在17中会引起多次更新,而18中则会批量合成更新,优化上,我会将状态相关的dom和方法拆分出来
5.那为什么可以有批量合成更新呢,怎么实现的
react的isBatchingUpdate决定是否加入更新队列,或是立即更新
6.还有呢,然后我懵了,然后还问了函数组件为什么可以复用,我又懵了
回去查了源码,这里有几个方法可以关注 ,调度器相关的ensuredIsScheduled 和 shouldYield
以及在render阶段调用的两个方法 performSyncOnRoot 和 performCocurrentOnRoot两种方式调度
7.你项目是做的后台数据管理,使用了大量antd组件,那如果这样一个需求,你接手了一个代码,个人组件和官方库冗杂着写,尤其像antd的form,label是个人自己写的,几大百行代码,你要怎么做
我会考虑个人组件的功能优先用官方组件替代,不行的就用utilsComponents加alias来供全局用
面试官说没答到点子上,他想说的是 低代码平台相关拖拽生成
8.说说es6
吟唱开始:promise async await generator,当我说到generator的时候面试官突然坐起来一副(哎你说到了generator啊,那我可就不困了),那你来说说generator呗
我说了yield 迭代,await是generator类似的语法糖这些
9.那你听说过协程吗
我说我阮一峰看过我给忘了。。。
10.你说你项目中做过hook优化,useCallback和useMemo的区别是什么呢
缓存值和缓存函数
11. 有什么用呢
吟唱
12.那他们的依赖数组可以是什么值呢
我说基本数据类型,漏嘴了说了对象,面试官说了你可以回去试试对象能不能行
13. 说一说浏览器渲染的过程
我八股背到layout paint结束,面试官说方向对了,没说到点子上,具体的layout paint 解析这些是怎么做的,我不会,崩
这里应该是要说布局计算 分块 光栅化位图数据 交付gpu然后显示
14. 如果浏览器第二次打开一个网页很快是为什么呢
醉了,背八股还绕个弯子,面试官还点了个头等着我说,304八股  + cdn原理,从dns开始说到cdn负载均衡和资源访问 , 304要说的细一点,比如http1.0没有1.1才有的etag还有etag的优先级
15.你学过数据结构相关的知识,我来问一个,我以为要问算法
如果10000条数据 拿出10条搜索最多的 大根堆 nlogn 弹10个数据
好你考虑了时间复杂度,那如果考虑空间呢 如果是百万级数据呢
我按照数据的搜索类别先用数组或map分类再去大根堆,能降低数量级,面试官没说对不对
16八股 let const var
17 rem em px八股
18 react 状态管理,比如说用户登录信息
我说了项目的sessionStorage和自己定义路由守卫组件,因为redux没用过,面试官说也行吧
19 说说webpack的proxy怎么实现的,源码有看过吗 懵了不会
20 git 用过吗 我单人前端用的少,问了git rebase merge的一个区别,我回答了多个分支记录合并保留的那个点,再问我就不会了

代码题
1异步输出说结果
2 最长无重复子串 滑动窗口
3 面试官自创算法 没做出来面试官说挺可惜 这道题卡了我很久但是我也没有思路
给定字符串,最多删除两个重复字符的情况下尾部插入一个字符,最少要多少次能够实现当前字符串完全不重复
4. 作用域
var b = 20
(function b(){
    b = 20
    console.log(b) // undefined
})()
其他的手写我想不起来了

反问 面试表现怎么样 基础不错
小米一般用什么框架 面试官不屑
立马约二面一小时后

4.30开始,面试官小姐姐一直在,提前了十分钟,面了一小时,做题,狠狠的做
1.flex 布局 样式
<div>
    <div>A</div>
    <div>B</div>
    <div>C</div>
</div>
分别实现
B A C 排列 order
BA 挨在一起 C靠右边 我没做出来 面试官说不用justify C用margin left顶到右边就可以
A B C 水平居中 间距要求30px父元素不够时缩小 可以改dom 插dom 两边flex 1 能屈能伸 中间间距30px flex-shrink 1 元素flex-shrink 0 所以一共是5个子元素的实现

2.一个数组 左边奇数 右边偶数 时间O(n) 空间最好O(1) 我用了额外空间 面试官说算法********改造的题目,类似双指针的写法

3.首次点开网页alert一个信息怎么去实现 ,不一定是当天0点计算,只要是当天
Date获取时间判断是不是下一天

4.说说requestAnimationFrame,吟唱结束后,来用这个实现setTimeout 可以查mdn文档
我一开始以16.7ms毫秒的时间戳累加的判断,面试官说不需要,官方文档有个调用自身的用例
function(callback,time){
    let stamp = Date.now()
    function step(){
        let curr = Date.now()
        if(curr - stamp >= time) callback()
        else window.requestAnimationFrame(step)
    }
    step()
}
5. 大小数组,O(m + n)返回没有小数组的大数组 可以额外空间 类似map的遍历一遍就行

6 元素进入视口打印一次 我说的 老方法 scrollTop那一套,面试官说用intersection 我只在图片懒加载的时候看过这个api当时没有想到

7.如果一个8px很糊,什么原因
排查 devicePixelRatio meta scale更改 tranform scale 有可能是物理像素的原因
面试官说是chrome 最小支持12px的原因,我醉了
顺带一提小于12px有个内部css有-adjust-的属性可以让字体小于12

8.ad110项目的自定义优化怎么做的
next.config.js 图片缓存配置 serverSidesProps设置响应头
9.对某一个对象进行修改需要去打印一些内容怎么做
proxy代理

行你面试过了
行我过了,面试前有老哥跟我说二面主要听面试官吹牛逼,我二面一个劲的写题
一面过有可能部分原因是我可以长期实习吧,因为我们学校不怎么管
可能有一些小的问题一带而过的我想不起来了,总之八股很少,项目带入,看你写了什么,然后往上面问
#小米集团##前端开发实习##面经#
 类似资料: