1.谈一谈css的定位
我是从relative,absolute,fixed会不会脱离原有文档流谈的,但其实应该从最基本的相对定位,绝对定位,保持位置不变来说,结果结结巴巴没说明白。这是css最基本的问题了
2.谈谈前端模版
这个问题我说,我接触过koajs的ejs模板引擎,重要是用来在后端渲染,避免了浏览器端的数据请求。他们说,你说的是后端模板,那前端模版呢?当时我就有点蒙逼了,什么是前端模版??
然后他们又说,假如又一个dom节点需要反复利用,怎么处理。这时我才想起在学习backbone的时候,学习到过。就是在<script type=”text/template”>标签内部加上dom,type=”text/template”内部内容浏览器不会去执行,另外一种方式把dom加载textarea内部,但还是建议使用第一种。
3.是如何管理js文件的依赖
其实在电话面试的时候问过,当时我回答的是使用gulp,grunt之类的前端自动化工具。或说回来,这一个月时间需要把公司项目的js、css文件处理一下,主要就是js代码的压缩、混淆,css的后处理,主要是指给有必要的css属性加上浏览器的私有标签。
4.angular的数据双向绑定是怎么实现的
我说,主要就是数据的脏检查,先把需要watch的数据缓存起来,然后不断的去对比。之所以这么说,是因为之前看到过有人说,angular的observe实现是每隔50ms就去对比一次数据。面试官说,按你这说,那浏览器可能引用个angular什么事情没做就卡死了。
AngularJS的数据双向绑定是怎么实现的?——知乎
5.有没有了解过网易的开源项目
我说没有,这个怎么说呢?按道理,在面试前其实应该在网上搜一搜的,但只是搜一搜,他们再问一些细节性问题,就又不好办了。唉,两难。
6.说一说js的继承
我想很简单啊,原型链继承。面试官说,这是一种,那他和组合继承的区别呢。
WTF??什么是组合继承,从来没有听说过
JavaScript继承方式详解——segmentfault
原型链+借用构造函数的模式,这种模式称为组合继承。
所谓借用构造函数,是指使用Function的call/apply来改变函数的this指针,达到继承的目的function Parent(){ this.name = ['father'] console.log(this.name) } Parent.prototype.con = function(){ console.log('打印',this.name) } function Child(){ Parent.call(this) } Child.prototype = Parent.prototype; console.log(Child.prototype) var test = new Child() ; test.name.push('child'); test.con() //--->[father,chid]
7.你们觉得我的水平怎么样
这个问题是我问他们的,两位面试官哈哈大笑,大意是说缺乏大型项目的锻炼。
的确,第一份、第二份工作一直都是我一个人,没有人带,只能自我学习。
我觉得自己现在的问题是,急于想跳槽,摆脱目前的困境。但其实应该把自己学习到的东西,在已有项目上都实践是检验,才是正道,才能到去才一些坑,再下一次面试的时候,方能更从容一些。
比如说grunt/potcss的运用,明天去公司就开始着手。
8.做过哪些前端性能优化方面的事情
1 最小化dom访问次数,尽可能在js端执行;
2 如果需要多次访问某个dom节点,请使用局部变量存储对它的引用;
3 小心处理html集合,因为它实时连系着底层的文档,把集合的长度缓存到一个变量中,并在迭代中使用它,如果需要经常操作集合,建议把它拷贝到一个数组中;
4 如果可能的话,使用速度更快的API,比如querySelectorAll和firstElementChild;
5 要留意重绘和重排;批量修改样式时,“离线”操作dom树;使用缓存,并减少访问布局的次数;
6 动画中使用绝对定位,使用拖放代理
7 使用事件委托来减少事件处理器的数量总结下js中对数据访问的优化(节选自高性能JavaScript)
1 函数中读写局部变量总是最快的,而全局变量的读取则是最慢的;
2 尽可能地少用with 语句,因为它会增加with 语句以外的数据的访问代价;
3 闭包尽管强大,但不可滥用,否则会影响到执行速度以及内存;
4 嵌套的对象成员会明显影响性能,尽量少用;
5 避免多次访问对象成员或函数中的全局变量,尽量将它们赋值给局部变量以缓存。