自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 百万数据导入性能对比

100万条数据。

2025-10-31 18:41:51 440

原创 JDK动态代理与CGLIB区别详解

Spring 会根据目标类是否有接口自动选择合适的代理方式。(Spring Boot 已内置,无需手动引入);Spring 在检测到目标类无接口时,会。,通过生成子类实现代理;基于 JDK 自带的。

2025-10-30 18:35:54 149

原创 描述一下打开百度首页后发生的网络过程

本地 DNS 服务器递归地通过根 DNS、.com 顶级域 DNS、baidu.com 权威 DNS 查询,最终返回百度服务器的 IP。:依次查找浏览器缓存、系统 hosts 文件、操作系统 DNS 缓存。若命中,直接获得 IP 地址。浏览器解析 HTML,加载资源,最终渲染出百度首页。(通常是 200 OK + HTML 内容)。,协商加密参数、验证证书,建立安全加密通道。,提取协议(HTTPS)、主机名(,通过三次握手完成可靠连接。,含 Host 头)。

2025-10-29 16:52:14 436

原创 TCP拥塞控制:从慢启动到快速恢复

初始拥塞窗口(cwnd)通常设为 1 MSS(最大报文段大小),每收到一个 ACK,cwnd 增加 1 MSS。这种指数增长模式(cwnd = cwnd * 2 每 RTT)快速探测可用带宽,直至达到慢启动阈值(ssthresh)或检测到拥塞。当 cwnd ≥ ssthresh 时,进入线性增长阶段。每个 RTT 内,cwnd 增加 1 MSS(即每 ACK 增加 1/cwnd MSS),避免过度占用网络资源。收到新数据的 ACK 后,退出快速恢复,将 cwnd 设为 ssthresh,回到拥塞避免阶段。

2025-10-29 16:45:23 323

原创 TCP和UDP区别是什么?

TCP 和 UDP 的主要区别:

2025-10-28 12:03:19 119

原创 小学生都能懂的 Java IO流:用代码写日记

现在让我们实现一个简单日记本项目,主要功能就是将想说的话写入一个文件,并且我们可以在项目中找到这个txt文件。= 水从外面流进你家(程序)→。= 水从你家流出去 →。

2025-10-24 21:48:32 194

原创 为什么四次挥手之后要等2MSL?

等待 2MSL 有两个目的:TIME_WAITLAST_ACK。

2025-10-24 20:16:25 140

原创 TCP四次挥手全流程解析

