此次面试之旅虽然只面试了两家,但是在这其中学到了蛮多同时也意识到了自己的很多不足。
以下面试情况都是凭着记忆中的印象写的,面试的问题要比我写的多,我就写些印象深刻的。
搜狗
感觉能拿到搜狗的面试机会个人觉得有运气也有实力吧。刚开始先是在拉钩上投了搜狗的这个前端重构师这个职位(这个职位注重html,css基础),没过几天搜狗就给我打电话来了,那时还是中午,我在午休,突然接到一个电话说是搜狗的。当时我吓得脑子一片空白(出现这个情况的原因是身为一个末流二本的学生居然这么快接到了大公司的面试。爱情来的太快就像龙卷风,让我防不胜防)。稍微整理好心情以后(当时还在没睡醒的状态),面试官开始问我一些基础问题:
面试官:清除浮动的原理
睡眼朦胧的我(答了怎么清除浮动):我常用的有两种方法一种是overflow:hidden还有一种就是用:after清除浮动(这个方法相信大家都懂,我就不写了)…
面试官:你好像有点紧张啊,我问的是原理,你给我答怎么清除浮动?
我:(中间我还答了些有的没的这里就省略了)哦!overflow:hidden创建了BFC利用BFC计算高度的时候浮动元素也要计算在内。:after是利用了父元素必须把非浮动元素的位置考虑进去(支支吾吾的答完了这题)。
面试官:怎么创建BFC?
我:overflow:hidden,visibility不为visible,定位(其实是position为absolute或fixed);
面试官:你平时都用哪些自动化工具,都用它们的什么插件?
我:用gulp像图片压缩,js、css压缩合并,文件连接,bable,js-hit。
面试官:这样吧,我给你发一个设计图过去,你把它还原成网页…(省略)。
不久,面试官给我发来了设计图,于是我就开始做了,第二天这样给面试官发过去了。没想到面试官当天就给我回信给我点评了一些不足,还说可以不用做这么快的(这让我万万没想到啊,还有点评),于是我又按照点评改了改,再在此之上加了些优化,过了两天给面试官发过去了。大概等了1,2个星期没音,我以为是跪了。没想到又过了几天面试官给我打电话邀请我到搜狐大厦去面试(超高兴,能去参观参观大厂,去那面试)。
按照约定时间我来到了搜狐网络大厦(本来想提前15分钟这样到的,没想到突然犯路痴,结果刚好是约定的时间到)…省略一些有的没的,直接进入面试吧:
面试官:自我介绍下吧。
我:balabala
面试官:如何实现左边图片右边文字的布局,都是不定宽的。
我:(省略一些有的没的回答)给它们都加上浮动。
面试官:这样不行
我:(惊讶脸)啊!不行?!我现在暂时想不到其他方法了。
面试官:不考虑浏览器兼容性呢?
我:啊!可以用flex,后面还balabala一些有的没的让面试官对答案不满意了,其实在父容器加个display:flex就得了。
中间一些项目的问答。
面试官:你平时切图切出来的图片都保存为什么格式,为什么?
我:保存为png-24,因为它比较小(这里答得不理想啊,应该是png压缩后比jpg小,而且png是无损压缩,jpg是有损压缩)
面试官:你平时有没有用过什么工具来提高的的开发效率?
我:(和上面电话面试的回答差不多)
面试官可能是看上面我的回答不怎么好于是拿出几道js题给我做。
第一题大概是这样的(考察作用域):
1 | var a=1; |
题目大概是这样,记不太清了,做出来以后和面试官解释为什么会这样。
答案是:1 2 undefined function undefined,至于为什么会这样我就不多说了,稍微有点基础的同学应该能一眼看出来。
第二题:给不支持es5的浏览器写一个Array,prototype.map:
答案:
1 | if(!Array,prototype.map){ |
去哪儿
一面
项目的一些问答
面试官:ajax的过程
我:先打开请求的地址,然后发送请求,然后处理数据并将数据反馈到页面。
面试官:假设我有一个ul,里面有好多个li,我如何知道用户点了哪个?
我:在ul上绑一个点击事件,利用回调函数的e参数的target获取用户点的li,然后获取这个ul里面的li用slice转为真正的数组,调用数组的indexOf(e.target)就知道用户点了哪个
代码:
1 | var ul=document.getElementById('ul'), |
面试官:如果我li里面套了一个span,这个时候我又怎么知道用户点了第几个span
我:直接把上面的li换成span
面试官:你知不知道这个时候的e.currentTarget指向谁,为什么?
我:ul,因为e.currentTarget指的是当前被绑定事件的元素。
面试官:new的过程
我:首先会新创建一个对象,然后将构造函数的prototype赋值给新创建对象的__proto__,将构造函数的this指向这个对象,并执行构造函数里的代码,最后判断返回值(如果返回值是简单数据类型直接返回新创建的对象,如果是复杂数据类型会返回这个复杂数据类型)
面试官:Promise的三个状态?
我:pedding resolve reject…(省略)
面试官:实现继承的方法?
我:(回来在写这篇文章的时候翻看发现自己答得不是很理想),可以看看高程的162-173页的继承。
面试官:http的状态码常用的有哪些?
我:(这个我就不打在这了,问题太过于简单)贴个链接
面试官:我现在第一次载入这个网页以后按刷新,这个时候会出现哪些状态码?
我:(我觉得面试官应该是问缓存会出现哪些状态码)于是我就答200(from memory cache) 和304,并和面试官解释这两个的差异;前者是直接从cache里面获取后者是向服务端发出确认没变然后再从cache里面取的。
面试官:假如现在我有一个数组[1,2,3,4,5,6,7,9]我想知道8应该在数组的哪个位置该怎么做?
我:把这个8push到数组里,排序,然后indexOf(8)
面试官:还有更好的办法吗?
我:没了(寻求更好的办法)。
面试官:css的优先级是怎么样的?
我:important>id>class>element然后,内嵌>内联>外联
面试官:我css有两个类c1和c2,他们内部分别定义了background-color:red和background-color:green把它们同时加到一个div上,这个时候他们的背景颜色是什么颜色?
我:这个取决于这两个类在css文件中定义的位置了,谁靠后就取谁的颜色。
面试官:我先定义c1在定义c2
我:那就是green了
面试官:如果我给这个div外面再套个div这个div类名为box,我在css文件中修改c1为.box .c1,这个时候颜色是啥?
我:那就是red了(为什么会这样就不用我多说了,相信大家都知道)
有了解过AMD/CMD、commonJS吗
我:(回答的大致意思在这里)
一面下来感觉就是碾压,问的东西非常基础,面试官看起来也特别满意,于是就让我去二面。
二面
上来就让我手写快排,还好之前有复习,不过久没写字了,写得比较慢,最后没写完,不过我和面试官讲解了思路,面试官看起来貌似蛮满意。
面试官:你给我介绍一些网络的知识吧。
我:balabala。
面试官:网络七层协议?
我:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
面试官:你操作系统怎么样?
我:这方面比较弱。
面试官:你给我介绍一下多进程和死锁吧。
我:…
面试官:如何证明node是单线程的?
我:给两段代码中间加个循环次数特别多的循环(这个问题没回答好,可以参考《了不起的Node js 将JavaScript进行到底》27页的例子)
1 | var start=Date.now(); |
面试官:最近有学什么新技术吗?
我:es6、了解了es7的async await还有最新的清除浮动的方法display:flow-root
接下来的一些问题记不太清了。。总之,二面被虐得很惨。