常见Java面试题总结
1. Java Thread中和interrupt相关的方法有几个,作用分别是什么?
在 Java Thread 中,与 interrupt 相关的方法有以下几个,作用分别是:
interrupt() 方法:中断线程。当线程调用 interrupt() 方法时,如果该线程正在阻塞状态(如 sleep、wait、join 等),则会抛出 InterruptedException 异常;如果该线程没有处于阻塞状态,那么该线程的中断状态会被设置为 true。
isInterrupted() 方法:判断线程是否被中断。该方法返回一个 boolean 类型,表示线程的中断状态是否为 true。
interrupted() 方法:判断当前线程是否被中断,并且清除中断状态。该方法返回一个 boolean 类型,表示线程的中断状态是否为 true,并且会清除中断状态,即将中断状态重新设置为 false。注意这个是静态方法作用于当前线程。
public static boolean interrupted() {
Thread t = currentThread();
boolean interrupted = t.interrupted;
// We may have been interrupted the moment after we read the field,
// so only clear the field if we saw that it was set and will return
// true; otherwise we could lose an interrupt.
if (interrupted) {
t.interrupted = false;
clearInterruptEvent();
}
return interrupted;
}
其中,interrupt() 方法是用于中断线程的,而 isInterrupted() 方法和 interrupted() 方法则是用于判断线程的中断状态的。需要注意的是,interrupted() 方法会清除中断状态,因此在使用 interrupted() 方法之前,需要先判断 isInterrupted() 方法的返回值,以确保不会误清除中断状态。
1. JDK和JRE有什么区别?
- JDK:Java Development Kit的简称,Java开发工具包
- JRE:Java Runtime Environment的简称,Java运行环境,为Java的运行提供所需的环境
具体来说JDK包含JRE,同时还包含编译Java源码的编译器javac,还包含很多Java程序调试和分析工具。如果你只需要运行Java程序,你只需要安装jre。如果你需要编写Java程序,需要安装jdk。
2. ==和equals的区别是什么?
==
对于基本数据类型和引用类型, ==的作用效果不同,如下所示:
- 基本类型:比较的是值是否相同
- 引用类型:比较的是引用是否相同
equals
equals的本质是==,但是String 和 Integer等重写了equals方法,把它变成了值的比较
Java提供了八种基本数据类型。六种数字类型(四个整型,两个浮点型),一个字符类型,一个布尔类型
- byte:byte数据类型是8位,有符号的。最小值-128(-27),最大值127(27-1),默认值0,byte用在大型数组种,主要用来代替整形,应为byte变量的大小只有int类型的四分之一
- short: short数据类型是16位,有符号。最小值-32768(-215),最大值32767(215-1)。short也常用于大型数组种,short变量大小只有int型变量的二分之一。
3.int: int数据类型是32位,最小值(-232),最大值(232-1),一般整形默认就是int
4.long: long数据类型是64位- float:单精度,32位,默认值0.0f,浮点型不能表示精确的值,如货币
- double: 双精度,64位,不能表示精确的值,如货币
- boolean:表示1位的信息。但是如果boolean是单独使用:boolean占4个字节。如果boolean是以“boolean数组”的形式使用:boolean占1个字节。
- char: 16位字符类型。
3.两个对象的hashcode()相同,则equals()也一定相同吗?
不一定,这两个本质上没有任何联系。但是从用途出发,在equals相同时,我们一般会让hashcode也相同
4. final在Java中有什么作用?
- final修饰类,则该类不能被继承
- final修饰方法,方法不能被重写
- final修饰的变量叫常量,常量必须初始化,且初始化之后不能被修改
5. Java中Math.round(-1.5)等于多少?
等于-1,这个函数的含义是在数轴上向上取整
6. String是基本数据类型吗?
不是,String是对象
7.Java中操作字符串的类有哪些?有什么区别?
String/StringBuffer/StringBuilder
-
String申明的是不可变对象,String底层存储是
final byte[] value
,注意是final的。每次操作都会产生新的对象。StringBuffer/StringBuilder也是byte[] value
,但是没有final,是可以在原有对象的基础上进行修改的 -
StringBuffer和StringBuilder最大的区别在于StringBuffer是线程安全的,StringBuilder不是线程安全的。
8.String str = "i" 和 String str = new String("i")一样吗?
不一样,内存的分配方式不一样。String str="i",java虚拟机会将其分配到常量池中,String str=new String("i")会被分到堆内存中
9. 如何将字符串反转
使用StringBulder的reverse()方法
10. String常用的方法
- indexOf():返回指定字符的索引
- chatAt(): 返回索引处的字符
- replace():字符串替换
- trim():去除字符串两端空白
- split():分割字符串,返回一个分割后的字符串数组
- getBytes(): 返回字符串的byte类型数组
- length():返回字符串长度
- toLowCase():将字符串转化为小写
- toUpCase():将字符串转化为大写
- subString(): 截取字符串
- equals():字符串比较
11. 抽象类必要有抽象方法吗?
不需要
12.普通类和抽象类有哪些区别?
- 普通类不能包含抽象方法,抽象类可以包含抽象方法
- 抽象类不能直接被实例化,普通类可以
13.抽象类可以被final修饰吗?
不可以。被final修饰的类不能被继承,抽象类不能直接实例化
14. 接口和抽象类有什么区别?
- 实现方式不同。接口是实现,抽象类是继承
- 抽象类可以有构造函数,接口不可以
- 一个类可以实现多个接口,但是只能继承一个抽象类
15. Java中的IO流分多少种?
- 按功能划分:输入流,输出流
- 按类型划分:字节流,字符流。字节流按8位传输字节为单位,字符流按16位传输字符位单位。
16. BIO/NIO/AIO有什么区别?
- BIO: Block IO,同步阻塞IO
- NIO: New IO,同步非阻塞IO
- AIO: Asynchronous IO,异步非阻塞IO,基于事件和回调机制
17. Files的常用方法
- exists(): 检测文件时候存在
- createFile(): 创建文件
- createDirectory(): 创建文件夹
18. Java中的容器有哪些?
- Collection
- List
- ArrayList
- LinkedList
- Vector
- Stack
- Set
- HashSet
- LinkedHashSet
- TreeSet
- Map
- HashMap
- TreeMap
- HashTable
19. Collection 和 Collections 有什么区别?
- Collection:一个集合的接口,里面定义了很多对集合操作的方法
- Collections:一个集合的工具类
20. List/ Set/ Map之间的区别是什么?
数据存储结构上的差异
21. HashMap和HashTable有什么区别?
- 存储:HashMap允许key和value为null,Hashtable不允许
- 线程安全:HashMap线程不安全,Hashtable线程安全
22. HashMap和TreeMap的选择?
HashMap更适合插入,删除,随机读取操作。TreeMap适合有序遍历
23.HashMap的实现原理
HashMap基于Hash算法实现,我们通过put(key, value)存储,get(key)来获取。当key传入时,HashMap会通过key.hashCode()计算出hash值,在根据hash值将value保存到 bucket 中。
24. HashSet实现
Hashset是基于HashMap实现的
25. ArrayList 和 LinkedList区别
数据结构上的区别
26. 如何实现数组和List之间的切换?
- 数组转List:使用Arrays.asList(array)进行转换
- List转数组:使用List.toArray()
27. ArrayList和Vector的区别
- 线程安全
- 性能
- 扩容方式
28. Array和ArrayList区别
- Array可以存放基本数据类型和对象,ArrayList只能存放对象
- Array固定大小,ArrayList会自动扩容
- Array内置方法没有ArrayList多
29.在Queue中poll()和remove()区别
- 相同点:都会返回第一个元素,并在队列中删除这个元素
- 不同点:如果元素没有,poll返回null,remove直接报NoSuchElementException异常
30. 哪些集合是线程安全的
java.util.concurrent包下的
31. Interator是什么?
Iterator 提供遍历collection接口的方法
32. Iterator怎么使用?什么特点?
繁琐,容易抛出ConvurrentModification异常
33. Iterator 和ListIterator区别
ListIerator专门为List设计,增加了很多操作list的方法
34. 怎么确保一个集合不被修改
Collections.unmodifiableCollection(Collection c)
欢迎大家阅读,有问题和不足的地方欢迎大家指出。作者:永和九年,转载请注明原文链接:https://www.cnblogs.com/hardyzhou/p/17213265.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通