【JavaGuide面试总结】Spring篇·中

32 篇文章 13 订阅
订阅专栏

1.谈谈自己对于 AOP 的了解

AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。

Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 Cglib 生成一个被代理对象的子类来作为代理


2.Spring AOP 和 AspectJ AOP 有什么区别?

Spring AOP 属于运行时增强,而 AspectJ 是编译时增强。 Spring AOP 基于代理,而 AspectJ 基于字节码操作

Spring AOP 已经集成了 AspectJ,Spring AOP的实现本质上使用的是AspectJ的注解🦉

如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择 AspectJ ,它比 Spring AOP 快很多。


3.AspectJ 定义的通知类型有哪些?

  • Before(前置通知):目标对象的方法调用之前触发
  • After (后置通知):目标对象的方法调用之后触发
  • AfterReturning(返回通知):目标对象的方法调用完成,在返回结果值之后触发
  • AfterThrowing(异常通知) :目标对象的方法运行中抛出 / 触发异常后触发。AfterReturning 和 AfterThrowing 两者互斥。如果方法调用成功无异常,则会有返回值;如果方法抛出了异常,则不会有返回值。
  • Around (环绕通知):编程式控制目标对象的方法调用。环绕通知是所有通知类型中可操作范围最大的一种,因为它可以直接拿到目标对象,以及要执行的方法,所以环绕通知可以任意的在目标对象的方法调用前后搞事,甚至不调用目标对象的方法

将上面的所有通知类型写入同一个切面中,它的执行顺序为:

在这里插入图片描述

代码演示:

@Aspect
@Component
public class SysTimeAspect {
    /**
     * 切入点
     */
    @Pointcut("bean(sysMenuServiceImpl)")
    public void doTime() {}

    @Before("doTime()")
    public void doBefore(JoinPoint jp) {
        System.out.println("time doBefore()");
    }
    
    @After("doTime()")
    public void doAfter() {  // 其实类似于finally{}代码块
        System.out.println("time doAfter()");
    }
    
    /**
     *  核心业务正常结束时执行
     *  说明:假如有after,先执行after,再执行returning
     */
    @AfterReturning("doTime()")
    public void doAfterReturning() {
        System.out.println("time doAfterReturning");
    }
    
    /**
     *  核心业务出现异常时执行
     *  说明:假如有after,先执行after,再执行Throwing
     */
    @AfterThrowing("doTime()")
    public void doAfterThrowing() {
        System.out.println("time doAfterThrowing");
    }
    
    @Around("doTime()")
    public Object doAround(ProceedingJoinPoint jp) throws Throwable {
        System.out.println("doAround.before");
        try {
	        Object obj=jp.proceed();
	        return obj;
        } catch(Throwable e) {
        	System.out.println("doAround.error-->"+e.getMessage());
        	throw e;
        } finally {
        	System.out.println("doAround.after");
        }
    }
}

4.Spring AOP多个切面的执行顺序如何控制?

  1. 通常使用@Order 注解直接定义切面顺序
// 值越小优先级越高
@Order(3)
@Component
@Aspect
public class LoggingAspect {
  1. 实现Ordered 接口重写 getOrder 方法
@Component
@Aspect
public class LoggingAspect implements Ordered {

    // ....

    @Override
    public int getOrder() {
        // 返回值越小优先级越高
        return 1;
    }
}

5.说说自己对于 Spring MVC 了解?

MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想是通过将业务逻辑、数据、显示分离来组织代码。

MVC 是一种设计模式,Spring MVC 是一款很优秀的 MVC 框架。Spring MVC 可以帮助我们进行更简洁的 Web 层的开发,并且它天生与 Spring 框架集成。Spring MVC 下我们一般把后端项目分为 Service 层(处理业务)、Dao 层(数据库操作)、Entity 层(实体类)、Controller 层(控制层,返回数据给前台页面)。


6.Spring MVC 的核心组件有哪些?

  • DispatcherServlet核心的中央处理器,负责接收请求、分发,并给予客户端响应。
  • HandlerMapping处理器映射器,根据 uri 去匹配查找能处理的 Handler ,并会将请求涉及到的拦截器和 Handler 一起封装。
  • HandlerAdapter处理器适配器,根据 HandlerMapping 找到的 Handler ,适配执行对应的 Handler
  • Handler请求处理器,处理实际请求的处理器。
  • ViewResolver视图解析器,根据 Handler 返回的逻辑视图 / 视图,解析并渲染真正的视图,并传递给 DispatcherServlet 响应客户端

7.SpringMVC 工作原理了解吗?

Spring MVC 原理如下图所示:

