Java
文章平均质量分 53
2的32次方
这个作者很懒,什么都没留下…
展开
-
如何证明Java子类实际上是拥有父类的私有属性
如何使用代码证明Java子类实际上是拥有父类的私有属性原创 2020-06-14 10:07:24 · 1070 阅读 · 0 评论 -
Gson实战之旅
Gson实战总结,让你快速上手并使用Gson解决常见开发问题原创 2020-06-07 21:06:31 · 536 阅读 · 0 评论 -
通俗易懂的Java线程不安全
前言线程安全是很常见的问题,但是什么是线程安全呢?以下是百度百科的答案:线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。当然也有人会回答线程安全的三大特性:原子性可见性有序性而线程安全也是Java的面试题中的常客,但是我却存在以下疑问:...原创 2018-12-10 22:11:51 · 1309 阅读 · 0 评论 -
Java8日期类用法示例
获取当前日期//当前日期和时间LocalDateTime nowDateTime=LocalDateTime.now();//当前日期LocalDate nowDate=LocalDate.now();//当前时间LocalTime nowTime=LocalTime.now();获取起始和结束时间//当前日期LocalDate now=LocalDate.now();//起...原创 2018-12-04 22:31:19 · 380 阅读 · 0 评论 -
Java中的位向量——BitSet
简介BitSet是一个在java.util包下的工具类,在JDK 1.0就已经存在了。但是比起位向量,我觉得BitSet更加适合作为位图(BitMap)索引。示例前文提到过BitSet可以用来做位图索引,下面我将用一个例子向大家展示怎么使用BitSet。假设存在以下业务场景,给两批人数相同的人分配序号,请实现以下功能:找出两批人中,男性和女性的人数序号相同,且性别不同进行婚姻匹配...原创 2018-11-28 22:15:03 · 370 阅读 · 0 评论 -
关于Java中的除以零的研究
前言之前一直以为Java中如果出现被除数为0时,只会出现抛出ArithmeticException这个异常,但是有次无意中发现被除数为double时却不会抛出异常。于是就准备了一些测试用例研究一下。本人使用的JDK版本为1.8.0_162。用例整数类型被除数为byte、short、int、long时,测试用例如下所示(只展示int的代码) int a=1; int b=0; ...原创 2018-10-04 21:28:37 · 1433 阅读 · 0 评论 -
Unix时间戳和Java中的时间戳的区别
前言最近在使用阿里的日志服务时,遇到了一些Java中Timestamp的坑,所以特意做了了解并整理了一下。在这之前首先得介绍一下Unix时间戳: Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。但是Java中很多获取时间戳的API并不是获取到Unix时间戳,而是获取到从1970年1月1日(UTC/GMT的午夜)开始所经过的毫秒数。以毫秒计...原创 2018-09-12 22:59:03 · 16453 阅读 · 8 评论 -
Java实现排列组合
基本概念阶乘在介绍排列组合前首先要介绍阶乘,因为很多排列组合的运算都是要用上阶乘。阶乘的定义如下:一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。 即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n排列组合排列组合是组合学最基本的概念。所谓排列,就是指从给定个数的元素中...原创 2018-09-03 20:17:37 · 1760 阅读 · 0 评论 -
JVM的栈帧
简介栈帧是用来存储数据和部分过程结果的数据结构,同时也用来处理动态链接、方法返回值和异常分派。原创 2018-09-05 21:33:56 · 205 阅读 · 0 评论 -
JVM中的数据类型
前言JVM中的数据类型分为两类:原始类型和引用类型。既然有类型就会有对应类型的数值:原始值和引用值。原始类型JVM中的原始类型有三类:数值类型、boolean类型和returnAddress类型。数值类型数值类型就是与我们常用的基本类型,其可以分为两大类:整数类型和浮点类型。整数类型byte:值为8位有符号二进制补码整数,默认值为0。取值范围:-128~127...原创 2018-08-21 21:53:23 · 364 阅读 · 0 评论 -
common-csv中文处理的问题
前言最近又要做导出数据功能,主要是以Excel为主,不过比起以前使用的POI导出xls文件。这次我决定把导出xls改为csv,起码不会被WPS和MS Excel各种版本不兼容给坑了。 后面在技术选型上决定了使用Apache的common-csv。 不过在使用遇到各种奇葩的问题。问题复盘相关信息JDK版本:oracle jdk 1.8.0_162common-csv版本:1.5...原创 2018-08-26 22:13:25 · 6272 阅读 · 1 评论 -
Hibernate 5无外键表关联
前期准备准备搭建一个Springboot+JPA(Hibernate)作为例子pom配置 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifa...原创 2018-05-21 22:20:45 · 864 阅读 · 0 评论 -
在Mac中如何正确地设置JAVA_HOME
前期准备下载JDK安装包:在JDK1.8下载中选择Mac的JDK安装包安装JDK:这里只要按照安装指引一步一步安装即可查找JAVA_HOME打开Mac的终端,检查JDK是否安装成功:java -version查看java指令所在的目录:which java。 输出结果:/usr/bin/java显示java指令文件的属性:ls -l /usr/bin/java。 输...原创 2018-03-25 11:16:33 · 50054 阅读 · 13 评论 -
Java中的Future模式实战
简介Future模式指的是专门分配一个可以执行取消操作的线程去处理耗时的任务,且可以返回处理结果。简单来说就是可以看做是一个带有返回值且可以取消的Thread。如果要了解Future模式最好了解以下的类或接口:Callable:Callable是一个接口,它可以看做是带返回值的RunnableFuture:Future也是一个接口,它定义了对Future模式做的线程可以执行的操作。原创 2018-01-31 23:12:18 · 1060 阅读 · 0 评论 -
Java中的线程池
前言本文只会介绍一下Java中的原生线程池及相关的工具类:ThreadPoolExecutor、ScheduledThreadPoolExecutor、ExecutorsThreadPoolExecutorThreadPoolExecutor是Java原生提供的线程池执行类。ThreadPoolExecutor构造方法中的参数用途: 1. corePoolSize:线程池的核心线原创 2018-01-31 15:33:03 · 247 阅读 · 0 评论 -
Java枚举使用技巧
基本概念枚举是JDK 1.5中引入的新特性。对应的关键字为enum。其实枚举是一个特殊的类,这个类内部存储的是这个类的所有对象实例。适用的场景枚举一般适合用于有限个数的参数定义。例如已知个数的类型定义、各种状态的定义等。其实就是固定有限数量的全局变量。以支付业务作为例子,定义支付单的状态的时候,支付状态其实有固定的几个。这个时候就可以选择使用枚举了。对应实例介绍完适原创 2018-01-06 20:26:41 · 1768 阅读 · 0 评论 -
线程安全类错误使用示范
前言线程安全是Java面试中的常客,而在Java中有一些类本身是线程安全的,这些类就是线程安全类,例如ConcurrentHashMap。但是有时候错误地使用线程安全类反而会出现线程不安全的情况。例如下面的例子错误示范/** * 关于线程安全类的错误使用示范 * @author RJH * create at 2018/12/10 */public class ThreadUnsa...原创 2018-12-10 23:00:58 · 250 阅读 · 0 评论 -
Java8的Optional
简介Optional是Java 8中为了处理空指针异常而新增的类,同时这个类也提供了很多支持lambda表达式的方法。下面我会通过几个例子向大家展示如何使用Optional。实战初始化Optional提供3个方法用于初始化Optional对象:Option.empty()Optional.ofNullable()Optional.of()示例//构建一个空的Optional...原创 2018-12-17 23:04:21 · 529 阅读 · 0 评论 -
关于String的不可变的一些思考
关于Java中String不可变的思考,以及如何破坏String不可变。原创 2019-07-25 07:47:52 · 266 阅读 · 0 评论 -
通俗易懂的Java线程池原理
通俗易懂的Java线程池原理原创 2019-07-01 23:11:10 · 656 阅读 · 0 评论 -
Java中ArrayList的对象引用问题
记录一次开发期间遇到的关于Java中的ArrayList中关于对象引用的问题原创 2019-06-03 21:57:20 · 1230 阅读 · 0 评论 -
Spring事件机制源码分析
前言由于之前使用Spring事件机制出现了问题,所以特意去了解这块的源码。Spring事件机制其实就是事件发布/订阅(注意在Spring中订阅指的是监听)。PS:Spring版本为5.1.5.RELEASE源码分析初始化初始化这块关键是核心组件的注册ApplicationEventPublisher的初始化与注册,关键方法为AbstractApplicationContext的方法p...原创 2019-03-27 00:04:32 · 430 阅读 · 0 评论 -
Spring事件机制问题排查
Spring事件机制问题排查,发现Spring事件机制其实只是代码解耦,实际上并不是异步的事件发布/订阅原创 2019-03-26 22:14:32 · 7079 阅读 · 0 评论 -
多线程批量数据导入示例——基础版
前言当遇到大量数据导入时,为了提高处理的速度,可以选择使用多线程来批量处理这些处理。常见的场景有:大文件导入数据库(这个文件不一定是标准的CSV可导入文件或者需要在内存中经过一定的处理)数据同步(从第三方接口拉取数据处理后写入自己的数据库)以上的场景有一个共性,这类数据导入的场景简单来说就是将数据从一个数据源移动到另外一个数据源,而其中必定可以分为两步数据读取:从数据源读取数据到内...原创 2019-04-03 22:17:30 · 1187 阅读 · 0 评论 -
Springboot定时任务踩坑记录
Springboot 2.1.3.RELEASE 定时任务踩坑记录原创 2019-03-29 21:48:19 · 3158 阅读 · 0 评论 -
简单实用的布隆过滤器
基于Java中的BitSet的布隆过滤器原创 2019-03-25 23:40:23 · 315 阅读 · 0 评论 -
ArrayList常见问题
简介ArrayList使用Object数组存储数组元素,并使用size属性记录数组长度。需要注意ArrayList是非线程安全的。常见问题汇总ArrayList的默认初始长度是多少?最大长度是多少?ArrayList的默认初始长度是10,是由DEFAULT_CAPACITY设定的。由于ArrayList底层是用Object数组存储元素,所以ArrayList最大长度为Integer...原创 2019-03-19 22:40:02 · 333 阅读 · 0 评论 -
synchronized锁了什么
前言synchronized翻译为中文的意思是同步的,它是Java中处理线程安全问题常用的关键字。也有人称其为同步锁。既然是锁,其必然有锁的东西,下面先会简单介绍一下synchronized,再通过一个示例代码展示synchronized锁了什么。(这里先提前透露答案synchronized锁的是代码)介绍定义synchronized提供的同步机制确保了同一个时刻,被修饰的代码块或方法只会...原创 2019-03-13 22:45:00 · 364 阅读 · 0 评论 -
高效随机数算法Java实现
前言事情起源于一位网友分享了一个有趣的面试题:生成由六位数字组成的ID,要求随机数字,不排重,不可自增,且数字不重复。ID总数为几十万。初次解答我一开始想到的办法是生成一个足够大的ID池(其实就是需要多少就生成多少)对ID池中的数字进行随机排序依次消费ID池中的数字可惜这个方法十分浪费空间,且性能很差。初遇梅森旋转算法后面咨询了网友后得知了一个高效的随机数算法:梅森旋转...原创 2019-02-18 22:08:41 · 743 阅读 · 0 评论 -
HashMap剖析之内部结构
前言本文是基于Java 8的HashMap进行分析,主要是介绍HashMap中的成员变量和类变量的用途,以及分析HashMap的数据结构。变量分析在HashMap中存在多个成员变量和类变量,搞清楚它们的用途有助于我们更深入了解HashMap,下面是它们的介绍: /** * 默认的初始容量,必须为2的次幂 */ static final int DEFAUL...原创 2019-02-11 22:05:14 · 262 阅读 · 0 评论 -
HashMap剖析之put()和get()方法
前言本文是基于Java 8的HashMap进行分析,主要是分析HashMap中的put()和get()方法。下面将会分析这部分的源码,如果觉得源码分析内容太啰嗦,可以跳过源码部分,直接看源码下面的总结。put()方法源码分析HashMap的put()方法是我们最常用的方法,但是put()方法是怎么工作的呢?put()方法 /** * HashMap的put()方法支持k...原创 2019-02-15 22:00:13 · 724 阅读 · 0 评论 -
Windows下使用Java的注意事项
注意事项JDK/JRE的安装路径或者项目中使用的任何文件路径中的文件夹都不允许带有中文或者空格原因分析中文由于Java默认的字符编码是UTF-8,而国内的Windows默认的字符编码是GBK。这样在加载文件路径的时候,会出现字符乱码导致无法识别路径空格带空格的文件路径有可能会被进行特殊字符转义处理,把空格替换成%20。这样也会导致文件路径无法识别...原创 2018-12-26 11:01:08 · 335 阅读 · 0 评论 -
深入Java泛型
介绍了Java泛型的原理,并从字节码层面去解析如何实现泛型的。原创 2017-12-27 16:52:26 · 258 阅读 · 0 评论 -
如何查看第三方jar最低要求的jdk版本
如何查看第三方jar最低要求的jdk版本原创 2017-12-19 10:51:24 · 2535 阅读 · 0 评论 -
Java中的synchronized
在Java中synchronized可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。而synchronized底层是通过使用对象的监视器锁(monitor)来确保同一时刻只有一个线程执行被修饰的方法或者代码块。可以用锁和钥匙来解释,被synchronized修饰的方法或者代码块是一把锁,这把锁是归对象所有的,当一个线程需要执行这些方...原创 2017-11-22 20:56:32 · 3109 阅读 · 0 评论 -
Java编程思想笔记——第十四章 类型信息
Java编程思想笔记——第十四章 类型信息原创 2017-02-17 15:03:11 · 354 阅读 · 0 评论 -
ArrayList源码学习笔记
ArrayList源码学习笔记原创 2017-03-16 21:59:04 · 263 阅读 · 0 评论 -
关于java.text.SimpleDateFormat的parse()方法存在的坑
关于java.text.SimpleDateFormat的parse()方法存在的坑原创 2017-01-09 20:02:59 · 23168 阅读 · 3 评论 -
Java编程思想笔记——第九章 接口
Java编程思想笔记——第九章 接口原创 2017-02-15 10:06:46 · 351 阅读 · 0 评论 -
Java编程思想笔记——第十章 内部类
内部类原创 2017-02-15 10:09:12 · 301 阅读 · 0 评论