java基础
文章平均质量分 54
xiaoniuxqq
这个作者很懒,什么都没留下…
展开
-
利用idea的反编译工具反编译整个jar包
注意要反编译jar包的jdk版本,如果执行反编译的jdk版本低会报错:Error: A JNI error has occurred, please check your installation and try againException in thread "main" java.lang.UnsupportedClassVersionError: org/jetbrains/java/decompiler/main/decompiler/ConsoleDecompiler has been原创 2022-02-15 15:23:27 · 2065 阅读 · 0 评论 -
byte转16进制
private static final char[] HEX_CHAR = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; public static String toHexString1(byte[] bytes) { char[] buff = new char[bytes.length<<1]; int index=0; for(byte ..原创 2021-12-16 10:23:47 · 855 阅读 · 0 评论 -
java通过命令行调用python通过socket传参异常
为了方便灵活的做数据转换,决定用python写数据转换的方法,java通过Runtime.getRuntime().exec()调用python,因为参数的长度可能超过命令行的命令长度限制,不得已使用socket传参。在调试过程中发现,如果分开调试python不使用java唤起而用命令行直接启动那么程序执行没有问题,如果使用java的Runtime.getRuntime().exec()唤起python,那么java读取socket输入流就会有问题,最后的几行数据始终读不到。java程序如下S原创 2021-11-22 17:57:17 · 600 阅读 · 0 评论 -
FTP和SFTP的工具类
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version></dependency>@Slf4jpublic class FTPUtils { /** * 连接,如果失败重试3次,间隔1s * * @par原创 2020-10-30 10:13:09 · 304 阅读 · 0 评论 -
异常是怎么组装stackTrace的
在异常类被创建初始化的时候就会将调用栈填入父类Throwable的stackTrace。public Throwable() { fillInStackTrace();}以上代码是Throwable的构造方法,所以异常在初始化的时候均会调用public synchronized Throwable fillInStackTrace() { if (stackTrace != null || backtrace != null /* Out o原创 2020-07-09 16:45:34 · 168 阅读 · 0 评论 -
java数字精度的坑----重点BigDecimal
double/float的数学计算会因为计算机的存储结构造成精度丢失,有时候会造成很严重的问题,这是众所周知的。。。一般这个时候会建议使用BigDecimal来规避这个问题,但是BigDecimal有个大坑要引起注意:System.out.println(new BigDecimal(0.1).add(new BigDecimal(0.2)));System.out.println(new BigDecimal(1.0).subtract(new BigDecimal(0.8)));System.ou原创 2020-07-08 16:21:20 · 529 阅读 · 0 评论 -
java反射修改final的属性值
Field field = RedisOperationsSessionRepository.class.getDeclaredField("DEFAULT_SPRING_SESSION_REDIS_PREFIX");field.setAccessible(true);Field modifiersField = Field.class.getDeclaredField("modifiers...原创 2020-03-09 17:48:03 · 490 阅读 · 1 评论 -
HikariCP
spirngboot2.0官方推荐使用HikariCP原创 2020-02-04 16:28:03 · 845 阅读 · 1 评论 -
记一次服务器宕机原因和总结
1、服务转到我手中维护后发现服务会间隔性宕机。2、询问之前维护人员情况被告知是由于攻击并发量高导致连接被占满,服务器拒绝服务导致的。3、遂按此原因进行整改,添加限制逻辑使攻击者的连接快速失败。4、在深夜测试后上线。5、上线后客户端大规模报使用异常。6、回滚代码,查找原因。7、下载、整理筛选相关日志出来,统计调用频次,统计接口调用参数。8、发现服务宕机时会连续报数据库连接池获取连接失败...原创 2020-01-13 15:39:48 · 1425 阅读 · 0 评论 -
JVM-Java内存区域
https://cloud.tencent.com/developer/article/1343346转载 2019-10-15 23:39:46 · 100 阅读 · 0 评论 -
在线bug查找
ThreadDump查看线程状态HeapDump查看内存,线程调用链上栈的内容(仅限于对象)BTrace:动态跟踪工具,工作原理是通过instrument+asm来对正在运行的java程序中的class类进行动态增强。使用Btrace时需要写btrace脚本(java代码),这些代码会被植入运行的JVM中,如果搞不好会把JVM弄崩Arthas:阿里开源的工具,把一些基本功能封装了一下,用起来...原创 2019-10-14 17:52:26 · 171 阅读 · 0 评论 -
shutdownhook
Runtime.getRuntime().addShutdownHook(Thread)原创 2019-10-12 18:02:18 · 111 阅读 · 0 评论 -
fieldupdater简介
fieldupdater是指在java.util.concurrent.atomic包中的AtomicIntegerFieldUpdater/AtomicLongFieldUpdater/AtomicReferenceFieldUpdater这些类。一般我们都是使用AtomicXXX类,但是在某些情况下需要用fieldupdater类去替换。例如:1、将volatile变量改造成有CAS需求的...原创 2019-10-12 17:55:19 · 283 阅读 · 0 评论 -
java对象池GenericObjectPool
GenericObjectPool是apache提供的对象池,可以方便的对对象进行管理(获取,归还,检查是否活跃,检查是否可用等)。通常我们用它来做连接池,比如socket连接池:GenericObjectPool重点需要关注:PooledObjectFactory和GenericObjectPoolConfig。PooledObjectFactory中定义了如下接口://创建对象需要的工作...原创 2018-11-22 17:49:25 · 3525 阅读 · 0 评论 -
springboot阻止浏览器静态资源缓存
@Configurationpublic class ResourceHandler extends WebMvcConfigurerAdapter { /** * 配置静态访问资源 * @param registry */ @Override public void addResourceHandlers(ResourceHandlerR...原创 2018-12-29 15:04:50 · 7673 阅读 · 1 评论 -
socket判断远程连接是否关闭
socket类的方法 isClosed()、isConnected()、isInputStreamShutdown()、 isOutputStreamShutdown()但经过试验并查看相关文档,这些方法都是本地端的状态,无法判断远端是否已经断开连接。使用 Socket的isconnected()方法检测时,滞后是很大的,往往在20秒以上。这不利于系统的实时性。通过查找发现有一个便利的方法,代码...原创 2019-03-15 14:36:12 · 2178 阅读 · 0 评论 -
ThreadPoolExecutor是如何做到线程重用的
https://blog.csdn.net/hotdust/article/details/64905254转载 2018-10-28 19:12:20 · 195 阅读 · 0 评论 -
file.length() 和 fileChannel.size()大小不一致
今天发现采集的文件大小数据不一致:对同一个文件,同时采集file.length()和fileChannel.size(),得出的数值不一致并且差距较大。还没找到原因。在api文件中file.length()解释是:返回由此抽象路径名表示的文件的长度。fileChannel.size()的解释是:返回此通道文件的当前大小。所以目前还不清楚为什么...原创 2018-10-16 17:27:42 · 8624 阅读 · 0 评论 -
PreparedStatement可以防止sql注入的原因
之前没深究这个问题,看其他人的回答,总结原因有:1、PreparedStatement是预编译的2、PreparedStatement参数不是简单拼接生成sql,而是先用?占位,之后再根据参数产生sql但是上述原因都禁不起深究,毕竟不论是PreparedStatement还是Statement不都是最终传sql进数据库么?以上两个原因都无法避免sql注入。深究一下,特别是查看网页http...原创 2018-10-15 09:55:59 · 5563 阅读 · 0 评论 -
RMI与SOCKET的区别
RMI底层并非采用SOCKET通信。表层的区别比如应用场景、实现方式不在此处提及。从网络协议栈的观点来看:RMI与socket的网络编程处于不同层次上。基于socket的网络编程位于TCP协议之上,而RMI在TCP协议之 上,又定义了自己的应用协议,其传输层采用的是Java远程方法协议(JRMP)。可见,在网络协议栈上,基于RMI的应用位置更高一些,这也决定了,与 socket的网络编程相比,...原创 2018-10-11 14:30:06 · 772 阅读 · 0 评论 -
线程的6种状态
/** * A thread state. A thread can be in one of the following states: * <ul> * <li>{@link #NEW}<br> * A thread that has not yet started is in this state. ...原创 2019-09-18 15:57:37 · 341 阅读 · 0 评论 -
spring-aop防止重复提交网络请求
具体原理很简单,通过spring-aop的环绕通知,请求开始时将请求参数转换校验是否已存在,已存在则报错,否则存储,请求完成后删除。具体代码如下: 1、注释@interfacepackage com.yuntu.commons.intelligent.annotation;import java.lang.annotation.ElementType;import java.lan...原创 2018-09-14 14:32:48 · 1770 阅读 · 1 评论 -
socket服务器探知客户端连接情况
http://www.importnew.com/27624.htmlhttps://blog.csdn.net/csdnchen666666/article/details/81252660转载 2019-03-19 23:51:47 · 185 阅读 · 0 评论 -
fetch跨域不能在返回的response中获取header
原因是:1:W3C的 xhr 标准中做了限制,规定客户端无法获取 response 中的 Set-Cookie、Set-Cookie2这2个字段,无论是同域还是跨域请求;2:W3C 的 cors 标准对于跨域请求也做了限制,规定对于跨域请求,客户端允许获取的response header字段只限于“simple response header”和“Access-Control-Expose-H...原创 2019-03-08 11:30:39 · 7659 阅读 · 0 评论 -
java正则NIO截取有用信息实例
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.MappedByteBuff...原创 2018-03-13 11:14:20 · 143 阅读 · 0 评论 -
LockSupport 使用总结和注意事项
https://blog.csdn.net/xiaojin21cen/article/details/89918452https://www.cnblogs.com/qingquanzi/p/8228422.html原创 2019-09-18 15:58:57 · 419 阅读 · 0 评论 -
FTPUtil
import com.yuntu.web.intelligent.dto.Server;import com.yuntu.web.intelligent.task.FtpPushTask;import org.apache.commons.net.ftp.FTP;import org.apache.commons.net.ftp.FTPClient;import org.apache.co...原创 2019-09-10 11:16:32 · 267 阅读 · 0 评论 -
RARUtil
import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipOutputStream;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.BufferedOutputStream;import java.io.File;im...原创 2019-09-10 11:15:56 · 182 阅读 · 0 评论 -
MD5Utils
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.math.BigInteger;impor...原创 2019-09-10 11:15:08 · 161 阅读 · 0 评论 -
GUAVA缓存失效清理
GUAVA缓存虽然有expireAfterWrite/expireAfterAccess方法和expire的监听器,但是guava自身并不会定时去判断缓存是否失效,触发判断失效逻辑是调用get方法。这自然很难满足需要对失效缓存进行监控的场景。解决方案如下:@ConditionalOnProperty(value = "spring.application.heartBeatWeb", havin...原创 2019-06-26 09:33:50 · 4193 阅读 · 0 评论 -
AES对称加密以及java同js互相加解密
AES/JAVA/js/import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;impo...原创 2019-04-19 18:20:22 · 447 阅读 · 1 评论 -
深入理解单例模式:静态内部类单例原理
转自:https://blog.csdn.net/mnb65482/article/details/80458571本文主要介绍java的单例模式,以及详细剖析静态内部类之所以能够实现单例的原理。OK,废话不多说,进入正文。首先我们要先了解下单例的四大原则:1.构造私有。2.以静态方法或者枚举返回实例。3.确保实例只有一个,尤其是多线程环境。4.确保反序列换时不会重新构建对象。我们常...转载 2019-04-26 14:33:40 · 277 阅读 · 0 评论 -
类加载---初始化
在java代码中,如果要初始化一个静态字段,我们可以在声明时直接赋值,也可以在静态代码块中对其赋值。如果直接赋值的静态字段被final所修饰,并且它的类型是基本类型或字符串时,那么该字段便会被java编译器标记成常量值(ConstantValue),其初始化直接由java虚拟机完成。除此之外的直接赋值操作,以及所有静态代码块中的代码,则会被java编译器置于同一方法中,并把它命名为&lt;clin...原创 2018-08-09 17:57:01 · 150 阅读 · 0 评论 -
类加载---链接
链接,是指将创建成的类合并至java虚拟机中,使之能执行的过程。它可以分为验证、准备及解析三个阶段。1、验证: 目的在于确保被加载的类能够满足java虚拟机的约束条件。通常java编译器生成的类文件必然满足java虚拟机的约束条件2、准备: 准备阶段的目的,则是为被加载类的静态字段分配内存。java代码中对静态字段的具体初始化,则会在稍后的初始化阶段中进行。过了这个阶段结构就基本完整了...原创 2018-08-09 17:04:31 · 385 阅读 · 0 评论 -
类加载---加载
祖师爷: jvm的类加载器的祖师爷是启动类加载器(boot class loader)。启动类加载器是由C++实现的,没有对应的java对象,因此在java中只能由null来指代。除了启动类加载器,其他的类加载器都是java.lang.ClassLoader的子类,所以他们有对应的java对象。这些类加载器需要先由另一个类加载器,比如说启动类加载器,加载到java虚拟机中,方能执行类加载器。...原创 2018-08-09 16:40:32 · 165 阅读 · 0 评论 -
AIO异步IO操作
**异步通道 API** 异步通道 提供支持连接、读取、以及写入之类非锁定操作的连接,并提供对已启动操作的控制机制。Java 7 中用于 Java Platform(NIO.2)的 More New I/O APIs,通过在 java.nio.channels 包中增加四个异步通道,从而增强了 Java 1.4 中的 New I/O APIs(NIO):AsynchronousS...转载 2018-04-23 14:22:34 · 458 阅读 · 0 评论 -
yaml解析
1、使用spring自带的yaml解析工具:public class YamlUtils { private static final Logger logger = LogManager.getLogger(YamlUtils.class); public static Map<String, Object> yaml2Map(String yamlSour...原创 2018-04-17 16:12:12 · 3615 阅读 · 0 评论 -
java8的CompletableFuture
旧的java.util.concurrent.Future类提供了一种简单方式来处理预期的事件完成,但仅通过轮询或等待完成的方法。Java 8 中添加的java.util.concurrent.CompletableFuture类扩展了此功能,添加了大量合成或处理事件的方法。(请查阅本系列的前一篇文章 “Java 8 并发性基础”,了解CompletableFuture的介绍。)具体地讲,Comp...转载 2018-04-03 23:29:17 · 215 阅读 · 0 评论 -
classloader原理
JVM规范定义了两种类型的类装载器:启动内装载器(bootstrap)和用户自定义装载器(user-defined class loader)。一. ClassLoader基本概念 1.ClassLoader分类 类装载器是用来把类(class)装载进JVM的。 JVM规范定义了两种类型的类装载器:启动内装载器(bootstrap)和用户自定义装载器(user-defined cl...转载 2018-04-03 23:21:23 · 128 阅读 · 0 评论 -
InheritableThreadLocal
InheritableThreadLocal的使用是在子线程继承父线程的值。但是子线程并不能继承父线程修改后的值,如果在主线程中使用InheritableThreadLocal的set方法,修改后的值,子线程看不到。 如果使用childValue方法修改继承父线程的值,必须先在父线程中调用InheritableThreadLocal的get方法,再在子线程中调用InheritableThre...原创 2018-03-26 23:49:28 · 198 阅读 · 0 评论