- 博客(102)
- 资源 (1)
- 收藏
- 关注
原创 MyBatis 整合SpringBoot 启动源码分析
MyBatis 启动源码分析开启MyBatis 是通过@MapperScan@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(MapperScannerRegistrar.class)@Repeatable(MapperScans.class)public @interface MapperScan { String[] value() default {}; String[]
2021-03-22 16:01:59 293 3
原创 Spring 中 Bean 的生命周期
Spring 中 Bean 的生命周期Spring 最主要的的功能就是Bean的创建使用,所以了解Spring 中Bean 的生命周期是有必要的。在Spring中描述一个配置的Bean是使用 BeanDefinition ,所以对于Bean的初始化流程是扫描读取(XML 或者是注解)Bean的配置,然后在根据BeanDefinition 进行初始化Bean 放到 Spring 容器中。其中在读取配置BeanDefinition 的时候和创建Bean的实例对象的时候,Spring 提供很多的扩展方式参与到
2021-02-25 16:21:17 155 2
原创 MyBatis-Plus的简单使用案例
MyBatis-Plus的简单使用案例gradledependencies { implementation ('org.springframework.boot:spring-boot-starter-web') runtimeOnly 'mysql:mysql-connector-java' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude gro
2021-04-16 09:55:55 386 1
原创 lintcode 625 数组划分
/** * 将一个没有经过排序的整数数组划分为 3 部分: * 1.第一部分中所有的值都 < low * 2.第二部分中所有的值都 >= low并且 <= high * 3.第三部分中所有的值都 > high * 返回任意一种可能的情况。 *输入: * [4,3,4,1,2,3,1,2] * 2 * 3 * 输出: * [1,1,2,3,2,3,4,4] * 解释: * [1,1,2,2,3,3,4,4] 也对, 但 [1,2,1,2,3,3,4,4] 不.
2021-03-27 17:50:14 196
原创 Spring 的事务传播行为
Spring 的事务传播行为TransactionDefinition 中定义了 7 种类型的事务传播行为,是 Spring 框架独有的事务增强特性,不属于的事务实际提供方数据库行为。REQUIRED : 如果当前没有事务,就新建一个事务,如果已经存在,则加入已经存在的事务REQUIRES_NEW :新建事务,如果当前已经有事务就挂起当前事务SUPPORTS :支持当前事务,如果没有事务就已非事务方式运行NOT_SUPPORTED :以非事务方式运行,如果当前存在事务,就挂起MANDATORY
2021-02-21 17:27:00 155
原创 Spring Cloud Stream RocketMq 的使用
Spring Cloud Stream RocketMq 的使用RocketMq相关基本概念与安装docker-compose 安装RocketMq分布式事务相关说明RocketMq 可以发送事务消息RocketMq 事务消息的基本原理是注意:使用RocketMq 发送事务消息,这里主要解决的是生产者执行事务后确保消息有发布到Mq 并可以被消费。消费者按照正常消费就好,但是要确保消息多次消费的结果是要一致相等的(幂等性,不确保只消费一次),多次消费失败就会进入死信队列(可以按照正常消费信息一
2021-01-13 18:29:48 2059
原创 分布式事务相关说明
分布式事务相关说明一张图了解事务中的角色XA 是由X/Open组织提出的分布式事务的规范。 XA规范主要定义了(全局)事务管理强(RM)和(局 部)资源管理器(RM)之间的接口。事务的ACID 特性:A (原子性):整个事务中的所有操作要么全做,要么全不做C(一致性) :事务的执行必须保证系统的一致性,例如:A有200元,B有100元,一个事务里A成功转给B50元,只要事务执行成功了,那么最后A定是150元,B是150元I (隔离型) :事务和事务之间互不影响,一个事务的中间状态是不会被其他
2021-01-12 12:04:22 177
原创 平衡二叉树(AVL 树)
平衡二叉树(AVL 树)为什么会有这个平衡二叉树,因为二叉排序树,最极端的情况是变成单向的链表,这样二叉树的搜索速度就变差了,所以需要将二叉树平衡的分布定义:是一种二叉排序树(左结点比父结点小,右结点比父结点大),其中每一个结点的左子树和右子树的高度差最多等于1,结点的左子树深度减去结点右子树深度的值称为平衡因子BF(Balance Factor )。距离插入结点最近,且平衡因子的绝度之大于1的节点为根的子树,叫最小不平衡子树平衡二叉树的图解构建过程结点旁边的是平衡因子平衡因子大于1 进行右旋转
2021-01-09 18:19:45 286
原创 赫夫曼树定义原理说明
赫夫曼树定义原理说明从树(二叉树)中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上分支数目称做路径长度。树的路径长度是从树根(根节点)到每个结点的路径长度之和a图中,根节点到结点D的路径长度就为4,b图中根节点到D的路径长度为2.a图中树的路径长度:1+1+2+2+3+3+4+4=20,b图中树的路径长度:1+2+3+3+2+1+2+2=16假设有n个权值{w1,w2,…,wn},有n个结点的二叉树,每个结点带权wk,对应叶子的路径长度为lk,则其中带权路径长度WPL 最小的二叉树
2021-01-06 16:57:59 375
原创 遍历二叉树方法
遍历二叉树方法前序遍历:二叉树为空,空操作返回,否则先访问根节点,然后前序遍历左子树,在前序遍历右子树。下图的遍历顺序为:ABDGHCEIF中许遍历: 若树为空,则空操作返回,否则从根节点开始(不是先访问遍历根节点),中序遍历根节点的左子树,然后访问根节点,最后中序遍历右子树。下图的遍历顺序是GDHBAEICF后序遍历: 树为空,空操作返回,否则先左到右先叶子后节点的方式遍历访问左右子树,最后访问根节点,下图遍历顺序:GHDBIEFCA层序遍历:树为空,空操作,否则从第一层(根节点)开始访问
2021-01-05 16:50:56 111
原创 docker-compose 安装RocketMq
docker-compose 安装RocketMq单Master模式:这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用。不建议线上环境使用,可以用于本地测试。注意:nameserver 和 broker 组成服务的叫做master,不是指其中的nameserver或brokersingle-master.yamlversion: "3.8"networks: default: external:
2021-01-04 09:26:32 615
原创 RocketMq相关基本概念与安装
RocketMq相关基本概念RocketMq: 一个低延迟、高可靠、可伸缩、易于使用的分布式消息中间件(消息队列),由Producer(负责生产消息)、Broker(Broker 负责存储消息)、Consumer( 负责消费消息) 。Broker 在实际部署过程中对应一台服务器,每个 Broker 可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 Broker。Message Queue 用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中。
2020-12-29 17:56:01 287
原创 Dubbo Nacos Sentinel 整合使用
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2020-12-26 18:25:35 556
原创 Sentinel服务限流及熔断的一些基本知识
Snetinel服务限流及熔断的一些基本知识服务限流:通过限制并发访问数据或者限制一段时间内(时间窗口内)允许处理的请求数量来保护系统,不会出现崩溃(或者一些其他的业务关系)。表现的形式是:牺牲一部分用户的可用性来维持系统的稳定性常用的限流算法计算器算法:指定的周期内累加访问次数,当访问次数达到设置的阈值时,触发限流策略(返回一个默认的结果,或者拒绝服务),进入下一个周期,累加次数清除。可以用于短信服务(或者一些免费服务)的次数上进行限制,比如每个用户在同一分钟内只能触发一定数量的短信服务这种
2020-12-23 02:34:16 767
原创 docker 运行 Sentinel Dashboard java程序
docker 运行 Sentinel Dashboard java程序上一篇指令相关解释当前的目录显示[root@VM-0-10-centos sentinel]# lltotal 24332-rw-r--r-- 1 root root 235 Dec 19 17:55 Dockerfile-rw-r--r-- 1 root root 24909355 Dec 19 19:05 sentinel-dashboard.jar[root@VM-0-10-centos sentinel]
2020-12-19 20:29:47 367 1
原创 KMP 模式匹配算法的简单说明
KMP 模式匹配算法的简单说明KMP 是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt 发明用于解决在一个主的字符串(主串)中搜索一个字符串(模式串)定位的算法。(也就是关键字搜索)定义:主串—S 模式串—T假设不使用KMP 模式匹配算法,我们用最简单的算法去解决 在S中搜索 T 的位置,结果就是使用暴力的方式将所有的情况进行遍历一遍//最差时间复杂度O(n*m) public static int simpleGetSTIndex(String s,Str
2020-12-17 15:32:39 187
原创 Sentinel 简单使用案例
Sentinel 的简单介绍与使用gradle 中的主要配置ext { set('springCloudAlibabaVersion', "2.2.1.RELEASE")}dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-sentinel'
2020-12-11 18:11:30 802
原创 Java 线程的相关知识概念
Java 线程的相关知识概念进程:代码在数据集合上的一次运行活动,是系统(操作系统)进行资源分配和调度的基本单位线程:线程是进程的一个执行单位,一个进程中至少有一个线程,进程中的多个线程共享进程中的资源,是cpu执行的基本单位,也是cpu分配(cpu资源)的基本单位程序计数器:一块内存区域,记录当前线程要执行的指令地址,并且是私有的。(因为Cpu是时间片的执行各个线程的代码,所以必须有一个程序计数器记录当前代码的执行情况,如果执行是native 方法,pc计数器记录的是undefined地址,只有执行
2020-12-07 09:20:27 115 1
原创 Nacos (Spring Alibb Cloud)的使用 整合dubbo
Nacos 配置中心的使用(一些比较坑的点也会说明)上一篇 Docker 安装 nacosnacos-dubbo-consume工程的gradle部分(想看类似的工程结构)这里的目的是告诉大家引用的是什么版本的nacosplugins { id 'org.springframework.boot' version '2.2.11.RELEASE' id 'io.spring.dependency-management' version '1.0.10.RELEASE'}ext
2020-11-30 12:06:19 464
原创 Docker 安装 nacos
Docker 安装 nacos (单机)docker-compose安装启动内存空间不足,添加交换空间docker 的版本和 docker-compose 的版本[root@VM-0-10-centos ~]# docker-compose --versiondocker-compose version 1.27.4, build 40524192[root@VM-0-10-centos ~]# docker --versionDocker version 19.03.13, build 4
2020-11-16 19:02:20 409 2
原创 安装Docker Compose
基于Centos7 安装Docker Compose# 下载,需要安装其他版本的话,修改下面命令中的版本号即可sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 赋予二进制文件可执行权限sudo chmod +x /usr/local/bin/docker-c
2020-11-14 18:18:11 270
原创 Centos 添加交换空间
基于Centos7 添加交换空间当RAM运行内存使用完毕或者不够的时候,可以使用交换空间(部分硬盘空间)缓解一下内存不足。#是否已启用交换功能,输出为空则没有 或者可以使用free -h 查看swap sudo swapon --show#创建1G的交换空间文件,如果不支持这个命令可以使用sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576sudo fallocate -l 1G /swapfile#设置交换文件的权限 确保只有root用
2020-11-14 16:49:54 400
原创 基于SpringCloud Alibaba dubbo 和 zookeeper的集群容错,负载均衡,服务降级简单使用
基于SpringCloud Alibaba dubbo 和 zookeeper的集群容错,负载均衡,服务降级简单使用内容基于Gradle 创建的工程上一篇 Dubbo 的简单使用 服务提供者application.propertiesdubbo.protocol.port=9001dubbo.protocol.name=dubbodubbo.application.name=sample-cloud-dubbo-providedubbo.application.id=sample-cloud
2020-11-11 18:13:31 350
原创 Java 分析 程序CPU 占用高的原因
Java 分析 程序CPU 占用高的原因背景:最近突然发现线上测程序长时间CPU 占用过高。内存确没有什么消耗。这种情况下可以排除死锁(一般死锁之后,如果不是自旋锁的话,CPU 占用都不会很高),也排除频繁GC(因为内存消耗正常)所以这个时候,我就想着如何分析Java 程序中哪条线程的CPU 使用率比较高先找到java 程序运行的pid (top c)用ps -mp 进程id(pid) -o THREAD,tid.time 分析java 程序的进程状态...
2020-11-10 18:22:50 2478
原创 Docker 安装 Mysql 并外部配置启动
Docker 安装 Mysql 并外部配置启动docker search mysql # 查询镜像docker pull mysql #下载镜像准备挂载的目录和配置文件mkdir /home/mysql/mkdir /home/mysql/custommkdir /home/mysql/custom/confmkdir /home/mysql/custom/datavim /home/mysql/custom/conf/my.cnfmy.cnf内容# Copyright (c) 2
2020-11-04 15:30:42 497
原创 基于docker 配置启动 zookeeper
基于docker 配置启动 zookeeper(单机)常用的配置说明# zookeeper 中每个tick的基准值tickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgement
2020-11-02 16:07:54 727
原创 docker 通过配置启动 redis
基于docker(版本19.03) 通过配置启动 redis(单机版本)redis.conf我的配置文件#服务启动监听的端口号port 6379#在后台运行(守护进程方式):默认no ,yes 会使配置启动失败#daemonize yes#设置打印级别loglevel debug#日志文件logfile "/data/redis.log"#持久化appendonly yes启动脚本docker run -p 6380:6379 --name customRedis -v /ho
2020-10-31 17:03:34 249
原创 Zookeeper 的简单介绍
关于Zookeeper 的简单入门说明Zookeeper版本3.5.6前言:这篇博客讲的是纯理论和一些简单入门的概念和说明。如果对Zookeeper已经有过了解的可以不用看这篇废话的的博文了用最简单的说法来描述Zookeeper的话:文件系统(类似)+监控(对于文件系统的增删改查的监控通知)Zookeeper 概念Java 编写的高性能分布式协调中间件(主要的功能,开发出来就是为了这么用的,当然也没说不能用于其他的方式,看具体的需求),协调各个服务进程的访问控制问题(类似多线程的同步之类的)。注意
2020-10-29 02:00:36 127
原创 Docker安装 Zookeeper单机部署
基于Docker version 19.03.13 安装 Zookeeperdocker安装下载对应的zookeeper镜像docker search zookeeper #查找对应的镜像docker pull zookeeper:latest#下载最新的zookeeper镜像#docker pull zookeeper:3.5.x 下载对应版本的的镜像单机部署#single zookeeper docker run -d -p:2182:2181 --name single-zooke
2020-10-28 17:16:22 1505
原创 编写一个SpringBoot 工程的start 模块
编写一个SpringBoot 工程的start 模块其实就是讲将打包的的jar工程(被依赖的工程)里的Bean的创建交给当前工程的Spring IOC,一般情况下Spring是不会扫描jar中的包的所以就无法将jar中的Bean 正常的加载到当前的Spring IOC中,但是SpringBoot 提供了一种方式在resources\META-INF\spring.factories 配置次jar的javaConfig 就可以实现将jar包中的Bean加载到当前Spring 环境中去工程目录结构配置
2020-10-20 18:29:23 958 4
原创 SpringBoot dubbo 的简单使用注解版本
SpringBoot dubbo 的简单使用注解版本关于工程的关系配置 可以看上一篇关于dubbo 的引用是 implementation group: 'org.apache.dubbo', name: 'dubbo-spring-boot-starter', version: '2.7.6'alibb-dubbo-mineserviceapi 模块 ---- 接口模块public interface AnnotationDemoService { String sayHello(
2020-10-17 18:19:25 451
原创 SpringBoot dubbo 的简单使用 xml 版本
SpringBoot dubbo 的简单使用 xml 版本使用gradle 创建父子工程dubbo 其实就是一个rpc 的远程调用的框架(主要功能),具体已经实现好了 ,并且dubbo 中实现了一些监控的功能alibb-cloud-study 父工程//setting.gradlerootProject.name = 'alibb-cloud-study'include 'alibb-dubbo-mineserviceapi'include 'alibb-dubbo-provider'in
2020-10-16 18:18:58 310
原创 Spring @ConfigurationProperties 和 @EnableConfigurationProperties 的使用
Spring @ConfigurationProperties 和 @EnableConfigurationProperties 的使用@ConfigurationProperties 的使用@Component@ConfigurationProperties("dev") // 将其和配置文件中的dev开头的属性进行关联public class DevConfig { private String user;//配置文件中的dev.user 的映射 public Strin
2020-10-13 11:11:23 386 1
原创 shell 常用查看log 的命令
shell 常用查看log 的命令用| 做分隔符,之后先将count:替换成 “”,然后用$2|$3|$4|$5 组成字符串 对相同的记录进行累计,最后遍历操作 awk -F '|' '{sub("count:","");arr[$2"|"$3"|"$4"|"$5] += $6}END{for(i in arr){print i,arr[i]}}' log.txtawk -F "|" BEGIN{SUM=0}{SUM+=$8}END{print sum}按分割后的第二列和第四列排序sor
2020-10-12 18:20:18 2876
原创 Spring Aop 的使用
Spring Aop 的使用pointcut 点的语法常用的execution(modifiners-pattern?ret-type-pattern declaring-type-pattern? name-param(param-patterm)throws-pattern?)? 表示:该参数可以出现一次或零次中文: execution(<修饰符>?<返回类型> <声明类型>?<方法名>(<参数>)<异常>?)举例:ex
2020-10-12 17:47:13 91
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人