美文网首页
SpringBoot面经

SpringBoot面经

作者: Jocelyn_b0e1 | 来源:发表于2019-03-14 23:40 被阅读0次

1. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring组件扫描。

2. 如何在 Spring Boot 启动的时候运行一些特定的代码?

可以实现ApplicationRunner 接口,run方法。

3. SpringBoot 实现热部署有哪几种方式?

主要有两种方式:

Spring Loaded
Spring-boot-devtools

4. Spring Boot 可以兼容老 Spring 项目吗,如何做?

可以兼容,使用 @ImportResource 注解导入老 Spring 项目配置文件。

5. 保护 Spring Boot 应用有哪些方法?

  1. 在生产中使用HTTPS。
  2. 使用Snyk检查你的依赖关系。
  3. 升级到最新版本。
  4. 启用CSRF(Cross-Site Request Forgery ,跨站点请求伪造)保护。
  5. 使用内容安全策略(contentSecurityPolicy)防止XSS攻击。http.headers()
    .contentSecurityPolicy(......);
  6. 使用OpenID Connect进行身份验证(这个不太懂)
  7. 管理密码?使用密码哈希!
  8. 安全地存储秘密

6. 阻塞与非阻塞,同步与异步

  1. 同步,就是我调用一个功能,该功能没有结束前,我死等结果。
  2. 异步,就是我调用一个功能,不需要知道该功能结果,该功能有结果后通知我(回调通知)
  3. 阻塞, 就是调用我(函数),我(函数)没有接收完数据或者没有得到结果之前,我不会返回。
  4. 非阻塞, 就是调用我(函数),我(函数)立即返回,通过select通知调用者

7. Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?

  1. 配置变更
  2. JDK 版本升级
  3. 第三方类库升级
    1).Spring Framework 5+
    2).Tomcat 8.5+
    3).Flyway 5+
    4).Hibernate 5.2+
    5).Thymeleaf 3+
  1. 响应式 Spring 编程支持:2.x 通过启动器和自动配置全面支持 Spring 的响应式编程,响应式编程是完全异步和非阻塞的,它是基于事件驱动模型,而不是传统的线程模型。
  2. HTTP/2 支持
  3. 配置属性绑定
  4. 更多改进与加强…

8. JPA 和 Hibernate 有哪些区别?

1.JPA 是一个规范或者接口
2.Hibernate 是 JPA 的一个实现
总的来说,JPA是规范,Hibernate是框架,JPA是持久化规范,而Hibernate实现了JPA。

9. Ioc:Inversion of Control,“控制反转”(一种设计思想)https://www.cnblogs.com/xdp-gacl/p/4249939.html

1)“控制”:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。
2)“反转”:传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

DI:依赖注入

IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。
Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。

AOP(Aspect Oriented Programming):面向切面编程

可以说是OOP(Object Oriented Programming)的补充和完善,OOP允许开发者定义纵向的关系,但并不适合定义横向的关系。比如日志功能往往横向遍布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。
AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

AOP中常用概念:
1)切面(Aspect):一个关注点的模块化,基于@Aspect注解的方式来实现。
2)连接点(Joinpoint):在Spring AOP中,一个连接点总是表示一个方法的执行。
3)通知(Advice):在切面的某个特定的连接点上执行的动作。其中包括了 “around”、 “before” 和“after”等不同类型的通知(通知的类型将在后面部分进行讨论)。许多AOP框架(包括Spring)都是以拦截器做通知模型,并维护一个以连接点为中心的拦截器链。
4)切入点(Pointcut):匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。

/**
*切入点表达式的格式:
*execution([可见性] 返回类型 [声明类型].方法名(参数) [异常])
**/
//e.g. 包名切面:
@Pointcut("execution(public * com.app.controller.*.*(..))")

5)引入(Introduction):
用来给一个类型声明额外的方法或属性(也被称为连接类型声明(inter-type declaration))。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用引入来使一个bean实现IsModified接口,以便简化缓存机制。
6)目标对象(Target Object):
被一个或者多个切面所通知的对象。也被称做被通知(advised)对象。既然Spring AOP是通过运行时代理实现的,这个对象永远是一个被代理(proxied)对象。
7)AOP代理(AOP Proxy):
AOP框架创建的对象,用来实现切面契约(例如通知方法执行等等)。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。
8)织入(Weaving):
把切面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象。这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。

相关文章

  • SpringBoot面经

    1. Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的? 启动类上面的注解是@SpringBoo...

  • Android面经| 问题归纳

    面经专题系列:Android面经| 问题归纳Android面经| 回顾展望Android面经| 算法题解 @[to...

  • 互联网产品经理面试问题汇总(18问)

    写在前面: 以下内容是根据自己看了很多面试经验之后的总结,包括百度面经,腾讯面经,新浪面经,360面经,搜狐面经,...

  • JAVA并发不会?怎么办,看这里!

    1. 金三银四第一天,啃透这些SpringBoot知识点,还怕干不赢面试官?2. 算法面经:谷歌,微软,阿里,腾讯...

  • 面经

    HTML 1.Doctype作用,标准模式与兼容模式的区别 声明位于html文档中的第一行,处...

  • 面经

    这两天又收到几个面试邀请,我想记录一下就这两天面试的心得体会。 先拿昨天下午的搜狐畅游来说吧,问的知识点还都很平常...

  • 面经

    作者:尘归土链接:https://www.nowcoder.com/discuss/101712来源:牛客网 计算...

  • 面经

    校招。迎来了面试机会。 面试官:电脑合上,演草纸(本来放在我这)也拿走。手一摊,简历翻来覆去。都懒得问我问题,敷衍...

  • 面经

    所谓面经,即面试经验,这里面包含了面什么?如何去面试以及面试别人?等等诸如此类的。百人计划第八次分享,老徐主要...

  • 面经

    2017/9/12滴滴一面,二面,三面技术面:1.对计算机网络的理解。比如对HTTP协议的理解,说一下HTTP1....

网友评论

      本文标题:SpringBoot面经

      本文链接:https://www.haomeiwen.com/subject/gvnhmqtx.html