2023/2/8 面试复盘

jvm怎么判断对象是不是垃圾的?
引用计数法和可达性分析法,引用计数法存在致命缺陷,两个对象互相引用无法被回收,目前JVM使用的是可达性分析法

讲一下jvm安全点和安全区?
gc,线程,安全区域的关系:
当线程执行到 saferegion 时,会标识自己进入了saferegion,当gc时,就不用管标识自己为saferegion的线程了。
当线程要离开saferegion时,就检查系统是否已经完成了根节点枚举(或者整个gc过程),如果完成了就继续执行,如果没有,就等到可以安全离开saferegion的信号为止。
(也可以这么理解,当一个线程进入safeRegion时就不受STW的影响,safeRegion的入口就是安全点)

G1和CMS的有什么区别,JVM各垃圾收集器的区别和作用?
https://blog.csdn.net/chroje/article/details/79573010?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167613320516782425185738%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=167613320516782425185738&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-79573010-null-null.142v73pc_new_rank,201v4add_ask,239v1control&utm_term=jvm%E5%90%84%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E5%99%A8%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187

栈帧的内部结构是怎样的?
局部变量表(Local Variables)
操作数栈(operand Stack)(或表达式栈)
动态链接(DynamicLinking)(或指向运行时常量池的方法引用)
方法返回地址(Return Address)(或方法正常退出或者异常退出的定义)

redis zset跳表数据结构是怎样的?
跳表(skiplist)是在链表的基础上,增加了多级索引,通过多级索引位置的跳转,实现了快速查找元素。
时间复杂度O(logN),类似于二分查找。

mysql binlog redolog undolog分别是什么?
binlog是mysql server层面的日志用来记录写的sql语句。
redolog是innodb存储引擎的日志,innodb存储引擎采用顺序io写入/异步刷盘,
redolog记录了数据被事务修改后的值,当执行写的操作时mysql会顺序写入redolog到磁盘中,然后修改buffpool内存中的数据页,
有一个异步线程去定时持久化buffpool中的结果到磁盘中(批量随机写入),当mysql服务发生崩溃来不及将内存中数据持久化到磁盘中的时候,
重启时就会根据redolog来恢复,这样就不会出现数据丢失的情况。
undolog记录了数据被事务修改之前的值,当数据被事务多次修改就会形成版本链,版本链表可用于多版本并发控制下的读(MVCC),也叫非锁定读,
当事务发生回滚时也会根据undolog来回滚

innodb缓存池中页的大小为什么默认为16kb?
在操作系统的文件管理系统中进行一次io读写,默认读取的大小为4kb(一页)。又因为局部性原理,操作系统会将命中的页周围的三块页一同加载进innodb的缓存池中,因此innnodb缓存池中页的大小为16kb。

mysql间隙锁和临界锁有什么区别?
临界锁Next-key Lock=记录锁Record Lock+间隙锁Gap Lok

什么是脏读幻读不可重复读?
脏读:一个事务读到了另一个未提交事务修改过的数据
不可重复读:一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值
幻读:一个事务先根据某些条件查询出一些记录,之后另一个事务又向表中插入了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另一个事务插入的记录也读出来

什么是MVCC?
MVCC (Multi-Version Concurrency Control ,多版本并发控制)指的就
是在使用 READ COMMITTD 、 REPEATABLE READ 这两种隔离级别的事务在执行普通的 SEELCT 操作时访问记录的版
本链的过程,这样子可以使不同事务的 读-写 、 写-读 操作并发执行,从而提升系统性能。 READ COMMITTD 、
REPEATABLE READ 这两个隔离级别的一个很大不同就是:生成ReadView的时机不同,READ COMMITTD在每一
次进行普通SELECT操作前都会生成一个ReadView,而REPEATABLE READ只在第一次进行普通SELECT操作
前生成一个ReadView,之后的查询操作都重复使用这个ReadView就好了

b+树的时间复杂度是多少?
O(logN)

springboot怎么动态地控制创建bean?
@Containal注解

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