因为我看到腾讯春招系统要截止了,然后也没拿到好的实习OFFER,身边同学劝我赶紧投腾讯,我就投了全栈岗,因为技术岗笔是被刷,一周没消息后在某周末被腾讯CDC捞起调剂成前端开发岗。
本科大三
计算机 软件工程
规划 7 月初可以开始实习三个月 - 四个月
面试流程
电话面试,分成
基础知识考核
简历项目深挖
数据结构与算法
面试者题问环节
基础知识
讲解一下 Flex 布局的理解
这里可以参考 阮一峰的 blog 文 : Flex 布局教程
简单说一下六个容器属性
flex-direction
flex-wrap
flex-flow
justify-content
align-items
align-content
讲一下 OSI 的七层模型,HTTP 在哪一层
应用层
网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示层
数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、EBCDIC、加密格式等
会话层
建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话
传输层
定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
网络层*
进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6)
数据链路层
建立逻辑连接、进行硬件地址寻址、差错校验 等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层
建立、维护、断开物理连接。(由底层网络定义协议)
说一下三次握手
TCP连接6种标识
SYN(synchronous):建立连接
ACK(acknowledgement):确认
PSH(push):传送
FIN(finish):结束
RST(reset):重置
URG(urgent):紧急
Sequence number:顺序号码
数据是被拆成多个数据包来发送,序列号就是对每个数据包进行编号,这样接受方才能对数据包进行再次拼接。
Acknowledge number:确认号码,代表下一个数据包编号
三次握手
所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。
三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect() 时。将触发三次握手。
1.第一次握手(SYN=1, seq=x):
客户端发送一个 TCP 的 SYN 标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号 X,保存在包头的序列号(Sequence Number)字段里。
发送完毕后,客户端进入 SYN_SEND 状态。
2.第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):
服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。 发送完毕后,服务器端进入 SYN_RCVD 状态。
3.第三次握手(ACK=1,ACKnum=y+1)
客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1
发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP 握手结束。
三次握手简要理解
三次握手的本质是确认通信双方收发数据的能力
首先,我让信使运输一份信件给对方,对方收到了,那么他就知道了我的发件能力和他的收件能力是可以的。
于是他给我回信,我若收到了,我便知我的发件能力和他的收件能力是可以的,并且他的发件能力和我的收件能力是可以。
然而此时他还不知道他的发件能力和我的收件能力到底可不可以,于是我最后回馈一次,他若收到了,他便清楚了他的发件能力和我的收件能力是可以的。
三次握手中如何保证数据传输
TCP是一种面向连接的、可靠的基于字节流服务。“面向连接”意味着使用TCP协议的应用在建立联系之前,彼此需要先建立TCP联系;而TCP协议确保传输过程中数据的顺序性则体现其“可靠”的特性,具体如下:
TCP协议将数据切分为多个小片段(数据被划分为合理长度),小片段由头部(header)和数据(payload)组成,为了确保抵达数据的顺序,TCP协议给每个片段的头部(header)都分配了 序列号 ,方便后期按照序列号排序。
当某个片段按照顺序发送后,发送方会将已发送的数据片段暂时保存在 缓冲区 内,并为每个已发送的数据设置一个 时间区间 。
当接收方收到正确的符合顺序的数据片段后,会优先对数据片段做完整检验,如确认无误,再把数据片段交给上层协议,并给发送方一个 TCP片段反馈信息用来告知(ACK acknowledge)发送方:我已经接收到这个片段了。这个TCP片段被称为 ACK回复 。举个例子:发送的第一个片段序列号为 T,其对应的ACK回复则为T+1,也就是接收方要接收的下一个发送片段的序列号。
假设在规定的时间区间之内发送方收到接收方的 TCP片段反馈信息,则发送方可以释放缓冲区的数据,如若超时未收到应答,发送方则重新发送数据,直到收到应答,或者重发数据次数达到上限为止。
TCP协议的种种机制保证了数据传输的顺序,然而TCP报文段作为IP数据来传输,在IP数据报的到达可能会失序,因此TCP报文段的到达也存在失序的可能。特殊情况下,TCP将对收到的数据进行重新排列,确保顺序正确后再交给应用层。
能说一下 HTTP 状态码吗
讲一些常见的就行 200 304 400 403 404 500
状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值,如下:
1xx:信息性状态码,表示服务器已接收了客户端请求,客户端可继续发送请求。
1.100 Continue
2.101 Switching Protocols
2xx:成功状态码,表示服务器已成功接收到请求并进行处理。
1.200 OK 表示客户端请求成功
2.204 No Content 成功,但不返回任何实体的主体部分
3.206 Partial Content 成功执行了一个范围(Range)请求
3xx:重定向状态码,表示服务器要求客户端重定向。
1.301 Moved Permanently 永久性重定向,响应报文的Location首部应该有该资源的新URL
2.302 Found 临时性重定向,响应报文的Location首部给出的URL用来临时定位资源
3.303 See Other 请求的资源存在着另一个URI,客户端应使用GET方法定向获取请求的资源
4.304 Not Modified 服务器内容没有更新,可以直接读取浏览器缓存
5.307 Temporary Redirect 临时重定向。与302 Found含义一样。302禁止POST变换为GET,但实际使用时并不一定,307则更多浏览器可能会遵循这一标准,但也依赖于浏览器具体实现
4xx:客户端错误状态码,表示客户端的请求有非法内容。
1.400 Bad Request 表示客户端请求有语法错误,不能被服务器所理解
2.401 Unauthonzed 表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用
3.403 Forbidden 表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因
4.404 Not Found 请求的资源不存在,例如,输入了错误的URL
5xx:服务器错误状态码,表示服务器未能正常处理客户端的请求而出现意外错误。
1.500 Internel Server Error 表示服务器发生不可预期的错误,导致无法完成客户端的请求
2.503 Service Unavailable 表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常
301 和 302 的区别。
301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。
他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;
302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。SEO302好于301
重定向原因:
1.网站调整(如改变网页目录结构);
2.网页被移到一个新地址;
3.网页扩展名改变(如应用需要把.php改成.Html或.shtml)。
这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。
什么时候进行301或者302跳转呢?
当一个网站或者网页24—48小时内临时移动到一个新的位置,这时候就要进行302跳转,而使用301跳转的场景就是之前的网站因为某种原因需要移除掉,然后要到新的地址访问,是永久性的。
清晰明确而言:使用301跳转的大概场景如下:
**域名到期不想续费(或者发现了更适合网站的域名),想换个域名。**在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪一个。空间服务器不稳定,换空间的时候。
请说一下 get 与 post 的区别
(本标准答案参考自w3schools)
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中
能说一下请求需要哪些东西吗
这里说一下请求头的一些参数,还有携带参数部分(e.g. form-data、json、params)。
可以说一下原型链吗,还有关于 js 的父子继承
这里可以参考 MDN - 继承与原型链
可以说一下 DOM 树的实现原理吗,还有虚拟 DOM
DOM树:JavaScript是如何影响DOM树构建的
浅析虚拟dom原理并实现
能说一下在Vue中处理请求数据需要的注意点吗,或是有什么注意点
有经验的应该就说说就行。
Vue 如何给一个对象添加新的属性
参考 Vue-给对象新增属性(使用Vue.$set())
Vue 有一个状态监控的东西,能说一下是什么吗
貌似是说 computed 或是 watch。我回答是不是 watch,他说不是。
数据结构与算法
p.s. 相当 easy
两数之和
最长重复子串
简历项目深挖
这里就略过,自己的项目自己应该要知道。
面试者题问环节
你有什么想要问我的
我就问了面试官关于他的部门。
结语
这次面试,我没有准备的很充分,加上是临时通知面试,当时面试我在 Vue 和 JS 上没答好,虽然有 Vue 实战开发经验但是没有去特別背理论知识,已经面试过了一周以上没有消息了,现在回写面经感觉有些面试内容都忘了。春招也到了尾声。