JavaScript 基础通关

快速熟悉 JavaScript 的基础语法,比较高级的比如事件放在后面的笔记中。

JavaScript

1. JavaScript 介绍

1.1 JavaScript 基本介绍

  1. JavaScript 是一门运行在客户端(浏览器)的编程语言,实现人机交互的效果。
  2. 实现网页特效、表单验证、数据交互的效果、服务端编程(node.js)

权威网站:https://developer.mozilla.org/zh-CN/

1.2. JavaScript 的书写位置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.2.1 内部 JavaScript
  1. 直接写在 HTML 文件中,用 <scrpit> 包裹住
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    alert('弹出框')
  </script>
</body>
</html>

# 1.2.2 外部 JavaScript

  1. 代码写在以.js结尾的文件里
  2. 语法:通过script标签,引入到html页面中
<body>
	<script src=""></script>
</body>
1.2.3 内联 JavaScript

现阶段基本不会使用

<body>
	<button ontclick="alert('你好')"></button>    
<body>

1.3 JavaScript 书写格式

1.3.1 结束符
  • 使用英文的 ; 作为语句的结尾
  • 实际开发中可写可不写,浏览器可以自行推断语句的结束位置
  • 在实际开发中越来越多的人主张省略结束符
  • 为了风格统一,结束符要么都写要么都不写

1.4 输入和输出的语法

写出常见的输入和输出语法

1.4.1 输入语法
// 网页中显示
document.write('我是 div 标签')
document.write('<h1>我是一个标题</h1>')
// 网页弹出框
alert('弹出的内容')
// 控制台内容
console.log('弹出到控制台的内容')
1.4.2 输出语法
promopt('请输入你的姓名:')

作用:显示一个对话框,对话框中包含一条文字信息用来提示用户输入文字。

1.5 字面量

在计算机科学中,字面量(literal)是在计算机中描述 事/物
比如:

  • 我们工资是: 1000 此时 1000 就是 数字字面量
  • 黑马程序员’ 字符串字面量
  • 还有接下来我们学的 [] 数组字面量 {} 对象字面量 等等

2. 变量

2.1 变量的基本介绍

问题1:用户输入的数据如何存储起来?

变量就是计算机存储数据的容器,但需要注意的是变量不是数据本身,它们仅仅是存储数据的容器。

2.2 变量的基本使用(重点)

<script>
    // 声明变量
    let age;
    // 赋值
    age = 18;
    // 更新变量的值
    age = 19;
    // 输出变量的值
    alert(age);
</script>
<script>
	let age = 18, uname = 'Tom';
</script>

2.3 变量的本质

内存是计算机中存储数据的地方,变量是程序在内存中申请的一块用来存放数据的小空间。

2.4 变量命名规则与规范

  1. 规则
    1. 不能使用关键字,即有特殊含义的字符
    2. 只能使用下划线、字母、数字和 $ 符号组成,且数字不能用作开头
    3. 字母严格区分大小写
  2. 规范
    1. 起名要有意义
    2. 遵循小驼峰命名

2.5 拓展:let 与 var

在较老的 JavaScript 的版本中,使用关键字 var 来声明变量,而不是使用 let

但在现在开发中一般使用 let 我们可能在老版的程序中看到它

let 可以解决 var 的一些问题

下面列举一些 var 声明不合理的地方

  • 可以先使用再声明
  • 声名过的变量可以重复声明
  • 无法实现变量提升、全局变量、没有块级作用域

2.6 数组

let 数组名 = [数据1, 数据2, 数据3......];
  • 数组是按照顺序存储的,每个数据都有自己的编号
  • 计算机中的编号从 0 开始,数组下标的索引也是从 0 开始
  • 数组可以存储任意数据类型的数据

3. 常量

使用 const 声明的变量称为常量,当你确定这个常量设置了之后就不会再改变的时候,就可以通过 const 声明。

const G = 9.8;
alert(G);

常量是不允许重新被赋值的:

<script>
  const X = 1;
  X = 2;
  alert(X);
</script>

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4. 数据类型

