25道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”关键字是什么意思

答:“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。

4、Java中是否可以覆盖(override)一个private或者是static的方法

5、是否可以在static环境中访问非static变量

答:static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。

6、接口和抽象类的区别是什么

答:Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:

(1)接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法;

(2)类可以实现很多个接口,但是只能继承一个抽象类;

(4)抽象类可以在不提供接口方法实现的情况下实现接口;

(6)Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public;

(7)接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。

7、创建线程有几种不同的方式说出你喜欢的其中一种的优点

答:有三种方式可以用来创建线程:继承Thread类;实现Runnable接口;应用程序可以使用Executor框架来创建线程池。

实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。

8、概括的解释下线程的几种可用状态。

答:线程在执行过程中,可以处于下面几种状态:

就绪(Runnable):线程准备运行,不一定立马就能开始执行。

运行中(Running):进程正在执行线程的代码。

等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。

睡眠中(Sleeping):线程被强制睡眠。I/O阻塞(BlockedonI/O):等待I/O操作完成。

同步阻塞(BlockedonSynchronization):等待获取锁。

死亡(Dead):线程完成了执行。

9、Java中的两种异常类型是什么他们有什么区别

10、Java中Exception和Error有什么区别

答:Exception和Error都是Throwable的子类。Exception用于用户程序可以捕获的异常情况。Error定义了不期望被用户程序捕获的异常。

11、throw和throws有什么区别

答:throw关键字用来在程序中明确的抛出异常,相反,throws语句用来表明方法不能处理的异常。每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。

12、数据库连接池是什么意思

答:像打开关闭数据库连接这种和数据库的交互可能是很费时的,尤其是当客户端数量增加的时候,会消耗大量的资源,成本是非常高的。可以在应用服务器启动的时候建立很多个数据库连接并维护在一个池中。连接请求由池中的连接提供。在连接使用完毕以后,把连接归还到池中,以用于满足将来更多的请求。

13、什么是Web应用程序

答:Web应用程序是对Web或者是应用服务器的动态扩展。有两种类型的Web应用:面向表现的和面向服务的。面向表现的Web应用程序会产生包含了很多种标记语言和动态内容的交互的web页面作为对请求的响应。而面向服务的Web应用实现了Web服务的端点(endpoint)。一般来说,一个Web应用可以看成是一组安装在服务器URL名称空间的特定子集下面的Servlet的集合。

14、什么是cookiesession和cookie有什么区别

答:cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。下面列出了session和cookie的区别:

无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用cookie,但是,session仍然是能够工作的,因为客户端无法禁用服务端的session。

在存储的数据量方面session和cookies也是不一样的。session能够存储任意的Java对象,cookie只能存储String类型的对象。

15、final,finally,finalize的区别

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

16、什么是JSP页面

答:JSP页面是一种包含了静态数据和JSP元素两种类型的文本的文本文档。静态数据可以用任何基于文本的格式来表示,比如:HTML或者XML。JSP是一种混合了静态内容和动态产生的内容的技术。这里看下JSP的例子。

17、JSP请求是如何被处理的

答:浏览器首先要请求一个以.jsp扩展名结尾的页面,发起JSP请求,然后,Web服务器读取这个请求,使用JSP编译器把JSP页面转化成一个Servlet类。需要注意的是,只有当第一次请求页面或者是JSP文件发生改变的时候JSP文件才会被编译,然后服务器调用servlet类,处理浏览器的请求。一旦请求执行结束,servlet会把响应发送给客户端。这里看下如何在JSP中获取请求参数。

18、JSP有什么优点

答:下面列出了使用JSP的优点:

(1)JSP页面是被动态编译成Servlet的,因此,开发者可以很容易的更新展现代码;

(2)JSP页面可以被预编译;

(3)JSP页面可以很容易的和静态模板结合,包括:HTML或者XML,也可以很容易的和产生动态内容的代码结合起来;

(4)开发者可以提供让页面设计者以类XML格式来访问的自定义的JSP标签库;

(5)开发者可以在组件层做逻辑上的改变,而不需要编辑单独使用了应用层逻辑的页面。

19、什么时候使用Object类

