本文最后更新于:3 个月前
Java面试
1.JDK 和 JRE
JDK 是 Java Development Kit,它是功能齐全的 Java SDK。它拥有 JRE 所拥有
的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编
译程序。
JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,
包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但
是,它不能用于创建新程序。
2.Java 面向对象编程三大特性: 封装 继承 多态
多态
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发
出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变
量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中
实现的方法,必须在由程序运行期间才能决定。
在 Java 中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接
口(实现接口并覆盖接口中同一方法)。
3、重载和重写的区别
重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序
不同,方法返回值和访问修饰符可以不同,发生在编译时。
重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父
类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类
方法访问修饰符为 private 则子类就不能重写该方法
4. String StringBuffer 和 StringBuilder 的区别是什么
String 为什么是不可变的
可变性
简单的来说:String 类中使用 final 关键字字符数组保存字符串,private
final char value[],所以 String 对象是不可变的。而 StringBuilder 与
StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中
也是使用字符数组保存字符串 char[]value 但是没有用 final 关键字修饰,所以
这两种对象都是可变的。
StringBuilder 与 StringBuffer 的构造方法都是调用父类构造方法也就是
AbstractStringBuilder 实现的,大家可以自行查阅源码。
5. == 和 equals 的区别是什么?
Java 中的 Math.round(-1. 5) 等于多少? -1
String str=”i”与 String str=new String(“i”)一样吗?
String 类的常用方法都有那些?
接口和抽象类有什么区别?
- 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始
接口方法可以有默认实现),抽象类可以有非抽象的方法 - 接口中的实例变量默认是 final 类型的,而抽象类中则不一定
- 一个类可以实现多个接口,但最多只能实现一个抽象类
- 一个类实现接口的话要实现接口的所有方法,而抽象类不一定
- 接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口
的对象 从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是
行为的抽象,是一种行为的规范。
- 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始
线程和进程的区别? 简述线程,程序、进程的基本概念。以及他们之
间关系是什么
线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的
过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空
间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工
作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就
是说程序是静态的代码。
进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态
的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,
一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行
着,同时,每个进程还占有某些系统资源如 CPU 时间,内存空间,文件,文
件,输入输出设备的使用权等等。创建线程有哪几种方式?
1)继承 Thread 类
2)实现 Runnable 接口。
3)ExecutorService、Callable、Future 有返回值线程
有返回值的任务必须实现 Callable 接口,类似的,无返回值的任务必须 Runnable 接口。执行
Callable 任务后,可以获取一个 Future 的对象,在该对象上调用 get 就可以获取到 Callable 任务
返回的 Object 了,再结合线程池接口 ExecutorService 就可以实现传说中有返回结果的多线程
了。
4)基于线程池的方式
线程和数据库连接这些资源都是非常宝贵的资源。那么每次需要的时候创建,不需要的时候销
毁,是非常浪费资源的。那么我们就可以使用缓存的策略,也就是使用线程池。
// 创建线程池
ExecutorService threadPool = Executors.newFixedThreadPool(10);
12.线程有哪些状态?
经过新建(New)、就绪(Runnable)、运行(Running)、阻塞
(Blocked)和死亡(Dead)5 种状态。
熟练使用一种定时任务管理技术Java 容器都有哪些?
List、Set、Map 之间的区别是什么?
HashMap 和 Hashtable 有什么区别?
ArrayList 和 LinkedList 的区别是什么?
说一下你熟悉的设计模式?
简单工厂和抽象工厂有什么区别?
为什么要使用 spring?
解释一下什么是 aop?
解释一下什么是 ioc?
spring 有哪些主要模块?
spring 事务实现方式有哪些?
说一下 spring 的事务隔离?
说一下 spring mvc 运行流程?
spring mvc 有哪些组件?
@RequestMapping 的作用是什么?
@Autowired 的作用是什么?
Java 中 IO 流分为几种?
Files的常用方法都有哪些?
Collection 和 Collections 有什么区别?
List、Set、Map 之间的区别是什么?
HashMap 和 Hashtable 有什么区别?
说一下 HashMap 的实现原理?
说一下 HashSet 的实现原理?
如何实现数组和 List 之间的转换?
哪些集合类是线程安全的?
迭代器 Iterator 是什么?
Iterator 怎么使用?有什么特点?
Iterator 和 ListIterator 有什么区别?
怎么确保一个集合不能被修改?
并行和并发有什么区别?
说一下 runnable 和 callable 有什么区别?
线程的 run() 和 start() 有什么区别?
创建线程池有哪几种方式?
线程池都有哪些状态?
在 Java 程序中怎么保证多线程的运行安全?
throw 和 throws 的区别?
get 和 post 请求有哪些区别?
spring 常用的注入方式有哪些?
spring 中的 bean 是线程安全的吗?
spring 支持几种 bean 的作用域?
spring 自动装配 bean 有哪些方式?
spring 事务实现方式有哪些?
说一下 spring 的事务隔离?
说一下 spring mvc 运行流程?
spring mvc 有哪些组件?
@RequestMapping 的作用是什么?
@Autowired 的作用是什么?