阿里后台开发面试


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之间转换

你可能感兴趣的:(java后台开发,java)