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

五、Spring Boot - 上手篇(1)

🌻🌻目录

  • 一、快速入门:创建第一个SpringBoot 工程
    • 1.1 点击File--->New--->Project...
    • 1.2 选择版本和依赖的相关骨架包
    • 1.3 设置项目保存目录
    • 1.4 项目创建完成,工程主界面如下
    • 1.5 项目说明
    • 1.6 启动项目
    • 1.7 编写 HelloController
  • 二、SpringBoot 基于web应用开发
    • 2.1 SpringBoot json支持
    • 2.2 SpringBoot 请求传递参数
      • 2.1.1 第一类:请求路径传参
      • 2.1.2 第二类:@RequestBody 参数
    • 2.3 SpringBoot 静态资源
      • 2.3.1 默认静态资源映射
      • 2.3.2 自定义静态资源访问
  • 三、SpringBoot 属性配置
    • 3.1 项目默认属性配置文件所在位置及配置实例
    • 3.2 实体类属性赋值
    • 3.3 自定义配置文件
    • 3.4 多环境配置文件

Spring Boot 涉及底层核心源码,建议先看上手篇

一、快速入门:创建第一个SpringBoot 工程

前提电脑安装了jdk,maven并且在IDEA中作了配置

1.1 点击File—>New—>Project…

创建可以参考 Spring Boot

创建SpringBoot时候报错解决,------------------------- 官网创建下载导入地址

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

输入maven属性,注意Artifact不要出现大写、特殊字符.

1.2 选择版本和依赖的相关骨架包

选择SpringBoot版本,选择项目需要依赖的相关骨架包

注意:一定要选择springBoot版本2.1.9(没有的话选择低版本,下面手动改)

在这里插入图片描述

1.3 设置项目保存目录

在这里插入图片描述

1.4 项目创建完成,工程主界面如下

在这里插入图片描述

手动修改版本:

在这里插入图片描述

1.5 项目说明

  • (1)默认有个DemoApplication类,里面是spring boot的载入函数
  • (2)resource目录下有个application.properties文件,这个是Spring boot的配置文件
  • (3)test目录下有个测试类DemoApplicationTests,这个是spring boot的单元测试
  • (4)pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.9.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><!-- Generated by https://start.springboot.io --><!-- 优质的 spring/boot/data/security/cloud 框架中文文档尽在 => https://springdoc.cn --><groupId>com.gansu</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

注意观察

  • 一个继承spring-boot-starter-parent,

两个依赖,

  • spring-boot-starter-web web 项目依赖必须,
  • spring-boot-starter-test spring boot 项目单元测试依赖

注意,很多人配置的maven加速镜像,其中很多配置的阿里云maven镜像,在这会有找不到最新Springboot相关包的问题,也可以把加速镜像指向华为云:

2. Maven镜像配置

1.6 启动项目

通过spring boot的启动类,这里是DemoApplication,选中类,右键选择–>Run‘DemoApplication

在这里插入图片描述

在控制台出现如下输出:

在这里插入图片描述

找到如下文字,表明SpringBoot已经成功启动:

在这里插入图片描述

  • tomcat启动在8080端口,http协议,启动花费了3.184秒
    打开浏览器,输入地址:http://localhost:8080 ,出现如下画面

在这里插入图片描述

出现上图404错误是正常的,因为我们什么都没写。

1.7 编写 HelloController

在这里插入图片描述

注意HelloController所在包,必须在com.gansu.demo包,或者子包下面。

package com.gansu.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class HelloController {@RequestMapping("/hello")@ResponseBodypublic String hello(){return "Hello Spring boot!!!";}
}

重启应用,看控制台输出:

重启发现刚才写的hello已经映射出来了
访问http://localhost:8080/hello

在这里插入图片描述

二、SpringBoot 基于web应用开发

2.1 SpringBoot json支持

(1)、创建实体bean Car

Lombok使用

  • 1、导入依赖库

在这里插入图片描述

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.6</version>
</dependency>
  • 2、安装插件

在这里插入图片描述

  • 3、在实体bean使用插件注解或直接生成
    @Data //get 、set
    @AllArgsConstructor //所有参数的有参数构造函数
    @NoArgsConstructor //无参数构造函数

在这里插入图片描述

