java
文章平均质量分 80
记录java及相关技术
赶路人儿
一个十年以上编程人员,擅长使用java、python、C++等语言,具有广告投放、个性化推荐引擎等超大规模系统开发经验。
展开
-
NoSuchFieldError: Class JCTree$JCImport does not have member field
重建 Java 或 Spring 应用程序时,升级 Java 21 后,您可能会在构建过程中遇到 “NoSuchFieldError: Class JCTree$JCImport does not have member field” 的问题。让我们学习如何修复它。原创 2024-08-15 10:58:49 · 336 阅读 · 0 评论 -
Hbase java客户端调优——Connections
本文将介绍以下java Hbase 客户端三个配置:不要使用单个Put,而是批量List如何控制每个 RegionServer 的 HBase 客户端连接数/Socket 数使用通用连接并共享池原创 2024-03-20 15:51:19 · 1247 阅读 · 0 评论 -
小数在java中默认使用双精度(double)表示的问题排查
默认小数在java中使用双精度表示,所以在反序列化或者类型转换时,需要注意,否则会报错:java.lang.Double cannot be cast to java.lang.Float原创 2024-02-29 16:13:53 · 1350 阅读 · 1 评论 -
基于http的protobuf服务实现
本文介绍在http协议中,使用protobuf格式进行通信。借助了springboot框架,指定http的Content-Type值为application/x-protobuf原创 2023-10-11 17:10:19 · 2468 阅读 · 0 评论 -
Apache BeanUtils工具介绍
beanutils,顾名思义,是java bean的一个工具类,可以帮助我们方便的读取(get)和设置(set)bean属性值、动态定义和访问bean属性;细心的话,会发现其实JDK已经提供了一个java.beans包,同样可以实现以上功能,只不过使用起来比较麻烦,所以诞生了apache commons beanutils;看源码就知道,其实apache commons beanutils就是基于jdk的java.beans包实现的。原创 2023-08-22 10:38:24 · 1628 阅读 · 0 评论 -
SWIG介绍和使用
SWIG 是一种软件开发工具,可将用 C 和 C++ 编写的程序与各种高级编程语言连接起来。SWIG 与不同类型的目标语言一起使用,包括常见的脚本语言,如 Javascript、Perl、PHP、Python、Tcl 和 Ruby。支持的语言列表还包括非脚本语言,例如 C#、D、Go 语言、Java,包括 Android、Lua、OCaml、Octave、Scilab 和 R。原创 2023-06-14 21:43:04 · 2546 阅读 · 0 评论 -
mysql JDBC的三种查询(普通、流式、游标)
在 TCP 中发送端和接收端**可以是客户端/服务端,也可以是服务器/客户端**,通信的双方在任意时刻既可以是接收数据也可以是发送数据(全双工)。由于MySQL方不知道客户端什么时候将数据消费完,而自身的对应表可能会有DML写入操作,此时MySQL需要建立一个临时空间来存放需要拿走的数据。在执行st.executeQuery()时,jdbc驱动会通过connection对象和mysql服务器建立TCP连接,同时在这个链接通道中发送sql命令,并接受返回。(第一次调用的正常,第二次的抛出异常)。原创 2023-05-17 15:32:12 · 8720 阅读 · 9 评论 -
通过openjdk源码分析ObjectMonitor底层实现
在我们分析synchronized关键字底层信息时,其中谈到了Monitor对象,它是由C++来实现的,那,到底它长啥样呢?其中.hpp是c++的头文件,其具体的实现是以cpp中,接下来就得打开它们来看我们想了解的东东了,是不是很刺激?继续来看其他的一个成员变量。然后点击左侧browse。转载 2023-04-12 00:06:51 · 498 阅读 · 0 评论 -
说说Java中的几种JVM级别的锁
根据摩尔定律,计算机的性能将继续飙升,因为计算基础设施的相关成本将随着时间的推移继续下降。具体到CPU,已经从简单的单核系统发展到多核系统,缓存性能也有了飞跃性的提升。随着多核 CPU 的出现,计算机现在可以同时运行多个任务。并且,随着硬件开发的多项提升带来的显着效率提升,软件层面的多线程编程已经成为必然趋势。然而,多线程编程也带来了一些数据安全问题。随着所有这些趋势的发展,业界已经认识到,当存在安全漏洞时,也必须有相应的防护措施。顺应这种趋势,虚拟“锁”被发明出来,以解决线程的安全问题。翻译 2023-02-23 15:24:50 · 1272 阅读 · 0 评论 -
fasterxml jackson反序列化时对于非静态内部类报错
java中通常使用jackson、fastjson两个库来处理json。后者的api使用起来比较方便,但是安全漏洞太多了。对于嵌套结构,定义了一个包含内部类的java类来接收,如果这个复杂结构是一个数组形式,那么反序列化时会报上面错误。原创 2023-02-16 20:52:48 · 2187 阅读 · 0 评论 -
java gc日志文件ROTATING
gc日志是优化应用程序性能和解决内存问题的重要工具。通过传递“-Xloggc”JVM 参数,可以在特定文件路径中生成垃圾收集日志。使用这种方法配置gc文件:每当应用程序重新启动时,旧的 GC 日志文件将被新的 GC 日志文件覆盖,因为文件路径相同(即 /home/GCEASY/gc.log)。因此,您将无法分析在重新启动应用程序之前存在的旧 GC 日志。翻译 2023-02-06 23:54:57 · 1404 阅读 · 0 评论 -
JVM in a Container:不同jdk版本在容器中的表现
在 Java 8u131 和 Java 9 之前,JVM 无法识别容器设置的内存或 CPU 限制。 Java 8u131 和 Java 9是第一个实现该功能的一个实验性特性,并且有bug;但在 Java 10 中,内存限制是自动识别和强制执行的,然后将此功能反向移植到 Java-8u191。翻译 2023-02-01 12:31:58 · 1570 阅读 · 0 评论 -
java伪随机数生成器
随机数分为:伪随机数和真随机数。后者具有:随机性、不可预测性、不重复性的特点,一般来说都是通过自然界物理信息来生成,例如使用硬件采集器手机温度等信息。伪随机数分为:弱伪随机数和强伪随机数,后者可以用于密码学领域。本文重点介绍在java下的伪随机数生成方法,包括:Random、ThreadLocalRandom和SecureRandom。原创 2023-01-15 22:33:13 · 2306 阅读 · 2 评论 -
一文详解 RSA 非对称加密算法
RSA加密算法是一种非对称加密算法。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相同的算法,但他的发现被列入机密,一直到1997年才被发表。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。..原创 2022-08-25 20:58:35 · 4695 阅读 · 0 评论 -
从表到里学习JVM实现
自学jvm底层原理,来自国内早起R神的博客。其实任何高端技术,都不是别人教出来的,一定是兴趣或来自内心的某种力量驱使自己不断向上研究的。转载 2023-01-09 10:45:28 · 460 阅读 · 0 评论 -
Java7的异常处理新特性addSuppressed()方法
学习使用Java7新语法try-with-resources,在查看编译文件时,接触到addSuppressed()方法。记录一下使用方式。原创 2022-12-26 20:43:15 · 870 阅读 · 1 评论 -
RST及java socket关闭后读写的各种异常
方法关闭了Socket,虽然TCP规定半关闭状态下B仍然可以接收数据,但close动作关闭了该socket上的任何数据操作,如果此时A继续write,B将返回RST,A的该次write无法立即通知应用层(因为write仅把数据写入发送缓冲区),只会把状态保存在tcp协议栈内,下次write时才会抛出。都关闭,已经排队等待发送的数据会被尝试发送,最后(默认)发送FIN。,它会发送FIN但依然可以读取数据;后,无论是发送FIN/RST关闭的,之后再读写均会抛。发送FIN,4次挥手,连接关闭,一切都很和谐。转载 2022-12-21 21:27:59 · 653 阅读 · 0 评论 -
Tomcat的IO模型
tomcat的IO模型介绍,以及每种IO模型的原理原创 2022-12-07 23:30:49 · 1462 阅读 · 0 评论 -
java字符编码总结
本文介绍了计算机字符集和字符编码的历史演进。以及java中使用utf-16作为编码的介绍原创 2022-12-02 21:27:13 · 6613 阅读 · 1 评论 -
java线程池的关闭
java关闭线程池的两种方式:手动和自动。原创 2022-11-18 15:16:47 · 5003 阅读 · 0 评论 -
使用ClassFinal对java项目加密
ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。依赖环境:jdk1.8Gitee:ClassFinal: Java字节码加密工具1、项目模块说明ClassFinal的核心模块,几乎所有加密的代码都在这里;ClassFinal打包成独立运行的jar包;ClassFinal加密的maven插件;2、功能特性。转载 2022-11-17 11:25:11 · 6171 阅读 · 15 评论 -
Java 和 HTTP 的那些事(四) HTTPS 和 证书
介绍了java体系下https和ssl知识点转载 2022-11-07 22:19:15 · 1611 阅读 · 0 评论 -
java和http
本文介绍了,在java世界中如何使用http协议来发送get、post请求,包括:httpClient、okHttp等。翻译 2022-11-02 10:35:15 · 268 阅读 · 0 评论 -
java中iterator和iterable的区别
ptr = 0;}}可以看到我们在next中指定的遍历规则是根据ArrayMap的key值进行遍历。}如上所示,通过创建KeyIterator对象进行迭代访问(注意外部类创建内部类对象的方式)。(1)学会深入思考,一点点抽丝剥茧,多想想为什么这样实现,很多问题没有自己想象中的那么复杂。(2)遇到疑惑不放弃,这是提升自己最好的机会,遇到某个疑难的点,解决的过程中会挖掘出很多相关东西。转载 2022-09-30 20:59:30 · 1057 阅读 · 1 评论 -
guava hasing使用
Hash里面比较重要的类有:Hashing、HashFunction、Hasher、HashCode、Funnel、PrimitiveSink。转载 2022-09-08 19:48:16 · 837 阅读 · 0 评论 -
Byte数组相关工具类
byte 转换基本数据类型大端和小端下面是对连个模式的简单解释。更详细的可以参考这篇博客,。转载 2022-09-06 16:31:11 · 1772 阅读 · 0 评论 -
guava之基本工具
写一个hashCode本来也不是很难,但是Guava提供给我们了一个更加简单的方法--Objects.hashCode(Object ...), 这是个可变参数的方法,参数列表可以是任意数量,所以可以像这样使用Objects.hashCode(field1, field2, ..., fieldn)。Null很少可以明确地表示某种语义,例如,Map.get(key)返回Null时,可能表示map中的值是null,亦或map中没有key对应的值。使用Null以外的特定值,会让你的逻辑描述变得更清晰。原创 2022-08-24 12:13:15 · 606 阅读 · 1 评论 -
Docker 中jmap报错:Can‘t attach to the process: ptrace(PTRACE_ATTACH问题
通过docker启动了一个java服务。登陆到容器中,通过jmap查看jvm相关信息,报错:经过查看资料发现,这不是什么 docker 或者jmap的Bug,而是 Docker 自 1.10 版本开始加入的安全特性。 jmap 这类 JDK 工具依赖于 Linux 的 PTRACE_ATTACH,而 Docker 自 1.10 版本开始,默认的 seccomp 配置文件中禁用了 ptrace。解决方法:1、–security-opt seccomp=unconfined关闭seccomp,在启动容器时原创 2022-07-13 14:21:37 · 2380 阅读 · 0 评论 -
java socket设置keepalive
java socket编程中有个keepalive选项,看到这个选项经常会误解为长连接,不设置则为短连接,实则不然。socket连接建立之后,只要双方均未主动关闭连接,那这个连接就是会一直保持的,就是持久的连接。keepalive只是为了防止连接的双方发生意外而通知不到对方,导致一方还持有连接,占用资源。其实这个选项的意思是TCP连接空闲时是否需要向对方发送探测包,实际上是依赖于底层的TCP模块实现的,java中只能设置是否开启,不能设置其详细参数,只能依赖于系统配置。首先看看源码里面是怎么说的源码的意思是转载 2022-06-27 00:08:50 · 2543 阅读 · 0 评论 -
Java中InetAddress的使用(二):获取本机IP地址的正确姿势
本文接着上文的内容,主要解答上文留下的疑问:既然不能使用InetAddress#getLocalHost()直接去获取到本机的IP地址,那么如何破呢?为了更好的解释为何InetAddress#getLocalHost()不靠谱,有必要先普及下Linux下的相关文件的解释,比较我们的Java应用绝大部分情况下都是跑在Linux环境下的(甚至国内基本都跑在centos上吧)。这几个文件都位于/etc/目录下,下面分别给出解释和示例:1)/sysconfig/network:此文件是针对本计算机的,是给计算机起的转载 2022-06-20 20:26:49 · 3460 阅读 · 0 评论 -
Java中InetAddress的使用
Java具有较好的网络编程模型/库,其中非常重要的一个API便是InetAddress。在在java.net网络编程中中有许多类都使用到了InetAddress,包括ServerSocket,Socket,DatagramSocket等等。你要进行网络编程就得有IP地址、域名、主机等要素,而一个InetAddress里就保存着IP地址,同时还可能包含主机名,并且它提供了主机名 - IP地址互转的方法(比简单的域名解析还牛有木有),本来主要就介绍它看看能够怎么玩。Java提供InetAddress类(有Ine转载 2022-06-20 20:14:32 · 4140 阅读 · 0 评论 -
网络编程中的SO_REUSEADDR和SO_REUSEPORT参数详解
在BSD中,SO_REUSEADDR选项有两个用户:setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR,(const void *)&reuse , sizeof(int));目的:当服务端出现timewait状态的链接时,确保server能够重启成功。注意:SO_REUSEADDR只有针对time-wait链接(linux系统time-wait连接持续时间为1min),确保server重启成功的这一个作用。举个time_wait的连接通过so_reuseaddr选项原创 2022-06-19 22:36:49 · 5341 阅读 · 0 评论 -
http超时设置
http协议中可以设置超时(连接超时、响应超时),具体设置情景如下:1、java api的方式:JDK 1.5以前的版本,只能通过设置两个系统属性来控制网络超时:String szUrl = “http://www.ee2ee.com/”;URL url = new URL(szUrl);HttpURLConnection urlCon = (HttpURLConnection...原创 2015-07-27 16:39:14 · 25809 阅读 · 0 评论 -
HttpClient 4.3.5 使用总结
httpClient使用转载 2022-06-07 00:05:54 · 4991 阅读 · 0 评论 -
spring与springmvc父子容器
1、spring和springmvc父子容器概念介绍在spring和springmvc进行整合的时候,一般情况下我们会使用不同的配置文件来配置spring和springmvc,因此我们的应用中会存在至少2个ApplicationContext实例,由于是在web应用中,因此最终实例化的是ApplicationContext的子接口WebApplicationContext。如下图所示:上图中显示了2个WebApplicationContext实例,为了进行区分,分别称之为:Servlet Web转载 2022-05-27 17:09:54 · 1115 阅读 · 0 评论 -
Spring AOP 使用介绍,从前世到今生
前面写过 Spring IOC 的源码分析,很多读者希望可以出一个 Spring AOP 的源码分析,不过 Spring AOP 的源码还是比较多的,写出来不免篇幅会大些。本文不介绍源码分析,而是介绍 Spring AOP 中的一些概念,以及它的各种配置方法,涵盖了 Spring AOP 发展到现在出现的全部 3 种配置方式。由于 Spring 强大的向后兼容性,实际代码中往往会出现很多配置混杂的情况,而且居然还能工作,本文希望帮助大家理清楚这些知识。本文使用的测试源码已上传到 Github:转载 2022-04-10 21:06:29 · 258 阅读 · 0 评论 -
maven 中 provided 与 optional 的区别
Java 工程中通常使用 maven(当然也有很多人使用 gradle)来管理项目依赖。maven 这样的构建工具极大的提升了工程的构建效率,我们只需要把相关依赖添加至配置文件即可,完全不用关心构建的过程。在以前的文章中maven 中 dependencies 与 dependencyManagement 的区别介绍过关于 dependency 相关的用法,我们知道可以通过 dependency 将依赖添加至 pom.xml 文件中。不过在阅读其他项目的代码,尤其是一些组件端的代码的时候,会发现类似于下转载 2022-04-04 22:50:25 · 1823 阅读 · 1 评论 -
eclipse中使用Project Explore试图查看web项目
在eclipse中通常最左侧的试图用来管理不同的项目,这一点比IDEA要方便很多,IEDA一个window下只能打开一个项目,有的时候使用起来很不方便。在eclipse下一个window可以打开一个workspace下的多个项目。通常最左侧使用Package Explore或者Project Explore这两个试图组建来管理不同项目。对于mavne的多module项目,使用Package Explore有一点很不方便,就是多个module不在一起,这时使用Project Explore可以把多个mod原创 2022-04-04 21:50:52 · 2852 阅读 · 0 评论 -
SPEL教程
Spel概述Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等等,并且能与Spring功能完美整合,如能用来配置Bean定义。表达式语言给静态Java语言增加了动态功能。SpEL是单独模块,只依赖于core模块,不依赖于其他模块,可以单独使用。Spel能干什么?表达式语言一般是用最简单的形式完成最主要的工作,减少我们的工作量。S转载 2022-03-30 22:04:56 · 4659 阅读 · 1 评论 -
jackson的readValue和convertValue方法
jackson是一个强大的json工具库,但api不够直观(至少不如fastJson),使用起来总是没有那么友好。本文介绍readValue和convertValue这两个方法的使用和区别。在使用jackson对json处理之前, 首先要创建ObjectMapper对象:ObjectMapper objectMapper = new ObjectMapper()说明:这个对象是线程安全的,在网上看到过,在高并发环境下,为了保证线程安全会有较高的锁竞争,所以很多时候都是每次通过new来创建Obj原创 2022-03-25 18:15:48 · 12088 阅读 · 0 评论