  1. 客户端(浏览器)发送请求, DispatcherServlet拦截请求。
  2. DispatcherServlet 根据请求信息调用 HandlerMappingHandlerMapping 根据 uri 去匹配查找能处理的 Handler(也就是我们平常说的 Controller 控制器) ,并会将请求涉及到的拦截器和 Handler 一起封装。
  3. DispatcherServlet 调用 HandlerAdapter适配执行 Handler
  4. Handler 完成对用户请求的处理后,会返回一个 ModelAndView 对象给DispatcherServletModelAndView 顾名思义,包含了数据模型以及相应的视图的信息。Model 是返回的数据对象,View 是个逻辑上的 View
  5. ViewResolver 会根据逻辑 View 查找实际的 View
  6. DispaterServlet 把返回的 Model 传给 View(视图渲染)。
  7. View 返回给请求者(浏览器)

8.统一异常处理怎么做?

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

@ControllerAdvice注解同样具有注册bean的功能!🐤

例子:

@ControllerAdvice
public class ExceptionController {
    /**
     * 数学运算异常和空指针异常的处理
     * @param e
     * @param model
     * @return fuck!
     */
    @ExceptionHandler(value = {ArithmeticException.class, NullPointerException.class})
    public String testExceptionHandler(Exception e, Model model) {
        model.addAttribute("e", e);
        return "fuck!";
    }
}

9.Spring 管理事务的方式有几种?

编程式事务 : 在代码中硬编码(不推荐使用) : 通过 TransactionTemplate或者 Transacti onManager 手动管理事务,实际应用中很少使用,但是对于你理解 Spring 事务管理原理有帮助。

声明式事务 : 在 XML 配置文件中配置或者直接基于注解(推荐使用) : 实际是通过 AOP 实现(基于@Transactional 的全注解方式使用最多)


10.Spring 事务中的隔离级别有哪几种?

TransactionDefinition 接口中定义了五个表示隔离级别的常量:

public interface TransactionDefinition {
    ......
    int ISOLATION_DEFAULT = -1;
    int ISOLATION_READ_UNCOMMITTED = 1;
    int ISOLATION_READ_COMMITTED = 2;
    int ISOLATION_REPEATABLE_READ = 4;
    int ISOLATION_SERIALIZABLE = 8;
    ......
}
  • TransactionDefinition.ISOLATION_DEFAULT :使用后端数据库默认的隔离级别,MySQL 默认采用的 REPEATABLE_READ 隔离级别(默认隔离级别)
  • TransactionDefinition.ISOLATION_READ_UNCOMMITTED :最低的隔离级别,使用这个隔离级别很少,因为它允许读取尚未提交的数据变更,*可能会导致脏读、幻读或不可重复读(读未提交)
  • TransactionDefinition.ISOLATION_READ_COMMITTED : 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生(读已提交)
  • TransactionDefinition.ISOLATION_REPEATABLE_READ : 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生
  • TransactionDefinition.ISOLATION_SERIALIZABLE : 最高的隔离级别,完全服从 ACID 的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
Spring 常见面试总结 | JavaGuide
JavaGuide
08-01 505
Spring是一款开源的轻量级Java开发框架,旨在提高开发人员的开发效率以及系统的可维护性。我们一般说Spring框架指的都是SpringFramework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发,比如说Spring支持IoC(InverseofControl控制反转)和AOP(Aspect-OrientedProgramming语言的流行通常需要一个杀手级的应用,Spring就是Java生态的一个杀手级的应用框架。https...
JavaGuide面试突击版v3.0.pdf
07-06
Java面试知识点总结 根据提供的文件信息,以下是Java面试相关的知识点总结Java基础 1. Java的基本概念:变量、数据类型、运算符、控制流语句、函数等 2. Java的基本语法:变量声明、赋值、运算符、控制流语句...
SpringMVC常见知识点总结
weixin_56781779的博客
07-21 196
SpringMVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级Web框架,MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想是通过将业务逻辑、数据、显示分离来组织代码,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。创建一个自定义注解:与创建接口类似,但自定义注解需要使用 @interface添加元注解信息,比如 @Target、@Retention、@Document、@Inherited 等。
JavaGuide面试总结SpringBoot
大河之犬的博客
02-04 892
很多时候我们需要将一些常用的配置信息比如阿里云 oss、发送短信、微信认证的相关配置信息等等放到配置文件。下面我们来看一下 Spring 为我们提供了哪些方式帮助我们从配置文件读取这些配置信息。方法时,如果数据是从数据库查询出来的,这里的权限和数据库保存一致即可,可以不加。格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。将请求的 body 的 json 字符串转换为 java 对象。这样我们的后端就可以直接把 json 格式的数据映射到我们的。一般用于类的属性上,作用和上面的。
JavaGuide面试总结Spring·
大河之犬的博客
02-01 452
Bean 代指的就是那些被 IoC 容器所管理的对象。我们需要告诉 IoC 容器帮助我们管理哪些对象,这个是通过配置元数据来定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。
JavaGuide面试总结Spring·
大河之犬的博客
02-03 201
事务属性可以理解成事务的一些基本配置,描述了事务策略如何应用到方法上。
SpringBoot 面试总结JavaGuide)
weixin_43806049的博客
10-29 2365
JavaGuide 复习 SpringBoot 时,找到一些面试题,没有答案,自己在网上找资料总结了一些,有些答案的来源比较杂忘了没有标注,望见谅。
面试总结(JavaGuide)
weixin_42061487的博客
08-20 5024
DispathcherServletHashMap的底层实现 JDK1.8之前 底层的实现是数组+链表 结合一起使用,也就是散列表 拉链法:创建一个链表数组,数组每一格就是一个链表。 若遇到哈希冲突,则将冲突的值写入到链表即可。(数组+链表) jdk1.8之后使用==(数组+红黑树)== 如何选用集合 主要根据集合的特点来选用,比如 我们需要根据键值获取到元素值时就选用 —> Map接口下的集合。 ​ 需要排序时选择 -----> TreeMap ​ 不需要排序选
JavaGuide面试总结】Mybatis·
大河之犬的博客
01-31 709
第二种是使用 sql 列的别名功能,将列别名书写为对象属性名,比如 T_NAME AS NAME,对象属性名一般是 name,小写,但是列名不区分大小写,MyBatis 会忽略列名大小写,智能找到与之对应对象属性名。分页插件的基本原理是使用 MyBatis 提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 sql,然后重写 sql,根据 dialect 方言,添加对应的物理分页语句和物理分页参数。接口,接口的全限名,就是映射文件的 namespace 的值,接口的方法名,就是映射文件
JavaGuide面试总结Java高级特性基础·
大河之犬的博客
01-10 794
被 static 修饰的成员属于类,不属于单个这个类的某个对象,被类所有对象共享,可以并且建议通过类名调用。静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。静态代码块定义在类方法外, 静态代码块在非静态代码块之前执行(静态代码块 —> 非静态代码块 —> 构造方法)。这两个关键字连用可以指定导入某个类的指定静态资源,并且不需要使用类名调用类静态成员,可以直接使用类静态成员变量和成员方法。
Java 面试总结.zip
12-31
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客上的面经及王道考研相关视频,并改进了其说法矛盾或含糊之处。 包含计算机网络知识、JavaSE、JVM、SpringSpringboot、SpringCloud、Mybatis、多...
Java常见面试问题总结.zip
12-31
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客上的面经及王道考研相关视频,并改进了其说法矛盾或含糊之处。 包含计算机网络知识、JavaSE、JVM、SpringSpringboot、SpringCloud、Mybatis、多...
java知识、面试总结.zip
12-31
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客上的面经及王道考研相关视频,并改进了其说法矛盾或含糊之处。 包含计算机网络知识、JavaSE、JVM、SpringSpringboot、SpringCloud、Mybatis、多...
JavaspringBoot、springCloud知识点整理;大厂面试总结。.zip
12-31
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客上的面经及王道考研相关视频,并改进了其说法矛盾或含糊之处。 包含计算机网络知识、JavaSE、JVM、SpringSpringboot、SpringCloud、Mybatis、多...
Spring IOC 控制反转(注解版)
Dreadnaught的博客
06-17 594
Spring 框架的核心概念之一就是控制反转(Inversion of Control,IoC)。IOC就是一种思想,而依赖注入(Dependency Injection, DI)是控制反转的一种实现方式。Spring本身是一个容器,存的是对象。对象这个词,在 Spring的范围内,称之为 Bean。控制反转(Inversion of Control,IoC)是一种设计原则,它将对象的创建和依赖关系的管理从程序代码解耦出来,交由框架或容器进行处理。
SpringBootWeb -入门了解 Apache POI 使用方法
最新发布
小扳手
06-17 798
简单来说就是,开源使用 POI 在 Java 程序对 Miscrosoft Office 各种文件进行读写操作。首先需要添加 POI 库的依赖,在前面写入 Excel 文件已经添加了,这里就没有必要继续添加依赖了。通过 new File("路径") Flie 对象作为参数来指定要读取的 Excel 文件。使用 XSSFWorkbook 创建 XLSX 格式的 Excel 文件。一般情况下, POI 都是用于操作 Excel 文件。根据索引或者名字来获取指定的 Sheet 对象。
SpringBoot+Maven项目的配置构建
weixin_72330417的博客
06-15 287
【代码】SpringBoot+Maven项目的配置构建。
基于springboot的青年公寓服务平台源码数据库
s123456sj的博客
06-16 1191
本青年公寓服务平台分为管理员还有用户两个权限,管理员可以管理用户的基本信息内容,可以管理房屋投诉信息以及房屋投诉的租赁信息,能够与用户进行相互交流等操作,用户可以查看房屋信息,可以查看房屋投诉以及查看管理员回复信息等操作。
面试SpringBoot和SpringCloud考点
07-28
回答: 在面试Spring Boot 和 Spring Cloud 是两个常见的考点。Spring Boot 是一个用于简化 Spring 应用程序开发的框架,它提供了大量的开箱即用的 Starter,使得开发人员可以快速搭建和部署应用程序。在面试,...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 史上最详细的sqlmap使用教程 48731
  • Tomcat安装配置及IDEA配置方法【亲测有效】 31689
  • fatal: unable to access ‘https://github.com/.../.git‘: Could not resolve host: github.com解决方法【亲测有效】 28444
  • HTML表格合并行和列 21960
  • Linux crontab 命令定时任务设置 19135

分类专栏

