- 博客(33)
- 收藏
- 关注
原创 分布式ID
分布式ID的核心问题包括唯一性冲突、有序性不足、性能瓶颈、可用性风险、安全隐患等。解决方案需针对性处理:通过数据库分库分表自增优化保证唯一性;采用雪花算法或时间戳前缀确保有序;利用号段模式本地缓存提升性能;通过多活部署和降级策略保障可用性;使用ID混淆或随机后缀增强安全性。选型需根据场景需求,高并发有序场景推荐雪花算法或号段模式,小规模系统适用数据库自增,敏感业务可考虑优化版UUID。落地时需注意机器ID分配、号段规划、监控告警和兼容性测试。
2025-11-09 16:30:35
675
原创 分布式的cap,base,raft
本文详细解析了分布式系统中的CAP理论、BASE理论、Paxos和Raft协议。CAP理论指出在一致性、可用性和分区容错性中只能三者择其二,实际系统多为CP或AP方案。BASE理论是CAP的工程实践补充,通过基本可用、软状态和最终一致性保证高可用性。Paxos作为首个分布式一致性算法,通过两阶段提交确保数据一致但实现复杂;Raft是Paxos的简化版,通过领导选举、日志复制和安全性保障三大机制更易理解和实现,已成为工业界主流选择。这些理论和技术共同构成了分布式系统设计的理论基础和实践指导。
2025-11-09 10:33:33
786
原创 redis的跳表
跳表是一种多层有序链表结构,通过分层索引优化查找效率。底层为完整数据链表,上层为抽样索引层(如每隔几个节点抽一个),查找时从高层快速跳过节点逐步下探,将复杂度从O(n)降至平均O(log n)。其核心实现包括随机生成节点层级、多层指针维护和动态调整索引结构,兼具平衡树的性能与链表的简单性,特别适合范围查询,因此被Redis有序集合采用。
2025-11-05 17:10:56
968
原创 redis集群下如何使用lua脚本
Redis集群下Lua脚本的执行影响与解决方案 原子性保障:Redis通过单线程模型保证Lua脚本在单节点执行的原子性,但在分布式集群中,原子性仅限单个节点,无法实现跨节点原子操作。 主从集群影响: 主节点执行脚本后将EVAL命令同步到从节点重新执行 存在主从延迟导致短暂数据不一致风险 故障转移可能造成脚本执行中断 分布式集群限制: 所有操作key必须属于同一槽位(CROSSSLOT错误) 无法保证跨节点操作的原子性 解决方案: 使用哈希标签({tag})强制key分配到同一槽位 避免脚本包含随机/时间相关
2025-11-05 09:51:06
1115
原创 基于用户的协同过滤算法实现小说推荐算法
本文介绍了基于用户协同过滤的小说推荐算法实现。系统通过NovelRecommendService接口定义推荐功能,包括用户推荐、相似度预计算和行为向量获取。核心实现类NovelRecommendServiceImpl采用多源用户行为数据(书架收藏、浏览记录)构建用户行为向量,通过计算用户相似度来生成推荐结果。算法考虑了冷启动问题,并使用Redis缓存优化性能。实现中综合了用户交互时长、频次等因素进行加权评分,并设定了相似用户阈值和推荐候选集大小等参数,确保推荐质量与效率的平衡。整个系统设计具有较好的可扩展性
2025-10-30 20:04:46
275
原创 HashMap的源码学习
本文深入剖析了Java中HashMap的源码实现,重点分析了JDK 8及以上版本的核心原理和关键实现细节。HashMap基于哈希表实现,采用链表+红黑树(JDK 8引入)解决哈希冲突,并支持动态扩容。文章详细讲解了其核心属性、哈希函数设计、桶索引计算以及关键的put()方法实现流程,包括延迟初始化、链表转红黑树的条件等优化策略,帮助读者深入理解这一重要数据结构的底层实现机制。
2025-10-30 19:28:41
885
原创 redis主从复制
Redis主从复制通过异步方式实现数据同步,分为全量复制和增量复制两个阶段。主节点生成RDB快照并发送给从节点完成初始化同步,后续通过复制偏移量和缓冲区实现增量同步。线上部署可采用一主多从架构,配置主节点密码、持久化和从节点只读模式,并通过info replication命令验证同步状态。需注意性能优化(如调整缓冲区大小)、高可用配置(结合哨兵)和监控关键指标,确保数据一致性及系统稳定性。
2025-10-29 22:17:21
344
原创 mysql线上主从集群设置
MySQL 主从复制搭建方案摘要: 本方案详细描述了MySQL主从复制的线上部署流程,适用于生产环境。首先规划主从服务器环境,确保版本一致、时间同步、网络互通。主库需开启binlog并配置唯一ID,创建专用复制账号并锁定数据库获取binlog位置信息。从库需导入主库数据快照,配置server-id并设置只读模式。通过CHANGE MASTER命令建立主从连接后,启动复制进程。验证阶段检查Slave_IO_Running和Slave_SQL_Running状态,并进行数据同步测试。运维时需关注binlog清理
2025-10-29 22:04:52
1009
原创 Future,FutureTask,CompletableFuture使用场景
Java并发编程中,Future、FutureTask与Runnable、Callable是处理异步任务的核心组件。Runnable适用于无返回值任务,Callable支持返回结果和异常抛出。Future作为结果句柄可获取任务状态和结果,FutureTask是其实现类,可直接提交给线程池。主要应用场景包括:获取异步结果(Callable+Future)、手动控制任务执行(FutureTask)、任务取消(Future.cancel())以及无返回值异步执行(Runnable)。
2025-10-28 14:15:28
1135
原创 G1的动态对象年龄判定
JVM 动态对象年龄判定机制通过灵活调整晋升策略优化内存管理。通用规则是当某年龄段对象总大小≥Survivor区50%时,该年龄及以上对象直接晋升老年代。G1收集器结合Region模型实现更智能的判定:动态计算候选晋升年龄,并综合老年代空间和回收收益决定晋升,避免传统固定阈值导致的"年龄堆积"问题。该机制优先级高于MaxTenuringThreshold,使内存管理更高效。实际应用中,建议通过监控调整Survivor Region数量,而非直接修改年龄阈值。这一设计使G1能更好地平衡内存
2025-10-28 09:55:48
881
原创 Java队列的详细特性学习
Java队列(Queue)是遵循FIFO原则的集合,分为阻塞队列和非阻塞队列两大类。非阻塞队列如ConcurrentLinkedQueue采用CAS实现无锁并发,适合高吞吐场景;阻塞队列如ArrayBlockingQueue使用锁机制实现线程安全,支持生产者-消费者模型。特殊队列包括优先级队列PriorityBlockingQueue、延迟队列DelayQueue和双端队列Deque等,各有独特应用场景。底层实现上,数组队列性能稳定,链表队列扩容灵活,而SynchronousQueue则实现零缓冲的线程间直
2025-10-27 13:26:35
1107
原创 spring的三级缓存及二三级缓存解决的问题
本文详细解析了Spring通过三级缓存解决单例循环依赖的机制。三级缓存包括:存储完整Bean的一级缓存(singletonObjects)、存储早期引用的二级缓存(earlySingletonObjects)和存储工厂对象的三级缓存(singletonFactories)。核心流程通过提前暴露未完成初始化的Bean引用,同时利用工厂按需创建代理对象,确保单例性和完整性。二级缓存避免重复创建早期引用,三级缓存则解决AOP代理的按需创建问题。对于构造器注入的循环依赖,Spring通过@Lazy注解创建延迟代理来
2025-10-27 11:15:34
881
1
原创 操作系统常见面试题(java)
Java后端面试操作系统核心考点解析 摘要:Java后端面试中操作系统问题聚焦进程线程、内存管理和I/O机制三大模块。进程线程方面需掌握进程/线程区别、线程状态转换及IPC通信方式;内存管理重点理解虚拟内存机制、分页/分段区别及LRU等页面置换算法;I/O模型需区分同步/异步、阻塞/非阻塞特性,掌握多路复用原理及epoll优势。死锁问题需明确四个必要条件及解决策略。这些知识点与Java并发编程(如Thread类、锁机制)、JVM内存模型及NIO网络编程深度关联,是构建高并发系统的底层基础。
2025-10-26 14:44:08
932
原创 G1中的算法,实现垃圾回收的方式
G1垃圾回收器采用分区算法(Region-Based)管理堆内存,通过记忆集(Remembered Set)解决跨Region引用问题,并使用原始快照(SATB)算法保证并发标记准确性。其核心流程包括新生代GC、并发标记和混合回收,优先回收高垃圾占比Region以实现低延迟目标。最终标记阶段通过扫描所有Region的记忆集处理跨Region引用,确保标记完整性。G1通过动态调整回收范围平衡效率与STW时间,适合大堆内存场景。
2025-10-25 11:30:13
991
原创 三色标记、CMS执行流程、写屏障、增量同步、卡表及增量同步存储详解
本文详解了垃圾回收中的三色标记、CMS执行流程及相关技术。三色标记(白、灰、黑)解决并发标记时的对象漏标问题。CMS通过7阶段(初始标记、并发标记、重新标记等)实现低延迟回收,利用写屏障和卡表记录引用变更。增量同步策略确保新增引用能被正确标记,数据存储在脏对象列表、卡表和标记队列中。这些技术共同保障了GC的高效执行,平衡了性能与准确性。
2025-10-25 09:31:05
1096
原创 Jvm资料整理
本文详细解析JVM运行时内存区域及其管理机制。主要内容包括:程序计数器(线程私有、无OOM)、Java虚拟机栈(存放栈帧,通过-Xss配置)、本地方法栈(与虚拟机栈合并管理)、Java堆(对象存储区,通过-Xms/-Xmx控制大小)、方法区(类元数据存储,JDK8后改为元空间)。文章还介绍了类加载器体系(启动类、扩展类、应用类及自定义加载器)及其双亲委派模型的工作流程(父类优先加载机制)。通过参数配置可优化各区域性能,文中提供了关键调优参数建议。
2025-10-24 20:56:13
967
原创 spring面试题从简到难
摘要: 本文介绍了Spring框架的核心概念和基础应用,包括IOC(控制反转)与DI(依赖注入)的关系、Bean的作用域、依赖注入方式、Spring MVC处理流程、事务管理注解以及常用组件注解的区别。同时对比了Spring与SpringBoot的核心差异,重点解析了SpringBoot的自动配置机制。这些内容适合Spring初学者快速掌握框架基础,为面试和开发实践提供指导。
2025-10-24 09:06:45
890
原创 aop对spring单例bean三级缓存的影响
本文分析了Spring框架中需要AOP增强的Bean处理机制:1) 多次获取时始终返回同一代理对象,由三级缓存机制保证单例唯一性;2) 二级缓存是避免重复创建代理的关键,缺少会导致单例破坏;3) 循环依赖时的"提前代理"不违背AOP原则,代理最终仍指向完整初始化的目标Bean。整体体现了Spring在原则性与灵活性之间的平衡设计。
2025-10-23 17:16:31
333
原创 spring面试题
什么是 Spring IOC:IOC(Inversion of Control,控制反转)是 Spring 核心设计思想,指“对象的创建、配置、依赖管理权力,从业务代码转移到 IOC 容器”。传统开发中,开发者需手动new对象、维护依赖(如 A 依赖 B 需手动new B()IOC 模式下,开发者仅声明依赖需求(如注解标注),容器自动创建对象、注入依赖。核心思想依赖反转(Dependency Inversion)
2025-10-23 14:39:30
624
原创 Spring Bean 完整生命周期
Bean生命周期涵盖从实例化到销毁的全流程,AOP在初始化后介入生成代理;三级缓存通过分层设计(延迟生成+缓存早期引用),既解决了单例Bean的循环依赖问题,又保证了AOP代理对象的唯一性,是Spring容器高效管理Bean的核心机制。
2025-10-22 20:08:41
846
原创 MySQL的可重复读实现原理
可重复读的实现通过MVCC的Read View机制,事务启动时生成一次快照,整个事务过程中读取的都是该快照版本,不受其他事务提交的影响。幻读的解决对于快照读(普通SELECT):MVCC的快照机制确保看不到其他事务新增的数据。对于当前读(加锁查询/更新/删除):通过Next-Key Lock(行锁+间隙锁)锁定数据及间隙,阻止其他事务插入新数据,避免幻读。核心优势。
2025-10-21 15:16:10
313
原创 Mybatis的#和$
{}通过预编译和参数绑定实现安全的参数传递,是日常开发的首选。${}通过字符串直接替换实现动态 SQL 拼接,存在 SQL 注入风险,仅用于必须动态修改 SQL 结构的场景(且需严格校验参数来源)。能使用#{}就不要用${}。
2025-10-17 20:13:59
303
原创 深入解析:事务如何通过日志实现(以InnoDB为例)
事务日志是数据库保障 ACID 特性的核心,InnoDB 中主要依赖 redo log(重做日志)、undo log(回滚日志)及 Log Buffer 实现。其核心是预写日志(WAL)机制:事务执行时,修改操作先写 Log Buffer 生成 redo log(含 LSN 序列号),提交时按 innodb_flush_log_at_trx_commit 参数策略(1 为强持久化)将日志刷盘,再延迟刷数据脏页。undo log 记录原始数据供回滚与 MVCC。崩溃恢复时,通过分析、重做。
2025-10-08 11:45:10
757
原创 JWT+Redis实现登录和退出登录令牌过期
JWT 提供了无状态的认证机制,减少了服务器存储压力Redis 黑名单解决了 JWT 无法主动失效的问题黑名单设置过期时间,避免了 Redis 存储空间无限增长这种方案既保留了 JWT 的优点,又弥补了其不足,适合大多数需要认证的 Web 应用场景。在实际应用中,还可以根据需求添加更多功能,如令牌刷新机制、权限控制等。
2025-10-07 18:07:35
576
原创 缓存模式及使用场景
本文系统介绍了五种主流缓存模式及其适用场景:Cache-Aside(通用读多写少)、Read-Through(简化应用逻辑)、Write-Through(强一致性)、Write-Behind(高吞吐写入)、Refresh-Ahead(预刷新热点数据)。重点分析了缓存使用中的六大核心风险:数据一致性、缓存穿透、击穿、雪崩、内存管理和并发安全,并给出针对性解决方案。最后提供了模式选择决策树,强调应根据业务特点(读写比例、一致性要求、复杂度需求)平衡选择,同时结合TTL、分布式锁、布隆过滤器等技术规避风险,实现缓
2025-10-03 18:26:23
526
原创 CMS与G1收集器
摘要:CMS和G1是JVM两大垃圾收集器,核心差异如下:CMS专管老年代,采用"标记-清除"算法,分4阶段(含并发标记/清除),通过卡表跟踪跨代引用,但会产生内存碎片;G1采用Region化设计,全域回收,基于"标记-整理+复制"混合算法,通过Remembered Set精确管理跨Region引用,支持可预测停顿(默认200ms)。CMS适合低延迟场景但需预留内存防CMF,G1则均衡吞吐与延迟,适合大堆应用。两者均通过写屏障处理并发标记,但机制不同(CMS用增量更新,
2025-10-02 11:26:19
1329
原创 xxl-job学习及与Sharding-JDBC实现分片进行es同步
XXL-Job是一款分布式任务调度框架,核心解决分布式环境下的任务统一调度、负载均衡和高可用问题。其核心组件包括调度中心、执行器和任务,支持分布式调度、分片执行、弹性扩容等特性,并提供多种路由策略和阻塞处理策略。在Java项目中引入XXL-Job需部署调度中心,配置执行器并编写任务处理器,最后在控制台配置任务。尤其适合与Sharding-JDBC结合实现数据分片任务的并行处理,通过分片参数与数据分片规则一致,实现高效分布式处理。
2025-09-27 15:10:41
655
原创 Java线程池完全指南:参数、队列、拒绝策略及实战
Override// 自定义处理逻辑,如:// 1. 将任务持久化到数据库或消息队列// 2. 记录日志并告警// 3. 降级处理(执行简化版任务)System.err.println("任务" + r + "被拒绝,当前队列大小:" + executor.getQueue().size());
2025-09-26 16:52:49
930
原创 jvm实现int i=0;i=i++及字节码文件组成
字节码中的方法区域是存放字节码指令的核心位置,字节码指令存放在方法的Code属性中。,常量池计数,接口数,字段数,方法数,访问标识,父类,接口等。这个问题从字节码指令层面剖析。
2023-12-09 16:18:20
408
原创 javaWeb的jwt令牌校验
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//目标方法进行前执行,注意,返回true拦截器才会放行,false不会放行。
2023-12-05 19:36:41
1088
原创 Sky苍穹外卖总结
类实现了Serializable接口才能被序列化,Serializable接口内无内容,起标记作用,序列化主要在类被ObjectInputStream存储时发生,类如果没实现Serializable接口则无法被序列化,报java.io.NotSerializableException异常。
2023-12-04 20:59:34
930
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