AJAX和JSON

一.AJAX技术


1.1 AJAX介绍

Ajax 即“Asynchronous Javascript And XML”(异步
JavaScript 和 XML),是指一种创建
交互式、快速动态应用的网页开发技术,无需重新加载整个网
页的情况下,能够更新页面局部数据的技术。
通过在后台与服务器进行少量数据交换,Ajax 可以使页面实
现异步更新。这意味着可以在不重新加载整个页面的情况下,
对页面的某部分进行更新。

1.2 同步请求和异步请求:

同步请求:串行操作,发送一个请求,需等待响应,期间
不能够再次发送请求;

异步请求:并行操作,发送一个请求,无需等待响应,即
可再发送请求;

开发方式:
服务器端渲染:页面渲染主要由服务器端渲染实现
前后端分离:所有请求和响应都基于Ajax技术实现


1.3 原生AJAX

创建两个javaWeb项目部署到Tomcat服务器上

在Web项目里面创建一个HTML页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>原生AJAX</title>
//js代码
<script>
// XMLHttpRequest 可以与服务器实现异步交互,
//而无需让整个页面刷新,因此成为 Ajax 编程的核心对象。
function fn(){
//1.创建 XMLHttpRequest 对象
var xhr = new XMLHttpRequest();
//2.给定请求方式以及请求地址
xhr.open("get","http://localhost:8080/code_02/demo01Servlet");
//3.发送请求
xhr.send();
//4.获取服务器端给客户端的响应数据
//哪个函数发送的ajax请求,响应结果就返回给那个函数
xhr.onreadystatechange = function(){
//0:open()没有被调用
//1:open()正在被调用
//2:send()正在被调用
//3:服务端正在返回结果
//4:请求结束,并且服务端已经结束发送数据到客户端
if(xhr.readyState == 4 && xhr.status == 200){
document.getElementById("sp").innerHTML=xhr.responseText;
}
}
}
</script>
</head>
<body>
<h2>周六要放假</h2>
<h2 id="sp"></h2>
<input type="button" value="原生AJAX"
onclick="fn()"/>
</body>
</html>

创建javaServlet 继承HTTPServlet

@WebServlet("/demo01Servlet")
public class Demo01Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("周日要休息");
}
@Override
protected void doPost(HttpServletRequest
req, HttpServletResponse resp) throws
ServletException, IOException {
doGet(req,resp);
}
}

二.JSON详解

2.1 JSON简介

JSON(JavaScript Object Notation,JavaScript 对象表示法)
是一种基于字符串的轻量级的数据交换格式。易于人阅读和编
写,同时也易于机器解析和生成。JSON 是 JavaScript 数据类
型的子集。

{
"book": [
{
"id":"01",
"language": "Java",
"edition": "third",
"author": "Herbert Schildt"
},
{
"id":"07",
"language": "C++",
"edition": "second",
"author": "E.Balagurusamy"
}]
}

2.2 JSON对象的格式

对象格式: {"k1" : obj , "k2" : obj}
举例:{"userid":1,"username":"admin","sex":"male"}


语法规则
对象可以包含多个 key/value(键/值)对。
key 必须是字符串,value可以是合法的 JSON 数据类型
(字符串, 数字, 对象, 数组, 布尔值或 null)。
key 和 value 中使用冒号(:)分割。
每个 key/value 对使用逗号(,)分割。

2.3 JSON数组的格式

数组格式:[obj,obj,obj...]
举例:[ "baidu", "jd", "tengxun" ]
举例: [{"userid":1,"username":"admin"},
{"userid":2,"username":"oldlu"}]
}

语法规则:
JSON 数组在中括号中书写。
JSON 中数组value值必须是合法的 JSON 数据类型(字
符串, 数字, 对象, 数组, 布尔值或 null)。
JSON数组可以使用jQuery语法完成遍历。

