JAVA面经复习(五)

问:redis的zset底层结构,怎么证明复杂度,插入一个元素的具体过程

答:底层实现为字典+跳表,时间复杂度大致为O(logn),在跳表中插入元素时,按照一定的概率去拓展上一层。

问:java垃圾回收?

答:java垃圾回收主要包括两个方面:
一、是如何判断一个对象是否需要回收,在这块JAVA采用的是引用计数法和可达性分析法。前者是通过判断一个对象的引用数来判断是否需要回收,后者则是从GC出发判断是否存在一条可以到达该对象的引用链。
二、是要如何回收,在这方面主要有四种方法,即标记清除,标记整理,复制算法和分代回收算法,标记清除即对需要回收的数据做标记并回收;标记整理则进一步会对清除好的数据进行内存的整理,避免过多的内存碎片;复制算法则是直接复制需要保留的对象到另一块内存区域中,并将原区域直接清空。分代算法则是对上述算法的一种综合处理,其将对象分类成新生代和老年代,对老年代对象采用标记清除的算法,对新生代采用复制算法,从而更好的利用各种回收算法的优点。

问:数据库事务

答:数据库事务通常指对数据库数据的操作,其拥有ACID四大特性,即原子性,一致性,隔离性,持久性;

问:进程/线程/协程?

答:进程为计算机资源分配的最小单位,进程之中可以包含多个线程;线程是CPU调度的最小单位,线程又可以包含多个协程;协程是一种用户态的轻线程,其切换不需要涉及用户态和核心态的转换,因此相较于线程其切换更快。

参考资料:
字节跳动春招提前批后端凉经