【重磅来袭】这绝对是全网最全的Springboot面试题

前言

长期整合常面试考点,喜欢的可以收藏。Java面试题目大纲导航

正文

Spring Boot 几乎是微服务中最好的 Java 框架. 本文不仅仅只是Spring Boot的面试题,而是构架地整理出Spring Boot的知识体系,让你能够更好的使用它,并且本文将会持续更新。 【版权所有,文章不得已任何形式转载】。

由于Spring boot所涉及的知识面非常广。我归纳5个分类进行知识整合
【重磅来袭】这绝对是全网最全的Springboot面试题_第1张图片

文章目录

  • 前言
  • 正文
  • A、基础
    • 题目
      • 1、什么是springboot
      • 2、Springboot 有哪些优点?
      • 3、Spring Boot、Spring MVC 和 Spring 有什么区别?
      • 4、Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?
      • 5、Spring Boot 的配置文件有哪几种格式?它们有什么区别?
      • 6、什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?
      • 7、什么是 Spring Boot Stater ?
      • 8、当 Spring Boot 应用程序作为 Java 应用程序运行时,后台会发生什么?
      • 9.Spring-boot-starter-parent 有什么用 ?
    • 经典问题
      • 1、Spring Boot 自动配置原理(必须掌握,高频面试题)
    • 其他链接
      • 1、【阿里技术】目前为止全网最全的 SpringBoot 参数传递方案
  • B、注解
    • 题目
      • 1、注解详解
      • 2、注解列表如下
      • 3、JPA注解
      • 4、springMVC相关注解
      • 5、全局异常处理
      • 6、项目中具体配置解析和使用环境
    • 其他链接
      • 1、JAVA 注解的基本原理
  • C、核心知识
    • 题目
      • 1、 市场上有哪些日志框架?Spring Boot 支持哪些日志框架?推荐的日志框架是哪个?
      • 2、如何在 Spring Boot 启动的时候运行一些特定的代码?
      • 3、Spring Boot 如何定义多套不同环境配置?
      • 4、RequestMapping 和 GetMapping 的不同之处在哪里?
      • 5、什么是 Thymeleaf?
      • 6、什么是 Swagger?
      • 7、Spring Boot中的监视器是什么?
      • 8、如何实现Spring Boot应用程序的安全性?
      • 9、 比较一下 Spring Security 和 Shiro 各自的优缺点 ?
      • 10、Spring Boot 中如何解决跨域问题 ?
    • 其他链接
      • 1、springboot资源初始化的几种方式
      • 2、idea配置springBoot多环境
      • 3、Thymeleaf教程
      • 4、swagger2 注解说明
      • 5、SpringBoot健康检查实现原理
  • D、 数据访问
    • 题目
      • 1、JPA 和 Hibernate 有哪些区别?
      • 2、springboot怎么连接mysql
      • 3、spring boot怎么 集成mybatis连接oracle
      • 4、Druid是什么?有没有配置过druid连接池?
      • 5、Spring Boot中如何使用事务
      • 6.Mysql隔离级别和传播行为
    • 其他链接
      • 1、JPA和Hibernate到底是什么关系???
      • 2.Mysql 的事务隔离级别
      • 3、SpringBoot事务的控制
  • E、部署、测试、监控
      • 1、如何重新加载Spring Boot上的更改,而无需重新启动服务器?
      • 2、运行 Spring Boot 有哪几种方式?
      • 3、 如何使用 Spring Boot 生成一个 WAR 文件?
      • 4、如何使用 Spring Boot 部署到不同的服务器?
      • 5、Spring Boot 需要独立的容器运行吗?
      • 6、运行 Spring Boot 有哪几种方式?
      • 7、 SpringBoot 实现热部署有哪几种方式?
    • 其他链接
      • IDEA中如何将Web项目导出成war包形式
  • Springboot优秀源码收藏
    • mall
    • Cloud-Platform
    • 微人事
    • spring-boot-pay
    • spring-boot-seckill
    • V 部落
    • springboot-plus
    • litemall
    • jeeSpringCloud
    • NiceFish
    • zscat_sw
    • Roses

A、基础

题目

1、什么是springboot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Spring Boot其实就是一个整合很多可插拔的组件(框架),内嵌了使用工具(比如内嵌了Tomcat、Jetty等),方便开发人员快速搭建和开发的一个框架。

2、Springboot 有哪些优点?

取自官网Spring Boot的描述

  • Create stand-alone Spring applications
    创建独立的Spring应用程序
  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)
    直接嵌入Tomcat,Jetty或Undertow无需部署WAR文件
  • Provide opinionated ‘starter’ dependencies to simplify your build configuration
    提供自以为是的“入门”依赖项,以简化构建配置
  • Automatically configure Spring and 3rd party libraries whenever possible
    尽可能自动配置Spring和3rd Party库
  • Provide production-ready features such as metrics, health checks, and externalized configuration
    提供可用于生产的功能,例如指标,运行状况检查和外部化配置
  • Absolutely no code generation and no requirement for XML configuration
    完全没有代码生成,也不需要XML配置

