去面试吧网络问题

http 响应常见状态码

200成功

304未修改,表示客户机缓存的版本是最新的, 客户机应该继续使用它

301永久重定向

302临时重定向

403 禁止,服务器理解客户端请求, 但拒绝处理它, 通常用于服务器上文件或目录的权限设置所致

404找不到

500服务器错误

查找域名对应 IP 地址

DNS 的作用就是通过域名查询到具体的 IP。DNS 是基于 UDP 做的查询。

DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存.

  1. 操作系统会首先在本地缓存中查询
  2. 没有的话会去系统配置的 DNS 服务器中查询
  3. 如果这时候还没得话,会直接去 DNS 根服务器查询,这一步查询会找出负责 com 这个一级域名的服务器
  4. 然后去该服务器查询 google 这个二级域名
  5. 接下来三级域名的查询其实是我们配置的,你可以给 www 这个域名配置一个 IP,然后还可以给别的三级域名配置一个 IP

如何理解 HTTP 协议是无状态的【常考】

HTTP 协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP 是一个无状态的面向连接的协议,无状态不代表 HTTP 不能保持 TCP 连接,更不能代表 HTTP 使用的是 UDP 协议(无连接)

Post 和 Get 的区别

  • Get 请求能缓存,Post 不能
  • Post 相对 Get 安全一点点,因为Get 请求都包含在 URL 里,且会被浏览器保存历史纪录,Post 不会,但是在抓包的情况下都是一样的。
  • Post 可以通过 request body来传输比 Get 更多的数据,Get 没有这个技术
  • URL有长度限制,会影响 Get 请求,但是这个长度限制是浏览器规定的,不是 RFC 规定的
  • Post 支持更多的编码类型且不对数据类型限制

从输入 URL 到页面加载完成的过程

这是一个很经典的面试题,在这题中可以将本文讲得内容都串联起来。

  1. 首先做 DNS 查询,如果这一步做了智能 DNS 解析的话,会提供访问速度最快的 IP 地址回来
  2. 接下来是 TCP 握手,应用层会下发数据给传输层,这里 TCP 协议会指明两端的端口号,然后下发给网络层。网络层中的 IP 协议会确定 IP 地址,并且指示了数据传输中如何跳转路由器。然后包会再被封装到数据链路层的数据帧结构中,最后就是物理层面的传输了
  3. TCP 握手结束后会进行 TLS 握手,然后就开始正式的传输数据
  4. 数据在进入服务端之前,可能还会先经过负责负载均衡的服务器,它的作用就是将请求合理的分发到多台服务器上,这时假设服务端会响应一个 HTML 文件
  5. 首先浏览器会判断状态码是什么,如果是 200 那就继续解析,如果 400 或 500 的话就会报错,如果 300 的话会进行重定向,这里会有个重定向计数器,避免过多次的重定向,超过次数也会报错
  6. 浏览器开始解析文件,如果是 gzip 格式的话会先解压一下,然后通过文件的编码格式知道该如何去解码文件
  7. 文件解码成功后会正式开始渲染流程,先会根据 HTML 构建 DOM 树,有 CSS 的话会去构建 CSSOM 树。如果遇到 script 标签的话,会判断是否存在 async 或者 defer ,前者会并行进行下载并执行 JS,后者会先下载文件,然后等待 HTML 解析完成后顺序执行,如果以上都没有,就会阻塞住渲染流程直到 JS 执行完毕。遇到文件下载的会去下载文件,这里如果使用 HTTP 2.0 协议的话会极大的提高多图的下载效率。
  8. 初始的 HTML 被完全加载和解析后会触发 DOMContentLoaded 事件
  9. CSSOM 树和 DOM 树构建完成后会开始生成 Render 树,这一步就是确定页面元素的布局、样式等等诸多方面的东西
  10. 在生成 Render 树的过程中,浏览器就开始调用 GPU 绘制,合成图层,将内容显示在屏幕上了

HTTPS

HTTPS 还是通过了 HTTP 来传输信息,但是信息通过 TLS 协议进行了加密。

TLS

在 TLS 中使用了两种加密技术,分别为:对称加密和非对称加密。

对称加密:

对称加密就是两边拥有相同的秘钥,两边都知道如何将密文加密解密。

非对称加密:

有公钥私钥之分,公钥所有人都可以知道,可以将数据用公钥加密,但是将数据解密必须使用私钥解密,私钥只有分发公钥的一方才知道。

Socket 连接与 HTTP 连接的联系与区别(需了解)

由于通常情况下 Socket 连接就是 TCP 连接,因此 Socket 连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。

而 HTTP 连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是 Socket 连接,服务器就可以直接将数据传送给客户端;若双方建立的是 HTTP 连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

说一下 TCP 三次握手和四次挥手

HTTP 2.0(TO Learn)

原文地址:https://www.cnblogs.com/lemonib/p/10085885.html

时间: 2024-08-01 15:47:53

去面试吧网络问题的相关文章

《百面机器学习算法工程师带你去面试》PDF版+epub版

下载:https://pan.baidu.com/s/1DgV5JxWZgyQBKd7wkMXmWw <百面机器学习算法工程师带你去面试>高清PDF版,392页,带书签目录,文字可以复制: <百面机器学习算法工程师带你去面试>高清epub版,101页,带书签目录,文字可以复制. 本书作为AI类书籍知识点非常全面,但在一些章节比如分类模型.神经网络.强化学习等,领域内知识体系展开的不是很详细深入.其实作为面试类书籍,读的时候应该以一种查漏补缺的方式去看,看到一个问题想一想自己这个知识

