JVM面试题
面试官: JVM是怎么解决多线程new对象分配空间的 我:JVM 通过 TLAB(线程本地分配缓冲区)+ CAS + Eden 区分配,实现多线程高效创建对象,尽量避免锁竞争。 什么是 TLAB 每一个线程都有一小块“私有内存”在 Eden 里。线程创建对象优先在自己的 TLAB 里分配123Eden 区:[ TLAB-线程1 ][ TLAB-线程2 ][ TLAB-线程3 ][ 公共区域 ] TLAB 不够了怎么办 重新申请一个 TLAB(优先) 分配到共享 Eden(用 CAS) 面试官: 你刚才说线程私有的对象会分配到栈中,什么对象是线程私有的? 我: 满足以上三个条件的就是线程私有的对象: 只在方法内部使用 没有返回 没有赋值给共享变量 逃逸分析判断对象分配 什么是逃逸分析:逃逸分析(Escape Analysis)是 JVM 在运行时分析对象是否被外部访问的一种优化手段,用来判断对象的作用范围,从而决定是否进行栈上分配、锁消除、标量替换等优化。 1234567891011对象创建 ↓是否逃逸? ↓┌───────────────┬─ ...
场景面试题
面试官:线上一个服务突然CPU飙高,你会怎么排查 我: top 命令可以查看哪个进程CPU变高 top -p 查看进程中哪个线程的导致CPU变高 类似这样:1234PID USER %CPU COMMAND12345 xxx 300% java └── 12367 98% └── 12389 97% 将线程id(tid) 转成16进制 printf “%x\n” tid jstack > dump.txt 用jstack 查看进程的dump文件jstack 是 JDK 自带的一个命令行工具,可以把 JVM 里所有线程当前在干嘛,全部打印出来。 dump 就是JVM中某个进程中的执行情况 在dump文件中查看 线程在干嘛 grep -A 20 “nid=0x303f” dump.txtcpu升高的常见原因: 死循环 🔥 锁竞争 🔥 频繁GC 🔥 IO阻塞
JAVA复习篇
复习篇
MQ面试总结
.reveal-on-hover { background-color: #ccc; color: transparent; border-radius: 4px; padding: 4px 8px; transition: color 0.3s ease; cursor: pointer; } .reveal-on-hover:hover { color: #000; } 为什么要使用MQ点击展开 MQ的核心:解耦、异步、削峰 解耦:A系统发送数据到BCD三个系统,通过接口调用发送。如果此时E系统也想要这个数据呢?C系统不想要这个数据了呢?A系统的负责人直接崩溃,因为现在A系统跟其他各种乱七八糟的系统严重耦合在了一起。A系统产生了一条比较关键的数据,很多系统都需要A系统将这个数据发送过来。如果使用MQ,A系统将这条数据发送到MQ里去,哪个系统需要数据自己就去MQ里消费,哪个系统不需要这条数据了,就取消对MQ消息的消费。这样下来,A系统就不用去考虑给谁发送数据了,不需要维护这个代码,也不用考虑别的系统是否调用成功、失败超时等情况。核心思想就是舍弃 ...
MQ重复消费问题
MQ异常消费奇葩问题
Data Lake
数据湖
XXL-JOB
小怪兽的实习日记
小怪兽的实习日记
小怪兽的实习日记
SQL日记
SQL实习日记
jenkins
了解jenkins
排序算法总结
排序算法总结
redis面试总结
redis的面试题