3、Spring Boot、Spring MVC 和 Spring 有什么区别?

  • Spring

    Spring最重要的特征是依赖注入。所有 SpringModules(多模块) 不是依赖注入就是 IOC 控制反转。
    当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。

  • SpringMVC

    Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 Web 应用将会变的非常简单。

  • Spring Boot

    Spring 和 SpringMVC 的问题在于需要配置大量的参数。
    Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。

    相关博文 Spring&Spring MVC&Spring Boot三者之间的区别与联系

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

  • SpringBoot 2基于Spring5和JDK8,而Spring 1x则用的是低版本

  • MVC部分,WebMvcConfiguer,由抽象类改为接口,这是因为JDK8对接口有新的支持形式;视图渲染Freemaker视图解析器也有改动,默认情况下,它会自动加上ftl来来寻找模板

  • 统一错误处理,基类AbstarctErrorController也改动非常大

  • JPA中,findById 返回了一个Optional对象,改动较大,会直接影响所有业务代码

  • SpringBoot配置,web应用的ContextPath 配置属性已经改动,

  • 配置文件的中文可以直接读取,而不需要转码

  • 自动装配里Boot提供的JavaVersion类报名改动了

  • Redis,见博客springboot2.x 的 RedisCacheManager变化
    -Acutator变化很大,默认情况不再启用所有监控,需要定制化编写监控信息,完全需要重写,HealthIndicator,EndPoint同理

摘自博客 幽夜落雨SpringBoot 1.x和2.x区别记录

5、Spring Boot 的配置文件有哪几种格式?它们有什么区别?

  • properties
    properties语法传送门

  • yml

    正如YAML所表示的YAML Ain’t Markup Language,YAML
    是一种简洁的非标记语言,文件名后缀为yml,java中经常用它描述配置文件application.yml。YAML以数据为中心,比json/xml等更适合做配置文件。使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。

    YAML有以下基本规则:

    • 大小写敏感
    • 使用缩进表示层级关系
    • 禁止使用tab缩进,只能使用空格键
    • 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
    • 使用#表示注释
    • 字符串可以不用引号标注

正常的情况是先加载yml,接下来加载properties文件。如果相同的配置存 在于两个文件中。最后会使用properties中的配置。最后读取的优先集最高。两个配置文件中的端口号不一样会读取properties中的端口号。

6、什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?

思考一下在你的虚拟机上部署应用程序需要些什么。
第一步:安装 Java
第二步:安装 Web 或者是应用程序的服务(Tomat/Wbesphere/Weblogic 等等)
第三步:部署应用程序 war 包
如果我们想简化这些步骤,应该如何做呢?
让我们来思考如何使服务器成为应用程序的一部分?
你只需要一个安装了 Java 的虚拟机,就可以直接在上面部署应用程序了,
这个想法是嵌入式服务器的起源。

当我们创建一个可以部署的应用程序的时候,我们将会把服务器(例如,tomcat)嵌入到可部署的服务器中。

例如,对于一个 Spring Boot 应用程序来说,你可以生成一个包含 Embedded Tomcat 的应用程序
jar。你就可以想运行正常 Java 应用程序一样来运行 web 应用程序了。

嵌入式服务器就是我们的可执行单元包含服务器的二进制文件(例如,tomcat.jar)。

7、什么是 Spring Boot Stater ?

Spring boot之所以流行,是因为Spring starter。
Spring starter是Spring boot的核心,可以理解为一个可拔插式的插件,例如,你想使用Reids插件,那么可以使用spring-boot-starter-redis;如果想使用MongoDB,可以使用spring-boot-starter-data-mongodb。
如果我要使用redis,我直接引入redis驱动jar包就行了,何必要引入starter包?starter和普通jar包的区别在于它能够实现自动配置,和Spring Boot无缝衔接,从而节省我们大量开发时间。

拓展链接 SpringBoot应用篇(一):自定义starter

8、当 Spring Boot 应用程序作为 Java 应用程序运行时,后台会发生什么?

如果你使用 Eclipse IDE,Eclipse maven 插件确保依赖项或者类文件的改变一经添加,就会被编译并在目标文件中准备好!在这之后,就和其它的 Java 应用程序一样了。
当你启动 java 应用程序的时候,spring boot 自动配置文件就会魔法般的启用了。
当 Spring Boot 应用程序检测到你正在开发一个 web 应用程序的时候,它就会启动 tomcat。

9.Spring-boot-starter-parent 有什么用 ?

  • 通过spring initializr,我们可以快速构建一个springboot应用,如果你选择的是Maven来管理项目,在默认的pom文件中有这么一个section:

    • 	<parent>
      	    <groupId>org.springframework.boot</groupId>
      	    <artifactId>spring-boot-starter-parent</artifactId>
      	    <version>2.1.1.RELEASE</version>
      	</parent>
      
      
  • 它表示当前pom文件从spring-boot-starter-parent继承下来,在spring-boot-starter-parent中提供了很多默认的配置,这些配置可以大大简化我们的开发。

    • Parent Poms Features
      通过继承spring-boot-starter-parent,默认具备了如下功能:
      1.Java版本(Java8)
      2.源码的文件编码方式(UTF-8)
      3.依赖管理
      4.打包支持
      5.动态识别资源
      6.识别插件配置
      7.识别不同的配置,
      如:application-dev.properties 和 application-dev.yml
      以上继承来的特性有的并非直接继承自spring-boot-starter-parent而是继承自spring-boot-starter-parent的父级spring-boot-dependencies需要特别说明的是
      application-dev.properties 和 application-dev.yml支持spring风格的占位符(${…​}),但是Maven项目把对占位符的支持改为(@…@),可以通过设置Maven属性resource.delimiter来重置回去。

  • 继承spring-boot-starter-parent后,大大简化了我们的配置,它提供了丰富的常用的默认的依赖的版本定义,我们就不需要再次指定版本号:

    • <dependencies>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
      </dependencies>
      
  • 假设我们需要定制自己的版本号,可以通过下面的方式重写

    •    <properties>
             <spring-data-releasetrain.version>
             Fowler-SR2
             </spring-data-releasetrain.version>
         </properties>
      
      

