- 博客(68)
- 收藏
- 关注
原创 Tomcat架构设计
Servlet规范中规定了一个http请求到来的执行处理流程:对应的服务器容器会接收到对应的Http请求,然后解析该请求,创建对应的Servlet实例,调用对应init方法完成初始化,把请求相关信息封装为HttpServletRequest对象来调用Servlet的service方法处理请求,最后通过HttpServletResponse分装响应的信息交给容器,响应给客户端。容器的作用是处理Connector接收进来的请求,并产生对应的响应,Engin,Host,Context都是容器父子关系。
2023-06-19 15:57:53
1099
原创 JVM知识
G1收集器,java堆的内存布局与其他收集器有很大差别,它将整个java堆划分为多个大小相等的独立区域(Region)2048个,虽然保留新生代和老年代的概念,但新生代和老年代不再是物理隔离的。Serial Old收集器是Serial收集器的老年代版本,是一个单线程收集器,不同的采用标记-整理算法,运行过程和Serial收集器一样。使用复制算法,并行的多线程收集器。由于整个过程中,并发标记和并发清除,收集器线程可以与用户线程一起工作,所以总体上CMS收集器的内存回收过程是与用户线程一起并发地执行的。
2023-05-10 16:46:27
643
原创 微服务知识3
Serlvet是非线程安全的,zull使用RequestContext来在过滤器之前传递数据,数据存于每个request的ThreadLocal,包含请求路由到哪里,错误,HtttpServletRequest,HttpServletResponse等这些数据都存储与RequestContext中。请求进入过滤器,然后进入ZullFilter Runner中会选择一个filter进行调用,这里面有前置路由过滤器,路由中过滤器,后置路由过滤器。如果谓词为真,则说明请求的URL和配置的路由匹配。
2023-05-05 14:20:15
716
原创 微服务知识2
同时在协调者和参与者中都引入超时机制,当参与者未收到协调者的commit请求后,会对本地事务进行abort,不会一直阻塞等待,解决了2PC的单点故障问题,但仍未从根本上解决数据一致性的问题。数据不一致:两阶段提交协议虽然为分布式数据强一致性所设计,但仍然存在数据不一致性的可能,如在第二阶段中,假设协调者发出了事务commit通知,但因网络问题该通知仅被一部分参与者收到并执行了commit操作,其余的参与者则因没有收到通知一直处于阻塞状态,产生了数据不一致性。如果全部响应YES则进入下一个阶段。
2023-05-04 15:18:53
388
原创 微服务知识
客户端轮询向服务端发出一个长连接请求,这个长连接30s超时,服务端收到客户端请求会先判断当前是否有配置更新,有则立即返回如果没有服务端会将这个请求hold29.5s加入队列,最后0.5s再次检测配置文件无论有无更新都进行正常返回。通过维护一个单位时间内的计数值,每当一个请求通过将计数值加1,当计数值超过预先设定的阈值时,就拒绝单位时间内的其他请求。将单位时间分成多格(格数越多,流量过度越平滑),每经过一个格的时间,就将窗口向前移动一格,并将经过的格子丢弃进行一个窗口的计数。
2023-04-26 16:52:57
825
原创 Mysql知识
最左意味以最左边的索引字段为条件基础进行的索引查询,如果条件中不带最左边的字段则联合索引不会生效,反之如果多个条件会在最左边的字段索引查询基础后再进行第二个字段条件的索引查询。在辅助索引里,不管单列索引还是联合索引,如果select的数据列只用从索引中就能够取得,不必从数据区中读取,这时候使用的索引就叫覆盖索引,避免了回表。非主键索引,先通过索引找到主键索引的键值,再通过主键值查出索引里面没有的数据,比基于主键索引的查询多扫描了一颗索引树,这个过程叫做回表。3:频繁更新的值,不要作为主键或者索引:页分裂。
2023-04-24 18:59:07
370
原创 MySql知识
InnoDB引入了一个日志文件,redo log(重做日志),把所有对内存数据的修改操作写入日志文件,如果服务器出问题了,就从这个日志文件里面读取数据,恢复数据---从而实现事务的持久性。binlog以事件的形式记录了所有的DDL和DML语句(记录的是操作不是数据值,属于逻辑日志),用来做主从复制和数据恢复。缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。redo log的大小是固定的,前面的内容会被覆盖,所有不能用于数据回滚/数据恢复。
2023-04-23 16:11:20
432
原创 HTTP请求知识
一般情况下,一旦服务器向客户端返回了请求数据,它就要关闭TCP连接,然后如果客户端或者服务器在其头信息加入了Connection:keep-alive,TCP连接在发送后将仍然保持打开状态,于是客户端可以继续通过相同的连接发送请求。在HTTP工作开始之前,客户端首先要通过网络与服务器建立连接,HTTP连接是通过TCP来完成的。2:客户端存根:远程方法在本地模拟对象,一样的也有方法名,方法参数client stub接收到调用后负责将方法名,方法参数等包装,并将包装后的信息通过网络发送到服务端。
2023-04-21 15:09:08
425
原创 TCP知识
TCP确保数据在网络上正确地传输,确保数据的可靠性和完整性,它还能够控制数据的流量和拥塞。UDP不保证数据的可靠性或完整性,但它更快速,更简单,适用于对数据传输延迟较为敏感的应用程序。OSC(Open System Interconnect)采用分层的结构化技术,共分七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。物理层:物理层是OSI模型的第一层,定义了在网络上传输比特流的方式。会话层:会话层是OSI模型的第五层,定义了如何在通信双方之间建立,管理和终止会话(Session)
2023-04-20 16:19:52
400
原创 JVM知识
1:虚拟机栈是一个线程执行的区域,保存着一个线程中方法的调用状态。一个java线程的运行状态由一个虚拟机栈来保存,所以虚拟机栈肯定是线程私有的,独有的随着线程的创建而创建。2:每一个被线程执行的方法,为该栈中的栈帧,即每个方法对应一个栈帧。虚拟机把class文件加载到内存,并对数据进行校验,转换解析和初始化,形成虚拟机可以直接使用的Java类型,即java.lang.class。解析动作主要针对类或接口,字段,类方法,接口方法,方法类型,方法句柄和调用限定符7类符号引用进行。
2023-04-19 11:40:05
171
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人