大家好!最近,我一直在分享很多Java面试问题和讨论,我的许多读者都要求将它们组合在一起,以便他们可以将它们放在同一页面中并做好准备,这篇文章就是整理的结果。
本文包含50多个Java面试题,涵盖所有重要主题,如核心Java基础知识,Java集合框架,Java多线程和并发,Java IO,JDBC,JVM内核,编码问题, 面向对象编程等。
这些问题也可以通过各种面试遇到,但这些问题绝对不是很困难,你可能已经在电话或现场面试遇到了这些问题。
这些问题也非常适合复习多线程和集合等重要主题,因为我还分享了一些有用的资源,用于进一步学习和改进,比如The Complete Java MasterClass,以填补Java技能的空白。
那么我们这里是初学者和2到5年经验丰富的Java开发人员的一些常见Java问题列表:
Java面试题与解答
1) Java如何实现平台独立性?
答案:(http://www.java67.com/2012/08/how-java-achieves-platform-independence.html)
提示:字节码和Java虚拟机
2) 什么是Java ClassLoader?
答案:(http://javarevisited.blogspot.sg/2012/12/how-classloader-works-in-java.html#axzz59AWpr6cb)
提示:加载类的字节码的JVM的一部分。你可以自己写。
3) 写一个Java程序来判断数字是偶数还是奇数?
答案:(http://javarevisited.blogspot.sg/2013/04/how-to-check-if-number-is-even-or-odd.html#axzz59AWpr6cb)
提示:你可以使用位运算符,例如按位AND &,记住,偶数在二进制格式的末尾为0,而奇数在最后为1。
4) Java ArrayList和HashSet 之间的区别 ?
答案:(http://www.java67.com/2012/07/difference-between-arraylist-hashset-in-java.html)
提示: List 和 Set 之间的所有差异都适用于这里,例如排序,重复,随机搜索等。
5) 单例模式中的双重检查是什么?
答案:(http://www.java67.com/2016/04/why-double-checked-locking-was-broken-before-java5.html)
提示:两次检查是否初始化实例,第一次没有锁,第二次有锁。
6) 如何在Java中创建线程安全的单例?
答案:(http://javarevisited.blogspot.sg/2012/12/how-to-create-thread-safe-singleton-in-java-example.html)
提示:许多方法,例如使用Enum或使用双重检查锁定模式或使用嵌套静态类。
7) 何时在Java中使用volatile变量?
答案:(http://www.java67.com/2012/08/what-is-volatile-variable-in-java-when.html)提示:当需要指示JVM一个变量可以被多个线程修改,并提示JVM不缓存其值的时候。
8) 何时在Java中使用transient变量?
答案:(http://www.java67.com/2012/08/what-is-transient-variable-in-java.html)
提示:当你想在类中创建一个不可序列化的变量,而它实现了Serializable接口时。换句话说,你可以将它用于你不想保存其值的变量。请参阅 The Complete Java MasterClass 以了解Java中的transient变量。
9) Java中transient变量和volatile变量之间的区别?
答案:(http://www.java67.com/2012/11/difference-between-transient-vs-volatile-modifier-variable-java.html)
提示:完全不同,一个用于序列化,另一个用于并发。
10) Java中Serializable和Externalizable之间的区别?
答案:(http://www.java67.com/2012/10/difference-between-serializable-vs-externalizable-interface.html)
提示:Externalizable使你可以更好地控制序列化过程。
11) 我们可以覆盖Java中的私有方法吗?
答案:(http://www.java67.com/2013/08/can-we-override-private-method-in-java-inner-class.html)
提示:不能,因为它在子类中不可见,这是在Java覆盖方法的主要要求。
12) Java Hashtable 和 HashMap之间的区别 ?
答案:(http://javarevisited.blogspot.sg/2010/10/difference-between-hashmap-and.html#axzz53B6SD769)
提示:最重要的是 Hashtable是同步的,而 HashMap 不是。与之相比,它也是传统和缓慢的HashMap。
13) Java List和 Set 之间的区别 ?
答案:(http://javarevisited.blogspot.sg/2012/04/difference-between-list-and-set-in-java.html#axzz53n9YK0Mb)
提示: List 允许重复。 Set 是无序的,不允许有重复的元素。
14)Java ArrayList 和 Vector 之间的差异
答案:(http://www.java67.com/2012/09/arraylist-vs-vector-in-java-interview.html)
提示:很多,但最重要的 ArrayList 是非同步和快速的; 而 Vector 是同步和很慢的。它也是像Hashtable一样的传统类。
15)Java Hashtable 和 ConcurrentHashMap 之间的区别 ?
答案:(http://javarevisited.blogspot.sg/2011/04/difference-between-concurrenthashmap.html#axzz4qw7RoNvw)
提示:更具可扩展性
16) ConcurrentHashMap 如何实现可扩展性?
答案:(http://javarevisited.blogspot.sg/2017/08/top-10-java-concurrenthashmap-interview.html#axzz50U9xyqbo)
提示:通过将映map分为段并且仅在写入操作期间锁定。
17)对于一个 Object 被用作HashMap 的Key, 哪两个方法你需要覆盖 ?
答案:(http://www.java67.com/2013/06/how-get-method-of-hashmap-or-hashtable-works-internally.html)
提示:equals和hashcode
18)Java中wait和sleep的区别?
答案:(http://www.java67.com/2012/08/what-are-difference-between-wait-and.html)
提示:该 wait() 方法释放锁或监视器,而sleep则不释放。
19) Java notify 和 notifyAll 之间的区别 ?
答案:(http://www.java67.com/2013/03/difference-between-wait-vs-notify-vs-notifyAll-java-thread.html)
提示: notify 通知一个正在等待该锁的随机线程,而 notifyAll 通知所有等待的线程。如果你确定只有一个线程正在等待,那么使用 notify,否则 notifyAll 更好。请参阅 Threading Essentials Mini-Course由Java Champion Heinz Kabutz提供有关线程基础知识的更多信息。
20)为什么要和equals() 一起在Java中覆盖hashcode ?
答案:(http://javarevisited.blogspot.sg/2015/01/why-override-equals-hashcode-or-tostring-java.html#axzz55oDxm8vv)
提示:要符合equals和hashcode约定,如果你将对象存储到集合类中,则需要这样做,例如 HashMap 或 ArrayList。
21)HashMap load factor是什么意思?
答案:(http://www.java67.com/2017/08/top-10-java-hashmap-interview-questions.html)
提示:触发重新调整大小的阈值 , HashMap 一般为0.75,意味着 如果HashMap 到达75%存储则调整自身大小。
22) Java ArrayList 和 LinkedList 之间的区别 ?
答案:(http://www.java67.com/2012/12/difference-between-arraylist-vs-LinkedList-java.html)
提示:与数组和链表相同,一个允许随机搜索,而另一个则不允许。在链表上更容易插入和删除,但在array上查询很容易。请参阅 Java Fundamentals:Collections Richard Warburton关于Pluralsight的课程,以了解有关Java中基本Collection数据结构的更多信息。
23) Java CountDownLatch 和 CyclicBarrier之间的区别 ?
答案:(http://www.java67.com/2012/08/difference-between-countdownlatch-and-cyclicbarrier-java.html)
提示:你可以在CyclicBarrier 打破后重复使用 ,但CountDownLatch 在计数达到零后无法重复使用 。
24)什么时候在Java中使用 Runnable vs Thread?
答案:(http://www.java67.com/2016/01/7-differences-between-extends-thread-vs-implements-Runnable-java.html)
提示:永远
25)Enum在Java中的类型安全是什么意思?
答案:(http://www.java67.com/2014/04/what-java-developer-should-know-about-Enumeration-type-in-Java.html)
提示:这意味着你不能将不同枚举类型的实例分配给Enum变量。例如,如果你有像DayOfWeek 这样的变量, 那么你不能用DayOfMonth 枚举赋值 。
26)Java中Integer的自动装箱如何实现?
答案:(http://javarevisited.blogspot.sg/2012/07/auto-boxing-and-unboxing-in-java-be.html#axzz59AWpr6cb)
提示:使用 valueOf() 方法
27) Java 中PATH 和 Classpath 之间的区别 ?
答案:(http://www.java67.com/2012/08/what-is-path-and-classpath-in-java-difference.html)
提示: PATH 由操作系统使用,而Classpath 由JVM用于定位Java二进制文件(例如JAR文件或类文件)。见Java Fundamentals: The Core Platform更多地了解 PATH, Classpath和其他Java环境变量。
28)Java中方法重载和覆盖之间的区别?
答案:(http://www.java67.com/2015/08/top-10-method-overloading-overriding-interview-questions-answers-java.html)
提示:覆盖发生在子类,而重载发生在同一个类中。此外,覆盖是运行时活动,而重载在编译时解析。
29)如何防止一个类在Java中被继承?
答案:(http://www.java67.com/2017/06/10-points-about-final-modifier-in-java.html)提示:final修饰类
30)你如何限制你class被client使用?
答案:(http://javarevisited.blogspot.sg/2016/01/why-jpa-entity-or-hibernate-persistence-should-not-be-final-in-java.html)
提示:使构造函数为private或从构造函数中抛出异常
31) Java StringBuilder 和 StringBuffer之间的区别 ?
答案:(http://www.java67.com/2016/10/5-difference-between-stringbuffer.html)
提示: StringBuilder 不同步而 StringBuffer 同步。
32)Java中多态和继承的区别?
答案:(http://www.java67.com/2014/04/difference-between-polymorphism-and-Inheritance-java-oops.html)
提示:继承允许代码重用并构建类之间的关系,这是多态所需要的,它提供动态行为。请参阅 Java Fundamentals: Object-Oriented Design
以了解有关OOP功能的更多信息。
33)我们可以覆盖Java中的静态方法吗?
答案:(http://www.java67.com/2012/08/can-we-override-static-method-in-java.html)
提示:不能,因为覆盖在运行时解析,而静态方法调用在编译时解析。
34)我们可以在Java中访问私有方法吗?
答案:(http://www.java67.com/2012/08/can-we-override-private-method-in-java.html)
提示:能,在同一个类但不在类之外
35)Java中接口和抽象类之间的区别?
答案:(http://www.java67.com/2017/08/difference-between-abstract-class-and-interface-in-java8.html)
提示:从Java 8开始,差异很模糊。但是,Java类仍然可以实现多个接口,但只能扩展一个类。
36)Java中的DOM和SAX解析器之间的区别?
答案:(http://www.java67.com/2012/09/dom-vs-sax-parser-in-java-xml-parsing.html)
提示:DOM在内存中加载整个XML文件,而SAX则没有。它是一个基于事件的解析器,可用于解析大文件,但DOM速度很快,应该是小文件的首选。
37)Java中throw和throws关键字的区别?
答案:(http://www.java67.com/2012/10/difference-between-throw-vs-throws-in.html)
提示:throws声明一个方法在出现错误时可以抛出的异常,但throw关键字实际上会引发异常。请参阅Java Fundamentals:Exception Handling以了解有关 Java中异常处理的更多信息。
38)Java中的fail-safe和fail-fast 迭代器之间的区别?
答案:(http://www.java67.com/2015/06/what-is-fail-safe-and-fail-fast-iterator-in-java.html)
提示: 当它们迭代检测到底层集合的外部更改时,fail-fast抛出 ConcurrentModificationException,fail-safe不会抛出 。
39)Java中Iterator和Enumeration之间的区别?
答案:(http://javarevisited.blogspot.sg/2010/10/what-is-difference-between-enumeration.html#axzz59AWpr6cb)
提示:Iterator还允许你在迭代时删除元素,而Enumeration不允许这样做。
40)Java中什么是 IdentityHashMap ?
答案:(http://www.java67.com/2016/09/difference-between-identityhashmap-weakhashmap-enummap-in-java.html)
提示:一个 Map,它使用 == 相等运算符来检查相等而不是 equals() 方法。
41)Java中什么是 String pool?
答案:(http://javarevisited.blogspot.sg/2016/07/difference-in-string-pool-between-java6-java7.html#axzz4pGGwsyna)
提示:一个String 字符串池 。它已经从JDK 7中的perm gen空间转移到堆。
42)在Java中一个Serializable 类可以包含一个不可序列化的字段吗?
答案:(http://javarevisited.blogspot.sg/2016/09/how-to-serialize-object-in-java-serialization-example.html)
提示:可以,但你需要将其设置为static或transient。
43)Java this和super之间的区别?
答案:(http://www.java67.com/2013/06/difference-between-this-and-super-keyword-java.html)
提示:this指的是当前实例,而super指的是超类的一个实例。
44) Java 中Comparator 和 之间的区别 Comparable?
答案:(http://www.java67.com/2013/08/difference-between-comparator-and-comparable-in-java-interface-sorting.html)
提示: Comparator 定义自定义排序,而Comparable 定义对象的自然顺序,例如String的字母顺序 。有关使用Java 进行排序的详细信息,请参阅 The Complete Java MasterClass。
45) Java java.util.Date 和 java.sql.Date 之间的区别 ?
答案:(http://javarevisited.blogspot.sg/2012/04/difference-between-javautildate-and.html)
提示:前者包含日期和时间,后来只包含日期部分。
46)为什么wait和notify方法在Java 中的Object 类中声明 ?
答案:(http://javarevisited.blogspot.sg/2012/02/why-wait-notify-and-notifyall-is.html)
提示:任何对象都可作为锁。
47)为什么Java不支持多重继承?
答案:(http://javarevisited.blogspot.sg/2011/07/why-multiple-inheritances-are-not.html)
48)Java中检查和未检查的异常之间的区别?
答案:(http://javarevisited.blogspot.sg/2011/12/checked-vs-unchecked-exception-in-java.html)
提示:如果是检查异常,则必须使用catch块处理异常,而如果是未检查,则由你决定; 编译不会提示你。
49)Java中的错误和异常之间的区别?
答案:(http://www.java67.com/2012/12/difference-between-error-vs-exception.html)
50)Java中的竞争条件和死锁之间的区别?
答案:(http://javarevisited.blogspot.sg/2012/02/what-is-race-condition-in.html#axzz59AbkWuk9)
更多资源
Java Interview Guide: 200+ Interview Questions and Answers
Spring Framework Interview Guide - 200+ Questions & Answers
Preparing For a Job Interview By John Sonmez
Java Programming Interview Exposed by Markham
Cracking the Coding Interview - 189 Questions and Answers
Data Structure and Algorithms Analysis for Job Interviews
130+ Java Interview Questions of Last 5 Years
感谢你阅读本文!如果你喜欢这些核心Java问题,请与你的朋友和同事分享。如果你有任何问题或反馈,请在下面留言。
点击英文原文链接
更多文章欢迎访问: http://www.apexyun.com
公众号:银河系1号
联系邮箱:[email protected]
(未经同意,请勿转载)