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

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

Java面试题(一)程序员

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

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

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

Java面试题(二)缓存

第四篇更新1~20题答案解析数据结构

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

v2-1ff1224b3a0ef8e322f582abdc2a0199_b.png


Java面试题(二)并发

5一、ArrayList 与 LinkedList 的不区别?app

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

5三、Java 中怎么打印数组?

5四、Java 中的 LinkedList 是单向链表仍是双向链表?

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

5六、Hashtable 与 HashMap 有什么不一样之处?

5七、Java 中的 HashSet,内部是如何工做的?

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

5九、咱们能本身写一个容器类,而后使用 for-each 循环码?

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

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

6二、两个相同的对象会有不一样的的 hash code 吗?

6三、咱们能够在 hashcode() 中使用随机数字吗?

6四、Java 中,Comparator 与 Comparable 有什么不一样?

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

6七、Java 中怎么建立 ByteBuffer?

6八、Java 中,怎么读写 ByteBuffer ?

6九、Java 采用的是大端仍是小端?

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

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

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

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

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

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

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

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

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

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

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

v2-eef64513caffb6a9bb9ec2a0e1c971f2_b.png

本篇更新21-50题的答案

5一、ArrayList 与 LinkedList 的不区别?

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

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

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

5三、Java 中怎么打印数组?

你可使用 Arrays.toString() 和 Arrays.deepToString() 方法来打印数组。因为数组没有实现 toString() 方法,因此若是将数组传递给 System.out.println()方法,将没法打印出数组的内容,可是 Arrays.toString() 能够打印每一个元素。

5四、Java 中的 LinkedList 是单向链表仍是双向链表?

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

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

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

5六、Hashtable 与 HashMap 有什么不一样之处?

这两个类有许多不一样的地方,下面列出了一部分:

a) Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增长的。

b)Hashtable 是同步的,比较慢,但 HashMap 没有同步策略,因此会更快。

c)Hashtable 不容许有个空的 key,可是 HashMap 容许出现一个 null key。

5七、Java 中的 HashSet,内部是如何工做的?

HashSet 的内部采用 HashMap 来实现。因为 Map 须要 key 和 value,因此全部 key 的都有一个默认 value。相似于 HashMap,HashSet 不容许重复的key,只容许有一个 null key,意思就是 HashSet 中只容许存储一个 null 对象。

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

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

5九、咱们能本身写一个容器类,而后使用 for-each 循环码?

能够,你能够写一个本身的容器类。若是你想使用 Java 中加强的循环来遍历,你只须要实现 Iterable 接口。若是你实现 Collection 接口,默认就具备该属性。欢迎你们关注个人公种浩【程序员追风】,2019年多家公司java面试题整理了1000多道400多页pdf文档,文章都会在里面更新,整理的资料也会放在里面。

v2-93ba9fc9c76400e7829a0936d6317872_b.png

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

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

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

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

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

6二、两个相同的对象会有不一样的的 hash code 吗?

不能,根据 hash code 的规定,这是不可能的。

6三、咱们能够在 hashcode() 中使用随机数字吗?

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

6四、Java 中,Comparator 与 Comparable 有什么不一样?

Comparable 接口用于定义对象的天然顺序,而 comparator 一般用于定义用户定制的顺序。Comparable 老是只有一个,可是能够有多个 comparator 来定义对象的顺序。

6五、为何在重写 equals 方法的时候须要重写 hashCode 方法?

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

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

这个须要看你是并行处理仍是串行处理了。

6七、Java 中怎么建立 ByteBuffer?

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

6八、Java 中,怎么读写 ByteBuffer ?

6九、Java 采用的是大端仍是小端?

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

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

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

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

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

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

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

a)给线程命名,这样能够帮助调试。

b)最小化同步的范围,而不是将整个方法同步,只对关键部分作同步。

c)若是能够,更偏向于使用 volatile 而不是 synchronized。

d)使用更高层次的并发工具,而不是使用 wait() 和 notify() 来实现线程间通讯,如 BlockingQueue,CountDownLatch 及 Semeaphore。

e)优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。

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

a)使用正确的集合类,例如,若是不须要同步列表,使用 ArrayList 而不是Vector。

b)优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。

c)使用接口表明和访问集合,如使用 List 存储 ArrayList,使用 Map 存储HashMap 等等。

d)使用迭代器来循环集合。

e)使用集合的时候使用泛型。

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

这个问题与以前的问题相似,你可使用上面的答案。对线程来讲,你应该:

a)对线程命名

b)将线程和任务分离,使用线程池执行器来执行 Runnable 或 Callable。

c)使用线程池

7九、说出 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)经过列名来获取结果集,不要使用列的下标来获取。

最后

欢迎你们一块儿交流,喜欢文章记得点个赞哟,感谢支持!

相关文章
相关标签/搜索