2.4 JSON对象的解析
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
//js代码
<script>
//JSON对象
let objectJson={"id":1,"username":"范冰冰","age":23};
//可以使用点号 . 来访问对象的值
console.log(objectJson.username);
//JSON数组
let arrayJson=[
{"id":1,"username":"范冰冰","age":23},
{"id":2,"username":"杨丽颖","age":24},
{"id":3,"username":"王姨","age":25}
];
//使用索引值来访问数组
console.log(arrayJson[2].username);
//使用 for 循环
for(let i=0;i<arrayJson.length;i++){
console.log(arrayJson[i].age)
}
</script>
</head>
<body>
</body>
</html>
2.5 JSON对象和JSON字符串

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
//js代码
<script>
//JSON对象
let objectJson={"id":1,"username":"范冰冰","age":23};
//可以使用点号 . 来访问对象的值
console.log(typeof objectJson);
console.log(objectJson);
console.log(objectJson.username);
console.log("------------------------")
//把JSON对象转成JSON字符串
let strJson =
JSON.stringify(objectJson);
console.log(typeof strJson);
console.log(strJson);
console.log(strJson.username);
console.log("------------------------")
//把JSON字符串转成JSON对象
let obj = JSON.parse(strJson);
console.log(typeof obj);
console.log(obj);
console.log(obj.username);
</script>
</head>
<body>
</body>
</html>
<!--Axios中,JSON字符串和JS对象自动进行转换-->

三.Ajax异步请求库Axios


3.1 axios简介

原生ajax请求的代码编写太过繁琐,我们可以使用axios这个库
来简化操作!

在后续学习的Vue(前端框架)中发送异步请求,使用的就是
axios.
需要注意的是axios不是vue的插件,它可以独立使用.
官网:https://www.axios-http.cn/docs/intro


使用步骤

1. 引入axios核心js文件。
2. 调用axios对象的方法来发起异步请求。
3. 调用axios对象的方法来处理响应的数据。
 

3.2 Axios快速入门

3.2.1 API介绍

axios.get().then().catch().finally();
axios.post().then().catch().finally();
then(function(resp){}): axios执行成功后的回调函数
<!--catch(function(error){}): axios执行出错时,调用的函数
finally(function(){}): 无论如何都会执行的函数
then函数的参数response是一个json对象,我们重点只需要了
解response.data即可-->
{
<!-- `data` 由服务器提供的响应-->
data: {},
<!-- `status` 来自服务器响应的 HTTP 状态码-->
status: 200,
<!-- `statusText` 来自服务器响应的 HTTP 状态信息-->
statusText: 'OK',
<!-- `headers` 是服务器响应头-->
<!-- 所有的 header 名称都是小写,而且可以使用方括号语法访问-->
<!-- 例如: `response.headers['content-type']`-->
headers: {},
<!-- `config` 是 `axios` 请求的配置信息-->
config: {},
<!-- `request` 是生成此响应的请求-->
<!-- 在node.js中它是最后一个ClientRequest实例 (inredirects),-->
<!-- 在浏览器中则是 XMLHttpRequest 实例-->
request: {}
}

3.2.2 前端请求

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/axios-0.18.0.js"></script>
<script>
function fn01(){
//发送GET请求
axios({
method:"get",
url:"http://localhost:8080/code_02/demo02Servlet?username=zhangsan"})
.then(function(response){
console.log(response);
console.log(response.data)
//将后端传入的数据赋值给id为sp的标签
document.getElementById("sp").innerHTML=response.data;
});
}
function fn02() {
//发送POST请求
axios({
method:"post",
url:"http://localhost:8080/code_02/demo02Servlet",
data:"username=zhangsan"
}).then(function(response){
console.log(response.data)
document.getElementById("sp").innerHTML=response.data;
});
}
</script>
</head>
<body>
<input type="button" value="GET请求"onclick="fn01()"/><br/>
<input type="button" value="POST请求"onclick="fn02()"/><br/>
<span id="sp"></span>
</body>
</html>

