博客
关于我
卧槽!技术水平真的很重要!算法+分布式+微服务
阅读量:546 次
发布时间:2019-03-09

本文共 6491 字,大约阅读时间需要 21 分钟。

Spring Boot学习笔记

前言

现如今的互联网应用大都是采用分布式系统架构设计的,所以消息队列已经逐渐成为企业的应用系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能。

当前使用较多的消息队列有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ 等,而部分数据库如 Redis、MySQL 以及 phxsql,如果硬搞的话,其实也可实现消息队列的功能。
可能有人觉得,各种开源的 MQ 已经足够使用了,为什么需要用 Redis 实现 MQ 呢?
一些简单的业务场景,可能不需要重量级的 MQ 组件(相比 Redis 来说,Kafka 和 RabbitMQ 都算是重量级的消息队列)。那你有考虑过用 Redis 做消息队列吗?
这一章,我会结合消息队列的特点和 Redis 做消息队列的使用方式,以及实际项目中的使用,来和大家探讨下 Redis 消息队列的方案。


第一篇:SpringBoot面试篇

1.1 35常见SpringBoot知识点

问题一:Spring Boot、Spring MVC 和 Spring 有什么区别?

Spring Boot 是一个基于 Spring 源码的快速开发框架,集成了 Spring MVC、Spring Data等功能,通过自动配置使开发者无需手动配置就能快速搭建应用程序。而 Spring MVC 是一个表现层框架,用于处理HTTP请求和前后端分离;Spring 是一个ibaba的主流依赖管理框架,提供了.required()方法来管理类的依赖。

问题二:什么是自动配置?

自动配置是 Spring Boot 的一个特点,通过application.properties文件标注@ConfigurationProperties注解的组件自动注册在Spring容器中。

问题三:什么是 Spring Boot Starter?

Spring Boot Starter 是 Spring Boot 提供的一系列可选组件库,用于快速集成常用功能模块。例如,starter-web用于构建Web应用,starter-data-jpa用于与数据库交互。

问题四:你能否举一个例子来解释更详细的Starter内容?

starter-aop为例,它提供了对方法织入切面的功能。通过在需要织入的类上使用**@Aspect**注解,可以定义自定义切点,实现AOP编程。

问题五:Spring Boot 还提供了哪些Starter Project Options?