经典问题

1、Spring Boot 自动配置原理(必须掌握,高频面试题)

Spring Boot面试杀手锏————自动配置原理
这样讲 SpringBoot 自动配置原理,你应该能明白了吧

其他链接

1、【阿里技术】目前为止全网最全的 SpringBoot 参数传递方案

【阿里技术】目前为止全网最全的 SpringBoot 参数传递方案

B、注解

这部分注解摘自文章SpringBoot注解最全详解(整合超详细版本)
使用注解的优势:
1.采用纯java代码,不在需要配置繁杂的xml文件
2.在配置中也可享受面向对象带来的好处
3.类型安全对重构可以提供良好的支持
4.减少复杂配置文件的同时亦能享受到SpringIOC容器提供的功能

后面我会给每一个注解编写一个Demo场景,需要的可以先收藏一下

题目

1、注解详解

  • @SpringBootApplication

    申明让Spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。

  • @ResponseBody

    表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@esponsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。

  • @Controller

    用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。

  • @RestController

    用于标注控制层组件(如struts中的action),@ResponseBody和@Controller的合集

  • @RequestMapping

    提供路由信息,负责URL到Controller中的具体函数的映射。

  • @EnableAutoConfiguration

    尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库”。你可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。

  • @ComponentScan:

    表示将该类自动发现扫描组件。个人理解相当于,如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用- @ComponentScan注解搜索beans,并结合@Autowired注解导入。如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。

  • @Configuration

    相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用

  • @ImportResource

    注解加载xml配置文件。

  • @Import

    用来导入其他配置类。

  • @ImportResource

    用来加载xml配置文件。

  • @Autowired

    自动导入依赖的bean

  • @Service

    一般用于修饰service层的组件

  • @Repository

    使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

  • @Bean

    用@Bean标注方法等价于XML中配置的bean。

  • @Value

    注入Spring boot application.properties配置的属性的值。

  • @Inject

    等价于默认的@Autowired,只是没有required属性;

  • @Component

    泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

  • @Bean

    相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。

  • @AutoWired

    自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。

  • @Qualifier

    当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者

  • @Resource(name=”name”,type=”type”)

    没有括号内内容的话,默认byName。与@Autowired干类似的事。

2、注解列表如下

  • @SpringBootApplication

    包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan:让spring Boot扫描到Configuration类并把它加入到程序上下文。

  • @Configuration

    等同于spring的XML配置文件;使用Java代码可以检查类型安全。

  • @EnableAutoConfiguration

    自动配置。

  • @ComponentScan

    组件扫描,可自动发现和装配一些Bean。

  • @Component

    可配合CommandLineRunner使用,在程序启动后执行一些基础任务。

  • @RestController

    注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。

  • @Autowired

    自动导入。

  • @PathVariable

    获取参数。

  • @JsonBackReference

    解决嵌套外链问题。

  • @RepositoryRestResourcepublic

    配合spring-boot-starter-data-rest使用。

3、JPA注解

  • @Entity

@Table(name=”“):表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略

  • @MappedSuperClass

用在确定是父类的entity上。父类的属性子类可以继承。

  • @NoRepositoryBean

一般用作父类的repository,有这个注解,spring不会去实例化该repository。

  • @Column

如果字段名与列名相同,则可以省略。

  • @Id

表示该属性为主键。

  • @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”)

表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。

  • @SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1)

name为sequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。

  • @Transient

表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。@Basic(fetch=FetchType.LAZY)
标记可以指定实体属性的加载方式

  • @JsonIgnore

作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。

  • @JoinColumn(name=”loginId”)

一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。

  • @OneToOne、@OneToMany、@ManyToOne

对应hibernate配置文件中的一对一,一对多,多对一。

4、springMVC相关注解

  • @RequestMapping
    @RequestMapping(“/path”)表

    示该控制器处理所有“/path”的UR L请求。RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。
    用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
    该注解有六个属性:

    • params:指定request中必须包含某些参数值是,才让该方法处理。
    • headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
    • value:指定请求的实际地址,指定的地址可以是URI Template 模式
    • method:指定请求的method类型, GET、POST、PUT、DELETE等
    • consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
    • produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回>
  • @RequestParam

    用在方法的参数前面。>

  • @PathVariable

    路径变量。>

5、全局异常处理

  • @ControllerAdvice

    包含@Component。可以被扫描到。统一处理异常。

  • @ExceptionHandler(Exception.class)

    用在方法上面表示遇到这个异常就执行以下方法。

