面试题
- Integer类型在-128–>127范围之间是被缓存了的 ,比较时超出部分用 “==” 会false
- java Thread中,run方法和start方法的区别
答:run()方法就是一个普通的方法,真正启动一个新线程的话是start() - jvm jdk jre分别是什么
答:虚拟机 开发环境 编译环境 - 成员变量有默认初始值,可以不用赋值,局部变量必须赋值。否则编译错误,final static 变量必须初始化
- 排序时,插入排序:最佳O(N)
快速排序:最佳O(NlogN)
堆 排序:最佳O(NlogN)
归并排序:最佳O(NlogN)
因此选择插入排序。 - 面向对象的优点 可重用性 扩展性 易管理和维护
- 重载指可以有同样修饰符、返回值、方法名,但参数个数或顺序不同的方 法。
重写指子类继承父类后,重写父类的方法。
final的方法可以被重载,不能被重写。 - lambda表达式 java 1.8版本出现的新写法 Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)
例子 :快速实现接口
public static void main(String[] args) {
aest c=d->{
System.out.println("去你妈的"+d);
};
c.link(16);
}
}
interface aest{
void link(int a);
}
-
Synchronized和lock 的区别
答:Lock是一个接口,而synchronized是Java中的关键字,
synchronized是 内置的语言实现;synchronized在发生异常时,
会自动释放线程占有的锁, 因此不会导致死锁现象发生;而Lock在发生异常时,
如果没有主动通过 unLock()去释放锁,则很可能造成死锁现象,
因此使用Lock时需要在finally块 中释放锁;Lock可以让等待锁的线程响应 中断,而synchronized却不行,
使 用synchronized时,等待的线程会一直等待下去,不能够响应中断;
通过 Lock可以知道有没有成功获取锁,而synchronized却无法办到。 -
方法覆盖(Overriding)和方法重载(Overloading)是什么意思
答:覆盖就是重写的意识 ,之类重写父方法,重载是一个类中写同样的方法,但是参数个数或者参数位置不相同
- 反射的步骤
答:JAVA语言编译之后会生成一个.class文件,反射就是通过字节码文件找到某一个类、类中的方法以及属性等。反射的实现主要借助以下四个类:Class:类的对象,Constructor:类的构造方法,Field:类中的属性对象,Method:类中的方法对象。
- StringBuffer和StringBuilder
答:StringBuffer是线程安全的 StringBuilder 是线程不安全的 区别是StringBuffer比StringBuffder多加了一个 synchronized - 什么是线程池
答:在面向对象编程中,创建和销毁对象是很费时间的,
因为创建一个对象要获取内存资源或者其它更多资源。
在Java中更是如此,虚拟机将试图跟踪每一个对象,
以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,
特别是一些很耗资源的
对象创建和销毁,这就是”池化资源”技术产生的原因。线程池顾名思义
就是 事先创建若干个可执行的线程放入一个池(容器)中,
需要的时候从池中获取线程不用自行创建,
使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。 - 线程从创建到死亡的几种状态都有哪些
答:新建 --》可运行–》运行–》阻塞( 等待阻塞, 同步阻塞,其他阻塞)–》死亡 - ioc 和 di
答:IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠释。控制反转是把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的"控制反转"就是对组件对象控制权的转移,从程序代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。
DI是对IoC更准确的描述,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。 - 依赖注入的方式有哪几种
答:1、Set注入 2、构造器注入 3、接口注入 - @autowired 和@resource区别是什么?
答:1)@Autowired
@Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。@Resource注解和@Autowired一样,也可以标注在字段或属性的setter方法上,但它默认按名称装配。名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。 @Resources按名字,是JDK的,@Autowired按类型,是Spring的。
- aop是什么 aop配置什么使用最佳
答:aop是springboot带来的一种切面思想
前置通知 后置通知 环绕通知
配合事务最佳
事务的4个特性(ACID): - 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行。
- 一致性(consistency):事务在完成时,必须是所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。(实例:转账,两个账户余额相加,值不变。)
- 隔离性(isolation):一个事务的执行不能被其他事务所影响。
- 持久性(durability):一个事务一旦提交,事物的操作便永久性的保存在DB中。即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
- server生命周期
Servlet的生命周期包含了下面4个阶段:
1.加载和实例化
2.初始化
3.请求处理
4.服务终止 - 类的生命周期
加载 验证 准备 解析 初始化 - mybatis的工作原理
-
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
-
MyBatis使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。
-
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。用xml文件构建SqlSessionFactory实例是非常简单的事情。
-
推荐在这个配置中使用类路径资源,但可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位
- 工厂模式 factory好处 解耦合 (一般在数据量大的情况下使用)
抽象工厂类的简单实现
- 设置抽象类 然后写入抽象方法
- 设置实现类 继承抽象类 实现抽象方法
- 设置工厂模式的抽象方法
- 继承抽线工厂实现 抽象工厂中的方法
- 调用 工厂中的方法