100道最新Java面试题,常见面试题及答案汇总 (下)

简介: 100道最新Java面试题,常见面试题及答案汇总

Q51:如何限制一个类不被继承?


答案:使用关键字Final。


在下面的例子中,Stone类就不能被继承了。


20210128145736235.png


Q52:访问说明符的访问范围是什么?


答案:


20210128150837351.png


Q53:栈和队列之间有什么区别?


答案:栈和队列之间的主要区别在于,栈基于“后进先出(LIFO)”原则,而队列基于FIFO(先进先出)原则。


Q54:在Java中,我们如何禁止序列化变量?


答案:想要某些变量不被序列化,那么可以在声明时使用关键字transient。例如,下面的变量trans_var是一个临时变量,不能被序列化:


20210128145713357.png

Q55:我们如何使用原始数据类型作为对象?


答案:Java提倡“一切皆为对象”,引用数据类型可以实例化为对象,基本数据类型却无法变为对象,针对这一不足,JAVA中设置了包装类,例如,Integer是原始数据类型int的包装类。


Q56:编译时会遇到哪些类型的异常?


答案:程序编译时可以捕获被检查的异常,为了成功编译代码,异常会通过try…catch来处理。


Q57:请描述一下线程的不同状态。


答案:Java中的线程往往是处于下面的某一种状态


NEW:通过New关键字创建了Thread类(或其子类)的对象

RUNNABLE:这种情况指的是Thread类的对象调用了start()方法,线程处于就绪状态。

RUNNING:线程获得了CPU,处于运行状态。

DEAD:处于RUNNING状态的线程,在执行完run方法之后,就变成了DEAD状态了。

BLOCKED:这种状态指的是处于RUNNING状态的线程,出于某种原因,比如调用了sleep方法、等待用户输入等而让出当前的CPU给其他的线程。

Q58:定义了类的显式构造函数之后,还可以使用默认构造函数吗?


答案:如果没有定义显式构造函数,那么Java将提供一个默认的无参数构造函数,但是如果定义了显式构造函数之后,就不能再调用默认构造函数。


Q59:可以有两个方法,它们方法名和参数都相同,但返回值类型不同?

答案:相同的方法指的是方法名、参数以及返回类型都相同,因此返回类型不同的两个方法是可以并存的。


Q60:以下代码的输出是什么?


20210128150847213.png


答案:输出为4


Q61:在没有执行main()的情况下,成功编译了一个Java类,这一说法正确吗?


答案:正确,虽然Java编译器规定程序的入口点为staticmain,但是没有main()还是能够编译,只是不能运行。


Q62:我们可以在静态方法中调用非静态方法?


答案:非静态方法归类的对象所有,且具有对象的级别范围,所以如果想要在静态方法中调用非静态方法,首先要创建类的对象,然后使用对象引用,调用这些方法。


Q63:为了运行Java程序,必须设置两个环境变量是什么?


答案:PATH变量和CLASSPATH变量。


Q64:Java中变量没有初始化可以使用吗?


答案:Java不会给变量分配默认值,因此变量没有初始化的情况下,程序会编译失败并给出错误提示。


Q65:Java中的类可以继承多个类吗


答案:Java不支持多重继承。


Q66:Java中,构造函数可以与类名不同吗?

答案:不可以,Java的构造函数必须与类名相同,如果不同,它将被视作普通函数。


Q67:Round(3.7)和Ceil(3.7)的输出分别是什么?


答案:它们的输出都是4。Round()遵循四舍五入,Ceil()遵循向上舍入。


Q68:Java中可以使用goto来转到特定行吗?


答案:不可以,Java中没有goto关键字。


Q69:已经死亡的线程可以再次启动吗?


答案:不可以。


Q70:以下类的声明是否正确?

20210128145620543.png


答案:不正确,抽象类不能被声明为Final。


Q71:每个机器都需要JDK来运行Java程序?


答案:JDK是Java的开发工具包,不是必需的,JRE才是必需的。


Q72:Equals()和==有什么区别?


答案:Java中,==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。


equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同


下例中,equals()返回true,而==操作符则返回false:


2021012815090331.png

Q73:Java类中定义方法,可否使用其他语言代码实现,如C语言


答案:可以,在基于原生开发的情况下,我们可以在Java类中定义公共静态方法,但是不执行,然后用另外一种语言(如C)实现。


Q74:如何在Java中定义析构函数?


答案:Java类中没必要定义析构函数,它有自己的垃圾回收机制,当不再引用对象时,会自动执行。


Q75:Java中变量可以既是局部变量又是静态变量吗?


答案:不能,将局部变量定义为静态变量会导致编译错误。


Q76:Interface中可以有静态方法吗?


答案:Interface中的静态方法是没有意义的,静态方法在类中不能被覆盖,而Interface中的方法默认都是抽象的,所以只能在实现Interface的类中实现。


