2019年总结:Java中高级面试题228道系列(6),查漏补缺!

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 2019年总结:Java中高级面试题228道系列,快看看哪些你还不会?

2019年Java面试题中高级系列228道

Java面试题(一)

第一篇更新1~20题的答案解析

第二篇更新21~50题答案解析

第三篇更新51~95题答案解析

Java面试题(二)

第四篇更新1~20题答案解析

第五篇更新21~50题答案解析

image

Java面试题(二)

51、ArrayList 与 LinkedList 的不区别?

52、用哪两种方式来实现集合的排序?

53、Java 中怎么打印数组?

54、Java 中的 LinkedList 是单向链表还是双向链表?

55、Java 中的 TreeMap 是采用什么树实现的?(答案)

56、Hashtable 与 HashMap 有什么不同之处?

57、Java 中的 HashSet,内部是如何工作的?

58、写一段代码在遍历 ArrayList 时移除一个元素?

59、我们能自己写一个容器类,然后使用 for-each 循环码?

60、ArrayList 和 HashMap 的默认大小是多数?

61、有没有可能两个不相等的对象有有相同的 hashcode?

62、两个相同的对象会有不同的的 hash code 吗?

63、我们可以在 hashcode() 中使用随机数字吗?

64、Java 中,Comparator 与 Comparable 有什么不同?

66、在我 Java 程序中,我有三个 socket,我需要多少个线程来处理?

67、Java 中怎么创建 ByteBuffer?

68、Java 中,怎么读写 ByteBuffer ?

69、Java 采用的是大端还是小端?

70、ByteBuffer 中的字节序是什么?

71、Java 中,直接缓冲区与非直接缓冲器有什么区别?

72、Java 中的内存映射缓存区是什么?

73、socket 选项 TCP NO DELAY 是指什么?

74、TCP 协议与 UDP 协议有什么区别?

75、Java 中,ByteBuffer 与 StringBuffer 有什么区别?(答案)

76、Java 中,编写多线程程序的时候你会遵循哪些最佳实践?

77、说出几点 Java 中使用 Collections 的最佳实践

78、说出至少 5 点在 Java 中使用线程的最佳实践。

79、说出 5 条 IO 的最佳实践(答案)

80、列出 5 个应该遵循的 JDBC 最佳实践
image

本篇更新21-50题的答案

51、ArrayList 与 LinkedList 的不区别?

最明显的区别是 ArrrayList 底层的数据结构是数组,支持随机访问,而LinkedList 的底层数据结构书链表,不支持随机访问。使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。

52、用哪两种方式来实现集合的排序?

你可以使用有序集合,如 TreeSet 或 TreeMap,你也可以使用有顺序的的集合,如 list,然后通过 Collections.sort() 来排序。

53、Java 中怎么打印数组?

你可以使用 Arrays.toString() 和 Arrays.deepToString() 方法来打印数组。由于数组没有实现 toString() 方法,所以如果将数组传递给 System.out.println()方法,将无法打印出数组的内容,但是 Arrays.toString() 可以打印每个元素。

54、Java 中的 LinkedList 是单向链表还是双向链表?

是双向链表,你可以检查 JDK 的源码。在 Eclipse,你可以使用快捷键 Ctrl + T,直接在编辑器中打开该类。

55、Java 中的 TreeMap 是采用什么树实现的?

Java 中的 TreeMap 是使用红黑树实现的。

56、Hashtable 与 HashMap 有什么不同之处?

这两个类有许多不同的地方,下面列出了一部分:
a) Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增加的。
b)Hashtable 是同步的,比较慢,但 HashMap 没有同步策略,所以会更快。
c)Hashtable 不允许有个空的 key,但是 HashMap 允许出现一个 null key。

57、Java 中的 HashSet,内部是如何工作的?

HashSet 的内部采用 HashMap 来实现。由于 Map 需要 key 和 value,所以所有 key 的都有一个默认 value。类似于 HashMap,HashSet 不允许重复的key,只允许有一个 null key,意思就是 HashSet 中只允许存储一个 null 对象。

58、写一段代码在遍历 ArrayList 时移除一个元素?

该问题的关键在于面试者使用的是 ArrayList 的 remove() 还是 Iterator 的remove()方法。这有一段示例代码,是使用正确的方式来实现在遍历的过程中移除元素,而不会出现 ConcurrentModificationException 异常的示例代码。

59、我们能自己写一个容器类,然后使用 for-each 循环码?

可以,你可以写一个自己的容器类。如果你想使用 Java 中增强的循环来遍历,你只需要实现 Iterable 接口。如果你实现 Collection 接口,默认就具有该属性。

60、ArrayList 和 HashMap 的默认大小是多数?

在 Java 7 中,ArrayList 的默认大小是 10 个元素,HashMap 的默认大小是16 个元素(必须是 2 的幂)。这就是 Java 7 中 ArrayList 和 HashMap 类的代码片段:

// from ArrayList.java JDK 1.7
private static final int DEFAULT_CAPACITY = 10;
//from HashMap.java JDK 7
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
// aka 16

61、有没有可能两个不相等的对象有有相同的 hashcode?

有可能,两个不相等的对象可能会有相同的 hashcode 值,这就是为什么在hashmap 中会有冲突。相等 hashcode 值的规定只是说如果两个对象相等,必须有相同的 hashcode 值,但是没有关于不相等对象的任何规定。

62、两个相同的对象会有不同的的 hash code 吗?

不能,根据 hash code 的规定,这是不可能的。欢迎大家关注我的公种浩【程序员追风】,2019年多家公司java面试题整理了1000多道400多页pdf文档,文章都会在里面更新,整理的资料也会放在里面。

image

63、我们可以在 hashcode() 中使用随机数字吗?

