面向面经之腾讯前端暑期实习面经(一、二、三面)
一面
1、看过哪些前端的书籍
2、HTTPS建立通信的过程
---------补充http建立通信的过程----------------
一次https通信建立的全过程:
- 建立TCP连接
在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。 - Web浏览器向Web服务器发送请求命令
一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。 - Web浏览器发送请求头信息
浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。 - Web服务器应答
客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。 - Web服务器发送应答头信息
正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。 - Web服务器向浏览器发送数据
Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。 - Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
3、css有哪些单位
参考:https://www.cnblogs.com/passkey/p/10129985.html
- em当前字体的大小
- rem基于根元素进行设置(html)
- vh显示窗口的高度,vh等于viewport高度的1/100,占满高度即为100vh
- vw显示窗口的宽度
- vmin与这个宽度和高度的最大值或者最小值有关
- vmax
如果浏览器设置为1100px宽、700px高,1vmin会是7px,1vmax为11px。然而,如果宽度设置为800px,高度设置为1080px,1vmin将会等于8px而1vmax将会是10.8px。
4、讲一下css的flex布局
参考:https://www.cnblogs.com/10yearsmanong/p/12212825.html
弹性布局,用来为盒状模型提供最大的灵活度
任何一个容器都可以指定为flex布局,容器分为两种,块flex和行内flex
5、js的原型和原型链,原型链的终点在哪里?
所有的JS对象都有一个prototype属性,指向它的原型对象。当试图访问一个对象的属性时,如果没有在该对象上找到,它还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。
原型链的终点是null
Object.prototype.proto === null
https://zhuanlan.zhihu.com/p/94596126
重点(十分详细):https://www.jianshu.com/p/652991a67186
6、es5、es6继承
// es6的继承主要是class的继承 // 通过class关键字定义类 // 类的所有与方法都定义在类的prototype属性上面 class Point{ // 构造方法 constructor(x,y){ // this是实例对象 this.x=x; this.y=y; } // 相当于定义在类的prototype属性上 toString(){ return '('+this.x+','+this.y+')'; } } // 添加新方法 Object.assign(Point.prototype,{ toString1(){ }, toValue(){ } }) var b=new Point(1,2); // 在类的实例上调用方法,相当于调用原型上的方法 console.log(b.toString());
7、讲一下js的事件委托
ok
8、什么是闭包?闭包有哪些使用场景?
9、浏览器的缓存机制
浏览器第一次访问一个地址时会缓存静态文件(html,css,js),然后当第二次访问时会查看缓存是否过期,如果没有过期不会重新下载网页,直接使用缓存中的网页。只有网站明确标明已经更新了,浏览器才会重新下载网页。
强缓存
协商缓存
###10、浏览器的渲染原理
11、回流和重绘
ok
12、跨域问题以及解决方案
ok
13、XSS和CSRF,解决方案
ok
14、vue数据双向绑定的原理,数组中的元素更新是怎么实现的呢?
15、关于node
16、手写代码题:找出字符串中出现次数最多的字符及出现次数
17、有什么要问我的吗(问了一下前端的发展问题)
二面
尽可能详细的说明从输入url到回车这个过程中发生了什么
如果要加载一个很大的图怎么办,后来get到面试官想问的其实是前端要加载一个图片有哪些方式,然后还问到了base64是怎么实现的,有什么缺点,icon是怎么实现的
px和rem的区别,举个例子说明一下
js事件委托
说一下原生Ajax,因为说到了状态码304,然后又问了浏览器的缓存机制
讲一下你知道的前端性能优化方式
用vue和react哪个多一点(vue)。说一下vue数据双向绑定的原理
先出了一个深拷贝的题,问会输出什么,然后手写一个深拷贝
从一个数组的后十个数中找出3个和为10的数字,说一下解决方案。刚开始说了个三层循环的,然后让优化一下,利用对象优化到了两层
有什么要问我的吗(问了一下前端之间分工协作的问题)
三面
后端一下子给你几万条数据,你要怎么处理。一开始我说,这种情况下后端一定会分页的,然后又问没分页怎么办。然后我说前端手动分页,然后讲了一下具体的实现方法。
有一个高频触发的请求,你会怎么处理,这个饶了好久,一开始没get到面试官的点,一开始谈到了节流和防抖,然后面试官说这样会影响用户体验,而且这个需求就是需要高频触发,然后又说了一下需要高频请求的场景,一开始说到表单,然后说到购物车抢购。然后我又说加个16位随机字符串的参数,然后面试官说这样只是可以区分请求,在网络传输过程中,请求不一定是按先后顺序到达服务器的,那么服务器怎么知道请求的先后顺序呢,其实答案很简单,就是加个时间戳参数。不过当时一下子没反应过来,还谈到了域名发散,面试官说太复杂,然后才谈到加表明各个请求之间关系的参数。
你有什么想问我的吗(问了一下腾讯招实习生的时候最看重的是实习生的哪些能力)
最后就聊了一下实习时间还有为什么学前端,我大概说了一下,然后面试官说女生喜欢做好看的东西。我觉得总结的很对哈哈。