Spring Boot 提供了众多Starter项目选项,涵盖了Web开发、数据库交互、消息队列、缓存、日志等多个模块的功能。你可以在**[Spring Boot Docs](https://docs.spring.framework.org/cli/ reference/feature-terms/)**中找到完整的依赖项列表。

问题六:Spring Boot如何快速创建产品就绪应用程序?

通过使用Spring Initializr(或网页界面),可以快速生成一个包含所需依赖项和配置文件的Spring Boot项目。

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

可以通过Spring Initializr生成一个基本的project包_zip文件,解压后即可运行。

问题八:Spring Initializr是创建Spring Boot项目的唯一方法吗?

当然不是,手动创建也是可行的。你可以手动创建一个基本的Maven项目,并添加Spring Boot的相关依赖项。

问题九:为什么我们需要spring-boot-maven-plugin?

它用于自动化处理Spring Boot项目的构建和打包过程,可以简化Maven的配置。

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

可以通过 바_protective solver查看取决项的状态,并通过==mvn clean install==重新编译项目。

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

嵌入式服务器(如Jetty或Tomcat)是与Spring Boot应用程序一起打包的轻量级Web服务器。嵌入式服务器可以减少部署时的依赖项,提升性能。

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

可以通过.getChest()编写JS代码,使用 कुलさらthymeleaf模板引擎渲染。

问题十三:什么是Spring Data?

Spring Data 是Spring Boot提供的一套数据访问模块,提供了对数据库和持久化对象的一higher level的抽象,像MongoDB、MySQL等数据库都可以通过Spring Data连接。

问题十四:什么是Spring Data REST?

Spring Data REST 是Spring Boot的一个模块,用于自动化生成RESTful API,基于Spring Data持久化对象。

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

通过path和collectionResourceRel配置,可以实现与Spring Data Rest的动态路由绑定。

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

应用程序会初始化类path扫描,配置自动化,注册Bean,以及启动嵌入式服务器。

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

可以,当然可以。Jetty是Spring Boot默认嵌入的服务器之一。

问题十八:如何在Spring Boot应用程序中生成一个WAR文件?

可以通过 Maven 打印information-phase="false"总是生成可执行jarring。

问题十九:如何使用Spring Boot部署到不同的服务器?

可以通过不同的服务器运行前后 Assumes包括Tomcat、Jetty、 GlassFish等。

问题二十:RequestMapping 和 GetMapping 的不同之处在哪里?

RequestMapping 可以支持多种HTTP方法(如GET、POST、PUT等),而GetMapping则仅限于GET方法,但路径参数和条件更容易阅读和书写。

问题二十一:建议为什么我们不建议在实际应用程序中使用Spring Data Rest?

因为Spring Data REST生成的API不够灵活,通常建议在需要定制化API时使用Spring REST instead.

问题二十二:Spring Initializer 中,如何改变一个项目的包名字?

点击“Project Name”并输入新的包名即可。

问题二十三:可以配置全面的application.properties属性列表在哪里找到?

可以在 Spring Boot Docs 中找到详细的属性列表。

问题二十四:JPA 和 Hibernate有哪些区别?JPA是否可以支持动态SQL?

JPA 是 ORM 显式接口,而 Hibernate 是JPA 的默认实现。JPA 不支持动态SQL,动态SQL需要使用Hibernate的@Query注解。

问题二十五:业务边界应该从哪一层开始?

可以从Domain Layer(领域层)开始设计业务边界。

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

需要添加spring-boot-starter-data-jpa和spring-boot-starter-data-h2。

问题二十七:如何不通过任何配置来选择Hibernate作为JPA的默认实现?

可以通过在配置文件中设置spring.data.jpa.provider-show-insight=hibernate。

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

默认连接可以在application.properties中配置db.url等属性。

问题二十九:如何连接一个像MySQL或Oracle这样的外部数据库?

可以通过添加对应的驱动包(如spring-boot-starter-data-mysql)到项目中,并配置db.url、db.username、db.password。

问题三十:Spring Boot配置的默认H2数据库名字是testdb?

并不是,H2的默认命名为在sqllite文件中使用时是in-memory数据库。

问题三十一:为什么默认的数据库名字是testdb?

这取决于数据库类型,MySQL等数据库可能不会使用这个名称。

问题三十二:如果H2不在类路径中,会发生什么?

H2会在运行时下载并添加到类路径中。

问题三十三:能否举一个以ReadOnly为事务管理的例子?

可以,比如通过@Transactional(transactionManager=ReadOnlyTransactionManager)注解来设置事务ReadOnly。

问题三十四:配置文件的需求是什么?

可以是properties文件、YAML文件或环境变量。

问题三十五:如何通过Spring Boot配置特定环境的配置?

可以通过application- envAtlas式配置文件, 或者使用-Spring Profiles标注。


1.2 21道SpringBoot必刷题

问题一:什么是Spring Boot?

Spring Boot 是一个基于Spring框架的快速开发工具,提供了内置的模块化配置。

问题二:Spring Boot有哪些优点?

简单、高效、可扩展、内置监控、社区活跃等。

问题三:什么是JavaConfig?

JavaConfig 是Spring Boot的配置形式,支持通过注解方式定义配置。

问题四:如何重载Spring Boot上的更改,而无需重新启动服务器?

可以使用�新的(refreshTokens)机制,或通过命令行重启服务。

问题五:Spring Boot中的监视器是什么?

Spring Boot提供了Http://localhost:嗅嗅/")嗅嗅 strengthened.roleacts as监视器。

问题六:如何禁用Spring Boot Actuator端点安全?

可以通过securityluent configuration.

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

可以通过在 WM配置中设置server.port.

问题八:什么是YAML?

YAML是一种用于数据序列化的标记语言,支持注解式配置。

问题九:什么是Spring Profiles?

Spring Profiles 是Spring Boot用来隔离配置的功能,可以通过 IsActiveProfileFilter 进行切换。

问题十:什么是Spring Batch?

Spring Batch 是一个记录处理大批量数据的框架。

问题十一:如何集成Spring Boot和ActiveMQ?

可以通过 spring-dao-rabbitmq 模块进行集成。

问题十二:如何实现分页和排序?

可以通过 PagingAndSortingRepository接口进行操作。

问题十三:什么是Swagger?用Spring Boot实现了它吗?

Swagger 是一个用于定义API文档的框架,Spring Boot可以集成 Swagger UI.

问题十四:什么是FreeMarker?

FreeMarker 是一个常用的模板引擎,Spring Boot可以通过模板引擎实现动态网页生成.

问题十五:如何实现异常处理?

可以通过@controllerAdvice来定义全局异常处理逻辑.

问题十六:使用的是哪些starter maven 依赖项?

可以查看项目的 dependencyManagement.py.

问题十七:什么是CSRF 攻击?

CSRF 攻击是跨站请求伪造,常用于web应用中注入恶意脚本.

问题十八:什么是WebSockets?

WebSockets 是用于实现实时通信协议的技术,可以在浏览器和服务器之间建立双向通信渠道.

问题十九:什么是AOP?

AOP 是面向切面编程的一种技术,可以动态地insert一些行为到方法或类中.

问题二十:什么是Apache Kafka?

Apache Kafka 是一个分布式的高效消息队列系统。

问题二十一:如何监视所有Spring Boot微服务?

可以使用Spring Boot Actuator监控各个微服务。


1.3 10个SpringBoot高频解析题

问题一:Spring Boot的自动配置是如何实现的?

通过读取application.properties文件中的key-value对,结合条件编译,自动生成配置。

问题二:嵌入式服务器是什么?为什么要嵌入式服务器呢?

嵌入式服务器是Spring Boot应用程序的一部分,提供了一个轻量级的Web环境,减少了外部服务器的依赖。

问题三:微服务同时调用多个接口,怎么支持事务的?

可以通过分布式事务技术(如本地事务或外部事务管理工具)实现。一般不支持远程事务,建议采用本地事务。

问题四:shiro与OAuth,有关Cas是什么?公司权限设计是怎样的?

Shiro是一个功能强大的安全框架,支持Cas(身份认证共享)协议。而OAuth 2.0是一个用于授权的协议,两者主要区别在于认证与授权的处理。公司权限设计需要结合业务需求和归属结构来设计。

问题五:有哪些方式可以选择服务间通信?Restful与Rpc哪种方式更合适?

选择取决于业务需求。Restful易于调试和组合,但态鲜关注状态机制。Rpc则提供了更高的性能和上下文,但复杂度较高。

问题六:怎么设计无状态的服务?

可以使用Token认证、令牌缓存、会话管理等技术,确保服务间的无状态通信。

问题七:Spring Cache中的三种常用缓存注解及其意义?

  • @Cacheable:用于计算过缓存的方法,自动缓存方法结果。
  • @CachePut:用于手动将方法返回值缓存。
  • @CacheEvict:用于清除缓存。

问题八:Spring Boot如何设置支持跨域请求?

可以通过配置Arw-endClean```javaserver参量配置:

@Configurationpublic class MyConfig {    @Bean    public WebApplicationads配置物.endpoint配置?}

暂时不详细展开,后续补充。


2. SpringBoot知识脑图篇


3. Spring Boot进阶学习必备篇

3.1 SpringBoot学习教程

  • Hello World
  • 配置文件
  • 日志处理
  • Web 实战
  • 嵌入式Servlet容器
  • Docker部署
  • 数据访问
  • 高频问题解析
  • 分布式系统开发

4. SpringBoot知识总结


通过以上内容,可以看到Spring Boot是一个非常强大的框架,适用于快速开发和部署,涵盖了从Web开发到数据访问等多个方面。

如果需要这份文档的朋友可以帮忙点个赞,点击下方神秘超链接,就可以免费获取到了,还有小编准备的一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》。

转载地址:http://riksz.baihongyu.com/

你可能感兴趣的文章
opencv11-提取水平直线和垂直直线
查看>>
opencv12-图像金字塔
查看>>
opencv13-基本阈值操作
查看>>
opencv14-自定义线性滤波
查看>>
opencv15-边缘处理
查看>>
opencv16-Sobel算子
查看>>
opencv17-laplance算子
查看>>
opencv18-canny检测算法
查看>>
opencv19-霍夫直线变化
查看>>
opencv2-矩阵掩膜操作
查看>>
opencv20-霍夫圆检测
查看>>
opencv21-像素重映射
查看>>
opencv22-直方图均衡化
查看>>
opencv23-直方图计算
查看>>
opencv24-直方图比较
查看>>
opencv25-直方图反向投影
查看>>
opencv26-模板匹配
查看>>
opencv27-轮廓发现
查看>>
opencv28-凸包
查看>>
opencv29-轮廓周围绘制矩形框和圆形框
查看>>