自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 为什么新生代有两个Survivor区

我们都知道JVM的堆内存分为新生代(Eden + from + to)和老年代例如我们可以创建个方法, 查看一下其占用的堆内存情况jps 查看所有运行的项目及方法 jmap -heap [方法id] 查看堆占用其他参数配置默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ,可以通过参数 –XX:NewRatio 配 置。 默认的,Edem : from : to = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorR...

2021-08-26 08:47:11 457 2

原创 小李同学: Java如何按多个字段分组

好的 抽出1分钟时间回答一下小李同学的问题首先我们都知道下面这个stream方法中的groupingby能分组, 但只能按一个字段进行分组设想我们可以把要分组的字段拼接起来, 转成map, 因为map的key是唯一的, 如果key重复了, 就把其value放到一起, 达到分组的效果public static void main(String[] args) { ArrayList<Student> dto = new ArrayList<&...

2021-08-23 16:47:38 1266 2

原创 Java的读锁到底有什么用 ReadWriteLock

如果有一个线程已经占用了读锁,则此时其他线程如果要申请读锁,可以申请成功。 如果有一个线程已经占用了读锁,则此时其他线程如果要申请写锁,则申请写锁的线程会一直等待释放读锁,因为读写不能同时操作。 如果有一个线程已经占用了写锁,则此时其他线程如果申请写锁或者读锁,都必须等待之前的线程释放写锁,同样也因为读写不能同时,并且两个线程不应该同时写。读读共享、其他都互斥(写写互斥、读写互斥、写读互斥)一个简单的例子public class TestReadWriteLock {...

2021-08-21 18:25:17 826

原创 JVM内存结构

JVM组成部分图解内存结构JVM内存结构主要有五大部分组成程序计数器 栈 本地方法栈 堆 方法区程序计数器作用 简单来说, 是记住下一条jvm指令的执行地址特点线程私有...

2021-08-19 15:24:37 137

原创 CommandLineRunner 与 @PostConstruct的区别 应用场景

@PostConstruct 要比实现CommandLineRunner的类加载的要早CommandLineRunner 是在项目启动完之后加载比如我们对数据初始化的时候, 用到了其他的Service如果用@PostConstruct 使用这个service可能会空指针异常, 以为@PostConstruct修饰的方法加载的早, 用到的那个service此时还未加载到spring容器中举例子改为CommandLineRunner...

2021-08-19 11:25:03 1791

原创 synchronized锁的升级过程 图解

synchronized锁有四种状态:无锁 偏向锁 轻量级锁 重量级锁 这几个状态会随着竞争状态逐渐升级,锁可以升级,但不能降级,但偏向锁状态可以被重置为无锁状态。

2021-08-18 10:05:22 363

原创 MySQL主键索引与非主键索引 索引下推

主键索引和普通索引的区别1.主键索引索引着数据,然而普通索引索引着主键ID值(这是在innodb中,但是如果是myisam中,主键索引和普通索引是没有区别的都是直接索引着数据) 2.当你查询用的是where id=x 时,那只需要扫描一遍主键索引,然后拿到相应数据,但是如果是查询的普通索引的话,那么会先扫描一次普通索引,拿到主键值,然后再去扫主键索引,拿到所需要的数据,这个过程叫做回表B+ Tree的叶子节点都可以存哪些东西?在 InnoDB 里,索引B+ Tree的叶子节点存储了整行数

2021-08-18 09:09:33 287

原创 简述在MySQL 数据库中 MyISAM 和InnoDB 的区别

MyISAM:不支持事务, 但是每次查询都是原子的; 支持表级锁, 即每次操作是对整个表加锁; 一个 MYISAM 表有三个文件: 索引文件、表结构文件、数据文件; 采用菲聚集索引, 索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致, 但是辅索引不用保证唯一性。InnoDb:支持 ACID 的事务, 支持事务的四种隔离级别; 支持行级锁及外键约束: 因此可以支持写并发; 不存储总行数 一个 InnoDb 引擎存储在一个文件空间( 共享表空间, 表大小不受操作系统控制...

2021-08-16 14:45:29 362

原创 今天聊聊什么是类加载 如何打破双亲委派机制

什么是类加载器?类加载器 就是根据指定全限定名称将class文件加载到JVM内存,转为Class对象。启动类加载器(Bootstrap ClassLoader):由C++语言实现(针对HotSpot),负责将存放在 \lib目录或-Xbootclasspath参数指定的路径中的类库加载到内存中。 其他类加载器:由Java语言实现,继承自抽象类ClassLoader。 如: 扩展类加载器(Extension ClassLoader):负责加载\lib\ext目录或 java.ext.dirs系统

2021-08-16 14:36:52 311

原创 innodb是如何实现事物的

innodb 通过buffer pool, logBuffer, Redo Log, Undo Log 来实现事务的, 以update语句举例:innodb 在收到一个update语句后, 会先根据条件找到数据所在的页, 并将该页缓存在buffer pool中 执行update语句, 修改buffer pool中的数据, 即内存中的数据 针对update语句生成一个redoLog对象, 并存入LogBuffer中 针对update语句生成undo Log日志, 用于事务回滚 如果事务提交, 那.

2021-08-16 12:36:59 786

原创 mysql 表长时间打不开 锁表解决

select * from information_schema.INNODB_TRX;kill trx_mysql_thread_id

2021-08-15 13:19:58 156

原创 线程池会自动关闭吗?什么情况下线程池自动关闭

没有引用指向且没有剩余线程的线程池将会自动关闭。看一下线程池的构造方法/** * @param corePoolSize the number of threads to keep in the pool, even * if they are idle, unless {@code allowCoreThreadTimeOut} is set * 核心线程数:即使是空闲状态也可以在线程池存活的线程数量,除非 * allowC..

2021-08-13 19:24:53 3163 2

原创 JVM常见面试题解析

什么情况下会发生栈内存溢出栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储 局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表又包含基本数据类型,对象引用 类型 如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常,方法递 归调用产生这种结果。 如果Java虚拟机栈可以动态扩展,并且扩展的动作已经尝试过,但是无法申请到足够的内存去完成 扩展,或者在新建立线程的时候没有足够的内存去创建对应的虚拟机栈,那么Java

2021-08-09 11:05:39 92

原创 手写自旋锁 CAS

CAS(CompareAndSet)顾名思义,比较进行更新,总的来说就是再更新值得时候需要判断一些原先值是否是预期值,是则更新,不是则更新失败public class SpinLock { private static AtomicReference<Thread> atomicThread = new AtomicReference<>(); public void lock() { Thread thread = Thread.cur.

2021-08-05 19:22:37 369

原创 MYSQL ACID以及事务隔离级别详情

mysql四种事务隔离级别读未提交 读已提交 可重复读 ( 默认 ) 串行化查看事务隔离级别命令 show variables like 'tx_isolation';读未提交 READ UNCOMMITTEDSET TRANSACTION ISOLATION LEVEL READ UMCOMMITED;事务A可以读取事务B未提交的事务,会出现脏读。读已提交 READ COMMITTEDSET TRANSACTION ISO...

2021-08-05 15:27:44 108

原创 Java 阻塞主线程 CountDownLatch 自定义CountDownLatch

CountDownLatch.await() 阻塞线程 .countDown() 指定的count -1;当count为0时 释放zusexiancheng public static void main(String[] args) throws InterruptedException { int threadSize = 20; final CountDownLatch downLatch = new CountDownLatch(thr...

2021-08-04 16:21:33 315

原创 java voliate 关键字

可以保证元素的可见性(每个线程看到的元素一定是最新值), 不能保证元素的原子性如下边的代码 public static long constant = 0; // public volatile static long constant = 0; public static void main(String[] args) throws InterruptedException { new Thread(() -> { ..

2021-08-01 10:39:05 237

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除