面试-面对面沟通题

线上系统GC问题如何快速定位与分析
1、采集GC日志:如使用-Xloggc参数来指定GC日志的输出路径。
2、监控与分析工具:如JConsole、VisualVM等,实时监控JVM的GC情况。
3、分析GC日志:如使用GCViewer等工具,可以获得更直观的GC情况和趋势分析,通过观察GC的频率、持续时间等指标,可以初步判断是否存在问题。
4、检查JVM参数配置:如回顾JVM的参数配置,包括堆内存大小、新生代和老年代的比例、垃圾收集器的选择等。
5、代码层面分析:如MAT(Memory Analyzer Tool)来进行内存分析。
单机几十万并发的系统JVM如何优化
1、规划好:
New(年轻代)
Tenured(年老代)
永久代(Perm)
其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小。
2、垃圾回收算法
JVM98%的时间都花费在内存回收,每次回收的内存小于2%。
3、分析dump文件
通过JMX的MBean生成当前的Heap信息,大小为一个3G(整个堆的大小)的hprof文件,如果没有启动JMX可以通过Java的jmap命令来生成该文件。

解释下JVM垃圾收集底层的三色标记算法
在可达性分析中,CMS、G1、ZGC都采用三色标记算法。对于三色标记算法而言, 对象会根据是否被访问过(也就是是否在可达性分析过程中被检查过)被分为三个颜色:白色、灰色和黑色。白色:这个对象还没有被访问过,在初始阶段,所有对象都是白色,所有都枚举完仍是白色的对象将会被当做垃圾对象被清理。 灰色:这个对象已经被访问过,但是这个对象所直接引用的对象中,至少还有一个没有被访问到,表示这个对象正在枚举中。 黑色:对象和它所直接引用的所有对象都被访问过。
Mysql索引底层B+树结构与算法
mysql索引数据结构:
二叉树
红黑树
Hash表
B-Tree

Mysql事务底层实现原理
特点ACID:
原子性(Atomicity)
一致性(Consistency)
隔离型(Isolation)
持久性(Durability)

MVCC机制是如何保证事务的隔离性
MVCC (MultiVersion Concurrency Control) 叫做多版本并发控制。
InnoDB的 MVCC 是通过在每行记录的后面保存两个隐藏的列来实现的。
这两个列,一个保存了行的创建时间,一个保存了行的过期时间,当然存储的并不是实际的时间值,而是系统版本号
他的主要实现思想是通过数据多版本来做到读写分离。从而实现不加锁读进而做到读写并行.。
MVCC在mysql中的实现依赖的是undo log与read view。
undo log :undo log 中记录某行数据的多个版本的数据。
read view :用来判断当前版本数据的可见性。

超高并发下使用事务时如何避免死锁
1、尽量使用短小事务,避免大事务。
2、加FOR UPDATE/LOCK IN SHARE MODE锁时,最好降低事务隔离级别,例如用RC级别,降低死锁发生概率,也可以降低锁定粒度。
3、事务中涉及多个表,或者涉及多行记录时,每个事务的操作顺序都要保持一致。
4、通过索引优化SQL效率,降低死锁概率,避免全表扫描导致锁定所有数据。
5、程序中应有事务失败检测及自动重复提交机制。
6、高并发(秒杀)场景中,关闭innodb_deadlock_detect选项,降低死锁检测开销,提高并发效率。

你可能感兴趣的:(面试,职场和发展)