6、项目中具体配置解析和使用环境

  • @MappedSuperclass:

    1.@MappedSuperclass 注解使用在父类上面,是用来标识父类的
    2.@MappedSuperclass 标识的类表示其不能映射到数据库表,因为其不是一个完整的实体类,但是它所拥有的属性能够映射在其子类对用的数据库表中
    3.@MappedSuperclass 标识的类不能再有@Entity或@Table注解

  • @Column:

    1.当实体的属性与其映射的数据库表的列不同名时需要使用@Column标注说明,该属性通常置于实体的属性声明语句之前,还可与 @Id 标注一起使用。
    2.@Column 标注的常用属性是name,用于设置映射数据库表的列名。此外,该标注还包含其它多个属性,如:unique、nullable、length、precision等。具体如下:

    • 1 name属性
      定义了被标注字段在数据库表中所对应字段的名称

    • 2 unique属性
      表示该字段是否为唯一标识,默认为false,如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table注解中的@UniqueConstraint

    • 3 nullable属性
      表示该字段是否可以为null值,默认为true

    • 4 insertable属性
      insertable属性表示在使用”INSERT”语句插入数据时,是否需要插入该字段的值

    • 5 updateable属性
      表示在使用”UPDATE”语句插入数据时,是否需要更新该字段的值

    • 6 insertable和updateable属性
      一般多用于只读的属性,例如主键和外键等,这些字段通常是自动生成的

    • 7 columnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用,如果数据库中表已经建好,该属性没有必要使用

    • 8 table属性
      定义了包含当前字段的表名

    • 9 length属性
      表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符

    • 10 precision属性和scale属性
      precision属性和scale属性一起表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数

      具体如下:
      1.double类型将在数据库中映射为double类型,precision和scale属性无效
      2.double类型若在columnDefinition属性中指定数字类型为decimal并指定精度,则最终以columnDefinition为准
      3.BigDecimal类型在数据库中映射为decimal类型,precision和scale属性有效
      4.precision和scale属性只在BigDecimal类型中有效

3.@Column 标注的columnDefinition属性:
表示该字段在数据库中的实际类型.通常 ORM 框架可以根据属性类型自动判断数据库中字段的类型,但是对于Date类型仍无法确定数据库中字段类型究竟是DATE,TIME还是TIMESTAMP.此外,String的默认映射类型为VARCHAR,如果要将String 类型映射到特定数据库的 BLOB 或TEXT字段类型.

4.@Column标注也可置于属性的getter方法之前
@Getter和@Setter(Lombok)

@Setter:注解在属性上;为属性提供 setting 方法 @Getter:注 解在属性上;为属性提供 getting 方法
@Data:注解在类上;提供类所有属性的 getting 和 setting方法,此外还提供了equals、canEqual、hashCode、toString 方法
@Setter:注解在属性上;为属性提供 setting 方法
@Getter:注解在属性上;为属性提供 getting 方法
@Log4j2 :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象,和@Log4j注解类似
@NoArgsConstructor:注解在类上;为类提供一个无参的构造方法
@AllArgsConstructor:注解在类上;为类提供一个全参的构造方法
@EqualsAndHashCode:默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。
@toString:生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。
@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
无参构造器、部分参数构造器、全参构造器,当我们需要重载多个构造器的时候,只能自己手写了
@NonNull:注解在属性上,如果注解了,就必须不能为Null
@val:注解在属性上,如果注解了,就是设置为final类型,可查看源码的注释知道

当你在执行各种持久化方法的时候,实体的状态会随之改变,状态的改变会引发不同的生命周期事件。这些事件可以使用不同的注释符来指示发生时的回调函数。
@javax.persistence.PostLoad:加载后。
@javax.persistence.PrePersist:持久化前。
@javax.persistence.PostPersist:持久化后。
@javax.persistence.PreUpdate:更新前。
@javax.persistence.PostUpdate:更新后。
@javax.persistence.PreRemove:删除前。
@javax.persistence.PostRemove:删除后。

  • 1)数据库查询
@PostLoad事件在下列情况下触发: 执行EntityManager.find()或getreference()方法载入一个实体后。 执行JPQL查询后。 EntityManager.refresh()方法被调用后。
  • 2)数据库插入
@PrePersist和@PostPersist事件在实体对象插入到数据库的过程中发生: @PrePersist事件在调用persist()方法后立刻发生,此时的数据还没有真正插入进数据库。 @PostPersist事件在数据已经插入进数据库后发生。
  • 3)数据库更新
@PreUpdate和@PostUpdate事件的触发由更新实体引起: @PreUpdate事件在实体的状态同步到数据库之前触发,此时的数据还没有真正更新到数据库。 @PostUpdate事件在实体的状态同步到数据库之后触发,同步在事务提交时发生。
  • 4)数据库删除
@PreRemove和@PostRemove事件的触发由删除实体引起: @PreRemove事件在实体从数据库删除之前触发,即在调用remove()方法删除时发生,此时的数据还没有真正从数据库中删除。 @PostRemove事件在实体从数据库中删除后触发。

其他链接

1、JAVA 注解的基本原理

JAVA 注解的基本原理

C、核心知识

题目

