- 博客(26)
- 资源 (9)
- 收藏
- 关注
原创 Java后端高并发核心瓶颈突破(JVM+并发+分布式底层实战)
Java内存模型(JMM)的核心是“内存可见性、原子性、有序性”,而GC的核心是“高效回收无用对象,减少STW(Stop The World)时间”,两者的矛盾的在于:高并发场景下,对象创建/销毁频繁,GC压力剧增,若GC参数不合理,会导致STW时间过长(甚至秒级),直接影响系统可用性。本文所讲的JVM调优、锁优化、分布式一致性方案,都是经过生产环境验证的实战干货,核心不是“记住配置”,而是“理解底层逻辑”——只有理解了底层原理,才能根据不同的业务场景,灵活调整优化方案,真正突破高并发瓶颈。
2026-04-14 18:45:00
854
1
原创 每日一道面试题 14:== 和 equals 的区别是什么?(面试必问基础题)
摘要:Java中==和equals的区别在于:==比较基本类型的值或引用类型的地址;equals默认比较地址,但可重写为内容比较(如String、Integer)。String重写equals比较内容而非地址,包装类超出常量池范围时==返回false。重写equals通常需同时重写hashCode以保证集合类正常工作。使用建议:基本类型用==,对象内容比较用重写后的equals,判断是否为同一对象用==。核心结论:==比值或地址,equals可定制为内容比较。
2026-04-08 10:20:13
173
原创 每日一道面试题 13:Java 中的强引用、软引用、弱引用、虚引用分别是什么?有什么用?
Java提供了四种引用级别(强引用、软引用、弱引用、虚引用),让开发者能与GC协作管理内存。强引用不会被GC回收;软引用在内存不足时回收,适合缓存;弱引用GC必收,用于ThreadLocal等场景;虚引用仅用于对象回收通知。引用级别从强到弱,回收灵活性递增。合理使用不同引用可优化内存、避免OOM,如软引用缓存、弱引用防内存泄漏、虚引用管理堆外内存。
2026-04-07 14:57:14
413
原创 每日一道面试题 12:服务熔断与降级的区别?谈谈你在项目中的实战经验
本文介绍了微服务架构中的服务熔断与降级机制。服务熔断是在被调用服务出现故障时被动触发的保护机制,通过切断故障服务防止雪崩效应;服务降级则是主动关闭非核心功能以应对流量高峰。两者在触发原因、执行对象、恢复机制等方面存在本质区别,但在实际项目中往往配合使用。文章通过电商大促案例展示了如何对非核心服务主动降级,对核心服务设置熔断保护,并补充介绍了超时重试、限流等其他容错手段。这两种机制共同构成了微服务高可用的重要保障。
2026-04-03 11:35:23
438
原创 了解数据库前必须要搞懂的事情:MySQL 事务四大特性 ACID 是怎么实现的?
本文详细解析了MySQL事务的ACID特性及其底层实现机制:原子性通过undolog记录修改前状态实现回滚;持久性依赖redolog确保提交数据不丢失;隔离性采用锁和MVCC技术处理并发冲突;一致性则是前三者与数据库约束共同作用的结果。文章还区分了redolog(崩溃恢复)和binlog(主从同步)的不同作用,并简要说明了两阶段提交的必要性。通过转账案例的通俗讲解,帮助读者理解事务如何保障数据安全与一致性。
2026-04-03 11:08:08
408
原创 每日一道面试题 11:谈谈你对 ThreadLocal 原理、使用场景及内存泄漏问题的理解
ThreadLocal是Java中的线程本地变量,用于实现线程间数据隔离。每个线程内部维护一个ThreadLocalMap,以ThreadLocal实例为key存储数据,保证线程安全。主要应用场景包括用户上下文传递、非线程安全工具类复用等。核心风险是内存泄漏,尤其在线程池场景下,必须遵循"set后必remove"原则。关键点包括:弱引用设计降低泄漏风险、父子线程传值需用InheritableThreadLocal、线程池推荐使用TransmittableThreadLocal。使用时要特
2026-04-02 11:50:06
407
原创 每日一道面试题 10:synchronized 与 ReentrantLock 的核心区别及生产环境如何选型?
摘要:synchronized和ReentrantLock是Java中两种同步机制,主要区别包括:1)实现层面(JVM vs JDK);2)锁获取方式(自动 vs 手动);3)公平锁支持;4)高级特性(ReentrantLock支持条件队列等)。synchronized适合简单场景,代码简洁;ReentrantLock适用于需要公平锁、限时等待等复杂场景。JDK1.6后synchronized性能提升,与ReentrantLock接近。使用时需注意ReentrantLock必须在finally中释放锁,避免
2026-04-01 16:44:46
536
原创 每日一道面试题 09:SpringBoot 拦截器(Interceptor)与过滤器(Filter)的区别
摘要:过滤器和拦截器都是用于请求/响应处理的组件,但存在本质区别。过滤器基于Servlet容器,拦截所有请求,可处理跨域、编码等问题;拦截器基于SpringMVC框架,只拦截Controller请求,可直接使用Spring Bean,适合权限校验、日志记录等场景。主要差异体现在底层依赖、执行时机、作用范围、可操作对象等方面。实际开发中,应根据具体需求选择:全局性处理(如跨域)用过滤器,与业务相关的处理(如权限)优先用拦截器。面试时需结合场景说明选择依据。
2026-03-31 10:45:47
488
原创 每日一道面试题 08:SpringBoot 自动配置原理
SpringBoot自动配置原理核心是通过@EnableAutoConfiguration注解触发,由AutoConfigurationImportSelector加载META-INF下的配置类,结合@ConditionalOnClass等条件注解实现按需加载。自动配置遵循"约定优于配置"原则,当类路径存在相关依赖时自动生效,同时支持通过exclude排除配置。手动配置优先级高于自动配置,确保开发灵活性。该机制通过减少XML配置大幅简化了Spring应用开发。
2026-03-30 14:39:45
492
原创 ClickHouse 数据建模实战:从宽表设计到维度建模,新手也能搞定
本文详细介绍了ClickHouse数据建模的核心原则和标准流程。首先强调ClickHouse与MySQL等行式数据库的建模差异,提出三大原则:宽表优先避免JOIN、维度在前指标在后的字段排序、贴合查询场景设计。然后给出4步标准建模流程:梳理业务需求、选择星型宽表模型、合理设置分区键和主键、匹配业务场景选择表引擎。文章还列举了5个常见建模误区,并提供了通过查询耗时和执行计划验证建模效果的方法。最后指出ClickHouse建模的关键在于顺应其列式存储特性,贴合实际查询需求进行设计。
2026-03-28 12:00:00
475
原创 每日一道面试题 07:为什么不建议使用 Executors 创建线程池?生产环境如何正确定义 ThreadPoolExecutor?
Executors快捷工具存在严重资源风险,生产环境必须手动创建线程池。FixedThreadPool和SingleThreadPool使用无界队列可能导致OOM,CachedThreadPool会无限创建线程引发线程爆炸。正确做法是使用ThreadPoolExecutor,设置核心线程数、最大线程数、有界队列和拒绝策略。核心参数需根据业务类型(CPU/IO密集型)合理设置,队列大小需平衡响应速度和任务拒绝频率。拒绝策略推荐CallerRunsPolicy,高可用系统可自定义策略。生产环境应统一手动创建线程
2026-03-27 09:43:38
328
原创 SpringBoot 线上慢接口排查实战:从 JVM 到数据库的全链路分析
本文系统介绍了SpringBoot线上慢接口的全链路排查方法,涵盖JVM、代码逻辑和数据库三大环节。通过监控工具定位慢接口后,依次排查内存泄漏、GC问题、线程阻塞等JVM问题;分析代码冗余、缓存失效和第三方调用超时;最后检查慢查询、索引失效和锁等待等数据库瓶颈。文章提供了Arthas、SkyWalking等12种工具的使用指南,并结合真实案例演示优化过程,帮助开发者快速解决性能问题。排查需遵循"定位-分析-优化"的步骤,避免盲目操作影响线上服务。
2026-03-25 14:53:30
836
原创 每日一道面试题 06|Spring Bean 的生命周期(高频必问)
Spring Bean的生命周期包括:实例化→属性注入→Aware接口回调→初始化前后处理(BeanPostProcessor)→执行初始化方法(@PostConstruct/afterPropertiesSet/init-method)→正常使用→容器关闭时执行销毁方法(@PreDestroy/destroy/destroy-method)。关键扩展点包括:Aware接口感知容器资源、BeanPostProcessor实现初始化前后处理、三种初始化/销毁方法。AOP代理在初始化后的后置处理阶段完成。该机制
2026-03-25 09:26:48
267
原创 大模型 + SQL 自动优化:用 LLM 根治慢查询、自动生成索引、自动分表
摘要:本文探讨了2026年大模型(LLM)在SQL优化领域的应用。通过实战案例展示如何利用LLM实现慢查询自动优化、索引自动生成和分表策略推荐,覆盖MySQL、ClickHouse等主流数据库。大模型通过分析海量SQL案例和数据库原理,能快速识别低效SQL,给出优化方案,将查询性能提升数千倍。文章还介绍了集成LLM的SQL优化工具,并强调需验证优化结果、结合业务调整方案。这种技术革新让开发者从繁琐的SQL优化工作中解放,将精力聚焦于更有价值的系统设计。
2026-03-24 11:54:21
1020
原创 每日一道面试题 05:MySQL 索引失效常见场景及优化思路
MySQL索引失效常见场景包括:对索引字段使用函数/运算、前置%模糊查询、违反最左前缀原则、使用!=/NOT IN等非等值查询、OR连接非索引列、隐式类型转换等。优化建议:保持索引列"干净"、遵循最左匹配原则、使用右匹配模糊查询、避免非等值操作、确保类型一致,并通过EXPLAIN验证索引使用情况。这些措施能有效提升查询效率。
2026-03-24 09:25:12
183
原创 每日一道面试题 04:Redis 分布式锁的实现方式及避坑点
Redis分布式锁通过SETNX命令实现并发控制,主要有三种实现方式:基础版使用SET命令加过期时间;优化版通过UUID+Lua脚本确保锁的唯一性和原子性释放;高级版借助Redisson实现自动续期等功能。常见问题包括死锁、误删锁和集群锁丢失,解决方案是设置合理过期时间、使用唯一标识+Lua脚本,以及采用RedLock算法或Redisson处理集群场景。面试回答需涵盖原理、实现层级和避坑方案,展示全面理解。
2026-03-23 09:16:12
297
原创 每日一道面试题 03:说一下 Spring 事务失效的常见场景
Transactional 基于 AOP 代理,Spring 仅对 public 方法生成代理逻辑,非 public 方法会直接跳过事务切面,导致事务失效。新线程内的数据库操作不在原事务线程绑定的 Connection 中,Spring 事务基于 ThreadLocal 管理连接,跨线程即脱离事务。同一个类内,无事务方法调用本类带 @Transactional 的方法,由于走的是原始对象而非代理对象,切面不生效,事务不生效。开发中事务经常不生效、不回滚,Spring 事务有哪些典型失效场景?
2026-03-21 09:45:00
58
原创 每日一道面试题 01:Redis 缓存击穿怎么解决?
摘要:本文介绍了一种使用互斥锁解决缓存击穿问题的简单方案。当热点Key突然过期时,大量请求会直接访问数据库。解决方案核心是:通过Redis互斥锁确保只有一个请求查询数据库,其他请求等待或重试。该方案代码简单(仅需5分钟接入)、无需额外中间件、生产环境稳定可靠。关键注意事项包括:锁必须设置过期时间避免死锁,缓存过期时间应添加随机值防止集中失效,热点Key可设置永久缓存。这个轻量级方案能有效防止数据库被击穿,既适合面试场景,也适用于生产环境。
2026-03-20 14:15:15
127
原创 每日一道面试题 02:MySQL 最左前缀,一篇讲明白,面试实战都能用
本文简明扼要地讲解了MySQL索引中最左前缀法则的核心要点。要点包括:1)联合索引必须从最左字段开始匹配且不能间断才能命中;2)建索引原则:高频字段放前、等值查询优先、不超过3个字段;3)通过建表实例展示命中与不命中索引的SQL示例;4)提醒避免无用索引、低基数字段前置等常见错误。全文用简洁语言将这一面试常考、实战必备的索引知识讲透,帮助读者快速掌握最左前缀法则的正确应用方法。
2026-03-19 10:26:38
273
原创 ClickHouse生产踩了坑?来看看怎么避坑
本文总结了ClickHouse在生产环境中常见的8大问题及解决方案:1)内存爆满问题,需优化查询语句和调整内存参数;2)磁盘空间不足,需定期清理数据和配置TTL;3)副本不同步,需检查配置一致性和网络连通性;4)数据倾斜,需优化分片键选择;5)数据重复/丢失,需配置去重引擎和备份机制;6)“Too many parts”错误,需优化批量写入策略;7)权限不足,需创建专用用户;8)端口冲突,需检查并终止占用进程。文章针对每个问题提供了具体操作方案,帮助用户快速定位和解决问题。
2026-03-18 17:18:27
663
原创 ClickHouse查询优化怎么搞?从分钟级到秒级,新手也能搞定
ClickHouse查询优化核心在于减少数据扫描和计算负担。主要优化方向包括:1.索引优化,合理设置主键和二级索引;2.分区优化,按查询高频字段分区并确保查询指定分区;3.查询语句优化,避免select*、减少DISTINCT和JOIN;4.集群参数调优,调整内存和并行查询配置。常见误区包括盲目建索引、不指定分区、大表JOIN等。通过执行计划和查询耗时对比可验证优化效果。遵循这些原则,可将查询性能从分钟级提升至秒级。
2026-03-17 17:17:42
953
原创 ClickHouse数据写入应该怎么做?来看看这篇文章,秒懂
本文介绍了ClickHouse数据写入的最佳实践和常见问题解决方案。首先强调ClickHouse的写入特性:适合批量有序写入,不适合单行写入和频繁更新。推荐两种主要写入方式:批量写入(SQL直接插入或文件导入)和实时写入(HTTP接口或Kafka集成)。针对常见问题提出了解决方案:使用ReplacingMergeTree引擎去重、优化写入参数提升性能、异步处理更新删除操作。最后给出生产环境最佳实践建议,包括写入方式选择、去重方案、参数优化和监控验证。遵循"批量写、少更新、按序写"原则,可
2026-03-16 15:48:50
579
原创 ClickHouse副本应该怎么用?搞定高可用,再也不怕节点挂了
本文介绍了ClickHouse副本机制及其在生产环境中的重要性。副本通过数据备份解决高可用问题,与分片机制(解决查询性能问题)形成互补。文章详细区分了两者概念,指出分片是数据拆分,副本是数据备份。核心内容包括:1)副本的三大作用(数据不丢失、负载均衡、故障自动切换);2)3节点3分片1副本的互备配置实操;3)常见问题解决方案(数据不同步、同步慢、自动切换失败等)。最后强调生产环境中分片+副本的组合配置是保障ClickHouse集群稳定高效运行的关键。
2026-03-13 17:55:42
571
原创 ClickHouse分片应该怎么搞?看完这篇文章肯定有帮助。
ClickHouse分片是提升TB/PB级数据查询性能的关键。文章指出,合理分片需遵循三大原则:1)根据高频查询字段选择分片键,避免低基数字段;2)分片数量应与集群节点数匹配,推荐2-3倍关系;3)需配合本地表和分布式表使用,采用cityHash64函数避免数据倾斜。文中详细演示了3节点集群的配置步骤,并列出5个常见错误:分片键选择不当、数据倾斜、分片数与节点不匹配、缺少副本、混淆分片与分区。最后建议通过查询耗时和节点负载验证分片效果,强调分片配置应简单实用,以业务查询需求为导向。
2026-03-12 16:09:01
462
原创 ClickHouse引擎应该怎么选?看看这个逻辑适不适合你。
本文系统介绍了ClickHouse数据库引擎选型的关键要点。首先将引擎分为MergeTree系列、日志系列、内存系列和特殊引擎四大类,重点解析了MergeTree系列中五种核心引擎的特性与适用场景:基础MergeTree适用于通用OLAP分析,ReplacingMergeTree处理重复数据,SummingMergeTree提升聚合性能,AggregatingMergeTree适合时序数据,VersionedCollapsingMergeTree支持版本管理。文章提出三步选型原则:明确核心需求、优先通用引擎
2026-03-11 18:08:07
500
原创 什么是ClickHouse?一篇文章让你看懂。
摘要:ClickHouse是一款专为OLAP场景设计的高性能列式数据库,擅长处理海量数据分析。其核心优势包括纯列式存储、高效压缩、向量计算引擎和分布式架构,能将TB级数据查询从分钟级压缩到秒级。相比MySQL、Snowflake等数据库,ClickHouse在分析性能、存储成本和查询速度上优势显著,适用于实时日志分析、用户行为统计等场景,但不适合OLTP事务处理。新手可通过Docker快速部署,优先使用MergeTree引擎,并合理分区优化性能。ClickHouse已成为大数据分析领域的利器,能显著提升分析
2026-03-10 17:24:11
938
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