当前位置: 首页 > news >正文

Spring Boot常见面试题

Spring Boot简介

Spring Boot 是由 Pivotal 团队提供,用来简化 Spring 应用创建、开发、部署的框架。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能,降低了复杂性,同时支持基于JVM的多种开源框架,可以缩短开发时间,使开发更加简单和高效。

Spring Boot 优点

Spring Boot有以下优势:
(1) 容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。
(2) 开箱即用,提供各种默认配置来简化项目配置。
(3) 尽可能自动化配置Spring和第三方类库。
(4) 内嵌式容器(如tomcat、jetty、Undertow)简化Web项目。
(5) 没有冗余代码生成和XML配置的要求。
(6) 避免大量的 Maven 导入和各种版本冲。

Spring Boot 自动装配

Spring Boot的自动装配是指Spring Boot会自动将一些配置类的Bean注册到IOC容器中,我们可以在需要的地方使用@Autowired或@Resource等注解来使用它。SpringBoot定义了一套接口规范,这套规范规定:Spring Boot在启动时会扫描外部引用jar包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到Spring容器并执行类中定义的各种操作。
自动装配可以简单理解为:通过注解或者一些简单的配置就能在Spring Boot的帮助下实现某块功能。这样就可以更快速地构建应用程序,而无需手动配置大量的Bean。

自动装配原理简介

Spring Boot 通过@EnableAutoConfiguration开启自动装配,通过 SpringFactoriesLoader 最终加载META-INF/spring.factories中的自动配置类实现自动装配,自动配置类其实就是通过@Conditional按需加载的配置类,想要其生效必须引入spring-boot-starter-xxx包实现起步依赖。
可以直接使用@SpringBootApplication注解。@SpringBootApplication注解是一个组合注解,包含如下三个注解:
@SpringBootConfiguration(里面就是@Configuration,标注当前类为配置类,其实只是做了一层封装改了个名字而已)
@EnableAutoConfiguration(开启自动配置)
@ComponentScan(包扫描)
这样,在Spring Boot应用的main方法中 添加@SpringBootApplication或者@EnableAutoConfiguration注解接口。这样在程序执行的时候,会自动去maven中读取每个starter中的spring.factories文件,该文件里配置了所有需要被创建spring容器中的Bean。

如何理解Spring Boot的约定优于配置?

首先,约定优于配置是一种软件设计的范式,它的核心思想是减少软件开发人员对于配置项的维护,从而让开发人员更加聚焦在业务逻辑上。Spring Boot 就是约定优于配置这一理念下的产物,它类似于 Spring 框架下的一个脚手架,通过 Spring Boot,我们可以快速开发基于 Spring 生态下的应用程序。
基于传统的 Spring 框架开发 web 应用,我们需要做很多和业务开发无关并且只需要做一次的配置,比如管理 jar 包依赖web.xml 维护Dispatch-Servlet.xml 配置项维护应用部署到 Web 容器第三方组件集成到Spring IOC 容器中的配置项维护而在 Spring Boot 中,我们不需要再去做这些繁琐的配置,SpringBoot已经自动帮我们完成了,这就是约定优于配置思想的体现。
除此之外,Spring Boot 约定优于配置的体现还有很多,比如Spring Boot Starter 启动依赖,它能帮我们管理所有 jar 包版本如果当前应用依赖了spring mvc相关的jar,那么Spring Boot会自动内置Tomcat容器来运行 web 应用,我们不需要再去单独做应用部署。Spring Boot 的自动装配机制的实现中,通过扫描约定路径下的 spring.factories文件来识别配置类,实现 Bean 的自动装配。默认加载的配置文件 application.properties 等等。

Spring Boot 中的 starter 到底是什么?

首先,这个 Starter 并非什么新的技术点,还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter。
Starter可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,可以实现一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。例如,如果想使用 Sping 和 JPA 访问数据库,只需要你的项目包含 spring-boot-starter-data-jpa 依赖项,就可以完美进行。

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

新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是 spring-boot-starter-parent,spring-boot-starter-parent 主要有如下作用:
定义了 Java 编译版本为 1.8。
使用 UTF-8 格式编码。
继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
执行打包操作的配置。
自动化的资源过滤。
自动化的插件配置。
针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。

