的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler接口和Proxy类。如果
目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation
Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB是通过继承的方式做
的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。
AOP在事务管理方面,Spring使用AOP来完成声明式的事务管理有annotation和xml两种形式。开发中,方便代码
编写,很多时候都是在spring配置文件中配置事务管理器并开启事务控制注解。在业务类或业务类方法中添加
@Transactional实现事务控制。
讲讲MyBatis框架
===============
(1)mybatis是一个基于java的持久层框架,它内部封装了jdbc,不需要花费精力去处理加载驱动、创建连接等的过程,
消除了JDBC大量冗余的代码。
(2)mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中
sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。
(3)MyBatis 支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设
置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO映射成数据库中的记录。
(4)提供了很多第三方插件(分页插件 / 逆向工程);
(5)能够与Spring很好的集成;
(6)MyBatis相当灵活,SQL写在XML里,从程序代码中彻底分离,解除sql与程序代码的耦合,便于统一管理,支持编写动态SQL语句。
(7) 提供映射标签,支持对象与数据库的ORM字段关系映射。
(8)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
讲讲SpringBoot的特点
===================
Springboot用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置
(properties或yml文件)
可以创建独立的spring引用程序 main方法运行
Springboot嵌入的Tomcat 无需部署war文件
简化maven配置
讲讲线程的创建及实现线程几种方式之间的区别
=========================
1:继承Therad类,2:实现Runnable接口 3:实现Callable接口 4:使用线程池
继承Thread类,并重写里面的run方法
class A extends Thread{
public void run(){
for(int i=1;i<=100;i++){
System.out.println(“-----------------”+i);
}
}
}
A a = new A();
a.start();
实现Runnable接口,并实现里面的run方法
class B implements Runnable{
public void run(){
for(int i=1;i<=100;i++){
System.out.println(“-----------------”+i);
}
}
}
B b = new B();
Thread t = new Thread(b);
t.start();
实现Callable
class A implements Callable{
public String call() throws Exception{
//…
}
}
FutureTask ft = new FutureTask<>(new A());
new Thread(ft).start();
线程池
ExcutorService es = Executors.newFixedThreadPool(10);
es.submit(new Runnable(){//任务});
es.submit(new Runnable(){//任务});
…
es.shutdown();
实现Runnable和实现Callable的区别?
实现Callable接口,任务可以有返回值,Runnable没有。
实现Callable接口,可以指定泛型,Runnable没有。
实现Callable接口,可以在call方法中声明异常,Runnable没有。
Runnable和Thread二者的区别?
实现Runnable接口的方式,更适合处理有共享资源的情况。
实现Runnable接口的方式,避免了单继承的局限性。
Java自定义类加载器与双亲委派模型
==================
启动类加载器(Bootstrap)C++
扩展类加载器(Extension)Java
应用程序类加载器(AppClassLoader)Java
双亲委派模型工作原理:如果一个类加载器收到类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请
求委派给父类加载器完成。每个类加载器都是如此,只有当父加载器在自己的搜索范围内找不到指定的类时(即
ClassNotFoundException),子加载器才会尝试自己去加载。
讲讲jvm的组成与调优,内存模型,GC,tomcat调优
================================