Java
文章平均质量分 65
ywb201314
兵法有言,知己知彼,百战不殆
展开
-
cron表达式详解
"/"代表触发步进(step),"/"前面的值代表初始值("*"等同"0"),后面的值代表偏移量,比如"0/25"或者"*/25"代表从0分钟开始,每隔25分钟触发1次,即0分钟触发1次,第25分钟触发1次,第50分钟触发1次;"/"代表触发步进(step),"/"前面的值代表初始值("*"等同"0"),后面的值代表偏移量,比如"0/20"或者"*/20"代表从0秒钟开始,每隔20秒钟触发1次,即0秒触发1次,20秒触发1次,40秒触发1次;"5/20"代表5秒触发1次,25秒触发1次,45秒触发1次;转载 2024-05-09 17:45:14 · 49 阅读 · 0 评论 -
java类加载机制
我们把上面生成的SayHello.class改为SayHello.myclass(这样反编译jdui就无法查看),然后自定义类加载器加载SayHello.myclass正在上传…重新上传取消image.png/*** 需要实现从myClass加载*/@Override/*** 把一个文件转化为byte字节数组。转载 2023-04-27 14:30:49 · 414 阅读 · 0 评论 -
ForkJoin看这篇就够了!
求解出子问题的解,合并得到原问题的解。Fork/Join采用的是分而治之的基本思想,分而治之就是将一个复杂的任务,按照规定的阈值划分成多个简单的小任务,然后将这些小任务的结果再进行汇总返回,得到最终的任务。为了减少在帮助其他线程执行任务时发生竞争,会使用双端队列来存放任务,被窃取的任务只会从队列的头部获取任务,而正常处理的线程每次都是从队列的尾部获取任务。每个线程都会先保证将自己队列中的任务执行完,当自己的任务执行完之后,会去看其他线程的任务队列中是否有未处理完的任务,如果有则会帮助其他线程执行;转载 2023-02-15 17:24:54 · 202 阅读 · 0 评论 -
「Java工具类」汉语转拼音工具类HanyuPinyinHelper.java
介绍语本号主要是Java常用关键技术点,通用工具类的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技术分享;datax、kafka、flink等大数据处理框架的技术分享。文章会不断更新,欢迎码友关注点赞收藏转发!望各位码友点击关注,冲1000粉。后面会录制一些视频教程,图文和视频结合,比如:图书介绍网站系统、抢购系统、大数据中台系统等。技术才是程序猿的最爱,码友们冲啊如果码友觉得代码太长转载 2022-07-01 17:52:30 · 620 阅读 · 0 评论 -
pinyin4j使用示例
pinyin4j的主页:http://pinyin4j.sourceforge.net/pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制pinyin4j是一个支持将中文转换到拼音的Java开源类库 1.支持简体中文和繁体中文字符 2.支持转换到汉语拼音,通用拼音, 威妥玛拼音(威玛拼法), 注音符号第二式, 耶鲁拼法和国语罗马字 3.支持多音字,即可以获取一个中文字符的多种发音 4.支持多种字符串输出格式,比如支持Unicode格式的字符ü和声调符号(阴平 "ˉ"转载 2022-07-01 17:50:20 · 391 阅读 · 0 评论 -
pinyin4j-2.5.0.jar中PinyinHelper的几个方法
拼音包参数转载 2022-07-01 17:48:45 · 776 阅读 · 0 评论 -
源码解析 Java 的 compareAndSwapObject 到底比较的是什么?
一、引题 今天在写一个无锁队列的小项目时用到了 Java Unsafe 包中的 compareAndSwapObject 方法,也就是比较并交换 Java Object ,对于这个方法以前都仅是停留在使用阶段,对底层源码的探究比较少,所以今天就打开源码探究一下该方法的底层到底是怎样实现的,其方法中的这个比较对于 Java Object 来说到底比较的是什么?二、源码探究2.1 Java API /*** * Compares the value of the object field ...转载 2022-03-17 13:48:28 · 548 阅读 · 0 评论 -
FutureTask介绍及使用
FutureFuture是一个接口,它定义了5个方法:boolean cancel(boolean mayInterruptIfRunning); boolean isCancelled(); boolean isDone(); V get() throws InterruptedException, ExecutionException;简单说明一下接口定义 boolean cancel(boolean mayInterruptInRunning) 取消一个任务,并返回取消结果。参数表示是转载 2022-03-17 13:32:55 · 916 阅读 · 0 评论 -
java比较器中的nullsFirst()与nullsLast()
一般的我们对List<Map<XX,XX>>类型排序可以这样写对Score进行排序:List<Map<String, Object>> resultlist = new ArrayList<>(); Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("id", "1"); map1.pu...转载 2022-03-07 10:53:44 · 763 阅读 · 0 评论 -
对LIST对象多个字段进行排序
jdk1.8之前的做法参考:http://blog.csdn.net/enable1234___/article/details/53224740jdk1.8新特性的做法:参考: http://blog.csdn.net/aitangyong/article/details/54880228Student.java public class Student { private Long id; private String name; priva.转载 2022-03-07 10:51:55 · 1100 阅读 · 0 评论 -
彻底理解synchronized
1. synchronized简介在学习知识前,我们先来看一个现象: 12345678910111213141516171819202122 public class SynchronizedDemo implements Runnable { private static int count = 0; public static void main(String[] args) { fo.转载 2022-01-11 09:55:29 · 142 阅读 · 0 评论 -
HashMap之tableSizeFor方法图解
目录普通人的简单粗暴方式 示例代码 问题 大神的实现 移位的思想 全过程示意图 初始值 右移一位+或运算 右移二位+或运算 右移四位+或运算 右移八位+或运算 右移十六位+或运算 结果+1 初始容量-1 总结在看HashMap源码时,注意到一个问题,容量必须是2的整数幂,为了保证这一点,专门给出了一个巧妙而高效的方法tableSizeFor。不妨想一下,如果是自己解决这个问题,该怎么解决?给定一个int类型的整数n,如何求出不小于它的转载 2021-08-31 17:09:04 · 1553 阅读 · 2 评论 -
说说Java的Unsafe类
本文主要内容Unsafe类介绍 Unsafe的主要功能 总结1、Unsafe类介绍第一次看到这个类时被它的名字吓到了,居然还有一个类自名Unsafe?读完本文,大家也能发现Unsafe类确实有点不那么安全,它能实现一些不那么常见的功能。Unsafe类使Java拥有了像C语言的指针一样操作内存空间的能力,同时也带来了指针的问题。过度的使用Unsafe类会使得出错的几率变大,因此Java官方并不建议使用的,官方文档也几乎没有。Oracle正在计划从Java 9中去掉Unsafe类,如果真是如此转载 2021-08-27 14:47:46 · 177 阅读 · 0 评论 -
浅析AtomicLong以及Unsafe
前言最近关注着限流、降级相关的设计,开源的Hystrix提供了一种设计思路。限流降级的前提是需要了解系统的各种状态,服务的响应情况,接口的调用情况,数据库的情况等等。其中很重要的一个指标就是qps,那么如何统计qps?Hystrix中有个设计非常好的类HystrixRollingNumber,非常适合用来统计qps。HystrixRollingNumber中利用了LongAdder来提高效率,所以本文先会介绍AtomicLong,UnSafe,下篇文章介绍LongAdder,下下篇文章介绍Hystrix转载 2021-08-26 16:56:07 · 235 阅读 · 0 评论 -
Java集合之一—HashMap
深入浅出学Java——HashMap哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,本文会对java集合框架中HashMap的实现原理进行讲解,并对JDK7的HashMap源码进行分析。一、什么是哈希表在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进转载 2021-08-26 14:13:11 · 142 阅读 · 0 评论 -
Integer的highestOneBit方法源码解析
在读HashMap源码的时候,遇到了Integer的highestOneBit静态方法不是太理解,所以就读了一下源码,这里记录一下。JDK的注释中说返回具有至多單個 1 位的 int 值,在指定的 int 值中最高位(最左邊)的 1 位的位置。如果指定的值在其二進制補碼表示形式中不具有 1 位,即它等於零,則返回零。用人话说如果一个数是0, 则返回0; 如果是负数, 则返回 -2147483648:【1000,0000,0000,0000,0000,0000,0000,0000】(二進转载 2021-08-24 13:43:55 · 127 阅读 · 0 评论 -
Java Integer.highestOneBit(i)代码品读
1、在写代码的过程中,偶尔使用到了Integer.highestOneBit(i)这个函数调用。使用的第一感觉就是这个函数是干什么用的,通过查看文档得知,这个函数的作用是取 i 这个数的二进制形式最左边的最高一位且高位后面全部补零,最后返回int型的结果。首先来补充一点背景知识。1、在计算机系统中,数值一律使用补码来表示和存储。主要原因是使用补码可以将符号位和其它位统一处理;同时,减法也可按照加法来处理。另 外, 两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。- 补码.转载 2021-08-24 13:41:53 · 172 阅读 · 0 评论 -
Java中各种引用(Reference)解析
目录1,引用类型 2, FinalReference 2.1, Finalizer 3, SoftReference 4, WeakReference 5, PhantomReference 6, ReferenceQueue 7,Cleaner 8, Reference 引用实例的几个状态 重点源码解析 总结1,引用类型java.lang.ref整体包结构类型 对应类 特征 强引用 强引用的对象绝对不会被gc回收 软引转载 2021-08-20 13:10:42 · 856 阅读 · 0 评论 -
高并发编程之AtomicReference讲解
一、AtomicReference介绍①.AtomicReference和AtomicInteger非常类似,不同之处就在于AtomicInteger是对整数的封装,而AtomicReference则对应普通的对象引用。也就是它可以保证你在修改对象引用时的线程安全性。②.AtomicReference是作用是对”对象”进行原子操作。 提供了一种读和写都是原子性的对象引用变量。原子意味着多个线程试图改变同一个AtomicReference(例如比较和交换操作)将不会使得AtomicReference处于转载 2021-08-18 17:25:54 · 455 阅读 · 0 评论 -
Java——IO流超详细总结
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。在初学Java时,IO流是我遇到的一个很头疼的东西,Java IO 体系看起来类很多,感觉很复杂,但其实是 IO 涉及的因素太多了。在设计 IO 相关的类时,编写者也不是从同一个方面考虑的,所以会给人一种很乱的感觉,并且还有设计模式的使用,更加难以使用这些 IO 类,所以特地对 Java 的 IO 做一个总结。1|0转载 2021-08-18 14:44:42 · 6392 阅读 · 0 评论 -
Java IO流详解(面试不要再问我IO流)
数据流的基本概念几乎所有的程序都离不开信息的输入和输出,比如从键盘读取数据,从文件中获取或者向文件中存入数据,在显示器上显示数据。这些情况下都会涉及有关输入/输出的处理。在Java中,把这些不同类型的输入、输出源抽象为流(Stream),其中输入或输出的数据称为数据流(Data Stream),用统一的接口来表示。IO 流的分类数据流是指一组有顺序的、有起点和终点的字节集合。按照流的流向分,可以分为输入流和输出流。注意:这里的输入、输出是针对程序来说的。输出:把程序(内存)中的内容输出到转载 2021-08-18 14:42:42 · 310 阅读 · 0 评论 -
java IO流的概念理解
1.Java Io流的概念,分类,类图。1.1 Java Io流的概念 java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。通过流的形式允许java程序使用相同的方式来访问不同的输入/输出源。stram是从起源(source)到接收的(sink)的有序数据。注:java把所有的传统的流类型都放到在java io包下,用于实现输入和输出功能。1.2 Io流的分类:按照转载 2021-08-18 14:39:10 · 437 阅读 · 0 评论 -
Java IO流学习总结一:输入输出流
Java IO流学习总结一:输入输出流转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54292148本文出自【赵彦军的博客】Java IO流学习总结一:输入输出流Java IO流学习总结二:FileJava IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStreamJava IO流学习总结四:缓冲流-BufferedReader、BufferedWriterJava IO流学习转载 2021-08-18 14:37:54 · 173 阅读 · 0 评论 -
typora中输入数学公式
LaTeX编辑数学公式基本语法元素LaTeX中数学模式有两种形式:inline和display。前者是指正文插入行间数学公式,后者独立排列,可以有或没有编号。行间公式(inline):用$...$将公式括起来块间公式(display):用$$...$$将公式括起来,默认显示在行中间各类希腊字母表希腊字母 英文 希腊字母 英文 希腊字母 英文 希腊字母 英文α \alphaα \alpha θ \thetaθ \theta o o...转载 2021-07-12 17:31:10 · 1993 阅读 · 0 评论 -
使用Typora添加数学公式
Typora是一款支持Markdown的编辑器,亲测非常好用。之前发CSDN博客也都是先在Typora上完成,然后直接导入到CSDN。最近在数学公式编辑上遇到了点麻烦,在此总结了常用的公式编辑方法,旨在文章更加的美观规范。1. 打开Typora选择数学模块点击“段落”—>“公式块”快捷键Ctrl+Shift+m“$$”+回车以上三种方式都能打开数学公式的编辑栏,如下:2. 添加数学公式输出美观规范的数学公式,要清楚它们的格式和代码,在编辑栏中输入代码,对应的公式会在下面实时显示,如转载 2021-07-12 17:28:32 · 353 阅读 · 0 评论 -
Java安全——安全管理器、访问控制器和类装载器
安全管理器:SecurityManager安全管理器在Java语言中的作用就是检查操作是否有权限执行。是Java沙箱的基础组件。我们一般所说的打开沙箱,也是加-Djava.security.manager选项。其实日常的很多API都涉及到安全管理器,它的工作原理一般是:请求Java API Java API使用安全管理器判断许可权限 通过则顺序执行,否则抛出一个Exception。比如在之前的“理解沙箱”这一章提到的,开启沙箱后,会限制文件访问,那这个代码是如何的呢?看下源码:转载 2021-06-23 20:41:42 · 381 阅读 · 0 评论 -
spring代理类中获取实现类的方法
今天写测试,需要对某个spring注入的类中set MOCK对象,需要获得代理的对象。public static Object getTargetObject(Object proxy) throws Exception { if(!AopUtils.isAopProxy(proxy)) { //判断是否是代理类 return proxy; } return getTargetObject(getPr...转载 2021-06-10 13:57:15 · 457 阅读 · 0 评论 -
java反射全解
引言java中创建对象有几种方式?1.使用new关键字2.使用clone方法3.使用反序列化4.使用反射5.使用Unsafe关于这几种创建对象方式的详解,请看这篇文章 java创建对象的五种方式接下来主要详细介绍反射相关知识反射简介反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释。一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。Apple apple = new A转载 2021-05-20 15:45:24 · 507 阅读 · 0 评论 -
Java集合框架中,子接口为啥重复地列出父接口的抽象方法?
我们通过阅读Java集合接口的源代码:Collection, Set, List, Queue, Deque,发现它们之间会有接口继承的关系,但是我们会发现一个奇怪的问题,下面细细说来。 我们可以看到Deque接口的源码public interface Deque<E> extends Queue<E> { // 这里是Deque特有的方法,对问题的讨论不产生影响,省略 // *** Queue methods *** boolean add(E...转载 2021-03-24 20:26:40 · 138 阅读 · 0 评论 -
在 Sublime Text 里批量转换大小写
把 HTML 里所有的标签都统一改成小写把 CSS 里所有的颜色值都统一改成大写把英文中所有句首字母大写1 2 3实际上,Sublime Text 的正则表达式查找替换,就可以实现批量转换大小写的功能。像往常一样用正则表达式查找,不同的是,替换时在要转换的内容前加上 \U 和 \L,后加 \E 结束转换,即可转换整段内容为大写或小写;在要转换的内容前加上 \u 和 \l,即可...转载 2018-11-04 15:55:08 · 1263 阅读 · 0 评论 -
使用正则表达式将字符串中的小写转换成大写
源文本:id:6agent_id:6agent_name:经纪partner_id:18partner_name: blog科技有限公司在UltraEdit、Notepad++、EmEditor中使用替换,查找用:_([a-z]),替换用:\U\1\E该替换格式的作用是将下划线和其后的小写字母同一替换成对应的大写字母,如agent_id替换为 agentId ; age...转载 2018-11-04 15:11:08 · 14489 阅读 · 0 评论 -
ThreeTen Extra 时间日期处理利器
最近一些需求有对多个时间区间进行判断,例如交集之类的,而2个时间区间可以多达13种情况,实现起来特别容易绕晕,正好找到这样一个工具类可以满足需求,只需要一个方法便可计算出结果,很方便。ThreeTen 的设计里面 Instant 表示时间点,Interval 表示时间段,使用Interval即可对区间进行判断。 例如:判断是否有交集(Overlaps) Instant startA = Instant.parse("2018-08-01T00:00:00Z"); Instan转载 2020-12-09 15:36:45 · 649 阅读 · 0 评论 -
使用Joda-Time优雅的处理日期时间
简介在Java中处理日期和时间是很常见的需求,基础的工具类就是我们熟悉的Date和Calendar,然而这些工具类的api使用并不是很方便和强大,于是就诞生了Joda-Time这个专门处理日期时间的库。由于Joda-Time很优秀,在Java 8出现前的很长时间内成为Java中日期时间处理的事实标准,用来弥补JDK的不足。在Java 8中引入的java.time包是一组新的处理日期时间的API,遵守JSR 310。值得一提的是,Joda-Time的作者Stephen Colebourne和Oracl转载 2020-12-09 15:26:44 · 433 阅读 · 0 评论 -
JAVA8 日期和时间(LocalDate、LocalDateTime、ZoneId、Duration、Period、Instant)API 用法详解
文章目录 一、LocalDate、LocalTime、Instant、Duration、Period 1、LocalDate和LocalTime a、LocalDate b、LocalTime 2、合并时间和日期 3、机器日期和时间格式 4、定义Duration 和Period 二、操纵、解析和格式化日期 1、使用TemporalAdjuster 2、打印输出及解析日期 a、格式化和解析日期java8提供转载 2020-12-07 16:07:52 · 883 阅读 · 0 评论 -
java8时间类LocalDateTime
1、创建根据年、月、日、时、分、秒、纳秒等创建LocalDateTimeeg:LocalTime zero = LocalTime.of(0, 0, 0); // 00:00:00LocalTime mid = LocalTime.parse("12:00:00"); // 12:00:00LocalTime now = LocalTime.now(); // 23:11:08.006all methodLocalDateTime of(int year, Month month,转载 2020-11-18 13:33:17 · 1166 阅读 · 0 评论 -
JUC
前言:在Java中,线程部分是一个重点,本篇文章说的JUC也是关于线程的。JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。下面一起来看看它怎么使用。欢迎大家关注我的公众号 javawebkf,目前正在慢慢地将简书文章搬到公众号,以后简书和公众号文章将同步更新,且简书上的付费文章在公众号上将免费。一、volatile关键字与内存可见性1、内存可见性:先来看看下面的一段代码:public class TestVo.转载 2020-09-30 11:43:25 · 155 阅读 · 0 评论 -
Java中Unsafe类详解
java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,主要提供了以下功能:1、通过Unsafe类可以分配内存,可以释放内存;类中提供的3个本地方法allocateMemory、reallocateMemory、freeMemory分别用于分配内存,扩充内存和释放内存,与C语言中的3个方法对应。2、可以定位对象某字段的内存位置,也可以修改对象的字段值,即使它是私有的;public native long allocateMemory(long l)转载 2020-09-28 16:56:25 · 278 阅读 · 0 评论 -
Java中的Unsafe
Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存。Java中的Unsafe类为我们提供了类似C++手动管理内存的能力。Unsafe类,全限定名是sun.misc.Unsafe,从名字中我们可以看出来这个类对普通程序员来说是“危险”的,一般应用开发者不会用到这个类。Unsafe类是"final"的,不允许继承。且构造函数是private的:public final class Unsafe { private .转载 2020-09-28 16:54:13 · 297 阅读 · 0 评论 -
java中Unsafe使用讲解
前段时间因为看JUC的源码,里面有大量关于unsafe的操作,所以就来看看了.写点笔记总结下(本文基于jdk1.8):unsafe可以帮我们直接去操作硬件资源,当然了是借助java的jit来进行的,官方不推荐使用,因为不安全,例如你使用unsafe创建一个超级大的数组,但是这个数组jvm是不管理的,只能你自己操作,容易oom,也不利于资源的回收.好了,下面我们来看代码,1.获取unsafe //1.最简单的使用方式是基于反射获取Unsafe实例 Field f = Un.转载 2020-09-28 16:53:11 · 634 阅读 · 1 评论 -
Java线程池类ThreadPoolExecutor、ScheduledThreadPoolExecutor及Executors工厂类
Java中的线程池类有两个,分别是:ThreadPoolExecutor和ScheduledThreadPoolExecutor,这两个类都继承自ExecutorService。利用这两个类,可以创建各种不同的Java线程池,为了方便我们创建线程池,Java API提供了Executors工厂类来帮助我们创建各种各样的线程池。下面我们分别介绍一下这三个类。Java线程池ExecutorService继承树:一、ThreadPoolExecutorThreadPoolExecutor是Exec转载 2020-09-27 18:01:06 · 340 阅读 · 0 评论