Spring Boot配置文件

在大多数情况下,自动配置的Bean可以满足基本需求,但还是需要覆盖一些配置以满足特定的需求。
Spring的环境抽象是各种配置属性的一站式服务。它抽取了原始的属性,这样需要这些属性的Bean就可以从Spring中获取。Spring环境会拉取多个属性源,包括:
(1) JVM系统属性;
(2) 操作系统环境变量;
(3) 命令行参数;
(4) 应用属性配置文件。
它会将这些属性聚合到一个源中,通过这个源可以注入到Spring的Bean中。
请添加图片描述
Spring 环境拉取多个属性源的属性,然后注入到Spring 的Bean中。这样通过 Spring Boot 自动配置的 Bean 就可以通过 Spring 环境进行配置。如,希望应用底层的Servlet容器使用另一个端口监听请求,而不再使用默认的8080端口,那么可以在application.properties文件中的属性(如server.port=9000)进行配置。
注意,如果使用环境变量而不是系统属性,大多数操作系统不允许使用句点分隔的键名,但可以使用下划线代替(例如, SPRING_CONFIG_NAME 代替 spring.config.name)。

properties文件和yaml文件

SpringBoot配置文件支持的格式有两种:properties和yaml。这里重点说下yaml格式。yaml格式文件基本语法如下:

大小写敏感
使用缩进表示层级关系
缩进不允许使用tab,只允许空格
缩进的空格数不重要,只要相同层级的元素左对齐即可  
使用#表示注释

在选用配置文件类型时,可遵从以下原则:
(1) 对于较复杂的数据结构(如数组),yaml优先于properties。
(2) 对于支持的编程语言种类,yaml优先于properties。
注:yaml除了支持Java语言,还支持python、go等大量编程语言。
(3) yaml支持中文内容,properties若想支持中文内容只能用unicode编码。
作为一种通用的格式,推荐使用yaml文件。

配置文件加载

springboot启动会扫描以下位置的application.properties/application.yaml文件作为其默认配置文件:

优先级1:项目路径下的config文件夹配置文件
优先级2:项目路径下配置文件
优先级3:资源路径下的config文件夹配置文件
优先级4:资源路径下配置文件

请添加图片描述
若相同优先级位置(同一目录下)下同时有properties文件和yaml文件,properties文件中的内容会覆盖yaml文件中的内容。(相同目录下,如果同时存在properties文件和yaml文件,则优先使用properties文件)

加密配置属性

使用 jasypt 实现加解密配置属性。这里采用非对称加密的实现。具体实施步骤如下:
(1) 本地基于公钥手动将明文生成密文。
(2) 将私钥存储到特定的文件中。
(3) 将文件放到服务器指定位置。
(4) 通过文件挂载的方式,引用文件。
(5) 从文件中读取文件并将密文解密成明文。

JavaBean 属性绑定

Spring Boot在将 Environment 属性绑定到 @ConfigurationProperties Bean。将@ConfigurationProperties注解放到Spring Bean上之后,它就会为该Bean中那些能够根据Spring环境注入值的属性赋值。 示例如下:

my:service:enable: truesecurity:username: localpasword: ENC(xxxaaa)
@ConfigurationProperties("my.service")
public class MyProperties {private boolean enable;private final Security security = new Security();// getters/setters...public static class Security {private String username;private String pasword;// getters/setters...}
}

Spring Boot 常见的读取配置的方式?

Spring Boot 可以通过 @PropertySource(.properties文件),@Value,@Environment,@ConfigurationProperties 等方式来绑定变量。

Spring Profiles

Spring profiles是一种条件化的配置,在运行时,根据哪种profile处于激活状态,可以使用或忽略不同的Bean、配置类和配置属性。
定义特定profile相关的属性的一种方式是创建另一个属性文件。文件的名称要遵循如下的约定:application-{profile名称}.文件后缀。然后,就可以在该文件中声明适用于该profile的配置属性了。
对于存在多个profile的场景,可以使用 spring.profiles.active 属性来指定哪些配置文件是活动的(active)。示例如下:

spring:profiles:active: production

