2025年java基础测试

java基础测试史上最全 Java 面试题合集 400 道 面试 20k 程序员必备 1 final 关键字的作用 被 final 修饰的类不可以被继承 被 final 修饰的方法不可以被重写 被 final 修饰的变量不可以被改变 如果修饰引用 那么表示引用不可变 引用指向的内容可变 被 final 修饰的方法 JVM 会尝试将其内联 以提高运行效率 被 final 修饰的常量 在编译阶段会存入常量池中 2 abstract

大家好,我是讯享网,很高兴认识大家。



史上最全Java面试题合集400道(面试20k+程序员必备)

1. final关键字的作用?

被final修饰的类不可以被继承,被final修饰的方法不可以被重写,被final修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变,引用指向的内容可变.被final修饰的方法,JVM会尝试将其内联,以提高运行效率,被final修饰的常量,在编译阶段会存入常量池中.

2. abstract class 和interface有什么区别?

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract类的实例。然而可以创建一一个变量, 其类型是-一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final 成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口。

3. Java 集合类: list、 set、queue、 map、stack 的特点与用法?

Map

Map是键值对,键Key是唯一不能重复的, -一个键对应一一个值, 值可以重复。

TreeMap可以保证顺序,HashMap不保证顺序,即为无序的,Map 中可以将Key和Value单

独抽取出来,其中KeySet()方法可以将所有的keys抽取成- -个 Set,而Values() 方法可以

将map中所有的values抽取成一个集合。

Set

不包含重复元素的集合,set 中最多包含一个null元素,只能用Iterator实现单项遍历,

Set中没有同步方法。

List

有序的可重复集合,可以在任意位置增加删除元素,用Iterator实现单向遍历,也可用

ListIterator实现双向遍历。

Queue

Queue遵从先进先出原则,使用时尽量避免add()和remove()方法,而是使用offer ()来添加

元素,使用poll()来移除元素,它的优点是可以通过返回值来判断是否成功,LinkedList

实现了Queue接口,Queue 通常不允许插入null元素。

Stack

Stack遵从后进先出原则,Stack 继承自Vector,它通过五个操作对类Vector进行扩展,允许将向量视为堆栈,它提供了通常的push和pop操作,以及取堆栈顶点的peek()方法、

测试堆栈是否为空的empty方法等。

用法

如果涉及堆栈,队列等操作,建议使用List。

对于快速插入和删除元素的,建议使用LinkedList.

如果需要快速随机访问元素的,建议使用ArrayList.

4.说出ArrayList, Vector, LinkedList 的存储性能和特性?

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便

增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内

存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized 方法(线程安全), .

通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要

进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。.

5.内存泄漏和内存溢出?

内存泄漏(memoryleak),是指应用程序在申请内存后,无法释放已经申请的内存空间,一

次内存泄漏危害可以忽略,但如果任其发展最终会导致内存溢出Coutofmemory) 。如读取

文件后流要进行及时的关闭以及对数据库java基础测试连接的释放。

内存溢出(outofmemory)是指应用程序在申请内存时,没有足够的内存空间供其使用。如我

们在项目中对于大批量数据的导入,采用分批量提交的方式。

6.反射中,Class. forName ()和ClassLoader. loadClass ()的区别?

lass.forName(lassName)方法,

内.部实际调用的方法是

Class.forName(className,true,lassloader);

第2个boolean参数表示类是否需要初始化,Class.forNamel(lassName)默认 是需要初始化,

一旦初始化,就会触发目标对象的static 块代码执行,static 参数也也会被再次初始

化,CassaderladlasslassName) 方法,内部实际调用的方法是

Classloader.loadClass(className,false);第2个boolean 参数,表示目标对象是否进行链接,

如果需要获取到这个【Java面试知识点整理】文档的话,评论文章+私信资料即可。


小讯
上一篇 2024-12-30 07:11
下一篇 2024-12-30 11:15

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/3169.html