![](https://img-blog.csdnimg.cn/20191103093059288.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
Star Zheng
持续学习者
展开
-
理解什么是 JMM
理解什么是 JMM本文已收录至 GitHub https://github.com/yifanzheng/java-notesJava 虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——Java 内存模型。也就是说,Java 内存模型是 Java 虚拟机中定义的一种并发编程的底层模型机制。JMM 概念JMM(Java Memory Model)就是 Java 内存模型,是 Java 虚拟机规范中所定义的一种内存模型。因为在不同的硬件生产商和不同的操作系统下,内存的访问有一原创 2020-09-28 21:26:24 · 1217 阅读 · 0 评论 -
聊一聊 Java 中的 ThreadLocal
前言提到 ThreadLocal, Java 开发者并不陌生。在面试中,也经常被面试官提及,对 Java 开发者而言也是一个必须掌握的知识点,所以将它理解透彻是很有必要的。文章稍微有点长,不过介绍的还是比较细致。ThreadLocal 是什么ThreadLocal 是一个关于创建线程局部变量的类,主要作用是做数据隔离,保存到 ThreadLocal 中的数据只属于当前线程,该数据对其他线程而言是隔离的。也就是说,使用 ThreadLocal 保存的数据只能被当前线程访问,其他线程无法访问和修改。在多原创 2020-08-17 15:51:15 · 243 阅读 · 0 评论 -
volatile 关键字,你真的理解吗?
这里我们将引出一个概念:内存屏障指令内存屏障指令为了实现 volatile 内存语义(即内存可见性),JMM 会限制特定类型的编译器和处理器重排序。为此,JMM 针对编译器制定了 volatile 重排序规则表,如下所示:使用 volatile 修饰变量时,根据 volatile 重排序规则表,Java 编译器在生成字节码时,会在指令序列中插入内存屏障指令来禁止特定类型的处理器重排序。内...原创 2020-05-06 23:34:04 · 2355 阅读 · 8 评论 -
一文读懂 Java 集合中的快速失败(fail-fast)和安全失败(fail-safe)机制
快速失败采用快速失败机制的集合容器,使用迭代器进行遍历集合时,除了通过迭代器自身的 remove() 方法之外,对集合进行任何其他方式的结构性修改,则会抛出 ConcurrentModificationException 异常。在 java.util 包下的集合类都采用的是快速失败机制,不能在多线程下发生并发修改(迭代过程中被修改)。原理迭代器在遍历时直接访问集合的内容时,因此集合中的内容...原创 2020-04-21 16:31:20 · 560 阅读 · 0 评论 -
ElasticSearch 多字段分组求和
GET report_consumer_*/_search{ "query": { "bool": { "must": [ { "range": { "reportTimestamp": { "gte": 1586500020000, "lte": 15865...原创 2020-04-12 23:25:50 · 8263 阅读 · 0 评论 -
Guava EventBus 使用
Guava EventBus 使用EventBus 是 Google Guava 提供的消息发布-订阅类库,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现,消息通知负责人通过 EventBus 去注册/注销观察者,最后由消息通知负责人给观察者发布消息。对于事件监听和发布订阅模式,EventBus 是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。基本用法创建事件...原创 2020-01-19 16:07:59 · 3115 阅读 · 0 评论 -
Maven 基础知识
MavenMaven 介绍Maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。Maven 环境搭建Maven 下载:https://maven.apache.org/在官网下载好压缩包后解压,目录结构如下:目录介绍bin 目录包含 mvn 的运行脚本。boot 目录包含一个类加载器框架,maven 使用它加载自己...原创 2019-08-06 11:08:59 · 144 阅读 · 0 评论 -
Maven 配置 Jacoco 插件,查看代码覆盖率
1、简介Jacoco 是一个开源的覆盖率工具。Jacoco 可以嵌入到 Ant 、Maven 中,并提供了 EclEmma Eclipse 插件,也可以使用 JavaAgent 技术监控Java程序。很多第三方的工具提供了对 Jacoco 的集成,如 sonar、Jenkins 等。之所以在此引入 Jacoco 是因为在使用 Cobertura 的时候,不能完全的适配 Jdk 8 Lam...原创 2018-09-11 16:21:54 · 10516 阅读 · 2 评论 -
枚举的简单使用
1、什么是枚举?枚举就是药让某个类型的变量的取值只能为若干固定值中的一个,否则编译会报错。枚举可以让编译器在编译时就可以控制源程序赋给的非法值,使普通变量的方式在开发阶段无法实现这一目标。2、认识Java中的枚举类 Java中用enum关键字修饰枚举类,下面定义一个简单的枚举类/** * 枚举类型 */public enum Color { RED,GREEN,BLUE;}类...原创 2018-05-03 16:28:53 · 225 阅读 · 0 评论 -
Java 俄罗斯方块消行算法
/*** 消行得分*/private int plusExp() { //获取地图信息 boolean[][] gameMap = this.gameDto.getGameMap(); //初始化消行数 int lineNum=0; //扫描地图,判断是否可以消行 for(int y=0;y<gameMap.length;y++){ if(this....原创 2018-03-06 11:15:42 · 3466 阅读 · 0 评论 -
Java 图形界面之窗口居中算法
/*** 窗口工具类* @author kevin**/public class FrameUtil { /** * 设置窗口大小并居中 * @param width 窗口的宽度 * @param height 窗口的高度 * @param frame */ public static void frameCenter(int width,int height,JFrame fr...原创 2018-03-06 11:20:09 · 1028 阅读 · 0 评论 -
将一个正整数从低位到高位逐位取出
// 将一个正整数从低位到高位逐位取出public class GetUnitDigit { public static void main(String[] args) { unitDigit(1878331789); } /** * 逐位取出个位数 * * @param n */ public sta...原创 2018-03-24 15:05:49 · 4578 阅读 · 0 评论 -
寻找矩阵中的鞍点
/** * 求一个矩阵的鞍点,即在行上最小而在列上最大的点 */public class SaddlePiont { public static void main(String[] args) { int[][] arr = new int[2][2]; // 随机数生成器 Random random = new Random();...原创 2018-03-24 15:19:47 · 4381 阅读 · 0 评论 -
任意两种进制的转换
思路:先将任意进制数转换为十进制,再将十进制数转换为任意进制数一般,任意进制转换为十进制数时,“按权位展开”即可;而十进制数转换为任意进制数时,使用“除该进制取余,逆序排列”即可。任意进制数转换为十进制数D=Xn-1*Bn-1+ Xn-2*Bn-2+Xn-3*Bn-3+……. + X0*B0如:(1101)2=1*2(4-1)+1*2(3-1)+0*2(2-1)+1*2(1-1)=13packag...原创 2018-04-11 21:48:51 · 1849 阅读 · 0 评论 -
java泛型的基本使用
对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。本文参考java 泛型详解、Java中的泛型方法、 java泛型详解1. 概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化...转载 2018-04-21 08:45:44 · 6050 阅读 · 1 评论 -
求:1/1!-1/3!+1/5!-1/7!+(-1)^(n+1)/(2n-1)!的和
/** * 阶乘 * 求:1/1!-1/3!+1/5!-1/7!+(-1)^(n+1)/(2n-1)! * @author kevin * */public class Factorial { public static void main(String[] args) { //求n=9时的和 System.out.println(facSum(9)); } /** * 求解阶乘 *...原创 2018-03-18 10:43:13 · 2699 阅读 · 0 评论