3.2.3 后端响应

@WebServlet("/demo02Servlet")
public class Demo02Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req,HttpServletResponse resp) 
throws ServletException, IOException {
System.out.println("GET请求...");
String username = req.getParameter("username");
System.out.println(username);
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("GET请求响应成功");
}
@Override
protected void doPost(HttpServletRequestreq, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("post请求...");
String username = req.getParameter("username");
System.out.println(username);
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("POST请求响应成功");
}
}

3.3 Axios 请求方式别名

为了方便起见, Axios 已经为所有支持的请求方法提供了别
名。

3.3.1 前端代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/axios-0.18.0.js"></script>
<script>
function fn01(){
//发送GET请求
axios.get("http://localhost:8080/code_02/demo02Servlet?username=zhangsan")
.then(function(response){
console.log(response.data)
document.getElementById("sp").innerHTML=response.data;
});
}
function fn02() {
//发送POST请求
axios.post("http://localhost:8080/code_02/demo02Servlet","username=zhangsan")
.then(function(response){
document.getElementById("sp").innerHTML=response.data;
});
}
</script>
</head>
<body>
<input type="button" value="GET请求" onclick="fn01()"/><br/>
<input type="button" value="POST请求" onclick="fn02()"/><br/>
<span id="sp"></span>
</body>
</html>

3.3.2 后端代码

@WebServlet("/demo02Servlet")
public class Demo02Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req,HttpServletResponse resp)
 throws ServletException, IOException {
System.out.println("GET请求...");
String username = req.getParameter("username");
System.out.println(username);
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("GET请求响应成功");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
 throws ServletException, IOException {
System.out.println("post请求...");
String username = req.getParameter("username");
System.out.println(username);
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("POST请求响应成功");
}
}
3.4 Jackson的使用


3.4.1 Jackson简介

在 JDK 中并没有内置操作 JSON 格式数据的 API,因此使用处
理 JSON 格式的数据需要借助第三方类库。
常用的 JSON 解析类库:
        *Gson: 谷歌开发的 JSON 库,功能十分全面。
        *FastJson: 阿里巴巴开发的 JSON 库,性能十分优秀。
        *Jackson: 社区十分活跃且更新速度很快。被称为“最好的Json 解析器。

Jackson 是一种解析 JSON 格式数据的 API,也是最流行,速
度最快的 JSON API。在SpringMVC 中默认使用 Jackson API
处理 JSON 格式的数据。

导入json相关jar包

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.3</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.3</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.3.3</version>
</dependency>

API的使用

//创建核心解析对象
ObjectMapper om = new ObjectMapper();
//将java对象转成json字符串
String writeValueAsString(Object obj);
//json字符串转java对象
<T> T readValue(String var, Class<T> typeclass);

3.4.2 Java对象和Json字符串转换

创建User实体类:

package com.ll.jopo;

public class User {
    private int id;
    private String username;
    private int password;

    public User() {
    }