对应Bean的定义补充@Profile注解,如果该Bean是和特定环境相关。

@Profile("production")
public class ProductionConfiguration {// ...}

Spring Boot 异常处理

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

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public ModelAndView customException(Exception e) {ModelAndView mv = new ModelAndView();mv.addObject("message", e.getMessage());mv.setViewName("myerror");return mv;}
}

Spring Boot 任务执行和调度

如果context没有 Executor Bean,Spring Boot会自动配置一个 ThreadPoolTaskExecutor ,它具有合理的默认值,可以自动与异步任务执行( @EnableAsync )和Spring MVC的异步请求处理相关联。
可以配置的有:ThreadPoolTaskExecutor(异步任务)、ThreadPoolTaskScheduler(定时任务)。

spring:task:execution:pool:max-size: 16queue-capacity: 100keep-alive: '10s'
spring:task:scheduling:thread-name-prefix: "scheduling-"pool:size: 2

Spring Boot 与第三方的集成

Spring Boot集成日志

Spring Boot在所有内部日志中使用 Commons Logging ,但对底层日志的实现保持开放。 为 Java Util Logging 、 Log4j2 、 Logback 提供了默认配置。 在每一种情况下,记录器(logger)都被预设为使用控制台输出,也可以选择输出到文件。
默认情况下,如果使用 “Starter”,则默认使用Logback。 适当的Logback路由也包括在内,以确保使用Java Util Logging、Commons Logging、Log4J或SLF4J的依赖库都能正确工作。

支持的日志级别从低到高依次是:

TRACE < DEBUG < INFO < WARN < ERROR < FATAL  

一般需要从环境变量获取日志级别,方便线上动态调整,方便测试。

Spring Boot 集成 Mybatis

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

Spring Boot 集成Redis

Redis是常用的缓存中间件。

Spring Boot 集成MQ

MQ有很多,主流的MQ有kafka、RocketMQ、RabbitMQ等。推荐使用Kafka。

部署 Spring Boot 应用

根据文件类型,可将Spring Boot应用构建成可执行JAR文件或传统的WAR文件。这种选择取决于要将应用部署到传统的Web应用服务器还是部署到云中。
(1) 部署到Java应用服务器(Web容器)中。
如果必须将应用部署到Tomcat、Jetty、WebLogic等Web容器中,只能将应用构建成WAR文件。注意,Spring Boot在构建时,默认内嵌Web容器。所以,该种场景的部署,还需移除对Tomcat等Web容器的依赖。WAR文件是专门针对在Web容器中部署设计的。
(2) 部署到云平台。
如果要将应用部署到云平台,可执行的JAR文件(内嵌Web容器,如Tomcat等)是最佳的选择。即使云平台支持WAR部署,JAR文件也要比WAR格式简单的多。
接下来,将会关注三种部署场景:
(1) 将Spring Boot应用以WAR文件的形式部署到Web容器中,如Tomcat。
(2) 将Spring Boot应用作为可执行的JAR文件,推送到云平台。
(3) 将Spring Boot应用打包到Docker容器,将其部署到任何支持Docker形式的平台中。

构建和部署WAR文件

如果要将应用程序部署到Web容器中,就需要构建一个WAR文件。为了让Web容器知道如何运行应用程序,需要创建Web.xml文件或Servlet Initializer类来声明Spring 的DispatchServlet。Spring Boot提供的SpringBootServletInitializer使这个过程变得更加简单。SpringBootServletInitializer是一个能够感知Spring Boot环境的特殊SpringWebApplicationInitializer实现。除了配置Spring的DispatchServlet之外,SpringBootServletInitializer还会查找Spring应用上下文中所有Filter、Servlet或ServletContextInitializer类型的Bean,并将其注册到Servlet容器中。

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer {public static void main(String[] args) {SpringApplication.run(Application.Class, args);}@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(Application.Class);}private static Class<Application> applicationClass = Application.class;
}

此外,还需对项目的构建文件类型进行调整。如果使用Maven构建,只需要确保pom.xml文件元素设置为war即可:

<packaging>war</packaging>

执行构建动作后,即可生成WAR文件。
部署WAR文件就是WAR文件放到Web容器的指定目录。如Tomcat是webapp目录。
随着进入云部署时代,JAR文件是更好的选择。