  • Code Audit 付费 23篇
  • 网络安全面试 付费 35篇
  • 渗透测试工具 付费 62篇
  • 软件工程 1篇
  • 前端技术 21篇
  • 计算机网络 20篇
  • Go 33篇
  • 网络安全专题 39篇
  • web安全 20篇
  • 漏洞复现
  • 安全杂项 6篇
  • 高级渗透 10篇
  • Python 16篇
  • 数据分析与爬虫 3篇
  • Django/Flask 18篇
  • MySQL 20篇
  • Redis 17篇
  • Java 7篇
  • JavaSE 53篇
  • JavaWeb 20篇
  • Mybatis 17篇
  • Spring 18篇
  • SpringBoot 22篇
  • Java面试题大全 32篇
  • 开发杂项 25篇
  • Linux & MacOS 34篇
  • Docker 13篇
  • HTML + CSS + JS 23篇

最新评论

  • Tomcat安装配置及IDEA配置方法【亲测有效】

    深海的大菠萝: 第三步>cd /d 切磁盘到bin文件下

  • HTTP参数污染漏洞

    CSDN-Ada助手: 不知道 网络 技能树是否可以帮到你:https://edu.csdn.net/skill/network?utm_source=AI_act_network

  • HTTP参数污染漏洞

    2401_84520055: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,期待博主持续带来更多好文【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • SSTI注入漏洞

