115道Java经典面试题(面中率最高、最全)
Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点:
代码开发模块化,更易维护和修改。
代码复用。
增强代码的可靠性和灵活性。
增加代码的可理解性。
面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象。下面的章节我们会逐个分析这些特性。
封装
封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在Java当中,有3种修饰符:public,private和protected。每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。在此我向大家推荐一个架构学习交流圈。交流学习伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
下面列出了使用封装的一些好处:
通过隐藏对象的属性来保护对象内部的状态。
提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。
禁止对象之间的不良交互提高模块化。
参考这个文档获取更多关于封装的细节和示例。
多态
多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面。
继承
继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。
抽象
抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。Java支持创建只暴漏接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。
抽象和封装的不同点
抽象和封装是互补的概念。一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。一般是通过隐藏对象内部状态信息做到封装,因此,封装可以看成是用来提供抽象的一种策略。
常见的Java问题
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
2.JDK和JRE的区别是什么?
Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。
3.”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。
4.是否可以在static环境中访问非static变量?
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
5.Java支持的数据类型有哪些?什么是自动拆装箱?
Java语言支持的8中基本数据类型是:
byte
short
int
long
float
double
boolean
char
自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成double,等等。反之就是自动拆箱。
6.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。
7.Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。
Java中构造函数重载和方法重载很相似。可以为一个类创建多个构造函数。每一个构造函数必须有它自己唯一的参数列表。
Java不支持像C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java不会创建默认的复制构造函数。
8.Java支持多继承么?
不支持,Java不支持多继承。每个类都只能继承一个类,但是可以实现多个接口。在此我向大家推荐一个架构学习交流圈。交流学习伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
9.接口和抽象类的区别是什么?
10.什么是值传递和引用传递?
11.进程和线程的区别是什么?
12.创建线程有几种不同的方式?你喜欢哪一种?为什么?
13.概括的解释下线程的几种可用状态。
14.同步方法和同步代码块的区别是什么?
15.在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
16.什么是死锁(deadlock)?
17.如何确保N个线程可以访问N个资源同时又不导致死锁?
18.Java集合类框架的基本接口有哪些?
19.为什么集合类没有实现Cloneable和Serializable接口?
20.什么是迭代器(Iterator)?
21.Iterator和ListIterator的区别是什么?
22.快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
23.Java中的HashMap的工作原理是什么?
24.hashCode()和equals()方法的重要性体现在什么地方?
25.HashMap和Hashtable有什么区别?
26.数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
27.ArrayList和LinkedList有什么区别?
28.Comparable和Comparator接口是干什么的?列出它们的区别。
29.什么是Java优先级队列(Priority Queue)?
30.你了解大O符号(big-O notation)么?你能给出不同数据结构的例子么?
31.如何权衡是使用无序的数组还是有序的数组?
32.Java集合类框架的最佳实践有哪些?
33.Enumeration接口和Iterator接口的区别有哪些?
34.HashSet和TreeSet有什么区别?
35.Java中垃圾回收有什么目的?什么时候进行垃圾回收?
36.System.gc()和Runtime.gc()会做什么事情?
37.finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?
39.Java堆的结构是什么样子的?什么是堆中的永久代(Perm Gen space)?
40.串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
41.在Java中,对象什么时候可以被垃圾回收?
42.JVM的永久代中会发生垃圾回收么?
43.Java中的两种异常类型是什么?他们有什么区别?
44.Java中Exception和Error有什么区别?
45.throw和throws有什么区别?
45.异常处理的时候,finally代码块的重要性是什么?(译者注:作者标题的序号弄错了)
46.异常处理完成以后,Exception对象会发生什么变化?
47.finally代码块和finalize()方法有什么区别?
48.什么是Applet?
49.解释一下Applet的生命周期
50.当applet被载入的时候会发生什么?
51.Applet和普通的Java应用程序有什么区别?
52.Java applet有哪些限制条件?
53.什么是不受信任的applet?
54.从网络上加载的applet和从本地文件系统加载的applet有什么区别?
55.applet类加载器是什么?它会做哪些工作?
56.applet安全管理器是什么?它会做哪些工作?
57.弹出式选择菜单(Choice)和列表(List)有什么区别
58.什么是布局管理器?
59.滚动条(Scrollbar)和滚动面板(JScrollPane)有什么区别?
60.哪些Swing的方法是线程安全的?
61.说出三种支持重绘(painting)的组件。
62.什么是裁剪(clipping)?
63.MenuItem和CheckboxMenuItem的区别是什么?
64.边缘布局(BorderLayout)里面的元素是如何布局的?
65.网格包布局(GridBagLayout)里面的元素是如何布局的?
66.Window和Frame有什么区别?
67.裁剪(clipping)和重绘(repainting)有什么联系?
68.事件监听器接口(event-listener interface)和事件适配器(event-adapter)有什么关系?
69.GUI组件如何来处理它自己的事件?
70.Java的布局管理器比传统的窗口系统有哪些优势?
71.Java的Swing组件使用了哪种设计模式?
72.什么是JDBC?
73.解释下驱动(Driver)在JDBC中的角色。
74.Class.forName()方法有什么作用?
75.PreparedStatement比Statement有什么优势?
76.什么时候使用CallableStatement?用来准备CallableStatement的方法是什么?
77.数据库连接池是什么意思?
78.什么是RMI?
79.RMI体系结构的基本原则是什么?
80.RMI体系结构分哪几层?
81.RMI中的远程接口(Remote Interface)扮演了什么样的角色?
82.java.rmi.Naming类扮演了什么样的角色?
83.RMI的绑定(Binding)是什么意思?
84.Naming类的bind()和rebind()方法有什么区别?在此我向大家推荐一个架构学习交流圈。交流学习伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
85.让RMI程序能正确运行有哪些步骤?
86.RMI的stub扮演了什么样的角色?
87.什么是分布式垃圾回收(DGC)?它是如何工作的?
88.RMI中使用RMI安全管理器(RMISecurityManager)的目的是什么?
89.解释下Marshalling和demarshalling。
90.解释下Serialization和Deserialization。
91.什么是Servlet?
92.说一下Servlet的体系结构。
93.Applet和Servlet有什么区别??
94.GenericServlet和HttpServlet有什么区别?
95.解释下Servlet的生命周期。
96.doGet()方法和doPost()方法有什么区别?
97.什么是Web应用程序?
98.什么是服务端包含(Server Side Include)?
99.什么是Servlet链(Servlet Chaining)?
100.如何知道是哪一个客户端的机器正在请求你的Servlet?
101.HTTP响应的结构是怎么样的?
102.什么是cookie?session和cookie有什么区别?
103.浏览器和Servlet通信使用的是什么协议?
104.什么是HTTP隧道?
105.sendRedirect()和forward()方法有什么区别?
106.什么是URL编码和URL解码?
107.什么是JSP页面?
108.JSP请求是如何被处理的?
109.JSP有什么优点?
110.什么是JSP指令(Directive)?JSP中有哪些不同类型的指令?
111.什么是JSP动作(JSP action)?
112.什么是Scriptlets?
113.声明(Decalaration)在哪里?
114.什么是表达式(Expression)?
115.隐含对象是什么意思?有哪些隐含对象?
真的很抱歉,由于题目太多,十几页的文档无法放下,如果真的有需要还请移驾公众号(Java进阶营)在后台对话框回复:Java面试题