学生自学Python去面试,月薪为何仅3K?面试官问题解析!

很多人认为Python语言简单(实际真的那么简单吗?语法简洁不代表容易学),都去自学Python编程语言,然后寻思出去找一份好的工作,其中学生居多.所以这套面试题我随机例举了几个罢了,文末有提示. 一般面试官见到初入社会的学生,他不会问你多少年的开发经验,最多他只会提你是自学还是系统学,熟悉哪些框架?所提的面试题也会相对简单,然而薪资方面也会大幅度降低,这是人之常情. 大型企业的面试题总会出一些新花样,来表示它们的与众不同之处.似是而非,感觉很容易,实际上你确实答不出来!这就是他们想要的效果,他

我去面试没带简历,你让我走人?

前言大家好,我是程序员大宇. 在职场上,很多人在面试时都会很紧张,最主要是把面试看得太重了,又或者是面试官给自己的压力太大了.但其实越是有水平的HR,他们反而越好说话,即使对求职者不太满意,也会很客气的和他们交流.所以说从面试官的素质,可以看出来公司的整体水平还是有道理的. 1.今天的话题:面试的时候,你要不要带简历?希望能够认真读完! 这个问题是之前有一位读者问过:大宇哥,我明天要去一家公司面试,我要不要带简历?还有做笔试题要不要自己带笔? 这位同学是第一次参加社招面试,没有什么经验之谈,简单

Java面试15|网络

1.查看网络的统计信息: netstat -s 结果中显示统计信息,保护收发包,建立连接的数量 netstat -at 列出所有TCP端口 netstat -au 列出所有的UDP端口 netstat -aut 目前正在运行的TCP/UDP服务 netstat常用的参数如下: -s或–statistice 显示网络工作信息统计表. -t或–tcp 显示TCP传输协议的连线状况. -u或–udp 显示UDP传输协议的连线状况. -a或–all 显示所有连接中的Socket. -n或–numeric

在WINDOWS2008 Server 中创建NFS服务器,使用LINUX的MOUNT命令去加载网络盘

1.在WINDOWS服务器中创建NFS SERVER 首先,打开服务管理器,选择添加角色:     选中文件服务,下一步:     出现一个提示,不管它,继续下一步:     在接下来的页面中选中“网络文件系统服务”(NFS),下一步:     点击安装:     系统开始安装,大约需要几分钟:     安装完成,点击关闭:     这样,在Windows Server 2008 R2建立了NFS服务,然后选择一个分区,新建一个文件夹,比如NFS:     在文件夹上右键,属性,可以看到属性列表

一个四五年的Java开发程序员,该准备哪些去面试?

上周面试了一周,感触颇深,总结一下. 面试了公司大概有阿里,携程,爱奇艺,唯品会,途牛,bilibili,大众点评,阿里和爱奇艺是电话面试,其他现场面试. 首先,五年左右,应该算高级开发工程师,大部分面试不用去做题,背string和stringbuilder区别的,几乎都是底层和远离,分布式等.虽然一个程序员,在工作中大部分还是写流水代码,增删查改. 1 JVM 这个大公司基本都会问,内存模型,GC,jvm都有哪些区域?栈桢存了什么? 常用垃圾回收器哪些,特点?jvm性能调优,这些从周志明的jv

去面试之性能问题

1.网络传输性能优化 1.1.浏览器缓存 1.2.资源打包压缩 1.3.图片资源优化 1.4.网络传输性能检测工具--Page Speed 1.5.使用CDN 2.页面渲染性能优化 2.3.减少重排与重绘. 2.4.优化策略 (一)CSS属性读写分离:浏览器每次对元素样式进行读操作时,都必须进行一次重新渲染(重排 + 重绘),所以我们在使用JS对元素样式进行读写操作时,最好将两者分离开,先读后写,避免出现两者交叉使用的情况.最最最客观的解决方案,就是不用JS去操作元素样式,这也是我最推荐的. (

极客钱包-区块链技术与去中心化网络前瞻

在区块链的世界里,我们天天嚷嚷着去中心化.那到底什么是去中心化,它的核心又是啥?他又是如何改变生产关系的?今天,极客钱包就带大家一起来探讨区块链的去中心化及它的核心! 区块链是公开透明.不可篡改的账本,这是它最基本的含义.由于记账人不是中心化的主体,是通过一定的共识机制,比如PoW挖矿竞争记账,没有人可以控制账本.没人可以篡改账本.看似简单的去中心化账本,隐藏了巨大的能量. 据统计,今年各省市两会期间,越来越多的地×××府在报告中提到要发展区块链技术.区块链技术或许会成为今年全国两会期间另一个值

不想搞Java了,4年经验去面试10分钟结束,现在Java面试为何这么难

作为一名优秀的程序员,技术面试都是不可避免的一个环节,一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识. 如果你参加过一些大厂面试,肯定会遇到一些这样的问题: 1.看你项目都用的框架,熟悉Spring.mybatis等框架实现原理吗? 2. 看你上面有接触过消息中间件,负载均衡.RPC框架等技术吗,MySQL分库分表有做过吗? 3. 分布式架构设计,Redis分布式锁呢? 是不是看上去很难,是不是和自己准备的"题库"中的问题不一样?不知道从何处下手?如果你有这种感觉