又是一年就业季,我们常讲金三银四好就业,殊不知5-8月也是一个充满竞争且机会多多的”就业风口“。为了帮助全栈工程师方向的同学能够更好的找到工作,积云教育编程培训的老师整合最新2021年全栈工程师面试题(附答案),希望能够更好的帮助大家。


1. TCPUDP 协议的区别?


  tcp udp OSI 模型中的运输层中的协议。tcp 提供可靠的通信传输,而 udp 则常被用于让广播和细节控制交给应用的通信传输。 两者的区别大致如下:

  tcp 面向连接,udp 面向非连接即发送数据前不需要建立链接; tcp 提供可靠的服务(数据传输)udp 无法保证; tcp 面向字节流,udp 面向报文; tcp 数据传输慢,udp 数据传输快; 82.tcp 为什么要三次握手,两次不行吗?为什么?  我们假设AB是通信的双方。我理解的握手实际上就是通信,发一次信息就是进行一次握手。

  第一次握手:AB打电话说,你可以听到我说话吗? 第二次握手:B收到了A的信息,然后对A说:我可以听得到你说话啊,你能听得到我说话吗? 第三次握手:A收到了B的信息,然后说可以的,我要给你发信息啦! 在三次握手之后,AB都能确定这么一件事:我说的话,你能听到;你说的话,我也能听到。这样,就可以开始正常通信了。 注意:HTTP是基于TCP协议的,所以每次都是客户端发送请求,伺服器应答,但是TCP还可以给其他应用层提供服务,即可能AB在建立链接之后,谁都可能先开始通信。

  如果采用两次握手,那么只要伺服器发出确认数据包就会建立连接,但由于客户端此时并未响应伺服器端的请求,那此时伺服器端就会一直在等待客户端,这样伺服器端就白白浪费了一定的资源。若采用三次握手,伺服器端没有收到来自客户端的再此确认,则就会知道客户端并没有要求建立请求,就不会浪费伺服器的资源。


2. HTTP的状态码?


1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态码

  100 - 继续请求者应当继续提出请求。伺服器返回此代码表示已收到请求的第一部分,正在等待其余部分

  101 - 切换协议请求者已要求伺服器切换协议,伺服器已确认并准备切换

  2xx(成功)表示成功处理了请求的状态码

  200 - 成功伺服器已经成功处理了请求。通常,这表示伺服器提供了请求的网页

  201 - 已创建请求成功并且伺服器创建了新的资源

  202 - 已接受伺服器已接受请求,但尚未处理

  203 - 非授权信息伺服器已经成功处理了请求,但返回的信息可能来自另一来源

  204 - 无内容伺服器成功处理了请求,但没有返回任何内容

  205 - 重置内容伺服器成功处理了请求,但没有返回任何内容

  206 - 部分内容伺服器成功处理了部分GET请求

  --------------------------------------------------------------------

  3xx(重定向)表示要完成请求,需要进一步操作;通常,这些状态代码用来重定向

  300 - 多种选择针对请求,伺服器可执行多种操作。伺服器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择

  301 - 永久移动请求的网页已永久移动到新位置。伺服器返回此响应(GETHEAD请求的响应)时,会自动将请求者转到新位置

  302 - 临时移动伺服器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求

  303 - 查看其它位置请求者应当对不同的位置使用单独的GET请求来检索响应时,伺服器返回此代码

  304 - 未修改自上次请求后,请求的网页未修改过。伺服器返回此响应,不会返回网页的内容

  305 - 使用代理请求者只能使用代理访问请求的网页。如果伺服器返回此响应,还表示请求者应使用代理

  307 - 临时性重定向伺服器目前从不同位置的网页响应请求,但请求者应继续使用原有的位置来进行以后的请求

  --------------------------------------------------------------------

  4xx(请求错误)这些状态码表示请求可能出错,妨碍了伺服器的处理

  400 - 错误请求伺服器不理解请求的语法

  401 - 未授权请求要求身份验证。对于需要登录的网页,伺服器可能返回此响应

  403 - 禁止伺服器拒绝请求

  404 - 未找到伺服器找不到请求的网页

  405 - 方法禁用禁用请求中指定的方法

  406 - 不接受无法使用请求的内容特性响应请求的网页

  407 - 需要代理授权此状态码与401(未授权)类似,但指定请求者应当授权使用代理

  408 - 请求超时伺服器等候请求时发生超时

  409 - 冲突伺服器在完成请求时发生冲突。伺服器必须在响应中包含有关冲突的信息

  410 - 已删除如果请求的资源已永久删除,伺服器就会返回此响应

  411 - 需要有效长度伺服器不接受不含有效内容长度标头字段的请求

  412 - 未满足前提条件伺服器未满足请求者在请求者设置的其中一个前提条件

  413 - 请求实体过大伺服器无法处理请求,因为请求实体过大,超出了伺服器的处理能力

  414 - 请求的URI过长请求的URI(通常为网址)过长,伺服器无法处理

  415 - 不支持媒体类型请求的格式不受请求页面的支持

  416 - 请求范围不符合要求如果页面无法提供请求的范围,则伺服器会返回此状态码

  417 - 未满足期望值伺服器未满足期望请求标头字段的要求

  --------------------------------------------------------------------

  5xx(伺服器错误)这些状态码表示伺服器在尝试处理请求时发生内部错误。这些错误可能是伺服器本身的错误,而不是请求出错

  500 - 伺服器内部错误伺服器遇到错误,无法完成请求

  501 - 尚未实施伺服器不具备完成请求的功能。例如,伺服器无法识别请求方法时可能会返回此代码

  502 - 错误网关伺服器作为网关或代理,从上游伺服器无法收到无效响应

  503 - 伺服器不可用伺服器目前无法使用(由于超载或者停机维护)。通常,这只是暂时状态

  504 - 网关超时伺服器作为网关代理,但是没有及时从上游伺服器收到请求

  505 - HTTP版本不受支持伺服器不支持请求中所用的HTTP协议版本


