
java
文章平均质量分 59
码灵
爱码。
平时学习新的知识,看到了新的东西,记录下来。
展开
-
Java开发手册
专家语录一个优秀的工程师和一个普通工程师的区别,不是满天飞的架构图,他的功底体现在所写的每一行代码上。工程师对于代码,一定要“精益求精”,不论从性能,还是简洁优雅,都要具备“精益求精”工匠精神,认真打磨自己的作品。对于程序员来说,关键是骨子里意识到规范也是生产力,个性化尽量表现在代码的可维护性和算法效率的提升上。...原创 2020-07-27 22:14:54 · 209 阅读 · 0 评论 -
java 脚本使用不同版本jdk说明
ScriptEngine (Nashorn/Rhino):适用于JDK 8及以下版本,适合简单的JavaScript脚本执行。GraalVM:推荐在JDK 11及以上使用,支持更多语言,并且性能更优。如果你在Java项目中需要集成或执行大量复杂的JavaScript代码,推荐使用GraalVM。如果只需要运行少量简单的JavaScript代码,可以继续使用ScriptEngine。原创 2024-10-23 16:09:07 · 680 阅读 · 0 评论 -
BigDecimal使用注意的地方
BigDecimal 是 Java 中的一个类,这个相信大家都是知道的。它的作用就是可以表示任意精度的十进制数,BigDecimal 提供了精确的数字运算,适用于需要高精度计算的场景。原创 2024-08-29 18:04:50 · 898 阅读 · 0 评论 -
Java串口框架jSerialComm替换rxtxcomm
最开始使用的是rxtxcomm框架,部署时还要手动放驱动文件,而且后面没有进行维护,导致一些一些新系统不再支持,需要手动打包。原创 2024-06-20 11:04:23 · 565 阅读 · 0 评论 -
BCD编码Java实现
最常用的BCD编码,就是使用"0"至"9"这十个数值的二进码来表示。这种编码方式,在称之为“8421码”(日常所说的BCD码大都是指8421BCD码形式)。除此以外,对应不同需求,各人亦开发了不同的编码方法,以适应不同的需求。这些编码,大致可以分成有权码和无权码两种:有权BCD码,如:8421(最常用)、2421、5421…无权BCD码,如:余3码。8421码java实现如下。原创 2024-05-22 10:15:12 · 661 阅读 · 0 评论 -
导入文件报错:Could not parse multipart servlet request; nested exception is java i0.I0Exception; The tempo
从错误代码上可以看出是因为临时目录无效(找不到临时目录)导致上传文件失败,而临时目录不存在是因为服务器会自动清理未操作的临时文件目录。原创 2024-03-05 08:58:14 · 506 阅读 · 0 评论 -
如何判断线程池已经执行完所有任务了?
使用 isTerminated 方法判断:通过判断线程池的完成状态来实现,需要关闭线程池,一般情况下不建议使用。使用 getCompletedTaskCount 方法判断:通过计划执行总任务量和已经完成总任务量,来判断线程池的任务是否已经全部执行,如果相等则判定为全部执行完成。但因为线程个体和状态都会发生改变,所以得到的是一个大致的值,可能不准确。使用 CountDownLatch 判断:相当于一个线程安全的单次计数器,使用比较简单,且不需要关闭线程池,是比较常用的判断方法。原创 2024-02-08 11:05:09 · 2889 阅读 · 0 评论 -
Java序列化详解
序列化是指将对象转化为字节流的过程,以便于存储或传输。在序列化过程中,对象的状态被保存为一连串的字节,可以将这些字节保存到文件中或通过网络传输。序列化后的字节流可以在需要时进行反序列化,将字节流重新转化为对象,并恢复对象的状态。在Java中,对象的序列化是通过实现接口来实现的。Serializable接口是一个标记接口,没有任何方法,只是用于标识一个类可以被序列化。当一个类实现了Serializable接口,它的对象就可以被序列化为字节流。原创 2024-02-08 09:13:09 · 2014 阅读 · 0 评论 -
Java8 Stream集合的筛选、归约、分组、聚合讲解
因为流不存储数据,那么在流中的数据完成处理后,需要将流中的数据重新归集到新的集合里。Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。Stream也是支持类似集合的遍历和匹配元素的,只是Stream中的元素是以Optional类型存在的。Stream的遍历、匹配非常简单。如果值存在,并且这个值匹配给定的 predicate,返回一个Optional用以描述这个值,否则返回一个空的Optional。原创 2024-01-09 17:20:24 · 2874 阅读 · 0 评论 -
Java线程池详解 老码农总结
父任务下面有两个子任务(扣费任务下的子任务),其中一个已经执行完成,另外一个被放在了任务队列中。如果我们设置的线程池数量太小的话,如果同一时间有大量任务/请求需要处理,可能会导致大量的请求/任务在任务队列中排队等待执行,甚至会出现任务队列满了之后任务/请求无法处理的情况,或者大量任务堆积在任务队列导致 OOM。这一方式,我称之为惰性线程池,(因为非核心线程是在太懒惰了,要队列满以及核心都不行了再创建,摸鱼摸太久了),如果我们队列设置的比较大的话,可能线程池永远无法扩容至设置的最大线程。原创 2023-12-22 16:09:23 · 1170 阅读 · 0 评论 -
java LevelDB工具类
【代码】java LevelDB工具类。原创 2023-10-16 16:18:39 · 676 阅读 · 0 评论 -
synchronized使用
我new两个MyRun,我前面说过synchronized(this)只能锁某个对象,就是说threadA执行myRun1 threadB执行myRun2,互不干扰,synchronized只能锁自己的run1 或者run2 不能两个对象同时锁到,所以执行的结果是无序的。1、锁如果加在方法上面,或者在方法中的代码块形式,就是锁的这个对象,如果锁是静态方法中,或者代码块synchronized(A.class) 形式 就是锁的这个类,里面的所有方法都会同步。原创 2023-08-14 17:12:10 · 176 阅读 · 0 评论 -
io.netty项目UDP实现
创建引导类(Bootstrap):创建一个引导类,用于配置和启动Netty的UDP客户端。创建引导类(Bootstrap):创建一个引导类,用于配置和启动Netty的UDP服务。添加Netty依赖:在项目的构建文件(如Maven的pom.xml)中添加Netty的依赖项,以便引入Netty库。添加Netty依赖:在项目的构建文件(如Maven的pom.xml)中添加Netty的依赖项,以便引入Netty库。启动UDP服务:调用引导类的bind()方法来启动UDP服务,绑定指定的IP地址和端口。原创 2023-05-31 16:45:30 · 1685 阅读 · 0 评论 -
ASCII Unicode UTF-8等等编码介绍
这是个很重要的特性,所以很多情况下(如很多协议传输数据时)都使用ISO 8859-1编码,由于ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO 8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。通过查询下文将要介绍的GB2312编码表,“中文”应该是"d6d0 cec4"两个字符,使用ISO 8859-1编码来“表示”的时候则将它拆开为4个字节来表示,即"d6 d0 ce c4"(事实上,在进行存储的时候,也是以字节为单位处理的)。如果是低字节序,就写入FF FE。原创 2023-05-31 09:38:43 · 909 阅读 · 0 评论 -
Lambda表达式详解-初遇者-很细
Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。原创 2023-05-26 15:09:00 · 1220 阅读 · 0 评论 -
Class类的方法cast(obj)方法
Class.cast(Object obj)方法 就是作用就是强制类型转换。将obj转化为Class类型。Parent.cast(child) 将child转化为Parent。异常告诉我们 Banana 不能转换成 Apple。到这里 有的人就明白了 Tree one = Tree.class.cast(appleTree);再创建两个实现类 Apple 和Banana。先定义一个接口 Tree。原创 2023-05-26 15:36:00 · 806 阅读 · 0 评论 -
CompletableFuture详解-初遇者-很细
CompletableFuture是jdk8的新特性。CompletableFuture实现了CompletionStage接口和Future接口,前者是对后者的一个扩展,增加了异步会点、流式处理、多个Future组合处理的能力,使Java在处理多任务的协同工作时更加顺畅便利。代码涉及到lambda表达式用法,不熟悉的可先看下。原创 2023-05-26 15:27:41 · 6922 阅读 · 0 评论 -
java接口中的default(默认)方法详解
Java的接口中有一种特殊的方法,叫做默认方法。接口中的默认方法有以下特点:default方法可以有方法体。接口中的普通方法必须被实现类重写;默认方法可以不被实现类重写。原创 2023-05-26 15:11:14 · 5597 阅读 · 1 评论 -
floatToRawIntBits和floatToIntBits
方法将单精度浮点数的位表示转换为整数,返回的整数值可以用于比较两个浮点数是否相等。这个方法会将NaN编码成一个特殊的值,并且对于同样的浮点数,它返回的整数值是固定的。,它不会将NaN编码成一个特殊的值,而是保留NaN的位模式。这个方法用于需要将浮点数位表示保存为整数的场合,例如在网络通信或持久化数据时。需要注意的是,在使用这两个方法时需要遵守IEEE 754标准的规定,否则可能会得到不正确的结果。是Java语言中两个处理浮点数和整数位之间转换的方法。方法也将单精度浮点数的位表示转换为整数,但不同于。原创 2023-05-23 10:12:22 · 655 阅读 · 0 评论 -
Java的位运算
11111111 11111111 11111111 11111100 符号位不变,其他位置取反得到原码为:10000000 00000000 00000000 00000011。11111111 11111111 11111111 11111101 - 1 得到反码:11111111 11111111 11111111 11111100。比如 -1原创 2023-04-27 18:28:06 · 1828 阅读 · 0 评论 -
Java Agent及Agent启动方式
Java Agent主要用于监控、诊断和性能分析等领域,比如可以通过Java Agent在应用程序运行时监控方法的执行时间,内存使用情况等,并且还可以在运行时修改方法的行为或者新增方法。Java Agent 启动方式指的是启动 Java 应用程序时通过命令行参数指定 Java Agent 的方式。在启动应用程序时,使用参数 "-javaagent:path/to/agent.jar" 的形式,其中 "path/to/agent.jar" 是 Java Agent JAR 文件的路径。原创 2023-04-13 17:18:55 · 1996 阅读 · 0 评论 -
Netty解码器LengthFieldBasedFrameDecoder
好绕口). 如果lengthFieldLength=4, 那么就会从上图红色位置向后读取4个字节, 把4个字节里面的内容作为真正data的长度. 而且lengthFieldLength的取值不是任意的, 它只能取值1,2,3,4,8. 具体原因后面的源码会说明.如上图, 假如lengthFieldLength=4, 读取4个字节的内容是0x00000010(十六进制表示), 十进制就是16, 也就是说, 数据data的长度是16个字节. 但是这里稍等下, 需要介绍下一个关键属性.原创 2023-04-10 18:13:07 · 2300 阅读 · 0 评论 -
Java定时任务Timer、TimerTask与ScheduledThreadPoolExecutor详解
当程序在18:00:00之前执行时,schedule分别会在18:00:00、18:00:06、18:00:12...等时间点执行计划任务,每隔时间点间隔6秒。而当程序运行时刻比计划任务计划首次执行时间晚时,如同样在18:07:00时刻开始执行程序,则计划任务程序会立马计算程序执行时刻晚于指定时刻,会立即执行(18:07:00-18:00:00)/3+1=3次任务(代表18:00:00、18:03:00和18:06:00三个时刻执行的任务),接下来任务执行时刻是18:09:00、18:12:00等。原创 2023-04-10 16:25:08 · 2830 阅读 · 0 评论 -
Postman form-data、x-www-form-urlencoded的区别
比如汉字‘丁’吧,他的utf8编码在十六进制下是0xE4B881,占3个字节,把它转成字符串‘E4B881’,变成了六个字节,每两个字节前加上百分号前缀,得到字符串“%E4%B8%81”,变成九个ascii字符,占九个字节(十六进制下是0x244534254238253831)。5、multipart/form-data将表单中的每个input转为了一个由boundary分割的小格式,没有转码,直接将utf8字节拼接到请求体中,在本地有多少字节实际就发送多少字节,极大提高了效率,适合传输长字节。原创 2023-02-01 15:14:58 · 5497 阅读 · 0 评论 -
unirest使用demo
Unirest 是一套跨语言轻量级HTTP开发库,由Kong团队维护,此团队同时维护着另一个著名开源网关项目API Gateway Kong。原创 2023-02-01 15:07:29 · 324 阅读 · 0 评论 -
Tomcat Connector运行模式
以服务端为例,如果服务端的selector上注册了读事件,某时刻客户端给服务端发送了一些数据,BIO这时会调用read()方法阻塞地读取数据,而NIO的服务端会在selector中添加一个读事件。如果没有感兴趣的事件到达则处理线程会一直阻塞,直到感兴趣的事件到达为止。nio模式(non-blocaking I/O):指非阻塞I/O操作,nio是一个基于缓冲区并能提供非阻塞I/O操作的JavaAPI,它拥有比bio更好的并发运行性能,想要Tomcat以nio模式运行我们需要修改server.xml文件。原创 2023-01-10 08:57:54 · 481 阅读 · 0 评论 -
jdk版本和Class编译版本对应关系
JDK version和class file version(Class编译版本号)对应关系。主版本号:00 34 对应的10进制为52,对应的jdk版本为jdk8。次版本号:00 00。图中红框中的代表版本号52.0。原创 2023-01-03 14:20:07 · 4483 阅读 · 0 评论 -
Arrays类 asList、 toArray的坑
Arrays.asList 返回的 List 并不是我们期望的 java.util.ArrayList,而是 Arrays 的内部类ArrayList。内部类的ArrayList没有实现add方法,而是父类的add方法的实现,是会抛出异常的呢。原创 2022-10-17 16:00:44 · 175 阅读 · 0 评论 -
多线中使用静态方法是否线程安全
静态变量,由于是在类加载时占用一个存储区,每个线程都是共用这个存储区的,所以如果在静态方法里使用了静态变量,这就会有线程安全问题!因为静态方法内声明的变量,每个线程调用时,都会新创建一份,而不会共用一个存储单元。静态方法如果没有使用静态变量,则没有线程安全问题。因此不会有线程安全问题。原创 2022-10-17 14:55:46 · 1210 阅读 · 0 评论 -
Spring Boot JAR 安全加密运行工具:XJar快速上手
Java的 Jar包中的.class文件可以通过反汇编得到源码。这样应用的安全性就很难得到保证,别人只要得到你的应用,不需花费什么力气,就可以得到源码。这时候就需要对jar进行加密处理。XJar是一款Spring Boot JAR 安全加密运行工具, 同时支持的原生JAR.它是基于对JAR包内资源的加密以及拓展ClassLoader来构建的一套程序加密启动, 动态解密运行的方案, 避免源码泄露以及反编译.原创 2022-10-12 16:28:49 · 2427 阅读 · 0 评论 -
java window10 等64位系统调用32位dll库
只有采32位jvm中才能调用32位动态库(测试所得)1 第一步将dll库放在文件夹SysWOW64中。2 安装32位jdk。原创 2022-09-29 17:13:37 · 2214 阅读 · 0 评论 -
maven分开打包与合并打包配置
将依赖包、依赖开发模块分开打包;此方式实现分离,但是jar包class-path里jar依赖已经生成;如果添加新的jar,必须重新打包;不能实现放入即用的作用;方式2实现,使用-Dloader.path实现。将依赖包、依赖开发模块合并在一起打包。将配置文件放到jar同级目录。......原创 2022-08-04 16:49:55 · 1598 阅读 · 1 评论 -
logback过期日志文件自动删除
logback+slf4j应该是目前最主流的日志框架了,在实际使用中经常遇到打印的日志文件不会自动删除,导致日志文件占有大量磁盘空间的问题。本文主要介绍logback日志文件自动删除的实现机制。logback。...原创 2022-07-29 14:38:52 · 2800 阅读 · 0 评论 -
实现HTTP2.0方式、nginx详细配置
注意由于serverpush需要servlet4版本,目前springboot2依赖的undertow还是1.4版本的还只是servlet3,因此这里需要额外exclude掉再引入undertow2版本以支持servelt4。加上-j参数,-j4和-j8性能差距不大,-j16性能就比较差。注意这里使用undertow,移除掉了starter-web中的tomcat依赖。3、springboot2.x实现http2.0的请求与发送。1、java的配置tomcat实现http2.0。...原创 2022-07-19 16:13:50 · 7167 阅读 · 0 评论 -
Minio基本使用(Java)
MinIO是一个基于ApacheLicensev2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。官方地址https//min.io/......原创 2022-07-18 16:16:12 · 10299 阅读 · 3 评论 -
Spring AOP 注解概述
Spring的AOP功能除了在配置文件中配置一大堆的配置,比如切入点、表达式、通知等等以外,使用注解的方式更为方便快捷,特别是Springboot出现以后,基本不再使用原先的beans.xml等配置文件了,而都推荐注解编程。AOP底层是通过Spring提供的的动态代理技术实现的,在运行期间动态生成代理对象,代理对象方法执行时进行增强功能的介入,再去调用目标对象的方法,从而完成功能的增强。进行逻辑运算,不过实际开发中通常用不到那么多花里胡哨的,掌握以下几种就基本够用了。......转载 2022-07-18 11:17:52 · 815 阅读 · 0 评论 -
java字符串写入文件更加有效的写法
使用 不用手动close;推荐FileWriter,代码更加简洁。原创 2022-06-14 17:36:43 · 1970 阅读 · 0 评论 -
SpringBoot 拦截器WebMvcConfigurer实现
WebMvcConfigurer配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制,可以自定义一些 Handler、Interceptor、ViewResolver、MessageConverter。基于java-based方式的spring mvc配置,需要创建一个配置类(@Configuration注解标识) 并实现 WebMvcConfigurer 接口;在SpringBoot 1.5版本都是靠重写 WebMvcConfigure原创 2022-06-10 16:40:28 · 1194 阅读 · 0 评论 -
Java 执行脚本命令
/** * 执行脚本 * @param command 命令 /scada/reboot.sh * @param targetDir 执行目录 /scada/command * @param nodeName 对象名 参数 * @throws Exception 读取命令执行结果异常 */ public void runScript(String message) { String command=...原创 2022-05-12 10:58:56 · 2227 阅读 · 0 评论 -
UTC时间格式化(JAVA) 时间带T Z
目录简单介绍时间类当前环境时区UTC转本地时间Window系统环境时间格式: 2018-01-31T14:32:19Z ;世界标准时间,字符串带T和Z。这时候需要根据业务来确认你是否要转时间为北京时间,不需要直接SimpleDateFormat即可,需要的设置相应时区再转。简单介绍1、UTC(协调世界时)又称世界统一时间、世界标准时间、国际协调时间。2、GMT(格林尼治标准时间)一般指世界时3、CST(中央标准时间)可视为美国、澳大利亚、古巴或中国的标原创 2022-02-16 11:06:13 · 23199 阅读 · 0 评论