当前位置: 首页 > news >正文

万字长文总结前端开发知识---JavaScriptVue3Axios

JavaScript学习目录

  • 一、JavaScript
    • 1. 引入方式
      • 1.1 内部脚本 (Inline Script)
      • 1.2 外部脚本 (External Script)
    • 2. 基础语法
      • 2.1 声明变量
      • 2.2 声明常量
      • 2.3 输出信息
    • 3. 数据类型
      • 3.1 基本数据类型
      • 3.2 模板字符串
    • 4. 函数
      • 4.1 具名函数 (Named Function)
      • 4.2 匿名函数 (Anonymous Function)
        • 4.2.1 函数表达式
        • 4.2.2 箭头函数 (Arrow Function)
    • 5. 自定义对象
      • 5.1 自定义对象
      • 5.2 调用对象属性/方法
      • 5.3 JSON - JS对象标记法
    • 6. DOM
      • 6.1 获取DOM对象
      • 6.2 修改DOM对象的内容
      • 6.3 其他常用的DOM操作方法
    • 7. 事件监听
      • 7.1 `addEventListener` 方法
      • 7.2 传统`onclick`属性
      • 7.3 事件处理的区别与选择
    • 8. 常见事件
      • 8.1 `type="module"`关键字
      • 8.2 `export`关键字
      • 8.3 `import`关键字
      • 8.4 常见事件
        • 8.4.1 鼠标事件
        • 8.4.2 键盘事件
        • 8.4.3 表单事件
        • 8.4.4 焦点事件
        • 8.4.5 其他事件
  • 二、Vue
    • 1. Vue快速入门
      • 1.1 数据绑定
      • 1.2 模块化脚本加载
      • 1.3 响应式数据
      • 1.4 应用实例创建与挂载
    • 2. Vue生命周期
      • 2.1 Vue生命周期的主要阶段
        • 2.1.1 创建阶段 (Creation)
        • 2.1.2 挂载阶段 (Mounting)
        • 2.1.3 更新阶段 (Updating)
        • 2.1.4 销毁阶段 (Destroying)
      • 2.2 生命周期图示
      • 2.3 使用场景
  • 三、Axios
    • 1. Axios快速入门
      • 1.1 Axios GET请求
      • 1.2 Axios POST请求
      • 1.3 回调函数
    • 2. Axios请求方式别名
  • 四、案例---员工列表
    • 1. Vue 关键知识点总结
      • 1.1 `searchForm` 对象
      • 1.2 `v-model` 指令
      • 1.3 `v-on` 指令
      • 1.4 `v-if` 和 `v-else-if` 指令
      • 1.5 `v-show` 指令
      • 1.6 `v-show` 与 `v-if` 的区别
      • 1.7 `v-for` 指令
      • 1.8 `async` 和 `await`
      • 1.9 URL 解释
        • 1.9.1 基础URL
        • 1.9.2 查询参数

本文参考黑马程序员:全网首发AI+JavaWeb开发入门

一、JavaScript

1. 引入方式

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-引入方式</title>
</head>
<body><!-- <script>//1. 内部脚本alert('Hello JS');</script> --><!-- 2. 外部脚本 --><script src="js/demo.js"></script>
</body>
</html>

js/demo.js

alert('Hello JavaScript');

1.1 内部脚本 (Inline Script)

  • 内部脚本是直接嵌入到HTML文档中的JavaScript代码。
  • 它们通常放在<script>标签内,可以放置在HTML文档的任何位置,但大多数情况下会放在<head><body>标签内。
  • 在给定的代码示例中,内部脚本被注释掉了,因此不会被执行。如果取消注释,alert('Hello JS');这行代码将会创建一个弹窗,显示消息"Hello JS"。

1.2 外部脚本 (External Script)

  • 外部脚本是将JavaScript代码保存在一个单独的.js文件中,并通过<script>标签的src属性来引用这个文件。
  • 这种方法有助于保持HTML和JavaScript代码的分离,使得代码更易于维护和重用。
  • 在示例中,<script src="js/demo.js"></script>这行代码用来加载位于相对路径js/demo.js的外部JavaScript文件。这意味着HTML文档所在的目录下应该有一个名为js的子目录,其中包含了一个名为demo.js的文件。
  • 使用外部脚本还可以让浏览器缓存JavaScript文件,从而加快页面加载速度,特别是在用户访问同一网站的多个页面时。

2. 基础语法

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-基础语法</title>
</head>
<body><script>//1. 声明变量// let a = 10;// a = "Hello";// a = true;// alert(a); //弹出框//2. 声明常量const PI = 3.14;//PI = 5.0;console.log(PI); //输出到控制台// document.write(PI); //输出到body区域(不常用)</script>
</body>
</html>

2.1 声明变量

  • 在JavaScript中,可以使用let关键字来声明变量。let允许你声明一个块级作用域的局部变量。
  • 变量可以在声明后被重新赋值。在给定的代码示例中,变量a被注释掉了,但是按照其设计,它最初被赋予了一个数值10,然后又被赋予了字符串"Hello",最后是布尔值true。这展示了JavaScript是一种动态类型语言,变量可以在不同的时间点持有不同类型的值。

2.2 声明常量

  • 使用const关键字可以声明一个常量,意味着这个变量一旦被赋值,就不能再改变它的值。这并不意味着const定义的对象或数组的内容不可变,只是不能重新赋值给该常量引用。
  • 在代码示例中,常量PI被赋予了值3.14。如果尝试再次为PI赋值(如PI = 5.0;),将会导致错误,因为这是不允许的操作。

2.3 输出信息

  • alert()函数用于创建一个弹窗,向用户显示一条消息。此功能在示例中被注释掉了。
  • console.log()方法用于将信息输出到浏览器的开发者工具中的控制台,这对于调试非常有用。
  • document.write()方法可以用来直接向文档写入文本字符串。这种方法在现代开发中不常用,因为它会覆盖页面上的现有内容,并且只能在页面加载期间使用。

3. 数据类型

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-数据类型</title>
</head>
<body><script>//1. 数据类型// alert(typeof 10); //number// alert(typeof 1.5); //number// alert(typeof true); //boolean// alert(typeof false); //boolean// alert(typeof "Hello"); //string// alert(typeof 'JS'); //string// alert(typeof `JavaScript`); //string// alert(typeof null); //null ? -> object// let a ;// alert(typeof a); //undefined//2. 模板字符串 - 简化字符串拼接let name = 'Tom';let age = 18;console.log('我是'+name+', 我今年'+age+'岁');console.log(`我是${name}, 我今年${age}`);</script>
</body>
</html>

3.1 基本数据类型

  • JavaScript中有几种基本的数据类型,包括numberbooleanstringnullundefined等。

    • number: 用于表示数值,包括整数(如10)和浮点数(如1.5)。在JavaScript中,所有的数字都是以64位浮点数格式存储的。

    • boolean: 表示逻辑值,只有两个值:truefalse

    • string: 用于表示文本,可以使用单引号(‘…’)、双引号(“…”)或反引号(...)来定义字符串。

    • null: 表示一个空值或不存在的对象,在技术上它是一个对象类型的特殊值,虽然这在语义上可能有些混淆。

    • undefined: 当声明了一个变量但没有赋值时,默认的值就是undefined。它也用来表示某个变量或属性不存在。

