- 博客(35)
- 收藏
- 关注
原创 RocketMQ篇:一文读懂RocketMQ:工作原理之核心技术解析
本文将从消息队列、消费者组与Topic、消费进度有序监控、broker集群实现水平扩展、集群大脑nameServer、消息存储、消息积压问题处理、事务消息实现、延迟消息实现、消费顺序实现、消息可靠性保证、消息过滤、死信队列、长轮询优化等专题逐一为大家深入浅出探究RocketMQ原理技术。先来个重点三问:消息多了,消费者处理不过来,怎么办?多个消费者抢占同一个队列,怎么办?机器挂了,数据丢了,怎么办?
2025-10-29 13:29:34
312
原创 spring篇:一文读懂spring:工作原理之核心技术解析
本文将从IOC的加载过程、bean的生命周期、循环依赖问题处理、AOP的底层实现、事务实现方式原理、事务传播机制、springMVC工作原理、mybatis插件运行原理、springboot自动配置原理等专题逐一为大家深入浅出探究spring原理技术。
2025-10-23 22:49:14
1369
1
原创 spring切面技术之代码优雅设计-偷梁换柱与以彼之道还施彼身
本文针对多系统共用Redis导致的key冲突问题,提出三种解决方案:全量代码修改、工具类重构和切面技术。重点阐述第三种方案,通过AOP技术对RedisTemplate的public方法进行拦截,在不修改原工具类的情况下,自定义实现类完成key前缀的自动添加。方案采用"偷梁换柱"策略,保留原有功能的同时增加前缀处理逻辑,实现零侵入式改造。最终通过配置化方式实现通用性,既保证系统隔离性,又维护了代码优雅性。该方案体现了Spring技术的灵活运用,在满足业务需求的同时,展现了技术方案设计的艺术
2025-10-23 14:21:49
325
原创 并发篇:一文读懂并发编程:工作原理之核心技术解析
本文将从线程的生命周期、java内存模型、JVM的内存区域、关键字Volatile、Synchronized、抽象队列同步器AQS之实现ReentrantLock、countDownLatch、Semaphore,以及sleep、wait、join、yield等重点方法等专题逐一为大家深入浅出探究并发编程原理技术。
2025-10-21 21:42:10
593
原创 JVM内存分配机制
对象创建对象创建流程图1.类加载检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 new指令对应到语言层面上讲是,new关键词、对象克隆、对象序列化等。2.分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。①如何划分内存?
2025-10-19 22:06:32
409
原创 集合篇:一文读懂HashMap:工作原理之核心技术解析
本文将从HashMap的数据结构,基本工作原理等技术底层出发逐一为大家深入浅出探究HashMap核心技术,并且针对一些底层细节技术问题如hash碰撞,链表成环,数据安全等作了深入的分析。我们在使用HashMap集合的时候,调用put方法即可实现数据存入,调用get方法即可实现数据取出,那么在这一过程当中,我们就要思考,HashMap底层究竟是如何实现的?
2025-10-19 21:57:35
305
原创 mysql篇:一文读懂mysql:工作原理之核心技术解析
本文将从mysql基本工作原理,底层数据结构,索引的基本原理和设计原则,sql优化,事务基本特性和隔离级别,MVCC机制等专题逐一为大家深入浅出探究mysql核心技术。简单来讲,我们程序员写好一份sql,mysql拿到这份sql之后,就会进行语法解析,表名字段预处理,优化好之后交给它的执行引擎去执行处理,最后将执行结果返回给我们。上述呢是一个整体的思路,围绕这个思路,我们接下来进入正题…
2025-10-18 19:07:38
270
原创 JVM篇:一文读懂JVM:工作原理之核心技术解析
简单来讲,我们程序员写好一份java文件,然后由java编译器编译成class文件,这个class文件就存在磁盘当中了,JVM需要将这个文件从磁盘上加载到JVM的内存当中以待使用,当我们发出一个new的指令时,JVM就会从内存当中去找这个对象的类元信息,然后根据这个类元信息创建对象,并且将这个对象放在JVM内存当中以待使用...等到使用完毕,就会将这个对象回收。 上述呢是一个整体的思路,围绕这个思路,我们接下来进入正题...
2025-10-18 18:24:03
826
原创 微服务架构与单体架构的区别
微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。SOA架构强调的是异构系统之间的通信和解耦合,而微服务架构强调的是系统按业务边界做细粒度的拆分和部署。
2022-10-23 11:47:11
1491
原创 spring篇:IOC容器加载过程源码探究(三)
承接上篇IOC容器加载过程源码探究(二)继续分析refresh()方法:postProcessBeanFactory(beanFactory)方法这个方法是个空方法:留给子类去实现的,说到这个方法,插曲:这个接口BeanFactoryPostProcessor 中也有postProcessBeanFactory方法,咱们可以实现BeanFactoryPostProcessor接口中的这个postProcessBeanFactory方法,以后在分析扩展点时会重点讲。invokeBeanFactoryP
2022-06-12 15:29:04
235
原创 Zookeeper特性与节点数据类型详解
目标1.什么是Zookeeper2.Zookeeper核心概念3.Zookeeper ACLs权限控制在了解Zookeeper之前,需要对分布式相关知识有一定了解,什么是分布式系统呢?通常情况下,单个物理节点很容易达到性能,计算或者容量的瓶颈,所以这个时候就需要多个物理节点来共同完成某项任务,一个分布式系统的本质是分布在不同网络或计算操机上的程序组件,彼此通过信息传递来协同工作的系统,而Zookeeper正是一个分布式应用协调...
2022-06-05 14:00:51
295
原创 RabbitMQ与springboot整合
RabbitMQ与springboot整合生产者1.创建生产者SpringBoot工程2.引入RabbitMQ相关依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>编写yml配置# 配置RabbitMQ的基本信
2021-01-05 16:02:42
195
原创 RabbitMQ与spring整合
Spring整合rabbitMQ步骤:生产者①创建生产者工程②添加依赖③配置整合④编写代码发送消息消费者①创建消费者工程②添加依赖③配置整合④编写消息监听机器代码示例生产者1.创建生产者工程(spring-rabbitmq-producer)2.引入相关依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-co
2021-01-04 16:47:39
272
原创 RabbitMQ工作模式
工作模式上期已经介绍了简单模式和工作队列模式,本期接着上期继续。发布订阅模式P:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机)C:消费者,消息的接收者,会一直等待消息到来Queue:消息队列,接收消息、缓存消息E:交换机(Exchange)。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有常见以下3种类型:Fanout:广播,将消息交给所
2021-01-04 16:37:33
249
原创 RabbitMQ入门篇
MQ基本概念Message Queue(消息队列),是在消息传输过程中保存消息的容器。多用于分布式系统之间进行通信。MQ的优势1.应用解耦系统耦合性越高,容错率就越低,可维护性就越低2.异步提速提升用户体验和系统吞吐量(单位时间内处理请求的数目)3.削峰填谷提高系统稳定性MQ的劣势1.系统的可用性降低系统引入的外部依赖越多,系统的稳定性越差。MQ一旦宕机,就会对业务造成影响,如何保证MQ的高可用?2.系统的复杂度提高MQ的加入大大增加了系统的复杂度,以前是系统的同步远程调用,
2020-12-28 15:58:16
200
原创 ArrayList和LinkedList的区别、优缺点以及应用场景详解(一)
ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用。下面我们通过源码和数据结构来说明一下ArrayList和LinkedList的区别、优缺点以及应用场景。首先,我们模拟一下接口List:/***线性表@author*/public interface List {//返回线性表的大小,及数据元素的个数int size();...
2020-11-19 14:46:03
286
原创 spring篇:IOC容器加载过程源码探究(二)
上节文章说到实例化AnnotatedBeanDefinitionReader完毕,本节继续上节文章,
2020-10-29 22:45:36
211
原创 spring篇:IOC容器加载过程源码探究(一)
上篇文章是从宏观的角度分析spring IOC的加载过程,通过上篇文章,我们对spring IOC的加载过程有了个整体的认识。本节主要从源码的层面去分析我们的springIOC加载过程。springIOC加载过程1.实例化容器AnnotationConfigApplicationContext:AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainTest.class);An
2020-10-26 22:45:12
330
转载 Mybatis高性能批量插入方法
当使用Mybatis大量插入时可以利用MySQL语句的特性使原来多次请求插入的语句变成一次请求,以此提高插入效率。一般的插入方式 //1000条数据,一条一条的插入 @Test public void testInsert() { SqlSession sqlSession = sqlSessionFactory.openSession(true); UserMapper userMapper = sqlSession.getMapper(UserMapp
2020-08-31 12:00:38
460
转载 java.security.InvalidKeyException: Illegal key size解决方案
AES加密报错: Illegal key size解决方案错误信息:java.security.InvalidKeyException: Illegal key size原因:因为美国法律限制,JAVA默认支持AES 128 Bit 的key, 如果你计划使用 192 Bit 或者 256 Bit key, java complier 会抛出 Illegal key size Exception解决方案有两种:设置设置key的长度为16个字母和数字的字符串(128 Bit/8=16字符)就不报错
2020-08-31 11:12:21
351
原创 MVCC多版本并发控制机制详解
MVCC多版本并发控制机制上节我们说到了事务的ACID特性和四种隔离级别,其中在可重复读级别下是如何保证事务较高的隔离性的?对,就是靠MVCC(Multi-Version Concurrency Control)机制来保证的。Mysql在读已提交和可重复读隔离级别下都实现了MVCC机制。好,下面我们来好好说道说道这个MVCC。undo日志版本链与read view机制话说不是要好好说道说道MVCC吗?怎么扯到了这个undo和read view了呢?undo日志版本链是指一行数据被多个事务依次修改过后,
2020-08-30 22:45:55
466
原创 mysql事务隔离级别与锁机制
事务及其ACID属性事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。原子性(Atomicity) :事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。一致性(Consistent) :在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规 则都必须应用于事务的修改,以保持数据的完整性。隔离性(Isolation) :数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的
2020-08-21 15:07:24
144
原创 MySql索引实践(一)
索引的基本原理索引的实质就是一种排好序的数据结构。其原理很简单,就是将无序的数据变成有序的查询。1.把创建了索引的列的内容进行排序。2.对排序结果生成倒排表。3.在倒排表内容上拼上数据地址链。4.查询时,先拿到倒排表内容,再取出数据地址链,最后拿到具体的数据。...
2020-08-12 12:03:20
308
原创 springmvc传递json数据报415错误
以前,一直以为在SpringMVC环境中,@RequestBody接收的是一个Json对象,一直在调试代码都没有成功,后来发现,其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,用JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: “json”,contentType:“application/json” 这样就可以将一个对象或者List传到Java端,而jav
2020-08-12 11:05:48
381
原创 Mysql存储引擎(Innodb存储引擎、MyISAM存储引擎)
存储引擎Storege engine:MySql中的数据、索引以及其他对象是如何存储的,是一套文件系统的实现。常见的存储引擎:Innodb引擎:Innodb提供了对数据库ACID事务的支持,并且提供了行级锁和外键的约束。其设计的目标就是处理大数据容量的数据库系统。MyISAM引擎:不支持事务、行级锁、外键。MEMORY引擎:所有数据都在内存中,处理数据极快,但是安全性不高。Innodb索引与MyISAM索引的区别:Innodb索引是聚簇索引;MyISAM索引是非聚簇索引。Innodb的主键索引
2020-08-01 22:15:19
151
原创 Tomcat打破双亲委派机制
上篇文章主要分析了JVM类加载机制,本篇文章承接上篇文章,主要是分析tomcat打破双亲委派机制,建议在看本文之前,先去看看上篇,地址:
2020-07-18 18:19:02
2635
原创 从JDK源码级别深度解析JVM类加载机制
1.运行main方法启动程序时,需要通过类加载器将这个类加载到JVM内存中。加载过程加载:在硬盘中查找并通过IO读入字节码文件,只加载使用到的类。验证:是否符合JVM的要求规则;准备:为静态变量分配内存,并且赋值为默认值;解析:引用符号替换为直接符号,简单的说就是静态方法替换为指向数据所存内存的指针;初始化:为静态变量初始化指定的值,执行静态代码块。public class Test { public static final int intNum = 1...
2020-07-10 11:16:06
998
转载 Mysql索引原理优化
MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问...
2020-05-05 14:49:38
125
转载 java. Lang. IndexOutofBoundsException: Index: 0,Size: 0
java. Lang. IndexOutofBoundsException: Index: 0,Size: 0at java .util. ArrayL ist . RangeCheck (ArrayL ist. java :547)t java .util. ArrayL ist . get (ArrayL ist . java :322)at Com . cshg. basicframe...
2020-05-05 14:02:46
1005
原创 ftp上传图片,在windows上没有问题,在linux上就上传失败
问题:boolean savesfzzp = FtpUtils.upload(systemType,ftpHost, Integer.valueOf(ftpPort), ftpUser, ftpPwd, “sfzzp/”,ac01Bean.getAac001(), new ByteArrayInputStream(Base64.decodeBase64(ac01Bean.getBah312()))...
2020-05-05 13:21:16
701
转载 常见的Java代码优化总结
1.对象的重用例如:String 、StringBuffer、StringBuilder出现字符串连接时,应该用stringBuffer(线程安全)/StringBuilder(线程不安全).2.尽可能使用局部变量调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快,其他变量,如静态变量、实例变量等,都在堆中创建,速度较慢。另外,栈中创建的变量,随着方法的运行结束,这些内容...
2020-03-20 21:48:09
159
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