3. 打开一个网页,整个过程会使用哪些协议?


  ·DNS解析

  ·TCP连接

  ·发送HTTP请求

  ·伺服器处理请求并返回HTTP报文

  ·浏览器解析渲染页面

  ·连接结束


4. http 响应码 301 302 代表的是什么?有什么区别?


  301:永久重定向;302:暂时重定向。

  它们的区别是,301 对搜索引擎优化(SEO)更加有利;302 有被提示为网络拦截的风险。


5. 请你谈谈DNS的寻址过程。


  1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

  2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

  3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS伺服器,在此我们叫它本地DNS伺服器,此伺服器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

  4、如果要查询的域名,不由本地DNS伺服器区域解析,但该伺服器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

  5、如果本地DNS伺服器本地区域文件与缓存解析都失效,则根据本地DNS伺服器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS伺服器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名伺服器的一个IP。本地DNS伺服器收到IP信息后,将会联系负责.com域的这台伺服器。这台负责.com域的伺服器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS伺服器地址(qq.com)给本地DNS伺服器。当本地DNS伺服器收到这个地址后,就会找qq.com伺服器,重复上面的动作,进行查询,直至找到www.qq.com主机。

  6、如果用的是转发模式,此DNS伺服器就会把请求转发至上一级DNS伺服器,由上一级伺服器进行解析,上一级伺服器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS伺服器用是是转发,还是根提示,最后都是把结果返回给本地DNS伺服器,由此DNS伺服器再返回给客户机。

  从客户端到本地DNS伺服器是属于递归查询,而DNS伺服器之间就是的交互查询就是迭代查询。


6. 说一下 tcp 粘包是怎么产生的?


  tcp 粘包可能发生在发送端或者接收端,分别来看两端各种产生粘包的原因:

  发送端粘包:发送端需要等缓冲区满才发送出去,造成粘包; 接收方粘包:接收方不及时接收缓冲区的包,造成多个包接收。


7. 请介绍一下HTTP协议(特征)?


  HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URLHTTP服务端即WEB伺服器发送所有请求。Web伺服器根据接收到的请求后,向客户端发送响应信息。


