- 博客(206)
- 资源 (19)
- 问答 (1)
- 收藏
- 关注
原创 垃圾回收算法详解
本文系统梳理了JVM中的四种垃圾回收算法:1)复制算法适用于新生代,效率高但内存利用率低;2)标记清除算法简单但会产生内存碎片;3)标记整理算法通过移动对象解决碎片问题,适合老年代;4)分代收集策略根据对象生命周期采用不同算法,是JVM垃圾回收的核心思想。文章通过示意图和优缺对比,清晰呈现了各算法的适用场景与实现原理,为理解JVM内存管理提供了结构化参考。
2025-09-05 21:54:54
326
原创 JVM 运行时数据区域
梳理了JVM内存区域结构,基于JDK8详细解析了五大核心区域:堆(存放对象实例)、元空间(存储类信息)、虚拟机栈(线程私有方法执行区)、本地方法栈(Native方法服务)和程序计数器(指令地址存储)。重点分析了各区域的功能特点、组成结构及常见异常,如堆内存GC机制、元空间溢出风险、栈的深度限制等。通过对比JDK版本差异(如永久代取消),帮助开发者深入理解JVM内存管理机制。
2025-09-04 23:26:18
260
原创 Java 双亲委派机制解析和破坏双亲委派的方式
本文系统梳理了Java类加载机制与SPI(服务提供接口)原理。类加载器采用双亲委派机制保证核心类安全,但在插件化等场景下可通过自定义类加载器或SPI机制突破限制。SPI通过META-INF/services配置文件实现服务发现,典型案例包括JDBC驱动动态加载。文章详细解析了MySQL驱动SPI实现、ServiceLoader源码及破坏双亲委派的场景,揭示了SPI如何实现接口与实现解耦、动态扩展及绕过类加载限制。该机制广泛应用于JDBC、日志框架等需要插件化扩展的场景。
2025-09-04 23:05:07
613
原创 JVM 类加载全过程
梳理了JVM类加载的七个生命周期阶段:加载、验证、准备、解析、初始化、使用和卸载。重点解析了前五个核心阶段:加载阶段读取字节码生成Class对象;验证阶段确保代码安全合法;准备阶段为静态变量分配内存;解析阶段替换符号引用;初始化阶段执行静态赋值和代码块。文章通过类比数据处理流程,形象说明了各阶段作用,并详细阐述了各阶段的工作机制和触发条件,帮助理解JVM类加载原理。
2025-09-04 19:17:44
853
原创 高并发系统设计方案(直播场景)
本文系统梳理了微服务架构下的高并发解决方案,涵盖微服务拆分、部署扩展、缓存策略、消息队列、数据库优化等核心模块。关键点包括:按功能模块拆分服务并独立部署;Kubernetes弹性伸缩保障高可用;多级缓存+应用锁防击穿;MQ实现削峰解耦;分库分表+读写分离突破数据库瓶颈;ES支撑复杂查询;限流熔断保障系统稳定。通过缓存、MQ、分库分表、ES和K8s弹性扩容的组合策略,构建高并发、高可用的分布式系统架构。
2025-09-04 13:38:00
406
原创 分布式系统的 CAP 原则与 BASE 原则理解
分布式系统设计中,CAP原则和BASE原则是两个核心概念。CAP原则指出一致性(C)、可用性(A)和分区容错性(P)三者不可兼得,通常需在C和A间权衡。而BASE原则作为实践方案,通过基本可用、软状态和最终一致性,在保证高可用的同时接受短时数据不一致。二者关系可概括为:CAP是理论基础,BASE是工程实现。这些原则为分布式系统设计提供了重要的理论指导和实践框架。
2025-09-03 22:43:52
238
原创 Redis 集群模式与高可用机制
Redis集群模式通过哈希槽(16384个)实现数据分片,支持多Master节点(建议奇数)和Slave备份。它采用心跳检测和多数投票机制实现高可用,当Master故障时自动切换Slave为Master。适用于写密集型场景,但数据同步会占用带宽,常规场景下哨兵模式可能更合适。集群模式有效解决了单节点瓶颈问题,但节点过多会增加心跳开销(O(N²))。
2025-09-03 18:50:43
274
原创 Redis 哨兵模式(Sentinel Mode)
哨兵模式在Redis主从架构中引入哨兵机制,提升高可用性。其核心是自动故障转移:通过主观/客观下线机制检测Master故障,基于Raft算法选举Leader Sentinel执行切换。新Master按优先级、复制偏移量等规则选出,确保数据完整性。故障转移完成后,自动重配从节点并更新客户端连接,实现服务持续可用,适用于读多写少场景。
2025-09-03 14:02:47
330
原创 Redis 主从复制模式
Redis主从模式是入门级分布式部署方案,通过主节点写、从节点读实现读写分离和数据备份。核心特点包括部署简单、成本低,支持PSYNC2协议优化增量同步,可采用主从从结构分担复制压力。但存在主节点性能瓶颈、无自动故障转移、数据延迟等局限性,仅适合低并发场景或测试环境。实际生产通常需配合哨兵或集群模式实现高可用。该方案适合业务初期,但对高可用要求严格的场景需升级架构。
2025-09-03 00:19:11
259
原创 Redis 持久化机制详解
• RDB 适合对恢复速度要求高、能容忍少量数据丢失的场景。• AOF 适合对数据可靠性要求极高的场景。之前互联网工作经常用到的。• 混合持久化结合了 RDB 和 AOF 的优点,是 Redis 4.0 及以上版本的推荐方案。当下工作使用的,技术一直在发展这个优势更大。
2025-09-02 21:54:56
480
原创 Elasticsearch 深分页限制与解决方案
遇到Elasticsearch导出超1万条数据时出现"Result window is too large"报错,原因是默认的index.max_result_window限制为10000条。解决方案包括:1)临时调大该参数(有性能风险);2)改用Scroll API(适合批量导出)。经验表明:from+size分页仅适合小数据量,大数据导出应使用Scroll API,实时分页推荐Search After。通过改用Scroll API成功解决了全量数据导出问题。
2025-09-02 18:23:24
303
原创 Elasticsearch 核心知识与常见问题解析
本文系统梳理了Elasticsearch的核心原理与实战经验。关键点包括:1)倒排索引机制实现高效全文检索;2)分片与副本设计保障数据高可用;3)近实时特性通过刷新机制平衡性能与实时性;4)分词器选择(如IK中文分词)对搜索效果的决定性影响;5)Mapping设计规范字段类型与分词策略。实战建议:索引合并优化查询性能、Scroll处理深分页、合理设置分片数(主分片不可修改)。版本兼容性需特别关注,如ES8要求JDK17+。通过系统梳理知识体系,既巩固了基础概
2025-09-02 17:01:00
1139
原创 Elasticsearch 核心特性与应用指南
没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群(工作中一般使用阿里云等云厂商的ES服务,很少有自己搭建的):节点对外表现对等(每个节点都可以用来做入口),加入节点自动负载均衡。:输入/输出格式为JSON,意味着不需要定义Schema,快捷方便。:可以扩展到PB级的结构化和非结构化数据,支持海量数据的近实时处理。,它能提供我们最相关的搜索结果(relevance-相关性)。,cluster(集群)分布式部署,极易扩展,这样很。:可根据不同的用途分索引,可以同时操作多个索引。
2025-09-02 15:43:08
883
原创 数据库事务隔离级别与 MVCC 机制详解
事务隔离级别定义了多个并发事务之间的相互影响程度,从低到高分为四个级别,不同级别在数据一致性和系统性能之间呈现不同的平衡关系。1.1 读未提交(Read Uncommitted)• 定义:最低的隔离级别,允许当前事务读取其他事务尚未提交的数据变更。• 核心问题:无法避免脏读、不可重复读和幻读。读取到其他事务未提交的“临时数据”,若后续事务回滚,当前读取的数据将变为无效。• 适用场景:对数据一致性要求极低,仅追求极致性能的场景(如临时统计查询,无需精确结果),实际业务中极少使用。业务场景基本都不用。
2025-09-01 22:28:32
521
原创 JRebel 热部署配置
自动编译配置:快捷键 ctrl+shift+alt+S注册表配置:快捷键 ctrl+shift+alt+/启动类配置:不用配置也可以:
2021-05-08 19:32:15
1613
原创 JVM 知识点
JVM如何跨平台:不同系统有不同的JVM环境,JRE不同运行时候进行跨平台。 c和c++根据选择的不同类库在编译时跨平台,java在运行时跨平台JVM分为三大块:年轻代 由End、S0和S1组成 年老代 持久代(JDK1.8取消了)年轻代分为三大块:当发生年轻代GC(YGC)时End区域的对象被其他对象引用时,则移到幸存者S0、S1区,未引用的立即清除,当S0和S1多次YGC都还存在的话,则移到老年代区域。GC分为两大块:minor GC 清理新生代和老年代 Full GC
2021-04-08 18:46:12
358
原创 HashMap 原理
HashMap由数组和链表组成:数组为主体,链表是为了解决hash冲突而存在的。JDK1.8中若链表长度超过了8(含8),则链表转化为红黑树。jdk1.7链表从头部插入,jdk1.8链表从尾部插入。jdk1.8中entry替换为node。HashMap继承AbstractMap并实现了Map接口:基于hash原理通过get()和put()存储和获取对象。hash冲突:如果根据hash函数算出来的hash值对应的数据位置不含链表(当前entry的next指向null),那么查找和添加很快,仅.
2021-04-06 22:03:20
425
原创 【快手面试题】统计数组中出现次数超过一半的数字
统计数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2因为没写过这种场景,自己实现的一版,仅供一种思路参考: public static void main(String[] args) { int[] array = {1, 2, 3,3, 3, 3, 3, 3, 2, 2,.
2021-04-06 12:13:55
262
原创 HashMap put 方法,都做了那些事情?
/** * Associates the specified value with the specified key in this map. * If the map previously contained a mapping for the key, the old * value is replaced. 将指定的 key 与 value 相关联。 如果在 map 中指定的 key 存在了,则旧的 value 将被替换 *.
2021-03-31 00:42:37
411
原创 将枚举类型转换成流
/** * 将枚举类型转换成流 * @param enumeration 需要转换成流的枚举对象 * @param <T> 泛型类型 * @return 返回转换之后的 Stream 对象 */ public static <T> Stream<T> of(Enumeration<T> enumeration){ return StreamSupport.stream( ...
2021-03-27 11:25:40
500
原创 HttpServletRequest 转 Map
public static Map<String, Object> getJsonParam(HttpServletRequest request) throws IOException { try (var br = new BufferedReader(new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8))) { var sb = new StringB...
2021-03-26 17:35:07
569
原创 IP 相关工具类
import com.gaolv.utils.core.StrUtil;import com.gaolv.web.constant.Constants;import lombok.AccessLevel;import lombok.NoArgsConstructor;import lombok.extern.log4j.Log4j2;import javax.annotation.Nullable;import javax.servlet.http.HttpServletRequest;..
2021-03-26 17:25:24
240
原创 Web相关工具类
import lombok.AccessLevel;import lombok.NoArgsConstructor;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import java.util.Optional;import javax.annotatio..
2021-03-26 15:31:47
215
原创 注入静态对象类
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;/** * 注入静态对象类 * 其他类中直接静态使用,不用注入。一次注入,多次使用,使用便捷。 */@Componentclass BaseStaticObject { protected static UserMapper userMapper; ..
2021-03-26 14:59:43
368
原创 甲乙2个人去买冬瓜,甲买差7元,乙买差9元,合买差1元,冬瓜多少钱?
/** * 甲乙2个人去买冬瓜,甲买差7元,乙买差9元,合买差1元,冬瓜多少钱? * 答案:甲:8元、乙:6元 */ public static void main(String[] args) { // 冬瓜 = x、甲 = i、乙 = j for (int x = 0; x < 10000; x++) { for (int i = 0; i < 10000; i++) { ...
2021-03-12 15:19:44
2718
原创 Object wait() 和 Threead sleep() 疑问解答,练习
问题:红框得语句是否会输出?答案:会的。答案解析:1.t1 线程开始执行,遇到 Thread.sleep() 后,让出 CPU。2.t2 线程(下面那个县城)开始执行,遇到 t1.wait() 后,让出 CPU。3.5 秒过去后,t1 线程通过线程调度,获取到 cpu ,进行执行,执行结束后,让出 CPU。4.t2 线程通过线程调度,获取到 cpu,通过代码计数器定位后(因为上次让出 CPU 时,t1.wait() 方法已经执行过了,下次获取 cpu 时,会执行下一条语句),进行..
2021-03-12 15:08:42
267
原创 idea 明显代码错误,编译器不提示
idea 明显代码错误,编译器不提示现象:F2 会提示:错误分析中解决思路:1.查找相关案例,按他人经验排错2.结合自身现状分析问题3.采用方块推进法进行排查问题解决方案:安装了 Illuminated Cloud 插件,关闭启用就好了可信度较高,解决方案参考:点击跳转...
2020-11-10 17:57:05
2380
原创 支付宝同一账户下多个应用,资金对账问题-调研
调研渠道:查阅支付宝文档 咨询支付宝人工客服结论:不同应用只是公钥、密钥不同,只是方便接入方隔离。资金走的同一账户,无法做资金隔离,会产生对账问题解决方案:要想做资金隔离,必须先做到账户隔离...
2020-10-30 21:48:44
1218
原创 If you want an embedded database (H2, HSQL or Derby), please put it on the clas
Description:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver classAction:Consider the following: If you want an embedded database (H2..
2020-07-05 14:21:05
4114
1
原创 Spring Cloud Config的yml文件中spring.cloud.config.server配置有误
***************************APPLICATION FAILED TO START***************************Description:Invalid config server configuration.Action:If you are using the git profile, you need to set a Git URI in your configuration. If you are using a nativ..
2020-07-05 14:19:03
6267
原创 No instances found of configserver (xxxxxx)
‘xxxxxx’(yml文件中配置的service-id)未从注册中心找到,xxxxxx为Spring Cloud Config服务解决:yml文件中配置的service-id(‘xxxxxx’),是否和注册中心Spring Cloud Config服务名称是否一致 配置config微服务项目 启动config微服务项目,并注入到注册中心(注册中心:Eureka、Zookeeper等)java.lang.IllegalStateException: No instances found of
2020-07-05 14:17:47
14621
原创 RabbitMQ配置错误
RabbitMQ配置错误最易犯的错误为port填写为15672(网页端口),正确为5672spring: rabbitmq: host: xxx port: 5672 virtual-host: / username: xxx password: xxx publisher-confirms: true #如果对异步消息需要回调必须设置为true Failed to check/redeclare auto-delete queue(s).org.s
2020-07-05 14:15:57
3621
原创 聚簇索引与非聚簇索引
聚簇索引介绍:聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。具体的细节依赖于实现方式,例InnoDB的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行。当表有聚簇索引时,他的数据行实际放在索引的叶子页(leaf page),术语“聚簇”。聚簇索引实现:存储引擎负责实现索引,因此不是所有的存储引擎都支持聚簇索引。InnoDB,B+Tree 按顺序存储数据,可以用来做Order B和Group By从操作。帮助数据库服务器避免排序和临时表。 将B+tree索引和数据
2020-06-03 23:53:42
455
原创 Could not find class [org.springframework.cloud.client.loadbalancer.reactive.OnNoRibbonDefaultCondi
Eureka注册中心启动异常:原因:jar包不同org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.chao.LearningApplication]; nested exception is java.lang.IllegalArgumentException: Could not find
2020-05-27 10:53:54
18214
4
原创 将file压缩zip文件
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.List;import java.util.Map;import ja...
2020-05-21 16:55:58
512
原创 mysql select 执行后会发生什么?mysql服务器架构
mysql服务器架构客户端Navicat 12 for MySQL、SQLyog等服务器层链接处理、授权认证、安全等 缓存层 解析、词法、语法分析 优化SQL,生成SQL执行计划 跨存储引擎的功能:存储过程、触发器、视图等 通过API将SQL执行计划发送给存储引擎层存储引擎层存储引擎层屏蔽了不同存储引擎之间差异,对上层服务器层提供的接口是透明的。 负责MySQL中数据的存储和提取。每个存储服务器都有自己的优势和劣势。 常用的InnoDB和MyISAM等引擎mysql s.
2020-05-16 00:06:07
276
原创 @Component和@Service、@Controller、@Repository区别
相同点: @Component为@Service、@Controller、@Repository的元注解,四个实现功能是一样的不同点为区分业务层:@Component 业务特殊组件层,如handler类 @Controller 业务控制层 @Service 业务逻辑层 @Repository 业务资源层@Component用来做什么? 被@Component标注的类被视为自动检测的候选者;@Component何时用?在SpringBoot中使用@Component...
2020-05-13 18:26:12
6293
原创 java图片转Base64工具类
import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.File;import ja...
2020-05-07 10:10:23
1321
原创 金额工具类
import java.math.BigDecimal;/** * 金额工具类 */public class AmountUtil { /** * 汉语中数字大写 */ private static final String[] CN_UPPER_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍"...
2020-05-06 17:43:59
272
java email发送测试
2016-08-10
jQuery生成二维码包
2015-12-17
img MyBatisCodeHelper-Pro-1.9.4-IDEA173-IDEA182.zip
2018-10-11
plsql恢复存储过程包执行前的代码
2015-01-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人