    public User(int id, String username, int password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getPassword() {
        return password;
    }

    public void setPassword(int password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password=" + password +
                '}';
    }
}

创建测试类:

public class DemoTest {
public static void main(String[] args)
throws Exception {
//创建核心转换对象
ObjectMapper om=new ObjectMapper();
//将Java对象转成json字符串
User u01=new User(1,"张三","123456");
String str01 = om.writeValueAsString(u01);
System.out.println(str01);
//将List集合转成json字符串
List<User> list=new ArrayList<>();
User u02=new User(2,"李四","123456");
User u03=new User(3,"王五","123456");
list.add(u02);
list.add(u03);
String str02 = om.writeValueAsString(list);
System.out.println(str02);
//将Map集合转成json字符串
Map<String,Object> map=new HashMap<>();
map.put("name","zs");
map.put("money",100);
String str03 = om.writeValueAsString(map);
System.out.println(str03);
System.out.println("---------------------------------");
//将Json字符串转成Java对象
User user = om.readValue(str01,User.class);
System.out.println(user);
//将Json字符串转成List集合
List<User> listUser = om.readValue(str02, List.class);
System.out.println(list);
//将Json字符串转成Map集合
Map<String,Object> m = om.readValue(str03, Map.class);
System.out.println(m);
}
}
3.5 axios和Jackson综合


3.5.1 请求参数和响应数据都是普通字符串

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/axios-0.18.0.js"></script>
<script>
function fn(){
//请求参数和响应数据都是普通字符串
axios({
method:"get",
url:"http://localhost:8080/code_02/demo01Servlet?id=1&username=zhangsan&password=123456",
}).then(function(response){
console.log(response);
console.log(response.data)
document.getElementById("sp").innerHTML=response.data;
});
}
</script>
</head>
<body>
<input type="button" value="按钮"
onclick="fn()"/><br/>
<span id="sp"></span>
</body>
</html>

后端代码

@WebServlet("/demo01Servlet")
public class Demo01Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req,HttpServletResponse resp)
 throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
// 获取请求携带的参数
String id = req.getParameter("id");
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println(id+"..."+username+"..."+password);
resp.setContentType("text/html;charset=utf-8");
//ajax响应结果必须以流的形式将结果写回给浏览器
resp.getWriter().print("响应结果为:"+id+"-"+username+"-"+password);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req,resp);
}
}

3.5.2 响应数据-Json格式字符串Get请求

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/axios-0.18.0.js"></script>
<script>
function fn(){
//请求参数和响应数据都是普通字符串
axios({
method:"get",
url:"http://localhost:8080/code_02/demo01Servlet?id=1&username=zhangsan&password=123456",
}).then(function(response){
console.log(response.data)
document.getElementById("sp").innerHTML=
                response.data.id+"..."+response.data.username+"..."+response.data.password;
});
}
</script>
</head>
<body>
<input type="button" value="按钮"
onclick="fn()"/><br/>
<span id="sp"></span>
</body>
</html>

后端代码

@WebServlet("/demo01Servlet")
public class Demo01Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
// 获取请求携带的参数
String id = req.getParameter("id");
String username = req.getParameter("username");
String password = req.getParameter("password");
System.out.println(id+"..."+username+"..."+password);
User user=new User(Integer.parseInt(id),username,password);
ObjectMapper om=new ObjectMapper();
String str = om.writeValueAsString(user);
//响应json格式的字符串给浏览器
resp.setContentType("application/json;charset=utf-8");
//ajax响应结果必须以流的形式将结果写回给浏览器
resp.getWriter().print(str);
}
@Override
protected void doPost(HttpServletRequest
req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}

3.5.3 请求参数-Json格式字符串Post请求

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/axios-0.18.0.js"></script>
<script>
function fn(){
//请求参数-json格式字符串
//请求参数为json格式的字符串,json格式的字符串会存放在请求体中带给服务器,只有post请求才有请求体
axios({
method:"post",
url:"http://localhost:8080/code_02/demo01Servlet"
,data{"id":1,"username":"zhangsan","password":"123456"}})
.then(function(response){
console.log(response.data)
document.getElementById("sp").innerHTML=
                response.data.id+"..."+response.data.username+"..."+response.data.password;
});
}
</script>
</head>
<body>
<input type="button" value="按钮"
onclick="fn()"/><br/>
<span id="sp"></span>
</body>
</html>

后端代码

@WebServlet("/demo01Servlet")
public class Demo01Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req,HttpServletResponse resp) 
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
// 获取请求携带的参数 post请求的数据是在请求
//体中 不能使用request对象获取
//获取请求体的流信息
ServletInputStream in = req.getInputStream();
ObjectMapper om=new ObjectMapper();
User user = om.readValue(in,User.class);
System.out.println(user);
//响应json格式的字符串给浏览器
resp.setContentType("application/json;charset=utf-8");
//ajax响应结果必须以流的形式将结果写回给浏览器
String str = om.writeValueAsString(user);
resp.getWriter().print(str);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
doGet(req,resp);
}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++包装器/适配器 function--通俗易懂

