写点什么

2021 年 Java 面试题抢先看,够全!中篇 (1),Java 视频课资源

作者:Java高工P7
  • 2021 年 11 月 09 日
  • 本文字数:2297 字

    阅读完需:约 8 分钟

这部分也包含数据结构、算法及数组的面试问题


41) List、Set、Map 和 Queue 之间的区别(答案)




List 是一个有序集合,允许元素重复。它的某些实现可以提供基于下标值的常量访


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


问时间,但是这不是 List 接口保证的。Set 是一个无序集合。


42)poll() 方法和 remove() 方法的区别?




poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回空,但是 remove() 失败的时候会抛出异常。


43)Java 中 LinkedHashMap 和 PriorityQueue 的区别是什么?(答案)




PriorityQueue 保证最高或者最低优先级的的元素总是在队列头部,但是 LinkedHashMap 维持的顺序是元素插入的顺序。当遍历一个 PriorityQueue 时,没有任何顺序保证,但是 LinkedHashMap 课保证遍历顺序是元素插入的顺序。


44)ArrayList 与 LinkedList 的不区别?(答案)


======================================================================================================


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


45)用哪两种方式来实现集合的排序?(答案)




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


46)Java 中怎么打印数组?(answer 答案)




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


需要更多大厂面试资料的话也可以点击直接进入,免费获取!暗号:CSDN


47)Java 中的 LinkedList 是单向链表还是双向链表?(答案)




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


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




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


49) Hashtable 与 HashMap 有什么不同之处?(答案)




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


50)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


51)有没有可能两个不相等的对象有有相同的 hashcode?




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


52)两个相同的对象会有不同的的 hash code 吗?




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


九、Java IO 和 NIO 的面试题




IO 是 Java 面试中一个非常重要的点。你应该很好掌握 Java IO,NIO,NIO2 以及与操作系统,磁盘 IO 相关的基础知识。下面是 Java IO 中经常问的问题。


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




54)Java 中怎么创建 ByteBuffer?




55)Java 中,怎么读写 ByteBuffer ?




56)Java 采用的是大端还是小端?




57)ByteBuffer 中的字节序是什么?




58)Java 中,直接缓冲区与非直接缓冲器有什么区别?(答案)




59)Java 中的内存映射缓存区是什么?(answer 答案)




60)socket 选项 TCP NO DELAY 是指什么?




61)TCP 协议与 UDP 协议有什么区别?(answer 答案)




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




十、Java 最佳实践的面试问题




包含 Java 中各个部分的最佳实践,如集合,字符串,IO,多线程,错误和异常处理,设计模式等等。


63)Java 中,编写多线程程序的时候你会遵循哪些最佳实践?(答案)




这是我在写 Java 并发程序的时候遵循的一些最佳实践:


a)给线程命名,这样可以帮助调试。


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


c)如果可以,更偏向于使用 volatile 而不是 synchronized。


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


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


64)说出几点 Java 中使用 Collections 的最佳实践(答案)




这是我在使用 Java 中 Collectionc 类的一些最佳实践:a)使用正确的集合类,例如,如果不需要同步列表,使用 ArrayList 而不是 Vector。b)优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。c)使用接口代表和访问集合,如使用 List 存储 ArrayList,使用 Map 存储 HashMap 等等。d)使用迭代器来循环集合。e)使用集合的时候使用泛型。


65)说出至少 5 点在 Java 中使用线程的最佳实践。(答案)




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


a)对线程命名


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

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
2021年Java面试题抢先看,够全!中篇(1),Java视频课资源