JavaWeb开发-05-SpringBootWeb请求响应
一.请求
1.Postman
2.简单参数
package com.wjh.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;/** 测试请求参数接受*/
@RestController
public class RequestController {// //原始方式
// @RequestMapping ("/simpleParam")
// public String simpleParam(HttpServletRequest request){
// //获取请求参数
// String name = request.getParameter("name");
// String ageStr = request.getParameter("age");
//
// int age = Integer.parseInt(ageStr);
// System.out.println(name + ":" + age + ":");
//
// return "OK!";
// }//springboot 方式@RequestMapping ("/simpleParam")public String simpleParam( String name,Integer age){System.out.println(name + ":" + age + ":");return "OK!";}
}
GET请求:
POST请求:
package com.wjh.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;/** 测试请求参数接受*/
@RestController
public class RequestController {// //原始方式
// @RequestMapping ("/simpleParam")
// public String simpleParam(HttpServletRequest request){
// //获取请求参数
// String name = request.getParameter("name");
// String ageStr = request.getParameter("age");
//
// int age = Integer.parseInt(ageStr);
// System.out.println(name + ":" + age + ":");
//
// return "OK!";
// }//springboot 方式
// @RequestMapping ("/simpleParam")
// public String simpleParam( String name,Integer age){
// System.out.println(name + ":" + age + ":");
// return "OK!";
// }@RequestMapping ("/simpleParam")public String simpleParam(@RequestParam(name = "name") String username, Integer age){System.out.println(username + ":" + age + ":");return "OK!";}
}
3.实体参数
创建一个User类:
package com.wjh.pojo;public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
}
创建一个Address类
package com.wjh.pojo;public class Address {private String province; //省private String city; //市public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}@Overridepublic String toString() {return "Address{" +"province='" + province + '\'' +", city='" + city + '\'' +'}';}
}
package com.wjh.controller;import com.wjh.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;/** 测试请求参数接受*/
@RestController
public class RequestController {// //原始方式
// @RequestMapping ("/simpleParam")
// public String simpleParam(HttpServletRequest request){
// //获取请求参数
// String name = request.getParameter("name");
// String ageStr = request.getParameter("age");
//
// int age = Integer.parseInt(ageStr);
// System.out.println(name + ":" + age + ":");
//
// return "OK!";
// }//springboot 方式
// @RequestMapping ("/simpleParam")
// public String simpleParam( String name,Integer age){
// System.out.println(name + ":" + age + ":");
// return "OK!";
// }// @RequestMapping ("/simpleParam")
// public String simpleParam(@RequestParam(name = "name", required = false) String username, Integer age){
// System.out.println(username + ":" + age + ":");
// return "OK!";
// }//2.实体参http://localhost:8080/simpleParam数@RequestMapping("/simplePojo")public String simplePojo(User user){System.out.println(user);System.out.println("姓名:" + user.getName());System.out.println("年龄:" + user.getAge());System.out.println("省份:" + user.getAddress().getProvince());System.out.println("城市:" + user.getAddress().getCity());return "YES OK!";}
}
4.数组集合参数
//3.数组集合参数@RequestMapping("/arrayParam")public String arrayParam(String[] hobby){System.out.println(hobby);System.out.println(Arrays.toString(hobby));return "YES OK!";}
//集合参数@RequestMapping("/listParam")public String listParam(@RequestParam List<String> hobby){System.out.println(hobby);return "YES OK!";}
5.日期参数
6.Json参数
//6.json参数@RequestMapping("/jsonParam")//@DateTimeFormat -> 指定时间传递的参数格式public String jsonParam(@RequestBody User user){System.out.println(user);return "YES OK!";}
{"name": "小黑子","age": 18,"address": {"province": "江西","city": "南昌"}
}
7.路径参数
package com.wjh.controller;import com.wjh.pojo.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;/** 测试请求参数接受*/
@RestController
public class RequestController {// //原始方式
// @RequestMapping ("/simpleParam")
// public String simpleParam(HttpServletRequest request){
// //获取请求参数
// String name = request.getParameter("name");
// String ageStr = request.getParameter("age");
//
// int age = Integer.parseInt(ageStr);
// System.out.println(name + ":" + age + ":");
//
// return "OK!";
// }//springboot 方式@RequestMapping ("/simpleParam")public String simpleParam( String name,Integer age){System.out.println(name + ":" + age + ":");return "OK!";}@RequestMapping ("/simpleParamF")public String simpleParamF(@RequestParam(name = "name", required = false) String username, Integer age){System.out.println(username + ":" + age + ":");return "OK!";}//2.实体参http://localhost:8080/simpleParam数@RequestMapping("/simplePojo")public String simplePojo(User user){System.out.println(user);System.out.println("姓名:" + user.getName());System.out.println("年龄:" + user.getAge());System.out.println("省份:" + user.getAddress().getProvince());System.out.println("城市:" + user.getAddress().getCity());return "YES OK!";}//3.数组参数@RequestMapping("/arrayParam")public String arrayParam(String[] hobby){System.out.println(hobby);System.out.println(Arrays.toString(hobby));return "YES OK!";}//4.集合参数@RequestMapping("/listParam")public String listParam(@RequestParam List<String> hobby){System.out.println(hobby);return "YES OK!";}//5.日期时间参数//http://localhost:8080/dateParam?updateTime=2023-09-18 09:12:30@RequestMapping("/dateParam")//@DateTimeFormat -> 指定时间传递的参数格式public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){System.out.println(updateTime);return "YES OK!";}//6.json参数@RequestMapping("/jsonParam")//@DateTimeFormat -> 指定时间传递的参数格式public String jsonParam(@RequestBody User user){System.out.println(user);return "YES OK!";}//7.路径参数@RequestMapping("/path/{id}")//@DateTimeFormat -> 指定时间传递的参数格式public String pathParam(@PathVariable Integer id){System.out.println(id);return "YES OK!";}//8.路径参数//@DateTimeFormat -> 指定时间传递的参数格式@RequestMapping("/path/{id}/{name}")public String pathParam2(@PathVariable Integer id, @PathVariable String name){System.out.println(id);System.out.println(name);return "YES OK!";}}
二.响应
package com.wjh.controller;import com.wjh.pojo.Address;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;/*测试响应数据*/
@RestController
public class ResponseController {@RequestMapping("/hello")public String hello(){System.out.println("Hello word!");return "Hello word!";}@RequestMapping("/getAddress")public Address getAddress(){Address address = new Address();address.setProvince("江西");address.setCity("南昌");System.out.println(address.getProvince() + "\n" + address.getCity());return address;}@RequestMapping("/listAddress")public List<Address> listAddress(){List<Address> list = new ArrayList<>();Address address = new Address();address.setProvince("江西");address.setCity("南昌");Address address2 = new Address();address2.setProvince("广东");address2.setCity("深圳");list.add(address);list.add(address2);for (Address lists: list) {System.out.println(lists);}return list;}}
package com.wjh.pojo;/*** 统一响应结果封装类*/
public class Result {private Integer code ;//1 成功 , 0 失败private String msg; //提示信息private Object data; //数据 datapublic Result() {}public Result(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public static Result success(Object data){return new Result(1, "success", data);}public static Result success(){return new Result(1, "success", null);}public static Result error(String msg){return new Result(0, msg, null);}@Overridepublic String toString() {return "Result{" +"code=" + code +", msg='" + msg + '\'' +", data=" + data +'}';}
}
结果是一样的,提高了实用性
Springboot项目的静态资源(html,css,js等前端资源)默认存放目录为:
classpath:/static 、 classpath:/public、 classpath:/resources
package com.wjh.utils;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;}}
package com.wjh.pojo;public class Emp {private String name;private Integer age;private String image;private String gender;private String job;public Emp() {}public Emp(String name, Integer age, String image, String gender, String job) {this.name = name;this.age = age;this.image = image;this.gender = gender;this.job = job;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getImage() {return image;}public void setImage(String image) {this.image = image;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}@Overridepublic String toString() {return "Emp{" +"name='" + name + '\'' +", age=" + age +", image='" + image + '\'' +", gender='" + gender + '\'' +", job='" + job + '\'' +'}';}
}
package com.wjh.controller;import com.wjh.pojo.Emp;
import com.wjh.pojo.Result;
import com.wjh.utils.XmlParserUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class EmoController {@RequestMapping("/listEmp")public Result list(){//1.加载并解析emp.xml文件//String file = "D:\\JavaWeb2023\\java_web_project\\springboot-web-req-resp\\src\\main\\resources\\emp.xml";String 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 -> {//处理gander 1: 男, 2: 女String gander = emp.getGender();if("1".equals(gander)){emp.setGender("男");}else if("2".equals(gander)){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);}
}
三.分层解耦
1.三层架构
package com.wjh.controller;import com.wjh.pojo.Emp;
import com.wjh.pojo.Result;
import com.wjh.service.EmpService;
import com.wjh.service.impl.EmpServiceA;
import com.wjh.utils.XmlParserUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class EmoController {private EmpService empService = new EmpServiceA();@RequestMapping("/listEmp")public Result list() {//1.调用service,获取数据List<Emp> empList = empService.listEmp();//3.响应数据return Result.success(empList);}
}// //1.加载并解析emp.xml文件
//
// //String file = "D:\\JavaWeb2023\\java_web_project\\springboot-web-req-resp\\src\\main\\resources\\emp.xml";
// String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
// System.out.println(file);
// List<Emp> empList = XmlParserUtils.parse(file, Emp.class);
//
// //2.对数据进行转换处理 -gender, job
// empList.stream().forEach(emp -> {
// //处理gander 1: 男, 2: 女
// String gander = emp.getGender();
// if("1".equals(gander)){
// emp.setGender("男");
// }else if("2".equals(gander)){
// 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("就业指导");
// }
//
// });
package com.wjh.Dao.impl;import com.wjh.Dao.EmpDao;
import com.wjh.pojo.Emp;
import com.wjh.utils.XmlParserUtils;import java.util.List;public class EmoDaoA implements EmpDao {@Overridepublic List<Emp> listEmp() {String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();System.out.println(file);List<Emp> empList = XmlParserUtils.parse(file, Emp.class);return empList;}
}
package com.wjh.Dao;import com.wjh.pojo.Emp;import java.util.List;public interface EmpDao {//获取员工列表数据public List<Emp> listEmp();
}
package com.wjh.pojo;public class Emp {private String name;private Integer age;private String image;private String gender;private String job;public Emp() {}public Emp(String name, Integer age, String image, String gender, String job) {this.name = name;this.age = age;this.image = image;this.gender = gender;this.job = job;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getImage() {return image;}public void setImage(String image) {this.image = image;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getJob() {return job;}public void setJob(String job) {this.job = job;}@Overridepublic String toString() {return "Emp{" +"name='" + name + '\'' +", age=" + age +", image='" + image + '\'' +", gender='" + gender + '\'' +", job='" + job + '\'' +'}';}
}
package com.wjh.service.impl;import com.wjh.Dao.EmpDao;
import com.wjh.Dao.impl.EmoDaoA;
import com.wjh.pojo.Emp;
import com.wjh.service.EmpService;import java.util.List;public class EmpServiceA implements EmpService {private EmpDao empDao = new EmoDaoA();@Overridepublic List<Emp> listEmp() {//1.调用dao,获取数据List<Emp> empList = empDao.listEmp();//2.对数据进行转换处理 -gender, jobempList.stream().forEach(emp -> {//处理gander 1: 男, 2: 女String gander = emp.getGender();if("1".equals(gander)){emp.setGender("男");}else if("2".equals(gander)){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("就业指导");}});return empList;}
}
package com.wjh.service;import com.wjh.pojo.Emp;import java.util.List;public interface EmpService {//获取员工列表public List<Emp> listEmp();}
2.分层解耦
控制反转:
Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
依赖注入:Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
Bean对象:IOC容器中创建、管理的对象,称之为bean。
3.IOC & DI入门
@Component //将当前类交给IOC容器管理,成为IOC容器中的bean
@Autowired //运行时,IOC容器会提供该类型的bean对象,并复制给改变量 - 依赖注入
4.IOC详解
5.DI详解
@Primary --> 在又多个相同bean情况下,想用的实现方法上加这个注解
@Qualifier --> @Qualifier("A") 或者@Qualifier ("B")
@Resource --> 不属于springboot,属于JDK当中的,加在private EmpDao empDao 上
相关文章:

JavaWeb开发-05-SpringBootWeb请求响应
一.请求 1.Postman 2.简单参数 package com.wjh.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;/** 测试请求参数接受*/ R…...
Ubuntu下载
参考文档: 镜像文件:VMware下安装ubuntu 16.04(全步骤)_vmwaubuntu-16.04.4-desktop-amd64.iso_ST0new的博客-CSDN博客 vmware tools使用安装:VMware——VMware Tools的介绍及安装方法_William.csj的博客-CSDN博客 …...

Vue 的组件加载顺序和渲染顺序
1、结论先行 组件的加载顺序是自上而下的,也就是先加载父组件,再递归地加载其所有的子组件。 而组件渲染顺序是按照深度优先遍历的方式,也就是先渲染最深层的子组件,再依次向上渲染其父组件。 2、案例 下面是一个简单的示例代…...

leetcode Top100(17)矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2: 输入&…...

论文精读(2)—基于稀疏奖励强化学习的机械臂运动规划算法设计与实现(内含实现机器人控制的方法)
目录 1.作者提出的问题及解决方向 2.延深-用如何用强化学习对机器人进行控制 2.1思路 2.2DQN和DDPG在机器人控制中的应用 3.解决方案 3.1思路 3.2实验 3.3创新点 4.展望 1.作者提出的问题及解决方向 目的:使机械臂在非结构化环境下实现端到端的自主学习控制…...
快速安装keepalive
快速安装keepalive #安装 yum install keepalived -y# 查看版本: rpm -q -a keepalived#修改配置文件 vim /etc/keepalived.conf虚拟 ip :随意选一个,不被占用的ip即可。...

nginx实现反向代理实例
1 前言 1.1 演示内容 在服务器上访问nginx端口然后跳转到tomcat服务器 1.2 前提条件 前提条件:利用docker安装好nginx、tomcat、jdk8(tomcat运行需要jdk环境) 只演示docker安装tomcat: 默认拉取最新版tomcat docker pull t…...

使用Freemarker填充模板导出复杂Excel,其实很简单哒!
文章目录 1. 需求分析2. 对象生成3. 列表插值4. 另存xml格式化5. ftl修改6. 程序转化7. 犯的错误8. 总结 1. 需求分析 类似这样的一个表格 我们需要从数据库中查询对应的数据,将其汇总进该表格,并且可能还需要复制表格项,我这个案例中没有&a…...
windows环境下安装logstash同步数据,注册系统服务
windows环境下安装logstash同步数据,注册系统服务 此方法适用于Windows环境,同一个配置文件配置多个管道,并且配置系统服务,防止程序被杀进程 一、安装logstash (1)下载压缩包,解压后修改con…...

java服务内存说明及配置详解
java进程内存 JVM内存分布图: 【java进程内存】【堆外内存】 【jvm堆内存】 【堆外内存】 【Metaspace】 【Direct Memory】【JNI Memory】【code_cache】 … 堆外内存泄漏的排查在于【本地内存(Native Memory)】【Direct Memory】【JNI Memory】 一般…...

Mybatis-MyBatis的缓存
Mybatis-MyBatis的缓存 一、MyBatis的一级缓存二、MyBatis的二级缓存二级缓存的相关配置 三、MyBatis缓存查询的顺序 一、MyBatis的一级缓存 一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就 会从…...

计算机组成原理之硬件的基本组成,深入介绍两大计算机结构体系,从底层出发认识计算机。
大家好,欢迎阅读《计算机组成原理》的系列文章,本系列文章主要的内容是从零学习计算机组成原理,内容通俗易懂,大家好好学习吧!!! 更多的优质内容,请点击以下链接查看哦~~ ↓ ↓ ↓ …...

二十五、MySQL事务的四大特性和常见的并发事务问题
1、事务的四大特性 2、常见的并发事务问题 (1)并发事务问题分类: (2)脏读: 一个事务正在对一条记录做修改,在这个事务完成并提交前,这条记录的数据就处于不一致的状态;…...
辨析常见的医学数据分析(相关性分析回归分析)
目录 1 常见的三种分类结果? 2 什么是相关性分析? 相关性分析的结果怎么看? 3 什么是回归分析? 1)前提 2)常见的回归模型 4 对于存在对照组实验的医学病例如何分析? 1)卡方检验…...
SpringBoot项目中只执行一次的任务写法
SpringBoot项目中只执行一次的任务写法 有时候我们需要进行初始化工作,就说明只要进行一次的工作,那么,在Springboot项目中如何做到任务只进行一次呢 利用定时任务 在Spring Boot项目中,你可以使用Spring框架提供的Scheduled注解…...
TCK、TMS、TDI、TDO的含义
这四个信号是JTAG(Joint Test Action Group)界面的一部分。JTAG是一种用于测试和验证集成电路和印刷电路板的技术,也用于进行设备编程和调试。这四个信号分别是: TCK (Test Clock): 意义:测试时钟ÿ…...

R语言RSTAN MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据...
全文链接:http://tecdat.cn/?p24456 如果你正在进行统计分析:想要加一些先验信息,最终你想要的是预测。所以你决定使用贝叶斯(点击文末“阅读原文”获取完整代码数据)。 相关视频 但是,你没有共轭先验。你…...

【PowerShell】PowerShell的Core版本的额外配置
在PowerShell 7.1 安装完成后,默认情况下打开PowerShell 会直接进入到系统内置的PowerShell,如果希望通过远程连接或者PowerShell Web Access 进入到PowerShell 7环境的界面,就需要进行环境的再配置才能实现PowerShell 7.1 的环境连接。需要为外部的环境提供连接的话需要按照…...

数据结构----链式栈
目录 前言 链式栈 操作方式 1.存储结构 2.初始化 3.创建节点 4.判断是否满栈 5.判断是否空栈 6.入栈 7.出栈 8.获取栈顶元素 9.遍历栈 10.清空栈 完整代码 前言 前面我们学习过了数组栈的相关方法,(链接:线性表-----栈(栈…...

实在智能携手40+央企,探索财务大模型及数智化实践与应用
“这次培训给我一个最大的感触就是,过去以为AI智能化、大模型技术是很高深的事情。但现在,我们通过RPA等数字化工具,自主根据自己的工作岗位,完成业务自动化流程的开发和设计。AI技术没有想象中的那么难入门。” 这是一位参加了“…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...