![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 78
王坦.
王坦
土旦
半甜清粥
展开
-
Java 中的泛型以及协变和逆变(PECS法则)
在 Java 中,其实所谓的泛型就是类型的参数化。如果方法有入参,那么这些入参面前往往会有类型,这个类型就是修饰参数所用。假如我们在创建类型的时候,也为其指定了参数,这个参数又是个类型,这种我们就称为泛型。使用泛型能够像传递参数一样传递类型,同时保证运行时的类型安全。类型的传递能满足各种类型的调用,类型安全是指编译器在编译期间会对泛型信息进行检查,只有符合规范才能通过编译,可以有效避免了运行时异常。这就是使用 Object 相比(所有类型都可以使用基类 Object 表示)泛型的优势所在。Java 中支转载 2022-07-14 12:01:27 · 527 阅读 · 2 评论 -
Redlock(redis 分布式锁)原理分析
Redlock(redis 分布式锁)原理分析Redlock:全名叫做 Redis Distributed Lock; 即使用 redis 实现的分布式锁;使用场景:多个服务间保证同一时刻同一时间段内同一用户只能有一个请求(防止关键业务出现并发攻击);官网文档地址如下:https://redis.io/topics/distlock这个锁的算法实现了多 redis 实例的情况,相对于单 redis 节点来说,优点在于 防止了 单节点故障造成整个服务停止运行的情况;并且在多节点中锁的设计,及多节点同时转载 2021-10-25 10:43:19 · 1350 阅读 · 0 评论 -
javaagent 技术原理及简单实现
目录javaagent 技术原理及简单实现1、引子2、思路2.1 朴素思路2.2 略成熟思路2.2.1 动态代理2.2.2 AspectJ3、 java agent 介绍3.1 什么是 java agent?3.2 java Instrumentation API3.2.1 实现 agent 启动方法3.2.2 指定 Main-Class3.2.3 agent 加载3.2.4 Instrument4、java agent 原理简述4.1 启动时修改4.2 运行时修改4.3 ClassFileLoadHook转载 2021-09-30 22:35:04 · 3298 阅读 · 0 评论 -
guava 的重试机制 guava-retrying 使用
在日常开发中,有时会遇到重试调用,可以使用 guava-retrying引入 jar 包<dependency> <groupId>com.github.rholder</groupId> <artifactId>guava-retrying</artifactId> <version>2.0.0</version></dependency>使用示例Retryer<Boolean>原创 2021-06-30 16:05:37 · 386 阅读 · 0 评论 -
人机身份验证开发资料
google recaptcha 谷歌人机身份验证超详细使用教程,前端/后端集成说明https://www.cnblogs.com/echolun/p/12436226.html原创 2020-03-08 19:49:21 · 1325 阅读 · 0 评论 -
Java 判断 Class 是从 ide 还是 jar 包运行
是否从 ide 运行/** * Class 是否从 file 包启动 * * @param clazz 某 Class * @param <T> 泛型 * @return boolean * @author wangtan * @date 2021-02-26 10:34:44 * @since 1.0.0 */ public static <T> boolean isStar.原创 2021-02-26 10:39:42 · 494 阅读 · 0 评论 -
无锁编程(Lock Free)框架 系列文章
无锁编程(Lock Free)框架 系列文章:1 前置知识:伪共享 原理 & 实战2 disruptor 使用和原理 图解3 akka 使用和原理 图解4 camel 使用和 原理 图解1 disruptor 是什么?Disruptor 是英国外汇交易公司 LMAX 开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与 I/O 操作处于同样的数量级)。基于 Disruptor 开发的系统单线程能支撑每秒 600 万订单,2010 年在 QCon 演讲后,转载 2021-02-03 11:23:24 · 1061 阅读 · 0 评论 -
前端 encodeURI 为什么要编码两次
前端 encodeURI 为什么要编码两次1. 编码解码过程2. 总结1. 编码解码过程2. 总结两次编码两次解码的过程为:UTF-8 编码(成 ASCII 码,全英文) -> UTF-8 编码 -> 服务器容器解码(Tomcat 默认 ISO-8859-1,可正常解全英文 ASCII 码) -> UTF-8 解码,编码和解码的过程是对称的,所以不会出现乱码...原创 2021-02-02 16:52:27 · 1884 阅读 · 6 评论 -
想要去阿里面试?你必须得跨过 JVM 这道坎!
很多人想要到阿里巴巴、美团、京东等互联网大公司去面试,但是现在互联网大厂面试一般都必定会考核JVM相关的知识积累和实践经验,毕竟线上系统写好代码部署之后,每个工程师都必须关注JVM相关的东西,比如OOM、GC等问题.所以一起来看看JVM的最基本的区域划分以及工作原理,这个基本上是互联网公司面试必问。区域划分jvm的区域划分如下所示:大致就是分为:程序计数器,虚拟机栈,堆,方法区,本地方法栈,这几个部分。接下来我们从自己写好的Java代码如何通过JVM来运行的角度,来分析一下JVM里这些区域是如何转载 2020-05-27 09:33:08 · 607 阅读 · 0 评论 -
海量数据去重
使用 bitmapjdk:BitSetredis: redis bitmap使用 布隆过滤器使用 stream-lib参考资料https://www.cnblogs.com/yuanjiangw/p/10131962.html原创 2020-05-26 16:37:04 · 647 阅读 · 0 评论 -
JDK自带工具keytool的使用
JDK自带工具keytool的使用JDK里自带的,位于<JAVA_HOME>\bin\keytool.exeKeytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据: 密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密) 可信任的证书实体(trusted certificate entries)——只包含公钥keytool -help密钥和证书管理工转载 2020-05-21 14:34:09 · 2839 阅读 · 0 评论 -
JAVAFX 第三方库 布局 小工具 美化 测试 UI 框架 推荐
JAVAFX 第三方库 布局 小工具 美化 测试 UI 框架 推荐原帖地址https://zeroturnaround.com/rebellabs/best-javafx-libraries-for-beautiful-apps-and-clean-code/布局MigLayoutMigLayout基于字符串以及API类型构造简单的布局,如果你经常遇到要调整几个组件之间的margin,那么它会简化你的工作。http://miglayout.com/如下图,使用简单的代码就可以生成如下的布局,他转载 2020-05-18 20:27:38 · 1746 阅读 · 0 评论 -
Java 自定义异常
在Java使用自定义异常就跟你和女朋友相处是一样的,首先你要知道你为什么要跟你女朋友在一起,你女朋友有哪些好处,有哪些不好的地方,再来和你女朋友谈婚论嫁过一辈子。为什么要使用自定义异常1.我们在工作的时候,项目是分模块或者分功能开发的,基本不会是一个人开发一整个项目,使用自定义异常类就统一了对外异常展示的方式。2.有时候我们遇到某些校验或者问题的时候,需要直接结束掉当前的请求,这时便可以通过...转载 2020-05-06 15:52:15 · 1472 阅读 · 0 评论 -
深入理解Java对象的创建过程:类的初始化与实例化
参考资料https://blog.csdn.net/justloveyou_/article/details/72466416转载 2020-04-30 17:26:19 · 608 阅读 · 0 评论 -
详解解决CAS机制中ABA问题的AtomicStampedReference
AtomicStampedReference 是一个带有时间戳的对象引用,能很好的解决 CAS 机制中的 ABA 问题,这篇文章将通过案例对其介绍分析。** 一、ABA 问题 **ABA 问题是 CAS 机制中出现的一个问题,他的描述是这样的。我们直接画一张图来演示,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ARIFNCNA-1587017953550)(...转载 2020-04-16 14:19:35 · 810 阅读 · 0 评论 -
CAS 原理
1、什么是 CAS?CAS:Compare and Swap,即比较再交换。jdk5 增加了并发包 java.util.concurrent.*, 其下面的类使用 CAS 算法实现了区别于 synchronouse 同步锁的一种乐观锁。JDK 5 之前 Java 语言是靠 synchronized 关键字保证同步的,这是一种独占锁,也是是悲观锁。**2、CAS 算法理解 **对 CAS 的...转载 2020-04-16 14:17:49 · 341 阅读 · 0 评论 -
Java中的char占用几个字节
Java 中的 char 占用几个字节目录[1. 概述](https://www.cnblogs.com/wuqinglong/p/10329368.html#1 概述)答疑[Java 的 char 一定是 2 个字节吗?](https://www.cnblogs.com/wuqinglong/p/10329368.html#java 的 char 一定是 2 个字节吗?)...转载 2020-04-15 16:47:29 · 757 阅读 · 0 评论 -
快速失败(fail-fast)和安全失败(fail-safe)的区别
1.fail-fast和fail-safe比较Iterator的安全失败是基于对底层集合做拷贝,因此,它不受源集合上修改的影响。java.util包下面的所有的集合类都是快速失败的,而java.util.concurrent包下面的所有的类都是安全失败的。快速失败的迭代器会抛出ConcurrentModificationException异常,而安全失败的迭代器永远不会抛出这样的异常。快速失败...转载 2020-04-15 15:16:04 · 920 阅读 · 0 评论 -
java.util.zip.ZipException:invalid distance distance too far back
背景在服务器上传 jar 包,提交到 storm 环境,发现报错原因jar 包有问题,可能是网络传输中 jar 包损坏,或者 maven 打包时丢失依赖,反正就是 jar 包不完整。我的原因发现我和同事在同时调测这个 jar 包,我俩都在上传,影响到了 jar 包文件。...原创 2020-04-13 17:08:06 · 4313 阅读 · 0 评论 -
究竟先操作缓存,还是数据库?
缓存存储,也是数据的冗余。(1)数据库访问数据,磁盘IO,慢;(2)缓存里访问数据,存操作,快;(3)数据库里的热数据,可在缓存冗余一份;(4)先访问缓存,如果命中,能大大的提升访问速度,降低数据库压力;这些,是缓存的核心读加速原理。但是,一旦没有命中缓存,或者一旦涉及写操作,流程会比没有缓存更加复杂,这些是今天要分享的话题。读操作,如果没有命中缓存,流程是怎么样的?答:如下图所示...转载 2020-04-13 09:53:43 · 609 阅读 · 0 评论 -
面试被问如何保证缓存与数据库的双写一致性?这篇帮你搞定
作者:你是我的海啸https://blog.csdn.net/chang384915878Cache Aside Pattern最初级的缓存不一致问题及解决方案比较复杂的数据不一致问题分析分布式缓存是现在很多分布式应用中必不可少的组件,但是用到了分布式缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?Cache As...转载 2020-04-13 09:40:15 · 600 阅读 · 1 评论 -
CompletableFuture 详解
CompletableFuture类实现了CompletionStage和Future接口。Future是Java 5添加的类,用来描述一个异步计算的结果,但是获取一个结果时方法较少,要么通过轮询isDone,确认完成后,调用get()获取值,要么调用get()设置一个超时时间。但是这个get()方法会阻塞住调用线程,这种阻塞的方式显然和我们的异步编程的初衷相违背。为了解决这个问题,JDK吸收了...转载 2020-04-13 09:01:02 · 542 阅读 · 0 评论 -
java8 stream中 forEach和 forEachOrdered 当parallel时候执行过程&安全问题深入理解
直观来看,一般都知道,一个是不按照顺序输出,一个按照顺序输出。那当stream加入了parallel修饰的时候,会怎么处理呢?先来看一个例子:Stream.of("AAA,","BBB,","CCC,","DDD,").parallel().forEach(System.out::print);System.out.println("\n__________________________...转载 2020-04-08 10:36:53 · 2041 阅读 · 0 评论 -
为什么volatile能保证有序性不能保证原子性
对于内存模型的三大特性:有序性、原子性、可见性。大家都知道 volatile 能保证可见性和有序性但是不能保证原子性,但是为什么呢?一、原子性、有序性、可见性1、原子性:(1)原子的意思代表着 ——“不可分”;(2)在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。原子性是拒绝多线程交叉操作的,不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。例如 a...转载 2020-03-24 08:49:18 · 900 阅读 · 0 评论 -
什么是堆?什么是方法区?JVM内存模型中堆与方法区的介绍
本篇文章给大家带来的内容是关于什么是堆?什么是方法区?JVM内存模型中堆与方法区的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。一、堆(Heap)1.1.什么是堆堆是用于存放对象的内存区域。因此,它是垃圾收集器(GC)管理的主要目标。其具有以下特点:堆在逻辑上划分为“新生代”和“老年代”。由于JAVA中的对象大部分是朝生夕灭,还有一小部分能够长期的驻留在内存中,为了...转载 2020-02-26 22:08:28 · 4025 阅读 · 0 评论 -
"init"与"clinit"的区别
在编译生成class文件时,会自动产生两个方法,一个是类的初始化方法<clinit>, 另一个是实例的初始化方法<init>注意:<clinit>:如果没有静态块,静态变量则没有<clinit><init>:类的实例构造器。关于二者的详细对照:<clinit>:在JVM第一次加载class文件时调用,包括静态变量初始...原创 2020-02-14 20:28:25 · 514 阅读 · 0 评论 -
抽象类和接口的区别以及抽象类和接口的使用场景
一、抽象类在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就可以称之为抽象类。1.抽象方法:使用abstract修饰且没有方法体的方法。特点:① 抽象方法没有方法体,交给子类实现② 抽象方法修饰符不能是private final static③ 抽象方法必须定义在抽象类或者接口中...转载 2020-02-11 22:20:25 · 817 阅读 · 0 评论 -
Java -Dfile.encoding=UTF-8 的使用
Java -Dfile.encoding=UTF-8 遭遇乱码问题的来龙去脉如下使用:java -XX:MaxPermSize=256M -Dfile.encoding=UTF-8 -Xbootclasspath/a:./acc/library/fc -jar fats.jar这两天写了一个 Java 程序来玩,结果又遭遇了以前遇到过很多次的乱码问题,具体描述一下:在 Mac 系统里面,常...转载 2020-01-13 14:27:08 · 13733 阅读 · 4 评论 -
java 打印日志乱码
修改 JVM 参数-Dfile.encoding=UTF-8原创 2020-01-13 14:21:41 · 5394 阅读 · 0 评论 -
JVM系列五:JVM监测&工具[整理中]
前几篇篇文章介绍了介绍了JVM的参数设置并给出了一些生产环境的JVM参数配置参考方案。正如之前文章中提到的JVM参数的设置需要根据应用的特性来进行设置,每个参数的设置都需要对JVM进行长时间的监测,并不断进行调整才能找到最佳设置方案。本文将介绍如果通过工具及Java api来监测JVM的运行状态,并详细介绍各工具的使用方法。 需要监测的数据:(内存使用情况 谁使用了内存 GC的...转载 2020-01-13 14:14:14 · 2190 阅读 · 0 评论 -
JVM系列四:生产环境参数实例及分析【生产环境实例增加中】
java application项目(非web项目)改进前:-Xms128m-Xmx128m-XX:NewSize=64m-XX:PermSize=64m-XX:+UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=78-XX:ThreadStackSize=128-Xloggc:logs/gc.log-Dsun.rmi.d...转载 2020-01-13 14:10:42 · 2179 阅读 · 0 评论 -
JVM系列三:JVM参数设置、分析
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上...转载 2020-01-13 14:09:48 · 2201 阅读 · 0 评论 -
JVM系列二:GC策略&内存申请、对象衰老
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上...转载 2020-01-13 14:05:00 · 2073 阅读 · 0 评论 -
JVM系列一:JVM内存组成及分配
JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等,详见HotSpot VM GC 的种类 现在比较常用的是分代收集(generational collection,也是SUN VM使用的,J2SE1.2之后引入),即将内存分为几个区域,将不同生命周期的对象放在不同区域里:young generation,tenured g...转载 2020-01-13 14:02:49 · 2141 阅读 · 0 评论 -
获取当前 jar 包的运行路径
获取当前 jar 包的运行路径测试代码中输出字节码所在编译路径,打成 jar 包后输出 jar 包所在路径,都是绝对路径。package com.asiainfo.ete.util;import java.io.File;import java.net.URISyntaxException;import java.security.CodeSource;import java.uti...原创 2020-01-03 09:57:22 · 7937 阅读 · 0 评论 -
java 读取 properties 配置文件的几种方式
方法一基于 ClassLoder 读取配置文件,该方式只能读取类路径下的配置文件,有局限但是如果配置文件在类路径下比较方便。Properties properties = new Properties ();// 使用 ClassLoader 加载 properties 配置文件生成对应的输入流InputStream in = PropertiesMain.class.getClassLo...原创 2020-01-02 17:14:32 · 7754 阅读 · 0 评论 -
org.apache.commons.lang.StringUtils 处理字符串类
org.apache.commons.lang **Class StringUtils**java.lang.Objectorg.apache.commons.lang.StringUtilspublic class StringUtilsextends ObjectOperations on String that are null safe. 字符串是 null 安全的,不会抛出 ...原创 2019-12-16 17:40:36 · 25575 阅读 · 0 评论 -
log4j 日志输出格式说明
Conversion CharacterEffectcUsed to output the category of the logging event. The category conversion specifier can be optionally followed by precision specifier, that is a decimal constant ...原创 2019-12-12 16:36:15 · 28496 阅读 · 0 评论 -
fastjson SerializerFeature 详解
依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version> ...转载 2019-12-12 16:32:24 · 29802 阅读 · 0 评论 -
SLF4J: Class path contains multiple SLF4J bindings.
原因引入了一个第三方 jar 包,里面打包了别的日志插件,导致报错堆栈信息SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/C:/Users/tudan/Documents/WorkLearn3/wechat-demo/lib/itchat4j-1.1.0-jar-wi...原创 2019-12-03 17:18:18 · 39353 阅读 · 1 评论