Q77:在实现接口的类中,我们可以更改接口中定义的变量的值吗?


答案:不能,接口中定义的变量大多都默认是public、static和final等不可更改的常量。


Q78:Java中的垃圾回收机制能够确保程序永远不会超出内存?


答案:即使Java提供自动垃圾回收,也不能确保程序不会超出内存,因为与垃圾回收相比,Java对象的创建速度更快。


Q79:main()能否有除void之外的返回类型?


答案:不可以,main()必须返回值为void,程序才能成功执行。


Q80:垃圾回收之后,还能否重新触发并使用该对象?


答案:不能,一旦对象被回收之后,就不再存在于堆栈上,也就不能再次访问和引用了。


Q81:在Java线程编程中,哪个方法是所有线程必须实现的?


答案:Run()是一个Runnable接口的方法,必须由所有线程实现。


Q82:如何在程序中控制数据库连接,且每次只有一个线程可以进行数据库连接


答案:应用同步的概念来实现,将数据库相关代码hs synchronized关键字的方法中,以便一次只有一个线程可以访问它。


Q83:程序员手动抛出异常怎么办?


答案:为了处理手动抛出的异常,我们可以使用throw关键字,并在catch中捕获和处理异常。

20210128150911813.png


Q84:如何实现一个类不允许其他类(甚至派生类)创建其对象?


答案:将该类的构造函数声明为private,那么它就不会被其他类访问。


Q85:对象如何存储在Java中?


答案:每个对象在创建时都会从堆栈中获取内存空间,被垃圾回收器销毁之后,其空间将被释放重新分配给其它对象。


Q86:如何确定堆栈上对象的实际大小?


答案:Java中,没办法确定对象的确切大小。


Q87:以下哪个类将分配更多的内存?


A类:三种方法,四个变量,无对象


B类:五个方法,三个变量,无对象


答案:在创建对象之前,不会分配内存,所以这两个类都没有分配内存。


Q88:如果程序中没有处理异常,会发生什么?


答案:如果没有异常处理,那么程序将中止,且不会执行异常抛出之后的语句。


Q89:如果定义了一个类定义了多个构造函数,那么是否可以在一个构造函数中调用另一个构造函数?


答案:如果一个类有多个构造函数,那么可以使用this()在一个构造函数中调用另一个构造函数。


Q90:什么是匿名类?


答案:匿名类是不能有名字的类,它们不能被引用,只能在创建时用New语句来声明它们。


下例中,我们定义了一个匿名类:

20210128150919231.png


Q91:数组声明之后是否还可以改变其大小?


答案:数组是静态的,一旦指定了大小,就不能改变。


Q92:应用程序中有多个类,但只有一个main()可以吗?


答案:可以,main()方法是Java应用程序的入口方法,代码总是从特定类的main方法开始。


Q93:如果我想要保留对象的数据以供以后使用,最好的做法是什么?


答案:使用序列化。


Q94:什么是局部类?


答案:如果我们在Java的特定块中定义一个新类,那么这个类就被称为局部类,它在局部范围内可用,在其定义的块之外不可用。


Q95:String和StringBuffer都表示String对象,这两个对象之间可以互相比较吗


答案:不可以。


Q96:Java提供了哪些API用于集合类的操作?


答案:Java提供了Collection API,可应用于一组对象的,Collection API支持的重要类包括ArrayList、HashMap、TreeSet和TreeMap。


Q97:Java的类型转换可以将所有其他类转换为布尔类型吗?


答案:不可以,其它原始类型不能转换为布尔类型,布尔类型也不能转换为其它原始数据类型。


Q98:方法的重写允许返回类型不同吗?


答案:方法的重写要求子类的方法的名称及参数必须和所覆盖的方法相同,返回类型可以不同但必须是所覆盖方法的子类。

20210128150925415.png


Q99:所有异常类的基类是什么?


答案:Java.Lang.throwable。


Q100:构造函数在继承中的调用顺序是什么?


答案:在继承的情况下,创建派生类的新对象时,首先调用父类的构造函数,然后调用派生类的构造函数。


以上就是整理的100道Java程序员面试问题和答案,希望同学们在学好技术的基础上,也能理解和掌握这些知识,祝大家早日拿到满意的offer!


总结了一些2020年的面试题,这份面试题的包含的模块分为19个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web异常、网络、设计模式、Spring/Spring MVC、Spring Boot/SpringCloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM 。


相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
77 2
|
27天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
67 14
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
1月前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
1月前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
36 6
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
65 4
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
134 4
|
2月前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
125 1
Java面试题之Java集合面试题 50道(带答案)
|
2月前
|
存储 Java 程序员
Java面试加分点!一文读懂HashMap底层实现与扩容机制
本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
73 5