状态(持续 2MSL,即两倍最大报文段生存时间),确保服务端收到 ACK。服务端收到 ACK 后立即关闭连接(此时服务端仍可发送未传输完的数据,客户端收到 ACK 后进入。服务端完成数据发送后,发送 FIN 段(FIN=1),进入。客户端发送 FIN 段(FIN=1),进入。状态,表示不再发送数据,但仍可接收数据。服务端收到 FIN 后回复 ACK,进入。客户端收到 FIN 后回复 ACK,进入。客户端等待 2MSL 后也关闭连接。状态,等待最后的 ACK 确认。

2025-10-24 17:26:48 234

原创 SYN攻击防御:5大高效解决方案

当队列满时,服务端通过加密算法生成SYN Cookie(包含序列号、时间戳等信息),而非占用队列资源。客户端返回ACK时验证Cookie有效性,合法则建立连接。此方法彻底规避队列溢出问题,但会损失部分TCP特性(如选择性ACK)。前置反向代理(如Nginx)承担SYN负载,后端服务限制直连。的值,可以扩大半连接队列的容量。在高并发场景下,较大的队列能缓解瞬时SYN洪峰冲击,但需注意内存消耗。(默认5次)减少SYN+ACK重传次数,例如设为2次。快速释放未响应连接,降低半连接队列驻留时间。

2025-10-24 12:02:54 282

原创 TCP三次握手揭秘:为何必须三次?

TCP 三次握手是建立可靠连接的必要过程,主要原因有三:(最核心原因)SYN+ACK。

2025-10-23 19:06:19 193

原创 TCP三次握手:连接建立的关键步骤

TCP 三次握手是建立可靠连接的必要过程,目的是。

2025-10-22 16:40:33 181

原创 JWT与Session:集群架构鉴权方案对决

Session 数据存储在单台服务器的本地内存或磁盘中,导致在集群环境下出现负载均衡分配请求到不同服务器时无法识别用户身份。虽然可以通过 Redis 等共享存储解决,但引入了额外的复杂性和外部依赖。服务端通过相同密钥验证签名,并解析 payload 获取用户信息,无需查询数据库或缓存。的 Header 携带,服务端仅需验证签名即可信任令牌内容,无需依赖共享存储。、角色)和签名机制实现无状态验证。客户端在登录后获得 JWT,后续请求通过。JWT 通过自包含的用户信息(如。

2025-10-21 19:36:20 238

原创 后端商品发布流程优化指南

【代码】后端商品发布流程优化指南。

2025-10-20 19:29:25 544

原创 cookie和session区别

【代码】cookie和session区别。

2025-10-20 16:57:33 585

原创 DNS解析全流程揭秘

【代码】DNS解析全流程揭秘。

2025-10-20 11:27:05 482

原创 TCP连接关闭与异常处理机制

正常关闭close()shutdown()异常中断。

2025-10-20 11:01:27 185

原创 视频上传到播放全流程解析

Redis队列REDIS_KEY_QUEUE_TRANSFER接收转码任务,ExecuteQueueTask.consumeTransferFileQueue监听队列并调用VideoInfoPostService.transferVideoFile。播放行为数据写入REDIS_KEY_QUEUE_VIDEO_PLAY队列,由ExecuteQueueTask.consumeVideoPlayQueue异步处理。系统生成唯一uploadId并保存预上传信息至Redis缓存,包括文件大小、分片数量等元数据。

2025-10-19 21:07:30 340

原创 Redis实时在线人数统计方案详解

具体实现上,当用户进入视频页面时,前端传递 videoId 和 deviceId 参数,后端会在Redis中创建用户播放标识键 video:play:user:{videoId}:{deviceId} 并设置8秒过期时间,同时通过原子性的 incrementex 操作增加视频在线总数键 video:play:online:{videoId} 的计数并设置10秒过期时间(比用户标识键略长以确保正确清理)。前端每10秒发送心跳请求来维持在线状态,后端接收到心跳后会刷新两个键的过期时间并返回当前在线人数。

2025-10-17 20:59:03 477

原创 HTTP请求与响应报文全解析

请求头部:包含关于请求的附加信息,如Host、User-Agent、Content-Type等。响应头部:包含关于响应的附加信息,如Content-Type、Content-Length等。请求体:可选,包含请求的数据,通常用于POST请求等需要传输数据的情况。请求行:包含请求方法、请求目标(URL或URI)和HTTP协议版本。响应体:包含响应的数据,通常是服务器返回的HTML、JSON等内容。空行:请求头部和请求体之间用空行分隔。空行:响应头部和响应体之间用空行分隔。

2025-10-17 11:42:16 146

原创 OSI 模型

OSI 模型从上到下共七层:

2025-10-17 11:09:24 108

原创 Redis主从同步\哨兵机制\分片集群全解析

PSYNC?-1?replid?bgsave。

2025-10-15 12:48:11 748

原创 分布式锁:Redisson详解

在超卖问题中,你可能想用synchronized来加锁,在单服务下面,使用synchronized可以保证只有一个线程获取锁并操作。可是在集群环境中,会拆分为3个微服务A B C,当只有最后一张票,A B C都觉得自己能抢卷,最后会导致超卖问题因此,我们需要把锁状态放到所有实例共享的外部系统,即分布式锁。

2025-10-15 11:26:30 515

原创 MySQL与Redis双写一致性:延迟双删详解

删除后,等待新的读操作来时,就会进行更新最新的数据。实际上,延迟时间就是预估mysql更新的时间,保证读操作得到的是最新的数据。读操作:缓存命中,直接返回;缓存没有命中,在mysql中查询,写入缓存,设定超时时间。写操作:删除缓存,更新mysql,延迟一段时间再次删除缓存。双写一致性就是保证mysql和redis的数据是同步的。为了防止老数据再次被写入缓存中。

2025-10-14 17:54:42 75

原创 如果一个表有1亿条数据,但每天只新增1万条,查询都是按时间范围查最近7天的,该怎么优化?

查询最近7天的数据,当天时间和7天前的时间直接使用mysql内置的函数计算。

2025-10-13 10:46:24 606

原创 索引失效常见场景

索引失效的常见情况包括:数据类型不一致导致隐式转换失效;违反复合索引最左前缀原则;范围查询阻断右侧列索引;模糊查询使用前导通配符;索引列进行运算或函数操作。优化建议:保持数据类型一致,合理设计复合索引顺序,将范围查询列靠后放置,优先使用右匹配模糊查询,避免在索引列上直接运算。通过调整查询条件与索引设计,可有效提升查询效率。

2025-10-13 10:27:34 151

原创 强软弱虚 引用的区别

强引用对象在 GC Roots 不可达时回收软引用在内存不足时回收,适合缓存弱引用在下次 GC 就回收,用于防内存泄漏虚引用不能获取对象,只在回收时通过队列通知。

2025-10-12 16:47:30 157

原创 JVM分代回收

Java堆内存划分为新生代(1/3)和老年代(2/3),新生代内部Eden与Survivor区比例为8:1:1。新对象分配在Eden区,当Eden满时触发Minor GC,存活对象复制到Survivor区,15次GC后晋升老年代。GC类型包括:Minor GC(仅新生代,快速)、Mixed GC(G1特有)和Full GC(全堆回收,应避免)。注意"Major GC"术语定义不统一,建议谨慎使用。Full GC会回收整个堆和方法区,停顿时间长,需优化避免。

2025-10-11 15:20:47 154

原创 关于b站老罗b站配置问题总结(个人经历)

es需要配置java11,由于系统变量有JAVA_HOME,导致es使用本地的java8,运行无法成功。之前跟黑马做了苍穹外卖的项目,使用了cpolar,占用了9200端口,导致es无法启动成功。1.删除cpolar,停止cpolar任务(我是这么做的)2.修改配置文件(没弄好,还是会访问本地的java8)1.删除JAVA_HOME(我是这么做的)打开Navicat就行了,我也不知道为什么。2.修改cpolar端口号(没干好)2.9200端口被占用问题。1.es的jdk配置问题。3.sql配置错误问题。

2025-03-19 14:51:12 238

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除