Java 中级工程师试题集(含答案):集合框架、JDK 新特性高频考点

作为Java中级工程师,掌握集合框架和JDK新特性是核心技能。这些知识点在面试和实际开发中高频出现,能帮助您高效处理数据结构和现代化编码。本文基于原创设计,提供一套试题集,包含常见考点和详细解答。所有内容聚焦Java核心,避免无关技术干扰。

第一部分:集合框架高频试题

集合框架是Java中处理数据集合的基石,涉及List、Set、Map等接口。以下是高频考点试题及答案。

  1. 问题:ArrayList和LinkedList的主要区别是什么?在什么场景下优先使用ArrayList?
    答案:
    ArrayList基于动态数组实现,支持快速随机访问,get和set操作的时间复杂度为$O(1)$;LinkedList基于双向链表,插入和删除操作高效,时间复杂度为$O(1)$,但随机访问较慢,为$O(n)$。
    优先使用ArrayList的场景包括:频繁查询元素(如索引访问)、内存占用敏感的应用。例如,在数据缓存系统中,ArrayList能更快读取数据。
    关键点: ArrayList的扩容机制涉及数组复制,平均时间复杂度为$O(1)$,但最坏情况为$O(n)$。

  2. 问题:HashMap如何解决哈希冲突?JDK 8中对此做了哪些优化?
    答案:
    HashMap使用链地址法解决冲突:当多个键映射到同一桶(bucket)时,通过链表存储元素。JDK 8引入了红黑树优化:当链表长度超过阈值(默认为8),链表转换为红黑树,将查找时间复杂度从$O(n)$降为$O(\log n)$;当元素减少到6时,转回链表。
    示例: 插入元素时,计算键的哈希值(hashCode()),定位桶位置。如果冲突,遍历链表或树添加节点。优化后,性能提升显著,尤其在高并发场景。

  3. 问题:ConcurrentHashMap如何保证线程安全?与Hashtable相比有哪些优势?
    答案:
    ConcurrentHashMap采用分段锁(JDK 7)或CAS+synchronized(JDK 8),允许多线程并发读写。例如,在JDK 8中,每个桶使用独立锁,减少锁竞争。而Hashtable使用全局锁,所有操作同步,性能较低。
    优势:

    • 高并发下吞吐量更好,时间复杂度接近$O(1)$。
    • 避免死锁风险,适合分布式缓存等场景。
      公式参考: 并发性能可建模为$T = n \times t_{\text{lock}}$,其中$n$是线程数,$t_{\text{lock}}$是锁等待时间;ConcurrentHashMap的$t_{\text{lock}}$更小。
第二部分:JDK新特性高频试题

JDK新特性(尤其Java 8)引入了函数式编程和现代化API。以下是高频考点试题及答案。

  1. 问题:Lambda表达式的作用是什么?举例说明其在集合遍历中的应用。
    答案:
    Lambda表达式简化匿名内部类,支持函数式接口(如Runnable、Comparator)。它使代码更简洁,提升可读性。
    应用示例:

    List<String> list = Arrays.asList("Java", "Python", "C++");
    list.forEach(s -> System.out.println(s)); // 使用Lambda遍历
    

    这里,forEach方法接受Consumer接口,Lambda s -> System.out.println(s)替代了传统迭代器。优势包括减少样板代码,时间复杂度不变($O(n)$)。

  2. 问题:Stream API的核心操作有哪些?如何用其过滤并转换集合数据?
    答案:
    Stream API提供链式操作:filter(过滤)、map(转换)、reduce(聚合)等。它支持惰性求值,提升性能。
    示例代码:

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
    List<Integer> squares = numbers.stream()
                                  .filter(n -> n % 2 == 0) // 过滤偶数
                                  .map(n -> n * n)         // 计算平方
                                  .collect(Collectors.toList()); // 收集结果
    

    解析: filter时间复杂度为$O(n)$,map为$O(n)$,整体保持线性。适用于大数据处理,如日志分析。

  3. 问题:Optional类解决了什么问题?演示其避免NullPointerException的用法。
    答案:
    Optional包装可能为null的对象,强制显式处理空值,减少NullPointerException风险。
    用法示例:

    Optional<String> name = Optional.ofNullable(getName()); // getName()可能返回null
    String result = name.orElse("Default"); // 如果空,返回"Default"
    

    关键点: 使用orElseorElseGetifPresent方法安全操作。时间复杂度为$O(1)$,避免深层嵌套检查。

结语

本试题集覆盖了集合框架和JDK新特性的核心考点,如ArrayList与LinkedList的对比、HashMap冲突处理、Lambda表达式和Stream API应用。这些知识点在面试中高频出现,建议通过实际编码练习巩固。掌握它们,能提升您的Java开发能力,应对复杂项目挑战。继续深入学习官方文档,以保持技术前沿。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