五、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-webweb 项目依赖必须,spring-boot-starter-testspring 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:/staticclasspath:/publicclasspath:/resourcesclasspath:/META-INF/resources
如:在resources目录下新建public、resources、static三个目录,并分别放入 a.jpg b.jpg c.jpg 图片
图片素材:👇👇


浏览器分别访问:
http://localhost:8080/a.jpghttp://localhost:8080/b.jpghttp://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)
🌻🌻目录 一、快速入门:创建第一个SpringBoot 工程1.1 点击File--->New--->Project...1.2 选择版本和依赖的相关骨架包1.3 设置项目保存目录1.4 项目创建完成,工程主界面如下1.5 项目说明1.6 启动项目1.7 编写 HelloControl…...
Spring -- 使用XML开发MyBatis
T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 今天你敲代码了吗 文章目录 MyBatis XML配置文件开发配置连接字符串和MyBatis写Mapper层代码添加mapper接口添加UserInfoXmLMapper.xml 操作数据库INSERTDELETE & UPDATE MyBatis XML配置文件开发 实际上,除…...
openmv 学习笔记(24电赛笔记)
寻找特定目标 这个功能主要应用在,机器人寻找色块,无人机跟踪特定颜色,生产线上检测物体进行分类,还有人机交互等等功能应用。 相关函数 image.find_blobs(thresholds, roiAuto, x_stride2, y_stride1, invertFalse, area_thr…...
【C语言】【数据结构】二分查找(数组的练习)
目录 一、什么是二分查找 二、算法思想 2.1、概述 2.2、举例 (1)查找3(数组里面存在的数) (2)查找12(数组里面不存在的数) 三、代码实现 四、计算mid公式的优化 一、…...
Web:Url 编码 -13
URL编码概述 HTTP协议只支持iso8859-1字符集。 而此字符集中只有英文数字常见符号。 所以HTTP原生是无法传输非iso8859-1字符的。 为了解决这个问题,提出了一种称之为URL编码的解决方案。 URL编解码详解 将非iso8859-1字符,进行转换 先将字符按照指定码表…...
typescript 引用数据类型
let arr1: number[] [1, 2, 3]; // 规定为数组数字 let arr2: (number | string)[] ["1", 2, 3]; // 数字或字符串 |就代表联合类型 也称元组 let arr3: [null, string] [null, "1"]; // 必须两个值:null和字符串 let arr4: […...
OpenCV库学习之cv2.Sobel函数
OpenCV库学习之cv2.Sobel函数 一、简介 cv2.Sobel是OpenCV库中用于边缘检测的函数。它基于Sobel算子,通过计算图像在水平和垂直方向上的一阶导数来检测边缘。Sobel算子是一种离散差分算子,能够有效地突出图像中的高频变化区域,即边缘。 二、…...
上传Git 仓库 勤勉git (超详细教程)
注册 官网: 我就喜欢动个仓库名字和分支名字 就创建了...
C/C++基础:宏
C/C基础:宏 简述宏的简单使用基础语法带参宏(宏函数)宏参字符串化#宏拼接## 宏的陷阱多行定义宏中的空格宏函数不是函数行末分号问题一些建议 宏的奇妙使用 简述 宏作为C/C最有特色的语言性质之一,犹如魔法一般,合理的…...
「豆包Marscode体验官」AI加持的云端IDE——三种方法高效开发前后端聊天交互功能
豆包 MarsCode 是一个集成了AI功能的编程助手和云端IDE,旨在提高开发效率和质量。它支持多种编程语言和IDE,提供智能代码补全、代码解释、单元测试生成和问题修复等功能,同时具备AI对话视图和开发工具。 豆包 MarsCode 豆包 MarsCode 编程助…...
一文带你掌握C++虚函数·和多态
9. C虚函数与多态 虚函数 virtual修饰的成员函数就是虚函数 虚函数对类的内存影响:需要增加一个指针类型的内存大小无论多少虚函数,只会增加一个指针类型的内存大小虚函数表的概念: 指向虚函数的指针 我们自己也可以通过虚函数表指针去访问函数(一般做这样的操作…...
OpenCV 4.10 + OpenCV_contrib配置教程 仅供参考
参考:https://blog.csdn.net/qq_27278957/article/details/108224325 https://blog.csdn.net/weixin_43763292/article/details/130232863 OpenCV:https://github.com/opencv/opencv/releases/tag/4.10.0 OpcenCV_contrib: https://github.com/opencv/o…...
ClkLog:开源用户行为分析框架,让数据分析更轻松
ClkLog:开源用户行为分析框架,让数据分析更轻松 在数据驱动的时代,找到一个好用的用户行为分析工具真是难上加难。但是今天你有福了,开源免费的 ClkLog 就是你的不二选择!本文将为你详细介绍 ClkLog 的功能特点、技术架…...
Spring源码学习笔记之@Async源码
文章目录 一、简介二、异步任务Async的使用方法2.1、第一步、配置类上加EnableAsync注解2.2、第二步、自定义线程池2.2.1、方法一、不配置自定义线程池使用默认线程池2.2.2、方法二、使用AsyncConfigurer指定线程池2.2.3、方法三、使用自定义的线程池Excutor2.2.4、方法四、使用…...
面试题:如何验证代码的可靠性
代码结构上的: 1 可扩展性 是否否和开闭原则 2 性能,数据结构用的是否合理,算法等是否效率高。 3 安全性 是否存在潜在的安全 整数溢出 SQL注入 等 4 代码复杂度 圈负杂度 if嵌套深度 函数长度等 5 函数变量的命名是否具有自解释性 1. …...
前端开发的十字路口,薪的出口会是AI吗?
前言 在数字化转型的浪潮中,前端开发一直扮演着至关重要的角色,它连接着用户与产品之间的桥梁。然而,随着技术的不断进步和社会经济环境的变化,前端开发领域也面临着前所未有的挑战和机遇。 前端开发的困境 前端开发领域的竞争…...
pdf太大怎么压缩大小?这几种压缩方法操作起来很简单!
pdf太大怎么压缩大小?在数字化洪流席卷的当下,PDF文件的“臃肿”难题如同巨石般横亘于高效办公之路,它们不仅贪婪地吞噬着宝贵的存储空间,更如沉重的枷锁,拖曳着我们的工作进度,步入迟缓之境,试…...
leetcode-148. 排序链表
题目描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4]示例 2: 输入:head [-1,5,3,4,0] 输出:[-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 传入照片再次访问 静态资源,根据开发着保存在项目资源目录中的路径访问静态页面的资源 2.Apache 1.安…...
C语言:扫雷游戏实现
一、扫雷游戏的分析和设计 扫雷游戏想必大家都玩过吧,初级的玩法是在一个9*9的棋盘上找到没有雷的格子,而今天我们就要做的就是9*9扫雷游戏的实现。 1、游戏功能和规则 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
