《Java面试题大全2023版.docx》由会员分享,可在线阅读,更多相关《Java面试题大全2023版.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java面试题大全2023版一、Java基础JDK和JRE有什么区别?JDK : Java Development Kit的简称,java开发工具包,提供了 java的开发环境和运行环境。JRE : Java Runtime Environment的简称,java运行环境,为java的运行提供了所需 环境。具体来说JDK其实包含了 JRE ,同时还包含了编译java源码的编译器javac ,还包含 了很多java程序调试和分析的工具。简单来说:如果你需要运行java程序,只需安 装JRE就可以了,如果你需要编写java程序,需要安装JDK。1. =和equals的区别是什么?=解读对于基本类型
2、和引用类型=的作用效果是不同的,如下所示:基本类型:比较的是值是否相同;引用类型:比较的是引用是否相同;代码解读:因为x和y指向的是同一个引用,所以=也是true ,而new String。方 法则重写开辟了内存空间,所以=结果为false ,而equals比较的一直是值,所以 结果都为true。equals解读equals本质上就是=,只不过String和Integer等重写了 equals方法,把它变成了 值比较。原来是String重写了 Object的equals方法,把引用比较改成了值比较。总结:=对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而equals默认情况下是引用
3、比较,只是很多类重新了 equals方法,比如String. Integer 等把它变成了值比较,所以一般情况下equals比较的是值是否相等。2. 两个对象的hashCode。相同,则equals。也一定为true ,对吗?不对,两个对象的hashCode。相同,equals。不一定true0代码解读:很显然通话和重地的hashCode。相同,然而equals()则为false , 因为在散列表中,hashCode。相等即两个键值对的哈希值相等,然而哈希值相等,并 不一定能得出键值对相等。3. final在java中有什么作用?final修饰的类叫最终类,该类不能被继承。final修饰的方法
4、不能被重写。final修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。4. java 中的 Math.round(-1.5)等于多少?等于-1 ,因为在数轴上取值时,中间值(0.5 )向右取整,所以正0.5是往上取整,负 0.5是直接舍弃。5. String属于基础的数据类型吗?String 不属于基础类型,基础类型有 8 种:byte、boolean, char、short、int、float, long、double ,而 String 属于对象。6. java中操作字符串都有哪些类?它们之间有什么区别? 操作字符串的类有:String. String Buffer, Stri
5、ngBuilder0String和StringBufferx StringBuilder的区别在于String声明的是不可变的对象,每次 操作都会生成新的String对象,然后将指针指向新的String对象,而StringBuffer. StringBuilder可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况 下最好不要使用StringoString Buffer和StringBuilder最大的区别在于,String Buffer是线程安全的,而 StringBuilder是非线程安全的,但StringBuilder的性能却高于String Buffer,所以在 单线程环境下
6、推荐使用StringBuilder,多线程环境下推荐使用StringBuffer0String str=与 String str=new String(T)一样吗?不一样,因为内存的分配方式不一样。String str=i”的方式,java虚拟机会将其分配 到常量池中;而String str=new String(i)则会被分到堆内存中。7. 如何将字符串反转?使用 StringBuilder 或者 stringBuffer 的 reverse。方法。8. String类的常用方法都有那些?indexOf():返回指定字符的索引。charAt():返回指定索引处的字符。replace():字符
7、串替换。trim():去除字符串两端空白。split():分割字符串,返回一个分割后的字符串数组。getBytes():返回字符串的byte类型数组。length():返回字符串长度。toLowerCase():将字符串转成小写字母。toUpperCase():将字符串转成大写字符。substring():截取字符串。equals():字符串比较。9. 抽象类必须要有抽象方法吗? 不需要,抽象类不一定非要有抽象方法。 上面代码,抽象类并没有抽象方法但完全可以正常运行。10. 普通类和抽象类有哪些区别?普通类不能包含抽象方法,抽象类可以包含抽象方法。抽象类不能直接实例化,普通类可以直接实例化。1
8、1. 抽象类能使用final修饰吗?不能,定义抽象类就是让其他类继承的,如果定义为final该类就不能被继承,这样彼 此就会产生矛盾,所以final不能修饰抽象类,如下图所示,编辑器也会提示错误信息: 14.接口和抽象类有什么区别?实现:抽象类的子类使用extends来继承;接口必须使用implements来实现接口。构造函数:抽象类可以有构造函数;接口不能有。main方法:抽象类可以有main方法,并且我们能运行它;接口不能有main方法。实现数量:类可以实现很多个接口 旦是只能继承一个抽象类。访问修饰符:接口中的方法默认使用public修饰;抽象类中的方法可以是任意访问修 饰符。15. j
9、ava中I。流分为几种?按功能来分:输入流(input)、输出流(output) 0按类型来分:字节流和字符流。字节流和字符流的区别是:字节流按8位传输以字节为单位输入输出数据,字符流按16位传输以字符为单位输入输出数据。16. BIO、NIO、AIO有什么区别?BIO : Block 10同步阻塞式10,就是我们平常使用的传统10 ,它的特点是模式简单使 用方便,并发处理能力低。NI0 : New 10同步非阻塞10 ,是传统10的升级,客户端和服务器端通过Channel(通道)通讯,实现了多路复用。AI0 : Asynchronous 10是NI0的升级,也叫NI02 ,实现了异步非堵塞1
10、0 ,异步10 的操作基于事件和回调机制。17. Files的常用方法都有哪些?Files.exists():检测文件路径是否存在。Files.createFile():创建文件。Files.createDirectory():创建文件夹。Files.delete():删除一个文件或目录。Files.copy():复制文件。Files.move():移动文件。Files.size():查看文件个数。Files.read():读取文件。Files.write():写入文件。二、容器java容器都有哪些?常用容器的图录:18. Collection 和 Collections 有什么区别?是一个集
11、合接口(集合类的一个顶级接口)。它提供了对集合对象 进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承 接口有List与Set。Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集 合中元素进行排序、搜索以及线程安全等各种操作。19. List. Set、Map之间的区别是什么?20. HashMap 和 Hashtable 有什么区别?hashMap 去掉了 HashTable 的 contains 方法,但是力口上了 contains
12、Value ()和 containsKey ()方法。hashTable同步的,而HashMap是非同步的,效率上逼hashTable要高。hashM叩允许空键值,而hashTable不允许。21. 如何决定使用HashMap还是TreeMap ?对于在Map中插入、删除和定位元素这类操作,HashM叩是最好的选择。然而,假如 你需要对一个有序的key集合进行遍历,TreeM叩是更好的选择。基于你的collection 的大小,也许向HashM叩中添加元素会更快,将map换为TreeMap进行有序key的 遍历。22. 说一下HashM叩的实现原理?HashM叩概述:HashM叩是基于哈希表的
13、Map接口的非同步实现。此实现提供所有 可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不 保证该顺序恒久不变。HashMap的数据结构:在java编程语言中,最基本的结构就是两种,一个是数组,另 外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的, HashM叩也不例外。HashM叩实际上是一个“链表散列的数据结构,即数组和链表 的结合体。当我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝 素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入 链尾,如果数组中该位置没有元
14、素,就直接将该元素放到数组的该位置上。hash值得到这个元素在数组中的位(下标),如果该数组在该位置上已经存放了其他元需要注意Jdk 1.8中对HashM叩的实现做了优化,当链表中的节点数据超过八个之后, 该链表会转为红黑树来提高查询效率,从原来的。力)到O(logn)23. 说一下HashSet的实现原理?HashSet底层由HashMap实现HashSet的值存放于HashMap的key上HashMap 的 value 统一为 PRESENTArrayList 和 Linked Li st 的区别是什么?最明显的区别是ArrrayList底层的数据结构是数组,支持随机访问,而LinkedL
15、ist的底 层数据结构是双向循环链表,不支持随机访问。使用下标访问一个元素,ArrayList的 时间复杂度是0(1),而LinkedList是0(n)e如何实现数组和List之间的转换?List转换成为数组:调用ArrayList的toArray方法。数组转换成为List :调用Arrays的asList方法。24. ArrayList和Vector的区别是什么?Vector是同步的,而ArrayList不是。然而,如果你寻求在迭代的时候对列表进行改变, 你应该使用 CopyOnWriteArrayListeArrayList比Vector快,它因为有同步,不会过载。ArrayList更加通
16、用,因为我们可以使用Collections工具类轻易地获取同步列表和只读 列表。25. Array 和 ArrayList 有何区别?Array可以容纳基本类型和对象,而ArrayList只能容纳对象。Array是指定大小的,而ArrayList大小是固定的。Array没有提供ArrayList那么多功能,比如addAIL removeAII和iterator等。26. 在Queue中poll。和remove。有什么区别?poll()和remove。都是从队列中取出一个元素,但是poll()在获取元素失败的时候会 返回空,但是remove()失败的时候会抛出异常。27. 哪些集合类是线程安全的
17、?vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太 建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑 的。statck :堆栈类,先进后出。hashtable :就比hashm叩多了个线程安全。enumeration :枚举,相当于迭代器。28. 迭代器Iterator是什么?迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人 员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的 代价小。29. Iterator怎么使用?有什么特点?Java中的Iterator功能比较简单,并
18、且只能单向移动:使用方法iterator。要求容器返回一个Iterator.,第一次调用Iterator的next。方法 时,它返回序列的第一个元素。注意:iterator。方法是接口,被 Collection 继承。(2)使用next。获得序列中的下一个元素。(3)使用hasNext。检查序列中是否还有元素。(4)使用remove。将迭代器新返回的元素删除。Iterator是Java迭代器最简单的实现,为List设计的Listiterator具有更多的功能,它 可以从两个方向遍历List,也可以从List中插入和删除元素。30. Iterator 和 Listiterator 有什么区别?Iterator可用来遍历Set和List集合,但是Listiterator只能用来遍历ListoIterator对集合只能是前向遍历,Listlterator既可以前向也可以后向。Listiterator实现了 Iterator接口,并包含其他的功能,比如:增加元素,替换元素, 获取前一个和后一个元素的索引,等等。