
java
文章平均质量分 51
者羽_zb
一步两步,一步两步……
展开
-
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 · 6087 阅读 · 0 评论 -
IDEA使用G1收集器及打印虚拟机日志
-XX:+UseG1GC -XX:+PrintGCDetails原创 2021-02-07 08:01:01 · 1702 阅读 · 0 评论 -
Netty总结
BIO、NIOBIO :同步阻塞,数据的读取写入必须阻塞在一个线程内等待其完成NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理区别:1.BIO是面向流的,NIO是面向缓冲区的2.BIO的各种流是阻塞的。而NIO是非阻塞的3.BIO的Stream是单向的,而NIO的channel是双向的Netty 是什么一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服原创 2021-01-22 15:01:44 · 295 阅读 · 0 评论 -
RabbitMQ总结
简介RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写的消息队列AMQP即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。其主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全消息确认1.消费者在消费完消息后发送一个回执给RabbitMQ,RabbitMQ收到消息回执(Message acknowledgment)后才将该消息从Queue中移除2.如果Ra原创 2021-01-21 14:06:12 · 176 阅读 · 0 评论 -
java并发工具
semaphore:功能:限制线程并发的数量使用场景:数据库连接只有10个,有100个线程需要获取连接,这个时候可以使用semaphore进行限流方法摘要: 1)acquire():从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断。 2)release():释放一个许可,将其返回给信号量。 3)availablePermits():返回此信号量中当前可用的许可数。 4)hasQueuedThreads():查询是否有线程正在等...原创 2020-12-23 08:57:29 · 106 阅读 · 0 评论 -
工作窃取模式 Fork/Join
介绍:Fork:分割任务Join:合并结果当一个大任务(比较耗时,数据量比较大)时,可以把这个任务分割成若干互不依赖的子任务,为了减少线程竞争,把子任务分别放入不同队列,并为每个队列创建一个单独的工作线程,当有线程提前把自己队列任务做完,为了提高效率,已经做完任务的线程会去其他队列窃取任务执行,以帮助其他未完成的线程(而不是自己等着)。此时他们访问同一个队列,为了减少窃取任务线程和被窃取任务线程之间的竞争,通常会使用双端队列。被窃取任务线程永远从双端队列头部取任务执行,窃取任务线程永远从双端队列原创 2020-12-22 08:55:47 · 650 阅读 · 0 评论 -
java中的锁
介绍:ReentrantLock,可重入锁,是一种递归无阻塞的同步机制。它可以等同于 synchronized 的使用,但是 ReentrantLock 提供了比 synchronized 更强大、灵活的锁机制,可以减少死锁的发生,同时ReentrantLock还可以实现公平锁机制可重入:广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(前提得是同一个对象或者class),这样的锁就叫做可重入锁。ReentrantLock和synchronized都是可原创 2020-12-19 10:15:51 · 131 阅读 · 1 评论 -
java线程
进程与线程:1)进程:进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间。进程不依赖于线程而独立存在,一个进程中可以启动多个线程。比如启动一个java程序就是一个进程。2)线程:现代操作系统调度的最小单元,是进程的一部分,在一个进程中可以创建多个线程,每个线程可以拥有各自的堆栈,程序计数器和局部变量,并且可以访问共享的内存变量。java线程的五种状态:1)新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();2原创 2020-12-16 09:22:29 · 106 阅读 · 0 评论 -
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 · 364 阅读 · 0 评论 -
jvm总结
方法区(Method Area):方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。当方法区无法满足内存分配需求时,将抛出OutOfMemoryError 异常。方法区里存放着类的版本,字段,方法,接口和常量池。常量池里存储着字面量和符号引用。符号引用包括:1.类的全限定名,2.字段名和属性,3.方法名和属性。JVM堆(Java Heap):Java 堆也是属于线程共享的内存区域,它在虚拟机启动时创建,是Java 虚拟机所管理的..原创 2020-12-12 10:28:08 · 121 阅读 · 0 评论 -
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 · 1132 阅读 · 1 评论 -
java synchronized 锁升级
synchronized的四种状态:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态(级别从低到高)锁升级:1、偏向锁:当线程1访问代码块并获取锁对象时,会在java对象头和栈帧中记录偏向的锁的threadID,因为偏向锁不会主动释放锁,因此以后线程1再次获取锁的时候,需要比较当前线程的threadID和Java对象头中的threadID是否一致,如果一致(还是线程1获取锁对象),则无需使用CAS来加锁、解锁;如果不一致(其他线程,如线程2要竞争锁对象,而偏向锁不会主动释放因此还是存储.原创 2020-12-11 09:05:28 · 131 阅读 · 0 评论 -
基于springboot和netty的即时通讯(IM)服务端
码云:https://gitee.com/zheyu-zb/zy-im原创 2020-12-02 09:24:35 · 1172 阅读 · 0 评论 -
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 · 2487 阅读 · 0 评论 -
Lambda表达式
Lambda表达式:https://blog.youkuaiyun.com/vbirdbest/article/details/80201977转载 2020-11-30 09:46:11 · 163 阅读 · 0 评论 -
解决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 · 1909 阅读 · 0 评论 -
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 · 118 阅读 · 0 评论 -
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 · 214 阅读 · 0 评论 -
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 · 327 阅读 · 1 评论 -
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 · 320 阅读 · 0 评论 -
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 · 3233 阅读 · 0 评论 -
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 · 3955 阅读 · 0 评论 -
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 · 85436 阅读 · 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 · 1156 阅读 · 1 评论 -
spring学习(一) —— 装配bean
声明bean 装配bean 使用到的注解@Component、@Configuration、@ComponentScan、@Bean、@Autowired 一、注解解释@Component:表明一个类会作为组件类,并告知Spring要为这个类创建bean @Configuration:表示这是一个配置类 @ComponentScan:启用spring组件扫描,默...原创 2019-06-27 10:03:08 · 120 阅读 · 0 评论 -
spring学习(二) —— 高级装配
一、注解解释@Profile(""):通过profile注解来指定环境,只有与运行环境相同的bean才会被注册到spring上下文中 @Primary:spring上下文中有多个相同BeanID的时候,使用自动装配注入方式会引起程序异常,使用primary类指定spring在注入多bean的时候优先注入哪个 @Qualifier:自定义BeanId可以与@Component和@Bean一起...原创 2019-07-02 09:14:40 · 173 阅读 · 0 评论 -
springboot2.1集成druid连接池
准备:idea java1.8 druid 1.1.9 springboot2.1.61.创建一个springboot项目: 2.修改pom.xml,引入jar包:<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-...原创 2019-06-19 16:29:51 · 1339 阅读 · 0 评论