1、 市场上有哪些日志框架?Spring Boot 支持哪些日志框架?推荐的日志框架是哪个?

  • 日志框架

    市场上存在非常多的日志框架。JUL(java.util.logging),JCL(Apache Commons Logging),Log4j,Log4j2,Logback、SLF4j、jboss-logging等。 Spring Boot在框架内容部使用JCL,spring-boot-starter-logging采用了 slf4j+logback的形式,Spring Boot也能自动适配(jul、log4j2、logback)并简化配置。

    SpringBoot:底层是Spring框架,Spring框架默认是用JCL。
    SpringBoot选用 SLF4j和logback。

    左边选一个门面(抽象层)、右边来选一个实现。例如:日志门面: SLF4J; 日志实现:Logback。
    【重磅来袭】这绝对是全网最全的Springboot面试题_第2张图片

  • SLF4j使用

    以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法; 给系统里面导入slf4j的jar和 logback的实现jar

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
     
    public class HelloWorld {
      public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(HelloWorld.class);
        logger.info("Hello World");
      }
    }
    
    
    
  • SLF4j使用

    • 如何让系统中所有的日志都统一到slf4j

      1、将系统中其他日志框架先排除出去;
      2、用中间包来替换原有的日志框架;
      3、我们导入slf4j其他的实现

      添加依赖

              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-logging</artifactId>
              </dependency>
      

      底层依赖关系
      【重磅来袭】这绝对是全网最全的Springboot面试题_第3张图片

      总结:SpringBoot能自动适配所有的日志,而且底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉即可。

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

  • Runner启动器

    如果你想在Spring Boot启动的时候运行一些特定的代码,你可以实现接口 ApplicationRunner或者 CommandLineRunner,这两个接口实现方式一样,它们都只提供了一个run方法。
    • CommandLineRunner:启动获取命令行参数。

      public interface CommandLineRunner {
       
         /**
          * Callback used to run the bean.
          * @param args incoming main method arguments
          * @throws Exception on error
          */
         void run(String... args) throws Exception;
       
      }
      
    • ApplicationRunner:启动获取应用启动的时候参数。

      public interface ApplicationRunner {
       
         /**
          * Callback used to run the bean.
          * @param args incoming application arguments
          * @throws Exception on error
          */
         void run(ApplicationArguments args) throws Exception;
       
      }
      
  • 使用方式

    import org.springframework.boot.*
    import org.springframework.stereotype.*
     
    @Component
    public class MyBean implements CommandLineRunner {
     
       public void run(String... args) {
           // Do something...
       }
     
    }
    
    
  • 启动顺序

    如果启动的时候有多个ApplicationRunner和CommandLineRunner,想控制它们的启动顺序,可以实现 org.springframework.core.Ordered接口或者使用 org.springframework.core.annotation.Order注解。

3、Spring Boot 如何定义多套不同环境配置?

在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式。其中{profile}对应你的环境标识
比如:
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境

至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。

4、RequestMapping 和 GetMapping 的不同之处在哪里?

RequestMapping 具有类属性的,可以进行 GET,POST,PUT 或者其它的注释中具有的请求方法。GetMapping 是 GET 请求方法中的一个特例。它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度。

5、什么是 Thymeleaf?

  • 1.是什么

    简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。

  • 2.特性

    1.Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
    2.Thymeleaf 开箱即用的特性。它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
    3. Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。

3.文档

  • 官方教程:
    官网地址

6、什么是 Swagger?

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。
Swagger 也就是为了解决这个问题,当然也不能说 Swagger 就一定是完美的,当然也有缺点,最明显的就是代码植入性比较强

7、Spring Boot中的监视器是什么?

Spring boot actuator是spring启动框架中的重要功能之一。Spring boot监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。 有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为HTTP URL访问的REST端点来检查状态。

8、如何实现Spring Boot应用程序的安全性?

为了实现Spring Boot的安全性,我们使用 spring-boot-starter-security依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法。

9、 比较一下 Spring Security 和 Shiro 各自的优缺点 ?

由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:

  • Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架

  • Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单

  • Spring Security 功能强大;Shiro 功能简单

10、Spring Boot 中如何解决跨域问题 ?

跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。

@Configuration
public class CorsConfig implements WebMvcConfigurer {
 
 
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .maxAge(3600);
    }
 
 
}

其他链接

1、springboot资源初始化的几种方式

springboot资源初始化的几种方式

2、idea配置springBoot多环境

idea配置springBoot多环境

3、Thymeleaf教程

Spring Boot开发Web应用
Spring Boot学习记录(二)–thymeleaf模板

4、swagger2 注解说明

swagger2 注解说明

5、SpringBoot健康检查实现原理

SpringBoot健康检查实现原理

D、 数据访问

题目

1、JPA 和 Hibernate 有哪些区别?

JPA本身是一种规范,它的本质是一种ORM规范(不是ORM框架,因为JPA并未提供ORM实现,只是制定了规范)因为JPA是一种规范,所以,只是提供了一些相关的接口,但是接口并不能直接使用,JPA底层需要某种JPA实现,JPA现在就是Hibernate功能的一个子集
Hibernate 从3.2开始,就开始兼容JPA。Hibernate3.2获得了Sun TCK的 JPA(Java Persistence API) 兼容认证。JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现,并不是对标关系,借用下图可以看清楚他们之间的关系,Hibernate属于遵循JPA规范的一种实现,但是JPA是Hibernate遵循的规范之一,Hibernate还有其他实现的规范,所以它们的关系更像是JPA是一种做面条的规范,而Hibernate是一种遵循做面条的规范的汤面,他不仅遵循了做面条的规范,同时也会遵循做汤和调料的其他规范,他们之间并不是吃面条和吃米饭的关系
【重磅来袭】这绝对是全网最全的Springboot面试题_第4张图片

