小米前端一面面经(简历面)
1、自我介绍
2、你是学react的,那说一下react的生命周期
-
(吧啦吧啦,说了 react 的生命周期函数,从初始阶段到更新阶段,再到卸载阶段)
3、
-
生命周期的函数里面,哪些是不能用 setState的。
-
(当时说了在 componentDidUpdate 里面,原因是状态已经更新过了,如果在这个生命周期里面再 setState,又会再次引起渲染。面完之后仔细一想,我平时也会在 componentDidUpdate 里面 setState(尴尬),因为有时候确实要在 update 之后获取一些数据,然后再一次setState。后面想了想,面试官好像是想考我,在 componentWillMount 和 componentWillUpdate 里面不能使用 setState,如果在这两个生命周期函数里面调用的话,是不会有作用的)
-
4、setState 是同步的,还是异步的。
-
(我记得不同情况下是不同的,第一种是在生命周期函数里面调用,第二种是promise和自定义的的监听函数里面调用,但当时好像有点紧张,忘了哪一情况是异步,哪一种是同步)
5、
-
说一下常用的布局。
-
(说了 flex布局,圣杯布局,双飞翼布局,其实当时不知道怎么回答这个问题,就回答了这些),
-
-
然后问用 flex 实现 左栏宽度固定,右栏自适应,
-
(我说父元素设置display:flex,左栏设置 flex:0和宽度width: 100px,右栏设置 flex:1,后面验证了下,是对的),
-
-
然后用 bfc 实现,
-
(左栏设置左浮动和宽度,右栏设置margin-left: 左栏宽度和width:100%(其实这里不用设置宽度,因为本身是块级元素),后面验证了下,也是对的),
-
-
还有呢,
-
(应该是我当时多嘴的说了句有多种实现方案,他就这样问。想了想,说增加一个父元素并且设置overflow:hidden和padding-left:左栏的宽度,左栏设置margin-left: 左栏的负宽度,右栏不用设置,这也是对的),(后面想了下,他应该事项考怎么创建 bfc,早知道把实现 bfc都列举一遍,比如,1、float不为none,2、position: absolute,3、overflow:不为visibility)
-
6、
-
问了promise,promise.catch().then(),运行完catch后,还会在运行 .then吗
-
当时答错了,说不会运行,其实是还会运行的,catch运行过后,返回的还是promise对象,接着会继续运行promise
-
-
后面好像问了 pomise 的原理,不太记得了,当时也没有怎么答出来
8、
-
你简历的node项目是公司项目,还是平时自己练手的
-
平时练手的
-
-
那你说一下 express (简历上写了熟悉express)
-
(很久之前用的 express,都已经忘了差不多了),就说了一下 express 包装了很好了。。。,没有答好
-
9、
-
来做一道题吧(有关于原型链继承的),印象中是这样的:一个Person对象,有一个属性 name 和一个方法 hello(作用是打印出name),一个Student对象,继承了Person对象,有一个属性 age和一个方法 goSchool(作用是打印出age),创建一个实例Student,调用 goSchool ,打印出name和age
-
用了构造函数继承和原型链继承
-
-
问为什么会有这一句:Student.prototype.constructor = Student
-
因为上一句 是 Student.prototype = Person.prototype, Student 的prototype指向Person的 原型对象,所以此时的 Student.constructor 是 Person,所以要重新给 Student.constructor 赋值
-
总共面了半个多钟,总体感觉面得不是很好,很多点都没答上来