
JAVA
jieniyimiao
真的英雄,在于,以脆弱的凡人之躯,而具有神性的不可战胜。
展开
-
StopWatch任务执行时间监视器.md
StopWath是apache commons lang3包下的一个任务执行时间监视器原创 2024-08-06 23:58:26 · 274 阅读 · 0 评论 -
使用apache common-io 监控文件变化.md
package com.sino.daily.code_2020_3_11;import org.apache.commons.io.filefilter.FileFilterUtils;import org.apache.commons.io.monitor.FileAlterationListener;import org.apache.commons.io.monitor.FileAlterationMonitor;import org.apache.commons.io.monitor.F原创 2020-08-01 22:41:43 · 1391 阅读 · 0 评论 -
Java File 类的 getPath()、getAbsolutePath()、getCanonicalPath() 的区别
楔子考虑一下几种路径:C:\temp\file.txt- 绝对路径,也是规范路径.\file.txt- 相对路径C:\temp\myapp\bin\..\..\file.txt这是一个绝对路径,但不是规范路径关于什么是规范路径? 粗略的认为规范路径就是不包含相对路径如..\或者.\的绝对路径实例说明package com.sino.daily.code_2020_3_11;import java.io.File;/** * create by 2020-05-31 08:46 *原创 2020-05-31 09:02:53 · 802 阅读 · 0 评论 -
如何优雅地停止一个线程?.md
楔子线程终止有两种情况:1、线程的任务执行完成2、线程在执行任务过程中发生异常这两者属于线程自行终止,如何让线程 A 把线程 B 终止呢?Java 中 Thread类有一个stop()方法,可以终止线程,不过这个方法会让线程直接终止,在执行的任务立即终止,未执行的任务无法反馈,所以 stop()方法已经不建议使用。既然 stop()方法如此粗暴,不建议使用,我们如何优雅地结束线...原创 2020-05-07 20:25:07 · 468 阅读 · 0 评论 -
java RSA数据分段加密解密实现.md
java RSA加密解密实现该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar注意:RSA加密明文最大长度117字节(经实际测试最大为350),解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行。RSA加密对明文的长度是有限制的,如果加密数据过大会抛出如下异常:Exception in thread "main" j...原创 2020-05-06 22:46:52 · 1038 阅读 · 0 评论 -
JAVA-IO流体系
JAVA-IO流体系在IO中,具体构件角色是节点流,装饰角色是过滤流。1、继承自InputStream/OutputStream的流都是用于向程序中输入/输出数据,且数据的单位都是字节(byte=8bit),如图,深色的为节点流,浅色的为过滤流。2、继承自Reader/Writer的流都是用于向程序中输入/输出数据,且数据的单位都是字符(2byte=16bit),如图,深色的为节点流,浅色...原创 2020-05-06 22:24:37 · 423 阅读 · 0 评论 -
Java中的WeakHashMap
楔子WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值,所以比较适合做缓存。WeakHashMap的这种特性比较适合实现类似本地、堆内缓存的存储机制——缓存的失效依赖于GC收集器的行为WeakHashMap的定义如下:public class WeakHashMap<K,V> extends Abstract...原创 2020-04-28 23:06:30 · 7900 阅读 · 6 评论 -
UTC时间、GMT时间、本地时间、Unix时间戳.md
GMT和UTCGMT,即格林尼治标准时间,也就是世界时。GMT的正午是指当太阳横穿格林尼治子午线(本初子午线)时的时间。但由于地球自转不均匀不规则,导致GMT不精确,现在已经不再作为世界标准时间使用。UTC,即协调世界时。UTC是以原子时秒长为基础,在时刻上尽量接近于GMT的一种时间计量系统。为确保UTC与GMT相差不会超过0.9秒,在有需要的情况下会在UTC内加上正或负闰秒。UTC现...转载 2020-03-08 21:43:38 · 931 阅读 · 0 评论 -
java RSA加密解密实现.md
原文:java RSA加密解密实现该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar注意:RSA加密明文最大长度117字节(经过实际测试,最大长度为350),解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行。RSA加密对明文的长度是有限制的,如果加密数据过大会抛出如下异常:Exception in thread...转载 2020-03-01 23:37:16 · 453 阅读 · 0 评论 -
Java如何实现文件变动的监听.md
在Java 7发布的新的IO框架中,除了大家都熟知的 FileVisitor 接口外,还有个 WatchService 接口经常被人忽视掉。 这个类可以让你实时的监控操作系统中文件的变化,包括创建、更新和删除事件。WatchService 用来观察被注册了的对象的变化和事件。它和Watchable两个接口的配合使用, WatchService类似于在观察者模式中的观察者,Watchable类似域...原创 2019-11-20 15:57:48 · 469 阅读 · 0 评论 -
Unable to open socket file: target process not responding or HotSpot VM not loaded异常处理方法
1.问题某台服务器出现假死的现象,服务进程在,但是就是不工作。于是想定位下,先看了下服务器本身的状态都是OK的,然后看下服务的状态,先执行如下的命令,发现服务是存在的,如下:执行jps -ml输出如下:然后执行jstack 2276,报出如下的错误:2276: Unable to open socket file: target process not responding or Hot...原创 2019-04-01 21:13:06 · 77288 阅读 · 10 评论 -
什么是JAVA的ClassLoader
一、楔子在读取Jar包中的资源文件时,一般会使用this.getClass().getResourceAsStream方法,使用ClassLoader以流的形式来读取资源文件,那究竟什么是ClassLoader?本文就来一探究竟。二、什么是ClassLoader?ClassLoader是一个抽象类,我们用它的实例对象来装载类 (Java默认提供的三个ClassLoader),它负责将 Jav...原创 2019-03-26 22:04:41 · 1038 阅读 · 0 评论 -
Java:双括号初始化 / 匿名内部类初始化法
1.楔子在开发中一个常见的操作就是新建Map或者List并进行初始化,但是在java的集合框架中并未提供好的初始化方式,只能先new,然后在一个个的put,但这样显得非常的low,如何才能优雅的初始化常见集合呢?2. 一个看似很装逼的方式2.1 代码实例这种初始化方式使用了匿名内部类和非静态初始化块的奇技淫巧方式,详见代码如下:package com.sino.daily.code_20...原创 2019-03-30 12:52:49 · 1174 阅读 · 1 评论 -
java从jar包中读取资源文件
楔子一个JAVA项目需要在应用启动时读取一个文件,在这遇到了一个坑,就是在Idea 中,应用启动时可以正常读取这个文件,但应用打成jar包后直接运行就读取不到。要读取的文件位于/src/main/resources目录下,其相对路径为/src/main/resources/HotleAllCity.json如下图所示:IDE中读取IDE中的读取方式是,先获取文件的路径,然后读取文件//...原创 2019-03-25 22:04:31 · 41778 阅读 · 1 评论 -
大坑:git无法添加一个空的文件夹
楔子今天在github上创建了个有初始化选中Initialize this repository with a README(初始化本库)的空白工程,然后用git clone到本地。我本意想创建一个gradle规范的目录,于是创建了.gitignore , README.md, settings.gradle这几个标准的文件,然后通过如下的脚本创建标准的代码目录。task "create-d...原创 2019-03-25 21:11:25 · 23739 阅读 · 0 评论 -
JAVA自带工具之jps
1.命令介绍jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。功能描述:jps是用于查看有权访问的hotspot虚拟机的进程. 当未指定hostid时,默认查看本机jvm进程,否者查看指定的hostid机器上的jvm进程,此时hostid所指机器必须开启jstatd服务。 jps可以列出jv...原创 2019-04-01 22:36:36 · 1195 阅读 · 0 评论 -
12306接口协议分析
代码详见github原创 2019-02-23 23:25:01 · 6790 阅读 · 0 评论 -
spring boot 爬取艺龙所有评论数据
原创 2019-02-23 22:19:41 · 692 阅读 · 2 评论 -
java手机号、身份证信息脱敏
package com.sinosun.travel.util;import org.apache.commons.lang.StringUtils;/** * Created by caogu on 2018/8/24 17:07. * Copyright (c) Sinosun Technology Co., Ltd 2018 */public class CommonUtil...原创 2018-08-24 17:54:39 · 26993 阅读 · 4 评论 -
Error:The newly created daemon process has a different context than expected.
现象 引用块内容idea打开gradle工程时出现如下的错误:Error:The newly created daemon process has a different context than expected.Java home is different.Expecting: 'C:\Program Files\Java\jdk1.7.0_40' but was: 'C...原创 2018-08-07 19:48:53 · 3843 阅读 · 3 评论 -
session与cookie理解
1.概念1.1 会话的概念会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾经来过,这称之为有状态会话。1.2 会话过程中要解决的一些问题?每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存...原创 2018-05-19 16:58:35 · 460 阅读 · 0 评论 -
Java Web应用程序的推荐目录结构
以前没有用过maven管理过项目的依赖,最后使用上了maven,发现通过不能方式建立出来的web应用程序目录结构基本都不一样,既然每次都要到网上搜索如何建立maven管理的Web应用程序,不如自己找百度谷歌一下。找了半天 ,感觉比较好的maven管理的web应用程序目录结构是这个:├── pom.xml└── src ├── main │ ├── java ...转载 2018-05-11 21:50:17 · 1950 阅读 · 0 评论 -
设置zookeeper开机自启动/服务化
设置启动zk的用户为zookeeper设置启动zk的用户为zookeeper用户,而非root用户,这样比较安全。 可以使用root用户进行zookeeper的管理(启动、停止…),但对于追求卓越和安全的的人来说,采用新非root用户管理zookeeper更好。 步骤: 1. 创建用户和用户组 2. 相关目录设置用户和用户组属性 3. 采用zookeeper用户启动进程 设置zookee原创 2017-12-04 10:47:43 · 6199 阅读 · 0 评论 -
Java 异常Exception e中e的getMessage()和toString()方法的区别
示例代码1:public class TestInfo { private static String str =null; public static void main(String[] args) { System.out.println("test exception"); try { if(str.equals("n转载 2017-08-03 19:32:41 · 1654 阅读 · 0 评论 -
fastJson解析URL中&特殊字符报错
1.楔子在做消息推送的时候,突然报出一个fastJosn解析json错误的报错,找了好久都终于发现是因为URL中含有特殊字符需要转义的字符&,导致JSON解析报错。2.报错信息网上搜索这个错误,大部分观点是JSON中含有特殊字符。还有人说是fastjson版本,字符串编码等问题,最后被逐一排除,定位到是含有特殊字符&json文件中含有如下的URL:3.解决方式定位到...原创 2019-04-09 22:35:02 · 8595 阅读 · 0 评论 -
JAVA多线程实现方式
1. 楔子java有多种方式实现多线程,比如继承Thread类或实现Runnable接口创建无返回值的多线程、使用ExecutorService、Callable、Future实现有返回结果的多线程等,这些该具体如何实现?各有什么不同?在什么样的场景下使用哪种方式比较好?本文就来探讨这些问题。2.继承ThreadThread本质上也是实现了Runnable接口,他是Runnable的一个实例...原创 2019-04-16 23:06:21 · 613 阅读 · 0 评论 -
Java中double转BigDecima导致精度损失
1.楔子服务中如下的代码出现了诡异的不相等问题? 最后发现是double转bigDecimal时精度损失导致。代码和现象如下: @Test public void doubleToDecimal() { double amountDouble = 16.67; BigDecimal amountDecimal = new BigDecimal("1...原创 2019-04-22 14:03:30 · 1504 阅读 · 0 评论 -
Vert.x(vertx)入门资料
1.vert.x简介vert.x 采用类似 Node.js 的 eventloop callback 机制,优势是 Eventloop 是单线程场景下几乎是最快的并发解决方案,但也需要周边生态的支持,比如 DbClient/HttpClient 这些跟 IO 打交道的 API 需要支持异步回调的风格,社区干脆就整合或者自己实现了。依赖注入的类库可以用 Guice,整体启动时间大概是同规模 spr...原创 2019-08-02 14:40:46 · 6575 阅读 · 0 评论 -
单点登录原理分析及CAS实战
前端需要了解的 SSO 与 CAS 知识原创 2019-08-08 16:35:07 · 1045 阅读 · 3 评论 -
gradle第三方Jar包依赖统一管理
1. 背景一个gradle的工程中往往包含很多的子工程,每个子工程都有其自己的Jar包依赖。现实情况是各个子工程对jar包的引入都是比较随意的,版本号各式各样,如何统一各个子工程的版本号?统一管理第三方依赖?版本号统一后,若某个组件有漏洞能够统一升级,能够直观的看到依赖情况等。2.实现配置方法:https://docs.spring.io/dependency-management-plu...原创 2019-08-06 11:28:51 · 3558 阅读 · 2 评论 -
系统运行缓慢,CPU 100%,以及FULL GC次数过多问题的排查思路
对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出jstack和内存信息,然后重启系统,尽快保证系统的可用性。这种情况可能的原因主要有两种:代码中某个位置读取数据量较大,导致系统内存耗尽,从而导致Full GC次数过多,系统缓慢;代码中有比较耗CPU的操作,导致CPU过高,系统运行缓慢;相对来说,这是出现频率最高的两种线上问题,而且它们会直接导致系统...原创 2019-08-08 11:12:48 · 586 阅读 · 0 评论 -
大量CLOSE_WAIT导致服务不可用的原因解析
1.现象商旅通服务没有宕机,服务CPU,磁盘,内存,网络均正常,但就是一直不提供服务。2.定位问题出现服务不可用时,最重要的是要定位出原因,出于经验考虑,当服务不可用时,优先考虑服务本身的问题。最直接的方法就是查看服务不可用状态下的线程状态。已知商旅通tomcat线程池maxThrad是200个,注意这个参数,这是排查问题重要的参考指标。1.查看商旅线程总数(210个)jstack -l...原创 2019-08-08 09:32:13 · 1251 阅读 · 0 评论 -
获取所有classpath指定包下类的所有子类
1.问题开发过程中,有时需要找到所有classpath下,特定包下某个类的所有子类,如何做到?2. 实现比较常见的解决方案是自己遍历目录,查找所有.class文件。下面这个方法使用spring工具类实现,简化过程,不再需要自己遍历目录 /** * 获取在指定包下某个class的所有非抽象子类 * * @param parentClass 父类 ...原创 2019-06-03 20:31:08 · 1939 阅读 · 0 评论 -
分布式ID生成器
1.背景公司产品线最初为了快速上线、快速迭代,所使用的ID采用把JDK原生的32位(去掉四个-)或者36位的原始UUID(Universally Unique Identifier)缩短为19位,且不丢失精度的方式。但是UUID太长而且人类不可读(由大写、小写、数字随机组成),且对数据库性能有一定的影响(短且数字递增的最优),所以希望开发出一种全局唯一性、高性能、纯数字、较短、趋势递增的分布式...原创 2019-06-12 22:40:24 · 2326 阅读 · 2 评论 -
一次生产环境大量CLOSE_WAIT导致服务无法访问的定位过程
1.症状生产环境的一个服务突然无法访问,服务的交互过程如下所示:所有的请求都是通过网关进入,之后分发到后端服务。现在的情况是用户服务无法访问商旅服务,网关有大量java.net.SocketTimeoutException: Read timed out报错日志,商旅服务也不断有日志打印,大多是回调和定时任务日志,所以故障点在网关和商旅服务,大概率是商旅服务无法访问导致网关超时。后续执行...原创 2019-05-20 15:14:14 · 5363 阅读 · 1 评论 -
linux上查看java最耗时的线程信息
找到JAVA进程pidps -ef|grep java或则jps -mlv找进行下耗时的线程TID使用top -Hp pid可以查看某个进程的线程信息 -H 显示线程信息,-p指定pidtop -Hp 10906 查看最耗时的 TID即线程idprintf "%x\n" [tid] 转成16进制java中的线程类相关信息jstack 线程ID 可以查看某个线程的堆栈情况,...原创 2019-04-25 11:00:05 · 4035 阅读 · 0 评论 -
两个长数字相加
1.编程题目题目:要实现两个百位长的数字直接相加分析:因为数字太长所以无法直接相加,所以采用按位相加,然后组装的方式。(注意进位)2.编程实现package com.sino.daily.code_2019_6_29;import org.apache.commons.lang3.StringUtils;/** * create by 2019-06-29 19:03 * *...原创 2019-06-30 10:44:44 · 667 阅读 · 0 评论 -
Java 枚举Enum理解
1.楔子枚举能继承别枚举吗?枚举能继承其他类吗?枚举能实现接口吗?枚举能被其他类继承吗?本文就是要探讨这些问题。2. 准备本文需要使用到反编译,请自行安装Jad(JAva Decompiler)反编译工具。由于该工具最新的版本也只支持Java 4,不支持Java 5,所以能够很好的保留jdk5之后的例如枚举等原生的编译结果。jad的使用教程:Java反编译工具Jad详解JD-GUI反编...原创 2019-04-24 17:32:20 · 675 阅读 · 0 评论 -
logback配置实例
logger和appender的关系root是根logger,所以他两是一回事;只不过root中不能有name和additivity属性,是有一个level。appender是一个日志打印的组件,这里组件里面定义了打印过滤的条件、打印输出方式、滚动策略、编码方式、打印格式等等。但是它仅仅是一个打印组件,如果我们不使用一个logger或者root的appender-ref指定某个具体的appen...原创 2019-04-28 16:44:38 · 741 阅读 · 0 评论 -
看完这个不会配置 logback ,请你吃瓜!
之前在 日志?聊一聊slf4j吧 这篇文章中聊了下slf4j。本文也从实际的例子出发,针对logback的日志配置进行学习。logack 简介logback 官网:https://logback.qos.ch/目前还没有看过日志类框架的源码,仅限于如何使用。所以就不说那些“空话”了。最直观的认知是:logback和log4j是一个人写的 springboot默认使用的日志框架...转载 2019-04-28 16:37:17 · 591 阅读 · 0 评论