我应该算比较早收到面试的吧,但是由于事情比较多到现在才想起更新。我最早3月份有一篇阿里的前端面经,发表在V2EX上。这篇文章讲我四次腾讯的面试经历。
腾讯提前批一面
接到腾讯电话面试的时候我在图书馆,信号其实不太好有点尴尬。面试官打通我电话就问我有没有空,我回答有空就简答的自我介绍一下直接开始电话面试了。说实话问的问题其实都比较难的。
- 如果想要子标签在父标签水平和垂直居中,怎么操作?
这个我经常遇到过,很简单 content-align 和 vertical-align 方可解决。但是我还提到一种控制文字居中的方法 line-height ,我的意思是通过设置行间距让一段文字居中。但面试官似乎不满意,问我还有没有其他方法,我就是利用 margin-left:auto 和 margin-right:auto 这种方法。
- 你能说说JS里面的数据类型吗?
这个也是简单的,我说有六种 Number,String,Bolean,Null,Undefined 和 Object,其中 Object 里面又包含函数,数组,正则表达式和自己定义的对象。这部分内容我之前面试也准备过,主要是通过慕课网学的。接下来他还问了对象和其他类型有什么区别,这个是让我一脸懵逼的。我就说对象有自己的方法和属性,可是其他也可以包装成对象啊。这个我觉得我答得不好。然后他提醒我实现的地层原理?二脸懵逼,我没有拆过浏览器,只看过犀牛书啊。但是面试官小哥非常有爱,提醒了一句引用?原来是这个意思啊,对象是引用的,其他都是直接量。引用的话可以对自身修改,而直接的不能。当中懵逼状态的时候,我还把引用计数和标记清楚解释了一遍。。ES6的新数据结构?这个我没有总结过,可能是说promise的封装吧
- 看到你的简历你对跨域很熟悉,你能说说吗?
我哪里写熟悉跨域了(手动doge),主要四种 JSONP,CORS,window.name() 和 document.domain()(其实第三种我说错了,第四种方法名也忘了)。然后他有问我JSONP的方法?就是通过JS对非同源网页发请求呗,这个我没细说,因为我在开发中我没用过。JSONP的缺点?这个我没答出来,后来他提醒我是不能POST请求,我说对的。(场面尴尬度爆表!可是我知道的但就是没想到诶,还是反应度不够吧)你说说CORS吧?就是在服务端加一个语句来允许跨域的请求,例如PHP的什么我也不太清楚。他知道我说不清也没多问。这一块我觉得我没回答好。
- 看到你简历对网络安全也有了解,你能说说吗?
也不是很了解啊,就是 XSS 和 CSRF 两种跨域攻击吧。跨域脚本攻击就比如说发送评论时加入了JS和HTML,上传后让别人诱导点击,这样就跨域到危险网站了(我就是这么答的,现在想想很不严谨。。)然后他又问怎么防范?我回答两种,首先不要信任用户的输入,用户输入的数据需要存储时在后端要封装一下,比如用mysql的过程存储。还有就是将用户输入的大于号、小于号和引号等进行转义,比如转义成<;之类的。然后又问了跨域请求伪造?就是模仿用户发请求的攻击吧,比如说我打开浏览器访问了网站留下了cookies,然后在不关页面情况下打开另一个危险网站,这会造成攻击。防范的方法也有两种,一种是请求时发送一个token,还有就是处理页面的referer,通过这两种办法可以确定发请求的用户。
- 你对计算机网络理解怎么样?
我这学期才学诶。。tcp协议的三次握手?这个很简单,发送方先发送一个syn请求,代表请求通信。然后服务端再发送syn/ack标记给求情端,代表我准备好通信,最后请求端再发送ack代表通信正式开始。http1.0和2.0区别?这个我又开始懵逼了,双工通信和多路操作?就是服务端也可以发送消息给前端之类的,这个我是看博客的。底层是怎么实现的?继续懵逼中,我回答不知道,我没用过诶。
- 看你简历有用到vue.js,你说说这个框架有点?
这个我在选择框架的过程中还特地问知乎的,Evan You作者说这个最大的优点就是上手快,我只要填数据结构就行了,还有就是有庞大的社区。好吧这个明显不是面试官想要的答案,他提醒我说和JQueryi相比呢?JQuery是对JS的封装,本质上还是对dom直接操作,而vue.js是处理Vnode,虚拟节点,还有生命周期函数(这个其实当时没想到)你是怎么解决开发中遇到的问题?这个很多诶,不过我有记录开发日志的习惯,在我的GitHub上面的log.md里面,然后他好像过去看了。。
- 你有什么问题吗?
终于等到这个问题了,我首先就是问面试结果什么时候出来?四月份之前。然后我又问了一个技术问题css以后会怎么发展,面试官小哥也说了很多,主要就是会分成web端和移动端,web端变化不会很大,类似的less,sass等工具。移动端可能会更加整合,比如微信小程序的wxss。然后他还介绍了他们的部门。
腾讯提前批二面
这次就没有问我什么技术问题了,主要问了我很多非技术问题。
- 你做了哪些项目?
我有两个项目,分别是政府的精准扶贫平台和以太坊资产交易平台。这两个项目我都负责前端,用的是vue.js框架。UI库是iview,基于浏览器的……
- 有接触移动端开发吗?
没有,但我稍微了解过。很多手机APP本质上都是浏览器。例如iOS的是调用UIWebview组件显示页面的,安卓也是如此。也有移动端框架例如weex等……
家住哪里?
父母干什么的?
还有很多非技术问题都记不清了。最后挂了电话感觉应该稳了,然而没过多久简历显示回绝状态。。。
腾讯正式一面
正式面是在酒店里进行的,面我的部门是深圳本部的腾讯云。面试官是后端开发的,所以并没有问很多前端的问题。
- 看了你的两个项目你能画一下UI界面吗?
(画了)
2.从输入URL到浏览器显示页面经过了什么?
我给他讲了DNS解析:首先浏览器会在内部查询域名对应的IP,如果找不到就会在 etc/host文件内查找IP,如果找不到就会访问运营商服务器查找,如果还找不到就在根服务器查找,找到的IP会返回并存储到浏览器中。完成了DNS解析就是TCP三次握手,然后发送请求和响应,最后渲染。
3.我就是问你浏览器的渲顺序?
额,感觉前面讲的都没用。。。就是按次序渲染啊,如果script内有defer或ascyn属性,或者css内有@import语句会影响渲染顺序,其他都不变。
4.如果全球各地都要访问深圳的服务器,你是怎么处理的?
我会尽量做好前端优化吧,让浏览器运行更快点。同时引用CDN加速,让常用的资源去就近的服务器请求。如果有时效性问题,我会在连接后先发一个请求然后记录下收到请求的时间,这个时间除二就是传输过程的时间,通过这个这种办法同步服务器和本地时间。
5.会后端语言吗?
会一点Python,但是不太熟。
6.你知道什么排序算法还有各自的复杂度?
(我写在纸上,然而大部分都错了)
7.我是后台开发的,你了解服务器什么知识吗?
我又把跨域访问讲了一遍,实在是不了解服务器啊。。。
8.你有什么问题吗?
这次我们聊了JS以后如何发展,大概就是说要不断的学习新的版本接受新特性等等。
最后他说会把我介绍给腾讯云的前端,留意一下深圳的号码。
不久,我确实是接到了深圳的号码,然而还是问了很多后端知识,甚至数据库问题。反正回答的都不怎么好吧,我写出来也没什么参考价值就不写了。
总的来说,四次面试都是失败告终。。。