毕业季--Java框架常见面试题

简介: 毕业季--Java框架常见面试题

mybatis中取值方式有几种?各自的区别是什么?


#{}和${}的区别
1. #{}相当于sql语句的占位符,他的执行效率和安全性都比字符串拼接要好。
2. ${}相当于字符串拼接,更加灵活。可以应用在sql中的关键字。 select * from 表 order by ? 这个场景可以应用在${}上。

mybatis的一级缓存和二级缓存


1. mybatis中默认带了一级缓存,自动就使用了一级缓存。一级缓存是跟sqlSession相关的缓存。当我们使用同样的sqlSession去执行相同的查询sql那么一级缓存就会生效。一级缓存应用场景不多,几乎用不到。
2. mybatis的二级缓存不是默认打开的,需要我们手动设置开启二级缓存。二级缓存是跟SqlSessionFactory相关的缓存。只要是同一个sqlSessionFactory创建的sqlSession对象执行的sql语句都共用这个二级缓存。

谈谈对spring框架的理解。IOC和AOP


IOC的回答要点:
1. 底层原理。工厂模式
2. ioc的解释。
3. ioc的具体应用。如果是配置文件如何管理bean对象,如果是注解,有哪些注解。DI,给属性赋值。
4. ioc的好处
aop的回答要点:
1. 底层原理:代理模式。静态代理和动态代理。
2. aop的解释。面向切面编程。
3. 具体应用。spring中使用aop我们要怎么做。目标类,额外功能类(通知类),切入点,织入。
4. aop的好处。
5. aop的使用场景。性能的检测,事务的控制,日志的记录。

spring常见的注解有哪些?


组件注解:
​  @Controller @Service @Repository @Component @Bean @Configration @Scope
装配注解:
​  @Autowire @Resource @Value
aop注解:
​  @Aspect @Before @After @Pointcut @Transcational
Mvc注解:
​  @RestController @RequetMapping @PathVariable @RequestBody @RequestParam

SpringMVC处理理请求的流程


image.png

1. 客户端(浏览器)发送请求,直接请求到 DispatcherServlet。
2. DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。
3. 解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由 HandlerAdapter 适配器处理。
4. HandlerAdapter 会根据 Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。
5. 处理器处理完业务后,会返回一个 ModelAndView 对象,Model 是返回的数据对象,View 是个逻辑上的 View。
6. ViewResolver 会根据逻辑 View 查找实际的 View。
7. DispaterServlet 把返回的 Model 传给 View(视图渲染)。
8. 把 View 返回给请求者(浏览器)

springboot的starter机制。


在springboot的入口类上面有一个注解@SpringbootApplication,被分解成了三个非常重要的注解。
@SpringBootConfigration(配置类),@EnabledAutoConfigration(跟starter机制相关),@ComponentScanner(扫描当前包以及子包中的所有注解)
starter机制的注解会自动扫描第三方依赖中META-INF,spring.factories配置文件。这个配置文件中有个配置项指向了第三方依赖的配置类@Configration,在这个配置类中,第三方依赖会把要管理的对象都配置成@Bean注解。

spring创建对象的生命周期


1. 单例对象在spring容器创建的时候就会被创建出来,而多例的对象会在ac.getBean()的时候创建出对象。
2. spring会对对象的属性进行依赖的注入。
3. 执行BeanPostProcessor的前置处理。
4. 执行InitializingBean接口的初始化方法。
5. 执行bean标签中配置的init-method的初始化方法。
6. 执行BeanPostProcessor的后置处理的方法。
7. 到此整个bean对象创建完毕,我们就使用这个bean对象。
8. 在spring容器要销毁对象的时候,bean会执行销毁操作,先执行DisposableBean接口的销毁方法。
9. 执行配置在bean标签上面的destory-method的方法。

SpringBoot启动过程


image.png

a. 通过 SpringFactoriesLoader加载 META-INF/spring.factories文件读取里面的SpringFactoryRunListener配置,获取并创建 SpringApplicationRunListener对象
b. 然后由 SpringApplicationRunListener来发出 starting 消息。
c. 获取执行的命令行参数,并配置当前 SpringBoot 应用将要使用的 Environment,换句话说就是读取springboot项目外部的配置信息,也就是使用@PropertySource注解引入的外部配置。
d. 完成之后,依然由 SpringApplicationRunListener来发出 environmentPrepared 消息
e. 创建 ApplicationContext
f. 初始化 ApplicationContext,并设置 Environment,加载相关配置等
g. 由 SpringApplicationRunListener来发出 contextPrepared消息,告知SpringBoot 应用使用的 ApplicationContext已准备OK
h. 将各种 beans 装载入 ApplicationContext,继续由 SpringApplicationRunListener来发出 contextLoaded 消息,告知SpringBoot 应用使用的 ApplicationContext已装填OK
i. refresh ApplicationContext,完成IoC容器器可用的最后一步,这个过程就是创建出来了容器里面所有的组件。
j. 由 SpringApplicationRunListener来发出 started 消息
k. 完成最终的程序的启动
l. 由 SpringApplicationRunListener来发出 running 消息,告知程序已运行行起来了了

spring如何使用三级缓存解决循环依赖的问题。


当A对象依赖B对象,B对象又依赖A对象这时候就产生了循环依赖的问题。
一级缓存里面放的是spring创建的完整的对象,对象的各个属性都已经有值了。
二级缓存里面放的是spring刚创建的对象,这些对象的属性可能没有值。
三级缓存存放需要spring对象的动态代理的代码。当对象需要动态代理的时候通过三级缓存可以获取到代理对象。
相关文章
|
14小时前
|
Java
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
|
19小时前
|
算法 Java C++
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
|
1天前
|
设计模式 算法 Java
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
|
1天前
|
存储 网络协议 前端开发
es集群安装,邮储银行java面试
es集群安装,邮储银行java面试
|
1天前
|
消息中间件 JSON Java
十五,java高级程序员面试宝典
十五,java高级程序员面试宝典
|
1天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
1天前
|
消息中间件 Java Kafka
Java大文件排序(有手就能学会),kafka面试题2024
Java大文件排序(有手就能学会),kafka面试题2024
SpringJDK动态代理实现,2024Java面试真题精选干货整理
SpringJDK动态代理实现,2024Java面试真题精选干货整理
|
SQL 缓存 安全
Java高频面试题目
面试时面试官最常问的问题总结归纳!
103 0
JAVA高频面试题目集锦(6)
JAVA高频面试题目集锦(6)
106 0
JAVA高频面试题目集锦(6)