Java面经之框架

1、spring 轻量化的Java开发框架 但是配置过于繁琐,springmvc是spring一个很重要的模块,主要赋予 Spring 快速构建 MVC 架构的 Web 程序的能力。Spring Boot 旨在简化 Spring 开发(减少配置文件,开箱即用!)。提供提供嵌入式 HTTP 服务器,如 Tomcat 和 Jetty,可以轻松地开发和测试 web应用程序  提供了多种插件,可以使用内置工具(如 Maven 和 Gradle)开发和测试 Spring Boot应用程序。

2、spring ioc  

ioc 控制反转,控制:指的是对象创建(实例化、管理)的权力         

反转:控制权交给外部环境(Spring 框架、IoC 容器)       

 IoC 容器是 Spring 用来实现 IoC 的载体 ioC 容器实际上就是个map,Map 中存放的是各种对象

  1. 3、 
  2. spring中将一个类声明成bean的注解  

注入Bean  @ Autowired 可以通过 @Qualifier 注解来显式指定名称

bean的线程安全问题  Bean是单例的话 如果这个 bean 是有状态的话,那就存在线程安全问题(有状态 Bean 是指包含可变的成员变量的对象)。

bean的生命周期

4、aop 把横切关注点(日志、权限、事务管理)分离出来,需要实现这个的地方进行添加增强 更有利于程序的可重用性  运行时增强、基于代理

如何进行aop切面编程呢 ? 先创建一个切面 ,写入需要执行的逻辑 即通知 和切入点,aop碰到目标对象有切入点进行拦截,然后由代理执行通知内容
spring循环依赖

5、声明式事务  @Transactional 注解默认回滚策略是只有在遇到RuntimeException(运行时异常) 或者 Error 时才会回滚事务,而不会回滚 Checked Exception(受检查异常)。受检查异常:必须在编译时处理或声明,代表外部环境错误或预期外情况。编译器会检查这类异常,确保它们被正确处理。

事务 原子性 一致性 隔离性 持久性

原子性 要么成功 要么失败 undo log(遇到异常进行回滚

隔离性 事务之间是隔离的 靠锁

持久性 一旦提交事务 数据是永久记录的 redo log来持久化数据

一致性 事务的目的

事务传播行为和隔离级别

  • 6、spring中 的设计模式  工厂模式、单例模式、代理模式

7、springboot常见面试题

√spring-boot-starter-parent 已经有很多默认的依赖  

自动装配 spring.factories定义了100+个入口的配置类。比如我们经常使用的redis、kafka等等这样常见的中间件都预置了配置类  starter就是做了一层封装,把相关要用到的jar都给包起来了,并且也写好了对应的版本。这我们使用的时候就不需要引入一堆jar包且管理版本类似的问题了。

√ 起步依赖 这个起步依赖会自动引入一组相关的依赖,包括Spring MVC、Jackson(用于JSON处理)和内嵌的Tomcat服务器等

内置tomcat 切换成jetty

再添加即可

√自动装配原理  自动装配可以简单理解为:通过注解或者一些简单的配置就能在 Spring Boot 的帮助下实现某块功能。  自动装配的核心功能通过@EnableAutoConfiguration注解和AutoConfigurationImportSelector类实现。selectImports方法从META-INF/spring.factories中加载所有可用的自动配置类,并根据@Conditional注解进行筛选,只有所有条件都满足时,自动配置类才会生效并被加载到IoC容器中,从而实现自动配置功能会生效

√ 自动配置 包扫描  其他配置类导入 

√常用配置文件  application.properties或者 application.yml

√参数校验 对值进行添加 @Null  @Email  @NotEmpty   验证请求体   @Valid @Validated

  

√全局异常处理  推荐使用注解的方式统一异常处理,具体会使用到 @ControllerAdvice + @ExceptionHandler 这两个注解 。

ControllerAdvice(basePackages = ""):该注解将该类声明为一个全局异常处理器,只会捕获和处理指定包中的控制器抛出的异常。

@ExceptionHandler({CommonException.class}):这个注解方法会捕获CommonException类型和其他类型的异常。

√定时任务 方法@scheduled 启动类上 @EnableScheduling

8、mybatis框架

JDBC操作过于繁琐 连接数据库 业务逻辑和数据库操作混在一起  设置参数获取结果集合都需要手动设置

mybatis 持久层框架  内部封装了JDBC 只需要关注sql语句,不用管创建连接、加载驱动这些烦心事          通过xml或则和注解两种方式配置sql语句

mybatis-config.xml中去设置数据库连接 加载sql文件  resources中是使用/建包的 而不是.

需要有一个usermapper  去写sql语句对应的mapper方法

同层次目录下去写usermapper.xml文件 去写sql语句,当然也可以在mapper文件用注解的方式去写sql语句 但是注解开发适合于简单的sql语句,复杂的还是选择用xml文件的形式

接下来就是去写测试文件,使用 mapper代理的方式

xml中的sql语句

指定对应mapper的位置

插入语句 id是这个sql的唯一标识 usergeneratedkeys是可以获取到keyproperty主键的值  

更新语句 <set>是动态sql的标签

删除语句 <foreach>是删除语句的动态sql标签 其中ids是遍历的数组集合 id是得到的元素 用,分隔

查询语句  <where>标签是查询语句对应的动态标签 <if>是做条件的拼接

select * from user where id=#{id} 

参数传递的时候用#{} 等同于JDBC里边的?  自动转义    可以防止sql注入

${} 参数传递的时候直接拼接 不做处理   动态传递 表名和列名不固定的情况下使用 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值