Java
文章平均质量分 83
java学习
Mr_姚
这个作者很懒,什么都没留下…
展开
-
分布式事务框架Seata
Seata 一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。原创 2023-02-22 13:16:36 · 339 阅读 · 0 评论 -
分布式事务解决方案
在《分布式事务理论基础》中介绍了分布式事务的理论基础,下面基于不同的一致性模型介绍分布式事务的常见解决方案。原创 2023-02-20 10:48:57 · 442 阅读 · 0 评论 -
分布式事务解决方案
在《分布式事务理论基础》中介绍了分布式事务的理论基础,下面基于不同的一致性模型介绍分布式事务的常见解决方案。原创 2023-02-16 09:22:35 · 382 阅读 · 0 评论 -
分布式事务理论基础
事务是数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 事务有四个特性,习惯上被称为 ACID 特性:原创 2023-02-15 19:31:15 · 324 阅读 · 0 评论 -
Java8中的Stream流
A sequence of elements supporting sequential and parallel aggregate operations原创 2022-11-23 13:13:14 · 1255 阅读 · 0 评论 -
Java类加载器
我们写的每一个Java文件,首先通过编译器编译成class文件,然后经过类加载器加载到jdk运行时内存中生成一个class类原创 2022-11-07 21:45:36 · 206 阅读 · 0 评论 -
Java工具 Jstack 的使用
jstack - Prints Java thread stack traces for a Java process, core file, or remote debug server.Jstack 主要的作用是生成当前进程中所有线程的信息,也就是当前时刻 JVM 的线程快照,通过线程的信息我们可以定位到程序中出现长时间停顿、CPU 占用率过高等问题。线程快照中的信息是当前 java 虚拟机内每一条线程正在执行的方法的堆栈集合,有了堆栈信息我们就可以分析出我们的程序问题出现在那,比如线程间死锁..原创 2022-04-27 21:45:00 · 612 阅读 · 0 评论 -
ThreadLocal 内存泄露问题
内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 ——百度百科上述的意思用在java中就是存在已经没有任何引用的对象,但是GC又不能把对象所在的内存回收掉,所以就造成了内存泄漏。ThreadLocal主要解决的是对象不能被多个线程同时访问的问题。根据ThreadLocal的源码看看它是怎么实现的。ThreadLocal设置数据的set()方法 public void set(T va.原创 2022-04-06 14:10:22 · 2330 阅读 · 1 评论 -
Spring Boot 打包成Jar包运行的原理
相比于传统的Java打包方式,使用SpringBoot打包插件打包成jar包后,可以直接使用java -jar 运行SpringBoot项目,本篇就来分析一下运行的原理。SpringBoot打包插件<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId></plugin>原创 2022-03-26 21:00:00 · 1540 阅读 · 0 评论 -
设计一个支持热加载的Java应用启动器
热加载是指在不重启服务的情况下使更改的代码生效。注意和热部署的区别,热加载主要是在开发环境下使用。首先要知道Java程序是怎么运行起来的,Java类加载分为其7个阶段。其中加载阶段是用户可以自定义,而验证阶段、准备阶段、解析阶段、初始化阶段都是用 JVM 来处理的。整个类加载是在Java 中一个叫做类加载器上进行的,如果我们能程序更改后,让程序所在的进程能够实时的获取到编译后的Class类字节码信息,然后重新加载的话,那么就可以实现热加载功能。Java 类加载器类加载器,顾名思义就是加载Java原创 2021-12-29 22:00:00 · 696 阅读 · 0 评论 -
聊一聊Tomcat 系统架构设计
总体架构Tomcat 是一个应用服务器,那么要开发一个应用服务器,首先捋一捋它的需求,要实现那些功能。1、 首先可以和客户端建立连接,并且能够处理客户端的连接2、 其次还要解析处理我们写的 Servlet3、 最后能够根据客户端的请求找到相应的 Servlet。在 Tomcat 中将这些需求分为了两大功能处理 Socket 连接,并将网络字节流转换成 Request 对象和 Response 对象解析、加载和管理 Servlet,处理请求并返回响应数据Tomcat 将这两大功能,设计成了原创 2021-12-22 21:15:00 · 891 阅读 · 0 评论 -
Java泛型中的类型擦除以及Type接口
Java 泛型(generics)是 JDK1.5 中引入的一个新特性,其本质是参数化类型,解决不确定具体对象类型的问题;其所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。但是在 Java 中并不是真正的泛型,实际上是“伪泛型”类型擦除(type Erasure)为了与之前的版本兼容,JDK1.5 中通过类型擦除来增加的泛型功能。Java 泛型只是在编译器层次上,在编译后生成的字节码中是不包含泛型中类型.原创 2021-11-15 18:31:25 · 1025 阅读 · 0 评论 -
Java函数式编程
简介什么是函数式编程函数式编程是一种编程范式,即一切都是数学函数。在Java面向对象编程中,程序是一系列相互作用(方法)的对象,而在函数式编程中,程序会是一个无状态的函数组合序列。函数是“第一等公民”“第一等公民”指的是函数和其他数据类型一样,处于平等的地位。可以赋值给变量、可以作为另一个函数的参数或者作为一个函数的返回值。比如// 将两数相加的逻辑赋值给变量sumvar sum = (a,b)->a+b;// 将函数作为另一个函数的参数operation(sum)Java函数试原创 2021-10-24 18:56:56 · 3790 阅读 · 0 评论 -
聊一聊HashMap
HashMap 在 Java 中是一个使用高频的数据结构,JDK1.8 以后 HashMap 进行了一次翻天覆地的改变,本文基于 JDK1.8 分析一下 HashMap存储结构转换在 JDK1.8 以前 HashMap 采用的是数组+链表的结构,JDK1.8 以后又引入了红黑树的结构,会在链接和红黑树之间转换,结合源码分析一下 HashMap 对数组+链表和数组+红黑树的转换首先看一下数据的存储结构 transient HashMap.Node<K, V>[] table;HashM原创 2021-09-30 09:52:03 · 237 阅读 · 0 评论 -
JDK动态代理
JDK动态代理使用的非常广泛,Spring AOP中、MyBatis的mapper中都用到了JDK动态代理。JDK动态代理的使用1、创建代理类接口及代理类。2、创建一个实现了InvocationHandler接口的类,实现该接口中的invoke方法。3、通过Proxy的newProxyInstance(ClassLoaderloader, Class[] interfaces, InvocationHandler h)方法创建一个代理对象。来个例子:创建一个Hello的接口public int原创 2021-01-03 22:33:04 · 100 阅读 · 0 评论 -
JAVA SPI机制
少侠你现在是否还这样连接数据库try { Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("URL","root","password");} catch (Exception e) { e.printStackTrace();}...原创 2020-04-03 21:51:53 · 277 阅读 · 0 评论 -
Java内省
内省(Introspector) 是Java 语言对 JavaBean 类属性、事件的一种缺省处理方法。说简单一点就是操作JavaBean的一套API。什么是JavaBean?javaBean只是一种规范,大家都按照约定好的一套规则写java类,既然是规范就有一定的要求:类是public的,然后有个无参的构造函数属性是private的,通过设置setXXX()和getXXX()来访问能...原创 2020-03-14 18:42:17 · 227 阅读 · 0 评论 -
JAVA整形取值范围的计算
java中的整型有byte、short、int、long,它们的取值范围分别为:byte:−27-2^{7}−27~+27−1+2^{7} -1+27−1,占1个字节。short: −215-2^{15}−215~+215−1+2^{15} -1+215−1,占2个字节。int: −231-2^{31}−231~+231−1+2^{31} -1+231−1,占4个字节。long: −263...原创 2019-11-07 09:38:25 · 1469 阅读 · 0 评论 -
shiro AuthorizingRealm 里的 doGetAuthenticationInfo与doGetAuthorizationInfo的执行时间
doGetAuthenticationInfo执行时机: 当调用Subject currentUser = SecurityUtils.getSubject(); currentUser.login(token); doGetAuthorizationInfo执行时机有三个,如下: 1、subject.hasRole(“admin”) 或 subject.isPermitted(...原创 2019-11-03 16:27:10 · 970 阅读 · 0 评论 -
MySQL索引可能会失效的情况
条件中有or或没有把or所有字段加索引。 对于多列索引,不是使用的第一部分。 like查询以%开头。 查询类型是字符串,条件中不用引号括起来。 where语句中使用<、>、!=、NOT IN、is NULL、is NOT NULL,或者对字段进行表达式操作 MYSQL估计用全表扫描比使用索引快。 。。。。。(以后慢慢收集总结)...原创 2019-11-03 16:21:08 · 254 阅读 · 0 评论 -
ReentrantLock源码分析
ReentrantLock是一个可重入且独占式的锁,该锁支持获取锁时的公平和非公平选择。公平锁公平锁遵循FIFO的原则,所有的线程都会顺序执行获取锁 //加锁 final void lock() { acquire(1); } //调用AbstractQueuedSynchronizer public final void ac...原创 2020-03-18 00:00:29 · 81 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码分析-共享式
共享式获得锁共享式获取锁的顶层函数为acquireShared(),该函数首先调用tryAcquireShared()尝试互锁,如果获取不到锁,则将该线程加入到队列中。public final void acquireShared(int arg) { //尝试获取锁 //小于0,代表获取锁失败 // 具体的逻辑由子类实现 ...原创 2020-03-17 23:59:53 · 103 阅读 · 0 评论 -
Java界面中使用SwingWorker
Java Swing GUI程序启动时,JVM会启动多个线程,Swing并不是线程安全的,如果处理不当Swing程序会反应迟钝,JavaSE6开始引用SwingWorker能够改善Swing程序结构,提高界面的灵活性。 事件派发线程当界面程序启动时,会调用界面的主方法 Java.awt.EventQueue.invokeLater(new Runnable(){ public原创 2017-03-04 14:01:06 · 4383 阅读 · 1 评论 -
Springboot中AOP的使用
AOP是spring的两个主要模块功能之一,总结一下aop的基本用法切面类组成首先需要在类中用@Aspect,说明这个类时切面类,这个类主要由两个部分组成:@Pointcut和Advice@Pointcut@Pointcut是一个注解,标注在类中的方法上,主要的作用是说明要处理那些类和那些方法。@Pointcut 里的参数式一个表达式,包括指示器、通配符和运算符。指示器...原创 2018-03-14 17:45:55 · 374 阅读 · 0 评论 -
SpringBoot中CommandLineRunner和AplicationRunner
在SpringBoot开发项目的时候,有时需要在Spring容器启动的时候执行一系列操作。在SpringBoot中提供了两个接口来实现这样的需求。 这两个接口为:CommandLineRunner和ApplicationRunner 这两个都有run方法,但是CommandLineRunner的参数为String数组,ApplicationRunner为ApplicationArgum...原创 2018-04-04 15:04:18 · 309 阅读 · 0 评论 -
Mybatis中动态SQL的用法
在访问数据库时,需要拼装SQL语句,在Mybatis中提供了对SQL的拼装,只有几个简单的元素:if、test、choose,when,otherwise、where、set、trim、foreach、bind。 用法都十分简单,总结以下基本的用法。 首先准备一实体类public class User { private int id; private St...原创 2018-04-06 17:58:45 · 2114 阅读 · 0 评论