自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

者羽_zb的博客

一只安静的呆头鹅…… 嘎~嘎~嘎~

  • 博客(44)
  • 收藏
  • 关注

原创 java 加密\解密工具类

java实用工具类import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.Mac;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import java.security.

2021-05-17 13:47:39 5814

原创 IDEA使用G1收集器及打印虚拟机日志

-XX:+UseG1GC -XX:+PrintGCDetails

2021-02-07 08:01:01 1501

原创 Netty总结

BIO、NIOBIO :同步阻塞,数据的读取写入必须阻塞在一个线程内等待其完成NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理区别:1.BIO是面向流的,NIO是面向缓冲区的2.BIO的各种流是阻塞的。而NIO是非阻塞的3.BIO的Stream是单向的,而NIO的channel是双向的Netty 是什么一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服

2021-01-22 15:01:44 187

原创 RabbitMQ总结

简介RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写的消息队列AMQP即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。其主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全消息确认1.消费者在消费完消息后发送一个回执给RabbitMQ,RabbitMQ收到消息回执(Message acknowledgment)后才将该消息从Queue中移除2.如果Ra

2021-01-21 14:06:12 113

原创 MySql总结

下午写,,,,

2021-01-20 11:09:30 84

原创 数据结构

线性表:顺序存储结构,可理解为数组,在一块连续的内存中存储,查找速度快链式存储结构,分散存储在内存中,按照逻辑次序连接再一起,插入删除快,分为单链表、循环链表、双向链表栈与队列:...

2021-01-09 13:38:59 111

原创 Redis总结

SDS(简单动态字符串):1.杜绝缓冲区溢出2.减少修改字符串长度时所需的内存分配次数3.二进制安全4.兼容部分C字符串函数链表:平平无奇的链表实现dict(字典):1.使用MurmurHash算法来计算键的hash的哈希值2.哈希表使用链地址法来解决键冲突,被分配到同一个索引上的多个键值对会连接成一个单向链表(被分配到同一个索引上的键值对使用next指针将现有的和已存在的连接在一起,新添加的总是排在已有节点的前面)3.在对哈希表进行扩展或收缩时,程序将现有的哈希表包

2021-01-05 08:57:01 124

原创 MongoDB4.2总结

什么是MongoDBMongoDB是一个面向文档的NoSQL数据库,用于大容量数据存储MongoDB中每个数据库都包含集合,而集合又包含文档,每个文档可以有不同的字段数。每个文档的大小和内容可以彼此不同。不需要预先定义模式。相反,可以动态创建字段。为什么使用MongoDB1.面向文档将数据存储在文档中,能够适应实际的业务环境和需求。2.支持完全索引,包含内部对象3.支持复制和故障恢复4.文件存储格式为BSON(一种JSON的扩展)MongoDB和RDBMS之间的差异1.在

2020-12-24 18:19:16 535 1

原创 ThreadPoolExecutor线程池工具类

