随笔分类 - Java
摘要:
Junit单元测试时取不到本地文件问题 问题 当使用Junit进行单元测试时,遇到了以下问题: 2022-10-24 16:13:19.902 [main] ERROR zonetop.gisboot.core.common.utils.FileReaderUtil:94 - ex=java.io.
阅读全文
Junit单元测试时取不到本地文件问题 问题 当使用Junit进行单元测试时,遇到了以下问题: 2022-10-24 16:13:19.902 [main] ERROR zonetop.gisboot.core.common.utils.FileReaderUtil:94 - ex=java.io.
阅读全文
摘要:
Map接口 1、HashMap和Hashtable的区别 线程安全方面。HashMap是非线程安全的,Hashtable是线程安全的。因为Hashtable内部方法基本都经过synchronized修饰。但是如果要保证线程安全推荐使用ConcurrentHashMap。 效率方面。因为线程安全问题H
阅读全文
Map接口 1、HashMap和Hashtable的区别 线程安全方面。HashMap是非线程安全的,Hashtable是线程安全的。因为Hashtable内部方法基本都经过synchronized修饰。但是如果要保证线程安全推荐使用ConcurrentHashMap。 效率方面。因为线程安全问题H
阅读全文
摘要:
HashMap源码解析 构造函数 // 默认构造函数。 public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted } // 包含另一个“Map”的构造函数 public HashMa
阅读全文
HashMap源码解析 构造函数 // 默认构造函数。 public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted } // 包含另一个“Map”的构造函数 public HashMa
阅读全文
摘要:
认证、授权、鉴权、权限控制 1、认证(identification) 指的是,根据声明者所特有的识别信息,确认声明者的身份。认证方式有很多,举例来说: 用户 + 密码 用户手机:二维码、短信、手势密码等 用户电子邮箱 用户的生物学特征:指纹、语音、虹膜等 身份证 等等 在安全要求高的场合,经常会使用
阅读全文
认证、授权、鉴权、权限控制 1、认证(identification) 指的是,根据声明者所特有的识别信息,确认声明者的身份。认证方式有很多,举例来说: 用户 + 密码 用户手机:二维码、短信、手势密码等 用户电子邮箱 用户的生物学特征:指纹、语音、虹膜等 身份证 等等 在安全要求高的场合,经常会使用
阅读全文
摘要:
《On Java》阅读记录之 -- 可变参数重载问题 有下面一段代码: public class OverloadingVarargs2 { static void f(float i , Character... args) { System.out.println("first"); } sta
阅读全文
《On Java》阅读记录之 -- 可变参数重载问题 有下面一段代码: public class OverloadingVarargs2 { static void f(float i , Character... args) { System.out.println("first"); } sta
阅读全文
摘要:
Java类中各元素的初始化顺序 初始化的原则是: 先初始化静态部分,再初始化动态部分;(先静再动) 先初始化父类部分,后初始化子类部分;(先父再子) 先初始化变量,次初始化代码块,再初始化构造器;(先变量,次代码块,再构造器) 所以依照这个规则可以得出总体顺序是: 父类的静态成员变量(第一次加载类时
阅读全文
Java类中各元素的初始化顺序 初始化的原则是: 先初始化静态部分,再初始化动态部分;(先静再动) 先初始化父类部分,后初始化子类部分;(先父再子) 先初始化变量,次初始化代码块,再初始化构造器;(先变量,次代码块,再构造器) 所以依照这个规则可以得出总体顺序是: 父类的静态成员变量(第一次加载类时
阅读全文
摘要:
ArrayList源码解析 1. 核心源码解读 package java.util; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.UnaryOpe
阅读全文
ArrayList源码解析 1. 核心源码解读 package java.util; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.UnaryOpe
阅读全文
摘要:
当JVM需要用到某个类的时候,虚拟机会加载它的.class文件。加载了相关的字节码信息之后,会常见对应的Class对象,这个过程就被称为类加载。
需要注意的是:类加载机制只负责`class`文件的加载,至于是否可以执行,则是由执行引擎决定的。
类的加载过程被分为五个阶段:加载、验证、准备、解析、初始化。验证、准备、解析三个阶段为连接步骤。其中加载、验证、准备、初始化这几个阶段的顺序是确定的,但是解析阶段不一定,在某些情况下可以在初始化阶段之后再开始。
阅读全文
当JVM需要用到某个类的时候,虚拟机会加载它的.class文件。加载了相关的字节码信息之后,会常见对应的Class对象,这个过程就被称为类加载。
需要注意的是:类加载机制只负责`class`文件的加载,至于是否可以执行,则是由执行引擎决定的。
类的加载过程被分为五个阶段:加载、验证、准备、解析、初始化。验证、准备、解析三个阶段为连接步骤。其中加载、验证、准备、初始化这几个阶段的顺序是确定的,但是解析阶段不一定,在某些情况下可以在初始化阶段之后再开始。
阅读全文
摘要:
spring profile 与 maven profile 多环境管理 spring profile Spring profile是Spring提供的多环境管理方案。 如下图: 每种环境都对应一个yml文件,然后再application.yml中配置需要使用的环境: spring: #环境 dev
阅读全文
spring profile 与 maven profile 多环境管理 spring profile Spring profile是Spring提供的多环境管理方案。 如下图: 每种环境都对应一个yml文件,然后再application.yml中配置需要使用的环境: spring: #环境 dev
阅读全文
摘要:
逃逸分析是目前Java虚拟机中比较前沿的优化技术,也是JIT中一个很重要的优化技术。
它其实就是分析一个对象是否会逃逸出方法,分析对象的动态作用域。如果一个对象在一个方法内定义,并且有可能被方法外部引用使用,那认为它逃逸了。
阅读全文
逃逸分析是目前Java虚拟机中比较前沿的优化技术,也是JIT中一个很重要的优化技术。
它其实就是分析一个对象是否会逃逸出方法,分析对象的动态作用域。如果一个对象在一个方法内定义,并且有可能被方法外部引用使用,那认为它逃逸了。
阅读全文
摘要:
HashMap与ConcurrentHashMap的一些总结 HashMap底层数据结构 JDK7:数组+链表 JDK8:数组+链表+红黑树 JDK8中的HashMap什么时候将链表转为红黑树? 当发现链表中的元素大于8之后,判断当前数组长度,如果数组长度小于64并不会马上转为红黑树,而是进行扩容。
阅读全文
HashMap与ConcurrentHashMap的一些总结 HashMap底层数据结构 JDK7:数组+链表 JDK8:数组+链表+红黑树 JDK8中的HashMap什么时候将链表转为红黑树? 当发现链表中的元素大于8之后,判断当前数组长度,如果数组长度小于64并不会马上转为红黑树,而是进行扩容。
阅读全文
摘要:
AQS以及其相关同步器的源码解析 概念 AQS(AbstractQueuedSynchronizer)抽象的队列同步器。是用来构建锁或者其他同步器组件的重量级基础框架以及整个JUC体系的基石。通过内置的 FIFO 队列(先入先出队列)来完成资源获取线程的排队工作,将每条要去抢占资源的线程封装成一个
阅读全文
AQS以及其相关同步器的源码解析 概念 AQS(AbstractQueuedSynchronizer)抽象的队列同步器。是用来构建锁或者其他同步器组件的重量级基础框架以及整个JUC体系的基石。通过内置的 FIFO 队列(先入先出队列)来完成资源获取线程的排队工作,将每条要去抢占资源的线程封装成一个
阅读全文
摘要:
final final 可以修饰变量、方法和类,表示所修饰的内容一旦赋值之后就不会再被改变。例如String类就是一个final类型的类。 1.具体使用场景 1.1 变量 1.1.1 成员变量 每个类中的成员变量可以分为类变量(static修饰的变量)以及实例变量。针对这两种类型的变量赋初值的时机是
阅读全文
final final 可以修饰变量、方法和类,表示所修饰的内容一旦赋值之后就不会再被改变。例如String类就是一个final类型的类。 1.具体使用场景 1.1 变量 1.1.1 成员变量 每个类中的成员变量可以分为类变量(static修饰的变量)以及实例变量。针对这两种类型的变量赋初值的时机是
阅读全文
摘要:
CPU缓存一致性协议 CPU高速缓存 CPU缓存是位于cpu和内存之间的临时数据交换器,它的容量比内存小的夺但是交换速度要比内存快得多,主要是为了解决cpu运行时的处理速度与内存读写速度不匹配的问题。 cpu在执行指令时需要从内存中获取所需要的指令和数据,但是cpu的处理速度远大于内存的读写速度,所
阅读全文
CPU缓存一致性协议 CPU高速缓存 CPU缓存是位于cpu和内存之间的临时数据交换器,它的容量比内存小的夺但是交换速度要比内存快得多,主要是为了解决cpu运行时的处理速度与内存读写速度不匹配的问题。 cpu在执行指令时需要从内存中获取所需要的指令和数据,但是cpu的处理速度远大于内存的读写速度,所
阅读全文
摘要:
Java内存分配 程序计数器 程序计数器是一块较小的内存区域,作用可以看做是当前线程执行的字节码的位置指示器。分支、循环、跳转、异常处理和线程恢复等基础功能都需要依赖这个计算器来完成。 虚拟机栈 虚拟机栈也叫栈内存,是在线程创建时创建,它的生命期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说
阅读全文
Java内存分配 程序计数器 程序计数器是一块较小的内存区域,作用可以看做是当前线程执行的字节码的位置指示器。分支、循环、跳转、异常处理和线程恢复等基础功能都需要依赖这个计算器来完成。 虚拟机栈 虚拟机栈也叫栈内存,是在线程创建时创建,它的生命期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说
阅读全文

浙公网安备 33010602011771号