程序员50+Java面试题

大家好!最近,我一直在分享很多Java面试问题和讨论,我的许多读者都要求将它们组合在一起,以便他们可以将它们放在同一页面中并做好准备,这篇文章就是整理的结果。

本文包含
50多个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 ArrayListHashSet 之间的区别  ?

答案:(
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号

联系邮箱:public@space-explore.com

(未经同意,请勿转载)

原文 

http://www.apexyun.com/cheng-xu-yuan-50-javamian-shi-ti/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 程序员50+Java面试题

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址