自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不积硅步,无以至千里

但行好事,莫问前程

  • 博客(74)
  • 资源 (2)
  • 问答 (2)
  • 收藏
  • 关注

原创 Java 探针技术:java agent

在JVM中运行中,类是通过classLoader加载.class文件进行生成的。在类加载加载.class文件生成对应的类对象之前时,我们可以通过修改.class文件内容(就是字节码修改技术),达到修改类的目的。JDK提供了对字节码进行操作的一系列api,而使用这些api开发出的程序就可以称之为java agent。......

2022-06-13 18:20:43 9608 21

原创 servlet3.0+事件驱动实现高性能长轮询

主要介绍servlet3.0异步特性和基于事件驱动实现长轮询demo。

2022-01-05 18:16:25 869 2

原创 攻破zookeeper选举流程(附带手写实现)

本文主要讲解zookeeper选举原理,然后手写zookeeper选举流程,手写版本更加精简,便于理解分布式中间件选举落地的实现。

2021-12-06 17:16:43 2390 6

原创 由源码深入Java类加载器(双亲委派模型)

JVM类加载器JVM主要有以下几种类加载器:引导类加载器主要加载JVM运行核心类库,位于JRE的lib目录下,如rt.jar中的类。扩展类加载器主要加载JVM中扩展类,位于JRE的ext目录下。应用程序类加载器主要负责加载ClassPath路径下的类,也就是业务类。自定义加载器负责加载用户自定义路径下的类。类加载器关系...

2021-07-16 17:06:25 21648 16

原创 java如何获取当前应用的版本?

当应用需要根据版本读取对应文件执行时,就需要获取到当前应用的版本。

2024-03-22 09:44:41 553

原创 应用启动:OOM command not allowed when used memory > ‘maxmemory‘

应用启动的时候出现报错:OOM command not allowed when used memory > ‘maxmemory‘根据报错信息,应该是redis内存不够导致的异常。

2023-08-04 09:40:55 3318

原创 Java开发必备技能:RocketMQ

官方文档可见:https://github.com/hiwei-zhang/rocketmq/tree/develop/docs/cnRocketMQ由以下这几个组件组成负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。生产者中,会把同一类Producer组成一个集合,叫做生产者组,这类Producer发送同一

2022-12-15 15:27:58 1794

原创 java开发必备技能:mysql

数据库性能取决于多种因素,例如表的结构、查询语句和服务器配置等。在数据库级别进行优化:如表结构的优化,存储引擎的选择,mysql的配置等。在硬件级别进行优化:如使用SSD硬盘,CPU和内存优化。在使用级别优化:优化sql语句,集群架构,读写分离。

2022-12-15 15:27:18 936

原创 异步输出日志导致业务线程超时问题

业务线程经常超时,排查时mysql、CPU和GC均无异常。

2022-12-15 15:06:06 465

原创 mybatis查询时间字段格式化处理

数据库字段时间字段设置类型为datetime时,查询返回值格式化。

2022-12-15 14:40:21 3774

原创 易忽视的@Transactional失效问题

事务失效解决办法

2022-08-30 17:21:49 455

原创 JDK1.8 ConcurrentHashMap的死循环bug

JDK1.8 ConcurrentHashMap的死循环bug

2022-06-15 16:43:14 1580 3

原创 Java SPI解析与应用场景

详细讲解Java spi的使用和应用场景。另外也解析了springboot自动装配对spi的使用。

2022-05-25 14:43:13 2570 5

原创 mysql知识点

mysql sql执行流程、锁、死锁问题、sql优化。

2022-05-17 10:27:37 338 2

原创 Spring扩展点

