基础复习doge

TCPS三次握手和四次挥手

在建立TCP连接时,需要通过三次握手来建立

  1. 客户端向服务端发送一个SYN
  2. 服务端接收到SYN后,向客户端发送一个SYN_ACK
  3. 客户端接收到SYN_ACK,再向服务端发送一个ACK

在断开TCP连接时,需要通过四次挥手来断开

  1. 客户端向服务端发送FIN
  2. 服务端接收到FIN后,向客户端发送ACK,表示我收到断开连接的请求,客户端你可以不发数据了,不过服务端这边可能还有数据要处理
  3. 服务端处理完所有数据后,向客户端发送FIN,表示服务端现在可以断开连接
  4. 客户端收到服务端的FIN,向服务端发送ACK,表示客户端也会断开连接了

浏览器发送一个请求到收到响应经历了哪些步骤

  1. 浏览器解析用户输入的URL,生成一个HTTP格式的请求
  2. 先根据URL域名从本地hosts文件查找是否有映射IP,如果没有就将域名发送发送给电脑所配置的DNS进行域名解析,得到IP地址
  3. 浏览器通过操作系统将请求通过四层网络协议发送出去
  4. 途中可能会经过各种路由器,交换器,最终到达服务器
  5. 服务器收到请求后,根据请求所指定的端口,将请求传递给绑定了该端口的应用程序,比如8080端口被tomcat占用
  6. tomcat接收到请求数据后,按照http协议的格式进行解析,解析得到所要访问的servlet
  7. 然后servlet来处理这个请求,如果是MVC中的DispatcherServlet,那么则会找到响应中的Controller中的方法,并执行该方法得到结果
  8. Tomcat得到响应结果后封装成HTTP响应的格式,并再次通过网络发送给浏览器所在的服务器
  9. 浏览器所在的服务器拿到结果后再传递给浏览器,浏览器则负责解析并渲染

零拷贝

零拷贝指的是应用程序在需要把内核中的一块区域数据转移到另一块区域时,不需要先复制到用户空间再转移到目标内核区域去了,而是直接实现转移。

通过transferTo()方法来完成内核之间的buffer的数据转移,省掉了数据的两次复制

布隆过滤器

布隆过滤器的原理是用bit数组+多哈希实现的一种概率性数据结构,用来快速判断一个元素是不是在集合中。插入元素时:元素经过多个哈希函数计算得到多个位置,这些位置的bit都置为1。而查询元素时,同样经过哈希得到多个位置,只要有一个位置是0,元素一定没有在,全是1也未必在,存在一定误判率,但不会放过不存在的数。

String StringBuffer StringBulider

String 是不可变的,底层的 char 数组被 final 修饰,一旦创建就定死在那了。每次拼接、替换都会生成新对象,原来那个不会变。

StringBuffer 和 StringBuilder 都是可变的,底层用一个可扩容的数组存字符。区别在于 StringBuffer 的方法都加了 synchronized,是线程安全的;StringBuilder 没加锁,单线程下性能更好。

相关推荐
NE_STOP6 小时前
MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
java
后端AI实验室11 小时前
用AI写代码,我差点把漏洞发上线:血泪总结的10个教训
java·ai
程序员清风13 小时前
小红书二面:Spring Boot的单例模式是如何实现的?
java·后端·面试
belhomme13 小时前
(面试题)Redis实现 IP 维度滑动窗口限流实践
java·面试
Be_Better13 小时前
学会与虚拟机对话---ASM
java
开源之眼16 小时前
《github star 加星 Taimili.com 艾米莉 》为什么Java里面,Service 层不直接返回 Result 对象?
java·后端·github
Maori31617 小时前
放弃 SDKMAN!在 Garuda Linux + Fish 环境下的优雅 Java 管理指南
java
用户9083246027317 小时前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
小王和八蛋17 小时前
DecimalFormat 与 BigDecimal
java·后端
beata17 小时前
Java基础-16:Java内置锁的四种状态及其转换机制详解-从无锁到重量级锁的进化与优化指南
java·后端