构建和部署JAR文件

基于JAR文件的方式,是目前的主流实现。
服务器的硬件购买和维护成本可能代价高昂。当出现高负载时,恰当地对服务器进行扩展是非常困难的,对有些组织来说,这样做甚至是不允许的。如今,将应用部署到云中是一种人们广泛关注并能够节省成本的方案。
我们有多种可选的云方案,但人们目前最关注的是平台即服务(Platform as a Service,PaaS)。PaaS提供现成的应用部署平台,其中包含多种可以绑定到应用上的附加服务(比如数据库和消息代理)。
可提供推送工具将JAR文件推送到PaaS平台。如果推送成功,应用就可完成部署并处理请求。

在Docker中运行Spring Boot应用

在云中部署应用程序的另一种常见方法是将应用程序打包到Docker等容器中,然后发布到云中。如将应用程序推送到AWS这样的基础设施即服务(Infrastructure as a Service, IaaS)平台。
容器化应用程序的概念借鉴了现实世界中的联运集装箱。在运输过程中,不管里面的东西是什么,所有的联运集装箱都有一个标准的尺寸和格式。按照类似的方式,容器化的应用程序遵循通用的容器格式,可以在任何地方部署和运行,而不必关心里面的应用是什么。
Spotify提供了一个Maven插件,借助它可以轻易地将Spring Boot的构建结果创建为Docker容器。对应配置代码如下:

<build><plugins><plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.3</version><configuration><reposity>${docker.image.prefix}/${project.artifactId}</reposity><buildArgs><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin></plugins>
</build>

在代码块下,设置了一些属性,用于指导如何创建Docker镜像。

使用NGINX做反向代理

实际开发中,还会在服务器端使用NGINX做代理,也就是让Ngnix代理REST请求到Spring Boot应用程序。

Spring Boot 中的监视器是什么?

Spring boot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。
有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 HTTP URL 访问的REST 端点来检查状态。
在平台上部署时,应用程序可以使用 Kubernetes Probes 等基础设施向平台提供有关其可用性的信息。Spring Boot对常用的 “liveness” 和 “readiness” 可用性状态提供了开箱即用的支持。如果你使用Spring Boot的 “actuator” ,那么这些状态将作为健康端点组(health endpoint groups)暴露出来。

Liveness

一个应用程序的 “Liveness” 状态告诉我们它的内部状态是否允许它正常工作,或者在当前失败的情况下自行恢复。

Readiness

应用程序的 “Readiness” 状态告诉平台,该应用程序是否准备好处理流量。 failing状态的 “Readiness” 告诉平台,它暂时不应该将流量发送到该应用程序。

参考

https://www.baidu.com/ 百度AI助手
https://docs.spring.io/spring-boot/docs Spring Boot官方文档
https://springdoc.cn/spring-boot/index.html Spring Boot 中文文档
https://springdoc.cn/spring-boot/features.html#features.external-config Spring Boot 核心特性
https://blog.csdn.net/ThinkWon/article/details/104397299 Spring Boot面试题
https://cloud.tencent.com/developer/article/2110061 40个SpringBoot面试题
https://blog.csdn.net/cx521600/article/details/90205359 SpringBoot常见的经典面试题
https://zhuanlan.zhihu.com/p/643166816 2023 SpringBoogt高频面试题(精品)
https://www.cnblogs.com/lenve/p/10748453.html SpringMVC 中 @ControllerAdvice 注解的三种使用场景

https://cloud.tencent.com/developer/article/1481147 [Spring Boot] 如何优雅的对配置文件进行加密
https://blog.csdn.net/justry_deng/article/details/95712802 SpringBoot使用jasypt加密密码等重要信息

相关文章:

Spring Boot常见面试题

Spring Boot简介 Spring Boot 是由 Pivotal 团队提供&#xff0c;用来简化 Spring 应用创建、开发、部署的框架。它提供了丰富的Spring模块化支持&#xff0c;可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能&#xff0c;降低了复杂性&#xff0c;同…...

分块矩阵求逆