答:对于Object类的使用可以分为两个阶段:JDK1.5之前以及JDK1.5之后。Object之所以会被大量的进行参数的接收处理,很大一部分原因在于:你的程序里面需要接收的类型很多,并不固定。现在的开发理念之中强调的问题不再是这一点了,而是如何避免向下转型(如果避无可避,那么就用),因为从JDK1.5之后引入了泛型机制,现在的设计思想是用泛型来避免向下转型的操作(ClassCastException),认真读了API文档就会发现可以接收Object类型的方法是越来越少了,所以以后的开发中应该尽量以回避Object接收的项目为主。

20、什么情况下使用虚拟内存,好处是什么

答:从Java8开始取消了永久代,使用元空间来进行操作,也就是说Java可以直接使用操作系统的内存进行处理,这个时候就有可能导致每一个线程分配的真实的主机内存空间越大,如果内存不足,操作系统会进行虚拟内存的控制,对于虚拟内存不需要做特别多的处理。

当线程访问量追加,JVM就有可能不断的进行内存申请以及内存回收。

21、Hibernate是不是只能与Struts2组合才好

答:Hibernate实现的是一个数据层的开发框架,数据层是不会与MVC层产生任何直接联系,必须通过控制层与业务层来进行操作的处理后才可以使用。

最初的时候(2005)开始流行这个框架开发,使用最多的就是Struts1.X、Hibernate、Spring,而后就形成SSH的开发框架。现在的环境出现了改变,因为MyBatis出现之后会有人觉得Hibernate操作过于频繁,而MyBatis的开发更加简单。正因为如此,对于整体新项目设计而言就不会再过多的去考虑Hibernate了,基本上都是使用MyBatis开发框架。同时,在这个时期之后SpringMVC开始流行了,因为Struts毕竟需要与Spring整合,有人认为麻烦,现在对于开发就可能有如下几种结构:

Struts2.X+Hibernate+Spring;

Struts2.X+MyBatis+Spring;

SpringMVC+Hibernate;

SpringMVC+MyBatis。

22、Shiro中的Session与HttpSession的关系是什么

23、重载和重写的区别有什么

答:(1)重写必须继承,重载不用;

(2)重载表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同);

(3)重写表示子类中的方法与父类中的某个方法的名称和参数完全相同啦,通过子类实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这是面向对象编程的多态性的一种表现;

(4)重写的方法修饰符大于等于父类的方法,即访问权限只能比父类的更大,不能更小,而重载和修饰符无关。

24、Comparator与Comparable有什么区别

答:(1)Comparable&Comparator都是用来实现集合中元素的比较、排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法或在集合内实现Comparable接口的方法;

(2)Comparator位于包java.util下,而Comparable位于包java.lang下;

(3)Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String、Integer自己就可以完成比较大小操作,已经实现了Comparable接口)自定义的类要在加入list容器中后能够排序,可以实现Comparable接口,在用Collections类的sort方法排序时,如果不指定Comparator,那么就以自然顺序排序,这里的自然顺序就是实现Comparable接口设定的排序方式;

(4)而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。

(5)可以说一个是自已完成比较,一个是外部程序实现比较的差别而已。用Comparator是策略模式(strategydesignpattern),就是不改变对象自身,而用一个策略对象(strategyobject)来改变它的行为。比如:你想对整数采用绝对值大小来排序,Integer是不符合要求的,你不需要去修改Integer类(实际上你也不能这么做)去改变它的排序行为,只要使用一个实现了Comparator接口的对象来实现控制它的排序就行了。

25、说出数据连接池的工作机制是什么

学Java可以从事什么工作,职业发展无限可能!

软件培训班学费多少?让我们来一探究竟!

软件开发培训机构如何选择,去哪里学习更好?

人工智能培训机构哪个好?

学编程的学费一般是多少费用?

学Java六个月感觉啥也不会?不要担心,让我来帮助你!

0基础0学费15天面授

有基础直达就业

工作1~3年,加薪神器

工作3~5年,晋升架构

初级202925

初级203221

初级202629

初级203743

答:零基础学Java不要盲目,可以先尝试自己适不适合...查看回答

