- 博客(122)
- 收藏
- 关注
原创 TCP 是用来解决什么问题?
TCP 工作在传输层,底层IP协议只提供无连接、尽力而为的报文交付,存在丢包、乱序、重复、网络拥塞、接收缓冲区溢出等问题。使用滑动窗口机制,接收方通过窗口大小告知发送方自身剩余缓冲区容量,防止发送方发送速率过快,造成接收端缓冲区溢出。将应用层的数据拆分成合适大小的TCP段,适配底层IP的MTU,向上层屏蔽底层网络分片细节。感知整个网络的拥塞状态,动态调整发送窗口,避免大量报文涌入网络,导致网络瘫痪。利用序列号识别重复收到的数据包,丢弃重复报文,避免上层应用收到重复数据。的面向连接字节流传输。
2026-10-17 21:16:36
224
原创 VMware Workstation Pro 卸载失败:安装向导提前结束、错误 1603 的排查与解决
环境:Windows 11、VMware Workstation Pro 17.6.4。本文记录一次真实卸载故障:通过日志定位到虚拟网络注册表权限异常,修复后成功卸载。适用范围:卸载日志停在,且 VMware 日志出现权限异常。其他原因引起的 1603,需要另行排查。
2026-10-17 20:54:32
292
原创 HTTP 请求包含哪些内容,请求头和请求体有哪些类型?
请求头是一堆键值对,描述请求的附加信息,比如Host、User‑Agent、Authorization、Cookie,最重要的是Content‑Type,用来标识请求体的数据格式。xml格式数据,现在互联网项目很少使用,老系统、第三方对接偶尔见到。请求体存放业务数据,GET一般没有请求体,POST/PUT使用。HTTP请求报文分为四部分:请求行、请求头、空行、请求体。请求行包含请求方法、访问路径、HTTP版本。键值对形式,补充请求元信息,空行用来分隔请求头和请求体。分隔请求头和请求体,固定。
2026-09-03 00:17:15
355
原创 谈谈你了解的最常见的几种设计模式,说说他们的应用场景
我平时接触比较多的分为创建、结构、行为三类。创建型最常用单例、工厂、建造者,主要解决对象创建问题;单例保证全局唯一实例,工厂封装对象创建逻辑,建造者用于构建复杂多属性对象。结构型常用代理、适配器、装饰器;代理用于功能增强,SpringAOP就是动态代理;适配器用来兼容不同接口;装饰器动态扩展对象能力。行为型里面策略、模板方法、责任链、观察者用得最多。策略模式用来消除if‑else,动态切换算法;模板方法父类固定流程骨架,子类实现可变步骤;责任链适合一层层校验处理;观察者实现事件的发布订阅解耦。
2026-09-03 00:12:50
235
原创 什么是策略模式?一般用在什么场景?
策略模式属于。把抽成独立的策略类,实现同一个公共接口;上下文类持有策略对象,业务逻辑可以动态切换,。,避免大量。
2026-09-01 20:29:20
424
原创 单例模式有哪几种实现?如何保证线程安全?
饿汉式 / 静态内部类 / 枚举:依靠JVM类加载机制保证线程安全,不需要手动加锁。懒汉同步方法:依靠方法锁,性能差。DCL双重检查锁volatile,既要锁,又要禁止指令重排。反射可以暴力调用私有构造器破坏单例;枚举天然规避这个问题。序列化/反序列化也会破坏普通单例,枚举同样天然解决。枚举静态内部类DCL双重检查锁。
2026-09-01 20:27:58
349
原创 Redis 中的 Big Key 问题是什么?如何解决?
BigKey是value过大或集合元素过多;危害:阻塞主线程、网络IO高、主从延迟、内存碎片。排查优先离线分析,不建议高峰期执行--bigkeys。优先业务拆分大key;删除用unlink,集合用scan分批删除。集合数据分批读取,不在Redis堆积海量历史数据。注意区分大key和热点key,二者问题不一样。
2026-08-31 19:40:03
288
原创 Redis 集群的实现原理是什么?
16384哈希槽,CRC16取模定位key。元数据同步靠Gossip协议,无中心节点。扩容缩容移动哈希槽,迁移过程有MOVED/ASK重定向。主从架构,Gossip投票完成故障转移;主从全部宕机集群down。多key命令受槽位限制,可以使用哈希标签强制落到同一个槽。客户端最好用智能客户端缓存槽映射,减少重定向开销。面试对比:Redis Cluster vs 哨兵SentinelSentinel:不做数据分片,全量数据存一套主从,只负责高可用故障转移。
2026-08-31 19:39:29
307
原创 如何解决 Redis 中的热点 key 问题?
热点key本质是流量集中在单个Redis节点;优先区分是读热点还是写热点。读热点优先:本地缓存 > 读写分离 > key拆分写热点优先:key拆分 + 业务层削峰批量更新配套监控提前发现热点,不要等线上故障才处理。面试加分坑:集群模式下,读写分离治标不治本,热点key的槽位固定,主从都落在同一组机器;key拆分是集群下根治热点key的方案。
2026-08-31 19:38:54
369
原创 Redis 数据过期后的删除策略是什么?
惰性删除:访问的时候才删过期key,节省CPU,但内存可能浪费。定期删除:后台随机抽样清理过期key,不能清理全部。两者结合仍有残留,内存超限触发内存淘汰策略释放内存。线上一般设置maxmemory,搭配。
2026-08-30 17:12:47
395
原创 Redis 主从复制的实现原理是什么?
第一次同步走PSYNC全量复制:生成RDB传输 + 积压缓冲区补发增量命令。短暂断线重连优先走部分复制,依赖runid、offset、复制积压缓冲区。正常运行阶段,master持续异步传播写命令给从节点。主从是异步,存在主从延迟,有数据丢失风险。补充:主从没有故障转移能力,故障自动切换需要搭配Redis Sentinel哨兵。
2026-08-30 17:12:00
310
原创 Redis 的持久化机制有哪些?
RDB:全量快照,bgsave子进程,恢复快,存在数据丢失风险;AOF:记录写命令日志,三种刷盘策略,靠AOF重写压缩文件;4.0+支持混合持久化,线上最推荐;两种持久化都会fork子进程,大数据量要注意fork带来的短暂阻塞。
2026-08-30 17:11:20
427
原创 Redis 实现分布式锁时可能遇到的问题有哪些?
手写Redis分布式锁很难做到完备,会踩原子性、误删、锁过期、主从丢锁、不可重入、自旋风暴这些坑;开发中优先直接使用Redisson,不要自己实现。如果业务对互斥要求极高,不建议用Redis分布式锁。
2026-08-29 22:44:52
234
原创 Redis 的 Red Lock 是什么?你了解吗?
RedLock想用多节点多数派解决单机主从切换丢锁,但本身依赖系统时间,有安全漏洞,运维成本高;工程实践很少落地,强一致性场景优先用ZK/Etcd。面试记忆点:5个独立主节点、半数成功、时钟漂移缺陷、不能解决客户端GC停顿、线上很少用。
2026-08-29 22:44:11
261
原创 Redis 中如何实现分布式锁?
加锁用原子命令,设置唯一value;释放锁必须Lua脚本校验归属,不能直接del;业务超时要看门狗续期,避免锁提前过期;单机主从切换会丢锁,Redlock理论解决,工程优先用Redisson。原子加锁、唯一标识、Lua释放、看门狗续期、主从丢失锁风险。
2026-08-29 22:43:29
212
原创 Redis 的 hash 是什么?
Redis Hash是field‑value的哈希结构,底层小数据用ziplist压缩列表,大数据转为dict哈希表;适合存储对象,可以单独修改某个字段,但不支持field级别的过期。口述简短版:Redis Hash类似HashMap,结构是key下面多个field‑value。数据量小的时候用压缩列表节省内存,数据多切换到哈希表。适合存用户这种对象,可以单独更新某一个字段,不用序列化整个对象。但是注意,它只能给整个key设置过期,不能单独给某个field过期。
2026-08-27 17:58:59
177
原创 Redis 中跳表的实现原理是什么?
跳表在有序链表基础上建立多层随机索引,空间换时间,把查找从O(n)降到O(logn);Redis zset的跳表是双向跳表,层数随机最高32层,搭配dict哈希表一起工作,支持排序、范围、反向遍历。口述简短版:跳表本质就是给有序链表建多层索引。最底层是完整有序链表,上层是索引节点。查找从最高层开始,目标太大就下沉下一层,快速缩小查找范围。Redis zset用双向跳表,节点层数随机生成,时间复杂度O(logn),同时搭配哈希表做去重,很适合排行榜、范围查询。
2026-08-27 17:58:06
207
原创 为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
早期单线程是为了规避锁、上下文切换,业务大多瓶颈在网络而非CPU;6.0引入IO多线程,只是分担socket读写的CPU开销,核心命令执行仍然保持单线程,保证数据安全,提升网络吞吐,不能解决CPU密集命令阻塞问题。口述简短版:Redis早期命令单线程,主要是为了规避多线程锁竞争和上下文切换,而且Redis大多是内存操作,瓶颈不在CPU。
2026-08-26 21:07:13
352
原创 Redis 为什么这么快?
第二采用IO多路复用,单线程处理命令,省去多线程锁竞争和上下文切换;底层不是简单API封装,重新实现SDS、quicklist、skiplist、dict等高效数据结构,时间复杂度很低。使用epoll(Linux)IO多路复用模型,一个线程可以监听大量客户端socket连接,不用为每个连接创建线程,处理大量并发连接。注意:网络IO、持久化、删除大key这些是有后台子线程处理,不是全部单线程。所有数据主要放在内存,不需要磁盘IO,内存读写速度远高于磁盘。,解决网络IO瓶颈,不是解决CPU计算。
2026-08-26 21:05:39
463
原创 Redis 中常见的数据类型有哪些?
不同数据类型底层实现不一样,要结合业务场景选型;不要全部都用String序列化对象,Hash适合对象局部更新,ZSet适合排行榜,HyperLogLog适合大数据量去重统计。
2026-08-26 21:05:01
335
原创 如何处理 MySQL 的主从同步延迟?
主从延迟根源是从库回放跟不上主库生成binlog;优先开启并行复制,业务拆分大事务,binlog设为ROW;从库减轻报表大查询压力;数据库层面只能缓解,无法彻底消除延迟;业务做兜底,强一致性读直接访问主库。
2026-08-25 11:54:28
353
原创 什么是 MySQL 的主从同步机制?它是如何实现的?
MySQL主从复制依靠binlog实现;主库dump线程推送binlog,从库IO线程存中继日志,SQL线程回放日志;分为异步、半同步;线上binlog一般用ROW格式;痛点是主从延迟,大事务会加剧延迟。
2026-08-25 11:53:56
522
原创 MySQL 中如何解决深度分页的问题?
深度分页根源是大offset会扫描大量无效数据;优先游标分页记住上一页最后一条主键;需要跳页就用延迟关联;业务层面尽量不支持跳转到很深页码;大表避免count统计总数量。
2026-08-25 11:53:19
283
原创 MySQL 中如果发生死锁应该如何解决?
发生死锁InnoDB会自动回滚代价小的事务;应用层捕获异常有限重试;根治手段:统一更新记录顺序、缩小事务、避免长事务;RR隔离级别间隙锁容易诱发死锁,可评估业务是否切换RC;通过。
2026-08-24 09:14:33
339
原创 MySQL 事务的二阶段提交是什么?
两阶段提交分为Prepare和Commit两个阶段;先写redo log标记prepare,再写binlog,最后修改redo log为commit;宕机后依靠redo prepare状态+binlog判断事务提交还是回滚,核心目的保证崩溃恢复与主从复制的数据一致性。
2026-08-24 09:13:58
313
原创 MySQL 中有哪些锁类型?
粒度上分表锁、行锁、意向锁;RR下有间隙锁、临键锁;还有MDL元数据锁;思想上分悲观锁、乐观锁。RC没有间隙锁,RR靠临键锁解决幻读。
2026-08-24 09:13:27
409
原创 MySQL 中的事务隔离级别有哪些?
一共4种隔离级别:读未提交、读已提交RC、可重复读RR、串行化;MySQL默认RR;RC每次查询生成ReadView,RR事务首次查询生成ReadView;InnoDB在RR下依靠MVCC+临键锁解决幻读;隔离级别越高一致性越好,并发性能越低。
2026-08-23 00:11:11
250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