写点什么

2021 年 Java 面试题抢先看,够全!中篇,java 基础程序

用户头像
极客good
关注
发布于: 刚刚

最明显的区别是 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面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码




包含 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。


c)使用线程池

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
2021年Java面试题抢先看,够全!中篇,java基础程序