Java
文章平均质量分 81
zhangm2020
这个作者很懒,什么都没留下…
展开
-
@Validated+循环依赖报错分析解决
创建名为“myZmTest1”的bean时出错:名为“myZmTest1”的bean已作为循环引用的一部分注入到原始版本的其他bean[myZmTest2]中,但最终已被包装。这意味着所述其他bean不使用bean的最终版本大家都知道虽然在开发过程中,不建议出现循环依赖,但是Spring也做了兜底,提供了三级缓存用来解决循环依赖,但为什么循环依赖的类加了参数校验@Validated注解就解决不了了?原创 2023-01-09 15:04:10 · 2416 阅读 · 1 评论 -
分布式事务管理Atomikos
Atomikos是一个非常流行的开源事务管理器,并且可以嵌入到你的Spring Boot应用中。Tomcat应用服务器没有实现JTA规范,当使用Tomcat作为应用服务器的时候,需要使用第三方的事务管理器类来作为全局的事务管理器,而Atomikos框架就是这个作用,将事务管理整合到应用中,而不依赖于application server。原创 2022-09-15 17:53:07 · 5082 阅读 · 0 评论 -
NIO通信实现
目录 基于channel通道实现通信 服务端代码 客户端代码 通信结果 Channel通道与流的区别 基于Selector选择器服务端实现通信 服务端代码 通信结果原创 2022-08-18 17:06:40 · 691 阅读 · 0 评论 -
Guava Cache本地缓存
目录LoadingCache是什么?怎么使用?缓存过期机制Guava cache实现LRU回收机制缓存三大问题Guava cache与分布式缓存的区别?原创 2022-08-05 10:02:52 · 7499 阅读 · 0 评论 -
Java8 Stream使用整理
3、获取name+sex(唯一键)对应的所有信息List=>Map5、获取name+sex(唯一键)对应的IDList=>Map1、获取每个人所学的科目列表List=>MapMap转Map原创 2022-07-29 14:32:19 · 499 阅读 · 0 评论 -
Java8 Optional使用整理
get获取Optional的value,为null则抛出NoSuchElementException异常of将value封装为Optional对象,为null则抛出NullPointerException异常empty返回空Optional对象ofNullable将value封装为Optional对象,为null则将返回空对象。原创 2022-07-28 17:38:34 · 348 阅读 · 0 评论 -
Arthas watch命令使用
格式:watch 类全限定名 方法名 观察表达式 条件表达式可以观察到的信息:方法入参、方法返回值、抛出的异常信息、调用方法的对象观察表达式:默认{params, target, returnObj}观察事件点-b 方法调用前(观察入参时,方法中可能会有修改入参的操作)-s 方法返回后-e 方法抛出异常后jad demo.MathGame查看源代码watch demo.MathGame primeFactorsx 默认为1,等价于 watch demo.MathGame primeFactors -x 1观原创 2022-06-16 14:25:28 · 20307 阅读 · 0 评论 -
Arthas使用本地
下载:下载 — Arthas 3.5.6 文档入门官方文档 :快速入门 — Arthas 3.5.6 文档按照入门简单示例操作(本地)1、启动官方示例math-game2、启动arthas我们现在要选择第二个Java进程,报错了问题解决:尝试使用不同的telnet端口:java -jar arthas-boot.jar --telnet-port 17824--http-port -1启动成功3、查看dashboard,可以看到main函数的线程....原创 2022-03-25 16:19:53 · 1961 阅读 · 0 评论 -
业务异常捕获为什么要使用Throwable?
Throwable异常树受查异常(编译异常):在编译时被强制检查的异常,必须处理,否则程序编译不通过。子类1:Error(错误)是程序无法处理的错误。指示合理的应用程序不应尝试捕获的严重问题。这些错误是不应该发生的异常情况。 也就是说,出于编译时检查异常的目的,Error 及其子类被视为未经检查的异常。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineErr原创 2021-12-22 19:55:50 · 2023 阅读 · 0 评论 -
使用dom4j解析XML
目录1、依赖dom4j包2、 读取xml文件获取到文件输入流3、使用dom4j解析输入流得到document4、获取document标签元素并封装扩展:XPath使用dom4j解析xml文件流程例如,解析mysql配置文件sqlConfig.xml<configuration><!--xml根标签--> <dataSource> <property name="driverClass" value="com原创 2021-12-03 17:10:19 · 1407 阅读 · 0 评论 -
guava排序器Ordering
目录1. 排序器的创建2. 剖析与原生排序的区别3. 链式调用3.1 reverse()3.2nullsFirst()/nullsLast()4运用排序器4.1isOrdered4.2greatestOf4.3 min/max排序器Ordering,是Guava流畅风格比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能。1. 排序器的创建Ordering静态创建排序器方法 描述 natural()...原创 2020-07-14 19:47:56 · 974 阅读 · 0 评论 -
Guava了解
学习官网:http://ifeve.com/google-guava/1. 基本工具让使用Java语言变得更舒适1.1 使用和避免nullnull是模棱两可的,会引起令人困惑的错误,有些时候它让人很不舒服。很多Guava工具类用快速失败拒绝null值,而不是盲目地接受。Optional的作用是迫使你积极思考引用缺失的情况,因为你必须显式地从Optional获取引用。所以还是得自己去考虑null的情况。1.2 前置条件让方法中的条件检查更简单。Preconditions类提供了一.原创 2020-07-03 14:11:19 · 481 阅读 · 0 评论 -
redis学习总结
1 简介Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。2 数据类型Redis支持五种数据类型:st原创 2020-07-01 10:43:50 · 296 阅读 · 0 评论 -
Java常用工具类整理
1 org.apache.commons.lang3.StringUtils方法:isBlank:字符串为null或""或字符串只含有空格返回true public static boolean isBlank(final CharSequence cs) { int strLen; if (cs == null || (strLen = cs.length()) == 0) { return true; } .原创 2020-05-26 10:50:32 · 617 阅读 · 1 评论 -
Java内存模型JMM
目录1. JMM基础1.1 并发编程的两个关键问题1.1.1 线程之间如何通信1.1.2 线程之间如何同步1.2 JMM抽象结构1. JMM基础1.1 并发编程的两个关键问题1.1.1 线程之间如何通信通信机制:共享内存(Java的并发采用的是共享内存模型);消息传递在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态来隐式通...原创 2020-04-23 16:32:58 · 419 阅读 · 0 评论 -
Java并发机制的底层实现原理
1. 并发编程面临的挑战并发编程的目的:为了让程序运行的更快1.1 上下文切换时间片:CPU分配给各个线程的时间(几十毫秒)CPU通过时间片分配算法来循环执行任务,当上一个任务执行一个时间片后会切换到下一个任务。在进行上下文切换之前,会保存上一个任务的状态,以便下次切换回这个任务时,可以在加载这个任务的状态,任务从保存到再加载的过程就是一次上下文切换。与串行执行相比,多线程不一...原创 2020-04-04 17:13:45 · 560 阅读 · 0 评论 -
dubbo智能集群容错与负载均衡策略解析
目录1. 集群容错1.1 五种容错策略1.2 集群容错源码解析2. 负载均衡2.1 四种负载均衡策略2.2 负载均衡源码解析1. 集群容错当集群调用(服务消费方调用服务提供方的服务)失败时,Dubbo提供了多种容错方案,缺省模式为failover,也就是失败重试。这里的Invoker是Provider的一个可调用Service的抽象,Inv...原创 2020-03-24 14:13:26 · 883 阅读 · 0 评论 -
dubbo
目录1. 什么是Dubbo?2. dubbo特性2.1 面向接口代理的高性能RPC调用2.2 智能负载均衡2.3 服务自动注册与发现2.4 高度可扩展能力2.5 运行期流量调度2.6可视化的服务治理与运维3.dubbo配置1. 什么是Dubbo?阿里巴巴中间件开源的一款高性能、轻量级的开源Java RPC(是远程过程调用Remote Proced...原创 2020-03-12 11:58:17 · 412 阅读 · 0 评论 -
double类型小数处理
double类型小数处理小数四舍五入:/*** 功能描述:先将小数四舍五入,再计算baseNum*num的结果,结果保留scale位小数** @param baseNum 基数* @param num 乘数* @param scale 保留几位小数* @return**/public static Double getMultip...原创 2019-12-24 11:30:16 · 572 阅读 · 0 评论 -
线程、线程池剖析
目录1. run()和start()区别2. 为什么start()一个线程只能调用一次?3.线程池是怎样工作的?4.线程池内部是调用run()还是start()?1. run()和start()区别1)run方法是runnable接口的方法start方法是thread类的方法2)run( )是线程操作的核心方法,是每个线程的入口,是由JVM创建完本地操作...原创 2019-12-20 11:40:28 · 268 阅读 · 0 评论 -
Java实现ChatRoom
基于连接通信Socket、多线程的Java聊天室1、开发环境:IDEA2018.1+JDK1.82、实现功能:实现了模拟登录注册、群聊、私聊、显示当前在线人数列表;在发送信息时,会向对方发送者及显示发送时间;显示在线人数列表时,也会显示查询时间;实现了多线程发送消息、接收消息过程。3、代码解析(源码可见本篇博客最后):1)客户端源码解析客户端使用两个线程操作......原创 2018-09-01 19:38:40 · 2315 阅读 · 0 评论 -
Java链表应用
链表类public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}1、返回倒数第k个结点前后指针法需要考虑k大于链表长度的情况public class Solution { public L...原创 2018-08-30 12:21:56 · 1072 阅读 · 0 评论 -
Java集合类
一、Java类集位于Java.util包下二、Collection接口及其子接口List与Set。1、Collection接口(JDK1.2)的继承实现结构1)Collection继承了Iterable接口(JDK1.5)可使用for-each循环(增强型for循环)继承了该接口的核心方法Iterator<T> iterator()(返回值为Iterator类、...原创 2018-08-25 13:52:17 · 248 阅读 · 0 评论 -
反射
一、反射的操作核心:Objectpublic final native Class<?> getClass():返回Class二、反射中四大核心类(Class、Constructor、Method、Field)的常用操作方法1、Class:描述其他类的结构1)Class类的三种实例化(每个类的Class对象有且只有一个,由JVM在类加载时创建)a、任意对象.getC...原创 2018-08-11 11:26:40 · 4360 阅读 · 2 评论 -
IO
一、File类:与文件本身操作有关的类,File类即可描述文件,也可描述文件夹文件本身操作:创建、删除、取得信息(文件大小等等文件本身的信息),文件本身操作与文件内容无关1、文件基本操作步骤:1)取得File类对象:File类构造方法:public File(String path);2) 判断文件是否存在:file.exists();3)判断当前file对象是否为文件:fil...原创 2018-08-08 11:44:39 · 178 阅读 · 0 评论 -
线程同步总结
线程同步两大方式1、synchronized:内键锁,JDK1.0作为关键字提供的同步手段1)同步代码块(推荐使用,锁粒度较细)使用内键锁作用于方法中;同一时刻只能有一个线程进入的代码块,方法内仍是多线程synchronized(this){ //需要同步的代码块}2)同步方法 使用内键锁作用于方法头;同一个时刻只有一个线程能进入此方法publi...原创 2018-08-05 13:03:49 · 267 阅读 · 0 评论 -
用应用泛型、工厂设计模式实现双链表
1、用应用泛型、工厂设计模式实现双链表package tlinklist;//用泛型代替Object的双向链表实现public interface LinkList<T> { void add(T t); void addIndex(int index, T t); boolean remove(int index); boolean modify(in...原创 2018-08-03 17:18:25 · 234 阅读 · 0 评论 -
Java泛型总结
一、概念解释泛型类:引出:JDK1.5,为了解决程序中向下转型出现的参数转换安全问题 解释:类在定义的时候不会设置属性或方法参数的具体类型,而是使用时定义 基本语法:MyClass类就是一个泛型类 class MyClass<T>{ T value;//T代表变量类型,可以是任意类型,与<T>不同} <T>:T代表类型参数,可以指代...原创 2018-07-31 19:10:45 · 180 阅读 · 0 评论 -
Java多线程的创建与线程状态的转换
一、线程创建第一种方式:继承Thread类,覆写run( )run( )是线程操作的核心方法,是每个线程的入口 run()是由JVM创建完本地操作系统级线程后回调的方法,不可手工调用,否则就是普通方法 通过调用Thread类的start()启动线程,一个线程只能调用一次start( ),否则会抛出线程状态异常 通过start( )调用start0():private native vo...原创 2018-07-29 14:22:10 · 286 阅读 · 0 评论 -
Java三大类
1、总结String、Object、包装类的常用方法以及注意点;2、编程题: 要求: 1).Person类有name,age,salary属性,要求实现至少两个构造方法,并且属性私有,提供对应的getter、setter。 2).覆写toString方法,要求在System.out.println()函数中传递Person对象能打印出三个属性值而不是对象地址。 3).覆写equals方法,要求两个...原创 2018-07-04 21:41:00 · 861 阅读 · 0 评论 -
JAVA接口
1.说出下面程序的执行结果:interface InterfaceA { String S = "good "; void f(); } abstract class ClassA { abstract void g(); } class ClassB extends ClassA implements InterfaceA { void g() { System...原创 2018-07-02 18:17:29 · 339 阅读 · 0 评论 -
Java面向对象下
1.定义一个Father和Child类,并进行测试。 要求如下: 1)Father类为外部类,类中定义一个私有的String类型的属性name,name的值为“zhangjun”。 2)Child类为Father类的内部类,其中定义一个introFather()方法,方法中调用Father类的name属性。 3)定义一个测试类Test,在Test类的main()方法中,创建Child对象,并调用i...原创 2018-06-23 21:33:11 · 260 阅读 · 0 评论 -
Java面向对象上
1.创建一个Test类,包含有一个public权限的int型成员变量与一个char类型的成员变量,观察在main方法中的初始值。2.编写一个程序,展示无论你创建了某个特定类的多少个对象,这个类的某个特定的static成员变量只有一个属性。3.一个斐波那契数列是由数字1、1、2、3、5、8、13、21、34等等组成的,其中每一个数字(从第三个数字起)都是前两个数字的和。创建一个方法,接受一个整数参数...原创 2018-06-17 17:39:29 · 157 阅读 · 0 评论