五、Spring Boot - 上手篇(1)

news2024/9/9 0:46:13

🌻🌻目录

  • 一、快速入门:创建第一个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")
    @ResponseBody
    public 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;
    }

    @Override
    public 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 {

    @Override
    public 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: 8081
  servlet:
    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: 8081
  servlet:
    context-path: /demo


UserBody:
  username: zhangsan
  password: 123
  age: 22
  birthday: 2024-7-27

spring:
  jackson:
    date-format: yyyy-MM-dd
    time-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;
    }

    @Override
    public 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 {

    @Autowired
    UserBody 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: 8082
  servlet:
    context-path: /demo2

(2)、创建application-test.yml

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

(3)、创建application-prod.yml

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

(4)、修改application.yml

spring:
  profiles:
    active: prod

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

在这里插入图片描述

文章源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1958665.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年7月23日~2024年7月29日周报

目录 一、前言 二、完成情况 2.1 一种具有边缘增强特点的医学图像分割网络 2.2 融合边缘增强注意力机制和 U-Net 网络的医学图像分割 2.3 遇到的困难 三、下周计划 一、前言 上周参加了一些师兄师姐的论文讨论会议&#xff0c;并完成了初稿。 本周继续修改论文&#xff0…

【Git】 如何将一个分支的某个提交合并到另一个分支

【Git】 如何将一个分支的某个提交合并到另一个分支 在使用 Git 进行版本控制时&#xff0c;常常会遇到这样的需求&#xff1a;将某个分支的特定提交合并到另一个分支中。这种情况下&#xff0c;我们可以使用 cherry-pick 命令来实现。本文将详细介绍 cherry-pick 命令的使用方…

定时任务报错问题,通级下还有其他定时任务却没有报错,如何解决??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

R语言统计分析——条形图

参考资料&#xff1a;R语言实战【第2版】 条形图通过垂直的或水平的条形展示了类别型变量的分布&#xff08;频数&#xff09;。函数barplot()的最简单用法是&#xff1a; barplot(height) 其中height是一个向量或一个矩阵。 本文中数据案例来自“vcd”包&#xff0c;需在第一…

JQuery异步请求与Flask后端通信、this和event指针汇总

目录 一.JQuery与Flask通信的三种方法 1.1$.ajax() 1.2$.get() 1.3$.post() 二.forEach()方法 三.this指针 3.1为什么要用this指针 3.2this的指向 3.3this指针的四种绑定方式 3.3.1默认绑定 3.3.2隐式绑定 3.3.3显式绑定 3.3.4new绑定 3.3.5通过标签调用this指针…

windows server服务器/linux服务器离线安装pandas

windows server服务器/linux服务器离线安装pandas pypi官网下载whl文件速度较慢&#xff0c;推荐使用国内的镜像源来下载&#xff0c;镜像源地址为 清华大学 &#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云&#xff1a;http://mirrors.aliyun.com/pypi/simple…

docker安装与container基本使用

安装 Homebrew 的 Cask 已经支持 Docker for Mac, mac用户狂喜 brew install --cask --appdir/Applications docker其他入门用法可参考 Docker Hello World- 菜鸟教程 或网上自行搜索博客学习。本文主要记录我运行go-zero-mall用到的一些注意点。当然&#xff0c;gonivinck项…

vue2+cesium实现报警特效

实现效果: 录制_2024_07_29_21_36_33_571 实现步骤如下: 1、安装cesium包:npm install cesium 2、在node-modules中找到刚刚安装的cesium,在文件夹中里面有一个Build文件夹,把Build里面的Cesium复制出来丢到public中 3、在index.html中进行引入: 4、新建一个js文件,…

前端常见场景、JS计算精度丢失问题(Decimal.js 介绍)

目录 一. Decimal.js 介绍 二. 常用方法 1. 创建 Decimal 实例 2.加法 add 或 plus 3.减法 sub 或 minus 4.乘法 times 或 mul 5.除法 div 或 dividedBy 6.取模 7.幂运算 8.平方根 9.保留小数位 toFixed方法(四舍五入) 三.项目应用 前端精度丢失问题通常由以下原因…

无线融合,智能协同:ECWAN打造物联网高效协同网络

关键词&#xff1a;资产管理、ECWAN、无线混合组网、用电监测、用电计量、广域基站、计量插座、边缘协同 在当今快速发展的物联网领域&#xff0c;每天都有数以亿计的设备互相通信&#xff0c;形成庞大而复杂的网络生态。在这样的背景下&#xff0c;ECWAN技术以其灵活、高效和智…

【Linux】TCP全解析:构建可靠的网络通信桥梁

文章目录 前言1. TCP 协议概述2. TCP报头结构3. 如何理解封装和解包呢&#xff1f;4. TCP的可靠性机制4.1 TCP的确认应答机制 4.2 超时重传机制5. TCP链接管理机制5.1 经典面试题&#xff1a;为什么建立连接是三次握手&#xff1f;5.2 经典面试题&#xff1a;为什么要进行四次挥…

读零信任网络:在不可信网络中构建安全系统04最小特权

1. 公钥基础设施 1.1. PKI 1.2. 数字证书本身并不能解决身份认证问题 1.2.1. 需要一种方法来验证获得的公钥的确属于某人 1.2.2. 公钥基础设施&#xff08;PKI&#xff09;解决了这个问题 1.3. PKI定义了一组角色及其职责&#xff0c;能够在不可信的网络中安全地分发和验证…

【Websim.ai】一句话让AI帮你生成一个网页

【Websim.ai】一句话让AI帮你生成一个网页 网站链接 websim.ai 简介 websim.ai接入了Claude Sonnet 3.5&#xff0c;GPT-4o等常用的LLM&#xff0c;只需要在websim.ai的官网指令栏中编写相关指令&#xff0c;有点类似大模型的Prompt&#xff0c;指令的好坏决定了网页生成的…

Lc63---1859将句子排序(排序)---Java版(未写完)

1.题目描述 2.思路 &#xff08;1&#xff09;首先将句子按空格分割成若干单词。 &#xff08;2&#xff09;每个单词的最后一个字符是它的位置索引。我们可以通过这个索引将单词恢复到正确的位置。 &#xff08;3&#xff09;按照单词的索引顺序排序这些单词。 &#xff08;4…

【已解决】嵌入式linux mobaxterm unable to open connection to comx 串口正常连接,但终端无法输入

1.点击Session重新选择串口&#xff0c;注意看看串口是不是连接到虚拟机&#xff0c;导致串口被占用。 2.选择PC机与开发板连接的串口&#xff0c;不知道的话可以打开设备管理器看看&#xff0c;选择正确的波特率&#xff0c;一般是115200。 3.关键一步&#xff1a;选择后别急…

性能测试:深入探索与实战指南

大家好&#xff0c;我是一名测试开发工程师&#xff0c;已经开源一套【自动化测试框架】和【测试管理平台】&#xff0c;欢迎大家联系我&#xff0c;一起【分享测试知识&#xff0c;交流测试技术】 在当今这个信息化、数字化的时代&#xff0c;软件系统的性能直接关乎到用户体验…

使用 Matlab 绘制带有纹理的柱状图

以下是效果 1. 在 Matlab 里安装两个额外的库&#xff1a; hatchfill2 和 legendflex。 &#xff08;1&#xff09;搜索并安装 hatchfill2&#xff0c;用来画纹理 (2) 搜索并安装 legendflex&#xff0c;用来画自定义的图例 2. 代码&#xff08;说明见注释&#xff09; data …

Centos 7系统(最小化安装)安装Git 、git-man帮助、补全git命令-详细文章

安装之前由于是最小化安装centos7安装一些开发环境和工具包 文章使用国内阿里源 cd /etc/yum.repos.d/ && mkdir myrepo && mv * myrepo&&lscurl -O https://mirrors.aliyun.com/repo/epel-7.repo;curl -O https://mirrors.aliyun.com/repo/Centos-7…

docker安装phpMyAdmin

直接安装phpMyAdmin需要有php环境&#xff0c;比较麻烦&#xff0c;总结了使用docker安装方法&#xff0c;并提供docker镜像。 1.docker镜像 见我上传的docker镜像&#xff1a;https://download.csdn.net/download/taotao_guiwang/89595177 2.安装 1).加载镜像 docker load …

(leetcode学习)24. 两两交换链表中的节点

给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4] 输出&#xff1a;[2,1,4…