毕业季--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处理理请求的流程

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启动过程

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对象的动态代理的代码。当对象需要动态代理的时候通过三级缓存可以获取到代理对象。
相关文章
|
数据库
毕业季如何做好IT技术面试
毕业季如何做好IT技术面试
226 0
|
7月前
|
缓存 Java 数据库连接
毕业季--Java框架常见面试题
毕业季--Java框架常见面试题
|
7月前
|
算法 Java 程序员
阿里P8大佬终于把春招面试必备的神级Java面试手册给开源了!
先说说Java Java 作为国人编程开发语言中的 NO.1,已经占比半壁江山,选择入行做 IT 做编程开发的人,基本都把它作为首选语言,进大厂拿高薪也是大多数小伙伴们的梦想。 以前Java 岗位人才的空缺,而需求量又大,所以这种人才供不应求的现状,就是 Java 工程师的薪资待遇相对优厚的原因所在。 但是随着这个从事行业的人数逐渐增多,行业竞争也越来越大,招聘的企业和程序员们都想招聘到自己需要的人才/找到自己理想的岗位,国内大厂尤其是阿里招聘Java岗位居多,导致现在 Java 面试越来越难,内卷早就是大势所趋,万物皆可卷,卷的我们都见怪不怪了。 那么,阿里Java面试难度大吗?
|
7月前
|
存储 前端开发 算法
毕业季--JavaSE高级面试题
毕业季--JavaSE高级面试题
|
7月前
|
缓存 NoSQL Java
毕业季-Java分布式开发面试题
毕业季-Java分布式开发面试题
|
7月前
|
存储 Java 大数据
14道Java开发岗面试题
14道Java开发岗面试题
89 0
|
7月前
|
设计模式 算法 Java
腾讯Java高级岗180道面试真题,面试大厂拿45Koffer没问题!
一、数据结构与算法基础 · 说一下几种常见的排序算法和分别的复杂度。 · 用Java写一个冒泡排序算法 · 描述一下链式存储结构。 · 如何遍历一棵二叉树? · 倒排一个LinkedList。 · 用Java写一个递归遍历目录下面的所有文件。
|
消息中间件 算法 Java
阿里大牛亲码1222道Java岗面试真题!(2023全彩版)
金三银四跳槽季,相信很多铁汁这个时候或多或少都有在准备面试的。对于刚入行的或者应届生一般面试前都会刷题或者看面经,这样心里才会有底。但也有人说面试前刷题是很愚蠢的行为,浪费时间效果还不大。但LZ认为,存在即真理!也许在有些人面前,刷题看面经真的没什么用,但谁又不是从刷题刷面经过来的呢,面试前系统的刷题梳理一下知识点还是对面试很有帮助的!
|
消息中间件 Java 程序员
阿里大牛全新整理!金三银四面试题库+Java全栈笔记限时开源
说到面试跳槽,大家从当初入行开始就一直摆脱不开它(咱们就是通过不断跳槽才能更快地提升自己)。在我们的技术生涯中会有很多大大小小的面试,对我们程序员来说每一次面试都是一次提升的机会,不管是简历修改,还是面试表达技巧,都是我们每个程序员都需要具备的软实力。
|
SQL 算法 Java
[兔子私房课] Mybatis开发详解与项目实战02
大家好,本章主要讲解mybatisPlus的日志配置和ID生成策略!