![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
文章平均质量分 54
架构师的小跟班
这个小伙好懒,啥都没写
展开
-
synchronized能防止指令重排序吗?
疑问volatile关键字和synchronized关键字。synchronized可以保证原子性、有序性和可见性。而volatile却只能保证有序性和可见性。注意:这两个有序的意思是不一样的。那么,我们再来看一下双重校验锁实现的单例,已经使用了synchronized,为什么还需要volatile?这个volatile是否可以去掉?public class SingleInstance{ // 使用 volatile 禁止 new 对象时进行指令重排 // new 对象,有三转载 2021-03-19 20:12:28 · 2151 阅读 · 1 评论 -
快速删除空行及Java注释
在VS Code 或者 gedit 中我们可以通过Ctrl+h快捷键调出替换界面,正则表达式;去掉/**/ /\*(.|[\r\n])*?\*/去掉// //.*$去掉import import.*$去掉空行 ^\s*(?=\r?$)\n原创 2021-03-03 16:42:37 · 282 阅读 · 1 评论 -
常用正则表达式
目录基本匹配元字符英文句号字符集否定字符集重复星号加号问号花括号字符组分支结构转义特殊字符定位符插入符号美元符号简写字符集断言正向先行断言负向先行断言正向后行断言负向后行断言标记不区分大小写全局搜索多行匹配常用正则表达式1. 基本匹配正则表达式只是我们用于在文本中检索字符串的模式。例如正则表达式 cat,表示:字母 c 后面跟着一个字母 a,再后面跟着一个字母 t。"cat" => The cat sa原创 2021-03-03 16:39:07 · 2511 阅读 · 1 评论 -
ubutnu的idea输入法候选框无法跟随光标移动的问题
问题定位具体问题官方其实七年前就有了(参考),但是比较坑的是官方也一直没有解决这个问题。简单来说就是Idea的jre运行环境一个bug,导致输入法无法定位到鼠标位置。因此,我们要解决该问题必须要修改JetBrainsRuntime的运行代码。解决办法修改 JetBrainsRuntime下载已经修改好的JRE环境https://pan.baidu.com/s/1S6cEKQS9w9dKqCrlO4QJwg提取码: 21mr更改IDEA的启动环境改成自己的JRE目录修改文件:原创 2021-02-24 14:44:07 · 682 阅读 · 0 评论 -
new 一个对象时,发生了啥?
确认类元信息是否存在:当 JVM 接收到 new 指令时,首先在 metaspace 内检查需要创建的类元信息是否存在。 若不存在,那么在双亲委派模式下,使用当前类加载器以 ClassLoader + 包名+类名为 Key 进行查找对应的 class 文件。 如果没有找到文件,则抛出 ClassNotFoundException 异常 , 如果找到,则进行类加载(加载 - 验证 - 准备 - 解析 - 初始化),并生成对应的 Class 类对象。分配对象内存: 首先计算对象占用空间大小,如果实例成员变量.原创 2021-02-18 22:23:59 · 229 阅读 · 0 评论 -
什么情况下,会触发类的初始化
引用引用 《深入理解java虚拟机之jvm高级特性与最佳实践》的理解:遇到new、getstatic 和 putstatic 或 invokestatic 这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。对应场景是:使用 new 实例化对象、读取或设置一个类的静态字段(被 final 修饰、已在编译期把结果放入常量池的静态字段除外)、以及调用一个类的静态方法。对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。当初始化类的父类还没有进行过初始化,则需要先触发其父原创 2021-02-18 22:19:12 · 626 阅读 · 0 评论 -
类加载进JVM的大致过程
编译和运行一个 Java 文件从编码完成到最终执行,一般主要包括两个过程:编译,即把我们写好的 Java 文件,通过javac 命令编译成字节码,也就是我们常说的 .class文件。运行,则是把编译生成的.class文件交给 Java 虚拟机( JVM )执行。而类加载过程,即是指 JVM 虚拟机把 .class文件 中类信息加载进内存,并进行解析生成对应的 Class 对象的过程。大白话:JVM 在执行某段代码时,遇到了class A, 然而,此时内存中并没有class A的相关信息,于是转载 2021-02-18 21:36:31 · 357 阅读 · 0 评论 -
类继承链上的初始化(属性和静态代码块的执行顺序)
类的初始化顺序类的初始化:在类链接的准备阶段时,类属性会被赋予默认值;类链接阶段之后,类属性赋值和静态代码块才会被执行(类初始化)。现在探究 类继承链上的类属性赋值和静态代码块的执行顺序 ?预期了解初始化顺序,静态代码块和静态属性(按自上而下的排列顺序);如果父类没有被初始化,就会先初始化父类,初始化完父类,才会轮到自己;注:由 final 修饰的静态属性,只有使用 new 关键字赋值, 才会触发类的初始化(只是属性特例,方法没影响)// new 关键字 触发 类的初始化sta原创 2021-02-18 17:06:07 · 102 阅读 · 0 评论 -
Java 运行时数据区和内存模型(JMM)
首先说明,Java 运行时数据区域和内存模型是不一样的东西。运行时数据区域:是指 JVM 运行时将数据分区域存储,强调对内存空间的划分。内存模型:(Java Memory Model,简称 JMM )是定义了线程和主内存之间的抽象关系,即 JMM 定义了 JVM 在计算机内存(RAM)中的工作方式,如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java 运行时数据区域JDK8 之后的 JVM 内存布局JDK8 之前的 JVM 内存布局在 HotSpot JVM 中转载 2021-02-17 21:20:39 · 466 阅读 · 1 评论 -
Java 中finally和return的执行顺序
前言在 Java 的异常处理中,try、catch 和 finally 是按顺序执行的。如果 try 中没有异常,则顺序为 try→finally;如果 try 中有异常,则顺序为 try→catch→finally。但是,当 try、catch、finally 中都加入 return 之后,return 和 finally 的执行顺序是咋样的?注:finally 代码块是一定会被执行的。我总结为以下几条:执行 try 代码块或 catch 代码块中的 return 语句之前,都会先执行原创 2021-02-16 15:32:59 · 603 阅读 · 2 评论 -
JDK8 新增的日期时间类(常用)
这些新增的日期时间API都在 java.time包下LocalDate、LocalTime、LocalDateTime获取时间对象:通过静态方法:now()(获取的时间是系统当前的时间)通过静态方法:of()(方法参数可以指定时间)LocalDateTime:获取年月日时分秒等于LocalDate + LocalTime// LocalDateTime:获取年月日时分秒等于 LocalDate + LocalTime// 例如:2021-02-11T15:39:04.461Loc.转载 2021-02-11 16:05:34 · 633 阅读 · 0 评论 -
java InputStream#read的 end of stream的问题
网络流的结尾(end of stream)是什么?在java.io包中大多数read方法的 javadoc 中,可以读到the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached大致意思是:读取到缓冲区的字节总数,或 -1,如果没有更多的数据,因为已经达到流的结尾我们都知道 读取文件时,只要读取到 文件的原创 2021-02-10 18:21:58 · 2112 阅读 · 2 评论 -
双重校验锁可以实现单例模式的原因
为什么是双重校验锁实现单例模式呢?public class Singleton { // volatile关键字可以防止jvm指令重排优化 // 因为 instance = new Singleton() 这句话可以分为三步: // 1. 为 instance 分配内存空间; // 2. 初始化 instance // 3. 将 instance 指向分配的内存空间。 // 但是由于JVM具有指令重排转载 2021-02-10 15:04:41 · 559 阅读 · 1 评论 -
HTTP 和 WebSokect 的区别
https://blog.csdn.net/chenxiyuehh/article/details/99304380转载 2021-02-06 21:24:58 · 223 阅读 · 0 评论 -
编译Netty源码——缺少io.netty.util.collection包
https://www.cnblogs.com/ibigboy/p/11777066.html转载 2021-02-02 19:29:27 · 556 阅读 · 0 评论 -
vscode 配置 jdk11
vscode 官方文档配置JDK随着Java的发展,开发人员通常使用多个版本的JDK。 要正确配置您的环境和项目,您必须知道两个配置,即java.configuration.runtimes和java.home。 前者为项目的执行环境指定选项。 后者指定您的语言服务器的执行环境。注意:尽管Java语言服务器需要JDK 11或更高版本才能运行,但这不是项目运行时的要求。用于项目的JDKVS Code将检测项目所需的运行时,并从java.configuration.runtimes中选择适当的配置原创 2021-01-26 09:21:39 · 3150 阅读 · 0 评论 -
SpringAOP——JoinPoint 和 ProceedingJoinPoint
AOP 的几个概念名称解释Pointcut切点,决定处理如权限校验、日志记录等在何处切入业务代码中(即织入切面)。切点分为execution方式和annotation方式。前者可以用路径表达式指定哪些类织入切面,后者可以指定被哪些注解修饰的代码织入切面。Advice增强,包括处理时机和处理内容。处理内容就是要做什么事,比如校验权限和记录日志。处理时机就是在什么时机执行处理内容,分为前置处理(即业务代码执行前)、后置处理(业务代码执行后)等。Aspect切面,即,Poi原创 2020-12-15 23:05:28 · 1622 阅读 · 0 评论 -
spring在加@Transactional的方法中使用redis取值为空的问题
参考博客:https://blog.csdn.net/qq_34021712/article/details/79606551http://www.kaysonlv.com/%E8%AF%B4%E8%AF%B4redis-data-redis%E4%BA%8B%E5%8A%A1%E7%9A%84%E4%BD%BF%E7%94%A8.htmlhttps://my.oschina.net/u/1168037/blog/967685事务的过程分为三个步骤切换事务模式事务入队列执行事务redis转载 2020-12-12 00:00:08 · 2479 阅读 · 2 评论 -
GUI项目,导出的jar包无法显示图片
参考博客解决办法:方法1,将项目打包后的jar文件和images文件放在同一目录下即可方法2,在项目的 src 目录下新建 images包 ,将图片资源放入 images 包下加载图片方式:ImageIcon img = new ImageIcon(this.getClass().getClassLoader().getResourc("images/river.gif"));ClassLoader 是类加载器的抽象类。它可以在运行时动态的获取加载类的运行信息。可以这样说,当我们调用ja原创 2020-09-14 10:21:26 · 237 阅读 · 0 评论 -
Unity脚本在vs中没有提示的解决办法
打开unity,保证下面的功能已经打开。如果这一步之后,你的脚本有了提示,就不需要看下面了。否则,就可以下载插件visual assist下载链接:(https://www.wholetomato.com/)下载插件之后,直接点击安装就可以,安装向导会自动将插件安装到vs中。安装成功后,如下:如果vs工具栏多了一个红色西红柿的图标,同时菜单栏多了一个VASSISTX菜单项,就表示...原创 2020-01-12 19:57:34 · 5822 阅读 · 1 评论 -
Tomcat容器是如何启动,创建 和集成Spring 容器的?
一、引言手动创建一个 Spring 容器,然后调用容器的 getBean() 方法获取Spring容器中对应的Bean: public static void main(String[] args) { ApplicationContext apx = new ClassPathXmlApplicationContext("bean-factory.xml"); ...原创 2020-01-22 19:32:16 · 982 阅读 · 0 评论 -
AOP的动态代理机制
在java的动态代理机制中,有两个重要的类或接口,一个是InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。代理模式的设计思想:是通过代理的方式避免暴露被代理对象或者说代理不容易被取得的对象public class CalculatorProxy { /** * 为传入的参数对象创建一...原创 2020-01-24 15:57:45 · 703 阅读 · 0 评论 -
手动添加 JAR 包到Maven本地仓库
如果在阿里云仓库找不到需要的jar包从maven的中央仓库远程下载jar包的速度太慢可以选择手动添加jar包到maven的本地库Maven 安装 JAR 包的命令是:mvn install:install-file -Dfile=jar包的位置 -DgroupId=公司或组织域名倒序 -DartifactId=模块名 -Dversion=版本号 -Dpackaging=jarmaven中央仓库groupId、artifactId、versioin简称GAV(Maven坐标),是用来唯一标识原创 2020-06-05 20:34:41 · 128 阅读 · 0 评论 -
范型的实际类型的解析工具类
范型的实际类型的解析工具类——笔记import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.ArrayList;import java.util.List;/** * Description: * 范型工具类<br/> * 通过原创 2020-06-02 10:01:39 · 143 阅读 · 0 评论 -
Java JDBC常见问题解惑
为什么形成了Java JDK提供的JDBC数据访问接口,而数据访问类由数据库开发商提供?数据库的各个厂商所提供的API操作接口并不一致,因此,必须要编写专用于各个厂商数据库的存取程序,十分的不方便。有个统一的操作接口,无需依赖于特定的数据库API,就可以达到“写一个Java程序,适用所有的数据库”的目的。编写JDBC数据访问代码时,为什么要求Connection、Statement、ResultSet等导入的Java JDK提供的接口,而不导入具体的实现类?使用JDBC,可由厂商操作实现操作数原创 2020-05-29 11:24:18 · 221 阅读 · 0 评论