3.2 模板字符串

  • 模板字符串是增强版的字符串,允许嵌入表达式。它们使用反引号(`)来包裹,并且可以在其中直接插入变量和表达式,通过${expression}语法。
  • 使用模板字符串可以简化字符串拼接,使得代码更易读和编写。例如,console.log(我是${name}, 我今年${age}岁); 这行代码会输出 "我是Tom, 我今年18岁;",其中${name}${age}会被相应的变量值替换。
  1. typeof运算符:
    • typeof是一个运算符,返回一个字符串,表示操作数的数据类型。上面的注释部分展示了如何使用typeof来检查不同类型的值。

注意事项:

  • 注意到typeof null返回的是"object",这是一个历史遗留问题,是因为JavaScript最初实现上的一个错误,但它一直保留至今以保持向后兼容性。

4. 函数

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-函数</title>
</head>
<body><script>//1. 函数定义及调用 - 具名函数// function add(a,b){//   return a + b;// }// let result = add(10,20);// console.log(result);//2. 函数定义及调用 - 匿名函数//2.1 函数表达式// let add = function(a,b){//   return a + b;// }// let result = add(100,200);// console.log(result);//2.2 箭头函数let add = (a,b) => {return a + b;}let result = add(1000,2000);console.log(result);</script>
</body>
</html>

4.1 具名函数 (Named Function)

  • 具名函数是使用function关键字定义,并且具有一个明确的名字。这个名称可以在函数内部用于递归调用,也可以在调试或堆栈跟踪时提供有用的上下文信息。
  • 在示例中,add函数接收两个参数ab,并返回它们的和。虽然这部分被注释掉了,但其目的是展示如何定义和调用一个具名函数。

4.2 匿名函数 (Anonymous Function)

  • 匿名函数是没有名字的函数。它们通常作为函数表达式来使用,可以赋值给变量、作为参数传递给其他函数,或者立即执行(IIFE)。
4.2.1 函数表达式
  • 函数表达式是将匿名函数赋值给一个变量的方式。这使得函数可以通过该变量名进行调用。
  • 示例中的add变量指向了一个匿名函数,该匿名函数接收两个参数并返回它们的和。通过add(100,200)调用它,结果为300。
4.2.2 箭头函数 (Arrow Function)
  • 箭头函数是ES6引入的一种更简洁的函数书写方式。它们有较短的语法并且不会绑定自己的thisargumentssuper,或new.target
  • 在代码示例中,add是一个箭头函数,它同样接收两个参数并返回它们的和。这里使用了大括号{}来包裹函数体,因为函数体内有多行代码或需要显式地返回一个值。
  • 如果箭头函数只有一行代码,可以直接省略大括号和return关键字。例如:let add = (a, b) => a + b;

5. 自定义对象

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-函数</title>
</head>
<body><script>//1. 自定义对象// let user = {//   name: 'Tom',//   age: 18,//   gender: '男',//   sing: function(){//     alert(this.name + '悠悠的唱着最炫的民族风~')//   }// }//let user = {//  name: 'Tom',//  age: 18,//  gender: '男',//  sing(){//    alert(this.name + '悠悠的唱着最炫的民族风~')//  }//}// let user = {//   name: 'Tom',//   age: 18,//   gender: '男',//   sing: () => { //注意: 在箭头函数中, this并不指向当前对象 - 指向的是当前对象的父级 【不推荐】//     alert(this + ':悠悠的唱着最炫的民族风~')//   }// }//2. 调用对象属性/方法//alert(user.name);//user.sing();//3. JSON - JS对象标记法let person = {name: 'itcast',age: 18,gender: '男'}alert(JSON.stringify(person)); //js对象 --> json字符串let personJson = '{"name": "heima", "age": 18}';alert(JSON.parse(personJson).name);</script>
</body>
</html>

5.1 自定义对象

  • 在JavaScript中,可以使用对象字面量的方式创建对象。对象是一组无序的键值对集合,其中键是字符串(或符号),值可以是任何有效的JavaScript数据类型,包括函数。
  • 对象的方法可以通过两种方式定义:传统函数表达式和简化的ES6语法(去掉function关键字)。但是要注意,在箭头函数中,this关键字的行为与常规函数不同,它不会绑定到当前对象,而是继承自外层作用域,因此在对象方法中通常不推荐使用箭头函数来定义方法。

5.2 调用对象属性/方法

  • 可以通过点.操作符访问对象的属性或调用其方法。例如,user.name会返回用户的名字,而user.sing()将执行sing方法,并弹出一个带有消息的对话框。

5.3 JSON - JS对象标记法

  • JSON是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。它基于JavaScript编程语言的一个子集。

  • JSON.stringify() 方法用于将JavaScript对象转换为JSON字符串。这在需要发送数据给服务器或存储时非常有用。

    alert(JSON.stringify(person)); // 将 person 对象转换为 JSON 字符串并显示
    
  • JSON.parse() 方法用于解析JSON字符串,构造由字符串描述的JavaScript值或对象。这在接收来自服务器的数据或从存储中读取时非常有用。

    alert(JSON.parse(personJson).name); // 解析 JSON 字符串并访问 name 属性
    

在这里插入图片描述

6. DOM

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-DOM</title>
</head>
<body><h1 id="title1">11111</h1><h1>22222</h1><h1>33333</h1><script>//1. 修改第一个h1标签中的文本内容//1.1 获取DOM对象// let h1 = document.querySelector('#title1');//let h1 = document.querySelector('h1'); // 获取第一个h1标签let hs = document.querySelectorAll('h1');//1.2 调用DOM对象中属性或方法hs[0].innerHTML = '修改后的文本内容';</script>
</body>
</html>

6.1 获取DOM对象

  • document.querySelector 方法用于返回文档中与指定的选择器或选择器组匹配的第一个Element节点,如果没有任何匹配,则返回null。
    • 使用ID选择器:document.querySelector('#title1') 会选取具有id="title1"的元素。
    • 使用标签名选择器:document.querySelector('h1') 会选择文档中的第一个<h1>元素。
  • document.querySelectorAll 方法用于返回一个静态(不是实时更新)的NodeList对象,包含文档中所有与指定的选择器或选择器组匹配的元素。

6.2 修改DOM对象的内容

  • 在代码示例中,通过querySelectorAll('h1')获取了所有的<h1>元素,并存储在变量hs中。然后通过访问hs[0]来定位到第一个<h1>元素,并使用innerHTML属性设置其新的文本内容为“修改后的文本内容”。
  • innerHTML 属性可以用来读取或设置元素的内容,包括HTML标记。如果只想修改纯文本而不涉及HTML结构,可以使用textContent属性。

6.3 其他常用的DOM操作方法

  • getElementById(id):通过元素的ID获取单个元素。
  • getElementsByClassName(name):通过类名获取一组元素。
  • getElementsByTagName(name):通过标签名获取一组元素。
  • appendChild(child):向节点添加子节点。
  • removeChild(child):从节点中移除子节点。
  • insertBefore(newElement, referenceElement):在参考元素之前插入新元素。
  • setAttribute(name, value)getAttribute(name):分别为设置和获取元素的属性值。

7. 事件监听

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS事件</title>
</head>
<body><input type="button" id="btn1" value="点我一下试试1"><input type="button" id="btn2" value="点我一下试试2"><script>//事件监听 - addEventListener (可以多次绑定同一事件)document.querySelector('#btn1').addEventListener('click', () => {console.log('试试就试试~~');});document.querySelector('#btn1').addEventListener('click', () => {console.log('试试就试试22~~');});//事件绑定-早期写法 - onclick (如果多次绑定同一事件, 覆盖) - 了解document.querySelector('#btn2').onclick =  () => {console.log('试试就试试~~');}document.querySelector('#btn2').onclick =  () => {console.log('试试就试试22~~');}</script>
</body>
</html>

7.1 addEventListener 方法

  • addEventListener 是现代推荐的方式来为DOM元素添加事件监听器。它允许你为同一个事件类型(如点击事件)绑定多个不同的处理函数,而不会相互覆盖。
  • 在示例中,#btn1按钮通过addEventListener方法绑定了两个点击事件处理函数。当点击#btn1时,这两个函数都会被执行,依次输出“试试就试试~~”和“试试就试试22~~”。

7.2 传统onclick属性

  • 早期的事件绑定方式是直接设置元素的onclick属性。这种方式只能为一个元素的特定事件指定一个处理函数;如果再次为同一事件设置onclick,则会覆盖之前的定义。
  • 示例中的#btn2按钮使用了onclick属性来绑定点击事件处理函数。由于第二次赋值覆盖了第一次的赋值,因此只有最后一个绑定的处理函数会被执行,即只会输出“试试就试试22~~”。

7.3 事件处理的区别与选择

  • 使用addEventListener可以更灵活地管理事件,特别是当你需要在不同地方或时间点添加多个事件处理器时。此外,它还支持事件捕获阶段和冒泡阶段的选择,提供了更多的控制。
  • onclick等内联事件处理程序较为简单直接,但在复杂的应用中可能会导致代码难以维护,并且容易被后续的脚本覆盖。

8. 常见事件

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS-事件-常见事件</title>
</head><body><form action="" style="text-align: center;"><input type="text" name="username" id="username"><input type="text" name="age" id="age"><input id="b1" type="submit" value="提交"><input id="b2" type="button" value="单击事件"></form><br><br><br><table width="800px" border="1" cellspacing="0" align="center"><tr><th>学号</th><th>姓名</th><th>分数</th><th>评语</th></tr><tr align="center"><td>001</td><td>张三</td><td>90</td><td>很优秀</td></tr><tr align="center" id="last"><td>002</td><td>李四</td><td>92</td><td>优秀</td></tr></table><!-- type="module" 模块化JS --><script src="./js/eventDemo.js" type="module"></script>
</body></html>

8.1 type="module"关键字

该部分代码有如下结构

项目根目录
├── 常见事件.html
└── js├── eventDemo.js└── utils.js

通过 type="module",我们可以创建一个清晰的模块系统,其中各个模块可以相互依赖,形成一层层的调用关系。浏览器能够智能地解析这些依赖关系,确保所有必要的模块都被正确加载和执行。这种方式不仅提高了代码的可维护性和复用性,还允许开发者利用现代JavaScript的强大功能来构建更加复杂的应用程序。

./utils.js

export function printLog(msg){console.log(msg);
}

8.2 export关键字

  • export关键字:允许你将函数、变量或类从当前模块中暴露出去,以便其他模块可以通过import语句来使用它们。
  • 在这段代码中,printLog函数被定义并立即通过export关键字导出,这意味着任何导入此模块的地方都可以访问到printLog函数。
    ./js/eventDemo.js
import { printLog } from "./utils.js";//click: 鼠标点击事件
document.querySelector('#b2').addEventListener('click', () => {printLog("我被点击了...");
})//mouseenter: 鼠标移入
document.querySelector('#last').addEventListener('mouseenter', () => {printLog("鼠标移入了...");
})//mouseleave: 鼠标移出
document.querySelector('#last').addEventListener('mouseleave', () => {printLog("鼠标移出了...");
})//keydown: 某个键盘的键被按下
document.querySelector('#username').addEventListener('keydown', () => {printLog("键盘被按下了...");
})//keyup: 某个键盘的键被抬起
document.querySelector('#username').addEventListener('keyup', () => {printLog("键盘被抬起了...");
})//blur: 失去焦点事件
document.querySelector('#age').addEventListener('blur', () => {printLog("失去焦点...");
})//focus: 元素获得焦点
document.querySelector('#age').addEventListener('focus', () => {printLog("获得焦点...");
})//input: 用户输入时触发
document.querySelector('#age').addEventListener('input', () => {printLog("用户输入时触发...");
})//submit: 提交表单事件
document.querySelector('form').addEventListener('submit', () => {alert("表单被提交了...");
})

8.3 import关键字

  • import语句:用来从其他模块导入所需的函数、对象或原始值。这里的import { printLog } from "./utils.js";是从./utils.js文件中导入一个名为printLog的函数。
  • {}花括号:表示只导入特定的导出项。如果要导入整个模块的所有导出项,可以省略花括号并使用星号*加上一个别名,例如import * as utils from "./utils.js";
    在这里插入图片描述

8.4 常见事件

8.4.1 鼠标事件
  • click: 当用户点击某个元素时触发,是最常用的鼠标事件之一。
  • dblclick: 双击事件。
  • mouseovermouseout: 分别当鼠标指针进入和离开元素时触发。
  • mousedownmouseup: 分别在按下和释放鼠标按钮时触发。
8.4.2 键盘事件
  • keydownkeyup: 分别在按键被按下和释放时触发。
  • keypress: 当字符键被按下时触发(已废弃,在现代开发中不推荐使用)。
8.4.3 表单事件
  • submit: 当用户提交表单时触发。可以用来验证表单数据或阻止默认的提交行为。
  • inputchange: 分别在输入框内容变化时(实时)和失去焦点时触发,适用于表单元素如文本框、下拉列表等。
  • focusblur: 分别在元素获得焦点和失去焦点时触发。
8.4.4 焦点事件
  • focusin: 当元素即将获得焦点时触发,并且此事件会冒泡。可以在父级元素上监听focusin来响应任何子元素获得焦点的情况。
  • focus: 当用户通过点击、键盘导航或脚本使一个元素获得焦点时触发。常用于表单元素如输入框、文本区域等,以检测用户的交互。
  • blur: 当元素失去焦点时触发。与focus事件相对,它标志着用户已经结束了对该元素的操作或离开了该元素。
    在这里插入图片描述
8.4.5 其他事件
  • load: 页面加载完成后触发。
  • resize: 窗口大小改变时触发。
  • scroll: 页面滚动时触发。

二、Vue

Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架,旨在通过简洁的 API 实现响应式的数据绑定和组件化的视图管理。它允许开发者创建可复用的组件,并通过声明式渲染将数据动态地绑定到DOM元素上。Vue 的核心库专注于视图层,但其生态系统包括了路由(Vue Router)、状态管理(Vuex)等强大工具,支持从简单的单页面应用到复杂的大规模应用开发。Vue 以其易学易用、灵活性高和性能优越而著称,使其成为现代前端开发中非常受欢迎的选择。与传统的 MVC 框架相比,Vue 更加轻量且易于集成到现有项目中。

1. Vue快速入门

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Vue-快速入门</title>
</head>
<body><div id="app"><h1>{{message}}</h1><h1>{{count}}</h1></div><script type="module">import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';createApp({data() {return {message: 'Hello Vue',count: 100}}}).mount('#app');</script>
</body>
</html>

1.1 数据绑定

  • 插值表达式:
    • 使用双大括号语法 {{ }} 绑定数据属性到HTML中。例如,<h1>{{ message }}</h1> 会显示 message 的值。

1.2 模块化脚本加载

  • ES模块:
    • 使用 <script type="module"> 标签来加载脚本,并通过 import 语句从CDN引入Vue 3库文件。

1.3 响应式数据

  • 响应式数据对象:
    • data() 方法中返回的对象中的所有属性都是响应式的。这意味着当这些属性的值发生变化时,Vue会自动更新相关的视图部分。

1.4 应用实例创建与挂载

  • 创建Vue应用实例:
    • 使用 createApp({...}) 创建一个新的Vue应用实例,并通过 .mount('#app') 将其挂载到指定的DOM元素上。

2. Vue生命周期

Vue 的生命周期是指 Vue 实例从创建到销毁所经历的一系列阶段。每个阶段都有特定的钩子函数(Lifecycle Hooks),允许开发者在这些关键点插入自定义逻辑,如初始化数据、响应状态变化或清理资源等。理解 Vue 的生命周期对于开发高效且可维护的应用至关重要。

2.1 Vue生命周期的主要阶段

2.1.1 创建阶段 (Creation)
  • beforeCreate:实例刚刚被创建,但尚未开始初始化属性(如 datamethods)。此时,实例还不能访问 DOM 或者响应式数据。
  • created:实例已完成数据观测和事件配置,但尚未挂载到 DOM 上。这是发起网络请求、设置定时器或执行其他初始化操作的好时机。
2.1.2 挂载阶段 (Mounting)
  • beforeMount:模板编译完成,虚拟 DOM 创建完毕,但还没有渲染到真实 DOM 中。可以在这个阶段做一些准备工作,比如预加载资源。
  • mounted:实例已经被挂载到真实的 DOM 中,所有的指令和组件都已经解析并应用。现在你可以安全地操作 DOM 元素了。这也是一个常用的钩子来启动动画效果或与第三方库集成。
2.1.3 更新阶段 (Updating)
  • beforeUpdate:当响应式数据发生变化时触发,但在新旧 DOM 被替换之前。这里适合进行一些基于旧状态的操作。
  • updated:DOM 已经根据最新的数据进行了更新。需要注意的是,在这个钩子中再次修改状态可能会导致无限循环的更新。
2.1.4 销毁阶段 (Destroying)
  • beforeUnmount:实例即将被销毁,所有绑定的事件监听器和子组件都将被移除,但此时实例仍然完全可用。可以在此处执行清理工作,例如取消订阅外部服务或清除定时器。
  • unmounted:实例已经完全销毁,所有相关的资源都被释放。之后不能再访问该实例。

2.2 生命周期图示

下图展示了 Vue 实例的生命周期:

+-------------------+       +-------------------+
| beforeCreate      | ----> | created           |
+-------------------+       +-------------------+|                             |v                             v
+-------------------+       +-------------------+
| beforeMount       | ----> | mounted           |
+-------------------+       +-------------------+|                             |v                             v
+-------------------+       +-------------------+
| beforeUpdate      | <---- | updated           |
+-------------------+       +-------------------+|                             |v                             v
+-------------------+       +-------------------+
| beforeUnmount     | ----> | unmounted         |
+-------------------+       +-------------------+

2.3 使用场景

  • 数据初始化:可以在 created 阶段进行数据的初始化,例如发起网络请求获取初始数据。
  • DOM 操作:利用 mounted 阶段进行需要 DOM 元素的操作,比如绑定事件监听器。
  • 清理工作:在 beforeUnmount 阶段执行一些清理工作,如清除定时器、取消订阅等。

在这里插入图片描述

三、Axios

Axios 是一个基于 Promise 的 HTTP 客户端,适用于浏览器和 Node.js,用于发起异步 HTTP 请求。它提供了简洁的 API 来处理请求和响应,并支持诸如拦截请求和响应、自动转换 JSON 数据等功能。与传统的 AJAX(通过 XMLHttpRequest 实现)相比,Axios 更加现代化且易于使用,减少了样板代码并提高了可读性。

1. Axios快速入门

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Ajax-Axios</title>
</head>
<body><input type="button" value="获取数据GET" id="btnGet"><input type="button" value="操作数据POST" id="btnPost"><script src="js/axios.js"></script><script>//发送GET请求document.querySelector('#btnGet').addEventListener('click', () => {//axios发起异步请求axios({url: 'https://mock.apifox.cn/m1/3083103-0-default/emps/list',method: 'GET'}).then((result) => { //成功回调函数console.log(result.data);}).catch((err) => { //失败回调函数console.log(err);})})//发送POST请求document.querySelector('#btnPost').addEventListener('click', () => {//axios发起异步请求axios({url: 'https://mock.apifox.cn/m1/3083103-0-default/emps/update',method: 'POST',data: 'id=1' //POST请求方式 , 请求体}).then((result) => { //成功回调函数console.log(result.data);}).catch((err) => { //失败回调函数console.log(err);})})</script>
</body>
</html>

1.1 Axios GET请求

  • 当用户点击“获取数据GET”按钮时,将触发一个GET请求,从指定URL https://mock.apifox.cn/m1/3083103-0-default/emps/list 获取数据。
  • 请求成功后,结果会打印在控制台上。

1.2 Axios POST请求

  • 当用户点击“操作数据POST”按钮时,将触发一个POST请求到 https://mock.apifox.cn/m1/3083103-0-default/emps/update
  • 在这个例子中,POST请求携带的数据为 'id=1',表示这是一个简单的键值对数据。
  • 同样地,如果请求成功,结果也会打印在控制台上。

1.3 回调函数

  • 成功回调函数 (then): 处理成功的请求,提供对响应数据的访问。
  • 失败回调函数 (catch): 处理请求中的错误,帮助识别和处理不同类型的错误。

2. Axios请求方式别名

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Ajax-Axios</title>
</head>
<body><input type="button" value="获取数据GET" id="btnGet"><input type="button" value="操作数据POST" id="btnPost"><script src="js/axios.js"></script><script>//发送GET请求document.querySelector('#btnGet').addEventListener('click', () => {axios.get('https://mock.apifox.cn/m1/3083103-0-default/emps/list').then((result) => {console.log(result.data);});console.log('==========================');})//发送POST请求document.querySelector('#btnPost').addEventListener('click', () => {axios.post('https://mock.apifox.cn/m1/3083103-0-default/emps/update', 'id=1').then((result) => {console.log(result.data);});})</script>
</body>
</html>

Axios 提供了多种请求方式的别名方法,使开发者能够方便地发送不同类型的HTTP请求。通过使用这些别名方法,可以简化代码并提高可读性。以下是常见的请求方式别名及其用途:

  • axios.get(url[, config]): 发送GET请求。
  • axios.post(url[, data[, config]]): 发送POST请求。
  • axios.put(url[, data[, config]]): 发送PUT请求。
  • axios.delete(url[, config]): 发送DELETE请求。
  • axios.head(url[, config]): 发送HEAD请求。
  • axios.options(url[, config]): 发送OPTIONS请求。
  • axios.patch(url[, data[, config]]): 发送PATCH请求。

四、案例—员工列表

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>Tlias智能学习辅助系统</title><style>/* 导航栏样式 */.navbar {background-color: #b5b3b3; /* 灰色背景 */display: flex; /* flex弹性布局 */justify-content: space-between; /* 左右对齐 */padding: 10px; /* 内边距 */align-items: center; /* 垂直居中 */}.navbar h1 {margin: 0; /* 移除默认的上下外边距 */font-weight: bold; /* 加粗 */color: white;/* 设置字体为楷体 */font-family: "楷体";}.navbar a {color: white; /* 链接颜色为白色 */text-decoration: none; /* 移除下划线 */}/* 搜索表单样式 */.search-form {display: flex;flex-wrap: nowrap;align-items: center;gap: 10px; /* 控件之间的间距 */margin: 20px 0;}.search-form input[type="text"], .search-form select {padding: 5px; /* 输入框内边距 */width: 260px; /* 宽度 */}.search-form button {padding: 5px 15px; /* 按钮内边距 */}/* 表格样式 */table {width: 100%;border-collapse: collapse;}th, td {border: 1px solid #ddd; /* 边框 */padding: 8px; /* 单元格内边距 */text-align: center; /* 左对齐 */}th {background-color: #f2f2f2;font-weight: bold;}.avatar {width: 30px;height: 30px;}/* 页脚样式 */.footer {background-color: #b5b3b3; /* 灰色背景 */color: white; /* 白色文字 */text-align: center; /* 居中文本 */padding: 10px 0; /* 上下内边距 */margin-top: 30px;}#container {width: 80%; /* 宽度为80% */margin: 0 auto; /* 水平居中 */}</style>
</head>
<body><div id="container"><!-- 顶部导航栏 --><div class="navbar"><h1>Tlias智能学习辅助系统</h1><a href="#">退出登录</a></div><!-- 搜索表单区域 --><form class="search-form"><label for="name">姓名:</label><input type="text" id="name" name="name" v-model="searchForm.name" placeholder="请输入姓名"><label for="gender">性别:</label><select id="gender" name="gender" v-model="searchForm.gender"><option value=""></option><option value="1"></option><option value="2"></option></select><label for="position">职位:</label><select id="position" name="position" v-model="searchForm.job"><option value=""></option><option value="1">班主任</option><option value="2">讲师</option><option value="3">学工主管</option><option value="4">教研主管</option><option value="5">咨询师</option></select><button type="button" v-on:click="search">查询</button><button type="button" @click="clear">清空</button></form><!-- 表格展示区 --><table><!-- 表头 --><thead><tr><th>序号</th><th>姓名</th><th>性别</th><th>头像</th><th>职位</th><th>入职日期</th><th>最后操作时间</th><th>操作</th></tr></thead><!-- 表格主体内容 --><tbody><tr v-for="(e, index) in empList" :key="e.id"><td>{{index + 1}}</td><td>{{e.name}}</td><td>{{e.gender == 1?'男' : '女'}}</td><!-- 插值表达式是不能出现在标签内部 --><td><img class="avatar"  v-bind:src="e.image" :alt="e.name"></td><!-- v-if: 控制元素的显示与隐藏 --><td><span v-if="e.job == 1">班主任</span><span v-else-if="e.job == 2">讲师</span><span v-else-if="e.job == 3">学工主管</span><span v-else-if="e.job == 4">教研主管</span><span v-else-if="e.job == 5">咨询师</span><span v-else>其他</span></td><!-- v-show: 控制元素的显示与隐藏 --><!-- <td><span v-show="e.job == 1">班主任</span><span v-show="e.job == 2">讲师</span><span v-show="e.job == 3">学工主管</span><span v-show="e.job == 4">教研主管</span><span v-show="e.job == 5">咨询师</span></td> --><td>{{e.entrydate}}</td><td>{{e.updatetime}}</td><td class="action-buttons"><button type="button">编辑</button><button type="button">删除</button></td></tr></tbody></table><!-- 页脚版权区域 --><footer class="footer"><p>江苏传智播客教育科技股份有限公司</p><p>版权所有 Copyright 2006-2024 All Rights Reserved</p></footer></div><script src="js/axios.js"></script><script type="module">import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'createApp({data() {return {searchForm: { //封装用户输入的查询条件name: '',gender: '',job: ''},empList: []}},//方法methods: {async search(){// 发送ajax请求,获取数据// axios.get(`https://web-server.itheima.net/emps/list?name=${this.searchForm.name}&gender=${this.searchForm.gender}&job=${this.searchForm.job}`).then((result) => {//     this.empList = result.data.data;// })// console.log('===========================');let result = await axios.get(`https://web-server.itheima.net/emps/list?name=${this.searchForm.name}&gender=${this.searchForm.gender}&job=${this.searchForm.job}`);this.empList = result.data.data;},clear(){//清空表单项数据this.searchForm = {name:'', gender:'', job:''}this.search()}},//钩子函数mounted(){//页面加载完成之后,发送ajax请求,获取数据this.search()}}).mount('#container')</script></body>
</html>

https://web-server.itheima.net/emps/list

{"code": 1,"msg": "success","data": [{"id": 1,"name": "谢逊","image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/4.jpg","gender": 1,"job": 1,"entrydate": "2023-06-09","updatetime": "2023-07-01 00:00:00"},{"id": 2,"name": "韦一笑","image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/1.jpg","gender": 1,"job": 1,"entrydate": "2023-06-09","updatetime": "2023-07-01 00:00:00"},{"id": 3,"name": "黛绮丝","image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/2.jpg","gender": 2,"job": 2,"entrydate": "2023-06-09","updatetime": "2023-07-01 00:00:00"},{"id": 4,"name": "殷天正","image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2023/3.jpg","gender": 1,"job": 3,"entrydate": "2023-06-09","updatetime": "2023-07-01 00:00:00"}]
}

在这里插入图片描述
根据你提供的代码,以下是关于Vue的关键知识点总结,包括searchFormv-modelv-onv-ifv-forasyncawait的详细解释:

1. Vue 关键知识点总结

1.1 searchForm 对象

  • 用途: 封装用户在搜索表单中输入的查询条件。
  • 定义:
    data() {return {searchForm: { // 封装用户输入的查询条件name: '',gender: '',job: ''},empList: []}
    }
    
  • 作用: 在Vue实例的数据对象中定义searchForm,用于存储用户的输入值,并通过v-model指令将其与表单元素绑定。

1.2 v-model 指令

  • 用途: 实现双向数据绑定,将表单元素的值与Vue实例中的数据属性同步。
  • 示例:
    <input type="text" id="name" name="name" v-model="searchForm.name" placeholder="请输入姓名">
    <select id="gender" name="gender" v-model="searchForm.gender"><option value=""></option><option value="1"></option><option value="2"></option>
    </select>
    <select id="position" name="position" v-model="searchForm.job"><option value=""></option><option value="1">班主任</option><option value="2">讲师</option><!-- 其他选项 -->
    </select>
    
  • 作用: 当用户在表单元素中输入或选择内容时,v-model会自动更新对应的Vue实例数据属性;反之亦然。

1.3 v-on 指令

  • 用途: 绑定事件监听器,处理用户的交互行为。
  • 示例:
    <button type="button" v-on:click="search">查询</button>
    <button type="button" @click="clear">清空</button>
    
  • 作用:
    • v-on:click="search":当点击按钮时,调用search方法。
    • @click="clear":简写形式,功能同上。@v-on:的缩写。

1.4 v-ifv-else-if 指令

  • 用途: 条件渲染,根据表达式的值决定是否渲染元素。
  • 示例:
    <td><span v-if="e.job == 1">班主任</span><span v-else-if="e.job == 2">讲师</span><span v-else-if="e.job == 3">学工主管</span><span v-else-if="e.job == 4">教研主管</span><span v-else-if="e.job == 5">咨询师</span><span v-else>其他</span>
    </td>
    
  • 作用: 根据e.job的值,显示相应的职位名称。如果e.job为1,则显示“班主任”,依此类推。

好的,让我们通过你提供的注释代码片段来详细解释 v-show 指令,并说明它与 v-if 的区别。

1.5 v-show 指令

  • 用途: 根据表达式的值动态地显示或隐藏元素。
  • 示例:
    <td><span v-show="e.job == 1">班主任</span><span v-show="e.job == 2">讲师</span><span v-show="e.job == 3">学工主管</span><span v-show="e.job == 4">教研主管</span><span v-show="e.job == 5">咨询师</span> </td>
    
  • 作用: 通过 CSS 的 display 属性控制元素的显示和隐藏,适用于需要频繁切换显示状态的场景。

1.6 v-showv-if 的区别

  • v-show:

    • 只是通过 CSS 的 display 属性来控制元素的显示和隐藏。
    • 元素始终存在于 DOM 中,只是在需要时通过 display: none; 来隐藏。
    • 适用于需要频繁切换显示状态的场景,因为其性能开销较小。
  • v-if:

    • 根据条件决定是否渲染元素到 DOM 中。
    • 如果条件为假,元素将不会被渲染到 DOM 中;如果条件为真,则会渲染。
    • 适用于不经常切换显示状态的场景,因为它涉及到 DOM 的增删操作,性能开销较大。

1.7 v-for 指令

  • 用途: 列表渲染,用于循环生成DOM元素。
  • 示例:
    <tr v-for="(e, index) in empList" :key="e.id"><td>{{index + 1}}</td><td>{{e.name}}</td><td>{{e.gender == 1 ? '男' : '女'}}</td><td><img class="avatar" v-bind:src="e.image" :alt="e.name"></td><!-- 职位显示部分 --><td>{{e.entrydate}}</td><td>{{e.updatetime}}</td><td class="action-buttons"><button type="button">编辑</button><button type="button">删除</button></td>
    </tr>
    
  • 作用: 遍历empList数组,为每个员工生成一行表格数据。:key="e.id"确保每个元素都有一个唯一的标识符,便于Vue进行高效的DOM更新。

1.8 asyncawait

  • 用途: 处理异步操作,使代码看起来更简洁和易于理解。
  • 示例:
    methods: {async search(){let result = await axios.get(`https://web-server.itheima.net/emps/list?name=${this.searchForm.name}&gender=${this.searchForm.gender}&job=${this.searchForm.job}`);this.empList = result.data.data;},clear(){this.searchForm = {name:'', gender:'', job:''};this.search();}
    },
    mounted(){this.search();
    }
    
  • 作用:
    • async search():定义一个异步函数,允许使用await关键字等待异步操作完成。
    • let result = await axios.get(...):等待axios.get请求完成,并将结果赋值给result变量。
    • mounted()钩子函数:在组件挂载完成后自动调用search方法,加载初始数据。

1.9 URL 解释

https://web-server.itheika.net/emps/list?name=${this.searchForm.name}&gender=${this.searchForm.gender}&job=${this.searchForm.job}
1.9.1 基础URL
  • https://web-server.itheima.net/emps/list: 这是API的端点,用于获取员工列表数据。
1.9.2 查询参数
  • ?: 表示开始传递查询参数。

  • name=${this.searchForm.name}:

    • name 是查询参数名。
    • ${this.searchForm.name} 是用户在搜索表单中输入的姓名。例如,如果用户输入“张三”,则这部分变为 name=张三
  • &: 分隔不同的查询参数。

  • gender=${this.searchForm.gender}:

    • gender 是查询参数名。
    • ${this.searchForm.gender} 是用户选择的性别。例如,如果用户选择“男”(假设值为1),则这部分变为 gender=1
  • job=${this.searchForm.job}:

    • job 是查询参数名。
    • ${this.searchForm.job} 是用户选择的职位。例如,如果用户选择“班主任”(假设值为1),则这部分变为 job=1

    在这里插入图片描述

相关文章:

万字长文总结前端开发知识---JavaScriptVue3Axios

JavaScript学习目录 一、JavaScript1. 引入方式1.1 内部脚本 (Inline Script)1.2 外部脚本 (External Script) 2. 基础语法2.1 声明变量2.2 声明常量2.3 输出信息 3. 数据类型3.1 基本数据类型3.2 模板字符串 4. 函数4.1 具名函数 (Named Function)4.2 匿名函数 (Anonymous Fun…...

React基础

前言 &#xff08;2021年笔记&#xff09;补充记录 React基础 前言React讲义一、create-react-app二、关于React1、React的起源和发展2、React与传统MVC的关系3、React高性能的体现&#xff1a;虚拟DOM4、React的特点和优势 三、编写第一个react应用程序四、元素与组件1、函数…...

读书笔记:《华为突围ERP封锁全纪实》

文章背景&#xff1a; 2019年5月&#xff0c;华为被美国制裁&#xff0c;其ERP系统面临断供风险。ERP系统是企业核心管理软件&#xff0c;一旦中断&#xff0c;华为的全球业务将陷入瘫痪。面对这一生死存亡的危机&#xff0c;华为启动了“突围”计划&#xff0c;历经数年艰苦奋…...

Linux的udev详解、安装和使用(dev下的设备每次开机的名称不固定怎么办?)

前言&#xff08;问题与需求&#xff09;&#xff1a; 在传统的devfs 1&#xff1a;设备映射的不确定&#xff1a;一个设备多次加载设备的设备文件可能不同&#xff0c;比如一个hub有可能是ttyUSB0或ttyUSB2或ttyUSB3 2&#xff1a;devfs没有足够的主辅设备号&#xff0c;当设…...

单向循环链表的概念+单向循环链表的结点插入+单向循环链表的结点删除+程序设计与笔试题分析

单向循环链表的原理与应用 思考&#xff1a;对于单向链表而言&#xff0c;想要遍历链表&#xff0c;则必须从链表的首结点开始进行遍历&#xff0c;请问有没有更简单的方案实现链表中的数据的增删改查&#xff1f; 回答&#xff1a;是有的&#xff0c;可以使用单向循环的链表…...

【蓝桥杯嵌入式入门与进阶】2.与开发板之间破冰:初始开发板和原理图2

个人主页&#xff1a;Icomi 专栏地址&#xff1a;蓝桥杯嵌入式组入门与进阶 大家好&#xff0c;我是一颗米&#xff0c;本篇专栏旨在帮助大家从0开始入门蓝桥杯并且进阶&#xff0c;若对本系列文章感兴趣&#xff0c;欢迎订阅我的专栏&#xff0c;我将持续更新&#xff0c;祝你…...

Jetson Xavier NX 安装 CUDA 支持的 PyTorch 指南

本指南将帮助开发者完成在 Jetson Xavier NX 上安装 CUDA 支持的 PyTorch。 安装方法 在 Jetson 上安装 Pytorch 只有两种方法。 一种是直接安装他人已经编译好的 PyTorch 轮子&#xff1b;一种是自己从头开始开始构建 PyTorch 轮子并且安装。 使用轮子安装 可以从我的 Gi…...

“harmony”整合不同平台的单细胞数据之旅

其实在Seurat v3官方网站的Vignettes中就曾见过该算法&#xff0c;但并没有太多关注&#xff0c;直到看了北大张泽民团队在2019年10月31日发表于Cell的《Landscap and Dynamics of Single Immune Cells in Hepatocellular Carcinoma》&#xff0c;为了同时整合两类数据&#xf…...

[权限提升] 操作系统权限介绍

关注这个专栏的其他相关笔记&#xff1a;[内网安全] 内网渗透 - 学习手册-CSDN博客 权限提升简称提权&#xff0c;顾名思义就是提升自己在目标系统中的权限。现在的操作系统都是多用户操作系统&#xff0c;用户之间都有权限控制&#xff0c;我们通过 Web 漏洞拿到的 Web 进程的…...

大模型本地部署流程介绍

大模型本地部署流程介绍 随着人工智能技术的快速发展&#xff0c;大模型&#xff08;如大型语言模型、图像识别模型等&#xff09;的应用越来越广泛。然而&#xff0c;由于这些模型通常体积庞大且计算资源要求高&#xff0c;如何在本地环境中高效部署成为了一个重要的议题。以…...

浅析百度AOI数据与高德AOI数据的差异性

目录 前言 一、AOI属性数据 1、百度AOI数据 2、高德AOI数据 二、AOI矢量边界 1、百度AOI空间范围 2、高德AOI空间范围 三、数据获取频次和难易程度 1、接口限制 2、数据转换成本 四、总结 前言 在当今数字化时代&#xff0c;地理信息数据的精准性和丰富性对于城市规划…...

LeetCode 119. 杨辉三角 II

题意&#xff1a;求杨辉三角&#xff08;帕斯卡三角&#xff09;的第n行&#xff08;n从0开始&#xff09; 杨辉三角的每一行是二项式排列组合的展开式 第n行为: C n 0 , C n 1 , C n 2 , … , C n n C_{n}^{0}, C_{n}^{1}, C_{n}^{2}, \dots, C_{n}^{n} Cn0​,Cn1​,Cn2​,……...

机器学习-K近邻算法

文章目录 一. 数据集介绍Iris plants dataset 二. 代码三. k值的选择 一. 数据集介绍 鸢尾花数据集 鸢尾花Iris Dataset数据集是机器学习领域经典数据集&#xff0c;鸢尾花数据集包含了150条鸢尾花信息&#xff0c;每50条取自三个鸢尾花中之一&#xff1a;Versicolour、Setosa…...

设计模式Python版 原型模式

文章目录 前言一、原型模式二、原型模式示例三、原型管理器 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a;关注类和对…...

centos安装mysql

下面的方法不行&#xff0c;最后还是通过我自己的博客中的 https://blog.csdn.net/qq_21237549/article/details/133759503 CentOS 安装MySQL 详细教程 安装成功的 通过网盘分享的文件&#xff1a;服务器部署 链接: https://pan.baidu.com/s/12QwjIMgwHcwVeVoal-BKrg 提取码:…...

java 判断Date是上午还是下午

我要用Java生成表格统计信息&#xff0c;如下图所示&#xff1a; 所以就诞生了本文的内容。 在 Java 里&#xff0c;判断 Date 对象代表的时间是上午还是下午有多种方式&#xff0c;下面为你详细介绍不同的实现方法。 方式一&#xff1a;使用 java.util.Calendar Calendar 类…...

Jenkins安装部署(以及常见报错解决方案),jdk版本控制器sdkman

目录 零、环境介绍 一、Jenkins安装 1、插件安装以及更换插件源 2、修改jenkins时区 二、sdkman安装&#xff08;可选&#xff09; 1、sdkman常用方法 2、sdkman常用方法演示 2.1、查看可用的jdk 2.2、下载jdk并切换版本 三、jenkins报错解决 1、下载sdkman后systemc…...

【Linux】gdb——Linux调试器

gdb使用背景 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项 gdb使用方法 首先进入gdb gdb test_glist显示代码 断点 b 行…...

978.最长湍流子数组

目录 题目过程解法收获 题目 给定一个整数数组 arr &#xff0c;返回 arr 的 最大湍流子数组的长度 。 如果比较符号在子数组中的每个相邻元素对之间翻转&#xff0c;则该子数组是 湍流子数组 。 更正式地来说&#xff0c;当 arr 的子数组 A[i], A[i1], …, A[j] 满足仅满足…...

LLM - 大模型 ScallingLaws 的指导模型设计与实验环境(PLM) 教程(4)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145323420 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scaling Laws (缩放法则) 是大模型领域中,用于描述 模型性能(Loss) 与…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.19 排序革命:argsort的十大高阶用法

1.19 排序革命&#xff1a;argsort的十大高阶用法 目录 #mermaid-svg-Qu8PcmLkIc1pOQJ7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Qu8PcmLkIc1pOQJ7 .error-icon{fill:#552222;}#mermaid-svg-Qu8PcmLkIc1pOQJ…...

记忆力训练day07

逻辑分类联想记忆法 一 课程目标 &#xff08;1&#xff09;掌握如何分类信息 &#xff08;2&#xff09;掌握如何运用逻辑分类方法进行记忆 小试牛刀&#xff1a; 核心的内容&#xff1a; 文字逻辑分类记忆&#xff1a;把文字分类后转换成画面连接记忆。 玫瑰 大树 太阳…...

RK3588平台开发系列讲解(ARM篇)ARM64底层中断处理

文章目录 一、异常级别二、异常分类2.1、同步异常2.2、异步异常三、中断向量表沉淀、分享、成长,让自己和他人都能有所收获!😄 一、异常级别 ARM64处理器确实定义了4个异常级别(Exception Levels, EL),分别是EL0到EL3。这些级别用于管理处理器的特权级别和权限,级别越高…...

算法1-1 模拟与高精度

目录 一 阶乘数码 二 麦森数 三 模拟题 一 阶乘数码 本题中n<1000,1000的阶乘为以下这么大&#xff0c;远超long的范围 402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901…...

(四)线程 和 进程 及相关知识点

目录 一、线程和进程 &#xff08;1&#xff09;进程 &#xff08;2&#xff09;线程 &#xff08;3&#xff09;区别 二、串行、并发、并行 &#xff08;1&#xff09;串行 &#xff08;2&#xff09;并行 &#xff08;3&#xff09;并发 三、爬虫中的线程和进程 &am…...

Tensor 基本操作2 理解 tensor.max 操作,沿着给定的 dim 是什么意思 | PyTorch 深度学习实战

前一篇文章&#xff0c;Tensor 基本操作1 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 目录 Tensor 基本操作torch.max默认指定维度 Tensor 基本操作 torch.max torch.max 实现降维运算&#xff0c;基于指定的 d…...

[牛客]公交线路(dijkstra+链式前向星)

登录—专业IT笔试面试备考平台_牛客网 #include<bits/stdc.h> using namespace std; #define endl \n typedef long long ll; const int N1e65,M1e85; int cnt0,head[N]; int n,m,s,t; struct node {int v,w,next; }edge[M]; void addedge(int u,int v,int w) {cnt;edge…...

面试被问的一些问题汇总(持续更新)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

RocketMQ原理—5.高可用+高并发+高性能架构

大纲 1.RocketMQ的整体架构与运行流程 2.基于NameServer管理Broker集群的架构 3.Broker集群的主从复制架构 4.基于Topic和Queue实现的数据分片架构 5.Broker基于Pull模式的主从复制原理 6.Broker层面到底如何做到数据0丢失 7.数据0丢失与写入高并发的取舍 8.RocketMQ读…...

适配器模式——C++实现

目录 1. 适配器模式简介 2. 角色组成 3. 代码示例 4. 适配器模式、装饰器模式、外观模式的辨析 1. 适配器模式简介 适配器模式是一种结构型模式。 适配器模式的定义&#xff1a;适配器模式将一个类的接口&#xff0c;转换成客户期望的另一个接口。适配器让原本接口不可兼容…...

C语言自定义数据类型详解(一)——结构体类型(上)

什么是自定义数据类型呢&#xff1f;顾名思义&#xff0c;就是我们用户自己定义和设置的类型。 在C语言中&#xff0c;我们的自定义数据类型一共有三种&#xff0c;它们分别是&#xff1a;结构体(struct)&#xff0c;枚举(enum)&#xff0c;联合(union)。接下来&#xff0c;我…...

C语言基础4

sizeof和strlen的区别 ①sizeof是运算符而strlen是函数 ②sizeof可以用类型做参数&#xff0c;strlen只能用char*做参数 ③数组做sizeof参数不退化&#xff0c;而传递给strlen则退化成指针 ④strlen结果是运行时候才能计算出来&#xff0c;而且计算出来的是字符串的长度不是内…...

【Elasticsearch】Elasticsearch的查询

Elasticsearch的查询 DSL查询基础语句叶子查询全文检索查询matchmulti_match 精确查询termrange 复合查询算分函数查询bool查询 排序分页基础分页深度分页 高亮高亮原理实现高亮 RestClient查询基础查询叶子查询复合查询排序和分页高亮 数据聚合DSL实现聚合Bucket聚合带条件聚合…...

第 5 章:声音与音乐系统

5.1 声音效果的应用 在游戏中&#xff0c;声音效果是增强游戏沉浸感和趣味性的重要元素。Pygame 提供了强大的音频处理功能&#xff0c;使得添加各种声音效果变得相对简单。声音效果可以包括角色的动作音效&#xff0c;如跳跃、攻击、受伤时的声音&#xff1b;环境音效&#x…...

第十四讲 JDBC数据库

1. 什么是JDBC JDBC&#xff08;Java Database Connectivity&#xff0c;Java数据库连接&#xff09;&#xff0c;它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系型数据库&#xff0c;并使用SQL语句来完成对数据库中数据的查询、新增、更新和删除等操作…...

2024年除夕

多少年前的除夕&#xff0c;一如今天这样的除夕&#xff1b;多少年后的除夕&#xff0c;也一如多少年前的除夕。 无数个这样的除夕下午&#xff0c;我打开电脑&#xff0c;望着窗外安静的小区&#xff0c;车声渐渐稀疏的马路&#xff0c;想写下一些新的感受时&#xff0c;多少…...

虚幻基础07:蓝图接口

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 作用原理事件函数 作用 实现对象间的通知。 A 通知 B 做什么。 原理 将接口抽象为蓝图&#xff0c;使得任意蓝图都能直接访问。 只需要再传入对象地址&#xff0c;就能执行对象的功能。 事件 黄色&#xff1a;…...

7. 马科维茨资产组合模型+金融研报AI长文本智能体(Qwen-Long)增强方案(理论+Python实战)

目录 0. 承前1. 深度金融研报准备2. 核心AI函数代码讲解2.1 函数概述2.2 输入参数2.3 主要流程2.4 异常处理2.5 清理工作2.7 get_ai_weights函数汇总 3. 汇总代码4. 反思4.1 不足之处4.2 提升思路 5. 启后 0. 承前 本篇博文是对前两篇文章&#xff0c;链接: 5. 马科维茨资产组…...

如何在本地部署deepseek r1模型?

DeepSeek&#xff08;深度求索&#xff09;正式发布了其最新推理模型DeepSeek-R1&#xff0c;引发业界广泛关注。这款模型不仅在性能上与OpenAI的GPT-4相媲美&#xff0c;更以其开源策略和创新的训练方法&#xff0c;为AI发展带来了新的可能性。DeepSeek-R1 在后训练阶段大规模…...

HarmonyOS:状态管理最佳实践

一、概述 在声明式UI编程范式中&#xff0c;UI是应用程序状态的函数&#xff0c;应用程序状态的修改会更新相应的UI界面。ArkUI采用了MVVM模式&#xff0c;其中ViewModel将数据与视图绑定在一起&#xff0c;更新数据的时候直接更新视图。如下图所示&#xff1a; ArkUI的MVVM模式…...

当AI风暴来袭:中美科技商业版图的迥异走向

当AI风暴来袭:中美科技商业版图的迥异走向 美国科技巨头的 AI 豪赌:Stargate 公司的诞生 2025 年,科技界被一则重磅消息所震动:软银、NVIDIA、Oracle 与 OpenAI 共同组建了 Stargate 公司。这一合作堪称豪华阵容,软银作为全球知名的投资巨头,拥有雄厚的资金实力和广泛的…...

马尔科夫模型和隐马尔科夫模型区别

我用一个天气预报和海藻湿度观测的比喻来解释&#xff0c;保证你秒懂&#xff01; 1. 马尔可夫模型&#xff08;Markov Model, MM&#xff09; 特点&#xff1a;状态直接可见 场景&#xff1a;天气预报&#xff08;晴天→雨天→阴天…&#xff09;核心假设&#xff1a; 下一个…...

面向对象设计原则 - SOLID原则 (基于C++)

SOLID 是面向对象编程中的一组五个设计原则&#xff0c;这些原则旨在帮助开发者创建更灵活、可维护和可扩展的软件系统。它们最初由 Robert C. Martin 提出&#xff0c;并在 2000 年左右被广泛接受。每个字母代表一个不同的原则&#xff1a; 单一职责原则 (Single Responsibil…...

ChatGPT 搜索测试整合记忆功能

据 TestingCatalog 报道&#xff0c;OpenAI 正在测试 ChatGPT 搜索的整合记忆功能&#xff0c;被命名为 “Memory in search”2。以下是关于该功能的具体情况123&#xff1a; 功能特点 个性化搜索&#xff1a;启用该功能后&#xff0c;ChatGPT 能利用存储的记忆数据&#xff0…...

PWM频率测量方法

测量PWM&#xff08;脉宽调制&#xff09;信号的频率是嵌入式系统中的常见需求&#xff0c;尤其是在电机控制、LED调光、传感器信号处理等场景中。 在这里介绍两种测量PWM频率的方法&#xff1a;测频法与测周法。 1、测频&#xff08;率&#xff09;法 原理&#xff1a;在闸门…...

【B站保姆级视频教程:Jetson配置YOLOv11环境(一)镜像下载与烧录】

b站同步视频教程&#xff1a;https://www.bilibili.com/video/BV11r6oYkEFb/ 一、引言 在人工智能与计算机视觉快速发展的当下&#xff0c;Jetson系列开发板凭借强大的性能&#xff0c;成为众多开发者进行深度学习项目的热门选择。YOLOv11作为目标检测领域的先进算法&#xf…...

使用QSqlQueryModel创建交替背景色的表格模型

class UserModel(QSqlQueryModel):def __init__(self):super().__init__()self._query "SELECT name, age FROM users"self.refresh()def refresh(self):self.setQuery(self._query)# 重新定义data()方法def data(self, index, role): if role Qt.BackgroundRole…...

计算机网络__基础知识问答

Question: 1&#xff09;在计算机网络的5层结构中&#xff0c;每一层的功能大概是什么&#xff1f; 2&#xff09;交换机的功能&#xff1f;https://www.bilibili.com/video/BV1na4y1L7Ev 3&#xff09;路由器的功能&#xff1f;https://www.bilibili.com/video/BV1hv411k7n…...

C语言数组详解:从基础到进阶的全面解析

在C语言中&#xff0c;数组是一种基本的数据结构&#xff0c;用于存储多个相同类型的数据。数组的引入使得C语言能够高效地存储和操作大量数据。在任何一个C语言程序中&#xff0c;数组都发挥着极其重要的作用。无论是在算法实现、数据存储、还是在复杂程序的设计中&#xff0c…...

微前端架构在前端开发中的实践与挑战

随着单页面应用&#xff08;SPA&#xff09;和前端框架如 React、Vue、Angular 的快速发展&#xff0c;现代前端应用的复杂度日益提升。尤其是当应用规模逐渐增大时&#xff0c;单一的代码库往往难以应对不同团队的协作和版本管理问题。为了应对这一挑战&#xff0c;微前端架构…...