2、springboot怎么连接mysql

  • 添加所需的jar包

    引入jdbc支持
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    引入MySQL连接依赖包
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    在Springboot配置文件中配置数据源信息:
    
    我理解里application.properties文件和application.yml文件作用一致
    格式不一样,因此下面两种配置一个就ok.
    
  • application.properties:

    spring.datasource.url=jdbc:mysql://localhost:3306/hbeunews
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
  • application.yml:

    
    //Exmaple
    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/test
        username: root
        password: 123456
    

3、spring boot怎么 集成mybatis连接oracle

  • pom文件

    • <dependencies>
      	<dependency>
      		<groupId>org.springframework.boot</groupId>
      		<artifactId>spring-boot-starter-web</artifactId>
      	</dependency>
       
      	<dependency>
      		<groupId>org.springframework.boot</groupId>
      		<artifactId>spring-boot-starter-tomcat</artifactId>
      	</dependency>
      	<dependency>
      		<groupId>org.springframework.boot</groupId>
      		<artifactId>spring-boot-starter-test</artifactId>
      	</dependency>
      	<!-- springboot整合mybatis -->
      	<dependency>
      		<groupId>org.mybatis.spring.boot</groupId>
      		<artifactId>mybatis-spring-boot-starter</artifactId>
      		<version>1.3.2</version>
      	</dependency>
      	<!-- oracle驱动 -->
      	<dependency>
      		<groupId>com.oracle</groupId>
      		<artifactId>ojdbc7</artifactId>
      		<version>12.1.0.2</version>
      	</dependency>
      	<!-- 编译时自动生成实体类的setter,getter方法 -->
      	<dependency>
      		<groupId>org.projectlombok</groupId>
      		<artifactId>lombok</artifactId>
      	</dependency>
      </dependencies>
      
    • 2.创建application.properties
      • ######datasource
        spring.datasource.url=jdbc:oracle:thin:@192.168.184.129:1522:orcl
        spring.datasource.username=wyh
        spring.datasource.password=xxxx
        spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
        

4、Druid是什么?有没有配置过druid连接池?

druid为阿里巴巴的数据源,(数据库连接池),集合了c3p0、dbcp、proxool等连接池的优点,还加入了日志监控,有效的监控DB池连接和SQL的执行情况。
DRUID的DataSource类为:com.alibaba.druid.pool.DruidDataSource
配置传送门 Druid连接池的意义以及使用

5、Spring Boot中如何使用事务

Spring Boot实现事务特别特别简单,没有多余操作,一个注解@Transactional搞定

  • 依赖的Jar包pom.xml

    Spring Boot中实现事务没有额外的Jar包,还是基本的数据库访问包,比如mybatis

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.13</version>
    </dependency>
    
  • 注解事务@Transactional

    @Service
    public class PersonService {
        @Resource
        private PersonMapper personMapper;
    
        @Resource
        private CompanyMapper companyMapper;
    
        @Transactional(rollbackFor = {RuntimeException.class, Error.class})
        public void saveOne(Person person) {
            Company company = new Company();
            company.setName("tenmao:" + person.getName());
            companyMapper.insertOne(company);
            personMapper.insertOne(person);
        }
    }
    

    注解属性

    rollbackFor:触发回滚的异常,默认是RuntimeException和Error isolation:
    事务的隔离级别,默认是Isolation.DEFAULT也就是数据库自身的默认隔离级别,比如MySQL是ISOLATION_REPEATABLE_READ可重复读
    这样就可以了,不需要其他配置。
    ps:网络上还说要在@SpringBootApplication上添加注解@EnableTransactionManagement,已经不需要了

6.Mysql隔离级别和传播行为

  • 讲解场景的隔离级别

Serializable: 最严格,串行处理,消耗资源大
Repeatable Read:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据
Read Committed:大多数主流数据库的默认事务等级
Read Uncommitted:保证了读取过程中不会读取到非法数据。

  • 讲解常见的传播行为

PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务,最常见的选择。
PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起, 两个事务之间没有关系,一个异常,一个提交,不会同时回滚
PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常

  • Example

    service逻辑引入事务 @Transantional(propagation=Propagation.REQUIRED)

    @Override
    @Transactional 
    public int addAccount() {
        User user = new User();
        user.setAge(9);
        user.setCreateTime(new Date());
        user.setName("事务测试");
        user.setPhone("000121212");
        userMapper.insert(user);
        int a = 1/0;
        return user.getId();
    }
    
  • Transantional相关属性
    【重磅来袭】这绝对是全网最全的Springboot面试题_第5张图片
    引用
    SpringBoot(四、MyBatis,隔离级别,传播行为)

其他链接

1、JPA和Hibernate到底是什么关系???

JPA和Hibernate到底是什么关系???

2.Mysql 的事务隔离级别

真正理解Mysql的四种事务隔离级别

3、SpringBoot事务的控制

一起来学SpringBoot(八)事务的控制

E、部署、测试、监控

1、如何重新加载Spring Boot上的更改,而无需重新启动服务器?