另可参考Block matrix on Wikipedia2018.4.3 补充补充两个参考文献&#xff0c;都是对工科很实用的矩阵手册&#xff1a;D. S. Bernstein, Matrix mathematics: Theory, facts, and formulas with application to linear systems theory. Princeton, NJ: Princeton University …...

Python 文件写入操作

视频版教程 Python3零基础7天入门实战视频教程 w模式是写入&#xff0c;通过write方法写入内容。 # 打开文件 模式w写入&#xff0c;文件不存在&#xff0c;则自动创建 f open("D:/测试3.txt", "w", encoding"UTF-8")# write写入操作 内容写入…...

【Spring Boot系列】- Spring Boot侦听器Listener

【Spring Boot系列】- Spring Boot侦听器Listener 文章目录 【Spring Boot系列】- Spring Boot侦听器Listener一、概述二、监听器Listener分类2.1 监听ServletContext的事件监听器2.2 监听HttpSeesion的事件监听器2.3 监听ServletRequest的事件监听器 三、SpringMVC中的监听器3…...

JavaScript速成课—事件处理

目录 一.事件类型 1.窗口事件 2.表单元素事件 3.图像事件 4.键盘事件 5.鼠标事件 二.JavaScript事件处理的基本机制 三.绑定事件的方法 1.DOM元素绑定 2.JavaScript代码绑定事件 3.监听事件函数绑定 四.JavaScript事件的event对象 1.获取event对象 2.鼠标坐标获取…...

【入门篇】ClickHouse最优秀的开源列式存储数据库

文章目录 一、什么是ClickHouse&#xff1f;OLAP场景的关键特征列式数据库更适合OLAP场景的原因输入/输出CPU 1.1 ClickHouse的定义与发展历程1.2 ClickHouse的版本介绍 二、ClickHouse的主要特性2.1 高性能的列式存储2.2 实时的分析查询2.3 高度可扩展性2.4 数据压缩2.5 SQL支…...

【C++ Exceptions】异常处理的成本

最低成本 exception是C的一部分&#xff0c;编译器必须支持。即使从未使用任何异常处理机制&#xff0c;也必须付出一些空间放置某些数据结构&#xff0c;付出一些时间随时保持那些数据结构的正确性。 第二种成本&#xff1a;来自try语句块 避免非必要的try语句块。 粗略估计&a…...

API接口:原理、实现及应用

API&#xff08;Application Programming Interface&#xff09;接口是现代软件开发中不可或缺的一部分。它们提供了一种机制&#xff0c;使得不同的应用程序和服务可以相互通信&#xff0c;共享数据和功能。在这篇文章中&#xff0c;我们将探讨API接口的原理、实现及应用&…...

SpringBoot学习笔记(项目创建,yaml,多环境开发,整合mybatis SMM)

一、SpringBoot入门 1.1 SpringBoot概述 SpringBoot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的初始搭建以及开发过程。 Spring程序缺点&#xff1a;配置繁琐&#xff0c;依赖设置繁琐。SpringBoot程序优点&#xff1a;自动装配&#xff0c…...

Linux内核分析:输入输出,字符与块设备 31-35

CPU 并不直接和设备打交道,它们中间有一个叫作设备控制器(Device Control Unit)的组件,例如硬盘有磁盘控制器、USB 有 USB 控制器、显示器有视频控制器等。这些控制器就像代理商一样,它们知道如何应对硬盘、鼠标、键盘、显示器的行为。 输入输出设备我们大致可以分为两类…...

Linux抓包工具tcpdump

一、介绍 tcpdump是一个抓包工具&#xff0c;用于实时捕获和分析网络流量。它通常在unix和linux操作系统上使用。tcpdump能够捕获流经网络接口的数据包&#xff0c;并显示或保存它们以供进一步分析。它提供有关每个数据包的详细信息&#xff0c;包括源IP地址、目标IP地址、使用…...

Qt消息机制和事件

事件 事件是由Qt或者系统在不同时刻发出的,当敲下鼠标,或者按下键盘,或者当窗口需要重新绘制的时候,就会发出一个相应的事件,一些操作由用户的操作发出,一些则由系统自动发出,如系统定时器事件等。 Qt 中所有事件类都继承于 QEvent。 在事件对象创建完毕后, Qt 将这个…...

