百度前端岗位面经(offer)
收到百度前端offer,写个面筋,回馈社区。
可能不太全,顺序也不记得了。
一面大都能答上,但是面试官提问的时候会一直深入,质疑你,让我面完之后觉得过的可能性不是太大。
二面的话整体感觉好多了,面完之后,看面试官的态度知道基本稳了。
三面很糟糕,很多时候让我写代码,我在那卡很久气氛比较尴尬。花了接近两个小时,也没问多少问题,本以为是要挂了。
一面(部分,有些不记得了,因为细节问题被怼了很多次)
- 用最多的方式实现三栏布局?
答:1. float实现 2. position: absolute实现 3. flex布局实现 - float布局对后续元素的影响?
答:浮动元素脱离文档流,如果后续元素为浮动元素,则依此排列;如果使文本节点,则围绕浮动元素;否则,会被浮动元素覆盖,布局忽略浮动元素。 - 知道怎么清除浮动吗?
答:用的最多的是:after{content:"";display:block;clear: both} - 知道里面的原理吗?
答:使用clear: both之后,会把浮动元素的边界拉下来到标准流,从而把对应标准流的位置撑开。 - 用尽可能多的方式实现数组去重。
答:1. Array.from(new Set(arr)) 2. for循环实现 - 数组reduce方法知道吗?(知道)好,那你用reduce方法能不能实现这个去重?
答: 写出来了,但是有细节问题,被批评了。 - deBounce防抖懂吗?(回答不懂)那我大概和你说一下原理,blabla,现在懂了吗?(懂了)那你自己实现一个这样的函数把。
答: 代码不详细写出来,反正也写出来了。 - 函数里面用到的setTimeout,你能说说它异步执行的原理吗。
答:把浏览器的js线程,定时器线程,事件处理线程,http请求线程之间任务分配。 浏览器的队列机制说了一遍。 - 说到队列,那你知道队列里面的优先级问题吗?
答:说明了一下微任务(promise)和宏任务(xhr请求, setTimeout, setInterval), 当前同步操作完成后优先执行微任务队列中任务。
......
二面(部分,有些不记得了,三轮面试体验最好,感觉面试官很和蔼)
- 了解http协议吗,知道哪些header
答:host/origin/referer/cookie/content-type/content-length/cookie/accept/accept-encoding/***-control 说了这些,然后每个都大概解释了什么作用 - 刚有提到http缓存,能详细说说吗?
答:把强缓存、协商缓存说了一遍,然后对应的header头的配置***-control/if-modified-since/if-none-match/last-modified/etag介绍了一下。 - 看你有个人网站用了https,能说说https与http的区别吗?
答:这个内容在学习的时候很深入,所以所有的细节都讲清楚了,从ssl握手,证书验证,加密算法几方面都有讲。 - 了解数据结构吗(有自学过),那你试着用栈实现一个列队看看?
答:磨了一分钟,直接说了没思路。 跳过。 - 了解哪些es6新特性?
答:模板字符串,let和const,class声明类,promise,对象数组解构赋值。 说的时候还介绍了特点。 - 没有用箭头函数吗?(一下子没想到。)说说箭头函数吧。
答:箭头函数中this指向的是外层的作用域。 - 那通过对象.方法调用箭头函数,里面的this指向什么?
答:想了一下,确实没想过这个场景,说不知道。 - 你这个项目用的express,知道express中间件吗?
答:这里就说了一下app.use(url, fn, next)作为中间件处理响应的请求。 - 了解xss吗?
答:大概说了一下xss代码注入。 - 中间还有介绍项目的过程,就简单的说了一下,因为都是个人的项目,所以也说的比较简单。
......
三面(最惨,全程怼)
- 你先用原生js封装一个ajax方法吧,我出去一下。
答:自己在那写,写了post和get方法。面试官回来看我还在写:我看看,写的这么详细,不用写了,你这不浪费时间嘛,来给我讲讲。 然后给他讲。 - promise知道吗?(知道)干嘛用的?(解决回调地狱代码难以维护的问题)好,那你来实现一个吧?
答:硬着头皮写,面试官看我一直卡着写不出来说:你可以先把promise本身的用法写一下,这样不就好整理思路了嘛。 然后我就按他说的做,还是写不出来。就在那琢磨,面试官也不叫停,十多分钟,挺尴尬的。最后说算了不用写了。 - 现在我有一个对象urls = {url1: "这里是具体url地址", url2: ....}, 我想用urls.url1('POST', callback)的方式来发请求,你怎么做?
答:一脸懵逼。思考了三分钟左右,问他,这个你给的是对象,对象.属性不是方法啊。 他说:是方法还用让你来做吗?我不管你怎么做,实现就好了!然后,硬着头皮遍历属性然后重写属性为方法。然后看他态度,应该是符合了他的要求。
- 会用vue,了解过原理吗?双向绑定是怎么做的?
答:实际上其实也是单向数据流,只是使用了oninput的事件。 - 那说说看vue的单向绑定吧。
答:这个的话就得从Dep, Watcher, Observer以及Vue本身这些类来说了。 - 行行行,那你把你说的这些写一下把,实现一个简单的给我看看。
答:在这之前有看源码,所以基本上写出来了。给他讲了讲里面的一些关系。 - 这样,我页面中有个树结构,画了个图,问我Vue怎么封装组件,怎么传数据到对应的节点?(图如下)
A
B
C- D
- E
答:想了半天没明白他什么意思,然后问他,也一直听不懂他到底想要做什么。磨了大概十分钟,还是交流明白。最后他说了个,类似于目录结构,瞬间明白了。就准备开始写了,遍历获取到的数据,生成ul,li标签,添加到页面中。(写了不到半分钟,他就叫停:算了算了,你不要写了,太浪费时间了,讲思路把)
- 另外:三面我在写代码的过程中,他穿插问了我基本情况,老家哪的、非科班为什么转、腾讯阿里有offer吗...