    2401_85112041: 文章构思巧妙,结构紧凑,既有深度又有广度,读后让人受益匪浅,确实是一篇值得一读的佳作。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 命令执行漏洞

    咕咕爱说耳机: 优质好文,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

大家在看

  • 深入理解Linux权限模型:用户、组与ACL详解
  • (附源码)springboot健身私教课程预约及管理系统 毕业设计-96072 767
  • ArcGIS创建环状面矢量 112
  • 图片批量旋转怎么弄?这6种方法太实用了 348
  • uni-app实现扫码 667

最新文章

  • HTTP参数污染漏洞
  • 【攻击绕过】IP速率限制绕过
  • SSTI注入漏洞
2024
06月 7篇
05月 23篇
04月 11篇
03月 4篇
02月 8篇
01月 17篇
2023年224篇
2022年337篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世界尽头与你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳SEO优化公司龙岗关键词按天扣费吉祥设计网站罗湖SEO按效果付费盐田企业网站建设丹竹头网站优化排名石岩企业网站改版丹竹头百度关键词包年推广大芬seo网站优化坂田网站优化按天计费龙岗营销网站坪山百度爱采购光明企业网站制作大运外贸网站制作南联seo网站优化丹竹头企业网站制作龙岗SEO按天计费大浪网络广告推广龙华网站优化推广同乐网站推广方案丹竹头seo网站优化双龙seo网站推广布吉网络推广木棉湾模板制作观澜网络营销坪地外贸网站设计吉祥SEO按效果付费惠州至尊标王横岗网站排名优化民治百度竞价包年推广同乐推广网站歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化