LeetCode-739-每日温度-单调栈

题目描述&#xff1a;给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 题目…...

MyBatis中当实体类中的属性名和表中的字段名不一样,怎么办

方法1&#xff1a; 在mybatis核心配置文件中指定&#xff0c;springboot加载mybatis核心配置文件 springboot项目的一个特点就是0配置&#xff0c;本来就省掉了mybatis的核心配置文件&#xff0c;现在又加回去算什么事&#xff0c;总之这种方式可行但没人这样用 具体操作&…...

Flutter框架和原理剖析

Flutter是Google推出并开源的跨平台开发框架&#xff0c;主打跨平台、高保真、高性能。开发者可以通过Dart语言开发Flutter应用&#xff0c;一套代码同时运行在ios和Android平台。不仅如此&#xff0c;flutter还支持web、桌面、嵌入应用的开发。flutter提供了丰富的组件、接口&…...

NFS:使用 Ansible 自动化配置 NFS 客户端服务端

考试顺便整理博文内容整理涉及使用 Ansible 部署 NFS 客户端和服务端理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃…...

IntelliJ IDEA使用——Debug操作

文章目录 版本说明图标和快捷键查看变量计算表达式条件断点多线程调试 版本说明 当前的IntelliJ IDEA 的版本是2021.2.2&#xff08;下载IntelliJ IDEA&#xff09; ps&#xff1a;不同版本一些图标和设置位置可能会存在差异&#xff0c;但应该大部分都差不多。 图标和快捷键…...

uniapp项目实践总结(十八)自定义多列瀑布流组件

导语&#xff1a;有时候展示图片等内容&#xff0c;会遇到图片高度不一致的情况&#xff0c;这时候就不能使用等高双列或多列展示了&#xff0c;这时候会用到瀑布流的页面布局&#xff0c;下面就一起探讨一下瀑布流的实现方法。 目录 准备工作原理分析实战演练案例展示 准备工…...

Ubuntu 22.04LTS + 深度学习环境安装全流程

一、 CUDA Toolkit 安装 1. 选择需要安装的版本(下载地址) 2. 选择自己的系统版本获取下载地址和安装指令 3. 运行安装指令进行安装 wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run sudo sh cuda_12.2.…...

【lesson7】git的介绍及使用

文章目录 什么是gitgit的历史git使用在gitee上创建仓库git clone HTTPS地址git add .git add 文件名git commit “日志”git pushgit loggit rm 文件名git statusgit pull 什么是git git是版本控制器&#xff0c;那么什么是版本控制器呢&#xff1f; 下面讲个故事为大家讲解一…...

Keepalived+LVS高可用集群

目录 一、keepalived介绍&#xff1a; 二、keepalived工具介绍&#xff1a; &#xff08;1&#xff09;管理 LVS 负载均衡软件&#xff1a; &#xff08;2&#xff09;支持故障自动切换&#xff1a; &#xff08;3&#xff09;实现 LVS 负载调度器、节点服务器的高可用性&…...

AK 9.12 百度Java后端研发B卷 笔试

T1(博弈论) #include <bits/stdc.h>#define endl \nusing namespace std;typedef long long LL;const int N 1e5 10;int n, m, t;void solve() {cin >> n >> m; t n m - 2;if(t & 1) cout << "Yes" << endl;else cout <&l…...

使用Python和XPath解析动态JSON数据

JSON动态数据在Python中扮演着重要的角色&#xff0c;为开发者提供了处理实时和灵活数据的能力。Python作为一种强大的编程语言&#xff0c;提供了丰富的工具和库来处理动态JSON数据使得解析和处理动态JSON数据变得简单和高效。例如&#xff0c;使用内置的json模块&#xff0c;…...

记录一个iOS实现视频分片缓存拖拽快进不能播放的问题