不行,因为对象的 hashcode 值必须是相同的。参见答案获取更多关于 Java 中重写 hashCode() 方法的知识。

64、Java 中,Comparator 与 Comparable 有什么不同?

Comparable 接口用于定义对象的自然顺序,而 comparator 通常用于定义用户定制的顺序。Comparable 总是只有一个,但是可以有多个 comparator 来定义对象的顺序。

65、为什么在重写 equals 方法的时候需要重写 hashCode 方法?

因为有强制的规范指定需要同时重写 hashcode 与 equal 是方法,许多容器类,如 HashMap、HashSet 都依赖于 hashcode 与 equals 的规定。

66、在我 Java 程序中,我有三个 socket,我需要多少个线程来处理?

这个需要看你是并行处理还是串行处理了。

67、Java 中怎么创建 ByteBuffer?

byte[] bytes = new byte[10];
ByteBuffer buf = ByteBuffer.wrap(bytes)
;```  


68、Java 中,怎么读写 ByteBuffer ?

69、Java 采用的是大端还是小端?

70、ByteBuffer 中的字节序是什么?

71、Java 中,直接缓冲区与非直接缓冲器有什么区别?

72、Java 中的内存映射缓存区是什么?

73、socket 选项 TCP NO DELAY 是指什么?

74、TCP 协议与 UDP 协议有什么区别?

75、Java 中,ByteBuffer 与 StringBuffer 有什么区别?

# 76、Java 中,编写多线程程序的时候你会遵循哪些最佳实践?

a)给线程命名,这样可以帮助调试。
b)最小化同步的范围,而不是将整个方法同步,只对关键部分做同步。
c)如果可以,更偏向于使用 volatile 而不是 synchronized。
d)使用更高层次的并发工具,而不是使用 wait() 和 notify() 来实现线程间通信,如 BlockingQueue,CountDownLatch 及 Semeaphore。
e)优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。
77、说出几点 Java 中使用 Collections 的最佳实践
a)使用正确的集合类,例如,如果不需要同步列表,使用 ArrayList 而不是Vector。
b)优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。
c)使用接口代表和访问集合,如使用 List 存储 ArrayList,使用 Map 存储HashMap 等等。
d)使用迭代器来循环集合。
e)使用集合的时候使用泛型。

# 78、说出至少 5 点在 Java 中使用线程的最佳实践。

这个问题与之前的问题类似,你可以使用上面的答案。对线程来说,你应该:
a)对线程命名
b)将线程和任务分离,使用线程池执行器来执行 Runnable 或 Callable。
c)使用线程池

# 79、说出 5 条 IO 的最佳实践

IO 对 Java 应用的性能非常重要。理想情况下,你不应该在你应用的关键路径上避免 IO 操作。下面是一些你应该遵循的 Java IO 最佳实践:
a)使用有缓冲区的 IO 类,而不要单独读取字节或字符。
b)使用 NIO 和 NIO2
c)在 finally 块中关闭流,或者使用 try-with-resource 语句。
d)使用内存映射文件获取更快的 IO。

# 80、列出 5 个应该遵循的 JDBC 最佳实践

有很多的最佳实践,你可以根据你的喜好来例举。下面是一些更通用的原则:
a)使用批量的操作来插入和更新数据
b)使用 PreparedStatement 来避免 SQL 异常,并提高性能。
c)使用数据库连接池
d)通过列名来获取结果集,不要使用列的下标来获取。

# 最后
欢迎大家一起交流,喜欢文章记得点个赞哟,感谢支持!
相关文章
|
15天前
|
安全 架构师 Java
Java大厂面试高频:Collection 和 Collections 到底咋回答?
Java中的`Collection`和`Collections`是两个容易混淆的概念。`Collection`是集合框架的根接口,定义了集合的基本操作方法,如添加、删除等;而`Collections`是一个工具类,提供了操作集合的静态方法,如排序、查找、同步化等。简单来说,`Collection`关注数据结构,`Collections`则提供功能增强。通过小王的面试经历,我们可以更好地理解这两者的区别及其在实际开发中的应用。希望这篇文章能帮助你掌握这个经典面试题。
31 4
|
3天前
|
Java 程序员
Java社招面试中的高频考点:Callable、Future与FutureTask详解
大家好,我是小米。本文主要讲解Java多线程编程中的三个重要概念:Callable、Future和FutureTask。它们在实际开发中帮助我们更灵活、高效地处理多线程任务,尤其适合社招面试场景。通过 Callable 可以定义有返回值且可能抛出异常的任务;Future 用于获取任务结果并提供取消和检查状态的功能;FutureTask 则结合了两者的优势,既可执行任务又可获取结果。掌握这些知识不仅能提升你的编程能力,还能让你在面试中脱颖而出。文中结合实例详细介绍了这三个概念的使用方法及其区别与联系。希望对大家有所帮助!
92 60
|
2天前
|
算法 安全 Java
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
43 16
|
4天前
|
安全 Java 程序员
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
37 12
|
15天前
|
监控 Dubbo Java
Java Dubbo 面试题
Java Dubbo相关基础面试题
|
15天前
|
SQL Java 数据库连接
Java MyBatis 面试题
Java MyBatis相关基础面试题
|
15天前
|
存储 监控 算法
Java JVM 面试题
Java JVM(虚拟机)相关基础面试题
|
15天前
|
SQL 监控 druid
Java Druid 面试题
Java Druid 连接池相关基础面试题
|
15天前
|
缓存 安全 算法
Java 多线程 面试题
Java 多线程 相关基础面试题
|
1月前
|
Java
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
今日分享的主题是如何区分&和&&的区别,提高自身面试的能力。主要分为以下四部分。 1、自我面试经历 2、&amp和&amp&amp的不同之处 3、&对&&的不同用回答逻辑解释 4、彩蛋