1.为什么要有function 在下面的场景下 useF类模版要实例化出三份&#xff0c;影响效率 仿函数:c仿函数--通俗易懂-CSDN博客 lambda表达式&#xff1a;c lambda表达式--通俗易懂-CSDN博客 template<class F, class T> T useF(F f, T x) {static int count 0;cout <…

项目模块十五:HttpResponse模块

一、模块设计思路 存储HTTP应答要素&#xff0c;提供简单接口 二、成员变量 int _status; // 应答状态码 unordered_map<string, string> _headers; // 报头字段 string _body; // 应答正文 bool _redirect_flag; // 是否重定向信息 stri…

【sqlmap使用】

sqlmap简介 sqlmap 目录结构 sqlmap常用参数 sqlmap实现注入 测试注入点&#xff0c;检测到注入点后&#xff0c;直接爆数据库名 python sqlmap.py –u http://172.16.12.2/7/9/strsql.php --data "usernameadmin" --dbs注意sqlmap在使用过程中可能会出现几个需要…

Java已死,大模型才是未来?

作者&#xff1a;不惑_ 引言 在数字技术的浪潮中&#xff0c;编程语言始终扮演着至关重要的角色。Java&#xff0c;自1995年诞生以来&#xff0c;便以其跨平台的特性和丰富的生态系统&#xff0c;成为了全球范围内开发者们最为青睐的编程语言之一 然而&#xff0c;随着技术的…

Rust 力扣 - 59. 螺旋矩阵 II

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 使用一个全局变量current记录当前遍历到的元素的值 我们只需要一圈一圈的从外向内遍历矩阵&#xff0c;每一圈遍历顺序为上边、右边、下边、左边&#xff0c;每遍历完一个元素后current 我们需要注意的是如果上…

MFC工控项目实例二十八模拟量信号每秒采集100次

用两个多媒体定时器&#xff0c;一个定时0.1秒计时&#xff0c;另一个定时0.01秒用来对模拟量信号采集每秒100次。 1、在SEAL_PRESSUREDlg.h中添加代码 class CSEAL_PRESSUREDlg : public CDialo { public:CSEAL_PRESSUREDlg(CWnd* pParent NULL); // standard constructor&a…

用插值公式实现滚动进度条动画效果

我们在日常前端开发时在动画的选择上基本都是css&#xff0c;通过css的animation即可满足大部分的开发场景&#xff0c;如果遇到了特殊而比较不容易实现的效果就会考虑到用js来实现&#xff0c;而本次的主题&#xff0c;就是围绕用js来做一个比较不常见的特殊动画效果。 假设我…

【1个月速成Java】基于Android平台开发个人记账app学习日记——第4天,注册登录逻辑代码

24.11.03 1.输入手机号跳转功能 第一个要设计的功能是&#xff0c;输入手机号以后跳转到另一个页面&#xff0c;输入获取得到的验证码页面。先拿这个功能练练手。 首先看一下此时的完整项目结构&#xff1a; 主要是添加了2个活动类和对应的界面&#xff0c;下面看详细的代码…

ubuntu【桌面】 配置NAT模式固定IP

DHCP分配导致虚拟机IP老变&#xff0c;SSH老要重新配置&#xff0c;设成静态方便些 一、设NAT模式 1、设为NAT模式 2、看模式对应的虚拟网卡 - VMnet8 3、共享主机网卡网络到虚拟网卡 - VMnet8 二、为虚拟网卡设置静态IP 记住这个IP 三、设置ubuntu固定IP 1、关闭DHCP并…

数智驱动,纷享销客助力万东医疗实现精细化管理

