- 博客(31)
- 资源 (1)
- 收藏
- 关注
原创 MVCC 怎么实现的
摘要: MVCC(多版本并发控制)是数据库实现高并发的关键技术,通过在行记录中维护多个版本(隐藏字段trx_id和roll_pointer指向Undo Log),结合事务的ReadView快照判断数据可见性,实现读写分离。读操作无需加锁即可访问历史版本(如事务A读取旧值),写操作生成新版本(事务B修改后记录新trx_id)。InnoDB引擎中,MVCC支持读已提交(每次读最新提交版本)和可重复读(事务内读固定版本)隔离级别,核心依赖Undo Log、ReadView和隐藏字段三大组件。
2025-06-12 13:02:41
279
原创 HashMap 在 JDK 1.7 中为什么会出现死循环
JDK1.7的HashMap在多线程扩容时存在死循环问题 摘要:JDK1.7的HashMap在多线程并发扩容时,由于使用头插法转移链表且未加锁,可能导致链表形成环形结构。具体表现为:多个线程同时进行resize操作时,对同一桶链表的节点转移顺序可能被打乱,最终形成e1→e2→e1的闭环链表,导致后续遍历时出现死循环。该问题在JDK1.8中通过改用尾插法和synchronized锁机制得以解决。
2025-06-12 11:48:24
586
原创 JWT刷新token机制
本文介绍了JWT(JSON Web Token)的刷新机制及其实现方法。主要内容包括:为什么要使用RefreshToken,其与AccessToken的区别,安全建议以及具体代码实现。关键点在于通过短有效期的AccessToken和长有效期的RefreshToken组合,既保障安全性又提升用户体验。文章还提供了SpringBoot后端和Vue3前端的代码示例,并总结了自动续期流程和常见面试问题。实践建议包括将RefreshToken存储于服务器、使用HTTPS以及支持滑动过期等安全措施。
2025-06-11 15:48:01
485
原创 Nacos原理+面试题
Nacos是阿里开源的微服务基础设施,提供注册中心与配置管理一站式解决方案。其核心架构包含NamingService和ConfigService两大模块,采用Raft协议保障数据一致性,支持AP/CP模式切换。服务注册通过心跳机制维持健康状态,配置中心实现热更新与多环境隔离。相比同类产品,Nacos优势在于双模式支持、多语言适配及K8s集成能力,适用于电商、金融等多样化场景。存储方面2.x版本引入MySQL支持,强化了数据持久化能力。
2025-06-11 15:10:23
870
原创 Redis多数据库动态切换
该方案实现了 Redis 多数据库(多 DB index)环境下,通过注解或显式指定的方式在代码层自动切换 Redis 数据库,无需手动 select 操作,支持线程安全、可恢复的动态切换机制。
2025-06-10 18:51:59
678
原创 Sentinel是如何限流的,还有哪几种限流的方式?
Sentinel 是通过滑动时间窗口计数 + 多种策略(如 QPS、线程数)来实现限流的,可以对资源(方法、接口、服务)进行精细化的流控设置,确保系统在高并发下的稳定性。
2025-06-10 18:14:40
644
原创 DispatcherServlet 内部流程
SpringMVC请求处理流程解析:DispatcherServlet作为核心控制器,通过doDispatch()方法驱动完整流程。首先获取处理器链(HandlerMapping),适配器(HandlerAdapter)调用Controller方法,中间执行拦截器逻辑(preHandle/afterCompletion)。返回结果后,视图解析器(ViewResolver)处理页面或消息转换器输出JSON。整个过程涉及五大核心组件协同工作,包括请求匹配、方法调用、视图解析等环节,典型场景如返回JSP页面或JS
2025-06-10 18:10:22
467
原创 SpringMvc从请求到响应的过程
本文概述了SpringMVC请求处理流程的完整机制:1)请求首先由DispatcherServlet接收;2)通过HandlerMapping匹配对应Controller方法;3)HandlerAdapter调用目标方法;4)返回值经由ViewResolver解析为视图或JSON;5)最终响应返回客户端。文中包含流程细节、源码定位和注解示例,并提供了面试答题模板。关键组件包括前端控制器、处理器映射/适配器、视图解析器等。流程特点为责任链式调用,高度解耦且扩展性强。
2025-06-10 18:03:04
498
原创 SpringBoot自动装箱原理
摘要: SpringBoot的自动装配通过@EnableAutoConfiguration实现,加载META-INF/spring.factories中的配置类,结合@Conditional条件动态注入Bean(如RedisTemplate)。三级缓存机制(DefaultSingletonBeanRegistry)解决循环依赖:一级缓存(完整Bean)、二级缓存(早期引用)、三级缓存(ObjectFactory)。构造器注入和多例模式无法解决循环依赖。面试常问自动装配排查、缓存源码实现及配置排除方法。
2025-06-10 17:53:37
551
原创 分布式锁的key有什么特点?分布式锁是如何延期的?延期的触发机制有哪两种?
2、Redisson 默认每 10 秒续期一次锁 TTL,直到业务完成后手动释放,保证锁的可靠性。同时,它还支持可重入锁、读写锁、信号量等扩展能力,较原始 setnx 实现更健壮、易用。1、我们项目中使用 Redisson 实现分布式锁,主要利用其自动续期机制(WatchDog),避免因执行时间不确定导致锁失效问题。,通过内部的 WatchDog 机制每 10 秒自动延长锁的 TTL,默认锁时间为 30 秒;我们项目中使用默认 lock() 方式,以保证执行时间不可控的任务不会因 TTL 到期而丢锁。
2025-06-10 17:28:39
405
原创 [特殊字符] 技术文档这门手艺:从“能看懂”到“值得参考”的进阶之路
写好技术文档,不是“多做了份文书工作”,而是用清晰、可传播的方式沉淀你的专业能力。技术的本质是解决问题,而文档,是把解决之道传递给更多人。所以,下一次面对一个新项目、新需求、新系统设计,不妨从一份值得传阅的技术文档开始。
2025-06-10 10:21:25
272
原创 MySql优化的场景有哪些?
EXPLAIN是分析SQL性能的关键工具,其核心字段包括:type(访问方式):从最优const(主键直达)到最差ALL(全表扫描),影响查询效率key(使用索引):未用索引需优化,覆盖索引可避免回表(先查索引再查主表的额外IO)Extra:重点关注Using filesort(额外排序)和Using temporary(临时表),需优化排序/分组
2025-06-09 18:31:14
768
原创 项目中使用到的设计模式有哪些?都应用在什么场景?策略模式的缺点是什么?
本文系统梳理了23种设计模式,分为创建型、结构型和行为型三大类。重点解析了7种高频面试设计模式(策略、单例、工厂、责任链、代理、模板方法、观察者),包含典型应用场景、生活类比和代码示例。特别分析了策略模式的4大缺点及优化方案,建议采用工厂模式+注册机制来避免策略膨胀问题。推荐面试时优先掌握策略等7种核心模式,强调"项目实践+结构解析+代码演示+生活类比"的叙述逻辑。最后提供了设计模式分类脑图,帮助建立结构化记忆体系。全文以实用为导向,聚焦面试高频考点和工程实践中的典型解决方案。
2025-06-09 17:52:11
1262
原创 Redis分布式锁具体怎么实现的
Redis 分布式锁是利用 Redis 的原子操作特性,实现对共享资源的互斥访问,常见的实现方式主要基于 Redis 的SET命令(带 NX 和 PX 参数)或 Lua 脚本,保证加锁和解锁的原子性和安全性。
2025-06-07 09:59:46
228
原创 常见 Redis 面试题
面试时回答要有思路先定义概念(什么是 X,X 有什么作用)。然后阐述原理(原理模型、实现思路)。最后给出工程实践(常见配置、常用命令、注意事项、场景案例)。切忌空讲概念,一定要结合“Redis 在生产中怎样使用”来落地回答,才更能打动面试官。祝你面试顺利,通过率飙升!
2025-06-06 18:44:38
514
原创 什么是 BASE 理论
BASE 是 Basically Available、Soft state、Eventually consistent 的缩写
2025-06-06 17:52:33
259
原创 CAP 理论是什么
CAP理论指出分布式系统无法同时满足一致性(C)、可用性(A)和分区容错性(P)三个属性,必须权衡取舍。由于网络分区不可避免,实际系统通常在一致性(CP)和可用性(AP)之间选择。例如Zookeeper选择CP,Eureka选择AP,而Nacos则灵活支持两种模式。该理论揭示了分布式系统设计的核心矛盾,实际应用中常结合BASE理论进行补偿。
2025-06-06 16:11:58
563
原创 Eureka、Zookeeper、Nacos 三大注册中心的对比说明,适合用于 面试答题、实战选型、架构评估 等场景
服务注册中心三巨头对比:Eureka(AP模型,已停止维护)、Zookeeper(CP模型,强一致但易阻塞)、Nacos(AP/CP可调,集成配置中心)。Nacos凭借服务注册+配置管理一体化、支持多种协议、丰富控制台等优势成为当前主流选择,尤其适合国内微服务生态。实际选型需根据业务需求:简单测试用Eureka,强一致协调用Zookeeper,企业级应用推荐Nacos。Nacos兼顾灵活性与功能性,支持百万级服务注册,是微服务架构的理想基础设施。
2025-06-06 15:59:55
378
原创 内存泄漏怎么排查
内存泄漏(MemoryLeak)是指程序中不再使用的对象仍被引用导致内存无法回收。Java虽有垃圾回收机制,但不当代码仍会导致泄漏。常见症状包括内存持续上升、频繁FullGC等。排查步骤:1)监控JVM指标;2)生成堆快照;3)使用MAT/Arthas分析引用链。典型场景:ThreadLocal未清理、缓存未过期、静态集合持有对象等。解决方案包括及时释放资源、设置缓存过期等。关键点:内存泄漏本质是程序忘记解除对象引用。常用工具:VisualVM、MAT、Arthas等。
2025-06-06 15:41:28
608
原创 Gateway的路由机制
问题要点Gateway 如何进行请求路由?GatewayHandlerMapping 根据 RouteDefinition 中的 Predicate 匹配请求如何实现动态路由?实现 RouteDefinitionLocator + Refresh EndpointPredicate 支持哪些类型?Path、Method、Header、Query、Host 等Filter 的作用是?
2025-06-06 09:58:21
957
原创 Mq保证数据不丢失
MQ(消息队列)在分布式系统中承担着等重要角色,其中“数据不丢失”是其最关键的可靠性保障之一。下面我将从四个层面为你详细讲解“MQ 如何保证消息不丢失”。
2025-06-06 09:45:44
939
原创 Redis为什么使用单线程
由于 Redis 所有数据都在内存中,加之采用高效的数据结构和 epoll 的 I/O 多路复用模型,单线程处理也能保证高吞吐性能。Redis 80% 以上是纯内存数据结构操作,单次命令耗时极低(<1ms),但核心命令执行仍由主线程完成,以保证数据一致性和线程安全。自 Redis 6.0 起,为了解决网络读写瓶颈,引入了。,命令执行仍然在主线程完成(保证原子性)Redis 的命令处理是单线程的,目的是。每次只处理一个请求,避免上下文切换,Redis 核心追求极致性能,,能同时处理大量客户端连接。
2025-06-05 12:05:45
241
原创 CallerRunsPolicy 背后的核心逻辑
是一种线程池压力过大时的“自我保护限流机制”。它不会丢任务,但会强迫提交线程“慢下来”,让提交者承担执行任务的代价,以此来缓冲资源压力、防止崩溃。
2025-06-05 11:51:35
315
原创 线程池实战讲解,加深记忆
阶段核心线程队列容量非核心线程调用者线程(main)初始020提交任务第1~2任务220提交任务第3~4任务22(满)0提交任务第5~6任务2满2(满)提交任务第7~10任务2满满自己执行任务无界队列虽然简单,但极易造成内存溢出;有界队列虽然吞吐有限,但可控、稳定,是生产项目的首选。
2025-06-05 11:06:06
1050
原创 Java 线程池完整讲解
设置线程名前缀,便于日志排查和线程管理。Java 线程池执行任务时,优先使用核心线程,其次是任务队列,再扩展最大线程数,最后使用拒绝策略兜底,并始终优先复用空闲线程资源。
2025-06-04 18:38:23
563
原创 Java线程池的保护机制
Java 线程池提供了丰富的保护机制,如合理配置线程数、有界队列、拒绝策略等。结合业务特点,还可以搭配限流和降级手段,有效防止线程池过载,保障系统稳定性和高可用性。
2025-06-04 18:28:45
404
原创 MySQL 的索引机制
MySQL索引是基于B+树结构的高效查询机制,主要包括聚簇索引和二级索引。聚簇索引将数据与索引存储在同一B+树叶子节点,而二级索引需回表查询。索引类型有主键、唯一、普通、联合、全文等,其中联合索引遵循最左前缀原则。合理使用索引能显著提升查询性能,但需注意避免冗余索引和索引失效情况(如函数运算、类型转换等)。覆盖索引可避免回表,进一步优化查询。开发中应根据业务场景合理设计索引,平衡查询效率和写入成本。
2025-06-04 10:12:24
824
原创 String、StringBuffer、StringBuilder 的区别
总结来说,String适合不可变字符串场景,用于多线程下的字符串修改,而是单线程高性能字符串拼接的首选。在实际开发中应根据线程模型和性能要求合理选择,避免不必要的对象创建。
2025-06-03 15:47:45
244
原创 反射机制的优缺点
可以在运行时动态加载类、获取类的信息、访问/修改属性、调用方法,甚至创建对象,提升了代码的灵活性和扩展性。许多Java框架(如Spring、Hibernate)广泛使用反射来实现IOC、AOP、ORM等功能,增强了系统的解耦能力。可以实现通用框架,如Bean拷贝、对象转JSON、ORM映射等。由于反射涉及动态解析,性能相比直接调用低,频繁使用反射会影响系统性能。破坏封装性,可以访问私有成员,可能引发安全问题或导致程序逻辑混乱。
2025-06-03 11:28:10
291
原创 spring、springmvc、springboot、 spring cloud的区别
综上所述,Spring是一个Java开发框架,Spring Boot是一个基于Spring框架的开发框架,它提供了快速创建和配置Spring应用程序的方式,而Spring Cloud是一个构建分布式系统的开发框架,它基于Spring Boot,提供了许多可扩展的库和工具。Spring Cloud是一个用于构建分布式系统的开发框架,它基于Spring Boot,提供了许多可扩展的库和工具,例如服务发现、配置管理、负载均衡、断路器等等。
2023-03-27 11:23:31
164
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人