java高频面试题-高级篇

时间:2024-03-18 18:19:09

1,TCP可靠传输除了三次握手,还有其他方式保证可靠性吗?

  1. 序列号和确认应答:TCP通过序列号和确认应答机制来确保数据包的有序传输和可靠接收。
  2. 数据校验和:TCP在每个数据包中都包含一个校验和字段,用于检测数据在传输过程中是否发生损坏或错误。
  3. 超时重传:如果发送方在一定时间内未收到确认应答,会触发超时重传机制,重新发送未确认的数据包。
  4. 流量控制:TCP通过滑动窗口机制来进行流量控制,避免发送方发送过多数据导致接收方无法处理。
  5. 拥塞控制:TCP通过拥塞窗口和拥塞避免算法来控制网络拥塞,避免数据丢失和网络性能下降。

2,说说你对JVM了解多少?

JVM是Java程序的运行环境,它负责将Java源代码编译成字节码并在不同平台上运行。JVM包括三个主要部分:类加载器(ClassLoader)、运行时数据区(Runtime Data Area)和执行引擎(Execution Engine)。类加载器负责加载类文件,运行时数据区包括方法区、堆、栈等内存区域,执行引擎负责执行字节码指令。JVM还包括垃圾回收器(Garbage Collector)用于自动管理内存,以及即时编译器(Just-In-Time Compiler)用于提高代码执行效率。我也了解一些JVM调优的方法,例如调整堆大小、选择合适的垃圾回收算法等。

3,常用的垃圾回收算法有哪些?

  1. 标记-清除算法(Mark-Sweep Algorithm):首先标记出所有活动对象,然后清除未标记的对象,释放其内存空间。
  2. 复制算法(Copying Algorithm):将内存空间划分为两个区域,一部分用于存放活动对象,另一部分用于存放非活动对象,将活动对象复制到另一部分区域,然后清空原区域。
  3. 标记-整理算法(Mark-Compact Algorithm):标记出所有活动对象后,将它们向一端移动,然后清理掉另一端的非活动对象。
  4. 分代算法(Generational Algorithm):将内存空间划分为新生代和老年代,新生代对象生命周期短,采用复制算法;老年代对象生命周期长,采用标记-整理算法。
  5. 引用计数算法(Reference Counting Algorithm):通过引用计数来判断对象是否可回收,当引用计数为0时回收对象。

4,说一下数据库索引的底层数据结构有哪些?

  1. 二叉搜索树(Binary Search Tree):包括二叉搜索树(BST)、平衡二叉树(AVL树)等,通过比较节点值大小来构建树结构,查询效率取决于树的平衡性。
  2. B树(B-Tree):是一种多路平衡查找树,通常用于磁盘存储,每个节点可以包含多个子节点,减少磁盘I/O次数,提高检索效率。
  3. B+树(B+ Tree):是B树的变种,内部节点只存储索引,叶子节点存储数据和指向下一个叶子节点的指针,适合范围查询和顺序访问。
  4. 哈希表(Hash Table):通过哈希函数将键映射到存储桶,查询效率高,适合等值查询,但不支持范围查询。
  5. 红黑树(Red-Black Tree):是一种自平衡二叉搜索树,用于实现数据库中的索引结构,保持树的高度平衡,提高检索效率。