如何在所有Bean创建完后做扩展?方式一Spring在容器刷新完成后会注册ContextRefreshedEvent。所以可以自定义事件监听器监听该事件进行扩展。监听器实现:@Componentpublic class ContextRefreshedEventListener implements ApplicationListener<ContextRefreshedEvent> { @Override public void onApplicationEven

2022-05-01 12:30:00 328 4

原创 通过代码理解分布式事务:XA模式

什么是XA?看百科:XA协议由Tuxedo首先提出的,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。Oracle、Informix、DB2和Sybase等各大数据库厂家都提供对XA的支持。XA协议采用两阶段提交方式来管理分布式事务。XA接口提供资源管理器与事务管理器之间进行通信的标准接口。资源管理器(RM):就是一种存储数据的服务,例如Mysql和Oracle。事务管理器(TM):在分布式系统中,每个系统的有自己单独的本地事务,如何让这些事务组成一个完整的事务?这就是事务管

2022-04-20 18:05:16 1159 7

原创 RocketMQ核心知识

RocketMQ核心知识点

2022-04-18 17:53:26 1676

原创 zookeeper总结

什么是zookeeper?官方文档上这么解释zookeeper,它是一个分布式协调框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。文件系统数据结构:监听通知机制客户端注册监听它关心的任意节点,或者目录节点及递归子目录节点。如果注册的是对某个节点的监听,则当这个节点被删除,或者被修改时,对应的客户端将被通知如果注册的是对某个目录的监听,则当这个目录有子节点被创建,或者

2022-03-25 16:14:33 2076 1

原创 redis核心知识点总结(超详细)

redis核心知识点总结,超详细

2022-03-24 15:17:36 4418 1

原创 spring+springmvc+mybatis原理总结(附流程图)

本文主要分析spring、springmvc和mybatis架构原理,绘制多张流程图,便于理解ssm框架底层设计原理。

2022-03-22 19:42:47 1315

原创 并发编程知识点总结

java并发编程知识点总结,高并发必看

2022-03-17 17:29:33 323

原创 手写限流框架:限流算法落地实现

项目描述本项目是基于Springboot开发的限流工具starter,开箱即用。提供限流兜底扩展点和业务异常处理扩展点,便于自定义降级逻辑。限流模式立即拒绝:采用滑动窗口算法,精准限流排队等待:采用漏桶算法,能设置超时时间,进行请求排队等待限流。使用方式打jar包到本地引入依赖 <dependency> <groupId>com.hiwei</groupId> <artifact

2022-03-12 15:43:31 526

原创 springboot starter如何在宿主应用启动完成后进行启动?

在微服务架构中,我们使用的spring cloud是非常依赖springboot的。许多中间间都有对starter的支持,有时这些starter是需要在业务应用启动完成后再进行加载启动的。例如nacos的client,需要在业务应用启动完成后再进行服务注册。springboot应用启动完成后会发布ServletWebServerInitializedEvent事件,ServletWebServerInitializedEvent继承了WebServerInitializedEventclass

2022-02-28 19:16:33 355

原创 Nacos源码启动报错解决方法

解决nacos源码启动报com.alibaba.nacos.consistency.entity不存在问题。

2022-02-28 15:42:44 1858

原创 mysql知识点总结

存储引擎MySQL中的存储引擎查看存储引擎:show engines;查看mysql文件存储位置show variables like ‘%dir%’;datadir下存储的是数据文件。Innodb和MyISAM比较建两张表:student和teacherstudent使用的引擎为Innodb,teacher使用MyISAM。create table student( id int(11) not null primary key, uname varchar(20),

2022-02-17 10:15:48 833

原创 深入理解JVM虚拟机

类加载器类加载器:引导类加载器 BootstrapLoader:负责加载支撑JVM运行的核心类库,例如rt.jar/charset.jar扩展类加载器ExtClassLoader:负责加载支撑JVM运行的扩展类库,jre/lib/ext目录下的jar应用类加载器AppClassLoader:负责加载classpath目录下的类,就是加载你自己写的类。自定义类加载器:加载注定路径下的类类加载流程:双亲委派机制:在JVM启动时,会由扩展类加载器加载一个单例的sun.misc.Launcher

2022-02-14 14:54:25 1288 2

转载 5分钟搞懂MySQL行转列

小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL专栏目录 | 点击这里   MySQL行转列,对经常处理数据的同学们来说,一定是不陌生的,甚至是印象深刻,因为它大概率困扰过你,让你为之一愣~ 但当你看到本文后,这个问题就不在是问题,及时收藏,以后谁再问你这个问题,......

2022-01-13 16:40:29 939

原创 Java SPI机制与在JDBC中的应用

介绍java spi原理及其应用场景。

2022-01-01 12:31:59 1298 6

原创 Redis持久化

Redis的持久化方式Redis的持久化有两种方式:RDB和AOF,redis默认采用的是RDB的方式。RDB在默认配置中,Redis将内存数据库快照保存在名字为dump.rdb的二进制文件中。可以配置持久化策略:save N M,让redis在“N秒内至少有M个改动”才会触发一次rdb持久化操作。例如redis的默认策略有:save 900 1 -- 900秒内至少有一个改动save 300 10 -- 300秒内至少有10个改动save 60 10000 -- 60秒内至少

2021-11-05 21:45:00 30103 9

原创 Redis五种数据类型及使用场景

redis的数据类型redis主要支持五种数据类型:string、list、hash、set、zsetredis有很多命令,我们可以查看文档,也可以通过help查看命令:help @stringhelp @listhelp @hashhelp @sethelp @sorted_set例如执行:help @stringstring操作命令及使用场景string常用命令字符串常用操作SET key value; -- 存入一个字符串键值对MSET key1 value

2021-11-05 20:15:00 4182 10

原创 Tomcat是如何启动Spring项目的?

tomcat加载spring IOC流程tomcat在启动ServletContext容器的时候会发布ServletContextEvent事件。Spring就通过实现ServletContextListener接口,监听该事件来监听ServletContext的生命周期。web.xml配置spring IOC配置文件:Spring中ContextLoaderListener实现了ServletContextListener接口:对ServletContext启动监听:在initWebApp

2021-10-26 11:16:19 4960

原创 Spring的Aware机制到底是干什么的?

Aware接口源码分析Spring中定义了Aware接口,该接口并未定义方法。该接口更多的是一个标记的作用,具体方法由子类去定义和实现。Spring内置的许多类都实现了该接口:以ApplicationContextAware为例:ApplicationContextAware接口定义了一个设置应用上下文的方法。该接口的实现类实现该方法,可以做对上下文处理的逻辑。该aware还要对应一个BeanPostProcessor才能生效。Spring中内置了一个ApplicationContextAw

2021-10-19 10:57:28 9401

原创 再简单不过的雪花算法

雪花算法在分布式部署的情况下,生成唯一Id的生成显得很麻烦。雪花算法产生的背景当然是twitter高并发环境下对唯一ID生成的需求,得益于twitter内部牛逼的技术,雪花算法流传至今并被广泛使用。它至少有如下几个特点:能满足高并发分布式系统环境下ID不重复基于时间戳,可以保证基本有序递增(有些业务场景对这个又要求)不依赖第三方的库或者中间件生成效率极高雪花算法原理组成:1bit符号位(0)+ 41bit时间戳 + 10bit机器号 + 12bit序列41bit时间戳,支持约69年。

2021-10-09 10:48:28 3382

原创 Spring监听器

监听器的使用定义事件public class DemoEvent extends ApplicationEvent { private String name; public DemoEvent(Object source, String name) { super(source); this.name = name; } public String getName() { return name; }

2021-09-30 17:42:45 3273

原创 50行代码手写线程池

JVM使用的线程模型是KLT(Kernel Level Thread)模型。KLT是内核级线程模型,线程的创建、阻塞、销毁等操作都是在内核空间进行的。所以在对线程进行操作的时候,要进行用户态和内核态的交换,这个交换是比较耗时。所以为了减少线程频繁创建销毁带来的开销,所以使用池化技术来解决这个问题。

2021-09-29 14:38:17 3143

原创 Java高并发累加器Striped64

原子类在多线程环境下,常用累加操作方式是使用原子类进行累加,例如AtomicInteger、AtomicLong。但是使用原子类在多线程高竞争的情况下,CAS会经常失败,并发效率会大大降低。因为CAS操作失败后要自旋再次进行替换,这样失败的线程就会大量消耗CPU资源。所以在高并发的场景下使用原子类累加器并不是很好的选择。Striped64Striped64是一种高并发累加器,有效解决了原子类累加的弊端。Striped64将线程竞争的操作分散开来,每个线程操作一个cell,而sum则等于base和所

2021-09-07 21:03:41 3493

原创 mysql事务

事务的特性(ACID)原子性(Atomicity)一个事务的操作要么全部成功,要么全部失败。例如事务内有两个操作:insert into student (id,name,age) values (1,'zhangsan',18);update student set age = 20 where id = 2;如果其中任意一条sql执行失败,则这两条sql都要失败,不能成功更新数据。一致性(Consistency)一致性,其实就是要保证结果是预期要达到的结果。而原子性、隔离性和持久化就

2021-06-24 11:32:22 3083 2

原创 mysql索引详解

详解mysql索引

2021-06-17 10:59:24 3413

原创 docker安装mysql并使用

mysql安装拉取镜像docker pull mysql:5.7查看镜像:docker images;启动容器dodocker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7查看运行的容器:docker ps;进入容器docker exec -it 6002d9cd5075 /bin/bash;进入mysql:mysql -u root -p;选择dat

2021-06-15 16:24:56 3125

原创 详解字典树:trie

  字典树又称前缀树,我们根据前缀可以快速查找出该前缀的单词。例如google的搜索:基本结构代码实现:class TrieNode{ public Character c; public boolean hasWord; public HashMap<Character,TrieNode> children = new HashMap<>(); public TrieNode(){ } public TrieNode(Cha

2021-05-28 10:17:51 3106

apache-tomcat-8.5.47-src-master.zip

编译后的tomcat源码,能直接使用idea运行。方便大家研究tomcat

2021-08-03

swing-framework.jar

用于java swing编程的jar包。图形界面编程使用,缺此jar包的可以下载。

2018-07-09

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

TA关注的人

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