Spring提供了一个名为 spring-boot-devtools 的模块,使Spring Boot应用支持热部署,提高开发效率,无需手动重启Spring Boot应用。

  • 一、配置pom.xml

    • 1)加载maven依赖

      <!--添加热部署-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
          <optional>true</optional>
          <scope>true</scope>
      </dependency>
      /***optional=true,依赖不会传递,该项目依赖devtools;
      之后依赖myboot项目的项目如果想要使用devtools,
      需要重新引入或者将optional,scope两行换成runtime**/
      
    • 2)开启热部署

      <!--热部署配置-->
      <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <configuration>
              <!--fork:如果没有该项配置,整个devtools不会起作用-->
              <fork>true</fork>
          </configuration>
      </plugin>
      
      
  • 二:配置IDEA

    • 1)设置IDEA的自动编译:

      “File”→“Settings(Ctrl+Alt+S)”→“Build, Execution, Deplyment”→“Compiler”,选中“Build project automatically” 打勾
    • 2)组合键 Shift+Ctrl+Alt+/

      选择 Registry ,找到compiler.automake.allow.when.app.running,选中打勾。

2、运行 Spring Boot 有哪几种方式?

  • 一:IDE 运行Application这个类的main方法
    二:在springboot的应用的根目录下运行mvn spring-boot:run
    三:使用mvn install 生成jar后运行
    先到项目根目录
    1.mvn install
    2.cd target
    3.java -jar xxxx.jar

3、 如何使用 Spring Boot 生成一个 WAR 文件?

摘自SpringBoot项目的创建和jar、war方式的部署

  • Springboot 和我们之前学习的web 应用程序不一样,其本质上是一个 Java 应用程序,那么又如何部署呢?
    通常来说,Springboot 部署会采用两种方式:全部打包成一个jar,或者打包成一个war。

    • jar部署方式

      • 首先,打开cmd,进入刚刚创建项目时的项目目录执行
        mvn install

      • 显示BUILD SUCCESS,这样说明打包成功,这样会在项目…\target目录下生成一个jar文件

      • 启动这个jar 命令: java -jar xxx.jar

    • war部署方式

      • 第一步:修改SpringbootApplication.java文件

      • 新加@ServletComponentScan注解,并且继承SpringBootServletInitializer 。
        【重磅来袭】这绝对是全网最全的Springboot面试题_第6张图片
        在pom.xml文件中也要修改一些代码【重磅来袭】这绝对是全网最全的Springboot面试题_第7张图片
        添加依赖【重磅来袭】这绝对是全网最全的Springboot面试题_第8张图片
        进入项目目录执行 mvn clean package
        BUILD SUCCESS 成功,则会在target目录下生成一个xxx.war文件文件
        复制该文件到Tomcat的webapps目录下,并将其文件名修改为ROOT.war
        ROOT.war 并不是指访问的时候要使用 /ROOT/hello ,而是直接使用/hello 进行访问,ROOT表示根路径。
        运行tomcat下的 bin目录里的startup.bat, 然后就可以启动了.

4、如何使用 Spring Boot 部署到不同的服务器?

1、以jar文件运行
2、以war方式部署

由于篇幅比较长,链接如下 部署springboot项目到云服务器的两种方式(jar+war)

5、Spring Boot 需要独立的容器运行吗?

可以不需要,内置了 Tomcat/ Jetty 等容器。

6、运行 Spring Boot 有哪几种方式?

1)打包用命令或者放到容器中运行
2)用 Maven/ Gradle 插件运行
3)直接执行 main 方法运行

7、 SpringBoot 实现热部署有哪几种方式?

  • 1、模板热部署

    在SpringBoot中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在application.properties中关闭模版引擎的缓存,如下:

    •     //Thymeleaf的配置:			
         spring.thymeleaf.cache=false			
          // FreeMarker的配置:			
         spring.freemarker.cache=false  			
         //Groovy的配置:			
         spring.groovy.template.cache=false		
         //Velocity的配置:			
         spring.velocity.cache=false
      
  • 2、使用调试模式Debug实现热部署

    此种方式为最简单最快速的一种热部署方式,运行系统时使用Debug模式,无需装任何插件即可,但是无发对配置文件,方法名称改变,增加类及方法进行热部署,使用范围有限。

  • 3、spring-boot-devtools
    在Spring Boot 项目中添加 spring-boot-devtools依赖即可实现页面和代码的热部署。如下:

    •   dependency>
        	<groupId>org.springframework.boot</groupId>
        	<artifactId>spring-boot-devtools</artifactId>
        </dependency>
      

    此种方式的特点是作用范围广,系统的任何变动包括配置文件修改、方法名称变化都能覆盖,但是后遗症也非常明显,它是采用文件变化后重启的策略来实现了,主要是节省了我们手动点击重启的时间,提高了实效性,在体验上回稍差。
    spring-boot-devtools 默认关闭了模版缓存,如果使用这种方式不用单独配置关闭模版缓存。

  • 4、Spring Loaded
    此种方式与Debug模式类似,适用范围有限,但是不依赖于Debug模式启动,通过Spring Loaded库文件启动,即可在正常模式下进行实时热部署。此种需要在 run confrgration 中进行配置。

  • 5、JRebel
    Jrebel是Java开发最好的热部署工具,对Spring Boot 提供了极佳的支持,JRebel为收费软件,试用期14天。,可直接通过插件安装。

