基础复习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 没加锁,单线程下性能更好。

相关推荐
蜗牛互联网3 小时前
GPT-6 与 Intelligent UI:从回答到可审计操作的产品迁移
java·人工智能·后端
SL_staff4 小时前
运维救火实录:钉钉考勤API变更引发工资计算异常,我们用JVS-Logic可视化逻辑引擎实现分钟级热修复
java·mysql·全栈
SunnyDays10114 小时前
Java 查找并高亮 Word 文字:精确查找及正则表达式模糊查找
java·查找文字·word 文档·高亮文字·正则匹配查找·模糊查找
geats人山人海4 小时前
java 4继承
java·开发语言
众链网络5 小时前
Agent 的成本大头不在“写“,在“判断“:拆解专用决策模型的三层架构
java·开发语言·人工智能·微服务
周小董5 小时前
[1371]jdk管理工具
java·开发语言
青春逝如流水5 小时前
Java 中线程的创建方式:从基础到现代
java·开发语言·多线程·ai文章
Peregrine96 小时前
C++ - > 类和对象
java·c++·算法
2501_933923256 小时前
SpringCloud组件:Eureka服务注册与发现
java·开发语言·后端·spring cloud·eureka
Wang's Blog6 小时前
Java 中间件之 RabbitMQ 快速入门: SpringAMQP 消息转换器
java·中间件·java-rabbitmq