代码现状 首先来看一下我们将视频数据塞给请求的代码 - (void)finishLoadingWithLoadingRequest:(IdiotResourceTask *)task {// printf("哈哈执行到这里执行到到这里\n");printf("哈哈哈数量数量%ld\n", self.taskList.count);//填充信息task.loadingRe…...

如何解决 503 Service Temporarily Unavailable?

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…...

keil报错:Flash Download failed - Could not load file‘..\..\Output\Template.axf

keil报错&#xff1a;Flash Download failed - Could not load file’…\Output\Template.axf&#xff0c;如下图所示&#xff1a; 原因是很多.h文件没有定义位置&#xff0c;可以按照下图操作&#xff1a; 而且&#xff0c;如果是想使用压缩包&#xff0c;那一定要关闭keil后…...

从一到无穷大 #16 ByteSeries,思考内存时序数据库的必要性

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 引言 在[3]中我基于Gorilla讨论了时序数据库设置cache的可行性&#xff0c;最后得出结论&…...

分支和远程仓库

分支 查看分支 git branch -v 创建分支 git branch 分支名 切换分支 git checkout 分支名 合并分支 git merge 分支名 把指定的分支合并到当前分支上 查看当前所有远程地址别名&#xff1a; git remote -v 起别名&#xff1a; git remote add 别名 远程地址推送本地分支上的…...

编译原理 —— 编译器

文章目录 编译原理阶段词法分析器语法分析器语义分析器中间代码生成器代码优化器代码生成器 编译原理阶段 编译器分为9个阶段来将我们所编写的高级代码编译为计算机可执行的机器码 源程序词法分析器语法分析器语义分析器中间代码生成器独立于机器的代码优化器代码生成器依赖于…...

Python灰帽编程——错误异常处理与面向对象

文章目录 错误异常处理与面向对象1. 错误和异常1.1 基本概念1.1.1 Python 异常 1.2 检测&#xff08;捕获&#xff09;异常1.2.1 try except 语句1.2.2 捕获多种异常1.2.3 捕获所有异常 1.3 处理异常1.4 特殊场景1.4.1 with 语句 1.5 脚本完善 2. 内网主机存活检测程序2.1 scap…...

无锡营销型网站制作/营业推广案例

编译程序总框 词法分析器的设计 词法分析的任务&#xff1a; 从左至右逐个字符地对源程序进行扫描&#xff0c;产生一个个单词符号&#xff0c; 词法分析器(Lexical Analyzer)&#xff1a;扫描器(Scanner)&#xff0c;执行词法分析的程序 功能&#xff1a;输入源程序、输出单…...

两台电脑一台做服务器 网站/爱站网权重查询

虽然微软说asp.net能够匹配各种手机设备&#xff0c;但是手机型号众多&#xff0c;微软收集的手机资料有限&#xff0c;所以导致asp.net对很多手机匹配错误&#xff0c;本来可以支持html的却生成html&#xff0c;本来只支持wml的&#xff0c;缺生成了html导致手机无法浏览&…...

提供手机网站建设哪家好/seo排名课程咨询电话

基于单位四元数的姿态插补算法 文章目录基于单位四元数的姿态插补算法摘要单位四元数空间与欧式空间的转化四元数的旋转变换表示空间定点旋转两个姿态间的插补仿真验证小结摘要 现代制造领域对工业机器人的需求越来越多&#xff0c;对工业机器人性能要求也越来越苛刻。机器人运…...

那个网站是做批发的/百度app安装下载

这篇博文一个多月前就发表过&#xff0c;但因当时在课程上该实验还未结束提交而删除了&#xff1b;对老师教学造成的不便深感歉意&#xff1b;写这些不是为了什么&#xff0c;也知道自己写的不好&#xff0c;只是记录自己的学习心历路程&#xff0c;同时也当作一个笔记&#xf…...

网站建设做网站好吗/qq推广网站

svr_linear SVR(linear) #基于直线 svr_rbf SVR(rbf) #基于半径 svr_poly SVR(poly) #基于多项式 转载于:https://www.cnblogs.com/gugubeng/p/9803465.html...

做推广自己找网站/最近三天的新闻大事

速度映射图主要是为了得到每个像素相对于前一帧的运动矢量&#xff0c;其中一种方法是使用摄像机的深度纹理来推导。 推导过程如下&#xff1a; 先由深度纹理逆推出NDC&#xff08;归一化的设备坐标&#xff09;下的顶点坐标&#xff0c;利用VP矩阵&#xff08;视角*投影矩阵&a…...