扁平化设计网站欣赏/百度优选官网
文章目录
- ① —— 请求 ——
- 一、简单参数 @RequestParam
- 1.1 参数与形参 命名相同
- 1.2 参数与形参 命名不同
- 二、实体参数
- 2.1 简单实体对象
- 2.2 复杂实体对象
- 三、数组集合参数
- 3.1 数组
- 3.2 集合 @RequestParam
- 四、日期参数 @DateTimeFormat
- 五、JSON参数 @RequestBody
- 六、路径参数 @PathVariable
- 七、请求头参数 @RequestHeader
- ② —— 响应 ——
- 八、@ResponseBody
- 九、统一响应结果(Result工具类)
- 9.1 Result工具类代码:
- 9.2 静态资源
- 十、案例测试 (解析xml前端显示数据)
- 10.1 解析xml文件
- 10.2 加载解析xml 数据转换处理
- 10.3 问题分析
- 十一、分层解耦
- 11.1 三层架构
- 11.2 分层解耦
- 11.3 解耦思路
- 11.4 IoC & DI
- 11.4.1 IoC 详解
- 11.4.2 组件扫描
- 11.4.3 DI 详解
- 总结
① —— 请求 ——
一、简单参数 @RequestParam
1.1 参数与形参 命名相同
参数名与形参变量名相同,定义形参即可接收参数。
@RestController
@RequestMapping("hello")
public class HelloController {@GetMapping("show")public String show(String name,String age){System.out.println(name+"! Hello World! !" + age);return name+" Hello World! " + age ;}
}
参数名或形参名不同 传入传出数值为空Null
1.2 参数与形参 命名不同
使用注解 @RequestParam
当形参名字不同时,绑定与参数对应的新名字!通过注解完成映射!
// name : 命名
// required : 默认为TRUE 即必须有;FALSE允许没有即为可以空Null
@RequestParam(name = "age",required = false) String age
挂载注解后,默认required默认为TRUE,即必须传参,否则报错!
二、实体参数
@Data
public class User {private String name;private Integer age;
}
2.1 简单实体对象
@GetMapping("show1")public String show1(User user){System.out.println(user);return user.toString();}
- 参数名和实体类属性名需要一致 : 否则属性为空Null
2.2 复杂实体对象
Address 实体类:
@Data
public class Address {private String province;private String city;
}
- User类中有一个Address类型的属性(Address是一个实体类)
- 请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套实体类属性参数。
contoller:
@GetMapping("show1")public String show1(User user){System.out.println(user);return user.toString();}
三、数组集合参数
数组集合参数的使用场景:在HTML的表单中,有一个表单项是支持多选的(复选框),可以提交选择的多个值。
多个值是怎么提交的呢?其实多个值也是一个一个的提交。
后端程序接收上述多个值的方式有两种:
- 数组
- 集合
3.1 数组
controller
@GetMapping("show2")public String show2(String[] hobby){System.out.println(Arrays.toString(hobby));return Arrays.toString(hobby);}
3.2 集合 @RequestParam
集合参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam 绑定参数关系
默认情况下,请求中参数名相同的多个值,是封装到数组。如果要封装到集合,要使用@RequestParam绑定参数关系
@GetMapping("show3")public String show3(@RequestParam List<String> hobby){System.out.println(hobby);return hobby.toString();}
四、日期参数 @DateTimeFormat
在一些特殊的需求中,可能会涉及到日期类型数据的封装:
因为日期的格式多种多样(如:2023-12-12 10:05:45 、2023/12/12 10:05:45),那么对于日期类型的参数在进行封装的时候,需要通过@DateTimeFormat
注解,以及其pattern属性
来设置日期的格式。
@GetMapping("show4")public String show4(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){System.out.println(updateTime);return updateTime.toString();}
@DateTimeFormat
注解的pattern属性
中指定了哪种日期格式,前端的日期参数就必须按照指定的格式传递。- 后端controller方法中,需要使用
Date
类型或LocalDateTime
类型,来封装传递的参数。
五、JSON参数 @RequestBody
服务端Controller方法接收JSON格式数据:
- 传递json格式的参数,在Controller中会使用实体类进行封装。
- 封装规则:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数。需要使用 @RequestBody标识。
@RequestBody注解
:将JSON数据映射到形参的实体类对象中(JSON中的key和实体类中的属性名保持一致)
controller
@PostMapping("list")public String list(@RequestBody User user){System.out.println(user);return user.toString();}
六、路径参数 @PathVariable
路径参数:直接在请求的URL中传递参数:
http://localhost:8080/hello/path/wake/20
@GetMapping("path/{name}/{id}")public String path(@PathVariable String name,@PathVariable Integer id){System.out.println(name+" "+id);return name+" "+id;}
七、请求头参数 @RequestHeader
@GetMapping("head")public String head(@RequestHeader String name){System.out.println(name);return name;}
② —— 响应 ——
八、@ResponseBody
- 类型:方法注解、类注解
- 位置:写在Controller方法上或类上
- 作用:将方法返回值直接响应给浏览器
- 如果返回值类型是实体对象/集合,将会转换为JSON格式后在响应给浏览器
直接在类上加
@RestController
即可 :
@RestController = @Controller + @ResponseBody
@RestController源码:
@Target({ElementType.TYPE}) //元注解(修饰注解的注解)
@Retention(RetentionPolicy.RUNTIME) //元注解
@Documented //元注解
@Controller
@ResponseBody
public @interface RestController {@AliasFor(annotation = Controller.class)String value() default "";
}
类上有@RestController
注解或@ResponseBody
注解时:
-
表示当前类下所有的方法返回值做为响应数据
-
方法的返回值,如果是一个POJO对象或集合时,会先转换为JSON格式,在响应给浏览器
测试:
- 回显对象数据
@GetMapping("show1")public User show1(User user){System.out.println(user);user.setAge(99);return user;}
- 回显集合数据
@PostMapping("list")public List<User> list(@RequestBody User user){List<User> list = new ArrayList<>();user.setName("DougWake");list.add(user);return list;}
九、统一响应结果(Result工具类)
前面所编写的这些Controller方法中,返回值各种各样,没有任何的规范:
在真实的项目开发中,无论是哪种方法,我们都会定义一个统一的返回结果。方案如下:
前端:只需要按照统一格式的返回结果进行解析(仅一种解析方案),就可以拿到数据。
统一的返回结果使用类来描述,在这个结果中包含:
-
响应状态码 code:当前请求是成功,还是失败
-
状态码信息 msg:给页面的提示信息
-
返回的数据 data:给前端响应的数据(字符串、对象、集合)
9.1 Result工具类代码:
Result工具类:
package com.wake.utils;/*** 全局统一返回结果类*/
public class Result<T> {// 返回码private Integer code;// 返回消息private String message;// 返回数据private T data;public Result(){}// 返回数据protected static <T> Result<T> build(T data) {Result<T> result = new Result<T>();if (data != null)result.setData(data);return result;}public static <T> Result<T> build(T body, Integer code, String message) {Result<T> result = build(body);result.setCode(code);result.setMessage(message);return result;}public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {Result<T> result = build(body);result.setCode(resultCodeEnum.getCode());result.setMessage(resultCodeEnum.getMessage());return result;}/*** 操作成功* @param data baseCategory1List* @param <T>* @return*/public static<T> Result<T> ok(T data){Result<T> result = build(data);return build(data, ResultCodeEnum.SUCCESS);}public Result<T> message(String msg){this.setMessage(msg);return this;}public Result<T> code(Integer code){this.setCode(code);return this;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public T getData() {return data;}public void setData(T data) {this.data = data;}
}
Result 响应码 枚举类:
package com.wake.utils;/*** 统一返回结果状态信息类*/
public enum ResultCodeEnum {SUCCESS(200, "success"),USERNAME_ERROR(501, "usernameError"),PASSWORD_ERROR(503, "passwordError"),NOTLOGIN(504, "notLogin"),USERNAME_USED(505, "userNameUsed");private Integer code;private String message;private ResultCodeEnum(Integer code, String message) {this.code = code;this.message = message;}public Integer getCode() {return code;}public String getMessage() {return message;}
}
返回统一的响应结果:
9.2 静态资源
资源地址可以在yml配置文件中修改,改完就直接覆盖默认路径。
在SpringBoot项目中,静态资源默认可以存放的目录:
- classpath:/static/
- classpath:/public/
- classpath:/resources/
- classpath:/META-INF/resources/
classpath:
- 代表的是类路径,在maven的项目中,其实指的就是 src/main/resources 或者 src/main/java,但是java目录是存放java代码的,所以相关的配置文件及静态资源文档,就放在 src/main/resources下。
【SpringBoot3】整合SpringMVC_静态资源处理
前端资源放这了:
十、案例测试 (解析xml前端显示数据)
10.1 解析xml文件
dom4j的依赖,用于解析XML文件:
<dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</version>
</dependency>
解析XML的工具类XMLParserUtils:
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;public class XmlParserUtils {public static <T> List<T> parse(String file , Class<T> targetClass) {ArrayList<T> list = new ArrayList<T>(); //封装解析出来的数据try {//1.获取一个解析器对象SAXReader saxReader = new SAXReader();//2.利用解析器把xml文件加载到内存中,并返回一个文档对象Document document = saxReader.read(new File(file));//3.获取到根标签Element rootElement = document.getRootElement();//4.通过根标签来获取 user 标签List<Element> elements = rootElement.elements("emp");//5.遍历集合,得到每一个 user 标签for (Element element : elements) {//获取 name 属性String name = element.element("name").getText();//获取 age 属性String age = element.element("age").getText();//获取 image 属性String image = element.element("image").getText();//获取 gender 属性String gender = element.element("gender").getText();//获取 job 属性String job = element.element("job").getText();//组装数据Constructor<T> constructor = targetClass.getDeclaredConstructor(String.class, Integer.class, String.class, String.class, String.class);constructor.setAccessible(true);T object = constructor.newInstance(name, Integer.parseInt(age), image, gender, job);list.add(object);}} catch (Exception e) {e.printStackTrace();}return list;}
}
10.2 加载解析xml 数据转换处理
案例:读取xml 加载数据转换解析 显示在前端页面
实体类:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Emp {private String name;private Integer age;private String image;private String gender;private String job;
}
controller:
@RestController
public class EmpController {@RequestMapping("/listEmp")public Result list(){//1. 加载并解析emp.xmlString file = this.getClass().getClassLoader().getResource("emp.xml").getFile();//System.out.println(file);List<Emp> empList = XmlParserUtils.parse(file, Emp.class);//2. 对数据进行转换处理 - gender, jobempList.stream().forEach(emp -> {//处理 gender 1: 男, 2: 女String gender = emp.getGender();if("1".equals(gender)){emp.setGender("男");}else if("2".equals(gender)){emp.setGender("女");}//处理job - 1: 讲师, 2: 班主任 , 3: 就业指导String job = emp.getJob();if("1".equals(job)){emp.setJob("讲师");}else if("2".equals(job)){emp.setJob("班主任");}else if("3".equals(job)){emp.setJob("就业指导");}});//3. 响应数据return Result.success(empList);}
}
http://localhost:8080/emp.html :
10.3 问题分析
我们会发现案例中:解析XML数据,获取数据的代码,处理数据的逻辑的代码,给页面响应的代码全部都堆积在一起了,全部都写在controller方法中了。
十一、分层解耦
单一职责原则:一个类或一个方法,就只做一件事情,只管一块功能。
- 数据访问:负责业务数据的维护操作,包括增、删、改、查等操作。Dao/Mapper
- 逻辑处理:负责业务逻辑处理的代码。service
- 请求处理、响应数据:负责,接收页面的请求,给页面响应数据。controller
11.1 三层架构
- Controller:控制层。接收前端发送的请求,对请求进行处理,并响应数据。
- Service:业务逻辑层。处理具体的业务逻辑。
- Dao/Mapper:数据访问层(Data Access Object),也称为持久层。负责数据访问操作,包括数据的增、删、改、查。
基于三层架构的程序执行流程:
- 前端发起的请求,由Controller层接收(Controller响应数据给前端)
- Controller层调用Service层来进行逻辑处理(Service层处理完后,把处理结果返回给Controller层)
- Service层进行业务处理(MD5加密等),调用Dao层(逻辑处理过程中需要用到的一些数据要从Dao层获取)
- Dao层与数据库相关联(Dao拿到的数据会返回给Service层)
11.2 分层解耦
【Java】面向对象 OOP_OOP三大特性之一:封装_为什么需要封装
程序中高内聚的体现:
程序中耦合代码的体现:
高内聚、低耦合的目的是使程序模块的可重用性、移植性大大增强。
11.3 解耦思路
不能在EmpController中使用new对象。
- 提供一个容器,容器中存储一些对象(例:EmpService对象)
- controller程序从容器中获取EmpService类型的对象
11.4 IoC & DI
- 控制反转:
- Inversion Of Control,简称IOC。
- 对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
- 这个容器称为:IOC容器或Spring容器
- 依赖注入:
- Dependency Injection,简称DI。
- 容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
- 程序运行时需要某个资源,此时容器就为其提供这个资源。
- 例:EmpController程序运行时需要EmpService对象,Spring容器就为其提供并注入EmpService对象
IOC容器中创建、管理的对象,称之为:bean对象
使用IOC容器 把需要的资源 装进去,使用DI将容器内的资源拿来用!
【Spring】IoC容器 控制反转 与 DI依赖注入 概念 第一期
【Spring】IoC容器 控制反转 与 DI依赖注入 三种实现方式 总结 第五期
11.4.1 IoC 详解
注解 | 说明 | 位置 |
---|---|---|
@Controller | @Component的衍生注解 | 标注在控制器类上 |
@Service | @Component的衍生注解 | 标注在业务类上 |
@Repository | @Component的衍生注解 | 标注在数据访问类上(由于与mybatis整合,用的少) |
@Component | 声明bean的基础注解 | 不属于以上三类时,用此注解 |
其实底层都是@Component注解
在IOC容器中,每一个Bean都有一个属于自己的名字,可以通过注解的value属性
指定bean的名字。
如果没有指定,默认为类名首字母小写。
注意事项:
- 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。
- 使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller。
11.4.2 组件扫描
bean想要生效,还需要被组件扫描
- 模拟测试
运行程序后,报错:
使用四大注解声明的bean,要想生效,还需要被组件扫描注解@ComponentScan
扫描
@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了引导类声明注解
@SpringBootApplication
中,
默认扫描的范围是SpringBoot启动类所在包及其子包。
- 也可以:手动添加@ComponentScan注解,指定要扫描的包(不建议)
- 推荐做法:
- 将我们定义的controller,service,dao这些包,都放在引导类所在包com.wake下:这样我们定义的bean就会被自动的扫描到
11.4.3 DI 详解
@Autowired 注解:
- 自动装配
- 默认是按照类型进行自动装配的
- (去IOC容器中找某个类型的对象,然后完成注入操作)
如果在IOC容器中,存在多个相同类型的bean对象,会出现什么情况呢?
程序报错:显示需要一个单一Bean,但是存在两个。
如何解决上述问题呢?Spring提供了以下几种解决方案:
-
@Primary
-
@Qualifier
-
@Resource
- @Primary注解
确定默认的实现
- @Qualifier注解
- 指定当前要注入的bean对象。 在@Qualifier的value属性中,指定注入的bean的名称。
- @Qualifier注解不能单独使用,必须配合@Autowired使用
- @Resource注解
- 是按照bean的名称进行注入。
- 通过name属性指定要注入的bean的名称。
面试题 : @Autowird 与 @Resource的区别
- @Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解
- @Autowired 默认是按照类型注入,而@Resource是按照名称注入
总结
使用自动构建SpringBoot 报错!
错误: 找不到或无法加载主类 com.wake.SpringbootTestPartApplication 原因: java.lang.ClassNotFoundException: com.wake.SpringbootTestPartApplication
解决: maven
clean
comlile
相关文章:

【SpringBoot】请求与响应参数 IoC与DI 总结
文章目录 ① —— 请求 ——一、简单参数 RequestParam1.1 参数与形参 命名相同1.2 参数与形参 命名不同 二、实体参数2.1 简单实体对象2.2 复杂实体对象 三、数组集合参数3.1 数组3.2 集合 RequestParam 四、日期参数 DateTimeFormat五、JSON参数 RequestBody六、路径参数 Pat…...

100道面试必会算法-05-字符串转换整数 (atoi)
100道面试必会算法-05-字符串转换整数 (atoi) 实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格检查…...

Ypay源支付2.8.8免授权聚合免签系统
本帖最后由 renleixiaoxu 于 2024-3-15 09:46 编辑 产品介绍 XPay是专为个人站长打造的聚合免签系统,拥有卓越的性能和丰富的功能。采用全新轻量化的界面UI,让您可以更加方便快捷地解决 知识付费和运营赞助的难题。同时,它基于高性能的Thin…...

从零到一构建短链接系统(三)
1.根据数据库表,利用在线网站https://jully.top/generator/ 根据数据库Info自动生成代码 2.在entity中创建UserDO Data TableName("t_user") public class UserDO { /** * id */ private Long id; /** * 用户名 */ private String username; /** * 密码…...

C语言易错知识点:scanf函数
scanf在C语言学习中比较常用,但因为其涉及屏幕缓冲区导致有的时候会调入陷阱,下面分享一下常见的需要注意的事项: 1.输入末尾带有回车\n 当我们输入数据后,最后按下回车时,屏幕缓冲区的末尾都会含有这个字符 scanf的…...

如何实现图片上传至服务器
在绝大多数的项目中都会涉及到文件上传等,下面我们来说一下技术派中是如何实现原生图片上传的,这个功能说起来简单,但其实对于技术还是有考验的。图片的上传涉及到IO读写,一个文件上传的功能,就可以把IO流涉及到的知识…...

OSPF协议全面学习笔记
作者:BSXY_19计科_陈永跃 BSXY_信息学院 注:未经允许禁止转发任何内容 OSPF协议全面学习笔记 1、OSPF基础2、DR与BDR3、OSPF多区域4、虚链路Vlink5、OSPF报文6、LSA结构1、一类/二类LSA(Router-LSA/Network-LSA) 更新完善中... 1、…...

acwing算法提高之搜索--剪枝
目录 1 介绍2 训练 1 介绍 本专题用来记录使用dfs剪枝技巧求解的题目。 剪枝有以下思路: 优化搜索顺序。可行性剪枝。最优性剪枝。唯一性剪枝,也叫去除冗余。记忆化搜索,也叫dp。 2 训练 题目1:165小猫爬山 C代码如下&#…...

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)上篇
提供具有网页显示能力的Web组件,ohos.web.webview提供web控制能力。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。示例效果请以真机运行为准,当前IDE预览器不支持。 需要权…...

TPU浅谈
前言 大家好,我是jiantaoyab,上篇文章讲了FPGA和ASIC,讲解了 FPGA 如何实现通过“软件”来控制“硬件”,以及我们可以进一步把 FPGA 设计出来的电路变成一块 ASIC 芯片。今天我们来看看TPU。大家可以点击这篇文章TPU深入了解TPU。…...

华为OD机试 - 求字符串中所有整数的最小和(Java JS Python C C++)
题目描述 输入字符串s,输出s中包含所有整数的最小和。 说明: 字符串s,只包含 a-z A-Z 合法的整数包括 1)正整数:一个或者多个0-9组成,如 0 2 3 002 102 2)负整数:负号 – 开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023 输入描述 包含数字的字符…...

