常见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提供了八种基本数据类型。六种数字类型(四个整型,两个浮点型),一个字符类型,一个布尔类型

  1. byte:byte数据类型是8位,有符号的。最小值-128(-27),最大值127(27-1),默认值0,byte用在大型数组种,主要用来代替整形,应为byte变量的大小只有int类型的四分之一
  2. short: short数据类型是16位,有符号。最小值-32768(-215),最大值32767(215-1)。short也常用于大型数组种,short变量大小只有int型变量的二分之一。
    3.int: int数据类型是32位,最小值(-232),最大值(232-1),一般整形默认就是int
    4.long: long数据类型是64位
  3. float:单精度,32位,默认值0.0f,浮点型不能表示精确的值,如货币
  4. double: 双精度,64位,不能表示精确的值,如货币
  5. boolean:表示1位的信息。但是如果boolean是单独使用:boolean占4个字节。如果boolean是以“boolean数组”的形式使用:boolean占1个字节。
  6. 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)

posted @   永和九年  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示