Java
文章平均质量分 58
悟初境
What I cannot create, I do not understand.
展开
-
Grpc快速实践
Grpc是高手才会用的框架,一般人用不上。原创 2022-06-27 20:08:34 · 231 阅读 · 0 评论 -
Java Agent如何在IDEA里调试
做agent开发必备调试技巧:如何在IDEA里debug agent代码.原创 2022-05-27 19:32:12 · 6273 阅读 · 1 评论 -
java instanceof list带泛型
其实这是一个很简单的问题,在Java中,通常我们要判断一个对象是不是某种类型,会用 `instanceof` 关键字。但遇到带有泛型的 `List<T>` 是不能直接使用,这时候怎么办呢?原创 2022-05-20 23:11:11 · 5402 阅读 · 0 评论 -
Invalid signature file digest for Manifest main attributes
有时我们在打完jar包运行会报错:Error: A JNI error has occurred, please check your installation and try againException in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes原创 2022-05-14 07:24:17 · 4206 阅读 · 2 评论 -
com.esotericsoftware.kryo.KryoException: Encountered unregistered class ID
最近遇到个`Kryo`反序列化的错误`com.esotericsoftware.kryo.KryoException: Encountered unregistered class ID: xxx`,最后发现是 `Kryo`不同版本导致的,而且只在有 `Map`时才出现兼容性问题,觉得非常有意思,希望可以帮到有需要的人。原创 2022-04-06 18:33:32 · 9737 阅读 · 0 评论 -
ubuntu下优雅的切换任何软件版本,比如切换JDK版本
你是否因为系统需要安装多个版本的软件而苦恼,试试这个强大且简单的工具吧,自由切换任何软件版本,完全自定义只需一句命令,linux下很实用。原创 2022-01-23 16:21:34 · 3631 阅读 · 0 评论 -
Kryo序列化:Class Not Found的可能原因
最近写了个Spark应用,本地测试没问题,打成jar包,通过Livy运行Spark常驻服务,在Livy接收参数时使用Kryo进行反序列化却找不到类。示例代码如下:object LivyDriver { def runJob(spark: SparkSession, encodeJsonParam: String): String = { val param = KryoSerializer.deserialize(EncodeUtil.base64DecodeBytes(encodeJso原创 2021-11-20 15:17:50 · 2229 阅读 · 0 评论 -
shardingsphere-proxy分库分表配置
shardingsphere-proxyshardingsphere-proxy是一个代理,兼容mysql和postgresql协议,可以接入多种语言。1.下载下载ss-proxy安装包:https://shardingsphere.apache.org/document/current/en/downloads/下载mysql-jdbc-driver-lib:https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.47/mysq原创 2021-10-23 16:30:23 · 1361 阅读 · 0 评论 -
Picocli之多级命令行参数解析
平时用Java写一些小工具,难免用到命令行参数解析,参数比较多的时候,再使用 args 一个个去判断就比较麻烦,且不优雅。所以,使用现成的Picocli开源组件来实现。下面记录的代码可以直接拿来用,以后就懒得写了。0.效果看看要达到的效果:我们打包独立运行的 app.jar,使用 java -jar app.jar 参数运行。我们的工具有多种功能,目前仅展示2个,所以我们不想直接就跟参数,想在中间插一级表示功能的命令:# 导出java -jar app.jar export -u xx -d原创 2021-08-11 20:46:11 · 1158 阅读 · 0 评论 -
HDFS FileSystem使用的坑
在初次使用HDFS客户端下载文件时,很容易写出下面的代码FileSystem fileSystem = FileSystem.get(uri, conf, "hadoopuser");// 使用fileSystem做操作try (BufferedReader br = new BufferedReader( new InputStreamReader(fileSystem.open(new Path("/dat原创 2021-01-30 11:01:33 · 4302 阅读 · 2 评论 -
外部覆盖jar包里的配置文件
在使用java -jar app.jar 形式运行jar包时,需要覆盖jar包里classpath下的配置文件,可以采用下面的命令:$ java -Xbootclasspath/p:/usr/hdp/hadoop/conf:/usr/hdp/hbase/conf -jar app.jar说明:-Xbootclasspath/p 和 -Xbootclasspath/a 都存在,一个是放在加载路径之前,一个是放在最后后面通过 :(unix), ;(windows) 来分隔多个目录根据文档介绍:h原创 2021-01-02 09:53:15 · 3275 阅读 · 4 评论 -
Jackson序列化org.locationtech.jts.geom.Point
当使用Jackson来序列化 org.locationtech.jts.geom.Point 对象,就会发生递归的栈溢出GeometryFactory gf = new GeometryFactory();Point point = gf.createPoint(new Coordinate(1.2345678, 2.3456789));String geojson = objectMapper.writeValueAsString(point);如下:com.fasterxml.jackson原创 2020-12-13 20:52:46 · 3963 阅读 · 3 评论 -
命令行参数解析picocli快速使用
关于命令行参数解析的库还挺多,调研之后选择了 picocli 这个库因为其文档很全,所以下面是一个快速使用的教程,抓住主干再揪细节。 <dependency> <groupId>info.picocli</groupId> <artifactId>picocli</artifactId> <version>4.5.2</version>原创 2020-12-06 18:21:55 · 2711 阅读 · 0 评论 -
hbase手动合并region Java实现
有时需要手动合并hbase的region,顺手写个工具类。命令行在命令行可以通过 merge_region来合并2个region:hbase> merge_region 'ENCODED_REGIONNAME','ENCODED_REGIONNAME'hbase> merge_region 'ENCODED_REGIONNAME','ENCODED_REGIONNAME',true比如全名称是TestTable,0094429456,128947600452.56d55dsf5656原创 2020-10-11 19:58:01 · 954 阅读 · 0 评论 -
The goal you specified requires a project to execute but there is no POM in this directory
将一个非maven项目的jar包安装到本地maven仓库,遇到报错:The goal you specified requires a project to execute but there is no POM in this directory当你以为是自己jar包有问题时,才发现是powershell的坑。运行命令如下: mvn install:install-file -Dfile=avatica-core-1.17.0-SNAPSHOT.jar \ -DgroupId=org.apa原创 2020-09-28 08:43:38 · 4804 阅读 · 5 评论 -
Jackson注解详解
随着fastjson的壮大,漏洞也越来越多,是时候考虑下Jackson了,下面对Jackson近30个注解逐个解释。引入依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.2</version原创 2020-09-10 07:37:15 · 1846 阅读 · 0 评论 -
java免密连接SSH
本文使用2个java库示例如何免密连接ssh执行命令。JSchhttp://www.jcraft.com/ <!-- https://mvnrepository.com/artifact/com.jcraft/jsch --> <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifa原创 2020-08-03 21:52:45 · 2153 阅读 · 0 评论 -
activemq启动报错:Unsupported major.minor version 52.0
使用的activemq版本是 5.15.13, 本来在 JDK 1.8版本下应该正常运行,手动启动没问题,使用crontab脚本检测启动时发现JDK版本不对。INFO: Loading '/software/apache-activemq-5.15.13//bin/env'INFO: Using java '/usr/bin/java'INFO: Loading '/software/apache-activemq-5.15.13//bin/env'INFO: Using java '/usr/bi原创 2020-07-25 17:17:07 · 596 阅读 · 0 评论 -
JAVA NIO之Selector选择器
实现一个基于JAVA NIO的客户端和服务端, 接收用户输入,服务端接收丢弃。学好Selector,是多路复用的基础。服务端import lombok.extern.slf4j.Slf4j;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.S原创 2020-07-12 15:25:10 · 210 阅读 · 0 评论 -
java基于NIO的UDP通信
基于java的NIO(DatagramChannel)实现UDP通信的客户端和服务端。UDPServerimport lombok.extern.slf4j.Slf4j;import java.io.IOException;import java.net.InetSocketAddress;import java.net.SocketAddress;import java.nio.ByteBuffer;import java.nio.channels.DatagramChannel;imp原创 2020-07-12 12:46:56 · 1532 阅读 · 0 评论 -
Java NIO文件复制
基于FileChannel复制文件。普通的NIO复制 @Test public void testCopyFile() throws IOException { nioCopyFile("D:\\spark-2.2.3-bin-hadoop2.7.tgz", "D:\\spark-2.2.3-bin-hadoop2.7.tgz.copy"); } /** * @author jimo */ private void nioCop原创 2020-07-11 15:47:22 · 548 阅读 · 0 评论 -
JanusGraph快速入门
笔者由于工作中需要用到图数据库,所以花2小时研究了下Janus Graph这个开源项目,下面是一些学习心得,如果后面使用有更多启发再更新,如有错误,欢迎纠正。学习一门技术最标准的方式是从官网入门:https://docs.janusgraph.org/然后搞清楚以下问题即可:是什么?为什么出现?基本原理怎么使用再深入理解原理1.JanusGraph是什么本质问题是图数据库是什么...原创 2020-04-18 20:32:26 · 3321 阅读 · 0 评论 -
当公司让我写软著...
公司要写软著,让我把项目代码复制到word里。我开始还傻傻的复制了几个java类,然后突然醒悟:能用程序解决的事,绝不动手,因为以后还会经常用到,备份下,虽然及其简单,一个递归+读写文件。再复杂一点,考虑文件编码和自动过滤。如果只是单纯统计代码行数,那IDEA的Statistic插件一定很适合。 import org.junit.jupiter.api.Test; ...原创 2020-03-23 20:29:57 · 1203 阅读 · 0 评论 -
如何自己实现lombok功能-Pluggable Annotation Processing的讲解与实践
如何自己实现一个lombok?lombok具有超级实用简单的注解,减少了很多代码的书写,谁用谁知道。但是具有探索精神的程序员肯定会问他是怎么实现的?凭经验我们知道,其是在编译阶段直接生成了代码,与运行时是无关的,它的github地址:https://github.com/rzwitserloot/lombok下面是一个很简单的基本实现,主要涉及到以下知识点:Pluggable Annot...原创 2020-03-19 09:05:32 · 2702 阅读 · 1 评论 -
ActiveMQ同步等待接收消息
需要模拟一个同步接收消息的MQ消费者:场景如下:有2个APP,叫APP1 , APP2和APP3APP1给APP2发送了一个请求,APP2再去请求APP3,计算由APP3完成,APP2我们没法改变,但可以改变APP3APP1要同步等待APP2的结果返回,可以HTTP轮询,但太耗资源,所以想到MQAPP3计算完了发送一个MQ消息APP1接收到MQ消息继续后面的操作要实现APP1如何...原创 2020-03-17 19:58:27 · 896 阅读 · 0 评论 -
Socket-UDP
简单的基于UDP的客户端和服务端通信:原创 2015-11-18 18:01:00 · 432 阅读 · 0 评论 -
Socket-TCP-3
本次可以实现一个服务端接收多个客户端的请求,将接收客户请求的代码封装到线程类中,可以记录客户端数量及其IP地址:服务线程类:package jimo.love;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamR原创 2015-10-31 15:14:35 · 503 阅读 · 0 评论 -
Socket-TCP-1
实现服务器端一次性接收客户端请求,首先在本机上启动服务器端,等待客户端连接,然后客户端启动,发送用户名和密码,服务器端收到后输出来,服务结束。首先是服务器端的代码:package love.jimo;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;impor原创 2015-10-30 12:23:59 · 396 阅读 · 0 评论 -
File类遍历目录
首先可以遍历目录代码:package love.jimo;import java.io.File;public class FileUtil { public static void main(String[] args) { //测试遍历方法 File file = new File("E:\\IO");//此IO文件夹为一个Java工程 new FileUtil翻译 2015-11-20 20:42:14 · 679 阅读 · 0 评论 -
Socket-TCP-2
接着,实现服务器端对客户端的反馈,红色的为新增代码:首先是服务器端:package love.jimo;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Output原创 2015-10-30 17:44:40 · 411 阅读 · 0 评论 -
URL
URL:统一资源定位符,由协议加资源名称构成,如:http://www.baidu.com,协议是http,名称就是后面的些些。Java中构造URL的方法:其它方法:下面进行一些测试:package love.jimo;import java.net.MalformedURLException;import java.net.URL;public clas翻译 2015-10-30 10:08:37 · 555 阅读 · 0 评论 -
InetAddress获取主机信息
package love.jimo;import java.net.InetAddress;import java.net.UnknownHostException;import java.util.Arrays;public class InetAdressTest { public static void main(String[] args) throws UnknownHo翻译 2015-10-30 09:40:20 · 1001 阅读 · 0 评论 -
RandomAccessFile类的基本操作
1.RandomAccessFile可对文件内容进行操作,既可写文件,也可读文件,且可以随机访问文件的任意位置。2.有“rw”(读写)和“r”(只读)两种模式。3.有一个文件指针4.每次只读(写)一个字节代码:package love.jimo;import java.io.File;import java.io.IOException;import java.io.R翻译 2015-11-21 12:45:59 · 494 阅读 · 0 评论 -
File类的简单使用
File类只用于文件(目录)信息(大小,名称等)的表示,不能用于文件内容的访问。File类的构造函数:判断文件是否存在:判断是否是文件夹:判断是否是文件:创建一个文件:创建一个文件夹:删除一个文件或文件夹:直接打印file对象(相当于打印file.toString()):原创 2015-11-19 11:29:17 · 523 阅读 · 0 评论 -
单例模式
单例模式是设计模式的一种,分为饥饿式和懒汉式两种,什么地方需要它呢?比如数据库实例,连接池等。下面是实现:1.饥饿式:只需要两步即可,代码如下:/* * 饥饿模式 */public class SingleInstance { //1.建一个私有的构造函数,不让外部直接new对象实例 private SingleInstance(){ } //2.在此类里建一个原创 2016-01-06 16:26:37 · 369 阅读 · 0 评论 -
读程序员面试-java多线程1
1.线程线程是进程中的一个执行单元,又称为轻量级进程,它与进程一样拥有独立的执行控制,由操作系统负责调度。 而多线程:它允许在程序中并发执行多个指令流,每个指令流都称为一个线程。多线程进制下的线程彼此间互相独立,比较容易共享数据,通过并发执行的方式来提高程序的效率和性能。2.进程和线程的区别1.线程的划分尺度小于进程,线程隶属于某个进程。 2.进程是程序的一种动态形式,是CPU,内存等资源占用的翻译 2016-03-10 20:31:52 · 532 阅读 · 0 评论 -
生产消费者模型实现
第一次接触生产消费者问题是在操作系统课上,当时是用的信号量来解决这个问题,为了实现互斥搞得挺麻烦。今天用Java多线程来实现就简单多了。1.存储类用于存放生产的东西的类。public class Store { private int MAX_NUM = 0;//仓库最大容量 private int count = 0;//仓库现有容量 public翻译 2016-04-20 11:47:08 · 436 阅读 · 0 评论 -
B树详细图解与Java完整实现
本文的目的是从B树的起源讲起,再到多种语言的实现,以达到对B树有一个全面的认识,如果你是一个正常的程序员,那么看完就应该可以实现一个B-Tree了(如果你已经会了,那么也不会看完)。B树的起源在1970年,Bayer&McCreight发表的论文《ORGANIZATION AND MAINTENANCE OF LARGE ORDERED INDICES 》(大型有序索引的组织和维护)中提出...原创 2018-09-16 17:51:42 · 15307 阅读 · 10 评论 -
前后端分离之Springboot后端
这是上一篇博客前后端分离之Java后端的重写. 源码 前后端分离的后端主要解决的就2个问题 : 跨域访问(CORS)和token校验,下面快速说明.1.项目环境使用Intellij IDE. 项目结构: 2.跨域访问解决跨域很简单,翻一下官方文档很容易解决,我们就使用全局的通过注解实现的方式:@Configuration@EnableWebMvcpublic class WebConfi原创 2017-12-12 18:45:36 · 25737 阅读 · 10 评论 -
5种语言的callback实现
回调函数(callback)在计算机编程中,回调函数是作为参数传递给其他代码的一段可执行代码,这段代码会在合适的时间被调用.根据被调用的时间,如果是立即调用的,称为同步回调;在以后的时间调用的称为异步回调.实现回调函数的方式因语言而异,下面我将从几种语言来说明这种实现.原创 2017-12-11 19:41:55 · 1016 阅读 · 0 评论