goland设置保存文件时不将4个空格转为TAB
goland设置保存文件时不将4个空格转为TAB 版本:GoLand 2022.3 设置路径: Settings -> Editor -> Code Style -> Go -> Run gofmt图示:...

基于Linux内核的socket编程(TCP)的C语言示例
原文地址:https://www.geeksforgeeks.org/socket-programming-cc/ 服务端: #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <unistd.h>#…...

【WEEK3】 【DAY4】JSON交互处理第三部分【中文版】
2024.3.14 Thursday 接上文【WEEK3】 【DAY3】JSON交互处理第二部分【中文版】 目录 6.7.编写抽象类6.7.1.原因6.7.2.新建JsonUtils.java6.7.3.在UserController添加一个方法json6验证抽象类可调用6.7.4.在UserController添加一个方法json7验证该抽象类可复用6.7.5.运行 6.8.…...

下载chromedrive,使用自动化
1、先看一下自己浏览器的版本 2、访问 https://googlechromelabs.github.io/chrome-for-testing/...

D-Star 寻路算法
D-Star 寻路算法 下面简写 D-Star 为 D* D算法:D 算法”的名称源自 Dynamic A Star,最初由Anthony Stentz于“Optimal and Efficient Path Planning for Partially-Known Environments”中介绍。它是一种启发式的路径搜索算法, 适合面对周围环境未知或者…...