其他链接

IDEA中如何将Web项目导出成war包形式

IDEA中如何将Web项目导出成war包形式

Springboot优秀源码收藏

摘自 开源的13个Spring Boot 优秀学习项目!超53K星,一网打尽!

mall

mall电商系统

  • mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

Cloud-Platform

  • Cloud-Platform

  • Cloud-Platform是国内首个基于Spring Cloud微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API 管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。 核心技术采用Spring Boot 2.1.2以及Spring Cloud (Greenwich.RELEASE) 相关核心组件,采用Nacos注册和配置中心,集成流量卫兵Sentinel,前端采用vue-element-admin组件。

微人事

  • 微人事

  • 微人事是一个前后端分离的人力资源管理系统,项目采用 SpringBoot + Vue 开发。权限管理相关的模块主要有两个,分别是 [系统管理->基础信息设置->权限组] 可以管理角色和资源的关系, [系统管理->操作员管理] 可以管理用户和角色的关系。另外,本项目也在不断的更新中,小伙伴们可以通过下方的更新记录查看最新完成的功能。

spring-boot-pay

  • spring-boot-pay
  • 这是一个支付案例,提供了包括支付宝、微信、银联在内的详细支付代码案例,对于有支付需求的小伙伴来说,这个项目再合适不过了。

spring-boot-seckill

  • spring-boot-seckill

  • 从0到1构建分布式秒杀系统,脱离案例讲架构都是耍流氓,SpringBoot开发案例从0到1构建分布式秒杀系统,项目案例基本成型,逐步完善中。

V 部落

  • VBlog
  • V部落是一个多用户博客管理平台,采用 Vue + SpringBoot开发

springboot-plus

  • springboot-plus
  • 一个基于SpringBoot 2 的管理后台系统,包含了用户管理,组织机构管理,角色管理,功能点管理,菜单管理,权限分配,数据权限分配,代码生成等功能 相比其他开源的后台系统,SpringBoot-Plus 具有一定的复杂度。系统基于Spring Boot2.1技术,前端采用了Layui2.4。
    数据库以MySQL/Oracle/Postgres/SQLServer为实例,理论上是跨数据库平台。

litemall

litemall

  • 一个商城项目,包括Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 + Vue用户移动端。
    小商城功能:首页、专题列表、专题详情、分类列表、分类详情、品牌列表、品牌详情、新品首发、人气推荐、优惠券列表、优惠券选择、团购(团购业务有待完善)、搜索、商品详情、商品评价、商品分享、购物车、下单、订单列表、订单详情、地址、收藏、足迹、意见反馈、客服;
    管理平台功能:会员管理、商城管理、商品管理、推广管理、系统管理、配置管理、统计报表。

jeeSpringCloud

  • jeeSpringCloud
  • 基于SpringBoot2.0的后台权限管理系统界面简洁美观敏捷开发系统架构。核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。 互联网云快速开发框架,微服务分布式代码生成的敏捷开发系统架构。项目代码简洁,注释丰富,上手容易,还同时集中分布式、微服务,同时包含许多基础模块和监控、服务模块。模块包括:定时任务调度、服务器监控、平台监控、平台设置、开发平台、单点登录、Redis分布式高速缓存、会员、营销、在线用户、日志、在线人数、访问次数、调用次数、直接集群、接口文档、生成模块、代码实例、安装视频、教程文档 代码生成(单表、主附表、树表、列表和表单、redis高速缓存对接代码、图表统计、地图统计、vue.js)、dubbo、springCloud、SpringBoot、mybatis、spring、springmvc。

NiceFish

  • NiceFish
  • NiceFish(美人鱼) 是一个系列项目,目标是示范前后端分离的开发模式:前端浏览器、移动端、Electron 环境中的各种开发模式;后端有两个版本:SpringBoot 版本和 SpringCloud 版本。

zscat_sw

  • zscat_sw
  • 基于springboot dubbo构建的一个商城项目,包括前端,后端和h5应用,小程序,作为zscat应用实践的模板项目。包含sso登录、API网关、流量控制、自定义协议包装、、自动crud、自动缓存、读写分离、分布式缓存、分布式定时任务、分布式锁、消息队列、事件机制、oauth2.0登录、全文搜索、集成qiniu文件服务、集成dubbo、集成springcboot等功能。

Roses

  • Roses
  • Roses基于Spring Boot 2和Spring Cloud Finchley.SR2,更符合企业级的分布式和服务化解决方案,Roses拥有高效率的开发体验,提供可靠消息最终一致性分布式事务解决方案,提供基于调用链的服务治理,提供可靠的服务异常定位方案(Log + Trace)等等,一个分布式框架不仅需要构建高效稳定的底层开发框架,更需要解决分布式带来的种种挑战!

十三、华夏ERP

  • 华夏ERP
  • 华夏ERP基于SpringBoot框架,立志为中小企业提供开源好用的ERP软件,目前专注进销存+财务功能。主要模块有零售管理、采购管理、销售管理、仓库管理、财务管理、报表查询、基础数据、系统管理等。支持预付款、收入支出、仓库调拨、组装拆卸、订单等特色功能。拥有库存状况、出入库统计等报表。同时对角色和权限进行了细致全面控制,精确到每个按钮和菜单。

你可能感兴趣的:(面试大厂真题)