自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 快速排序模板

最精简的快排 static void quickSort(int[] q, int l, int r){ // 如果左右指针重合了 if (l >= r) return; // 确定基准值 int x = q[l]; int i = l - 1; int j = r + 1; while (i < j){ while (q[++i] < x);

2020-09-18 23:14:15 245

原创 Knative接收Kafka消息,通过KafkaSource和基于Java实现

Knative接收Kafka消息 knative可以通过POST接收cloudevents格式的HTTP请求,同时knative提供kafkaSource,kafkaChannel,kafkaBinding的方式接收普通kafka消息并转换成cloudevents发到knative service。这里提供基于Java的实现以及kafkaSource的实现。 Java 项目搭建 首先下载cloudevents-java SDK ,然后利用maven将这4个包进行打包,然后手动引入项目 接下来pom这么写,

2020-08-27 16:03:18 985

原创 Centos7安装Zookeeper、Kafka教程导航

导航 一、安装JDK yum 安装JDK 二、安装Zookeeper 下载Zookeeper 下载命令是wget,下载完成后是压缩包,使用tar命令解压缩 安装Zookeeper 三、安装Kafka 安装Kafka

2020-08-07 14:09:35 291

原创 Docker部署mysql,redis,同时部署SpringBoot项目

命令: docker pull mysql docker pull redis 配置Mysql docker run --name mysql -e MYSQL_ROOT_PASSWORD=xym123 -p 3307:3306 -d mysql 配置Redis其中appendonly是AOF的东西 docker run -d --name redis --restart always -p...

2020-04-16 18:39:12 702

原创 红黑树教程

说明 红黑树听起来挺吓人,但当你看完这篇文章后再加上红黑树在线生成练习几次,就能够轻松拿下。 下面的教程中x代表当前插入的节点,xp,xpp,xppl,xppr,uncle,nephewF(far),nephewC(close)分别为父节点,祖父节点,祖父节点的左孩子,祖父节点的右孩子,叔叔节点,远侄子节点,近侄子节点。 左旋:逆时针旋转 右旋:顺时针旋转 reBalanceAfterInsert...

2020-03-22 20:13:37 1101 2

原创 Autowire的实现原理分析,以及Spring如何处理一个Bean的注入

实现自动装配的注解有@Autowire,@Value,@Inject

2020-03-22 15:23:02 1552

原创 mybatis随笔

SqlSession SqlSession提供执行Sql命令,获取Mapper以及事务管理的接口。 内部有selectOne,selectList,selectMap,insert,update,commit,rollback,getConnection等方法。 selectList 作为select操作的最主要的实现,selectOne和selectMap都是通过对selectList的结果进行...

2020-03-21 19:16:53 360

原创 SpringMVC处理流程

doDispatch() getHandler() 遍历已经注册的handlerMapping,调用mapping的getHandler方法 getHandlerInternal,AbstactHandlerMethodMapping::getHandlerInternal()获取HandlerMethod。然后调用getHandlerExecutionChain()获取HandlerExecut...

2020-03-19 22:43:09 234

原创 binlog,redolog,undolog学习笔记

binlog binlog是MySql中所有引擎都有的日志,以二进制格式进行记录。可以使用mysqlbinlog查看内容。其作用主要是恢复和复制。 恢复 由于binlog记录的是事务结束后对数据库产生的数据变化,比如delete/update/create/truncate/drop等。因此它记录的是完整的数据库信息。当数据库数据丢失时,可以通过binlog进行恢复。 复制 在MySql主从同步时...

2020-03-15 11:41:01 559

原创 MySql Read Commit 和 Repeatable Read非阻塞读实现原理

读提交和可重复读 Read Commit 读提交,事务可以读取已经提交的数据。 存在的问题:事务前后读取不一致。 Repeatable Read 可重复读,事务前后读取数据是一致的。 存在的问题:无法处理插入或者删除的数据。 MySql如何实现读提交和可重复读的? innodb的聚簇索引中有2个隐藏字段,叫做trx_id (transaction id),和roll_pointer。 trx_id...

2020-03-12 21:23:05 1233

原创 ThreadLocal原理

ThreadLocal作用 ThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储以后,只有在指定的线程中可以获取到存储的数据,对于其他线程来说则无法取到数据。 ThreadLocal源码 ...

2020-03-12 15:12:40 304

原创 Spring 事务管理器的初始化以及Rollback条件

TransactionManager 事务管理器接口,内部并没有定义任何方法。这里以数据库为例,所以来分析DataSourceTransactionManager DataSourceTransactionManager public class DataSourceTransactionManager extends AbstractPlatformTransactionManager impl...

2020-03-12 14:49:59 1168

原创 Spring Boot的主要流程,启动,获取Bean,注入Bean,以及SpringMVC中响应的主要流程

Spring Boot 启动 SpringApplication的初始化 这里先做new SpringApplication(Class<?> ... primarySources) 创建SpringApplication public SpringApplication(ResourceLoader resourceLoader, Class<?>... primar...

2020-03-11 11:34:46 579

原创 Linux 命令与 Java异常定位

发现阿里云的没有装java,于是以此为引子。 首先判断是否安装java rpm -qa | grep java 其中rpm -qa列出所有安装的程序 | grep作用是将rpm -qa的结果作为文本进行查询 rpm -qa | grep java 就是查询其中文字匹配java的行 发现没有。于是安装之。这里使用yum命令进行安装。 首先使用yum -y list java*列出所有包含java...

2020-03-07 16:20:57 686

原创 Java杂项

注:文中冒号均为中文,复制粘贴时注意。 命令区分大小写 XX 与xx是不一样的。 -Xss规定了每个线程堆栈的大小。一般情况下256K是足够了。影响了此进程中并发线程数大小。 -Xms初始的Heap的大小。等价于 -XX:InitialHeapSize -Xmx最大Heap的大小。等价于 -XX:MaxHeapSize 在很多情况下,-Xms和-Xmx设置成一样的。这么设置,是因为当Heap不够用...

2020-03-07 13:34:25 341

原创 Java死锁分析

死锁代码 package concurrent.lock; public class DeadLock { public static void main(String[] args) { Object o1 = new Object(); Object o2 = new Object(); Thread a = new Thread(...

2020-03-02 21:30:59 289

原创 ThreadPoolExecutor

参数 有7个参数 corePoolSize 核心线程池大小,默认创建的线程个数 maximumPoolSize 线程池最大大小,线程最多创建的个数 keepAliveTime 当线程在这段时间内没有任务时,就销毁 timeUnit 时间单位 blockingQueue 当线程池中任务数量大于maximumPoolSize时,任务加入队列 threadFatory 提供线程的创建方式,可以在里面做一...

2020-03-02 20:44:28 206

原创 ReentrantLock源码分析

ReentrantLock ReentrantLock作为java.util.concurrent.locks中重要的一个锁,是很值得初学者研究的,现在就以一位初学者的视角来看ReentrantLock的主要原理 底层数据结构 根据类图(IDEA中ALT+SHIFT+CTRL+U)可以看出重入锁是分为FairSync(公平)和NonfairSync(非公平)的。 /** Synchronize...

2020-02-29 21:33:39 305

原创 事务隔离级别

脏读(READ_UNCOMMIT) 一个事务能够读取其它事务未提交的数据。 例:A 给 账号里+100元,但是现在没有提交。这时B 读到 账号里的钱多了100。 然后A 发现加错了,改成加50元,然后提交。但是B却多读了50元。 不可重复读(READ_COMMIT) 一个事务在前后两次读取同一个数据时发现前后数据不一致。 例:A 开启事务,读取账号有100元,然后拿着这100元开始消费。花了100...

2019-10-12 15:13:01 209

原创 雪花算法分析与实现

雪花生成过程 https://baike.baidu.com/item/%E9%9B%AA%E8%8A%B1/8012054?fr=aladdin 在冰晶增长的同时,冰晶附近的水汽会被消耗。所以,越靠近冰晶的地方,水汽越稀薄,过饱和程度越低。在紧靠冰晶表面的地方,因为多余的水汽都已凝华在冰晶上了,所以刚刚达到饱和。这样,靠近冰晶处的水汽密度就要比离它远的地方小。水汽就从冰晶周围向冰晶所在处移动。水汽分子首先遇到冰晶的各个角棱和凸出部分,并在这里凝华而使冰晶增长。于是冰晶的各个角棱和凸出部分将首先迅速地增长,

2019-09-01 10:43:45 5186 5

原创 AbstractStringBuilder源码探析

AbstractStringBuilder与StringBuilder,StringBuffer的关系 由图可以知道AbstractStringBuilder是StringBuilder和StringBuffer的父类。同时在StringBuilder和StringBuffer中许多方法都是调用super也就是ASB中的方法进行。关于StringBuilder和StringBuffer的区别在...

2019-08-25 22:32:54 219

原创 Java静态代理与动态代理,JDKProxy和CGLIB

代理模式 代理模式就是隐藏真实对象,而暴露代理对象,而由代理对象去调用真实对象的行为。 静态代理实现 public interface Subject { /** * 处理方法 */ void process(); } 代理类 Subject realSubject; public Proxy(Subject realSubject){ this.re...

2019-08-15 17:59:38 260

原创 JAVA集合框架分析图

2019-08-15 13:31:37 265

原创 SpringBoot,实现AOP通过注解,对指定方法进行记录入参出参和异常,并打包

SpringBoot 实现注解日志功能 并打包进本地Maven仓库需求实现思路需要的依赖类上需要的注解切入点入参记录出参记录异常记录打包打包出来的jar包引用方式日志功能的测试注意!!@SpringBootApplication和@ComponentScan 需求 能够记录请求的参数,请求的返回值,请求出现的异常。 Log日志工具任意。 实现思路 需要的依赖 打包选项 <packaging&...

2019-08-15 13:27:15 1339

原创 JAVA中String类进行比较的几种方式

String类中进行比较有equals(),contentEquals()。 equals的源码 public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { ...

2019-03-26 16:30:19 3246

原创 Object中方法的使用探究

Object类中自带方法的使用探究 我们可以通过new一个Object对象查看其方法。 可以看见里面有9个方法。 equals() equals意为比较。我们查看jdk1.8中自带的src压缩包中Object类并找到equals的源码 public boolean equals(Object obj) { return (this == obj); } 默认情况下...

2019-03-09 11:41:48 298

原创 浅复制与深复制简单研究

浅复制与深复制 浅复制指的是只复制对象本身的值而当对象中有某个属性是其他对象或者数据的引用时,只复制引用地址。所以浅复制所产生的新对象在原对象引用发生改变时也会发生改变。 反之,深复制指复制对象的属性同时,对其引用的对象也进行复制。这样新对象的引用不随着原对象引用的更改而发生改变。 浅复制实现 Object类中的clone()方法在默认情况下是浅复制,使用clone方法时需要实现Cloneable...

2019-03-09 09:45:38 231

空空如也

空空如也

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

TA关注的人

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