数字化浪潮正在席卷整个医疗影像行业&#xff0c;数字化工具对疾病诊疗效率和诊疗质量的提升也有目共睹。北京万东医疗科技股份有限公司&#xff08;以下简称“万东医疗”&#xff0c;股票代码 600055&#xff09;成立于1955年&#xff0c;1997 年在上海证交所上市&#xff0c;…

项目模块十四:HttpRequest模块

一、项目设计思路 存储HTTP请求要素&#xff0c;提供简单接口 二、成员变量 全部公有 string _method; // 请求方法 string _path; // 资源路径 string _version; // 协议版本 string _body; // 请求正文 smatch _matches; // 资源路径正则提取 …

[HNCTF 2022 Week1]calc_jail_beginner_level3(JAIL)

开启靶场&#xff0c;打开链接&#xff0c;下载附件&#xff1a; 嗯&#xff0c;直接显示“Oh hacker!”&#xff0c;有点懵&#xff0c;先看看下载的附件&#xff08;server.py&#xff09;&#xff1a; 得到信息如下&#xff1a; 用户输入的表达式长度被限制在7个字符以内。…

最短路的求解

实验类型&#xff1a;◆验证性实验 ◇综合性实验 ◇设计性实验 实验目的&#xff1a;学会使用Matlab求解最短路。 实验内容&#xff1a;1.熟练运用Floyd算法&#xff1b;2. 熟练运用Dijkstra算法&#xff1b;3.利用Matlab编程实现最短路的计算。 例1&#xff1a;已知无向图…

目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8

目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8 1、.NET Reactor V6.9.8 功能简介2、官方下载 1、.NET Reactor V6.9.8 功能简介 业界领先的源代码保护 .NET Reactor通过多种方法来防止反编译&#xff0c;这些方法会将 .NET 程序集转换为任何现有工具都无法反编译的进程。…

为啥学习数据结构和算法

基础知识就像是一座大楼的地基&#xff0c;它决定了我们的技术高度。而要想快速做出点事情&#xff0c;前提条件一定是基础能力过硬&#xff0c;“内功”要到位。 想要通关大厂面试&#xff0c;千万别让数据结构和算法拖了后腿 我们学任何知识都是为了“用”的&#xff0c;是为…

Ubuntu 24.04上启用 root 用户通过 SSH 和图形界面进行登录

一、启用 root 用户的密码登录 设置 root 用户密码&#xff1a; 在终端中输入以下命令为 root 用户设置一个密码&#xff1a; testtest-virtual-machine:~$ sudo passwd root [sudo] test 的密码&#xff1a; 新的密码&#xff1a; 无效的密码&#xff1a; 密码是一个回文…

卡尔曼滤波器-Kalmen Filter-1

卡尔曼滤波器是一种最优递归数据处理算法&#xff0c;它更像是一种观测器&#xff0c;而不是一般意义上的滤波器。卡曼滤波器的应用非常广泛&#xff0c;尤其是在导航当中。它的广泛应用是因为我们生活的世界中存在着大量的不确定性&#xff0c;当我们去描述一个系统的时候&…

C++ | Leetcode C++题解之第519题随机翻转矩阵

题目&#xff1a; 题解&#xff1a; class Solution { public:Solution(int m, int n) {this->m m;this->n n;this->total m * n;srand(time(nullptr));}vector<int> flip() {int x rand() % total;vector<int> ans;total--; // 查找位置 x 对应的…

电子电气架构 --- 车载诊断的快速入门

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

【云备份项目】json以及jsoncpp库的使用

目录 1.JSON 2.什么是 JSON&#xff1f; 3.JSON 发展史 4.为什么要使用 JSON&#xff1f; 5.JSON 的不足 6.JSON 应该如何存储&#xff1f; 7.什么时候会使用 JSON 7.1.定义接口 7.2.序列化 7.3.生成 Token 7.4.配置文件 8.JSON的语法规则 8.1.对象和数组 8.2.JS…