8. 什么是 XSS 攻击,如何避免?


  XSS 攻击:即跨站脚本攻击,它是 Web 程序中常见的漏洞。原理是攻击者往 Web 页面里插入恶意的脚本代码(css 代码、Javascript 代码等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的,如盗取用户 cookie、破坏页面结构、重定向到其他网站等。 预防 XSS 的核心是必须对输入的数据做过滤处理。


9. TCP 三次握手和四次挥手?


  为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。

  2.1 TCP 三次握手漫画图解

  如下图所示,下面的两个机器人通过3次握手确定了对方能正确接收和发送消息(图片来源:《图解HTTP)

  

  简单示意图:

  


  客户端发送带有 SYN 标志的数据包一次握手服务端

  服务端发送带有 SYN/ACK 标志的数据包二次握手客户端

  客户端发送带有带有 ACK 标志的数据包三次握手服务端

  2.2 为什么要三次握手

  三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

  第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常

  第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常

  第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常

  所以三次握手就能确认双发收发功能都正常,缺一不可。

  2.3 为什么要传回 SYN

  接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。

  SYN TCP/IP 建立连接时使用的握手信号。在客户机和伺服器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,伺服器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK(Acknowledgement[汉译:确认字符 ,在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误。 ])消息响应。这样在客户机和伺服器之间才能建立起可靠的TCP连接,数据才可以在客户机和伺服器之间传递。

  2.4 传了 SYN,为啥还要传 ACK

  双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。

  

  断开一个 TCP 连接则需要四次挥手

  客户端-发送一个 FIN,用来关闭客户端到伺服器的数据传送

  伺服器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号

  伺服器-关闭与客户端的连接,发送一个FIN给客户端

  客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1

  2.5 为什么要四次挥手

  任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

  举个例子:A B 打电话,通话即将结束后,A 我没啥要说的了B回答我知道了,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 我说完了A 回答知道了,这样通话才算结束。


10. 请说明一下哪种应用场景会使用TCP协议,使用它的意义


  考察点:TCP协议

  当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTPHTTPSFTP等传输文件的协议,POPSMTP等邮件传输的协议


11. HTTP长连接、短连接?


  在HTTP/1.0中默认使用短连接。也就是说,客户端和伺服器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

  而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:

  Connection:keep-alive

  在使用长连接的情况下,当一个网页打开完成后,客户端和伺服器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个伺服器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的伺服器软件(Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

  HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。


12. HTTP 状态码 302301304的的区别?


  301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替

  302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI

  304 Not Modified 未修改。所请求的资源未修改,伺服器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源


13. HTTP fetch发送2次请求的原因?


  fetch发送post请求的时候,总是发送2次,第一次状态码是204,第二次才成功?

  原因很简单,因为你用fetchpost请求的时候,导致fetch 第一次发送了一个Options请求,询问伺服器是否支持修改的请求头,如果伺服器支持,则在第二次中发送真正的请求。


14. 请你简单讲解一下,负载均衡 反向代理模式的优点、缺点


  考察点:反向代理

  (1)反向代理(Reverse Proxy)方式是指以代理伺服器来接受internet上的连接请求,然后将请求转发给内部网络上的伺服器,并将从伺服器上得到的结果返回给internet上请求连接的客户端,此时代理伺服器对外就表现为一个伺服器

  (2)反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台伺服器进行处理,从而达到负载均衡的目的。

  (3)反向代理负载均衡能以软件方式来实现,如apache mod_proxynetscape proxy等,也可以在高速缓存器、负载均衡器等硬件设备上实现。反向代理负载均衡可以将优化的负载均衡策略和代理伺服器的高速缓存技术结合在一起,提升静态网页的访问速度,提供有益的性能;由于网络外部用户不能直接访问真实的伺服器,具备额外的安全性(同理,NAT负载均衡技术也有此优点)

  (4)其缺点主要表现在以下两个方面

  反向代理是处于OSI参考模型第七层应用的,所以就必须为每一种应用服务专门开发一个反向代理伺服器,这样就限制了反向代理负载均衡技术的应用范围,现在一般都用于对web伺服器的负载均衡。

  针对每一次代理,代理伺服器就必须打开两个连接,一个对外,一个对内,因此在并发连接请求数量非常大的时候,代理伺服器的负载也就非常大了,在最后代理伺服器本身会成为服务的瓶颈。

  一般来讲,可以用它来对连接数量不是特别大,但每次连接都需要消耗大量处理资源的站点进行负载均衡,如search等。


15. 各种协议与HTTP协议之间的关系?



16. OSI 的七层模型都有哪些?


  物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。

  数据链路层:负责建立和管理节点间的链路。

  网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。

  传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。

  会话层:向两个实体的表示层提供建立和使用连接的方法。

  表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。

  应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。


17. 请你说明一下,SSL四次握手的过程


  1、 客户端发出请求

  首先,客户端(通常是浏览器)先向伺服器发出加密通信的请求,这被叫做ClientHello请求。

  2伺服器回应

  伺服器收到客户端请求后,向客户端发出回应,这叫做SeverHello

  3、客户端回应

  客户端收到伺服器回应以后,首先验证伺服器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

  4伺服器的最后回应

  伺服器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"。然后,向客户端最后发送下面信息。

  (1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。

  (2)伺服器握手结束通知,表示伺服器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

  至此,整个握手阶段全部结束。接下来,客户端与伺服器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。


18. get post 请求有哪些区别?


  get 请求会被浏览器主动缓存,而 post 不会。

  get 传递参数有大小限制,而 post 没有。

  post 参数传输更安全,get 的参数会明文限制在 url 上,post 不会。


19. 请介绍一下操作系统中的中断


  中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保存现场后自动去执行相应的处理程序,处理完该事件后再返回中断处继续执行原来的程序。中断一般三类,一种是由CPU外部引起的,如I/O中断、时钟中断,一种是来自CPU内部事件或程序执行中引起的中断,例如程序非法操作,地址越界、浮点溢出),最后一种是在程序中使用了系统调用引起的。而中断处理一般分为中断响应和中断处理两个步骤,中断响应由硬件实施,中断处理主要由软件实施。


20. HTTP常见的的头部有哪些?


  可以将http首部分为通用首部,请求首部,响应首部,实体首部

  通用首部表示一些通用信息,比如date表示报文创建时间,

  请求首部就是请求报文中独有的,如cookie,和缓存相关的如if-Modified-Since

  响应首部就是响应报文中独有的,如set-cookie,和重定向相关的location

  实体首部用来描述实体部分,如allow用来描述可执行的请求方法,content-type描述主题类型,content-Encoding描述主体的编码方式


  以上便是2021年全栈工程师面试题1(答案见附件)的全部内容,积云教育IT培训的老师会定期整理编程培训方向面试题,想了解更多全栈工程师培训信息,请持续关注本站。