
Java
文章平均质量分 84
JAVA基础,JAVA多线程
=PNZ=BeijingL
always be learning
展开
-
使用Mockito实现单元测试
Mockito 是一个流行的 Java 单元测试框架,用于模拟(mock)对象以便进行单元测试。它可以帮助开发人员创建和管理模拟对象,以便在测试过程中替换那些不容易构造或获取的对象,从而达到测试被测代码的行为,而无需依赖于实际的外部系统或服务。相信很多公司都不会做单元测试,觉得耗时且收益低,随着AI辅助工具流行,通过AI工具可以很简答的实现单元测试。例如图中通过通义灵码帮助完成单元测试代码,在项目降低了程序中的缺陷,而单元测试花费时间大幅度下降。在一定程度上提高了开发人员投入产生的收益。原创 2025-03-10 12:25:44 · 1023 阅读 · 0 评论 -
【JVM】卸载JDK后问题could not open …jvm.cfg
问题Error: could not open `C:\Program Files\Java\jre6\lib\amd64\jvm.cfg'原创 2024-10-23 17:33:31 · 556 阅读 · 0 评论 -
线程变量引发的session混乱问题
问题排查:线程变量引发的session混乱问题原创 2023-12-04 20:01:23 · 1370 阅读 · 1 评论 -
线程池技术总结
1. 线程池解决了什么问题线程池是集中管理线程的,以实现线程的重用,降低资源消耗,提高响应速度,提高线程的可管理性等。线程用于执行异步任务,单个的线程既是工作单元也是执行机制,从JDK1.5开始,为了把工作单元与执行机制分离开,Executor框架诞生了,他是一个用于统一创建与运行的接口。Executor框架实现的就是线程池的功能。使用线程池可以进行统一的分配,调优和监控。使用线程池的优势降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。原创 2023-12-01 15:01:39 · 1218 阅读 · 0 评论 -
使用Arthas排查性能问题
记使用Arthas排查性能问题原创 2023-11-28 01:00:00 · 2880 阅读 · 0 评论 -
如何处理 java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy原创 2023-11-07 18:20:13 · 1978 阅读 · 0 评论 -
GC overhead limit exceeded问题
程序包运行时候发生了java.lang.OutOfMemoryError: GC overhead limit exceeded异常原创 2023-10-21 11:28:35 · 1733 阅读 · 0 评论 -
JSch登录sftp时发现需要Kerberos身份验证
项目开发中使用了SFTP,debug调试程序时发现了每次都需要手动输入 Kerberos的口令信息。这就很奇怪了难道每次连接SFTP时候都需要手动输入吗?本问记录使用JSch登录sftps时遇到的Kerberos验证问题并记录了解决方法原创 2023-06-26 18:58:33 · 1031 阅读 · 0 评论 -
编译时不好的注释会让代码丢失并产生问题
不知道有没有人遇到过编译后部分代码缺失呢?反正我遇到了原创 2023-04-26 19:41:36 · 727 阅读 · 1 评论 -
频繁GC引起卡顿问题排查与解决
本问题是因为开发提交了几行未经测试的代码引起, 此代码直接引起内存泄露,系统频繁GC。这也是提交未测试代码引起故障的典型案例原创 2023-04-23 16:36:43 · 2773 阅读 · 0 评论 -
了解高可用
高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。设计系统的可用性,最重要的是满足用户的需求。系统的失败只有当其导致服务的失效性足以影响到系统用户的需求时才会影响其可用性的指标。原创 2023-04-11 18:39:05 · 616 阅读 · 0 评论 -
解析异常SAXParseExceptionis如何处理
特殊字符串经常会造成字符串解析异常SAXParseException,本文记录某次问题的排查过程和处理方法。原创 2022-11-28 16:54:28 · 1737 阅读 · 0 评论 -
JAVA多线程同步队列SynchronousQueue
SynchronousQueue是一个不存储元素的阻塞队列,每个put操作必须等待一个take操作,否则不能添加元素原创 2022-08-09 19:03:49 · 1504 阅读 · 0 评论 -
JAVA多线程信号量Semaphore
Semaphore 通常我们叫它信号量, 这个对象有什么作用呢原创 2022-08-06 12:00:19 · 732 阅读 · 0 评论 -
JAVA多线程同步计数器CountDownLatch作用
CountDownLatch 是一个同步辅助类,即倒数计数器。在完成一组正在其他线程中执行的操作前,它允许一个或者多个线程处于等待状态,在当前计数到达零前,await方法会一直阻塞原创 2022-08-01 20:09:12 · 1502 阅读 · 0 评论 -
JAVA多线程FutureTask作用
FutureTask是一个异步运算的任务,FutureTask里面可以可以传入Callable实现类作为参数,可以对异步运算任务的结果进行等待获取,判断是否已经完成,取消任务等操作。理解FutureTask之前先要知道Future接口.........原创 2022-08-01 10:20:40 · 1039 阅读 · 0 评论 -
JAVA多线程面试中常问的问题
面试中常问的多线程问题原创 2022-07-20 19:30:37 · 780 阅读 · 0 评论 -
Java中double精度丢失如何处理
不论是double还是float都是浮点数, 计算机进行计算的时候采用二进制来计算,先将10进制转换成二进制,然后进行计算,最后再将二进制转换为十进制。浮点数会失去一定的精度原创 2022-07-14 19:45:50 · 2218 阅读 · 0 评论 -
Java中serialVersionUID作用
聊聊序列化接口java.io.Serializable和serialVersionUID原创 2022-06-11 16:37:28 · 2595 阅读 · 1 评论 -
JVM记 jstack命令的时候报错Unable to open socket file
记一次CPU飙升并且内存溢出异常排查原创 2022-06-06 11:20:55 · 6359 阅读 · 1 评论 -
Java中如何使用try…catch处理异常
try...catch 块try..catch块主要用于处理异常, 一般会将可能出现问题的代码写在try块中,以处理程序中出现的程序错误,如果一个异常发生在try块中,如果异常需要被相应的程序处理,那么就使用catch块来捕获异常,并在catch块中填写处理异常的代码,就像下面的方式try { //这里是可能出现问题的代码}catch(Exception e){ //捕获后处理的代码}举个例子实现从配置文件system.properties配置文件中读...原创 2022-03-26 15:34:16 · 2758 阅读 · 0 评论 -
Java中java.math.BigInteger用法
摘要:java.math.BigInteger用来表任意大小的整数,内部是用数组来表示数值,此对象最长用的构造器为参数为字符串的构造器,此构造器将参数数值字符串转换BigInteger数值,并且支持“+”、“-” 符号,“+”表示正值,“-”表示负值。但是数值字符串不能包含其他无关字符串原创 2022-03-22 11:31:20 · 3251 阅读 · 1 评论 -
Java面试中 == 、 equals 、hascode 相关问题如何回答
最近旁边的同学常常做电话面试, 经常听他问下面的这个问题。题目如下:== 比较和equals比较有什么区别, 说说你的理解这个问题看着比较容易,其实很容易对面试者的技术有个初步的理解 ,这个问题如何回答呢==比较对于==,比较的是值是否相等如果作用于基本数据类型的变量,则直接比较其存储的 值是否相等, 如果作用于引用类型的变量,则比较的是所指向的对象的地址是否相等。equals比较对于equals方法比较,比较的是其他对象和本对象是否相等先看Object#euq...原创 2022-03-07 19:28:32 · 709 阅读 · 0 评论 -
StandardServer.await: create[8005]: java.net.BindException问题原因分析
org.apache.catalina.core.StandardServer await严重: StandardServer.await: create[8005]: java.net.BindException: Cannot assign requested address: JVM_Bind原创 2022-02-28 11:08:55 · 1474 阅读 · 1 评论 -
ClassCastException: XXX are in unnamed module of loader ‘app‘异常分析
项目场景:SpringBoot 2.x + Spring5.3.14 测试使用Trigger实现任务调度问题描述:程序编译不报错, 启动SpringBoot后台报错,根据日志提示发现创建SchedulerFactoryBean的时候发生了ClassCastException类转换异常class org.quartz.impl.triggers.CronTriggerImpl cannot be cast to class [Lorg.quartz.Trigger; ...原创 2022-02-24 10:46:05 · 27407 阅读 · 3 评论 -
[Java] 枚举类型
枚举是Java SE5增加的是一种类型,即eunm关键字原创 2022-02-14 12:04:54 · 597 阅读 · 0 评论 -
异常处理 org.springframework.dao.DataIntegrityViolationException
问题描述:数据仓库: Oracle 11g后台报错:DataIntegrityViolationException详细日志:Caused by: java.lang.ClassNotFoundException: org.springframework.dao.DataIntegrityViolationException at java.net.URLClassLoader$1.run(Unknown Source) at java.security.Acc...原创 2022-02-09 11:58:20 · 14254 阅读 · 1 评论 -
Log4j2安全 JNDI漏洞 CVE-2021-44228
12 月 10 日,Apache 开源项目 Log4j 的远程代码执行漏洞(CVE-2021-44228) 被公开原创 2021-12-15 15:44:12 · 1685 阅读 · 2 评论 -
异常java.lang.LinkageError: loader constraints violated when linking
SA 的BOSS系统有后台任务,系统使用Javamail将客户的下月账单发送到客户邮箱中,升级系统后发现后台有报错java.lang.LinkageError: loader constraints violated when linking原创 2021-12-14 18:48:01 · 1191 阅读 · 0 评论 -
JVM记一次java.lang.NoSuchMethodError问题排查过程
项目场景: 最近在看深入理解JAVA虚拟机,很巧,这两天正好遇到一个相关的问题,记录一下排查过程和问题产生的原因 ,希望帮助到看这篇文章的朋友。NoSuchMethodError问题是由于系统开发补丁引起的问题描述:系统日志出现NoSuchMethodErrorjava.lang.NoSuchMethodError: com.star.sms.richclient.businessquery.form.ProductInfoView.getProduct()Lcom/star/sms/..原创 2021-10-08 17:46:54 · 523 阅读 · 0 评论 -
JAVA: JDK动态代理
什么是动态代理动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。JDK动态代理JDK动态代理是一种基于接口的动态代理,代理对象必须是实现接口,通过使用JDK官方的Proxy类创建代理对象。JDK的动态代理主要涉及到java.lang.reflect包的两个类:Proxy和Invocation原创 2021-09-27 11:56:26 · 174 阅读 · 0 评论 -
JVM从虚拟机层面了解重载和重写
本文是读周志明先生著的《深入理解Java虚拟机》一书有感后写的一篇读书笔记。想要更多了解相关内容建议去度此书。 言归正传,众所周知,面向对象的三个基本特征是继承,封装,多态,本文将介绍在Java虚拟机中如何实现的“重载”与“重写”...原创 2021-09-24 17:01:41 · 295 阅读 · 0 评论 -
JVM从虚拟机类加载看java.lang.NoSuchMethodError
Java虚拟机中类加载过程经过5个过程加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization),其中验证、准备,解析这三个阶段又叫做连接(Linking)过程类加载过程1. 加载(Loading)读取Class文件定义类的二进制流,将字节流代表的静态存储结果转换成方法区的存储结构在内存中生成一个java.lang.Class对象2. 验证(Verification)...原创 2021-09-17 17:13:44 · 236 阅读 · 0 评论 -
JVM从虚拟机字节码中看关键字synchronized实现
Java语言中的synchronized关键字表示同步,可以作为函数的修饰符或者函数内的语句,当一个线程访问实例对象中被synchronized修饰的方法或者synchronized修饰的同步块时,线程获取该实例的对象级别的锁,此时其他线程如果要访问相同方法的时候就需要阻塞等待,直到前面的线程从同步块或者同步方法中退出并释放锁。 Java虚拟机可以支持指令序列的同步,同步是通过监视器(Monitors)来实现的, 监视器主要功能是监控一段代码,确保在同一时间只有一个线程在执行。...原创 2021-09-14 18:21:43 · 274 阅读 · 0 评论 -
JVM虚拟机如何查看.class文件
Java标志是一杯热咖啡,这杯热咖啡你很难与计算机编程联想到一起,这杯热咖啡却是Java这个名字的由来。故事是这样的,JAVA语言起名时,简姆斯 古斯林注意到自己办公室外一棵茂密的橡树Oak,这是一种在硅谷很常见的树。所以他将这个新语言命名为Oak。但Oak是另外一个注册公司的名字。这个名字不可能再用了。他的一个同事马克 奥颇门(Mark Opperman)在一家咖啡店于同事品尝咖啡时得到了灵感,想到了Java一词。Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。国外的许多咖啡店用Jav...原创 2021-09-13 18:17:21 · 423 阅读 · 0 评论 -
JVM如何读GC日志以及如何使用工具分析
GC 垃圾回收必须要保证一直性的快照中进行, 一直性的意思是指分析工作期间整个系统就像静止在一个时间点上, 不能在分析过程中对象关系还在发生变化,所以GC分析过程中必须要让JAVA程序停顿,Sun把这个事件称之为STW (Stop the World) , 打个比方, 《深入理解Java虚拟机》里作者举了一个例子, 我觉得十分恰当: 当你要打扫孩子的屋子时,你会让孩子做在椅子上不动,然后才能顺利的完成打扫房间。如果你一边打扫房间,孩子一边在房间里仍东西,你将永远无法完成打扫房间的工作 ...原创 2021-09-10 11:16:30 · 569 阅读 · 0 评论 -
JVM虚拟机垃圾回收中的finalize方法作用
C垃圾回收最主要的作用是回收程序中不再使用的内存。当使用new创建对象后, Java虚拟机会给其分配一块内存资源, 当对象无用的时候Java的垃圾回收器负责回收无用对象占用的内存资源。如果你的对象并非用new获取了一块“特殊”内存,垃圾回收只知道释放那些由New分配的内存, 它并不知道如何释放对象的“特殊内存”,为了应对这种情况,Java允许在类中命名finalize方法 GC垃圾回收过处理可达性分析算法中不可达的对象被标记成需要回收, 一但垃圾回收器准备释放对象占用的...原创 2021-09-08 18:30:40 · 350 阅读 · 0 评论 -
JVM如何用Eclipse Memory Analyzer分析堆内存溢出
Eclipse Memory Analyzer是一个Java堆内存析工具。工具可以帮助开发者检测内存泄漏和分析内存消耗情况。Eclipse Memory Analyzer用于分析Java堆转储文件(Heap Dump)文件。本文介绍如何实用Eclipse Memory Analyzer(MAT)插件。Eclipse安装Eclipse Memory Analyzer插件设置虚拟机启动参数:-XX:+HeapDumpOnOutOfMemoryError -XX:H...原创 2021-09-02 12:03:36 · 852 阅读 · 0 评论 -
JVM记一次堆内存溢出OutOfMemoryError: Java heap space
项目场景:前段时间现场报了一个内存溢出的OutOfMemoryError: Java heap space的问题,这个问题十分典型,所以记录下来,希望能帮助到看这篇文章的朋友问题描述:问题项目: 改问题出现在省网的BOSS系统, 这是一个BS架构的系统, 前台使用的Spring Rich Client 也叫Spring胖客户端,Spring Richclient 是一个基于 Spring的企业级富客户端开发框架,使用该框架,可以轻易构建出具有良好可维护性和可扩展性的企业级 Swing .原创 2021-08-31 19:36:08 · 3163 阅读 · 0 评论 -
JAVA:SimpleDataFormat格式化字符串引发的惨案
项目场景:项目中发现某类消息的时间字符串都是08分钟,消息的创建时间99%以上都不是08分钟创建的,数据十分整齐原因分析:经过排查发现本问题又和SimpleDateFormat有关, 新员工使用SimpleDateFormat 处理的时候格式字符串编写错误导致了这个问题public class Test { public static void main(String[] args) { SimpleDateFormat format1=new SimpleDateFormat原创 2021-08-19 13:10:07 · 324 阅读 · 0 评论