import lombok.AccessLevel;import lombok.AllArgsConstructor;import java.util.concurrent.*;import java.util.concurrent.atomic.AtomicInteger;/** * 线程池工具类 */@AllArgsConstructor(access = AccessLevel.PRIVATE)public class ThreadPoolUtil { /** .

2020-12-24 10:52:03 1008

原创 springboot2.3.x使用mongodb事务

mongodb必须是副本集或者分片,废话不多说,上代码:import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.mongodb.MongoDatabaseFactory;import org.springframework.data.mongodb.MongoTrans

2020-12-24 10:46:56 817 2

原创 java中的线程池Executor

线程池优点:降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度:当任务到达时,任务可以不需要等到线程穿件就能立即执行提高线程的可管理性:线程时稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控实现原理:当向线程池提交一个任务后:1)线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下个流程2)线程池判断工作队列是否

2020-12-24 09:02:16 97

原创 CentOS7.4 搭建mongodb4.2.8副本集

副本集节点介绍1)数据节点-------主节点 主节点负责数据的读写操作,并把写的操作记录到OpLog中(mongo隐藏的库local的oplog集合)2)数据节点-------从节点 复制主节点的数据,备份容灾用,主节点挂掉,会重新选举出新的主节点,从节点无法进行写操作,即使拥有root权限也不行(不同于MySQL)3)投票节点 不负责数据的存储和复制,只负责投票。(注:理论上一个mongo复制集,可以有一个主节点,多个从节点,多个投票节点)...

2020-12-23 18:29:05 277

原创 java并发工具

semaphore:功能:限制线程并发的数量使用场景:数据库连接只有10个,有100个线程需要获取连接,这个时候可以使用semaphore进行限流方法摘要: 1)acquire():从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断。 2)release():释放一个许可,将其返回给信号量。 3)availablePermits():返回此信号量中当前可用的许可数。 4)hasQueuedThreads():查询是否有线程正在等...

2020-12-23 08:57:29 73

原创 工作窃取模式 Fork/Join

介绍:Fork:分割任务Join:合并结果当一个大任务(比较耗时,数据量比较大)时,可以把这个任务分割成若干互不依赖的子任务,为了减少线程竞争,把子任务分别放入不同队列,并为每个队列创建一个单独的工作线程,当有线程提前把自己队列任务做完,为了提高效率,已经做完任务的线程会去其他队列窃取任务执行,以帮助其他未完成的线程(而不是自己等着)。此时他们访问同一个队列,为了减少窃取任务线程和被窃取任务线程之间的竞争,通常会使用双端队列。被窃取任务线程永远从双端队列头部取任务执行,窃取任务线程永远从双端队列

2020-12-22 08:55:47 548

原创 java中的锁

介绍:ReentrantLock,可重入锁,是一种递归无阻塞的同步机制。它可以等同于 synchronized 的使用,但是 ReentrantLock 提供了比 synchronized 更强大、灵活的锁机制,可以减少死锁的发生,同时ReentrantLock还可以实现公平锁机制可重入:广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(前提得是同一个对象或者class),这样的锁就叫做可重入锁。ReentrantLock和synchronized都是可

2020-12-19 10:15:51 101 1

原创 java线程

进程与线程:1)进程:进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间。进程不依赖于线程而独立存在,一个进程中可以启动多个线程。比如启动一个java程序就是一个进程。2)线程:现代操作系统调度的最小单元,是进程的一部分,在一个进程中可以创建多个线程,每个线程可以拥有各自的堆栈,程序计数器和局部变量,并且可以访问共享的内存变量。java线程的五种状态:1)新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();2

2020-12-16 09:22:29 72

原创 java this引用逃逸

上代码!!!!!!!!!!public class FinalReferenceEscapeExample { final int i; static FinalReferenceEscapeExample obj; public FinalReferenceEscapeExample () { i = 1; //1写final域 obj = this;

2020-12-14 09:21:40 310

原创 jvm总结

方法区(Method Area):方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。当方法区无法满足内存分配需求时,将抛出OutOfMemoryError 异常。方法区里存放着类的版本,字段,方法,接口和常量池。常量池里存储着字面量和符号引用。符号引用包括:1.类的全限定名,2.字段名和属性,3.方法名和属性。JVM堆(Java Heap):Java 堆也是属于线程共享的内存区域,它在虚拟机启动时创建,是Java 虚拟机所管理的..

2020-12-12 10:28:08 81

原创 java内存模型(JSR-133内存模型)

定义:Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。JMM模型下的线程间通信:1)线程A把本地内存A中更新过的共享变量刷新到主内存中去。2)线程B到主内存中去读取线程A之前已更新过的共.

2020-12-12 09:35:22 1029 1

原创 java synchronized 锁升级

synchronized的四种状态:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态(级别从低到高)锁升级:1、偏向锁:当线程1访问代码块并获取锁对象时,会在java对象头和栈帧中记录偏向的锁的threadID,因为偏向锁不会主动释放锁,因此以后线程1再次获取锁的时候,需要比较当前线程的threadID和Java对象头中的threadID是否一致,如果一致(还是线程1获取锁对象),则无需使用CAS来加锁、解锁;如果不一致(其他线程,如线程2要竞争锁对象,而偏向锁不会主动释放因此还是存储.

2020-12-11 09:05:28 100

原创 基于springboot和netty的即时通讯(IM)服务端

码云:https://gitee.com/zheyu-zb/zy-im

2020-12-02 09:24:35 514

原创 Bit、Byte、KB

位 bit :计算机中存储数据的最小单位字节 byte:存储数据的基本单位千字节 kb :千字节 字节换算常见的存储单位主要有bit(位)、B(字节)、KB(千字节)、MB(兆字节)、GB(千兆字节)1B = 8bit (B 是 Byte 的缩写)1KB = 1024B1MB = 1024KB1GB = 1024MB...

2020-12-02 08:24:38 2269

转载 Lambda表达式

Lambda表达式:https://blog.csdn.net/vbirdbest/article/details/80201977

2020-11-30 09:46:11 126

原创 解决NettyServerHandler无法获取spring中的bean

原因: netty中无法使用注入的bean,因为NettyServerHandler是netty启动的时候new出来,并没有交给spring IOC托管方法1: 想在生成对象时完成某些初始化操作,而这些初始化操作又依赖于注入的bean,因此可以使用@PostConstruct注解一个init方法来完成初始化,该方法会在bean注入完成后被自动调用。public class NettyServerHandler extends ChannelInboundHa...

2020-10-30 17:58:47 1653

原创 java创建只读容器

/** * 创建只读容器相关方法: * Collections.unmodifiableList、 * Collections.unmodifiableMap、 * Collections.unmodifiableSet * @param args */public static void main(String[] args) { List<Integer> intList = Arrays.asList(1, 2, 3.

2020-10-27 08:37:59 117

原创 解决mysql使用in查询排序问题

# 让结果和in里面的排序一致select * from user whereid in (10000,10001)order by field(id, 10000,10001);

2020-10-23 16:07:26 377

原创 System.arraycopy()方法

public static void main(String[] args) { int[] ints1 = {3, 4, 5, 6, 7, 8}; int[] ints2 = new int[6]; String ints1Str = ""; for (int i : ints1) { ints1Str += i; ints1Str += ","; } Sy..

2020-10-20 09:28:13 104

原创 java内部类使用

public class TestInner { public void ti(){ System.out.println("TestInner.ti"); } class TestInnerSon { public void tis(){ System.out.println("TestInnerSon.tis"); } public void fatherFun(){ .

2020-09-21 09:56:41 78

原创 int加char会报错???

int num = 78999 + 'a';运行结果:79096为什么?百度了一下ASCII码对照表,原来是78999与小a的ASCII码相加了,对照表(十进制):a-z:97-122,A-Z:65-90,0-9:48-57

2020-09-11 10:41:35 177

原创 BigDecimal加减乘除及比较大小

BigDecimal加减乘除BigDecimal b1 = new BigDecimal("10");BigDecimal b2 = new BigDecimal("5");//加法 BigDecimal r1 = b1.add(b2); //减法 BigDecimal r2 = b1.subtract(b2); //乘法 BigDecimal r3 = b1.multiply(b2); //除法 BigDecimal r4 = b1.divide(b2.

2020-09-04 15:55:40 241 1

原创 二进制、十进制、十六进制之间转换

十进制转二进制,快捷算法除二取余一直除到0结束。例如45=45/2=22余1 22/2=11余0...

2020-09-01 15:11:46 1362

原创 java生成图片,添加水印

private static final String URL = "D:/test/template.png";public static String certificateBuilder(String nickname, BigDecimal totalAmount) { //得到图片缓冲区 FileInputStream fileInputStream = null; String savePath = ""; try { .

2020-06-05 15:59:59 264

原创 MongoTemplate 使用or查询

Criteria criteria = new Criteria(); criteria.orOperator( Criteria.where("assistantMobile").is(mobile).and("status").in(1, 2), Criteria.where("openid").is(openid).and("status").in(1, 2));List<mongoBean> result= mongoTempla..

2020-05-20 16:21:15 3033

原创 ACID

原子性(Atomicity) 一致性(consistency) 隔离性(Isolation) 持久性(Durability)1.原子性: 表示组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有的操作执行成功,整个事务才提交。事务中的任何一个操作失败,已经执行的任何操作都必须被撤销,返回初始状态。2.一致性 事务操作成功后,程...

2019-12-20 09:08:06 79

原创 MySQL中的锁及MVCC机制

关于锁: InnoDB:使用行级锁 MyISAM:使用表级锁关于MVCC(多版本并发控制): MVCC的实现,通过保存数据在某个时间点的快照来实现的。这意味着一个事务无论运行多长时间,在同一个事务里能够 看到数据一致的视图。根据事务开始的时间不同,同时也意味着在同一个时刻不同事务看到的相同表里的数据可能是不同的。InnoDB...

2019-09-12 09:32:12 159

原创 一条sql语句的一生

客户端执行查询语句 查询缓存(如果命中直接返回结果,否则继续向下执行) 解析语法并生成解析树(解析错误直接返回异常) 校验权限(检验通过则继续向下执行,否则返回异常) 优化器通过成本估算生成最优的执行计划(并不是最快的,并且会篡改执行的SQL语句!) 通过引擎执行查询 返回结果(将结果缓存)...

2019-08-31 09:08:54 162

原创 JdbcTemplate.query返回list

String sql1 = "SELECT * FROM `u_user_img` WHERE ID = ?"; BeanPropertyRowMapper<UUserImgEntity> rowMapper = new BeanPropertyRowMapper<>(UUserImgEntity.class); List<UUserImgEntity>...

2019-08-30 18:00:48 3822

原创 java对象转JSONObject、JSONObject转java对象及String转JSONObject

JSONObject jo= (JSONObject) JSONObject.toJSON(javaBean); Student stu = (Student)JSONObject.toBean(jo, Student.class);

2019-08-30 10:08:47 81421 3

原创 AOP + Redis实现防止表单重复提交(注解方式)

引入SpringAOP<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>配置redis,并创建redis工具类...

2019-08-30 09:56:58 1073 1

原创 mysql索引类型总结

normal:表示普通索引 unique:表示唯一的,不允许重复的索引类似主键,类似于主键 full textl: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。 通常情况下使用nomal索引类型即可,根据实际情况选择索引类型!...

2019-08-29 09:11:10 73

空空如也

空空如也

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

TA关注的人

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