JavaScript 中的数据类型分为两大类

  • 基本数据类型
  • 应用数据类型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.1 数字类型(Number)

数字可以有很多操作,比如加减乘除等等,所以数字类型经常和算数运算符一起出现

案例:计算圆形的面积
  let r = prompt('请输入圆的半径');
  const PI = 3.14;
  alert('圆形的面积为' + PI * r * r);

4.2 字符串类型(String)

通过单引号和双引号包裹的数据都叫字符串,单引号和双引号包裹没有本质的区别,但推荐使用单引号。

使用 + 可以实现两个字符串的拼接(和 Java 相同)。

因为这种拼接方法比较麻烦,衍生出了模板字符串

document.write(`大家好,我叫${name}, 今年${age});

4.3 布尔类型(Boolean)

标识肯定或者否定的是布尔类型,有两个固定的值 true 和 false

4.4 未定义类型(Undefined)

未定义是一个比较特殊的类型,只有一个值是 undefined,在只声明变量但是没有给变量赋值的时候变量的默认值就是 undefined

使用的场景比如,在开发中声明一个变量,等待数据传输过来,通过这个数据是否为未定义类型就可以判断出数据有没有传入。

4.5 空类型(null)

标识一个空的含义的特殊值

这里需要搞懂的是 null 和 undefined 的区别:null 是有值但是值为空,undefined 的意思是变量没有赋值

4.6 检测数据类型

  1. 通过控制台的颜色来判断数据类,比如布尔类型为蓝色,字符串和 undefined 为灰色
  2. 通过 typeof 关键字来判断:typeof age

5. 类型转化

5.1 为什么要进行类型转化呢

JavaScript 是一门弱类型语言,在赋值之前无法判断这个变量是哪种数据类型

这时候,我们使用表单或者 prompt 获取过来的数据默认是字符串类型的,我们如果相对其中的数字进行运算可能会出现如下的效果

console.log('100' + '120');//结果为 100120

这时候就需要转化数据类型

5.2 隐式转换

某些运算符被执行的时候,系统内部自动的将数据类型进行转化呢,这种转化被称为隐式转换

规则

  1. 当 + 两边只要有字符串的时候,就自动将另一边转为字符串
  2. 除了 + 以外的算术运算符会把数据类型转化为数字类型

但是转化的意义不太明确,常用的就是拼接字符串

5.3 显示转化

为了避免因隐式转换带来的问题,通常根逻辑需要对数据进行显示转换。

显示转化可以通过自己写代码告诉系统转化的数据类型

let a = prompt('请输入一个数字');
let b = prompt('请输入另一个数字');
a = parseInt(a);
b = parseInt(b);
alert(a+b);
  • 转换为数字型:

Number(数据)

parseInt(数据)

只保留整数部分

parseFloat(数据)

可以保留小数部分

如果字符串中有非数字,转化之后的结果就是 NaN(Not a Number),这也是一个 number 类型的代表非数字

  • 转换为字符串类型

String(数据)

变量.toString()

运算符与语句

1. 运算符

1.1 赋值运算符

对变量进行赋值的运算符称为赋值运算符

除了等号以外常见的赋值运算符有:

+= -= *= /= %= ,与 Java 中的含义相同

1.2 一元运算符

根据所需要的表达式的个数,分为一元运算符、二元运算符和三元运算符

比如 + 两边需要两个表达式,就是二元运算符

常见的一元运算符有:

自增

  • 符号 ++
  • 作用:让变量的值加一

同理,-- 是自减运算符

与 Java 相同,这个自增也分为前置自增和后置自增

1.3 比较运算符

1.4 逻辑运算符

和 Java 相同,分为与、或、非:&& ||!

1.5 运算符优先级

2. 语句

2.1 表达式和语句

表达式:表达式可以被求值,写在赋值语句的右侧

语句:语句不一定有值,有些语句就不能用作赋值

2.2 分支语句

分支语句让我们可以有选择性的执行某些语句

有三种实现的方式:

  1. if 分支语句

if 语句有单分支、双分支和多分支

// 单分支
if (条件) {
    语句;
}
// 双分支
if(条件) {
    语句;
} else {
    语句;
}
// 多分支
if (条件1) {
    语句;
} else if (条件2) {
     语句;
} 
......
else {
    语句;
}
  1. 三元运算符

条件 ? 满足条件执行的代码 : 不满足条件执行的代码

一般用来取值

  1. switch 分支语句

因为 JavaScript 是弱类型的语言,所以这里比较的是全等 === 即类型和内容完全相同才会判断相同,而 Java 不用考虑这些

switch () {
	case1:
		代码1;
		break;
	case2:
		代码1;
		break;
    default:
    	代码 n;
    	break;
}

3.循环语句

3.1 while 循环

循环就是重复执行某些操作,while 就是在什么什么期间的意思,就是在满足条件的区间,重复执行某些代码

while (循环条件) {
	需要重复执行的代码;
}

3.2 for 循环

for (变量起始值; 终止条件; 变量变化量) {
	循环体;
}

退出循环

  1. continue 退出本次循环,一般用于排除或者跳过某一个选项的时候, 可以使用continue
  2. break 退出整个for循环,一般用于结果已经得到, 后续的循环不需要的时候可以使用

4. 数组

4.1 基本介绍

数组是一种可以按顺序保存数据的数据类型

声明语法:

let 数组名 = [数据1, 数据2, ..., 数据 n];
这样就可以构造出一个数组,数组中的数据是是按顺序保存的,每个数据都有自己的编号

取值语法:

数组名[下标];与 Java 不同的是这个数组可以存储多种数据类型,取出来的是什么类型的就根据这个类型的特点访问

数组遍历:

for (let i = 0; i < 数组名.length; i++) {
	数组名[i];
}

4.2 操作数组

数组也是一种数据结构,即存储数据的方式,而对于数据结构无非就是增删改查,这里来看一下 JavaScript 中操控数组的方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.2.1 操作数组 - 新增
  1. arr.push()
  • 语法 : arr.push()
  • 向数组中添加新元素到数组的末尾,返回数组的新长度
  • 可以一次添加多个数组
let arr = ['red', 'green'];
arr.push('pink');
console.log(arr);
  1. arr.unshift
  • 语法:arr.unshift()
  • 将一个或者多个元素添加到数组的开头,并返回该数组的新长度
let arr = ['red', 'green'];
arr.unshift('pink', 'yellow');
console.log(arr); // ['pink', 'yellow', 'red', 'green'];
4.2.2 操作数组 - 删除

与上面的新增相同也是有删除最后一个元素和删除第一个元素

  1. 删除最后一个元素:arr.pop();
  2. 删除第一个元素:arr.shift;
  3. 删除多个元素:arr.splice(start, deleteCount);
    从 start 开始,删除 deleteCount 个元素

函数

1. 函数

1.1 函数的使用

函数可以实现代码的复用,提高开发效率

  • 函数声明语法

    function 函数名() {
    	函数体;
    }
    

函数命名规范:

  1. 和变量名基本一致
  2. 尽量使用小驼峰式命名法
  3. 前缀应该是动词

  • 函数的调用语法
函数名()

我们曾经使用的 alert() parseInt() 等后面带括号的都是函数的调用

1.2 函数传参

function 函数名(参数列表) {
	函数体;
}
  1. 形参:声明函数时写在函数名右边小括号里的叫形参(形式上的参数)
  2. 实参:调用函数时写在函数名右边小括号里的叫实参(实际上的参数) Ø
  3. 形参可以理解为是在这个函数内声明的变量(比如 num1 = 10)实参可以理解为是给这个变量赋值
  4. 开发中尽量保持形参和实参个数一致
  5. 我们曾经使用过的 alert(‘打印’), parseInt(‘11’), Number(‘11’) 本质上都是函数调用
1.2.1 参数默认值

形参如果没有赋值的话,默认值为 undefined 回顾前面的知识,如果我们使用这个 undefined 和另一个 undefined相加得到的结果为 NaN

我们可以在定义函数的时候给一个初始值

function add(x = 0, y = 0) {
	alert(x + y);
}

1.3 函数返回值

我们在函数执行完特定的任务以后,可以让函数把结果交给我们

我们前面接触的很多函数都有返回值,比如 prompt()parseInt()等等,只是这些函数是 JavaScript 内置的,可以直接调用

调用方式

function getSum(x, y) {
	return x + y;
}
let num = getSum(10, 20);
document.write(num);

1.4 作用域

通常来说一段程序的代码中用到的名字不总是有效的,而限定这个名字的可用性的区域就是作用域,它提高了程序逻辑的局部性,减少了起名冲突。

这里有一个坑,就是函数内部变量没有声明,直接进行赋值,会当作全局变量来看,但是强烈不推荐这样写

1.5 匿名函数

1.5.1 函数表达式

将匿名函数直接赋值给一个变量,并且通过变量名来进行调用,将这个称为函数表达式:

let fn = function() {
	函数体;
}
1.5.2 立即执行函数
(function({console.log(11)}))();

对象

1. 对象

1.1 什么是对象?

  • 对象是 JavaScript 中的一个数据类型
  • 可以理解为一个无序的数据集合,注意数组是有序的数据集合
  • 用来描述某个事物的信息(属性和行为)
    • 静态特征
    • 动态行为

1.2 对象属性使用

// 对象声明语法
let 对象名 = {
	属性名: 属性值,
	方法名: 函数,
};
let 对象名 = new Object();

对象属性举例:

let person = {
	uname: 'Tom',
	age: 18,
	gender: '男',
}

对于数据结构还是无非增删改查

// 查
let person = {
	name: 'Tom',
	age: 18,
	gender: '男',
}
console.log(person.name);
// 改
person.gender = '女';
// 增
person.address = '山东';
// 删
delete person.gender;

对于查还有另外一种写法,比如我们有一个属性命名为 user-name 这时候在使用 对象.属性的方式就无法正常的调用了,这时候可以采取以下的方式

let person = {
	'user-name': 'Tom',
	age: 18,
	gender: '男'
}
console.log(person['user-name'])

这种方式也可以作用于正常的属性:

console.log(person['age']);

遍历对象属性:

let obj = {
  uname: 'Tom',
  gender: '男',
  age: 18
}
for(let k in obj) {
  document.write(k + ':' + obj[k]);
  document.write('<br>')
}

显示效果:

1.3 对象中的方法

数据的行为性的信息称为方法,一般是动词性质的,它的本质就是函数

  1. 方法是由方法名和函数两部分构成,它们之间使用 : 分隔
  2. 多个属性之间使用英文 , 分隔
  3. 方法是依附在对象中的函数
  4. 方法名可以使用 “” 或 ‘’,一般情况下省略,除非名称遇到特殊符号如空格、中横线
let person  = {
	name: 'Tom';
	sayHello: function() {
		document.write('Hello World');
	}
}
person.sayHello();

1.4 JavaScript 内置对象

是 JavaScript 内部提供的对象,包含各种属性和方法提供给开发者使用

1.4.1 内置对象 Math

这是 JavaScript 提供的一个数学对象,提供了一系列数学运算方法

JavaScript 参考手册:https://www.w3school.com.cn/jsref/index.asp

Math 对象提供的常用方法:

Web API

1. Web API 基本认知

1.1 作用和分类

作用:就是使用 JS 去操作 html 和浏览器

分类:DOM(文档对象模型)、BOM(浏览器对象模型)

2. DOM

2.1 DOM 基本介绍

文档对象模型,是用来呈现以及于任意 HTM 或 XML 文档交互的 API,可以操控网页内容

DOM 树:将 HTML 文档以树状结构直观的表现出来,我们称之为文档树或 DOM 树,可以直观的体现标签于标签的关系

DOM 对象:浏览器根据 HTML 标签生成的一个 JS 对象,这个就是 DOM 对象

  • 对象就有属性和方法
  • DOM 的核心思想就是把网页内容当作对象来处理
  • document 也是一个对象,所以我们前面能够通过 document.write() 方法来向网页中书写内容

2.2 获取 DOM 元素

2.2.1 通过 CSS 选择器来获取
  1. 选择匹配的第一个元素

    语法:document.querySelector('css 选择器')
    参数:包含一个或多个有效的 CSS 选择器 字符串
    返回值:CSS 选择器匹配的第一个元素,一个 HtmlElement 对象

  2. 选择匹配的多个元素

    语法:document.querySelectorAll('css 选择器')

    参数与上面相同,但是返回值是 CSS 选择器匹配的 Node List 对象集合

    哪怕是只有一个元素获取过来的也是一个伪数组,需要通过 for 循环来获取对象

2.2.2 其他获取方式(了解)

3. 操作元素内容

3.1 innerText

修改标签内容的一种方式,将文本内容更新到任意标签的位置,但是里面的标签内容不会被解析,是纯文本

3.2 innerHtml

和上面唯一的区别是会解析 HTML 标签

4. 操作元素属性

4.1 操作元素常用属性

可以通过 JS 来修改和设置标签元素的属性,比如通过 src 更换图片

最常见的属性比如 href title src 等

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <img src="./img/ai01.png" alt="">
  <script>
    function getRandom(N, M) {
      return Math.floor(Math.random()*(M - N + 1)) + N;
    }
    const random = getRandom(1, 6);
    const img = document.querySelector('img');
    img.src = `./img/ai0${random}.png`
  </script>
</body>
</html>

4.2 操控元素的样式属性

4.21. 通过 style 属性来修改
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    body {
      background-image: url(./img/ai01.png);
    }
  </style>
</head>
<body>
  <script>
      let body = document.querySelector('body');
      function getRandom(N, M) {
        return Math.floor(Math.random()*(M - N + 1)) + N;
      }
    const random = getRandom(1, 6);
    body.style.backgroundImage = `url(./img/ai0${random}.png)`
  </script>
</body>
</html>
4.2.2 通过操作类型操作 CSS
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    div {
      width: 300px;
      height: 300px;
      background-color: red;
    }
    .box {
      width: 200px;
      height: 200px;
    }
  </style>
</head>
<body>
  <div></div>
</body>
<script>
  let div = document.querySelector('div');
  div.className = 'box';
</script>
</html>
4.2.3 通过 classList 来操控
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=`, initial-scale=1.0">
  <title>Document</title>
  <style>
    .box {
      width: 200px;
      height: 200px;
      background-color: red;
    }
    .active {
      width: 300px;
      height: 300px;
      background-color: yellow;
    }
  </style>
</head>
<body>
  <div class="box"></div>
  <script>
    let box = document.querySelector('.box');
    // 添加类
    box.classList.add('active');
    // 移除类
    box.classList.remove('active');
    // 切换类:如果有类就切换、没有类就删除
    box.classList.toggle('active');
  </script>
</body>
</html>

4.3 操控表单元素属性

表单很多情况,也需要修改属性,比如输入密码的时候点击眼睛图标可以看到密码,本质上是把表单属性变为文本框

正常的有属性有取值的,跟其他的标签属性的设置没有任何区别,其他的按照下面的来

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.4 自定义属性

标准属性:标签自带的属性,可以直接使用

自定义属性:H5 之后的新方式,可以为标签添加自定义的属性

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div data-id="1", data-spm="不知道"></div>
  <div data-id="2"></div>
  <div data-id="3"></div>
  <script>
    let div = document.querySelector('div');
    console.log(div.dataset.id);
    console.log(div.dataset.spm);
  </script>
</body>
</html>

5. 定时器 - 间歇函数

5.1 基本介绍

  • 网页中使用到每个一段时间需要自动执行一段代码,不需要我们手动触发
  • 例如网页中的倒计时,这些效果需要间歇函数实现

5.2 间歇函数的使用

  1. 开启定时器

    setInterval(函数, 间隔时间);
    
  2. 关闭定时器

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <script>
        // setInterval(function(){
        //   document.write('1');
        // }, 100);
        function fn() {
          console.log('1');
        }
        let no = setInterval(fn, 1000);
        console.log(no);
        // 后续要添加条件
        clearInterval(no);
      </script>
    </body>
    </html>
    

5.3 阅读注册协议综合案例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <textarea name="" id="" cols="30" rows="10">
    用户注册协议:
      欢迎你称为京东用户!在您注册的过程中,您需要完成我们的注册流程并通过
      【请您注意】如果您不同意以下协议的任何条款规定,请您停止注册。
  </textarea>
  <br>
  <button class="btn" disabled>我已经阅读用户协议(5)</button>
</body>
<script>
  let btn = document.querySelector('.btn');
  let i = 5;
  let n = setInterval(function() {
    i--;
    btn.innerHTML = `我已经阅读用户协议(${i})`;
    if (i == 0) {
      clearInterval(n);
      btn.disabled = false;
      btn.innerHTML = '我已经阅读用户协议';
    }
  }, 1000);
</script>
</html>

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

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

相关文章

计算机中的数据运算

放上计算机中的数据的表示方法 计算机中的数据表示方法-CSDN博客 补码的运算&#xff1a; 连同符号位一起相加&#xff0c;符号位产生的进位自然丢掉&#xff0c;这里要特别注意机器数的位数&#xff0c;计算数的位数决定了可以存放的数据的大小&#xff0c;加减产生的数据的…

【LeetCode:2807. 在链表中插入最大公约数 | 链表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

构建异地企业网络互联的高效路径

在当今数字化浪潮中&#xff0c;企业的业务拓展已不再受限于地理位置。为了在全球竞争中立于不败之地&#xff0c;越来越多的企业选择在不同城市设立分支机构&#xff0c;构建异地网络&#xff0c;实现高效的协同办公。本文将深入探讨在北上广等经济发达地区&#xff0c;如何通…

Nginx 访问控制

目录 1. 传输层禁止访问 2. 应用层访问控制 访问控制有两个方式&#xff0c;一种是在OSI模型的四层传输层&#xff0c;一种是在第七层应用层。 主机防火墙就是在四层传输控制&#xff0c;nginx就是在七层应用控制。 1. 传输层禁止访问 在进行访问控制前&#xff0c;先开启防…

力扣2807.在链表中插入最大公约数

思路&#xff1a;遍历链表&#xff0c;对于每一个结点求出它与下一个结点的最大公约数并插入到俩个结点之间 代码&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}…

详细平稳解

1.详细平衡 定义&#xff1a;一个在高斯白噪声激励下的动力学系统在状态空间中如果用如下运动方程描述&#xff1a; d d t X j \frac{d}{dt}\mathbf{X}_{j} dtd​Xj​ f j ( X ) f_{j}(\mathbf{X}) fj​(X) ∑ l 1 m g j l ( X ) W l ( t ) \sum_{l1}^{m}g_{jl}(\mathbf{X})W…

大语言模型的幻觉:解析、成因及解决方法

目录 前言1 大语言模型的幻觉现象解析1.1 输入冲突幻觉&#xff08;Input-conflicting&#xff09;1.2 上下文冲突幻觉&#xff08;Context-conflicting&#xff09;1.3 事实冲突幻觉&#xff08;Fact-conflicting&#xff09; 2 幻觉产生的原因2.1 数据偏差和模型缺陷2.2 知识…

1-02VS的安装与测试

一、概述 对于一名C语言程序员而言&#xff0c;进行C语言程序的开发一般需要一个文本编辑器加上一个编译器就足够了。但为了方便起见&#xff0c;我们选择使用集成开发环境——Visual Studio&#xff08;简称VS&#xff09;。安装Visual Studio 下面讲一下如何安装VS&#xff0…

计算机网络(8):因特网上的音频/视频服务

概述 计算机网络最初是为传送数据设计的。因特网 IP 层提供的 “尽最大努力交付” 服务以及每一个分组独立交付的策略&#xff0c;对传送数据信息十分合适。因特网使用的 TCP 协议可以很好地解决P层不能提供可靠交付这一问题。 音频/视频常称为多媒体信息 多媒体信息&#xff…

Linux第17步_安装SSH服务

secure shell protocol简称SSH。 目的&#xff1a;在进行数据传输之前&#xff0c;SSH先对联级数据包通过加密技术进行加密处理&#xff0c;然后再进行数据传输&#xff0c;确保数据传输安全。 1、在安装前&#xff0c;要检查虚拟机可以上网&#xff0c;否则可能会导致安装失…

常见Mysql数据库操作语句

-- DDL创建数据库结构 -- 查询所有数据库 show databases ; -- 修改数据库字符集 alter database db02 charset utf8mb4; -- 创建字符编码为utf——8的数据库 create database db05 DEFAULT CHARACTER SET utf8;-- 创建表格 create table tb_user(id int auto_increment primar…

【docker】数据卷和数据卷容器

目录 一、如何管理docker容器中的数据&#xff1f; 二、数据卷 1、数据卷原理 2、数据卷的作用 3、数据卷案例 三、数据卷容器 1、数据卷容器作用 2、数据卷容器案例 四、容器互连&#xff08;centos镜像&#xff09; 一、如何管理docker容器中的数据&#xff1f; 二、…

Apple M2 Pro芯片 + docker-compose up + mysql、elasticsearch pull失败问题的解法

背景 &#xff08;1&#xff09;从github上git clone了一个基于Spring Boot的Java项目&#xff0c;查看readme&#xff0c;发现要在项目的根目录下&#xff0c;执行“docker-compose up”。&#xff08;2&#xff09;执行“docker-compose up”的前提是&#xff0c;在macos上要…

编译原理笔记(三)

一、词法分析程序的设计 1、词法分析程序的输出 在识别出下一个单词同时验证其词法正确性之后&#xff0c;词法分析程序将结果以单词符号的形式发送至语法分析程序以回应其请求。 单词符号一般分下列5类&#xff1a; 关键字&#xff1a;如&#xff1a;begin、end、if、whil…

Spring Boot学习随笔- 集成MyBatis-Plus(二)条件查询QueryWrapper、聚合函数的使用、Lambda条件查询

学习视频&#xff1a;【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备! 查询方法详解 普通查询 // 根据主键id去查询单个结果的。 Test public void selectById() {User user userMapper.selectById(1739970502337392641L);System.out.print…

opencv007 图像运算——加减乘除

今天学习图像处理的基础——加减乘除&#xff0c;总体来说比较好理解&#xff0c;不过生成的图片千奇百怪哈哈哈哈 opencv中图像的运算本质是矩阵的运算 加法 做加法之前要求两张图片形状&#xff0c;长宽&#xff0c;通道数完全一致 cv2.add(img1, img2) add的规则是两个图…

MySQL之视图内连接、外连接、子查询

一、视图 1.1 含义 虚拟表&#xff0c;和普通表一样使用 视图&#xff08;view&#xff09;是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。但是&#xff0c;数据库中只存放了视图的定义&#xff0c;而并没有存放…

Visio导出eps格式图片

Visio导出eps格式图片 文章目录 Visio导出eps格式图片1. Visio中使用Adobe Acrobat虚拟打印2. Adobe Acrobat中裁剪并另存为eps格式 如何使用Visio绘图然后导出.eps格式的图片呢&#xff1f;这个过程需要用到Adobe Acrobat&#xff0c;使用Adobe Acrobat的虚拟打印功能&#xf…

JVM知识总结(简单且高效)

1. JVM内存与本地内存 JVM内存&#xff1a;受虚拟机内存大小的参数控制&#xff0c;当大小超过参数设置的大小时会报OOM。本地内存&#xff1a;本地内存不受虚拟机内存参数的限制&#xff0c;只受物理内存容量的限制&#xff1b;虽然不受参数的限制&#xff0c;如果所占内存超过…

【Java集合篇】负载因子和容量的关系

负载因子和容量有什么关系 ✔️典型解析✔️loadfactor为啥默认是0.75F&#xff0c;不是1呢?✔️为什么HashMap的默认负载因子设置成0.75✔️0.75的数学依据是什么✔️0.75的必然因素 ✔️HashMap的初始值设为多少合适? ✔️典型解析 HashMap 中有几个属性&#xff0c;如 cap…