Java面试题整理(一)

Java面试题汇总和个人理解总结

范围包括但不限于:

Java 基础

Spring 等框架

数据库

相关链接:

Java基础

JDK 和 JRE 的区别是什么?

JDK - Java Development Kit — 开发包和运行环境

JRE - Java Runtime Environment — 运行环境

JDK包含了JRE, 同时包含编译器javac以及诸多调试分析工具, 而JRE只是运行环境, 不能开发java程序


Java中有哪些数据类型?

基本数据类型: int, double, float, short, long, byte, char, booleaan

引用类型: 类, 接口, 数组

基本类型:byte(默认值0,占1字节)、short(默认值0,占2字节)、int(默认值0,占4字节)、long(默认值0,占8字节)、float(默认值0.0,占4字节)、double(默认值0.0,占8字节)、char(默认值\u0000,占2字节)、boolean(默认值false)
引用类型:类(默认值null)、接口(默认值null)、数组(默认值null)
————————————————
原文链接:https://blog.csdn.net/weixin_43365369/article/details/104356512


== 和 equals 的区别是什么?

在针对基本数据类型和引用类型的时候==的作用不一样

  • 基本数据类型就比较数据都值
  • 引用数据类型比较的是引用是否一样(地址)

而equals()本身也是==引用比较, 但是很多类重写了equals是它大部分情况下都是比较值


两个对象的 hashCode() 相同,则 equals() 也一定为 true 正确吗?

不一定, 一个hashCode可以有多个键值对, 只能说明他们有一样的哈希值


Java 中 final 关键字的作用是什么?
  • final类不能被继承
  • final方法不能重写, 但可以被继承
  • final变量叫变量, 必须初始化, 赋值后不能修改
String、StringBuffer、StringBuilder 的区别是什么?

StringBuffer线程安全, StringBuilder不是线程安全.

但是StringBuilder效率更高

String创建的字符串是常量,每次操作都产生新的对象

String str=“donkey” 与 String str=new String(“donkey”) 一样吗?

不一样, 内存分配方式不一样, String str=“donkey”会分配到常量池, new String(“donkey”)会分配到堆内存中

字符串如何反转?

可以使用StringBuilder中的reverse()方法

String 类中常用方法都有哪些?
  • substring
  • trim
  • indexOf
  • lastIndexOf
  • chatAt
  • length()
  • split
  • replace
  • equals
抽象类是什么?

有抽象方法都类就是抽象类,, 抽象方法没有方法体

抽象类必须要有抽象方法吗?

不需要

普通类和抽象类的区别是什么?

普通类不能有抽象方法

抽象类不能直接实例化

抽象类能使用 final 修饰吗?

不能, 抽象类定义用来给其他类继承, 而final类不可以被继承

接口是什么?

接口是特殊类, 由全局变量和公共抽象方法组成 接口中的方法不能有方法体, 由实现类来编写方法体. 用来解决java无法多继承

接口和抽象类的区别是什么?

接口使用implements实现, 抽象类使用extends被继承

接口不能有构造函数, 抽象方法可以有构造函数

一个类只能继承一个抽象类, 但是可以实现多接口

抽象类中成员变量默认 default,可在子类中被重新定义,也可被重新赋值,抽象方法被 abstract 修饰,不能被 private、static、synchronized 和 native 等修饰;接口中成员变量默认为 public static final 修饰,必须赋初值,不能被修改,其所有的成员方法默认使用 public abstract 修饰的
————————————————
原文链接:https://blog.csdn.net/weixin_43365369/article/details/104356512

Java 中 IO 流分几种?
  • 输入流, 输出流
  • 字节流,(8位) 字符流(16位)
BIO、NIO、AIO 有什么区别?

BIO:同步阻塞 IO,就是我们平常使用的传统 IO,服务器的实现模式是一个请求连接一个线程,并发处理能力低,可能造成不必要的线程开销,严重的还将导致服务器内存溢出。
NIO:同步非阻塞 IO,是传统 IO 的升级,服务器的实现模式是多个请求一个线程,即请求会注册到多路复用器Selector上,多路复用器轮询到连接有IO请求时才启动一个线程处理。
AIO:异步非阻塞 IO,是 NIO 的升级,也叫 NIO2,服务器的实现模式为多个有效请求一个线程,客户端的IO请求都是由OS先完成再通知服务器应用去启动线程处理(回调)。
————————————————

原文链接:https://blog.csdn.net/weixin_43365369/article/details/104356512

Files 的常用方法都有哪些?
  • exists
  • createFile
  • createDirectory
  • copy
  • move

Java 容器篇

Java中有哪些容器
  • Collection
    • List
      • Vector
        • Stack
      • ArrayList
      • LinkedList
    • Queue
      • LinkedList
      • PriorityQueue
    • Set
      • HashSet
      • TreeSet
  • Map
    • HashMap
    • TreeMap
Collection 和 Collections 有什么区别
  • java.util.Collection 十一个集合接口 (集合类的顶级接口). 提供了对集合对象基本操作的通用接口方法. Collection接口在Java类库中有很多具体实现. Collection接口都意义是为了各种具体的集合提供最大化统一操作方式, 像List和Set直接继承与Collection

  • Collections是集合的一个工具类, 提供了很多静态方法, 用于对集合中元素排序, 搜索, 以及线程安全等操作

  • List, Set, Map 之间有什么区别

    比较 List Set Map
    继承接口 Collection Collection
    常见实现类 AbstractList(ArrayList, LinkedList, Vector) AbstractSet(常用子类有HashSet, LinkedHashSet, TreeSet) HashMap, HashTable
    常见方法 add(), remove(), clear(), get(), contains(), size() add(), remove(), clear(), contains(), size() put(), get(), remove(), clear(), containsKey(), containsValue(), keySet(), values(), size()
    元素 可重复 不可重复(用equals() 判断) 不可重复
    顺序 有序 无序(HashCode决定)
    线程安全 Vector线程安全 Hashtable线程安全
HashMap和HashTable什么区别
  • hashMap去除了HashTable的contains()方法, 但是加上containsValue() 和containsKey()方法
  • hashTable是线程同步到, 而HashMap是非同步, HashMap效率上比HashTable高
  • HashMap允许空键空值, HashTable不允许
如何决定使用HashMap还是TreeMap

一般用map做插入, 删除, 定位元素这类操作, HashMap是最好选择.

如果需要对有序的键值集合遍历, TreeMap是更好的

HashMap实现原理
Author: klenq
Link: https://klenq.github.io/2021/11/22/Java面试题汇总和个人理解总结/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.