THE END
1.覆盖和重载的关系是()。覆盖和重载的关系是( )。参考答案:覆盖只能发生在父类与子类之间,而重载可以发生在同一个类中 点击查看答案进入小程序搜题你可能喜欢古代陆上丝绸之路的最初的作用是运输中国古代出产的( )等商品,后来成为东方与西方之间在经济、政治、文化等诸多方面进行交流的主要道路。 点击查看答案进入小程序搜题...https://m.ppkao.com/wangke/daan/b2b471b505344dc194aa05bac291f8c9
2.《JAVA语言程序设计》期末考试试题与答案1(应考必备题库).doc文档...是指当前对象的父类对象的内存地址 C、是指当前对象的父类 D、可以用在main()方法中 17.覆盖与重载的关系是 ( ) A、覆盖只有发生在父类与子类之间,而重载可以发生在同一个类中 B.覆盖方法可以不同名,而重载方法必须同名 C.final修饰的方法可以被覆盖,但不能被重载 D.覆盖与重载是同一回事 18.关于接口...https://max.book118.com/html/2015/0828/24163376.shtm
1.方法重载和方法覆盖的区别是什么4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用...https://m.imooc.com/wenda/detail?id=333624
2.Java中的继承关系与方法覆盖javaJava中的继承关系与方法覆盖 + 目录 什么是继承关系? 基于某个父类对象定义的加以拓展,从而产生新的子类定义,子类可以继承父类原来的某些定义,也可以增加原来父类没有的定义,或者覆写父类中的某些特性。 从面向对象的角度上来说,继承是一种从一般到特殊的关系,是一种“ is a ”的关系,即子类是父类的拓展,...https://www.jb51.net/program/318555vj2.htm
3.大厂面试为什么总会问"八股文"?整理了一套切实可行的Java面试八股文3. JDK、JRE、JVM 三者之间的关系? 4. 重载和重写的区别? 5. Java 中是否可以重写一个 private 或者 static 方法? 6. 构造方法有哪些特性? 7. 在 Java 中定义一个不做事且没有参数的构造方法有什么作用? 8. Java 中创建对象的几种方式? 9. 抽象类和接口有什么区别? https://maimai.cn/article/detail?fid=1732645561&efid=LTk7g1OKMmGUSApeb-dc8Q
4.软件开发工程师面试题目51CTO博客8、什么是方法覆盖(override)?并说明方法覆盖与方法重载(overioad)的区别。 解析:方法覆盖是一个非常重要的概念,是多态性的一个体现。方法覆盖发生再去爱继承关系中,当子类需要修改从父类继承到某个方法的方法体时,就可以声明一个父类同名同参数同返回值的方法,这样就对父类中的那个方法进行了覆盖,子类对象调用...https://blog.51cto.com/u_6176644/5299808
5.C#开发面试题程序员面试题精选100题腾讯云开发者社区2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之 间的关系。 99.Overloaded的方法是否可以改变返回值的类型? 答:Overloaded的方法是可以改变返回值的类型。 100.C#可否对内存进行直接的操作? 答:在.net下,.net引用了垃圾回收(GC)功能,它替代了程序员不过在C#中。https://cloud.tencent.com/developer/article/2121431
6.云南省晋升副县处级领导职务资格考试基本知识(仅供参考)世界的物质性意识的起源、本质和作用物质和意识的关系 (3)普遍联系和永恒发展 世界的普遍联系和永恒发展两种根本对立的发展观对立统一规律质量互变规律否定之否定规律唯物辩证法的基本范畴 (4)认识和实践 以实践为基础的能动反映论认识和实践的相互作用认识运动的总规律真理和检验真理的标准真理发展的辩证性质真理与价值...https://zswldj.1237125.cn/dl/yb/news/gsgg/d278fad5-1e10-40e8-8fca-6d3166704f3b.htm
7.重载与覆盖简述覆盖和重载的关系重载(Overloading)允许在同一类中定义同名但参数列表不同的方法,根据参数类型和数量选择执行。覆盖(Override)则是在子类中重新定义父类的同名同参数的方法,提供不同的实现。覆盖时需注意访问修饰符的限制,且方法名和参数列表必须一致。 摘要由CSDN通过智能技术生成 ...https://blog.csdn.net/jjhznb/article/details/131846082
8.计算机二级MSA、局域网的覆盖范围有限 B、误码率高 C、有较高的传输速率 D、相对于广域网易于建立、管理、维护和扩展 97、 在计算机网络系统中,WAN指的是___。 A、城域网 B、局域网 C、广域网 D、以太网 98、 下列电子邮件地址中正确的是___。 A、zhangsan&sina、com B、lisi!126、com C、...https://www.yjbys.com/edu/jisuanjidengji/57101_4.html