自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

YangChingyuk的博客

学会总结才能走的更远。

  • 博客(72)
  • 资源 (3)
  • 收藏
  • 关注

原创 kafka如何保证消息的顺序性

生产端:为所有需要保证顺序的消息指定相同的Key。这样它们会被发送到同一个Partition。Topic设置:设置该Topic只有1个分区(Partition)。这是最严格但也性能最低的方案,通常只用于极端场景。更常见的做法是使用多个分区,但通过Key将需要顺序处理的消息路由到同一个分区。消费端:确保消费该Topic的Consumer Group里,只有一个Consumer实例在消费这个特定的Partition。(Kafka的Rebalance机制会自动处理这一点,你无需手动干预)。

2025-09-07 10:18:01 431

原创 AQS原理

AQS提供了一套通用的模板用于构建同步器。

2025-09-07 10:12:56 497

原创 Mybatis常见问题

(1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句,可以严格控制sql执行性能,灵活度高。(2)作为一个半ORM框架,MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。称Mybatis是半自动ORM映射工具,是因为在查询关联对象或关联集合对象时,需要手动编写sql来完成。

2025-09-07 09:59:19 543

原创 Springboot核心

YAML是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分层配置数据。

2025-09-07 09:51:42 658

原创 ConcurrentHashMap解析

(简称 CHM)是 Java 并发包中高性能的线程安全哈希表实现。其设计目标是在高并发场景下提供高效的读写操作。以下是其核心原理和扩容机制(基于 ​。,实现了高效的无阻塞扩容。其设计在高并发场景下显著优于。,是 Java 并发编程的核心工具之一。​:锁粒度细化到单个桶,大幅降低竞争。线程协作分摊迁移开销,避免单线程阻塞。快速将链表均匀分散到新数组的两个位置。迁移完成后,旧桶位置放入 ​**遍历旧桶,对每个桶的头节点加。标识迁移状态,避免重复迁移。**​(标记该桶已迁移)。

2025-09-07 09:46:35 642

原创 RabbitMQ之死信队列

图片代码消费者拒绝TTL过期队列满监控DLQ深度分析死信原因检查消费者日志/错误调整TTL或处理逻辑扩容消费者或削峰C/F/G修复代码安全重试消息确认业务恢复。1.​独立消费者组​DLQ 消费者需与主业务隔离(避免占用正常资源)3.​熔断机制​若重试成功率 < 10%,暂停重试并发出告警。2.​闭环处理​:分析 → 修复 → 重试 → 验证。1.​监控先行​:DLQ 深度 >0 即告警。3.​安全重试​:渐进延时 + 重试次数控制。4.​防止污染​:隔离 DLQ 消费者资源。步骤 4:安全重试(3种方案)

2025-09-07 09:43:50 628

原创 Quorum队列原理

Quorum队列通过Raft协议实现多数派复制和自动故障转移,以强一致性为核心牺牲部分灵活性与低延迟,成为RabbitMQ高可用的首选方案。实际部署时需注意副本数配置(推荐奇数节点)、内存监控及业务场景匹配性,避免误用导致性能瓶颈。

2025-09-07 09:40:33 284

原创 kafka特性和原理

​总结​:Kafka 以持久化日志为核心,通过分布式分区、副本机制、零拷贝优化实现高吞吐与高可靠。新版本通过 ​KRaft 去 Zookeeper化进一步简化运维,使其在流处理生态中的地位更加稳固。1.​高吞吐量 (High Throughput)​​。​总结:Kafka 消息问题解决矩阵​。1.​Kafka 内部机制​。​三、消息重复消费问题​。​一、消息顺序性问题​。​二、消息不丢失问题​。​六、架构级容灾设计​。​四、消息堆积问题​。​五、消息延迟问题​。1.​生产者批处理​。

2025-09-07 09:37:48 755

原创 TiDB数据库

TiDB 是一个为解决 MySQL 在分布式、大规模、高并发以及混合负载(HTAP)场景下面临的挑战而设计的现代分布式数据库。它通过分布式架构提供近乎无限的扩展能力、通过 Raft 协议提供强一致性和高可用性、通过 TiFlash 实现实时的 HTAP 能力,并极大地简化了用户的使用和迁移成本(兼容 MySQL)。它是一个在分布式事务数据库领域非常成功和有影响力的开源产品,特别适合业务高速发展、数据量和复杂度激增的企业级应用场景。

2025-09-07 09:32:54 589

原创 Java之线程池

​安全首选:​​ 通常优先使用 shutdown() + awaitTermination() 组合实现优雅关闭。​强制手段:​​ 当需要快速关闭或优雅关闭超时时,使用 shutdownNow()。​任务中断:​​ shutdownNow() 的有效性依赖于你的任务代码能正确响应中断​(即周期性地检查中断状态或在可能阻塞的操作中捕获 InterruptedException)。​资源释放:​​ 无论使用哪种关闭方法,关闭后都应避免再次使用该线程池实例(提交新任务将触发异常)。

2025-09-07 09:30:49 482

原创 类的加载和对象的创建

Parent() { System.out.println(“Parent构造函数”);static { System.out.println(“Parent静态代码块”);有继承则先递归调用父类构造器)。静态初始化:执行静态变量赋值和静态代码块(仅首次加载时一次)。Parent构造代码块 // 父类实例化(代码块)Child构造代码块 // 子类实例化(代码块)Parent静态代码块 // 父类初始化(静态)Child静态代码块 // 子类初始化(静态)

2025-09-07 09:29:05 575

原创 深入理解Java内存

深入理解Java内存JVM内存首先要知道的是Java程序运行在JVM(Java VirtualMachine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性。一个完整的Java程序运行过程会涉及以下内存区域:寄存器寄存器: JVM内部虚拟寄存器,存取速度非常快,程序不可控制。栈栈:保存局部变量的值: 1.基本数据类型的值。 2.保存类的实例,即堆区对象的引用(指针)。 3.保存加载方法时的帧。堆堆:用来存放动态产生的

2025-09-07 09:27:29 128

原创 Mysql索引

MySQL 的存储引擎选择对性能至关重要,而 ​InnoDB 是 MySQL 5.5 及之后版本的默认存储引擎​(包括当前主流版本 MySQL 8.0)。– 假设存在idx_name。关键口诀:​索引列不做计算,最左前缀要满足,覆盖索引是利器,EXPLAIN诊断不可少。1.​主键索引(PRIMARY KEY)​​。1.​B+树(Mysql默认结构)​​。​四、索引工作流程(以B+树为例)​​。​辅助字段(按需关注)​​。1.​二级索引查询:​​。​二、索引的数据结构​。​核心字段(必看)​​。

2025-09-07 09:26:44 685

原创 MySQL与ES索引区别

MySQL索引像字典目录,ES索引更像整个图书馆的书籍分类系统。关键限制:MySQL单表索引大小影响写性能,ES的分片数创建后不能改。比如MySQL的“行”对应ES的“文档”,MySQL的“表”类似ES的“索引”概念。MySQL 索引和 Elasticsearch(ES)索引虽然在名称上都叫“索引”,但它们在设计目标、数据结构、应用场景和底层原理上有着根本性的区别,​更像是两个完全不同的概念,刚好用了同一个名字。​​以下是它们的关键区别详解:​让我们更深入分析这些差异:🔍。

2025-09-06 18:51:28 626

原创 ElasticSearch原理

​一、Elasticsearch 核心特点​1.​分布式架构​数据自动分片(Shard)存储在多节点,支持横向扩展(PB级数据)。副本机制(Replica)保障高可用,主分片故障时副本自动接管。2.​近实时搜索(NRT, Near Real-Time)​​写入数据后延迟约 ​1秒​ 即可被检索(因 refresh_interval 默认 1s)。3.​全文检索能力​基于 ​倒排索引(Inverted Index)​​ 支持高速文本模糊匹配。

2025-09-06 18:48:43 1022

原创 服务器线程高占用定位方法

at app.service.DataProcessor.encode(DataProcessor.java:120) <-- 高耗能代码行。💡 ​关键点​:85%的线上CPU问题可通过RUNNABLE堆栈直接定位到具体代码行,重点关注循环、正则、序列化等操作。2.​检查锁竞争​:注意多线程中的synchronized和Lock操作。1.​识别热点方法​:查找重复出现的RUNNABLE堆栈方法。3.​排查死循环​:如while(true)未合理休眠。4.​算法性能​:确认是否存在高时间复杂度逻辑。

2025-09-06 18:45:14 478

原创 Kubernetes (k8s)

🚀 ​一、环境准备(3种方式)​​​1. 本地开发环境(推荐)​​。

2025-09-06 18:44:16 920

原创 Docker基础

🧩 ​七、Docker Compose 多容器编排​​1. 安装​。

2025-09-06 18:43:14 760

原创 Redisson分布式事务锁

​1. Redis 锁存储结构 (Hash)​​| Lock Key (String) | | “my_lock” (Hash结构) |=+|关联存储数据 | “c8b5f1a0-2d…:123” | 5 (counter) | <-- UUID:ThreadID 对应计数器 (重入次数)expiration。

2025-09-06 17:58:50 1230

原创 AQS原理

​1. 核心设计思想​​状态管理:​​维护一个volatile int state状态变量,代表共享资源的状态。在ReentrantLock中:state = 0表示锁空闲,state > 0表示被线程持有(可重入时>1)。在Semaphore中:state表示可用许可证的数量。在CountDownLatch中:state表示需要等待的事件(计数器)数量。​线程排队等待:​​。

2025-09-06 17:57:33 278

原创 JUC之并发编程

​原理​:如 AtomicInteger,其内部使用 volatile int value保证可见性,所有修改操作(如 incrementAndGet)都基于 ​CAS​ 实现,保证了原子性而无须加锁,性能极高。它维护了一个 ​volatile int state​(代表共享资源的状态)和一个 ​FIFO 线程等待队列​(CLH 队列的变体,用于管理获取资源失败的线程)。​原理​:将 AQS 的 state变量拆解使用​:高 16 位表示读锁状态(共享计数),低 16 位表示写锁状态(独占重入计数)。

2025-09-06 17:56:30 338

原创 Java并发锁相关

2.​偏向锁​:锁被同一线程多次访问时,记录线程 ID(避免 CAS 操作)。3.​轻量级锁​:当多线程竞争时,通过 CAS 自旋尝试获取锁(减少阻塞)。synchronized(this) { // 锁对象可以是任意对象。锁升级过程中什么是偏向锁→轻量级锁→重量级锁?

2025-09-06 17:54:40 1010

原创 Ribbon和LoadBalance-负载均衡

​6. 选择建议与迁移​​新项目:​​ ​首选 Spring Cloud LoadBalancer (SCL)​​:官方维护,更新活跃;响应式编程友好;配置更符合 Spring 习惯;轻量级,依赖简化。​老项目 (依赖 Ribbon):​​​渐进式迁移​:逐步替换 Ribbon 为 SCL;添加依赖 spring-cloud-starter-loadbalancer;移除 spring-cloud-starter-netflix-ribbon;

2025-09-06 17:47:50 892

原创 Eureka与Nacos的区别-服务注册+配置管理

​选型建议​​新项目/云原生架构:直接选择 Nacos,一站式满足服务发现、配置管理、流量管控。​旧 Eureka 系统​:建议逐步迁移到 Nacos(Spring Cloud Alibaba 提供平滑迁移方案)。​仅需简单注册中心​:Consul 可作为替代,但 Nacos 配置管理更优。

2025-09-06 17:47:12 511

原创 Hystrix与Sentinel-熔断限流

Hystrix 原理Hystrix 的核心是 ​​“避免级联故障”​,通过隔离、熔断、降级和监控来实现。​隔离 (Isolation):​​​线程池隔离 (Thread Pool Isolation - 默认):​​ 对依赖服务的调用分配到独立的线程池执行。即使某个依赖服务线程池耗尽或超时,也不会影响到调用该依赖服务的上游线程(通常是Tomcat线程)。​优点:​​ 隔离彻底,支持超时控制(依赖线程中断)。​缺点:​​ 线程上下文切换开销大,资源消耗高(每个依赖需要单独线程池)。

2025-09-06 17:46:08 442

原创 Spring的AOP实现原理

客户端代码 -> 调用被代理Bean的方法 -> 实际调用的是动态生成的代理对象 (JDK Proxy或CGLIB子类) -> 代理对象查找匹配该方法的通知链 -> 创建MethodInvocation包装本次调用 -> 驱动MethodInvocation.proceed() -> 按顺序执行拦截器链中的 MethodInterceptor (对应各种通知) -> 最终在链中调用原始目标对象的方法 -> 结果/异常沿链返回 -> 代理对象将结果返回给客户端。​:AOP 联盟定义的拦截器接口。

2025-09-06 17:41:12 564

原创 spring事务传播机制

Spring 的事务传播机制指的是在多个事务方法相互调用时,事务应该如何传播的规则。它定义了被调用方法是在调用方的事务中运行,还是自己开启新事务,或者完全不参与事务等行为。这是 Spring 声明式事务管理的核心特性之一,通过 @Transactional(propagation = Propagation.XXX) 注解来指定。

2025-09-06 17:40:39 441

原创 Spring核心-Bean周期

第7 8 9次后置处理器会决定循环依赖问题(创建过程中有个方法,方法里面有个判断,判断中有三个条件,其中有两个条件一定是成立的,也就是true,最后的条件默认设置为true,但是这个条件是初始值赋值的,也就是说我们可以通过修改源码,或者在bean完成创建完成之前进行修改值,让其不成立),创建bean使用工厂模式,三次判断中去决定bean的创建,使用工厂模式,为什么?注解注入:@Resource先会按照名称到spring容器中查找,如果查找不到,就回退按照类型匹配,如果再没有匹配到,就会抛出异常。

2025-09-06 17:39:45 1273

原创 Spring笔记

提供访问Bean的方法:BeanFactory提供了一系列方法,用于访问和管理应用程序中的Bean,包括根据Bean的名称获取Bean实例、判断是否存在指定的Bean等。注入Bean之间的依赖关系:BeanFactory会根据Bean之间的依赖关系,进行依赖注入,即将一个Bean所依赖的其他Bean注入到它的属性中。扩展Bean的功能:后置处理器可以为bean添加新的属性、方法或者修改bean的属性值,从而扩展bean的功能。

2023-04-26 09:16:49 380

原创 nginx常见配置记录

【代码】nginx常见配置记录。

2023-01-13 17:04:35 371

原创 文件相关接口

文件相关接口--上传,下载/预览

2022-11-02 10:19:17 233

原创 获取当周和上周的周一、周日时间

【代码】获取当周和上周的周一、周日时间。

2022-09-09 15:01:38 1697

原创 BeanDefinitionRegistryPostProcessor

BeanDefinitionRegistryPostProcessorBeanDefinitionRegistryPostProcessor继承了BeanFactoryPostProcessor接口,去实现postProcessBeanDefinitionRegistry方法;bean工厂的bean属性处理容器,就是可以管理我们的bean工厂内所有的beandefinition(未实例化)数据,可以对Bean属性进行修改,当然也可以一处spring中的bean,自定义bean进去。当系统启动时实现Be

2022-07-01 16:44:11 685

原创 国密Sm4加密算法

国密Sm4加密算法笔记public class Sm4Utils { // 编码 private static final String ENCODING = "UTF-8"; // 加密名称 public static final String ALGORIGTHM_NAME = "SM4"; // 加密分组方式 public static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS7Paddi

2022-05-13 15:17:46 4765 1

原创 ArrayList解析

ArrayList解析ArrayList就是数组列表,主要用来装载数据,当我们装载的是基本类型的数据int,long,boolean,short,byte…的时候我们只能存储他们对应的包装类,它的主要底层实现是数组Object[] elementData。与它类似的是LinkedList,和LinkedList相比,它的查找和访问元素的速度较快,但新增,删除的速度较慢。小结:ArrayList底层是用数组实现的存储。特点:查询效率高,增删效率低,线程不安全。使用频率很高。正常使用的场景中,都是用来

2022-05-12 22:24:15 296

原创 单例Bean对象

单例Bean对象– >> finishBeanFactoryInitialization实例化bean是放在finishBeanFactoryInitialization(beanFactory)方法中的。finishBeanFactoryInitialization方法中执行beanFactory.preInstantiateSingletons(),用于实例化所有非懒加载的单例bean.protected void finishBeanFactoryInitialization(Con

2022-05-12 22:18:57 386

原创 Kafka基础

Kafka基础Kafka部分名词解释如下:Kafka 的发布订阅的对象是topic。我们可以为每类数据创建一个topic,把向topic发布消息的客户端称作producer,从topic订阅消息的客户端称作consumer。Producers和consumers可以同时从多个topic读写数据。一个kafka集群由一个或多个broker服务器组成,它负责持久化和备份具体的kafka消息。Broker:Kafka节点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。

2022-05-12 22:17:11 328

原创 SpringMVC面试合集

SpringMVC面试合集1、什么是Spring MVC ?简单介绍下你对springMVC的理解?Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。2、SpringMVC的流程?(1)用户发送请求至前端控制器DispatcherServlet;(2) DispatcherServlet收到

2022-05-12 22:11:48 209 1

原创 经典程序解析

经典程序解析一输出结果?public class Demo01 { public static void main(String[] args) { boolean isNull = true; System.out.println(isNull ? getValue(isNull) : 0); } private static Integer getValue (boolean isNull) { return isNull

2022-05-12 21:58:30 203

原创 全局异常捕获

全局异常捕获减少代码中的非必要try catch处理,增加全局异常处理。ResultBean,ResultUtil为通用controller返回结果处理,自行定义即可。关键:@RestControllerAdvice@Slf4j@RestControllerAdvicepublic class GlobalExceptionHandler { // 默认的异常捕获 @ExceptionHandler({Throwable.class}) public ResultBean exceptio

2022-05-12 21:46:07 1819

个人使用,网络拓扑图案例

个人使用,网络拓扑图案例

2022-09-29

单点登录笔记(个人使用)

单点登录笔记(个人使用)

2022-06-14

JAVA开发中重用到的Utils,通用工具类 utils.rar

JAVA开发中重用到的Utils,通用工具类

2021-09-13

springclouddemo.rar

这是一份springcloud学习笔记Eureka集群,持续更新学习。

2021-09-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除