- 博客(75)
- 资源 (1)
- 收藏
- 关注
原创 如何优化一条sql
优化策略改动影响推荐顺序缓存 + 读写分离 + 冷热分离极低✅ 第一阶段异步化 + 合表聚合低✅ 第二阶段分库分表 + 分布式数据库高❗第三阶段,慎重引入。
2025-06-12 13:07:33
611
原创 本地回环 vs Unix 域套接字
本地回环是在“本地模拟网络”,而 Unix 域套接字是“内核内部直传”。所以在单机进程间通信时,Unix 域套接字显著更快。
2025-06-11 14:54:46
384
原创 手写消息中间件
持久化 = 将容器中的内存数据,同步到磁盘,确保宕机后可恢复。常见持久化方案:定时刷盘每次写入同步刷盘(低效但强一致)Write-Ahead-Log(WAL)模式分段写入日志文件(segment)✅中间件的本质是:容器结构 + 协议传输 + 策略保障✅容器只是数据的存放,协议决定了它的效率、稳定性、可靠性✅你要“手搓”中间件,搓的是协议,调的是容错,玩的是数据流动策略。
2025-06-11 14:47:35
278
原创 Nacos的手写笔记
功能模块关键数据结构线程安全策略接口路径注册中心服务发现同上同上注销服务同上同上配置中心/config/*(可扩展)如果你愿意继续手搓,也可以加上:服务实例健康检查(心跳机制)实例过期剔除(定时任务)服务权重与路由策略配置中心通知机制(监听器 / LongPolling)namespace└── group"dev"
2025-06-11 11:51:21
736
原创 Lombok @Data 与 Jackson 字段反序列化规则不一致
建议项内容字段命名password保持规范DTO、VO、PO 都遵循 JavaBean 标准避免问题不要随意首字母大写,Jackson/Lombok 默认行为不兼容统一工具@Data搭配时需特别注意字段名规范。
2025-06-09 16:45:24
233
原创 分布式系统一致性模型笔记
模型是否保证可读是否保证实时最新是否保证顺序适用场景强一致性✅ 一定✅ 一定✅ 一定金融交易、Zookeeper顺序一致性✅ 一定❌ 不一定✅ 一定多线程/多副本模型因果一致性✅ 一定❌ 不一定✅ 部分(有因果)社交平台会话一致性✅ 一定✅ 会话内❌移动应用单调读一致性✅ 一定❌ 不一定✅ 趋势新弱一致缓存最终一致性✅ 最终❌ 不一定❌DNS、Dynamo弱一致性❌ 不一定❌ 不一定❌缓存系统、CDN。
2025-06-09 14:03:05
441
原创 ID 生成方案深度笔记
目标推荐方案分布式趋势递增Snowflake 或 Leaf Segment不可预测性对外 ID 加密(Hashids)或 token 映射多节点部署使用统一时间服务或容忍回拨策略查询权限控制所有查询都要带 userId,并校验数据归属性能+安全Leaf Segment + ID 加密 是性能与安全的较优结合方案无论你选哪种发号策略,ID 本身不能承载权限语义。只有结合权限校验 + 加密映射,才能真正保障系统安全。
2025-06-09 10:38:51
878
原创 Nacos笔记
由于写操作较少,且读取操作大多为本地容器的内存操作,因此无需引入额外的缓存机制来提升性能。的核心思想是在数据修改时,首先创建数据的副本,然后在副本上进行修改,直到修改完成后,再将原数据指向新的副本。由于数据是在本地容器中进行管理,Nacos 能够避免缓存层的额外开销,如缓存同步、缓存一致性和过期策略等。:Nacos 提供集中化配置管理,可以管理多个应用的配置,支持动态刷新配置,保证各个应用的一致性。:通过本地容器直接管理数据,避免了缓存带来的复杂性和一致性问题,保证了数据的实时一致性。
2025-06-06 17:27:27
542
原创 对一部分框架的看法
(如Spring Boot、Spring Cloud)通过对Spring框架的封装,简化了开发,尤其是在微服务架构下提供了自动化配置、服务治理等功能。(如Kafka、RabbitMQ)是基于网络通信框架(如Netty)进行封装,提供了更高层次的功能,如消息队列、持久化、消息确认等。:Nacos不仅是配置中心,也是服务注册与发现中心,类似Spring的容器化管理,提供了动态配置、服务发现等功能。:对Netty进行更高层次的封装,提供消息传递、持久化、流量控制等功能,适用于分布式系统中的解耦与高吞吐量需求。
2025-06-06 17:19:17
270
原创 幂等性的实现
命令实现,避免了加锁带来的性能瓶颈,同时能够确保高并发环境下只处理一次消息。在消息处理中,确保幂等性意味着即使消息被重复消费,系统也不会重复处理。在极端高并发的情况下,如果某些消息的处理时间较长,可能会存在一些延迟或 Redis 请求超时的问题,但通常情况下影响较小。与传统的加锁方式相比,利用 Redis 的原子操作(SETNX)避免了加锁带来的性能瓶颈,适用于高并发场景。通过设置过期时间,确保 Redis 中的处理记录不会永久存储,避免内存积压和泄漏。返回成功(即消息未处理过),执行相应的业务处理。
2025-06-06 17:05:38
518
原创 消息中间件的通信和丢失问题
网络通信和分布式系统的设计不能做到百分百不丢失数据,只能通过协议优化、容错机制、冗余设计等手段降低丢失的概率。特别是在分布式系统中,由于网络波动、节点宕机、磁盘故障等原因,数据丢失的概率始终存在。:Kafka等系统通过分区副本来保证数据的高可用性,即使某个节点宕机,数据也能从其他副本中恢复。,如增加更多的 Broker 节点、分区、副本等,以提高系统的可用性和稳定性。:没有重传机制,适用于对实时性要求较高的场景,但数据丢失的风险较大。等设计,提高了消息的可靠性,但仍无法避免在极端故障下的数据丢失。
2025-06-06 17:01:25
343
原创 Mybatis的坑
更新该字段的值到数据库。注解标识的字段来实现,默认情况下会在查询时忽略掉软删除的记录。MyBatis-Plus 不会自动处理已软删除的数据,除非使用。:MyBatis-Plus 默认情况下,不会对已软删除的数据(这意味着,如果你的数据库中有一条记录的。:MyBatis-Plus 默认情况下,如果实体类的字段为。,可以在 MyBatis-Plus 配置中进行设置,允许。:MyBatis-Plus 提供的软删除功能基于。传入查询条件,否则这些操作会跳过已软删除的记录。,使用 MyBatis-Plus 提供的。
2025-06-06 16:35:58
884
原创 MQTT 协议笔记
核心理念:引入中间件(Broker)思想MQTT 采用发布/订阅架构,消息通过 Broker 统一管理,发布者和订阅者之间解耦,简化设备通信复杂度,提升系统可扩展性和灵活性。极简消息格式,缩短消息体设计极简报头,最小报文仅2字节,减少网络传输数据量,降低低资源设备和低带宽网络的压力。消息级别的可靠传输机制(QoS)在基于 TCP 的可靠传输基础上,MQTT 定义三种 QoS 等级,确保消息“不丢失、不重复、不乱序”,特别是 QoS 2 保证消息恰好一次传递,满足物联网设备对消息语义的严格要求。
2025-06-04 11:39:22
776
原创 链路追踪的理解
链路追踪通过统一的 TraceId 贯穿所有服务调用,生成每个节点的 Span 并上报,实现完整调用链的跟踪与分析。它依赖于上下文传递机制,不干扰业务协议主体,通过请求头或元数据携带追踪信息,构建清晰的调用拓扑和性能视图。是现代分布式系统不可或缺的监控与诊断利器。
2025-06-04 11:20:12
693
原创 rpc框架主体思想
步骤接口级注册模块级注册1. 请求接收接收客户端请求接收客户端请求2. 服务定位从注册中心获取接口对应实现,或依赖Spring容器查找从本地维护的服务容器定位接口实现3. 方法调用反射调用接口实现方法容器内实例直接调用接口实现方法4. 返回结果返回调用结果返回调用结果客户端调用接口的代理方法。代理封装请求,查询注册中心获取服务地址。选取服务实例,发送网络请求。服务端处理请求,执行接口实现。返回结果给客户端代理。客户端代理返回结果给调用者。
2025-06-04 10:41:58
316
原创 rpc协议,rpc框架和openfeign
OpenFeign 曾在 Dubbo 尚未现代化时,用 HTTP + 注解的方式提升了微服务开发体验,解决了“RPC 框架不够好用”的问题;而现在 Dubbo 2.7+ 和 3.x 已全面升级,支持 Spring Boot、跨语言、现代协议和云原生,不仅不落后,反而在某些场景优于 OpenFeign。
2025-05-26 11:13:05
340
原创 Netty 核心原理与优化机制笔记
需要 2 次 CPU 拷贝(内核→用户,用户→内核)只需 1 次 CPU 拷贝(内核→堆外内存),避免了用户堆内存的额外拷贝0 次 CPU 拷贝,完全零拷贝,效率最高线程模型优化:多线程 + 多路复用(EventLoopGroup + Selector)责任链解耦:ChannelPipeline 管理编码、解码和业务处理器零拷贝技术:DirectByteBuffer 降低拷贝,FileRegion 利用 sendfile 彻底零拷贝。
2025-05-25 02:35:47
759
原创 手写Mybatis
解析阶段重点是把 XML 配置和映射文件转成内存的对象模型,尤其要明确每条 SQL 的类型,作为执行时的判断依据。主要完成配置加载、Mapper 文件读取、SQL 语句封装,包含 SQL 类型信息不涉及 SQL 执行或参数替换,职责清晰全局唯一的对象存储解析结果,支撑后续执行阶段SqlSession 是数据库操作的核心入口,隐藏了执行器和 JDBC 细节动态代理机制简化用户对 Mapper 的调用,自动完成 SQL 调用分发执行器负责数据库连接、占位符解析、参数绑定、SQL 执行及结果映射。
2025-05-25 00:54:45
1367
原创 类加载器失效的坑
你遇到的“只能加载当前模块配置文件”的问题,其实是类加载器资源可见性受限的表现。方式是否支持跨模块加载是否受类加载器限制❌✅✅(视具体运行环境)✅(上下文依赖)Spring✅(框架处理)❌(更灵活)文件系统方式(Path/File)✅(只要路径正确)❌。
2025-05-23 16:56:46
383
原创 交换机,路由器的作用
❗ 主机发往异网目标,会把包交给默认网关(路由器);❗ 交换机只管 MAC 地址,不懂 IP,负责把数据帧送到路由器接口;❗ 通过 ARP,主机能知道路由器的 MAC 地址;❗ 最终数据包 IP 层的目标是远程主机,链路层的目标是“网关”。“交换机是搬运工,认 MAC 不认人(IP),帮主机把包送到网关;路由器才是指路的,认 IP 决定去哪走。
2025-05-22 19:31:59
362
原创 网络通信-IP解析
IP 地址的网络号由子网掩码决定,不能单看前三段IP。判断两台设备是否在同一局域网,必须比较两者的子网掩码是否相同,且按掩码计算的网络号是否相同。了解私有地址段,便于识别局域网内部设备。
2025-05-22 18:47:28
571
原创 BeanFactory 和 FactoryBean
特性定义Spring 容器的核心接口用户自定义的工厂接口,实现复杂 Bean 创建功能管理和创建 Bean 实例定义如何创建一个特殊的 Bean 实例作用容器整体管理 Bean 生命周期负责产生具体 Bean 的实例返回对象返回被管理的 Bean 实例返回 FactoryBean 生成的 Bean 实例获取 FactoryBean 本身通过获取自身就是一个 Bean,但对外暴露的是它生产的对象一级缓存完成初始化的单例对象。二级缓存。
2025-05-22 15:38:45
778
原创 Spring AOP
1. Spring容器创建Bean2. BeanPostProcessor.postProcessAfterInitialization判断是否需要代理3. 查找所有Advisor,匹配Pointcut4. 若匹配,生成代理对象(JDK或CGLIB)5. 代理对象替代原始Bean注入容器6. 调用代理对象方法7. 代理对象执行Advisor中Advice链8. Advice执行前后增强逻辑(Before, Around, After等)9. 最终调用目标对象方法10. 返回结果。
2025-05-22 15:34:25
609
原创 JDK动态代理 vs CGLIB动态代理
点内容基础要求目标类必须实现至少一个接口可代理方法只代理接口中定义的方法新增方法目标类新增接口外的方法无法代理性能反射调用,性能较好(JDK优化动态生成字节码)使用场景接口设计良好的业务系统点内容基础要求目标类不能是final类;被代理方法不能是finalstatic可代理方法代理所有publicprotected方法,包括新增方法新增方法支持代理目标类自己新增的方法性能创建代理对象稍慢,但执行阶段性能优于JDK动态代理使用场景无接口或需要代理类所有方法的情况。
2025-05-22 15:31:12
315
原创 三级缓存与循环依赖
缓存层级名称缓存内容作用一级缓存完整初始化且增强后的 Bean 实例最终单例池,正常获取 Bean 首选此缓存二级缓存Bean 的早期引用实例暴露未完成初始化的 Bean,供循环依赖 Bean 使用三级缓存生成 Bean 早期引用的工厂对象延迟创建早期引用,支持 AOP 代理的动态生成,保证引用一致关键点说明三级缓存存工厂对象保证早期引用和最终 Bean 是同一对象引用二级缓存存早期 Bean 实例共享给多个依赖该 Bean 的其他 Bean一级缓存存完全初始化 Bean供正常获取使用。
2025-05-22 15:25:06
609
原创 spring ioc的流程
创建容器对象(如将配置类()或 XML 注册到容器中初始化 BeanFactory,准备好用于存储和管理 Bean 的结构(如加载启动的核心组件(如环境信息、资源解析器等)
2025-05-22 15:10:04
503
原创 binlog怎么实现增量同步
Binlog(Binary Log)是数据库中记录所有数据变更(INSERT、UPDATE、DELETE 等操作)的二进制日志。它记录了数据库的所有事务提交事件,按照时间顺序追加写入。Binlog 实现增量同步的关键是基于日志文件名和偏移量的精准定位;初始化通过全量快照完成,后续持续通过 binlog 增量读取保持数据同步;这种机制有效提升了同步效率,降低了系统压力。
2025-05-22 00:58:46
418
原创 数据库主从同步机制 & 强/弱一致性 & 增量同步工具(Flink CDC / Canal)
✅主从同步是数据库内部机制,基于 binlog 实现高可用读写分离;✅是外部增量同步工具,利用 binlog 实现异构系统之间的数据联动;✅强一致性通过延迟读和同步复制实现,保证每次读取都是最新数据;✅弱一致性允许一定时间的脏读,但系统最终会保持数据一致;✅ 选择一致性级别取决于业务对数据准确性的敏感程度与响应时间要求。
2025-05-22 00:58:20
488
原创 Canal和FlinkCDC的简介
Canal 是阿里巴巴开源的MySQL binlog 增量订阅和消费组件。Flink CDC 是基于 Apache Flink + Debezium 的数据库变更捕获框架,直接将数据库变更事件转为流处理数据。Canal 和 Flink CDC 是现代数据同步和实时处理的基石。它们利用数据库 binlog,实现高效、低延迟、强一致的增量同步与流处理,彻底改变了传统 ETL 的思路。如果你要做轻量级同步,推荐使用Canal;如果你要做实时分析或流式数据计算,推荐使用Flink CDC;
2025-05-22 00:48:38
656
原创 spring/springboot如何解决中文乱码问题
解决位置方法或配置配置开启 UTF-8 编码Spring MVC 手动配置使用过滤器(XML 或 Java Config)Tomcat前端请求设置设置以及请求头 Content-Type。
2025-05-22 00:39:42
548
原创 spring 如何管理mybatismapper接口
或使用:然后直接注入使用:二、关键问题✅ 答案:动态代理 + FactoryBean + 注解扫描三、执行流程简述1. 开启扫描引入 ,注册一个类路径扫描器 。 找到所有 Mapper 接口,给每个注册一个 。 中调用:MyBatis 用 JDK 动态代理生成实现类。你调用的方法(如 ),会转发给 ,再通过 SQL 映射执行。代理对象本质是对方法的拦截,将调用转换为 SQL 执行。通常推荐通过 Service 层调用 Mapper,实现更好的事务控制和业务封装。小
2025-05-22 00:36:16
276
原创 Sping中的设计模式
模式Spring 应用场景工厂模式单例模式单例 Bean、Bean 缓存代理模式AOP、事务模板方法模式观察者模式事件监听机制策略模式Bean 实例化、事务管理、资源加载责任链模式安全过滤器链、拦截器、BeanPostProcessor适配器模式装饰器模式建造者模式。
2025-05-22 00:35:24
920
原创 spring事件监听机制
接口方式(旧)@Component@Override// 发送欢迎邮件注解方式(推荐)@Component// 发送欢迎邮件Spring 的事件监听机制,是基于“观察者模式 + 事件驱动”的通用设计范式,具备解耦、灵活、可扩展的优势,是企业级应用中实现“业务协作”“事务后处理”“系统级通知”的强大工具。
2025-05-21 15:39:22
312
原创 Spring事务失效的解析
Spring 事务通过 AOP 代理实现,事务生效必须走代理对象的方法调用。JDK 动态代理只能代理实现接口的public方法。CGLIB 代理可代理非public(如protecteddefault)方法,但不能代理private方法。方法必须是public,且调用必须通过代理对象,才能触发事务。
2025-05-21 15:28:57
287
原创 spring事务传播行为的实现
处理点说明ThreadLocal事务上下文隐式传递事务状态,跨方法调用保持事务上下文传播行为判断中判断并执行不同传播策略挂起与恢复事务线程事务资源解绑定和重新绑定,支持事务隔离和嵌套嵌套事务支持基于JDBC Savepoint,实现部分事务回滚事务状态封装用管理事务生命周期属性解析与缓存通过快速获得传播行为配置事务同步回调保障事务完成后的回调逻辑执行。
2025-05-21 15:10:39
832
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人