精华内容
下载资源
问答
  • Spring Boot面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 17:48:42
    文章目录概述什么是 Spring BootSpring Boot 有哪些优点?Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?配置什么是 JavaConfig?Spring Boot 自动配置原理是什么?你如何理解 Spring Boot 配置加载...

    Java面试总结(2021优化版)已发布在个人微信公众号【技术人成长之路】,优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结,删除了低频问题,添加了一些常见面试题,对文章进行了精简优化,欢迎大家关注!😊😊

    【技术人成长之路】,助力技术人成长!更多精彩文章第一时间在公众号发布哦!

    文章目录

    Java面试总结汇总,整理了包括Java基础知识,集合容器,并发编程,JVM,常用开源框架Spring,MyBatis,数据库,中间件等,包含了作为一个Java工程师在面试中需要用到或者可能用到的绝大部分知识。欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。文章持续更新中…

    序号内容链接地址
    1Java基础知识面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104390612
    2Java集合容器面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104588551
    3Java异常面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104390689
    4并发编程面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104863992
    5JVM面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104390752
    6Spring面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104397516
    7Spring MVC面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104397427
    8Spring Boot面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104397299
    9Spring Cloud面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104397367
    10MyBatis面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/101292950
    11Redis面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/103522351
    12MySQL数据库面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104778621
    13消息中间件MQ与RabbitMQ面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104588612
    14Dubbo面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104390006
    15Linux面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104588679
    16Tomcat面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104397665
    17ZooKeeper面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104397719
    18Netty面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/104391081
    19架构设计&分布式&数据结构与算法面试题(2020最新版)https://thinkwon.blog.csdn.net/article/details/105870730

    概述

    什么是 Spring Boot?

    Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

    Spring Boot 有哪些优点?

    Spring Boot 主要有如下优点:

    1. 容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。
    2. 开箱即用,远离繁琐的配置。
    3. 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
    4. 没有代码生成,也不需要XML配置。
    5. 避免大量的 Maven 导入和各种版本冲突。

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

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

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

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

    @ComponentScan:Spring组件扫描。

    配置

    什么是 JavaConfig?

    Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯Java 方法。因此它有助于避免使用 XML 配置。使用 JavaConfig 的优点在于:

    (1)面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分利用 Java 中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean 方法等。

    (2)减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。

    (3)类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。

    Spring Boot 自动配置原理是什么?

    注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自动配置的核心,

    @EnableAutoConfiguration 给容器导入META-INF/spring.factories 里定义的自动配置类。

    筛选有效的自动配置类。

    每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能

    你如何理解 Spring Boot 配置加载顺序?

    在 Spring Boot 里面,可以使用以下几种方式来加载配置。

    1)properties文件;

    2)YAML文件;

    3)系统环境变量;

    4)命令行参数;

    等等……

    什么是 YAML?

    YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。

    YAML 配置的优势在哪里 ?

    YAML 现在可以算是非常流行的一种配置文件格式了,无论是前端还是后端,都可以见到 YAML 配置。那么 YAML 配置和传统的 properties 配置相比到底有哪些优势呢?

    1. 配置有序,在一些特殊的场景下,配置有序很关键
    2. 支持数组,数组中的元素可以是基本数据类型也可以是对象
    3. 简洁

    相比 properties 配置文件,YAML 还有一个缺点,就是不支持 @PropertySource 注解导入自定义的 YAML 配置。

    Spring Boot 是否可以使用 XML 配置 ?

    Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过 @ImportResource 注解可以引入一个 XML 配置。

    spring boot 核心配置文件是什么?bootstrap.properties 和 application.properties 有何区别 ?

    单纯做 Spring Boot 开发,可能不太容易遇到 bootstrap.properties 配置文件,但是在结合 Spring Cloud 时,这个配置就会经常遇到了,特别是在需要加载一些远程配置文件的时侯。

    spring boot 核心的两个配置文件:

    • bootstrap (. yml 或者 . properties):boostrap 由父 ApplicationContext 加载的,比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在 Spring Cloud Config 或者 Nacos 中会用到它。且 boostrap 里面的属性不能被覆盖;
    • application (. yml 或者 . properties): 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。

    什么是 Spring Profiles?

    Spring Profiles 允许用户根据配置文件(dev,test,prod 等)来注册 bean。因此,当应用程序在开发中运行时,只有某些 bean 可以加载,而在 PRODUCTION中,某些其他 bean 可以加载。假设我们的要求是 Swagger 文档仅适用于 QA 环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot 使得使用配置文件非常简单。

    如何在自定义端口上运行 Spring Boot 应用程序?

    为了在自定义端口上运行 Spring Boot 应用程序,您可以在application.properties 中指定端口。server.port = 8090

    安全

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

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

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

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

    1. Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
    2. Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
    3. Spring Security 功能强大;Shiro 功能简单

    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);
        }
    
    }
    

    项目中前后端分离部署,所以需要解决跨域的问题。
    我们使用cookie存放用户登录的信息,在spring拦截器进行权限控制,当权限不符合时,直接返回给用户固定的json结果。
    当用户登录以后,正常使用;当用户退出登录状态时或者token过期时,由于拦截器和跨域的顺序有问题,出现了跨域的现象。
    我们知道一个http请求,先走filter,到达servlet后才进行拦截器的处理,如果我们把cors放在filter里,就可以优先于权限拦截器执行。

    @Configuration
    public class CorsConfig {
    
        @Bean
        public CorsFilter corsFilter() {
            CorsConfiguration corsConfiguration = new CorsConfiguration();
            corsConfiguration.addAllowedOrigin("*");
            corsConfiguration.addAllowedHeader("*");
            corsConfiguration.addAllowedMethod("*");
            corsConfiguration.setAllowCredentials(true);
            UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
            urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
            return new CorsFilter(urlBasedCorsConfigurationSource);
        }
    
    }
    

    什么是 CSRF 攻击?

    CSRF 代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

    监视器

    Spring Boot 中的监视器是什么?

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

    如何在 Spring Boot 中禁用 Actuator 端点安全性?

    默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们。安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的。 我们可以使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

    我们如何监视所有 Spring Boot 微服务?

    Spring Boot 提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的知识点以了解其状态或健康状况。想象一下涉及 50 个应用程序的微服务,管理员将不得不击中所有 50 个应用程序的执行终端。为了帮助我们处理这种情况,我们将使用位于的开源项目。 它建立在 Spring Boot Actuator 之上,它提供了一个 Web UI,使我们能够可视化多个应用程序的度量。

    整合第三方项目

    什么是 WebSockets?

    WebSocket 是一种计算机通信协议,通过单个 TCP 连接提供全双工通信信道。

    1、WebSocket 是双向的 -使用 WebSocket 客户端或服务器可以发起消息发送。

    2、WebSocket 是全双工的 -客户端和服务器通信是相互独立的。

    3、单个 TCP 连接 -初始连接使用 HTTP,然后将此连接升级到基于套接字的连接。然后这个单一连接用于所有未来的通信

    4、Light -与 http 相比,WebSocket 消息数据交换要轻得多。

    什么是 Spring Data ?

    Spring Data 是 Spring 的一个子项目。用于简化数据库访问,支持NoSQL 和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。Spring Data 具有如下特点:

    SpringData 项目支持 NoSQL 存储:

    1. MongoDB (文档数据库)
    2. Neo4j(图形数据库)
    3. Redis(键/值存储)
    4. Hbase(列族数据库)

    SpringData 项目所支持的关系数据存储技术:

    1. JDBC
    2. JPA

    Spring Data Jpa 致力于减少数据访问层 (DAO) 的开发量. 开发者唯一要做的,就是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成!Spring Data JPA 通过规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻辑。

    什么是 Spring Batch?

    Spring Boot Batch 提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处理作业可以高度可扩展的方式利用框架处理重要大量的信息。

    什么是 FreeMarker 模板?

    FreeMarker 是一个基于 Java 的模板引擎,最初专注于使用 MVC 软件架构进行动态网页生成。使用 Freemarker 的主要优点是表示层和业务层的完全分离。程序员可以处理应用程序代码,而设计人员可以处理 html 页面设计。最后使用freemarker 可以将这些结合起来,给出最终的输出页面。

    如何集成 Spring Boot 和 ActiveMQ?

    对于集成 Spring Boot 和 ActiveMQ,我们使用依赖关系。 它只需要很少的配置,并且不需要样板代码。

    什么是 Apache Kafka?

    Apache Kafka 是一个分布式发布 - 订阅消息系统。它是一个可扩展的,容错的发布 - 订阅消息系统,它使我们能够构建分布式应用程序。这是一个 Apache 顶级项目。Kafka 适合离线和在线消息消费。

    什么是 Swagger?你用 Spring Boot 实现了它吗?

    Swagger 广泛用于可视化 API,使用 Swagger UI 为前端开发人员提供在线沙箱。Swagger 是用于生成 RESTful Web 服务的可视化表示的工具,规范和完整框架实现。它使文档能够以与服务器相同的速度更新。当通过 Swagger 正确定义时,消费者可以使用最少量的实现逻辑来理解远程服务并与其进行交互。因此,Swagger消除了调用服务时的猜测。

    前后端分离,如何维护接口文档 ?

    前后端分离开发日益流行,大部分情况下,我们都是通过 Spring Boot 做前后端分离开发,前后端分离一定会有接口文档,不然会前后端会深深陷入到扯皮中。一个比较笨的方法就是使用 word 或者 md 来维护接口文档,但是效率太低,接口一变,所有人手上的文档都得变。在 Spring Boot 中,这个问题常见的解决方案是 Swagger ,使用 Swagger 我们可以快速生成一个接口文档网站,接口一旦发生变化,文档就会自动更新,所有开发工程师访问这一个在线网站就可以获取到最新的接口文档,非常方便。

    其他

    如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?Spring Boot项目如何热部署?

    这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat 将重新启动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java 开发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools 模块完全满足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用程序。

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

    您使用了哪些 starter maven 依赖项?

    使用了下面的一些依赖项

    spring-boot-starter-activemq

    spring-boot-starter-security

    这有助于增加更少的依赖关系,并减少版本的冲突。

    Spring Boot 中的 starter 到底是什么 ?

    首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter

    spring-boot-starter-parent 有什么用 ?

    我们都知道,新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent ,spring-boot-starter-parent 主要有如下作用:

    1. 定义了 Java 编译版本为 1.8 。
    2. 使用 UTF-8 格式编码。
    3. 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
    4. 执行打包操作的配置。
    5. 自动化的资源过滤。
    6. 自动化的插件配置。
    7. 针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。

    Spring Boot 打成的 jar 和普通的 jar 有什么区别 ?

    Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行,这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。

    Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压后,在 \BOOT-INF\classes 目录下才是我们的代码,因此无法被直接引用。如果非要引用,可以在 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行,一个可引用。

    运行 Spring Boot 有哪几种方式?

    1)打包用命令或者放到容器中运行

    2)用 Maven/ Gradle 插件运行

    3)直接执行 main 方法运行

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

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

    开启 Spring Boot 特性有哪几种方式?

    1)继承spring-boot-starter-parent项目

    2)导入spring-boot-dependencies项目依赖

    如何使用 Spring Boot 实现异常处理?

    Spring 提供了一种使用 ControllerAdvice 处理异常的非常有用的方法。 我们通过实现一个 ControlerAdvice 类,来处理控制器类抛出的所有异常。

    如何使用 Spring Boot 实现分页和排序?

    使用 Spring Boot 实现分页非常简单。使用 Spring Data-JPA 可以实现将可分页的传递给存储库方法。

    微服务中如何实现 session 共享 ?

    在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。

    Spring Boot 中如何实现定时任务 ?

    定时任务也是一个常见的需求,Spring Boot 中对于定时任务的支持主要还是来自 Spring 框架。

    在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一个则是使用第三方框架 Quartz。

    使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。

    使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可。

    展开全文
  • Vue + Spring Boot 项目实战(一):项目简介

    万次阅读 多人点赞 2019-03-31 11:19:37
    白卷是一款使用 Vue+Spring Boot 开发的前后端分离项目,主要帮助 web 开发初学者通过实践方式打通各个环节的知识。

    logo


    GitHub 地址:https://github.com/Antabot/White-Jotter
    lisense

    教程目录

    第一部分

    Vue + Spring Boot 项目实战(一):项目简介
    Vue + Spring Boot 项目实战(二):搭建 Vue.js 项目
    Vue + Spring Boot 项目实战(三):前后端结合测试(登录页面开发)
    Vue + Spring Boot 项目实战(四):数据库的引入
    Vue + Spring Boot 项目实战(五):使用 Element 辅助前端开发
    Vue + Spring Boot 项目实战(六):前端路由与登录拦截器
    Vue + Spring Boot 项目实战(七):导航栏与图书页面设计
    Vue + Spring Boot 项目实战(八):数据库设计与增删改查
    Vue + Spring Boot 项目实战(九):核心功能的前端实现
    Vue + Spring Boot 项目实战(十):图片上传与项目的打包部署

    第二部分

    Vue + Spring Boot 项目实战(十一):用户角色权限管理模块设计
    Vue + Spring Boot 项目实战(十二):访问控制及其实现思路
    Vue + Spring Boot 项目实战(十三):使用 Shiro 实现用户信息加密与登录认证
    Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
    Vue + Spring Boot 项目实战(十五):动态加载后台菜单
    Vue + Spring Boot 项目实战(十六):功能级访问控制的实现
    Vue + Spring Boot 项目实战(十七):后台角色、权限与菜单分配
    Vue + Spring Boot 项目实战(十八):博客功能开发

    第三部分

    Vue + Spring Boot 项目实战(十九):Web 项目优化解决方案
    Vue + Spring Boot 项目实战(二十):前端优化实战
    Vue + Spring Boot 项目实战(二十一):缓存的应用

    开源精选

    Erupt Framework:开源神器,助你无需前端代码搞定企业级后台管理系统
    AntdFront: React 纯 Hook 多标签微前端管理系统解决方案

    前言

    之前写了一些关于 Java EE 的文章,主要是理论性质的,目的是帮助大家快速了解 Java EE 的核心内容,早日爬出这个陈旧又绕不开的坑,进入 Java Web 开发的新天地。当然只有理论是不够的,有很多细节需要在实践中理解,所以我决定做一个实践教程。

    这个项目十分简单,是一个纯粹为教程而生的原型,可以视为一个简陋的带后台的门户网站。所以学习时不用有什么压力,估计你们学的比我写的快很多。

    我的目标是根据这个教程,可以帮助 新入行的或是刚开始学习相关技术 的小伙伴们把一个完整的项目还原出来,建立起对前后端分离式 Web 开发的整体认知。

    一开始,我会尽量详细地描述开发的过程,帮助大家快速上手。随着项目进展,曾经讲到过的、比较容易搜索到的内容会适当省略。

    当然,每个人的理解方式不同,可能有些重要的细节没讲到位,欢迎大家在评论区提问。受限于个人水平,一定有很多说的不对的地方,大家理解一下,友善白嫖哈。

    一、项目概述

    这个项目我把它命名为 “白卷”,估摸着很多同学会拿它做课程设计之类,建议你们尽量加点自己的东西在里面,直接交白卷,你的良心不会痛吗?(狗头保命)

    开个玩笑,叫白卷是因为它随着教程进展逐渐完善,象征着知识的从无到有,从有到多。

    另外我还给它起了一个英文名字,叫 White Jotter(白色笔记本),纯粹是为了谐音。

    项目遵循敏捷开发原则,会根据大家反馈的意见整理出新的需求,动态扩展、调整、优化。初始阶段按照简单的分层架构设计,具体见下图:

    • 应用架构
      应用架构

    • 技术架构
      技术架构图

    项目需要在前后端之间不断穿梭,但在做教程的时候,我会尽量模块化地去讲解。

    此外,我把教程分为了几个阶段,是为了循序渐进、由易到难地讲解知识点。

    各个阶段的主要内容如下(随教程进展更新):

    (一)第一部分

    这个项目的第一部分以图书信息管理为示例,主要帮助大家理解以下内容:

    • 如何从 0 开始搭建 Web 项目?
    • 什么是前后端分离?如何实现前后端分离?
    • 单页面应用有哪些特点?
    • 如何在 Web 项目中使用数据库并利用网页实现增删改查?
    • 在开发中如何利用各种辅助手段?
    • Vue.js 的基本概念与用法
    • 简单的前端页面设计
    • 如何部署 Web 应用?

    各个页面的效果大致如下:

    登录页面
    登录页面
    首页
    首页
    图书馆页面
    图书馆

    (二)第二部分

    项目的第二部分是后台管理模块的开发,主要包括以下内容:

    • 后台管理模块的常见功能与布局(内容管理、用户\权限管理、运维监控)
    • 用户身份验证、授权、会话管理与信息加密存储
    • Shiro 框架的使用
    • 实现不同粒度的访问控制(动态菜单、功能控制、数据控制)
    • 结合内容管理,实现文章的编写与展示

    后台基本结构如下:
    在这里插入图片描述
    后台页面效果:

    Dashboard(from PanJiaChen / vue-element-admin)
    dashboard

    图书管理
    图书管理
    用户管理
    在这里插入图片描述
    笔记本页面效果:

    文章列表:
    笔记本
    文章详情:
    文章详情

    (三)第三部分

    第三部分是在前面的基础上,分析项目存在的不足,并对其进行由点及面的优化。

    当简单的优化无法达到我们想要的目的时,就需要从架构层面进行整体的升级改造,那就是下一套教程的事情了。

    (四)开源精选

    在做这个项目的过程中结识了一些小伙伴,他们凭借一腔热枕坚持为开源社区做贡献,开发出了许多优秀的项目。我打算在编写教程的同时穿插对这些项目的介绍,以便让更多朋友们了解这个群体,甚至加入到新兴项目的发展壮大过程中去。

    这里给读者们提供一个福利,如果你有拿的出手开源项目希望更多人知道,我可以无条件帮你推广,甚至文案也可以帮你修改,当然,前提是这个项目真的有价值。


    二、技术栈

    参考技术架构图,项目使用的主要技术如下:

    1.前端技术栈

    1.Vue.js
    2.ElementUI
    3.axios

    2.后端技术栈

    1.Spring Boot
    2.Apache Shiro
    3.Apache Log4j2
    4.Spring Data JPA
    5.Spring Data Redis

    3.数据库

    1.MySQL
    2.Redis

    在开发过程中还会不断用到一些新的技术,有必要的我会增添上去。

    三、主要参考内容

    下一篇:Vue + Spring Boot 项目实战(二):搭建 Vue.js 项目

    展开全文
  • 一、Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过...

    一、Spring Boot简介

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。SpringMVC是非常伟大的框架,开源,发展迅速。优秀的设计必然会划分、解耦。所以,spring有很多子项目,比如core、context、bean、mvc等。这对知根底的人来说很简单明了,然而springmvc就是为了傻瓜式的操作而发明的。对于初学springmvc的人来说,想要入手就开发需要拷贝一连串的dependency而不知道这个是干嘛,不知道是不是少了依赖。像我刚接触springmvc的时候到处百度教程而发现各有不同,于是复制了一个又一个代码却不能自己设置,根本原因是不了解各个依赖的包。

    Spring-Boot 正是为了解决繁复的代码配置而产生的。Spring-Boot 也是基于java-base 开发的代码,及不用xml文件配置,所有代码都由java来完成。还可以加入Groovy的动态语言执行。

    本文是一个Spring Boot入门级的helloworld程序。

     

    二、准备工作

    • Java JDK1.7(安装过程省略)
    • maven:apache-maven-3.3.9(安装过程省略ÿ
    展开全文
  • 史上最全Spring Boot面试题(含答案)看完就是Spring Boot专家! 一.Spring BootSpring MVC 和 Spring 有什么区别? SpringFrame SpringFramework 最重要的特征是依赖注入。所有 SpringModules 不是依赖注入...

    史上最全Spring Boot面试题(含答案)看完就是Spring Boot专家!

    一.Spring Boot、Spring MVC 和 Spring 有什么区别?

    SpringFrame

    SpringFramework 最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。

    当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用。松耦合应用的单元测试可以很容易的进行。

    SpringMVC

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

    SpringBoot

    Spring 和 SpringMVC 的问题在于需要配置大量的参数。

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><bean
     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
     <value>/WEB-INF/views/</value>
     </property>
     <property name="suffix">
     <value>.jsp</value>
     </property>
     </bean>
     <mvc:resources mapping="/webjars/**" location="/webjars/"/></pre>
    

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

    二.什么是自动配置?

    Spring 和 SpringMVC 的问题在于需要配置大量的参数。

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><bean
     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
     <value>/WEB-INF/views/</value>
     </property>
     <property name="suffix">
     <value>.jsp</value>
     </property>
     </bean>
     <mvc:resources mapping="/webjars/**" location="/webjars/"/></pre>
    

    我们能否带来更多的智能?当一个 MVC JAR 添加到应用程序中的时候,我们能否自动配置一些 beans?

    Spring 查看(CLASSPATH 上可用的框架)已存在的应用程序的配置。在此基础上,Spring Boot 提供了配置应用程序和框架所需要的基本配置。这就是自动配置。

    三.什么是 Spring Boot Stater ?

    启动器是一套方便的依赖没描述符,它可以放在自己的程序中。你可以一站式的获取你所需要的 Spring 和相关技术,而不需要依赖描述符的通过示例代码搜索和复制黏贴的负载。

    例如,如果你想使用 Sping 和 JPA 访问数据库,只需要你的项目包含 spring-boot-starter-data-jpa 依赖项,你就可以完美进行。

    四.你能否举一个例子来解释更多 Staters 的内容?

    让我们来思考一个 Stater 的例子 -Spring Boot Stater Web。

    如果你想开发一个 web 应用程序或者是公开 REST 服务的应用程序。Spring Boot Start Web 是首选。让我们使用 Spring Initializr 创建一个 Spring Boot Start Web 的快速项目。

    Spring Boot Start Web 的依赖项

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
    </dependency></pre>
    

    下面的截图是添加进我们应用程序的不同的依赖项

    史上最全Spring Boot面试题(含答案)看完就是Spring Boot专家!

    依赖项可以被分为

    • Spring - core,beans,context,aop
    • Web MVC - (Spring MVC)
    • Jackson - for JSON Binding
    • Validation - Hibernate,Validation API
    • Enbedded Servlet Container - Tomcat
    • Logging - logback,slf4j

    任何经典的 Web 应用程序都会使用所有这些依赖项。Spring Boot Starter Web 预先打包了这些依赖项。

    作为一个开发者,我不需要再担心这些依赖项和它们的兼容版本。

    五.Spring Boot 还提供了其它的哪些 Starter Project Options?

    Spring Boot 也提供了其它的启动器项目包括,包括用于开发特定类型应用程序的典型依赖项。

    spring-boot-starter-web-services - SOAP Web Services

    spring-boot-starter-web - Web 和 RESTful 应用程序

    spring-boot-starter-test - 单元测试和集成测试

    spring-boot-starter-jdbc - 传统的 JDBC

    spring-boot-starter-hateoas - 为服务添加 HATEOAS 功能

    spring-boot-starter-security - 使用 SpringSecurity 进行身份验证和授权

    spring-boot-starter-data-jpa - 带有 Hibeernate 的 Spring Data JPA

    spring-boot-starter-data-rest - 使用 Spring Data REST 公布简单的 REST 服务

    六.Spring 是如何快速创建产品就绪应用程序的?

    Spring Boot 致力于快速产品就绪应用程序。为此,它提供了一些譬如高速缓存,日志记录,监控和嵌入式服务器等开箱即用的非功能性特征。

    spring-boot-starter-actuator - 使用一些如监控和跟踪应用的高级功能

    spring-boot-starter-undertow, spring-boot-starter-jetty, spring-boot-starter-tomcat - 选择您的特定嵌入式 Servlet 容器

    spring-boot-starter-logging - 使用 logback 进行日志记录

    spring-boot-starter-cache - 启用 Spring Framework 的缓存支持

    Spring2 和 Spring5 所需要的最低 Java 版本是什么?

    Spring Boot 2.0 需要 Java8 或者更新的版本。Java6 和 Java7 已经不再支持。

    七.创建一个 Spring Boot Project 的最简单的方法是什么?

    Spring Initializr是启动 Spring Boot Projects 的一个很好的工具。

    史上最全Spring Boot面试题(含答案)看完就是Spring Boot专家!

    • 就像上图中所展示的一样,我们需要做一下几步:
    • 登录 Spring Initializr,按照以下方式进行选择:
    • 选择 com.in28minutes.springboot 为组
    • 选择 studet-services 为组件
    • 选择下面的依赖项
    • Web
    • Actuator
    • DevTools
    • 点击生 GenerateProject
    • 将项目导入 Eclipse。文件 - 导入 - 现有的 Maven 项目

    八.Spring Initializr 是创建 Spring Boot Projects 的唯一方法吗?

    不是的。

    Spring Initiatlizr 让创建 Spring Boot 项目变的很容易,但是,你也可以通过设置一个 maven 项目并添加正确的依赖项来开始一个项目。

    在我们的 Spring 课程中,我们使用两种方法来创建项目。

    第一种方法是 start.spring.io 。

    另外一种方法是在项目的标题为“Basic Web Application”处进行手动设置。

    手动设置一个 maven 项目

    这里有几个重要的步骤:

    • 在 Eclipse 中,使用文件 - 新建 Maven 项目来创建一个新项目
    • 添加依赖项。
    • 添加 maven 插件。
    • 添加 Spring Boot 应用程序类。

    到这里,准备工作已经做好!

    九.为什么我们需要 spring-boot-maven-plugin?

    spring-boot-maven-plugin 提供了一些像 jar 一样打包或者运行应用程序的命令。

    • spring-boot:run 运行你的 SpringBooty 应用程序。
    • spring-boot:repackage 重新打包你的 jar 包或者是 war 包使其可执行
    • spring-boot:start 和 spring-boot:stop 管理 Spring Boot 应用程序的生命周期(也可以说是为了集成测试)。
    • spring-boot:build-info 生成执行器可以使用的构造信息。

    十.如何使用 SpringBoot 自动重装我的应用程序?

    使用 Spring Boot 开发工具。

    把 Spring Boot 开发工具添加进入你的项目是简单的。

    把下面的依赖项添加至你的 Spring Boot Project pom.xml 中

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
     <scope>runtime</scope>
    </dependency></pre>
    

    重启应用程序,然后就可以了。

    在我测试的时候,发现了 LiveReload 漏洞,如果你测试时也发现了,请一定要告诉我们。

    十一.什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?

    思考一下在你的虚拟机上部署应用程序需要些什么。

    第一步: 安装 Java

    第二部: 安装 Web 或者是应用程序的服务器(Tomat/Wbesphere/Weblogic 等等)

    第三部: 部署应用程序 war 包

    如果我们想简化这些步骤,应该如何做呢?

    让我们来思考如何使服务器成为应用程序的一部分?

    你只需要一个安装了 Java 的虚拟机,就可以直接在上面部署应用程序了,

    是不是很爽?

    这个想法是嵌入式服务器的起源。

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

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

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

    十二.如何在 Spring Boot 中添加通用的 JS 代码?

    在源文件夹下,创建一个名为 static 的文件夹。然后,你可以把你的静态的内容放在这里面。

    例如,myapp.js 的路径是 resourcesstaticjsmyapp.js

    你可以参考它在 jsp 中的使用方法

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><csript src="/js/myapp.js"></script></pre>
    

    错误:HAL browser gives me unauthorized error - Full authenticaition is required to access this resource.

    该如何来修复这个错误呢?

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">{
     "timestamp": 1488656019562,
     "status": 401,
     "error": "Unauthorized",
     "message": "Full authentication is required to access this resource.",
     "path": "/beans"
    }</pre>
    

    两种方法:

    方法 1:关闭安全验证

    application.properties

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">management.security.enabled:FALSE</pre>
    

    方法二:在日志中搜索密码并传递至请求标头中

    十三.什么是 Spring Date?

    Spring Data 的使命是在保证底层数据存储特殊性的前提下,为数据访问提供一个熟悉的,一致性的,基于 Spring 的编程模型。这使得使用数据访问技术,关系数据库和非关系数据库,map-reduce 框架以及基于云的数据服务变得很容易。

    为了让它更简单一些,Spring Data 提供了不受底层数据源限制的 Abstractions 接口。

    下面来举一个例子

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">interface TodoRepository extends CrudRepository<Todo, Long> {</pre>
    

    你可以定义一简单的库,用来插入,更新,删除和检索代办事项,而不需要编写大量的代码。

    十四.什么是 Spring Data REST?

    Spring Data TEST 可以用来发布关于 Spring 数据库的 HATEOAS RESTful 资源。

    下面是一个使用 JPA 的例子

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">@RepositoryRestResource(collectionResourceRel = "todos", path = "todos")
    public interface TodoRepository
     extends PagingAndSortingRepository<Todo, Long> {</pre>
    

    不需要写太多代码,我们可以发布关于 Spring 数据库的 RESTful API。

    下面展示的是一些关于 TEST 服务器的例子

    POST

    • URL:http://localhost:8080/todos
    • Use Header:Content-Type:Type:application/json
    • Request Content

    代码如下

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">{
     "user": "Jill",
     "desc": "Learn Hibernate",
     "done": false
    }</pre>
    

    响应内容

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">{
     "user": "Jill",
     "desc": "Learn Hibernate",
     "done": false,
     "_links": {
    "self": {
     "href": "http://localhost:8080/todos/1"
    },
    "todo": {
     "href": "http://localhost:8080/todos/1"
    }
     }
    }</pre>
    

    响应包含新创建资源的 href。

    十五.path=”users”, collectionResourceRel=”users” 如何与 Spring Data Rest 一起使用?

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">@RepositoryRestResource(collectionResourceRel = "users", path = "users")
    public interface UserRestRepository extends
    PagingAndSortingRepository<User, Long></pre>
    
    • path- 这个资源要导出的路径段。
    • collectionResourceRel- 生成指向集合资源的链接时使用的 rel 值。在生成 HATEOAS 链接时使用。

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

    如果你使用 Eclipse IDE,Eclipse maven 插件确保依赖项或者类文件的改变一经添加,就会被编译并在目标文件中准备好!在这之后,就和其它的 Java 应用程序一样了。

    当你启动 java 应用程序的时候,spring boot 自动配置文件就会魔法般的启用了。

    • 当 Spring Boot 应用程序检测到你正在开发一个 web 应用程序的时候,它就会启动 tomcat。

    十七.我们能否在 spring-boot-starter-web 中用 jetty 代替 tomcat?

    在 spring-boot-starter-web 移除现有的依赖项,并把下面这些添加进去。

    <pre style="box-sizing: inherit; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; font-size: 13px; word-break: initial; word-wrap: initial; white-space: pre; overflow: auto; margin: 16px 0px 14px; padding: 14px 15px 12px; border-radius: 3px; border: none; display: block; line-height: 1.6; background: rgb(246, 246, 246); color: rgb(61, 70, 77); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
     <exclusions>
     <exclusion>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-tomcat</artifactId>
     </exclusion>
     </exclusions>
    </dependency>
    <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency></pre>
    

    十八.如何使用 Spring Boot 部署到不同的服务器?

    你需要做下面两个步骤:

    • 在一个项目中生成一个 war 文件。
    • 将它部署到你最喜欢的服务器(websphere 或者 Weblogic 或者 Tomcat and so on)。

    第二步:取决于你的服务器。

    十九.RequestMapping 和 GetMapping 的不同之处在哪里?

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

    二十.为什么我们不建议在实际的应用程序中使用 Spring Data Rest?

    我们认为 Spring Data Rest 很适合快速原型制造!在大型应用程序中使用需要谨慎。

    通过 Spring Data REST 你可以把你的数据实体作为 RESTful 服务直接发布。

    当你设计 RESTful 服务器的时候,最佳实践表明,你的接口应该考虑到两件重要的事情:

    • 你的模型范围。
    • 你的客户。

    通过 With Spring Data REST,你不需要再考虑这两个方面,只需要作为 TEST 服务发布实体。

    这就是为什么我们建议使用 Spring Data Rest 在快速原型构造上面,或者作为项目的初始解决方法。对于完整演变项目来说,这并不是一个好的注意。

    Spring Boot扩展面试题

    二十一. 在 Spring Initializer 中,如何改变一个项目的包名字?

    二十二. JPA 和 Hibernate 有哪些区别?

    二十三. 业务边界应该从哪一层开始?

    二十四. 使用 Spring Boot 启动连接到内存数据库 H2 的 JPA 应用程序需要哪些依赖项?

    二十五.如何不通过任何配置来选择 Hibernate 作为 JPA 的默认实现?

    二十六.指定的数据库连接信息在哪里?它是如何知道自动连接至 H2 的?

    二十七.我们如何连接一个像 MSSQL 或者 orcale 一样的外部数据库?

    二十八.Spring Boot 配置的默认 H2 数据库的名字是上面?为什么默认的数据库名字是 testdb?

    二十九. 如果 H2 不在类路径里面,会出现上面情况?

    三十.你能否举一个以 ReadOnly 为事务管理的例子?

    三十一.发布 Spring Boot 用户应用程序自定义配置的最好方法是什么?

    三十二. 配置文件的需求是什么?

    三十三. 如何使用配置文件通过 Spring Boot 配置特定环境的配置?

    面试题整理

    由于篇幅过长的原因,为了不影响大家的阅读效果,文中没有给到所有的答案。我这里以文件的形式整理好了,需要借阅的程序员朋友可以免费来领取。

    面试文件获取方式:

    需要的可以评论留言,领取面试资料

    收集了还有你不知道的其它面试题(springboot、mybatis、并发、java中高级面试总结等)

    展开全文
  • Spring Boot教程(十三):Spring Boot文件上传

    万次阅读 多人点赞 2018-05-15 15:55:31
    -- Spring Boot web启动器 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-...
  • Spring Boot -01- 快速入门篇(图文教程)

    万次阅读 多人点赞 2018-11-28 13:31:59
    Spring Boot -01- 快速入门篇 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到【慕课网】手机 app,去找【Spring Boot 2.0 深度实践】的课程,令人开心...
  • Spring boot :2.1.5RELEASE ;数据库(Mysql、Oracle);Mybatis;阿里云的连接池 : Druid ; 步骤 1.POM依赖 <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</...
  • spring boot

    千次阅读 2020-01-18 18:24:52
    微服务是什么? 微服务(Micro Service)是一种允许开发人员独立开发和部署服务的体系结构。每个运行的服务都有自己的流程,这实现了轻量级模型以支持业务应用程序。...Spring Boot会根据使用@EnableAutoConfi...
  • 初识Spring Boot框架

    万次阅读 多人点赞 2016-12-19 20:42:04
    前面的铺垫文章已经连着写了六篇了,主要是介绍了Spring和SpringMVC框架,小伙伴们在学习的过程中大概也发现了这两个框架需要我们手动配置的地方非常多,不过做JavaEE开发的小伙伴们肯定也听说过“约定大于配置”...
  • Spring Boot的Maven插件Spring Boot Maven plugin详解

    万次阅读 多人点赞 2017-07-18 15:18:20
    Spring Boot的Maven插件(Spring Boot Maven plugin)能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Maven操作的可能。 Spring Boot Maven plugin能够将Spring Boot应用打包为可执行...
  • Spring Boot面试杀手锏————自动配置原理

    万次阅读 多人点赞 2018-11-07 14:11:15
    引言 不论在工作中,亦或是求职面试...当然,作为Spring Boot的精髓,自动配置原理的工作过程往往只有在“面试”的时候才能用得上,但是如果在工作中你能够深入的理解Spring Boot的自动配置原理,将无往不利。 Spr...
  • Spring Boot

    万次阅读 2016-08-05 10:31:05
    Spring Boot QQ交流群:193341332    【Spring Boot 系列博客】 76. Spring Boot完美解决(406)Could not find acceptable representation原因及解决方法    75. Spring Boot 定制URL匹配规则【从零开始学...
  • Spring boot Mybatis 整合(注解版)

    万次阅读 多人点赞 2017-11-24 10:39:57
    之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis...如果喜欢xml方式的可以看我之前的博文: Spring boot Mybatis 整合(完整版) 开发环境: 开
  • 学习 Spring Boot 知识看这一篇就够了

    万次阅读 多人点赞 2018-05-28 07:36:00
    从2016年因为工作原因开始研究 Spring Boot ,先后写了很多关于 Spring Boot 的文章,发表在技术社区、我的博客和我的公号内。粗略的统计了一下总共的文章加起来大概有六十多篇了,其中一部分是在技术社区做的系列...
  • Spring Boot的设计目的是来简化新Spring应用的初始搭建以及开发过程,大大减少了代码量,通过这篇文章你可以清楚的看到。这是一个基于Spring Boot的简单demo,希望读者可以通过这篇文章大概能看懂这一个简单的框架...
  • 使用idea快速搭建 spring boot项目

    万次阅读 多人点赞 2021-02-09 17:42:58
    演示如何通过IntelliJ IDEA创建 Spring Boot 工程项目。
  • Spring Boot 默认数据源 HikariDataSource 与 JdbcTemplate

    万次阅读 多人点赞 2018-08-19 08:37:07
    目录 环境准备 新建项目 pom. xml 默认内容 mysql 数据库 数据库 CRUD 全局配置文件 ...1、《Spring Boot 数据库访问 简介》中已经介绍,Spring Boot 可以通过多种方式访问各种数据库,本文将介绍 Spr...
  • Spring Boot 入门

    万次阅读 多人点赞 2015-12-27 15:41:29
    Spring Boot入门Spring BootSpring社区较新的一个项目。该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验,让Java开发也能够实现Ruby on Rails那样的...
  • 学习Spring Boot时,看到了一篇总结的很好的文章,翻译过来作为学习笔记。 通过本文你将学到: Component Scan是什么? 为什么ComponentScan很重要? 项目中Spring Boot会对哪些包自动执行扫描(Component Scan)? ...
  • spring boot应用启动原理分析

    万次阅读 多人点赞 2015-11-30 22:36:38
    spring boot quick start在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server。如果之前没有使用过spring boot可以通过下面...
  • Spring Boot Admin 用于监控基于 Spring Boot 的应用,它是在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI。(一)简介Spring Boot Admin 提供了很多功能,如显示 name、id 和 version,显示在线状态,...
  • Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、...
  • Spring Boot -03- Spring Boot 整合 JSP

    千次阅读 多人点赞 2018-11-18 13:47:56
    Spring Boot -03- Spring Boot 加入 JSP 支持 上面已经完成了 Spring Boot 项目的简单搭建,我们仅仅需要进行一些简单的设置,写一个 HelloController 就能够直接运行了,不要太简单…接下来我们再深入了解一下 ...
  • Spring Boot】2. Spring Boot 常用配置

    千次阅读 2021-02-12 12:54:29
    2、Spring Boot 配置文件 3、Spring Boot Start POM 4、Spring Boot日志配置 5、关闭特定的自动配置 1、 自定义Banner 上一篇文章中有讲述。 2、Spring Boot 配置文件 Spring Boot的配置文件均在 resources 文件夹...
  • 开源框架面试之Spring Boot面试题

    万次阅读 2020-09-28 00:14:31
    文章目录1、什么是 Spring Boot?2、Spring Boot有哪些优点?3、什么是 JavaConfig?4、如何重新加载Spring Boot上的更改,而无需重新启动服务器?5、Spring Boot中的监视器是什么?6、如何在Spring Boot中禁用...
  • Spring Boot学习笔记01】Spring Boot入门介绍

    千次阅读 多人点赞 2020-12-12 21:56:04
    Spring Boot学习笔记01】Spring Boot入门介绍 一.什么是Spring Boot Spring Boot是用来简化Spring应用开发的一个框架 基于Spring+SpringMVC+Mybatis的应用开发还存在多配置,低效率,部署复杂,第三方技术集成难度...
  • 15 个优秀开源的 Spring Boot 学习项目,一网打尽!

    万次阅读 多人点赞 2019-12-12 11:44:43
    Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 《Spring Boot + Vue 全栈开发实战》迄今为止已经加印了 8 次,Spring Boot 的受欢迎程度可见一斑。经常有人问松哥有没有推荐的 Spring Boot 学习...
  • Spring Boot 集成MyBatis

    万次阅读 多人点赞 2015-12-27 15:29:01
    Spring Boot 集成MyBatis在配置MyBatis前,我们先配置一个druid数据源。Spring Boot 集成druiddruid有很多个配置选项,使用Spring Boot 的ConfigurationProperties我们可以很方便的配置druid。创建DataSourceConfig...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 732,331
精华内容 292,932
关键字:

SPRINGboot