java面试题库
1.JDK,JRE,JVM有什么区别?
Jdb:是java开发工具包,提供java开发环境和运行环境
JRE:java运行环境,包含java虚拟机以及一些基础类库
JVM:java虚拟机,提供执行字节码文件的功能
如果只是运行java程序,只需要安装JRE即可
java源文件经过编译后生成class字节码文件,可以在各个操作系统中运行
一处编译到处运行
2.==和equals的区别
==比较的是值 比较基本的数据类型
qeuals 默认比较地址 包装类值的比较 比如 Integer i = new Integer();
3.final修饰类 表示类不可变,不可继承
final表示方法不可被重写
4.String StringBuffer,StringBuilder区别
String 是一个final类型。每次声明都是不可变对象
StringBuffer都是在原有对象进行操作
StringBuffer vs StringBuilder
前者是线程安全,后者是线程不安全的。在开发中使用StringBuilder
性能更高一种
5.算法
什么是递归
递归就是方法内部调用方法自身
1 | public static int getRes(int n){ |
6.int 和Integet的区别
Integet引用类型
int基本类型
Integet值在-128到127之间缓存池中,而超过数值之间会new 一个对象 在堆内存中创建一块内存。
引用类型和数值比较 是自动拆箱 比较数值。
1 | Integer i1 =128;// new Integer(128) |
7.方法的重写和重载
- 重载:发生在一个类中,方法名相同,参数不同。(跟返回值没关系)
- 重写:发生在父类和子类之间,方法名相同,参数列表相同
8.List和Set的区别
- List:有序的,可重复值 ;子类ArrayList,LinkedList
- Set:无序的,不可重复值;子类HashSet,TreeSet
9.ArrayList和LinkedList区别
ArrayLsit:是个数组,连续的一块内存空间
查找快,因为是连续的内存空间,方便寻址,但删除,插入慢 因为要改变数据结构
LinkedList:是个双向表,不是连续的内存空间
查找慢,因为需要通过指针一个个寻找,但删除,和插入块,因为只要改变前后节点的指针指向。
10.HashSet
HashSet底层采用的HashMap来实现存储
JAVA
J2EE是什么
J2EE是一种利用java2平台来简化企业解决方案的开发、部署和管理相关复杂问题的体系结构。
它的体系结构提供了中间层集成框架用来满足无需太多费用而又需要高可用性以及可扩展性的应用需求。
面向对象的3大特性
- 封装:是指对一个对象的属性以及方法进行封装成一个类,属性使用私有访问修饰符,可以使用get,set方法获取和存储,对类的属性进行修改!
- 继承:继承表示子类继承父类的所有属性以及方法,调用使用。
- 多态:多态是指不同的子类调用父类的方法或者属性,实现不同的结果。主要是重载和重写。
java中有几种类型的流
字符流和字节流
字符流和字节流有什么区别
字节流inputstream和outputstream
字符流Reader和Writer
底层设备永远只接受字节流。字符流是字节流的包装。字符流内部将串转成字节。
tomcat修改端口号
进入tomcat安装的目录 进入conf目录下的server.xml文件中,修改port:8080的默认端口,进入bin目录中的
startup启动项目。
Mysql事务
事务是一个单元的一组有序的数据库操作,如果所有操作完成,事物则提交,如果只要一个操作失败,事物则将回滚,该事物的所有操作的影响都取消。
- 原子性 :是通过日志进行实现。当事物进行回滚,进行sql语句的撤销,实现数据的回滚。
- 持久性 :是指通过日志记录事物操作引起的数据变化。记录数据的物理修改。
- 隔离性 :是通过锁的机制实现的,当事务需要对数据库中某行数据进行修改,需要先给数据加锁,加了锁的事务不能运行操作,只能等待事务的提交或者锁的释放。
- 一致性:是指事务结束后,数据库的完整性,原子性、持久性、隔离性,实际上是为了确保数据库状态的一致性。
1 | # 开启事务 |
什么是 AOP
AOP是切面编程,可以通过预编译方法和运行期动态代理来实现。
利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
@Aspect 注解告诉spring这个切面类
@Before 目标方法执行之前
@After 目标方法执行之后
@AfterReturning 目标方法正常返回之后
@AfterThrowing 目标方法抛出异常之后
@Around 环绕通知
SQL IN和EXISTS的区别
IN是子查询为驱动表,一般都是非关联子查询,必须执行内层查询
EXISTS是表位驱动表,一般都是关联子查询,必须先执行外层查询
匿名内部类
在定义一个类的同时进行实例化,可以有额外的方法,也可以对其他类进行实例化
什么是IOC和DI?
1.IOC是控制反转。DI则是依赖注入,其中含义差不多。
2.ICO:创建对象的控制权由IOC容器为我们提供,降低代码的耦合性。
实现的手段是DI依赖的注入,有两种注入方法,一种是注解Annotation注入,resource注解
一种是通过配置文件XML,bean id=nama 加上 class完全限定类名 使用的就是反射机制
序列化和反序列化
- java序列化是指java对象转换为字节序列过程
- java反序列化是指字节序列转换为java对象的过程
序列化 反序列化有3种实现
- 若类仅仅实现serializable接口
ObjectOutputStream采用默认的序列化方法,对User对象的非transient的实例变量进行序列化。
ObjectinputStream采用默认的反序列化方法,对User对象的非transient的实例变量进行反序列化。
接口和抽象类的区别
语法区别:
抽象类:方法可以抽象的,也可以非抽象,有构造器
接口:方法都是抽象的,属性是常亮,默认有public static final修饰符
设计:
抽象类:同一个类事务的抽取,比如针对DAO层操作的封装,如 userDao,UserServicelmpl
接口:通常是一种定制系统之间对接的标准
如:interface作为各层的纽带,在controller注入userService,在service注入UserDao
接口里面可以有实现方法,方法声明上加上default和static
接口可以实现多继承,而类只支持单继承。
高内聚低耦合
什么是Mybatis
Mybatis是一个优秀的持久层框架,对jdbc操作数据库进行了封装,使开发者只需要sql本身。
Spring
1.Spring Boot、Spring MVC 和 Spring 有什么区别?
Spring:最重要的特性是依赖注入,不是依赖注入就是IOC控制反转
SpringMVC:提供的是一种分离式的方法来开发Web项目
SpringBoot:其他两个最大的问题需要配置大量的参数,而springboot通过自动配置和启动项来解决问题。
2.Spring MVC是什么
springMVC是一种web层的mvc框架,是spring的一个模块,拥有spring的特性,
springmvc分离了控制器,模型对象,分配器已经处理程序的对象角色
3.Spring Boot是什么?
springboot是一个框架,是spring的核心内容,也包括springmvc。
他默认配置了很多框架的使用,自动配置
4.什么是Spring
Spring是一个开源框架,通过依赖注入和面向接口实现松耦合,通过切面和模板减少样式代码
5.什么是自动配置
当一个MVC JAR 添加到应用是,自动配置beans,
Spring boot 在创建时,提供了应用程序和框架所需要的基本配置。
6.JAVABean是什么
JAVABean是一种java语言写成的可重用组件,他是一个类
类必须是具体的公共的,并且具有无参的构造器
多线程
1.并发编程三要素?
- 原子性
- 可见性
- 有序性
2.多线程的价值?
发挥多核CPU的优势
防止堵塞
便于建模
3.线程的生命周期以及五种基本状态
- 新建窗台
- 就绪状态
- 运行状态
- 阻塞状态
- 死亡状态
4.什么是多线程
多线程指从软件或者硬件上实现多个程序并发执行的技术。
简单来说多线程就是在单个程序中同时执行多个线程来完成不同的工作