蘑菇街前端一面
1.万年不变的自我介绍。
2.讲一下自己前端比较熟悉的地方?
答:我回答的是对react技术栈比较熟悉。因为使用react技术栈做过项目,对于react组件化开发的方式比较熟悉。
3.为什么要用redux?
答:redux解决的是react组件之间通信以及项目的状态变量的保存问题。如果不使用redux,随着项目的越来越大,组件之间通信越来越复杂,组件的状态越来越多,项目将越来越难以维护。使用redux之后,项目的状态都保存到store之中,各个组件可以直接从store之中获取到自己需要的状态,如果需要改变store中的状态,redux也提供了dispatch方法,组件可以dispatch一个action,根据action的type属性,reducer会对状态做出变化。
这样将全局状态保存到一处的做法,使得项目更加容易维护,组件之间的通信也更加容易实现和清晰。
4.如果不使用redux,而是将状态都保存到顶层组件,但是给每个组件都实现两个接口,getState()和setState(),这不是更加方便吗?
答:这个问题之前却是没想过,一时也没回答上来。(懂的大佬可以说一声!)
5.说一下react的diff算法
答:自己看官网吧(基于两个假设条件将时间复杂度从O(n3)降到O(n),在内存中维护一个虚拟DOM树)。
6.说说自己项目中遇到的难点
答:最好说自己完全了解的难点吧!
7.Canvas上画个圆,可以用诸如getElementById()之类的方法获取吗?
答:不可以,canvas是通过js绘制的图形,图形是一个一个像素画上去的,不可以获取到。但是svg是基于XML格式,内部是一个个节点,可以用DOM操作获取节点。
8.canvas上的图像获取到吗?
答:可以,canvas原生的toDataURL()方法获取图像的Base64编码
9.了解ES6吗?ES6中的箭头函数可以用作构造函数吗?
答:项目中用到了很多ES6语法,对ES6有一点了解。箭头函数不可以作为构造函数,因为箭头函数内部并没有this,它的this其实是函数外层的this,因次不可以用new操作符调用,所以不可以作为构造函数使用。
10.那些操作会有跨域的限制?为什么要有跨域的限制?没有跨域的限制会怎么样?
答:我只想到ajax请求会有跨域的限制(应该还有别的)。为了安全性考虑,如果通过ajax请求受到了一段恶意代码,所以会有很大的隐患。接着面试官问:就算接收到了恶意代码,你不添加到html中,恶意代码也不会执行呀!然后我就懵逼了。。。
11.使用react-router的项目即使切换了页面,URL发生了改变,但是页面也不会刷新,这是如何实现的?
答:react-router只会用基础的部分,一直只知道用它来管理路由,但是确实不知道实现原理,直接和面试官说确实没有深入了解过,然后就算了。
其实页面没刷新,但页面内容却改变了,这不就是ajax吗?
12.position的几种取值?
答:1.static:默认取值,没有定位,元素出现在正常的流中。2.relative:相对元素在普通流的位置定位,但元素还是会占据普通流的位置。3:absolute:绝对定位,元素相对于第一个已定位的(position为relative || absolute || fixed)父元素进行定位。4.fixed:固定定位,元素相对于浏览器窗口进行定位。
13.说说快速排序。
14.你还有什么问题要问的吗?