mysql5.7编译安装
MySQL 5.7在不同操作系统上的编译安装过程略有不同,以下是在Linux系统上编译安装MySQL 5.7的一般步骤: 1. 安装编译所需的依赖包 sudo yum install gcc-c cmake ncurses-devel bison openssl-devel 2. 下载MySQL源码包和Boost库并解压 wget https://dev.mysql.com/get/Dow…...

Java项目实战记录:雷达数据渲染
目录 Java项目实战记录:雷达数据渲染业务背景代码逻辑数据结构颜色渲染MapContent加载数据并输出截图 完整代码GenerateMapImage地图渲染工具测试代码 渲染效果 Java项目实战记录:雷达数据渲染 业务背景 我之前已经成功使用Java语言解析了C处理的雷达数…...

进程的概念 | PCB | Linux下的task_struct | 父子进程和子进程
在讲进程之前首先就是需要去回顾一下我们之前学的操作系统是干嘛的,首先操作系统是一个软件,它是对上提供一个良好高效,稳定的环境的,这是相对于用户来说的,对下是为了进行更好的软硬件管理的,所以操作系统…...

【GPT-SOVITS-03】SOVITS 模块-生成模型解析
说明:该系列文章从本人知乎账号迁入,主要原因是知乎图片附件过于模糊。 知乎专栏地址: 语音生成专栏 系列文章地址: 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…...

