java
文章平均质量分 51
java
qianhuan_
记录学习
展开
-
hystrix原理+实战
hystrix语义为“豪猪”原创 2022-09-03 23:58:27 · 24 阅读 · 0 评论 -
二叉树迭代遍历JAVA
二叉树迭代遍历原创 2022-07-14 10:38:17 · 359 阅读 · 0 评论 -
aqs源码分析
Aqs源码分析原创 2022-05-13 14:45:43 · 168 阅读 · 0 评论 -
java进制转换
public String convertToBaseN(int num, int n) { boolean flag = num < 0; if (flag) num = -num; StringBuilder sb = new StringBuilder(); do { sb.append(num % n); num /= n; } while (num != 0);..原创 2022-03-07 20:01:21 · 6548 阅读 · 0 评论 -
spring cloud stream 配置自定义rocketmq
spring.cloud.stream.bindings.publish-price.destination = topicspring.cloud.stream.binders.promotion-binder.type=rocketmqspring.cloud.stream.binders.promotion-binder.environment.spring.cloud.stream.rocketmq.binder.name-server = xxxxxspring.cloud.stream..原创 2021-12-29 18:49:28 · 1010 阅读 · 1 评论 -
Kafka Shell基本命令
创建kafka topicbin/kafka-topics.sh --zookeeper node01:2181 --create --topic t_cdr --partitions 30 --replication-factor 2注:partitions指定topic分区数,replication-factor指定topic每个分区的副本数 partitions分区数: partitions :分区数,控制topic将分片成多少个log。可以显示指定,如果不指定则会使用bro.原创 2021-07-31 23:13:10 · 302 阅读 · 0 评论 -
Spring AOP中何时使用JDK动态代理,何时使用CGLIB动态代理?为什么springboot 2.x默认是使用CGLIB动态代理?
@Overridepublic AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException { // 1.config.isProxyTargetClass() 代表 配置中的proxy-target-class属性true/false,默认false // if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserS.原创 2021-06-18 22:15:24 · 1331 阅读 · 1 评论 -
redis缓存雪崩+缓存击穿解决方案(spring自定义注解)
import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target; /** * cache注解 */@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @i.原创 2021-05-19 20:54:34 · 133 阅读 · 0 评论 -
构建树形结构
实体:ackage com.dmo.screen.po;import lombok.Data;import javax.persistence.*;import java.io.Serializable;import java.util.List;@Data@Entity@Tablepublic class Organization implements Serializable { //自增主键生成策略 @Id @GeneratedValue(strategy =原创 2021-02-03 20:29:25 · 207 阅读 · 0 评论 -
nacos启动报错db.num is null & Unable to start embedded Tomcat
db.num is null新建数据库nacos,运行conf文件夹下nacos-mysql.sql,修改application.properties修改如下:### If use MySQL as datasource:spring.datasource.platform=mysql### Count of DB:db.num=1### Connect URL of DB:db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEnco原创 2021-01-25 16:29:11 · 435 阅读 · 0 评论 -
rabbitmq如何保证消息不丢失
丢数据的三个场景:生产者丢失,ma自己丢失,消费者丢失生产者丢失:第一种消息发送前开启事务,发生异常就回滚事务 第二种开启confirm模式,每次写得消息都会分配一个唯一的id,写入mq之后会回传acK消息,失败回调用nack接口,可以根据这重新处理这个消息 两种处理方式的区别:事务机制是同步的,提交一个事务会阻塞的,而confirm机制是异步的,发送消息之后还能发送下一个消息,一般使用confirm 机制mq丢失:对消息队列和交换机持久化,并且发送消息的是deliveryMode 设置..原创 2021-01-09 15:40:58 · 757 阅读 · 1 评论 -
SpringBoot项目启动时做一些初始化工作的五种方式
前言通常的我们的项目开发中,经常会遇到那种在服务一启动就需要自动执行一些业务代码的情况。比如将数据库中的配置信息或者数据字典之类的缓存到redis,或者在服务启动的时候将一些配置化的定时任务开起来。关于spring mvc或者springboot如何在项目启动的时候就执行一些代码,方法其实有很多,我这边介绍一下我使用过的三种。1、@PostConstruct注解从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDest.原创 2021-01-07 16:02:56 · 1556 阅读 · 0 评论 -
Netty 的零拷贝机制
Netty的零拷贝机制是一种应用层的实现。CompositeByteBuf,讲多个ByteBuf 合并为逻辑上的ByteBuf ,避免了多个ByteBuf之间的拷贝(如果是两个数组拷贝,那么可能先申请大的数组,将两个小的数组复制过来),但是ByteBuf提供了虚拟的复合缓冲区,逻辑上将多个ByteBuf合并到一起,实际上,数据没有动 wrapedBuffer 将byte[] 包装成ByteBuf对象,字节数组的地址不变,ByteBuf引用字节数组的地址 slice拆分,将大的ByteBuf 拆分成几原创 2021-01-06 19:29:08 · 199 阅读 · 0 评论 -
Java中提供了synchronized,为什么还要提供Lock呢?
死锁的四个条件 互斥条件:在一段时间内某资源仅为一个线程所占有。此时若有其他线程请求该资源,则请求线程只能等待。 不可剥夺条件:线程所获得的资源在未使用完毕之前,不能被其他线程强行夺走,即只能由获得该资源的线程自己来释放(只能是主动释放)。 请求与保持条件:线程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他线程占有,此时请求线程被阻塞,但对自己已获得的资源保持不放。 循环等待条件:在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1..原创 2021-01-06 18:52:44 · 225 阅读 · 0 评论 -
redis 哨兵和 集群
哨兵模式#哨兵模式是redis高可用的实现方式之一使用一个或者多个哨兵(Sentinel)实例组成的系统,对redis节点进行监控,在主节点出现故障的情况下,能将从节点中的一个升级为主节点,进行故障转义,保证系统的可用性。哨兵们是怎么感知整个系统中的所有节点(主节点/从节点/哨兵节点)的#首先主节点的信息是配置在哨兵(Sentinel)的配置文件中 哨兵节点会和配置的主节点建立起两条连接命令连接和订阅连接 哨兵会通过命令连接每10s发送一次INFO命令,通过INFO命令,主..原创 2021-01-06 16:49:42 · 457 阅读 · 0 评论 -
Java GC
简述垃圾回收机制在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。对象是否要被回收引用计数器法:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引用的问题; 可达性分析算法:从 GC Roo原创 2021-01-05 15:27:33 · 114 阅读 · 0 评论 -
Redis中两种持久化机制RDB和AOF
RDB:redis databaseAOF:append only fileRDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。RDB提供了三种机制:1.save(该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。)2.bgsave(Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结原创 2020-12-28 14:16:57 · 67 阅读 · 0 评论 -
Netty 源码分析4---read入站事件处理
服务端:package com.demo.study1.socket.netty;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioServerSoc原创 2020-12-21 14:12:42 · 178 阅读 · 0 评论 -
Netty 源码分析3---bind过程
示例代码package com.demo.study1.socket.netty;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioServerSock原创 2020-12-17 23:53:04 · 129 阅读 · 0 评论 -
Netty 源码分析2---事件注册过程
示例代码package com.demo.study1.socket.netty;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioServerSock原创 2020-12-17 20:51:01 · 180 阅读 · 0 评论 -
springboot schedule 解决定时任务不执行的问题
@schedule 注解是springboot 常用的定时任务注解,使用起来简单方便,但是如果定时任务非常多,或者有的任务很耗时,会影响到其他定时任务的执行,因为schedule 默认是单线程的,一个任务在执行时,其他任务是不能执行的.解决办法是重新配置schedule,改为多线程执行.只需要增加下面的配置类就可以了.import org.springframework.boot.autoconfigure.batch.BatchProperties;import org.springframew.原创 2020-12-11 09:47:53 · 2135 阅读 · 2 评论 -
gradle引入本地jar包
1、在项目根目录下创建lib文件夹2、将jar包考到lib文件夹下3、在gradle配置文件中添加(以下添加一个就可以) compile fileTree(dir:'lib',includes:['*jar']) implementation fileTree(dir:'lib',includes:['*jar']原创 2020-12-09 10:31:44 · 2723 阅读 · 0 评论 -
springboot websocket发送对象
package com.dmo.parkingServer.common.config;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import javax.websocket.Encoder;import javax.websocket.EndpointConfig;import java.util.Map;/**.原创 2020-12-04 12:18:26 · 1772 阅读 · 1 评论 -
ByteBuf动态扩容机制
package com.demo.study.socket.netty;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import java.util.Arrays;public class ByteBufDemo { public static void main(String[] args) {// 1.初始化bytebuf ByteBuf buffer = Unpoo.原创 2020-12-03 22:52:02 · 2084 阅读 · 0 评论 -
Idea debug
在现在的开发中,我们经常采用Debug来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。 所以学习下如何在Intellij IDEA中使用好Debug,主要包括如下内容: 一、Debug开篇 二、基本用法&快捷键 三、变量查看 四、计算表达式 五、智能步入 六、断点条件设置 七转载 2020-12-03 22:49:53 · 99 阅读 · 0 评论 -
SpringBoot webSocket 示例, 实现后台主动向前端推送信息
1.依赖compile group: 'org.springframework.boot', name: 'spring-boot-starter-websocket', version: '2.2.10.RELEASE'2.配置文件package com.dmo.parkingServer.common.config;import org.springframework.context.annotation.Bean;import org.springframework.contex原创 2020-12-02 16:27:36 · 923 阅读 · 0 评论 -
springboot 连接 access 数据库和sqlserver
spring: redis: database: 1 host: xx.xxx.xx.xx port: 6379 jedis: pool: max-active: 8 max-idle: 8 min-idle: 0 password: listen datasource: first: username: username password: password .原创 2020-12-01 09:52:25 · 916 阅读 · 0 评论 -
Java8 stream
排序(倒序,正序去掉reversed(),根据Reporting实体的isDeadLine字段倒序) List<Reporting> collect1 = integerListEntry.getValue().stream().sorted(Comparator.comparing(Reporting::getIsDeadLine).reversed()).collect(Collectors.toList());List 转 map 相同key,value 合为一个List(..原创 2020-11-30 14:15:34 · 1572 阅读 · 2 评论 -
springboot 下载word,excel,file 压缩包
ServletOutputStream out = response.getOutputStream(); ZipOutputStream zipOutputStream = new ZipOutputStream(out); String fileName = AppUtil.getYYMMdd() + ".zip";//文件名:年月日时分秒 response.setContentType("application/octet-stream...原创 2020-11-30 10:44:18 · 483 阅读 · 1 评论 -
word中各种长度转换为px(工具类)
public class MyUnits { public static final double PT_PER_PX = 0.75; public static final int IN_PER_PT = 72; public static final double CM_PER_PT = 28.3; public static final double MM_PER_PT = 2.83; public static final int EMU_PER_PX = 9525; public.原创 2020-11-26 17:23:55 · 464 阅读 · 0 评论 -
ElasticSearch的高级复杂查询:非聚合查询和聚合查询
非聚合复杂查询(这儿展示了非聚合复杂查询的常用流程)public List<EsBlog> elasticSerchTest() { //1.创建QueryBuilder(即设置查询条件)这儿创建的是组合查询(也叫多条件查询),后面会介绍更多的查询方法 /*组合查询BoolQueryBuilder * must(QueryBuilders) :AND * mustNot(QueryBuilders):NOT * should:原创 2020-11-25 17:55:12 · 1087 阅读 · 0 评论 -
Netty 源码分析1---NioEventLoopGroup的创建过程和NioEventLoop的启动
Netty服务端package com.demo.study.socket.netty;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.*;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioServer原创 2020-11-22 02:09:26 · 473 阅读 · 0 评论 -
常见数据结构
本文目录:数据结构分类 1、数组 2、栈 3、队列 4、链表 5、树 6、散列表 7、堆 8、图数据结构分类数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示:每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。1、数组数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0.原创 2020-11-14 18:55:36 · 364 阅读 · 0 评论 -
java avi转mp4
需要的依赖 // https://mvnrepository.com/artifact/ws.schild/jave-core compile group: 'ws.schild', name: 'jave-core', version: '2.4.5' // https://mvnrepository.com/artifact/ws.schild/jave-native-win64 compile group: 'ws.schild', name: 'jave-na原创 2020-11-03 12:05:00 · 1863 阅读 · 0 评论 -
springboot 多数据源,mybatis 驼峰失效
原因:配置多数据源时,application.yml的有关mybatis的配置是失效的,因为他不知道配置哪一个数据源解决:第一种:application.yml 的配置驼峰保留 定义全局的配置(代码片段一:) 在sqlSessionFactory中设置配置(代码片段二:)代码片段一: @Bean @ConfigurationProperties(prefix = "mybatis.configuration") public org.apache.ibatis.原创 2020-10-19 17:12:32 · 1238 阅读 · 0 评论 -
使用阿里云镜像解决Gradle和Maven下载jar包慢的问题
gradlerepositories { maven { url "https://maven.aliyun.com/nexus/content/groups/public" } mavenCentral()}maven<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>Aliyun原创 2020-10-12 13:19:28 · 169 阅读 · 0 评论 -
指令重排序
一、为什么要重排计算机在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。二、有哪几种重排 1.编译器优化重排:编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。 2.指令级的并行重排:现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。 3.内存系统的重排:由于处理器使用缓存和读/写缓冲区,这使得加载和存储操作看上去可能是在乱序执行。 注意: 单线程环境...原创 2020-09-25 10:35:38 · 543 阅读 · 0 评论 -
JMM
一、为什么需要Java内存模型?Why:屏蔽各种硬件和操作系统的内存访问差异。JMM是Java内存模型,也就是Java Memory Model,简称JMM,本身是一种抽象的概念,实际上并不存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。二、到底什么是Java内存模型?1.定义程序中各种变量的访问规则 2.把变量值存储到内存的底层细节 3.从内存中取出变量值的底层细节三、Java内存模型的两大内存是啥?..原创 2020-09-25 10:22:02 · 123 阅读 · 0 评论 -
Java中Volatile关键字详解
一、Java 内存模型中的可见性、原子性和有序性。可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。 可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和原创 2020-09-24 15:39:33 · 111 阅读 · 0 评论 -
springboot打包成jar之后,怎么做到不重新打包修改他的配置文件
Spring程序会按优先级从下面这些路径来加载application.properties配置文件当前目录下的/config目录 当前目录 classpath里的/config目录 classpath 跟目录因此,要外置配置文件就很简单了,在jar所在目录新建config文件夹,然后放入配置文件,或者直接放在配置文件在jar目录...原创 2020-09-24 10:18:33 · 2052 阅读 · 0 评论