1.问了一些基本信息
2.Springboot和ssm的区别 mybatis和hibernaters区别 传统的mvc jsp+servlet和ssm的区别 springjdbc和mybatis区别
https://www.zhihu.com/question/284488830/answer/439068110
https://www.cnblogs.com/XuanZP/p/11592846.html
mybatis做相对大型的系统,还是有一定优势的。比如sql重用,缓存的集成等。而且代码量也相对较小.
传统的mvc jsp+servlet耦合度搞 ssm可以解耦
3.问了java后台的想去哪些方向 hadoop
4.阻塞io和非阻塞iO 非阻塞IO怎么实现的
5.threadlocal是干什么的 咋实现的
6.synchronized和reentnlock的区别 volatile wait和notify wait和sleep的区别 synchronized和static synchronized区别
7.Hashmap和concurrenthashmap 后者怎么实现的
8.get和post的区别 本质的区别
get请求的特点:
1.GET请求能够被缓存
2.GET请求会保存在浏览器的浏览记录中
3.以GET请求的URL能够保存为浏览器书签
4.get传送的数据量较小,不能大于2KB。
5.GET请求主要用以获取数据
post请求的特点:
1.POST请求不能被缓存下来
2.POST请求不会保存在浏览器浏览记录中
3.以POST请求的URL无法保存为浏览器书签
4.post传送的数据量较大,一般被默认为不受限制
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
9.设计模式单例模式举个例子 spring哪些用到了单例模式 代理模式说一说
10.线程池 fixedthreadpool和cachedthreadpool的实现 有什么区别,
11.数据库引擎 innodb和myisam 区别 B+树和b树区别 索引 主从Mysql怎么保证数据一致性 分布式mysql怎么保证数据一致
12.常见排序算法 快速排序有什么优点和缺点
13.HTTP支持长连接吗。长连接和短连接 keepalive timeout http request response报文格式 一次完整的http请求的过程
14.实现AOP的几种方式 控制反转和依赖注入
代理模式静态的实现AOP
aspectj静态代理实现AOP
Spring知识点
Spring
什么是Spring
Spring是个包含一系列功能的合集,如快速开发的Spring Boot,支持微服务的Spring Cloud,支持认证与鉴权的Spring Security,Web框架Spring MVC。IOC与AOP依然是核心。
Spring MVC流程
发送请求——>DispatcherServlet拦截器拿到交给HandlerMapping
依次调用配置的拦截器,最后找到配置好的业务代码Handler并执行业务方法
包装成ModelAndView返回给ViewResolver解析器渲染页面
解决循环依赖
无参数构造器、字段注入
Bean的生命周期
Spring对Bean进行实例化
Spring将值和Bean的引用注入进Bean对应的属性中
容器通过Aware接口把容器信息注入Bean
BeanPostProcessor。进行进一步的构造,会在InitialzationBean前后执行对应方法,当前正在初始化的bean对象会被传递进来,我们就可以对这个bean作任何处理
InitializingBean。这一阶段也可以在bean正式构造完成前增加我们自定义的逻辑,但它与前置处理不同,由于该函数并不会把当前bean对象传进来,因此在这一步没办法处理对象本身,只能增加一些额外的逻辑。
DisposableBean。Bean将一直驻留在应用上下文中给应用使用,直到应用上下文被销毁,如果Bean实现了接口,Spring将调用它的destory方法
Bean的作用域
singleton:单例模式,Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象。
prototype:原型模式,每次通过Spring容器获取prototype定义的bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态。
request:在一次Http请求中,容器会返回该Bean的同一实例。而对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效。
session:在一次Http Session中,容器会返回该Bean的同一实例。而对不同的Session请求则会创建新的实例,该bean实例仅在当前Session内有效。
global Session:在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效。
IOC(DI)
控制反转
由 Spring IOC 容器来负责对象的生命周期和对象之间的关系。IoC 容器控制对象的创建,依赖对象的获取被反转了
没有 IoC 的时候我们都是在自己对象中主动去创建被依赖的对象,这是正转。但是有了 IoC 后,所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中,依赖的对象由原来的主动获取变成被动接受,所以是反转
依赖注入
组件之间依赖关系由容器在运行期决定,由容器动态的将某个依赖关系注入到组件之中,提升组件重用的频率、灵活、可扩展
通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现
注入方式:构造器注入、setter 方法注入、接口方式注入
Spring AOP
介绍
面向切面的编程,是一种编程技术,是OOP(面向对象编程)的补充和完善。OOP的执行是一种从上往下的流程,并没有从左到右的关系。因此在OOP编程中,会有大量的重复代码。而AOP则是将这些与业务无关的重复代码抽取出来,然后再嵌入到业务代码当中。常见的应用有:权限管理、日志、事务管理等。
实现方式
实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。Spring AOP实现用的是动态代理的方式。
Spring AOP使用的动态代理原理
jdk反射:通过反射机制生成代理类的字节码文件,调用具体方法前调用InvokeHandler来处理
cglib工具:利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理
如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
如果目标对象实现了接口,可以强制使用CGLIB实现AOP
如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换