2024HVV行动-进军蓝中研判(log4j2、fastjson、Struts2、Shiro)
1、log4j2 特征: 恶意请求中包含 JNDI 协议地址,如"ldap://"、"rmi://"等,被 log4j2 解析为 JNDI 查找。 原理: 在日志输出中,未对字符进行严格的过滤,执行了 JNDI 协议加载的远程恶…...

亮点抢先看!4月16-17日,百度Create大会开设“AI公开课”,大咖带你打造赚钱工具
3月16日,2024百度Create AI开发者大会正式开放售票,嘉宾套票定价399元。据悉,本次大会以“创造未来(Create the Future)”为主题,设有20深度论坛、超30节AI公开课、3000平AI互动体验区和AI音乐节等精彩环节…...

【笔记本清灰/实用经验】荣耀Magicbook14-2020款-R5-4500U-清灰实战
清灰有风险,动手需谨慎,本文只分享本人的清灰过程,对使用它所产生的任何后果不任何负责任 文章目录 背景信息准备阶段工具准备信息收集 正式清灰初始化清灰流程放掉身体的静电(重要)拆笔记本后盖断开电源(重…...

如何写好Stable Diffusion的prompt
Stable Diffusion是一种强大的文本到图像生成模型,其效果在很大程度上取决于输入的提示词(Prompt)。以下是一些关于如何编写有效的Stable Diffusion Prompt的秘诀: 明确描述:尽量清晰地描述你想要的图像内容。使用具体…...

计算机毕业设计 | SpringBoot+vue 移动端社区物业管理系统(附源码+论文)
1, 概述 课题背景 近几年来,随着物业相关的各种信息越来越多,比如报修维修、缴费、车位、访客等信息,对物业管理方面的需求越来越高,我们在工作中越来越多方面需要利用网页端管理系统来进行管理,我们所需…...

玩转C语言——数组初探
一、前言 通过前面的学习,我们已了解C语言的结构变量、分支结构和循环结构。今天,我们一起来认识C语言的另一知识点——数组。先赞后看,养成习惯。 二、数组概念 学习数组,我们要明白数组是什么。在我看来:数组是⼀组…...

Nginx指令配置大全
基本命令 nginx -t 检查配置文件是否有语法错误 nginx -s reload 热加载,重新加载配置文件 nginx -s stop 快速关闭 nginx -s quit 等待工作进程处理完成后关闭配置块介绍 全局块 全局块是默认配置文件从开始到events块之间的…...

富格林:安全出金关注可信操作
富格林悉知,现货黄金投资凭借着诸多优势,成为了热门的投资产品之一,也获得了投资者的追捧。在投资中想要安全盈利出金,投资者一定要沉下心来学习专业知识和技术,这样才能在以后的投资操作中避免亏损,顺畅盈…...

DELETE、TRUNCATE 和 DROP 在MySQL中的区别及使用示例
在MySQL数据库中,DELETE、TRUNCATE TABLE 和 DROP 这三个命令分别适用于不同的数据删除需求,它们在工作原理、应用场景以及特性上有所区别。接下来,我们通过实例演示来明确这三者的不同之处。 DELETE 命令 功能与示例:DELETE 语…...

程序员应该如何选择职业赛道?
程序员选择职业赛道是一个涉及个人兴趣、技能匹配、市场需求和长远发展规划的综合决策过程。以下是一些关键步骤和考虑因素: 自我评估: 技能与专长:分析自己在编程语言、算法、数据结构等方面的现有技能,并思考这些技能更适合前端…...