![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 59
孤鸿踏雪
一介书生,三尺微命。
展开
-
设计模式阶段总结
设计模式阶段总结原创 2022-07-19 15:16:11 · 509 阅读 · 2 评论 -
中英文名称匹配
Java: public static Boolean checkName(String name) { if (StringUtils.hasText(name)) { //中文匹配 刘明 刘明·王小二 name = name.trim(); String pattern = "^[\\u4e00-\\u9fa5.·\\u36c3\\u4DAE]{2,}$"; boolean isMat原创 2022-04-08 10:56:45 · 577 阅读 · 0 评论 -
Spring教程动画文字版2
这个是笔者在B站看周瑜大神的相关视频时候的笔记B站 周瑜大神原创 2022-03-03 14:43:17 · 316 阅读 · 0 评论 -
(转)Thread.sleep(0) 到底有什么用
Thread.Sleep(0)的作用,就是“触发操作系统立刻重新进行一次CPU竞争”。竞争的结果也许是当前线程仍然获得CPU控制权,也许会换成别的线程获得CPU控制权。这也是我们在大循环里面经常会写一句Thread.Sleep(0) ,因为这样就给了其他线程比如Paint线程获得CPU控制权的权力,这样界面就不会假死在那里。原文链接https://mp.weixin.qq.com/s/XHy6IrsGwe31km218BZTvw...转载 2022-03-02 15:24:27 · 140 阅读 · 0 评论 -
SpringBoot 定时器总结
目录基于@Scheduled的定时器cron配置在类中cron在配置文件中cron配置在数据库中支持动态修改cron的定时器(SchedulingConfigurer)基于@Scheduled的定时器这个很简单,使用和这个注解,配置一个cron表达式,在 主类中增加一个注@EnableScheduling即可。这种定时器 cron表达式位置不同,分成三种。cron配置在类中例如: @Scheduled(cron = "*/3 * * * * ?")原创 2021-08-25 11:35:03 · 364 阅读 · 0 评论 -
SpringBoot项目 配置日志生成文件
目录版本遇到的坑效果日志学习版本ch.qos.logback:logback-classic:1.2.3ch.qos.logback:logback-core:1.2.3配置:yml 里面的配置:#日志输出配置logging: config: classpath:log4j2-spring.xml file: path: .在rsources目录下生成一个xml文件:log4j2-spring.xml<?xml version=.原创 2021-08-24 15:06:09 · 823 阅读 · 0 评论 -
对接微信JS-JDK
实现一个功能,基于一个公众号平台,需要转发到朋友圈,因此需要对接JS -jdk接口后端需要实现获取签名,并且给前段返回签名,时间戳,随机字符串等信息。具体可以参考官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#2总的来说,根据appId和appSecret先获取access_token,再根据access_token获取jsapi_ticket,然后根据jsapi_ticket原创 2021-08-19 14:20:19 · 1034 阅读 · 0 评论 -
canal-mysql-es 集成 linux服务器安装总结
mysql 8.0.26 安装解压32位安装包:进入安装包所在目录,执行命令:tar -zxvf mysql-5.6.17-linux-glibc2.5-i686.tar.gz复制解压后的mysql目录到系统的本地软件目录:执行命令:cp mysql-8.0.26-el7-x86_64 /usr/local/mysql -r注意:目录结尾不要加/.在MySQL根目录下新建一个文件夹data,用于存放数据mkdir data添加系统mysql组和mysql用户:执行命令:grou.原创 2021-07-27 15:59:29 · 179 阅读 · 0 评论 -
easyexcel 数据量过大问题
java总的生成excel工具 poi太费事了,于是就是用来 阿里提供的 easyexcel 很简单,具体使用方式参考:https://zhuanlan.zhihu.com/p/88720415?utm_source=wechat_timeline原创 2021-06-04 11:25:44 · 3920 阅读 · 4 评论 -
AOP两种动态代理方式
Spring 提供了两种方式来生成代理对象: JDKProxy 和 Cglib,具体使用哪种方式生成由 AopProxyFactory 根据AdvisedSupport 对象的配置来决定。默认的策略是如果目标类是接口, 则使用 JDK 动态代理技术,否则使用 Cglib 来生成代理。AopProxyFactory源码:public interface AopProxyFactory { /** * Create an {@link AopProxy} for the given ..原创 2020-09-28 14:26:56 · 1533 阅读 · 0 评论 -
Java 虚拟机初识-G1收集器
《深入理解JAVA虚拟机 3》Garbage First收集器开创了收集器面向局部收集的设计思路和基于Region的内存布局形式。JDK9开始,G1宣告取代Parallel Scavenge加 Parallel Old组合,成为服务端模式下的默认垃圾收集器。设计思路:G1的目标是建立一个”停顿时间模型(Pause Prediction Model)的收集器“,也就是支持指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间大概率不超过N毫秒。和之前的垃圾收集器的区别: 之前的收原创 2020-09-16 22:44:15 · 129 阅读 · 0 评论 -
Java 虚拟机初识-运行时数据区
《深入理解JAVA虚拟机 3》二. 运行时数据区Java虚拟机在执行Java程序的过层中会把它所管理的内存划分成若干个不同的数据区域。这些区域各有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一致存在,有的依赖用户线程的启动和结束而建立和销毁。组要分成以下几类:1.程序计数器(Program Counter Register)是一个较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。每个线程都需要一个单独的程序计数器,所以是线程私有。此区域是唯一一个...原创 2020-09-14 22:10:39 · 79 阅读 · 0 评论 -
@Autowired 注解针对父类注入时加载方式分析
问题:1.springBoot 类 BService 继承 类 AService ,在写CLassA单元测试的时候如果写成@Autowiredprivate AService service;或者写成:@Autowiredprivate AService wefsd; //一个乱七八糟的字符组成启动容器的时候会报错,显示:NoUniqueBeanDefinitionException , X.X.X.XAService这个bean,发现了两个一个是 aSer..原创 2020-07-13 23:09:46 · 3975 阅读 · 0 评论 -
PowerMockoito中@PrepareForTest作用
源码注释:/** * This annotation tells PowerMock to prepare certain classes for testing. * Classes needed to be defined using this annotation are typically those that * needs to be byte-code manipulated. This includes final classes, classes with * final,原创 2020-06-30 22:24:44 · 6490 阅读 · 0 评论 -
java.lang.Exception: No runnable methods
Spring 或者 Springboot 测试的时候出现的异常log:java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191) at org.junit.runners.BlockJUnit4ClassRunner.collectInitializatio..原创 2020-06-14 14:47:33 · 7203 阅读 · 3 评论 -
Spring Bean作用域简介
按照spring官网说明,分成如下五种Scope Description singleton (Default) Scopes a single bean definition to a single object instance for each Spring IoC container. prototype Scopes a single bean definition to any number of o..原创 2020-05-24 21:59:35 · 717 阅读 · 0 评论 -
Spring 实现对象实例化的几种方式
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://.原创 2020-05-24 15:45:32 · 584 阅读 · 0 评论 -
java一个类实现多个接口,这些接口具有相同的default方法的场景
场景描述:一个类实现两个接口,这两个接口里面都有一个相同方法名的方法,那么该类在引用这个方法的时候,具体是是引用的那个呢?目录场景描述:1、如果该类自己也有一个同名的方法2.如果该类没有实现这个方法2.1 如果这些接口之间没有继承关系 2.2 如果这些接口有继承关系1、如果该类自己也有一个同名的方法 那么毫无疑问,这个调用方法,是它自己的。public interface Animal { public void run(); ...原创 2020-05-17 23:26:35 · 2233 阅读 · 1 评论 -
两个线程依赖另外一个线程的数据实现笔记
ThreadA、ThreadB、ThreadC,ThreadA 用于初始化数据 num, 只有当 num 初始化完成之后再让 ThreadB 和 ThreadC 获取到初始化后的变量 num。 分析过程如下: 考虑到多线程的不确定性,因此我们不能确保 ThreadA 就一定先于 ThreadB 和 ThreadC 前执行,就算 ThreadA 先执行了,我们也无法保证 ThreadA 什么时候才能将变量 num 给初始化完成。因此我们必须让 ThreadB 和 ThreadC 去等待 T..原创 2020-05-10 16:14:00 · 596 阅读 · 0 评论 -
java 线程变量值得变化笔记
在java 内存模型中每一个线程运行时都有一个线程栈,线程栈保存了线程运行时候变量值的信息。当线程访问某一个对象值得时候,首先通过对象的引用找到在堆内存的变量的值(read),然后把这在队内变量的具体值load到线程本地内存,建立一个变量副本,之后线程就不在和堆内存变量的值有任何关系,而是直接修改副本变量的值,在修改完之后的某一个时刻(线程退出之前),自动把线程变量副本的值回写到对象在堆内存该变量中,这样堆内存中这个对象的值就发生变化了。public class Counter { priva原创 2020-05-10 15:45:43 · 242 阅读 · 0 评论 -
java 深拷贝和浅拷贝
java 中如果要克隆,对于基本类型来说,需要实现Cloneable接口,不需要实现自定义clone()方法,只需要 @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); }即可,但是如果不是基本类型,还是这样操作的话,就...原创 2020-05-06 12:41:17 · 104 阅读 · 0 评论 -
Integer类中默认缓存-128~127之间的整数值
当我们给一个 Integer 对 象赋一个 int 值的时候,会调用 Integer 类的静态方法 valueOf,如果看看 valueOf 的源代码就知道发生了什么。 /** * Returns an {@code Integer} instance representing the specified * {@code int} value. If a new {...原创 2020-05-06 12:41:08 · 459 阅读 · 0 评论 -
java.time 的 API
java8中 关于时间的API 这里保存下,留作以后拿来即用的工具package com.example.demo.java8.service;import java.time.*;import java.time.chrono.ChronoLocalDateTime;import java.time.chrono.Chronology;import java.time...原创 2020-05-06 12:40:45 · 176 阅读 · 0 评论 -
Java “+”运算符进行字符串连接和 StringBuffer/StringBuilder 对象的 append 方法连接字符串性能分析
字符串是 Java 程序中最常用的数据结构之一。在 Java 中 String 类已经重载了"+"。也就是说,字符串可以直接使用"+"进行连接。在 Java 中提供了一个StringBuilder 类(这个类只在 J2SE5 及以上版本提供,以前的版本使用 StringBuffer 类),这个类也可以起到"+"的作用。那么我们应该用哪个呢?...原创 2020-05-05 16:23:10 · 388 阅读 · 0 评论 -
Java final、finally、finalize
final:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承。 finally:异常处理语句结构的一部分,表示总是执行。 finalize:Object 类的一个方法,在垃圾回收器执行的时候会调用被回收对象的此方法,当该方法 被系统调用则代表该对象即将“死亡”,但是需要注意的是,我们主动行为上去调用该方法并不会导致该对 象“死亡”,...原创 2020-05-05 15:52:32 · 75 阅读 · 0 评论 -
Java throw 和 throws
throwthrow 语句用在方法体内,表示抛出异常,由方法体内的语句处理。 throw 是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行 throw 一定是抛出了某种异常。 throwsthrows 语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。 throws 主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需...原创 2020-05-05 15:48:03 · 187 阅读 · 0 评论 -
从尾到头打印链表
题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。链表从头到尾很好输出,顺序打印即可,单过来输出呢?在考虑时间和空间复杂度的情况下,用栈!代码如下:public class ListNode { int val; ListNode next = null; ListNode(int val...原创 2020-05-05 15:44:43 · 98 阅读 · 0 评论 -
二叉树的镜像
题目:操作给定的二叉树,将其变换为源二叉树的镜像这个其实还是递归的思想:我们考虑到 f(root) = f(left)+f(right),在左右子树知道的情况下,是不是交换一下左右子树就可以得到该二叉树的镜像了?按照这个逻辑:代码如下:public class TreeNode { int val; TreeNode left; ...原创 2020-05-05 15:41:37 · 128 阅读 · 0 评论 -
Java error 和 exception
Error 类和 Exception 类的父类都是 Throwable 类,他们的区别如下。 Error 类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。 Exception 类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该...原创 2020-05-05 15:31:38 · 88 阅读 · 0 评论 -
Java异常机制中finally
Java异常机制有这么一个原则:如果在 catch 中遇到了 return 或者异常等能使该函数终止的话 那么有 finally 就必须先执行完 finally 代码块里面的代码然后再返回值。也就是说如果finally里面有返回语句,那么catch里面的返回语句就不会执行了,如下代码:public int getNumberResult(){ try...原创 2020-05-05 15:24:13 · 167 阅读 · 0 评论 -
Java异常分类
按照异常需要处理的时机分为编译时异常(也叫强制性异常)也叫 CheckedException 和运行时异常(也叫非强制性异常)也叫 RuntimeException。 只有 java 语言提供了 Checked 异常,Java 认为 Checked 异常都是可以被处理的异常,所以 Java 程序必须显式处理Checked 异常。如果程序没有处理 ...原创 2020-05-05 15:18:58 · 98 阅读 · 0 评论 -
Java重载(overload)和重写(override)的区别
重载(overload)和重写(override)方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态 性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为 重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方 法更好访问...原创 2020-05-05 15:13:54 · 223 阅读 · 0 评论 -
Java线程状态转换
《深入理解JAVA虚拟机》Java语言定义了如下几种线程状态,在任意一个时间点,一个线程只有有且只有一个其中的一个状态。1.新建(New):新建后尚未启动的线程处于这种状态;2.运行(Runnable):Runnable 包括了操作系统线程状态的Running和Ready,也就是处于此状态的线程有可能正在运行,也有可能 正在等待CPU为它分配执行时间。3.无限期等待(Wai...原创 2020-05-05 12:46:17 · 136 阅读 · 0 评论 -
Java内存模型(JMM)和volatile学习笔记
《深入理解JAVA虚拟机》Java内存模型(Java Memory Model JMM)屏蔽掉各种硬件和OS的内存访问差异,实现各种平台访问结果一致性。物理机内存模型JMM和物理机的高速缓存模型很相似,如图:JMM几个概念:主内存:JMM规定所有变量都存储在主内存中,主要对应堆中的对象实例数据部分(堆中还保存其他信息,不属于主内存),类比物理硬件的主内存;工作内存:...原创 2020-05-04 18:44:20 · 152 阅读 · 0 评论 -
JVM类加载器和双亲委派模型
《深入理解JAVA虚拟机》类加载器类加载器虽然只是用于实现类的加载动作,但是在Java程序中起到的作用却不止,低于任何一个类而言,都需要有加载它的类加载器和这个类本身一同确认其在Java虚拟机中的唯一性。比价两个类是否相等,只有在这两个类都是同一个类加载器的前提下才有意义,也就是说,即使这两个类来源同一个CLass文件,被同一个虚拟机加载,但是不要同一个类加载器,那么这两个类就不相等。...原创 2020-05-04 12:34:24 · 92 阅读 · 0 评论 -
JVM垃圾回收算法
《深入理解JAVA虚拟机》垃圾回收算法的几种算法思想简介:标记-清除算法分为“标记”和“清除”两个阶段,首先标记出所有需要回收的对象,标记方法请参考这里,在标记完成后统一回收。优点:简单不足:1.效率不高,2 会产生大量不连续的内存碎片,容易触发另外一次的垃圾收集动作。复制算法为了解决效率问题而出现,复制算法将内存按容量划分为大小相等的两块,每次只使用其中的一块,当这一...原创 2020-05-03 17:59:18 · 82 阅读 · 0 评论 -
JVM判断对象是否已死方算法
jvm判断对象是否存活的方法:引用计数法 给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1,当引用失效时,计数器的值就减1,任何时刻计数器的值是0的时候,该对象就不可能再被使用了。引用计数器的缺陷:无法解决相互引用的问题。即A和B两个对象相互引用,初次之外,这两个对象没有任何引用。可达性分析法主流的商用程序语言的主流实现都是这个,基本思路是:...原创 2020-05-03 16:59:02 · 139 阅读 · 0 评论 -
Java 虚拟机初识-类加载子系统
一个class文件在虚拟机的运行过程需要经过如下过程,每个大体功能记录下。一Class Loader System(类加载子系统)Loading(加载)Linking(链接)Initialization(初始化)二Runtime Data Area(运行时数据区)Method Area(方法区)与java堆一样,是各个线程共享的内存区域,...原创 2020-05-04 11:53:53 · 121 阅读 · 0 评论 -
Lambda表达式使用局部变量的限制
结论Lambda可以没有限制地引用实例变量和静态变量。但局部变量必须显式声明为final,或事实上是final。换句话说,Lambda表达式只能引用指派给它们的局部变量一次。(注:实例变量可以被看作捕获最终局部变量this。)原因第一,实例变量和局部变量背后的实现有一个关键不同。实例变量都存储在堆中,而局部变量则保存在栈上。如果Lambda可以直接访问局部变量,而...原创 2020-04-19 14:59:15 · 2866 阅读 · 0 评论