package com.gansu.pojo;import java.io.Serializable;public class Car implements Serializable {private Integer id;private String name;private Float price;public Car() {}public Car(Integer id, String name, Float price) {this.id = id;this.name = name;this.price = price;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Float getPrice() {return price;}public void setPrice(Float price) {this.price = price;}@Overridepublic String toString() {return "Car{" +"id=" + id +", name='" + name + '\'' +", price=" + price +'}';}
}

(2)、创建Controller CarController

在这里插入图片描述

package com.gansu.controller;import com.gansu.pojo.Car;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/car")
public class CarController {@RequestMapping("/findOne")public Car findOne(){Car car = new Car(1,"喵喵",23F);return car;}
}

说明:@RestController 注解,等于@Controller 与 @ResponseBody 一起使用

(3)、测试获取单个对象json

开启postman,设置发出get请求,请求地址:

http://localhost:8080/car/findOne

在这里插入图片描述

在这里插入图片描述

(4)、修改Controller CarController新增返回list集合方法

在这里插入图片描述

@RequestMapping("/getAllCar")
public List<Car> getAllCar(){ArrayList list = new ArrayList();Car car1 = new Car(1,"喵喵1",231F);Car car2 = new Car(2,"喵喵2",232F);Car car3 = new Car(3,"喵喵3",233F);Car car4 = new Car(4,"喵喵4",234F);Car car5 = new Car(5,"喵喵5",235F);Car car6 = new Car(6,"喵喵6",236F);list.add(car1);list.add(car2);list.add(car3);list.add(car4);list.add(car5);list.add(car6);return list;
}

(5)、测试获取集合多个对象json

开启postman,设置发出get请求,请求地址:http://localhost:8080/car/getAllCar

在这里插入图片描述

在这里插入图片描述

2.2 SpringBoot 请求传递参数

2.1.1 第一类:请求路径传参

@PathVariable 获取路径参数。即url/{id} 这种形式
@RequestParam 获取查询参数。即url?name=value 这种形式

(1)、修改Controller CarController新增接收参数,返回单个对象方法

在这里插入图片描述

@RequestMapping("/getCarById/{id}")
public Car geteCarById(@PathVariable("id") Integer id, @RequestParam("name") String name){Car car = new Car();car.setId(id);car.setName(name);car.setPrice(999.9f);return car;
}

(2)、测试传递参数获取单个对象json

在这里插入图片描述

2.1.2 第二类:@RequestBody 参数

(3)、修改Controller CarController新增接收封装对象参数,返回单个及多个对象方法

在这里插入图片描述

@RequestMapping("/getCar")
public Car getCar(Car car){return car;
}

(6)、测试传递普通body参数获取单个对象json

开启postman,设置发出post请求,请求地址:
http://localhost:8080/car/getCar

请求参数,选择body

在这里插入图片描述

2.3 SpringBoot 静态资源

2.3.1 默认静态资源映射

Spring Boot 对静态资源映射提供了默认配置
Spring Boot 默认将 /** 所有访问映射到以下目录:

  • classpath:/static
  • classpath:/public
  • classpath:/resources
  • classpath:/META-INF/resources
    如:在resources目录下新建 publicresourcesstatic 三个目录,并分别放入 a.jpg b.jpg c.jpg 图片

图片素材:👇👇

在这里插入图片描述

在这里插入图片描述

浏览器分别访问:

  • http://localhost:8080/a.jpg
  • http://localhost:8080/b.jpg
  • http://localhost:8080/c.jpg

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

均能正常访问相应的图片资源。那么说明,Spring Boot 默认会挨个从 public resources static 里面找是否存在相应的资源,如果有则直接返回。

2.3.2 自定义静态资源访问

试想这样一种情况:一个网站有文件上传文件的功能,如果被上传的文件放在上述的那些文件夹中会有怎样的后果?
网站数据与程序代码不能有效分离;当项目被打包成一个.jar文件部署时,再将上传的文件放到这个.jar文件中是有多么低的效率;网站数据的备份将会很痛苦。此时可能最佳的解决办法是将静态资源路径设置到磁盘的基本个目录。

第一种方式

  • 1、配置类

在这里插入图片描述

package com.gansu.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/myPic/**").addResourceLocations("file:D:\\develop\\ideaIU-2018.2.5\\ideaIU-2018.2.5\\idea_workspace\\pic\\");}
}

上面的意思就是:将所有D:\develop\ideaIU-2018.2.5\ideaIU-2018.2.5\idea_workspace\pic\ 访问都映射到/myPic/** 路径下

2、重启项目
例如,在D:\develop\ideaIU-2018.2.5\ideaIU-2018.2.5\idea_workspace\pic\中有一张a.jpg图片

在这里插入图片描述

在浏览器输入:http://localhost:8080/myPic/a.jpg即可访问。

在这里插入图片描述

第二种方式

首先,我们配置application.properties

web.upload-path=D:/develop/ideaIU-2018.2.5/ideaIU-2018.2.5/idea_workspace/pic/
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,\
classpath:/static/,classpath:/public/,file:${web.upload-path}

注意:
web.upload-path:这个属于自定义的属性,指定了一个路径,注意要以/结尾;
spring.mvc.static-path-pattern=/**:表示所有的访问都经过静态资源路径;
spring.resources.static-locations:在这里配置静态资源路径,前面说了这里的配置是覆盖默认配置,所以需要将默认的也加上否则static、public等这些路径将不能被当作静态资源路径,在这个最末尾的file:${web.upload-path}之所有要加file:是因为指定的是一个具体的硬盘路径,其他的使用classpath指的是系统环境变量。

然后,重启项目
例如,在D:/develop/ideaIU-2018.2.5/ideaIU-2018.2.5/idea_workspace/pic/中有一张a.jpg图片

在浏览器输入:http://localhost:8080/a.jpg 即可访问。

在这里插入图片描述

三、SpringBoot 属性配置

Spring Boot并不真正是所谓的『零配置』,他的理念是“习惯优于配置”采用了一些默认的习惯性配置,让你无需手动进行配置,从而让你的项目快速运行起来。所以要想玩转Spring Boot,了解这些默认配置还是必不可少的。

3.1 项目默认属性配置文件所在位置及配置实例

创建Spring Boot项目时,会默认生成一个全局配置文件application.properties(可以修改后缀为.yml),在src/main/resources目录下或者类路径的/config下。我们可以通过修改该配置文件来对一些默认配置的配置值进行修改。

在这里插入图片描述

【修改默认配置】

  • 1、spring boot 开发web应用的时候,默认tomcat的启动端口为8080,如果需要修改默认的端口,则需要在application.yml添加以下记录:
server:port: 8081

重启项目,启动日志可以看到:Tomcat started on port(s): 8081 (http) 启动端口为8081 ,浏览器中访问 http://localhost:8081 能正常访问。

在这里插入图片描述

在这里插入图片描述

  • 2、spring boot 开发web应用的时候,访问路径为 /,如果需要修改访问路径,则需要在application.yml添加以下记录:

在这里插入图片描述

server:port: 8081servlet:context-path: /demo

重启项目,启动日志就可以看到:Tomcat started on port(s): 8081(http) with context path ‘/demo’,浏览器中访问 http://localhost:8081/demo/a.jpg能正常访问。

在这里插入图片描述

3.2 实体类属性赋值

当属性参数变多的时候,我们习惯创建一个实体,用实体来统一接收赋值这些属性。

(1)、定义配置文件

在这里插入图片描述

server:port: 8081servlet:context-path: /demoUserBody:username: zhangsanpassword: 123age: 22birthday: 2024-7-27spring:jackson:date-format: yyyy-MM-ddtime-zone: GMT+8

(2)、创建实体类 UserBody

在这里插入图片描述

package com.gansu.pojo;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.annotation.DateTimeFormat;import java.io.Serializable;
import java.util.Date;@Configuration
@ConfigurationProperties(prefix = "userbody")    //prefix 参数必须全部为小写
public class UserBody implements Serializable {private String username;private String password;private Integer age;@DateTimeFormat(pattern = "yyyy-MM-dd")private Date birthday;public UserBody() {}public UserBody(String username, String password, Integer age, Date birthday) {this.username = username;this.password = password;this.age = age;this.birthday = birthday;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}@Overridepublic String toString() {return "UserBody{" +"username='" + username + '\'' +", password='" + password + '\'' +", age=" + age +", birthday='" + birthday + '\'' +'}';}
}

需要在实体类上增加注解@ConfigurationProperties,并指定prefix前缀。prefix为全小写。

(3)、编写Controller调用属性bean

在这里插入图片描述

package com.gansu.controller;import com.gansu.pojo.UserBody;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@EnableConfigurationProperties({UserBody.class})
public class UserBodyController {@AutowiredUserBody userBody;@GetMapping("/getUser")public String getUser(){return userBody.toString();}
}

EnableConfigurationProperties注解需要加在调用类上,或者加在启动类SpringbootSimpleApplication上也可以。

访问地址:http://localhost:8081/demo/getUser

可以看到返回值:

在这里插入图片描述

3.3 自定义配置文件

application.yml是系统默认的配置文件,当然我们也可以创建自定义配置文件,在路径src/main/resources下面创建文件test.properties

注意:spring boot1.5 版本后@PropertySource注解就不能加载自定义的yml配置文件了

(1)、定义userBody.properties 删除或修改之前的yml,不然不生效

在这里插入图片描述

userbody.username=zhangsan88
userbody.password=12312388
userbody.age=228
userbody.birthday=2024-7-27

(2)、将配置赋值到 javabean

在这里插入图片描述

@PropertySource("classpath:userBody.properties")

@Configuration 注解包含@Component注解
1.5版本后需要通过@PropertySource(“classpath:userBody.properties”)指定配置文件

(3)、Controller 读取配置和上面一致

访问地址:http://localhost:8080/getUser 可以看到返回值:

在这里插入图片描述

3.4 多环境配置文件

使用多个yml配置文件进行配置属性文件
可以使用多个yml来配置属性,将与环境无关的属性放置到application.yml文件里面;通过与配置文件相同的命名规范,创建application-{profile}.yml文件 存放不同环境特有的配置,例如 application-test.yml 存放测试环境特有的配置属性,application-prod.yml 存放生产环境特有的配置属性。

通过这种形式来配置多个环境的属性文件,在application.yml文件里面spring.profiles.active=xxx来指定加载不同环境的配置,如果不指定,则默认只使用application.yml属性文件,不会加载其他的profiles的配置。

(1)、创建application-dev.yml

server:port: 8082servlet:context-path: /demo2

(2)、创建application-test.yml

server:port: 8083servlet:context-path: /demo3

(3)、创建application-prod.yml

server:port: 8084servlet:context-path: /demo4

(4)、修改application.yml

spring:profiles:active: prod

通过设置,active: 的值对应不同的{profile}就可以使对应的配置文件生效。

在这里插入图片描述

文章源码

相关文章:

五、Spring Boot - 上手篇(1)

&#x1f33b;&#x1f33b;目录 一、快速入门&#xff1a;创建第一个SpringBoot 工程1.1 点击File--->New--->Project...1.2 选择版本和依赖的相关骨架包1.3 设置项目保存目录1.4 项目创建完成&#xff0c;工程主界面如下1.5 项目说明1.6 启动项目1.7 编写 HelloControl…...

Spring -- 使用XML开发MyBatis

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 文章目录 MyBatis XML配置文件开发配置连接字符串和MyBatis写Mapper层代码添加mapper接口添加UserInfoXmLMapper.xml 操作数据库INSERTDELETE & UPDATE MyBatis XML配置文件开发 实际上,除…...

openmv 学习笔记(24电赛笔记)

寻找特定目标 这个功能主要应用在&#xff0c;机器人寻找色块&#xff0c;无人机跟踪特定颜色&#xff0c;生产线上检测物体进行分类&#xff0c;还有人机交互等等功能应用。 相关函数 image.find_blobs(thresholds, roiAuto, x_stride2, y_stride1, invertFalse, area_thr…...

【C语言】【数据结构】二分查找(数组的练习)

目录 一、什么是二分查找 二、算法思想 2.1、概述 2.2、举例 &#xff08;1&#xff09;查找3&#xff08;数组里面存在的数&#xff09; &#xff08;2&#xff09;查找12&#xff08;数组里面不存在的数&#xff09; 三、代码实现 四、计算mid公式的优化 一、…...

Web:Url 编码 -13

URL编码概述 HTTP协议只支持iso8859-1字符集。 而此字符集中只有英文数字常见符号。 所以HTTP原生是无法传输非iso8859-1字符的。 为了解决这个问题&#xff0c;提出了一种称之为URL编码的解决方案。 URL编解码详解 将非iso8859-1字符&#xff0c;进行转换 先将字符按照指定码表…...

typescript 引用数据类型

let arr1: number[] [1, 2, 3]; // 规定为数组数字 let arr2: (number | string)[] ["1", 2, 3]; // 数字或字符串 &#xff5c;就代表联合类型 也称元组 let arr3: [null, string] [null, "1"]; // 必须两个值&#xff1a;null和字符串 let arr4: […...

OpenCV库学习之cv2.Sobel函数

OpenCV库学习之cv2.Sobel函数 一、简介 cv2.Sobel是OpenCV库中用于边缘检测的函数。它基于Sobel算子&#xff0c;通过计算图像在水平和垂直方向上的一阶导数来检测边缘。Sobel算子是一种离散差分算子&#xff0c;能够有效地突出图像中的高频变化区域&#xff0c;即边缘。 二、…...

上传Git 仓库 勤勉git (超详细教程)

注册 官网&#xff1a; 我就喜欢动个仓库名字和分支名字 就创建了...

C/C++基础:宏

C/C基础&#xff1a;宏 简述宏的简单使用基础语法带参宏&#xff08;宏函数&#xff09;宏参字符串化#宏拼接## 宏的陷阱多行定义宏中的空格宏函数不是函数行末分号问题一些建议 宏的奇妙使用 简述 宏作为C/C最有特色的语言性质之一&#xff0c;犹如魔法一般&#xff0c;合理的…...

「豆包Marscode体验官」AI加持的云端IDE——三种方法高效开发前后端聊天交互功能

豆包 MarsCode 是一个集成了AI功能的编程助手和云端IDE&#xff0c;旨在提高开发效率和质量。它支持多种编程语言和IDE&#xff0c;提供智能代码补全、代码解释、单元测试生成和问题修复等功能&#xff0c;同时具备AI对话视图和开发工具。 豆包 MarsCode 豆包 MarsCode 编程助…...

一文带你掌握C++虚函数·和多态

9. C虚函数与多态 虚函数 virtual修饰的成员函数就是虚函数 虚函数对类的内存影响:需要增加一个指针类型的内存大小无论多少虚函数&#xff0c;只会增加一个指针类型的内存大小虚函数表的概念: 指向虚函数的指针 我们自己也可以通过虚函数表指针去访问函数(一般做这样的操作…...

OpenCV 4.10 + OpenCV_contrib配置教程 仅供参考

参考&#xff1a;https://blog.csdn.net/qq_27278957/article/details/108224325 https://blog.csdn.net/weixin_43763292/article/details/130232863 OpenCV&#xff1a;https://github.com/opencv/opencv/releases/tag/4.10.0 OpcenCV_contrib: https://github.com/opencv/o…...

ClkLog:开源用户行为分析框架,让数据分析更轻松

ClkLog&#xff1a;开源用户行为分析框架&#xff0c;让数据分析更轻松 在数据驱动的时代&#xff0c;找到一个好用的用户行为分析工具真是难上加难。但是今天你有福了&#xff0c;开源免费的 ClkLog 就是你的不二选择&#xff01;本文将为你详细介绍 ClkLog 的功能特点、技术架…...

Spring源码学习笔记之@Async源码

文章目录 一、简介二、异步任务Async的使用方法2.1、第一步、配置类上加EnableAsync注解2.2、第二步、自定义线程池2.2.1、方法一、不配置自定义线程池使用默认线程池2.2.2、方法二、使用AsyncConfigurer指定线程池2.2.3、方法三、使用自定义的线程池Excutor2.2.4、方法四、使用…...

面试题:如何验证代码的可靠性

代码结构上的&#xff1a; 1 可扩展性 是否否和开闭原则 2 性能&#xff0c;数据结构用的是否合理&#xff0c;算法等是否效率高。 3 安全性 是否存在潜在的安全 整数溢出 SQL注入 等 4 代码复杂度 圈负杂度 if嵌套深度 函数长度等 5 函数变量的命名是否具有自解释性 1. …...

前端开发的十字路口,薪的出口会是AI吗?

前言 在数字化转型的浪潮中&#xff0c;前端开发一直扮演着至关重要的角色&#xff0c;它连接着用户与产品之间的桥梁。然而&#xff0c;随着技术的不断进步和社会经济环境的变化&#xff0c;前端开发领域也面临着前所未有的挑战和机遇。 前端开发的困境 前端开发领域的竞争…...

pdf太大怎么压缩大小?这几种压缩方法操作起来很简单!

pdf太大怎么压缩大小&#xff1f;在数字化洪流席卷的当下&#xff0c;PDF文件的“臃肿”难题如同巨石般横亘于高效办公之路&#xff0c;它们不仅贪婪地吞噬着宝贵的存储空间&#xff0c;更如沉重的枷锁&#xff0c;拖曳着我们的工作进度&#xff0c;步入迟缓之境&#xff0c;试…...

leetcode-148. 排序链表

题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&#x…...

16 html网页服务和nginx服务

第十六次7.29 1.静态页面 1安装httpd [rootweb ~]# yum -y install httpd 2.真机访问页面 [rootweb html]# echo "静态html文件" > index.html 传入照片再次访问 静态资源&#xff0c;根据开发着保存在项目资源目录中的路径访问静态页面的资源 2.Apache 1.安…...

C语言:扫雷游戏实现

一、扫雷游戏的分析和设计 扫雷游戏想必大家都玩过吧&#xff0c;初级的玩法是在一个9*9的棋盘上找到没有雷的格子&#xff0c;而今天我们就要做的就是9*9扫雷游戏的实现。 1、游戏功能和规则 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...