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

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>

相关文章:

JavaScript 基础通关

快速熟悉 JavaScript 的基础语法&#xff0c;比较高级的比如事件放在后面的笔记中。 JavaScript 1. JavaScript 介绍 1.1 JavaScript 基本介绍 JavaScript 是一门运行在客户端&#xff08;浏览器&#xff09;的编程语言&#xff0c;实现人机交互的效果。实现网页特效、表单验…...

目标检测损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU原理及Pytorch实现

前言 损失函数是用来评价模型的预测值和真实值一致程度&#xff0c;损失函数越小&#xff0c;通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数主要是用在模型的训练阶段&#xff0c;如果我们想让预测值无限接近于真实值&#xff0c;就需要将损失值降到最低…...

今年努力输出的嵌入式Linux视频

今年努力了一波&#xff0c;几个月周六日无休&#xff0c;自己在嵌入式linux工作有些年头&#xff0c;结合自己也是一直和SLAM工程师对接&#xff0c;所以输出了一波面向SLAM算法工程师Linux课程&#xff0c;当然嵌入式入门的同学也可以学习。下面是合作的官方前面发的宣传文章…...

python非常好用的文件系统监控库

如果你不想使用Watchdog库&#xff0c;而是自己编写代码来监视文件系统的变化&#xff0c;可以使用Python的内置模块os和time来实现。 下面是一个简单的示例代码&#xff0c;演示如何使用os和time模块来监视文件系统中文件的变化&#xff1a; pythonimport osimport timedef m…...

基于SpringBoot的电影购票系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的电影购票系统,java项目…...

Spring系列:Spring如何解决循环依赖

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…...

netty源码:(40)ReplayingDecoder

ReplayingDecoder是ByteToMessageDecoder的子类&#xff0c;我们继承这个类时&#xff0c;也要实现decode方法&#xff0c;示例如下&#xff1a; package cn.edu.tju;import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handle…...

Apache Doris (五十五): Doris Join类型 - Colocation Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Colocation Join原理...

计算机组成原理复习7

内存管理 文章目录 内存管理存储器概述存储器的分类按在计算机中的作用&#xff08;层次&#xff09;分类按存储介质分类按存取方式分类按信息的可保存性分类 存储器的性能指标存储容量单位成本存储速度&#xff1a;数据传输率数据的宽度/存储周期 存储器的层次化结构多级存储系…...

python使用openpyxl操作excel

文章目录 前提读取已有excel创建一个excel工作簿对象创建excel工作簿中的工作表获取工作表第一种&#xff1a;.active 方法第二种&#xff1a;通过工作表名获取指定工作表​​​​​​第三种&#xff1a;.get_sheet_name() 修改工作表的名称数据操作写入数据按单元格写入通过指…...

使用keepalived时虚拟IP漂移注意事项

什么是Keepalived服务 keepalived是一个开源的软件项目&#xff0c;用于实现高可用性&#xff08;HA&#xff09;的网络服务器负载均衡和故障转移。它允许将多台服务器组合在一起&#xff0c;形成一个虚拟服务器集群&#xff0c;实现负载均衡和故障转移。 keepalived的核心功…...

32阵元 MVDR和DREC DOA估计波束方向图对比

32阵元 MVDR和DREC DOA估计波束方向图对比 一、原理 MVDR原理&#xff1a;https://zhuanlan.zhihu.com/p/457528114 DREC原理&#xff08;无失真响应特征干扰相消器&#xff09;&#xff1a;http://radarst.ijournal.cn/html/2019/3/201903018.html 主要参数&#xff1a; 阵…...

OpenCV-11颜色通道的分离与合并

本次我们使用两个比较重要的API split&#xff08;mat&#xff09;将图像的通道进行分割。 merge&#xff08;(ch1&#xff0c;ch2&#xff0c;ch3)&#xff09;将多个通道进行融合。 示例代码如下&#xff1a; import cv2 import numpy as npimg np.zeros((480, 640, 3),…...

从0到1入门C++编程——01 C++基础知识

文章目录 一、工具安装二、新建项目三、设置字体、注释、行号四、C基础知识1.数据类型2.输入输出3.运算符4.选择、循环结构5.跳转语句6.数组7.函数8.指针9.结构体 一、工具安装 学习C使用到的工具是Visual Studio&#xff0c;Visual Studio 2010旗舰版下载链接&#xff1a;点此…...

C#编程-编写和执行C#程序2

C#编程-编写和执行C#程序 问题陈述 Dvid所在的团队正在为网球比赛开发自动排名软件。他负责创建一个程序来接受网球选手的以下详细信息并将其显示在屏幕上: 1.姓名 2.排名 您需要帮助David创建该程序。 要创建所需的程序,David需要执行以下步骤: 1.打开“记事本”。 2.在“…...

Day02-ES6

一.proxy代理 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head>…...

2023年12月记录内容管理

文章目录 前言1.[vue构建项目](https://mp.csdn.net/mp_blog/creation/editor/134829688)2. [Nodejs后端express框架](https://mp.csdn.net/mp_blog/creation/editor/134841711)3. [前端知识点](https://mp.csdn.net/mp_blog/creation/editor/132810879)4.[前端知识点-vue篇&am…...

【测试基础】构造测试数据之 MySQL 篇

构造测试数据之 MySQL 篇 作为一名测试工程师&#xff0c;我们经常会构造测试数据进行一些功能验证。为了暴露更多的问题&#xff0c;在测试数据的构造上&#xff0c;我们应该尽可能的构造不同类型字段的数据&#xff0c;且一张表的字段最好不低于 10 10 10 个。 对于 MySQL …...

基于单片机的语音识别自动避障小车(论文+源码)

1.系统设计 此次基于单片机的语音识别自动避障小车&#xff0c;以STC89C52单片机作为系统的主控制器&#xff0c;利用超声波模块来实现小车与障碍物距离的测量并通过LCD液晶显示&#xff0c;当距离低于阈值时会通过WT588语音模块进行报警提示&#xff0c;并且小车会后退来躲避…...

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项样题卷①

2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项&#xff08;高职组&#xff09; 样题&#xff08;第1套&#xff09; 目录 2023年“中银杯”四川省职业院校技能大赛“云计算应用”赛项&#xff08;高职组&#xff09; 样题&#xff08;第1套&#xff09; 模块一…...

【信息安全原理】——入侵检测与网络欺骗(学习笔记)

&#x1f4d6; 前言&#xff1a;在网络安全防护领域&#xff0c;防火墙是保护网络安全的一种最常用的设备。网络管理员希望通过在网络边界合理使用防火墙&#xff0c;屏蔽源于外网的各类网络攻击。但是&#xff0c;防火墙由于自身的种种限制&#xff0c;并不能阻止所有攻击行为…...

JVM GC 算法原理概述

对于JVM的垃圾收集&#xff08;GC&#xff09;&#xff0c;这是一个作为Java开发者必须了解的内容&#xff0c;那么&#xff0c;我们需要去了解哪些内容呢&#xff0c;其实&#xff0c;GC主要是解决下面的三个问题&#xff1a; 哪些内存需要回收&#xff1f; 什么时候回收&…...

【数值分析】LU分解解Ax=b,matlab自己编程实现

LU分解&#xff08;直接三角分解&#xff0c;Doolittle分解&#xff09; A x b , A L U Axb \,\,,\,\, ALU Axb,ALU { L y b U x y \begin{cases} Lyb \\ Uxy \end{cases} {LybUxy​ 矩阵 L {L} L 的对角元素为 1 {1} 1 &#xff0c;矩阵 U {U} U 的第一行和 A {A} A …...

华为HCIE-Datacom课程介绍

厦门微思网络HCIE-Datacom课程介绍 一、认证简介 HCIE-Datacom&#xff08;Huawei Certified ICT Expert-Datacom&#xff09;认证是华为认证体系中的顶级认证&#xff0c;HCIE-Datacom认证定位具备坚实的企业网络跨场景融合解决方案理论知识&#xff0c;能够使用华为数通产品…...

QT(C++)-QTableWight添加行和删除空行

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、前言2、QTableWidget的添加行3、删除行 1、前言 最近要用QT开发项目&#xff0c;对QT不是很熟&#xff0c;就根据网上的查到的知识和自己的摸索&#xff0c;将一…...

软件测试/测试开发丨Python 面向对象编程思想

面向对象是什么 Python 是一门面向对象的语言面向对象编程&#xff08;OOP&#xff09;&#xff1a;Object Oriented Programming 所谓的面向对象&#xff0c;就是在编程的时候尽可能的去模拟真实的现实世界&#xff0c;按照现实世界中的逻辑去处理问题&#xff0c;分析问题中…...

一次降低进程IO延迟的性能优化实践——基于block层bfq调度器

如果有个进程正频繁的读写文件&#xff0c;此时你vim查看一个新文件&#xff0c;将会出现明显卡顿。即便你vim查看的文件只有几十M&#xff0c;也可能会出现卡顿。相对的&#xff0c;线上经常遇到IO敏感进程偶发IO超时问题。这些进程一次读写的文件数据量很少&#xff0c;正常几…...

C语言易错知识点十(指针(the final))

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载&#xff0c;请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主&#xff0c;代码兴国&#xff01;❤❤❤ 许久不见&#xff0c;甚是想念&#xff0c;真的是时间时间&#xff0c;你慢些吧&#xff0c;不能再让头发变秃…...

React 18 新增的钩子函数

React 18 引入了一些新的钩子函数&#xff0c;用于处理一些常见的场景和问题。以下是 React 18 中引入的一些新钩子函数以及它们的代码示例和使用场景&#xff1a; useTransition&#xff1a; 代码示例&#xff1a;import { useTransition } from react;function MyComponent()…...

安装与部署Hadoop

一、前置安装准备1、机器2、java3、创建hadoop用户 二、安装Hadoop三、环境配置1、workers2、hadoop-env.sh3、core-site.xml4、hdfs-site.xml5、linux中Hadoop环境变量 四、启动hadoop五、验证 一、前置安装准备 1、机器 主机名ip服务node1192.168.233.100NameNode、DataNod…...

MySQL 8.0 InnoDB Tablespaces之General Tablespaces(通用表空间/一般表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之General Tablespaces&#xff08;通用表空间/一般表空间&#xff09;General tablespaces&#xff08;通用表空间/一般表空间&#xff09;通用表空间的功能通用表空间的限制 创建通用表空间&#xff08;一般表空间&#xff09;创建语法…...

循环生成对抗网络(CycleGAN)

一、说明 循环生成对抗网络&#xff08;CycleGAN&#xff09;是一种训练深度卷积神经网络以执行图像到图像翻译任务的方法。网络使用不成对的数据集学习输入和输出图像之间的映射。 二、基本介绍 CycleGAN 是图像到图像的翻译模型&#xff0c;就像Pix2Pix一样。Pix2Pix模型面临…...

数组--53.最大子数组和/medium

53.最大子数组和 1、题目2、题目分析3、解题步骤4、复杂度最优解代码示例5、抽象与扩展 1、题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连…...

centos 编译安装 python 和 openssl

安装环境&#xff1a; centos 7.9 &#xff1a; python 3.10.5 和 openssl 3.0.12 centos 6.10 &#xff1a; python 3.10.5 和 openssl 1.1.1 两个环境都能安装成功&#xff0c;可以正常使用。 安装 openssl 下载地址 下载后解压&#xff0c;进入到解压目录 执行&#xf…...

【nodejs】前后端身份认证

前后端身份认证 一、web开发模式 服务器渲染&#xff0c;前后端分离。 不同开发模式下的身份认证&#xff1a; 服务端渲染推荐使用Session认证机制前后端分离推荐使用JWT认证机制 二、session认证机制 1.HTTP协议的无状态性 了解HTTP协议的无状态性是进一步学习Session认…...

数据结构【线性表篇】(三)

数据结构【线性表篇】(三&#xff09; 文章目录 数据结构【线性表篇】(三&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录一、双链表二、循环链表三、静态链表 结语 前言 为什么突然想学算法了&#xff1f; > 用较为“官方…...

Python装饰器的专业解释

装饰器&#xff0c;其实是用到了闭包的原理来进行操作的。 单个装饰器&#xff1a; 以下是一个简单的例子&#xff1a; def outer(func):print("OUTER enter ...")def wrapper(*args, **kwargs):print("调用之前......")result func(*args, **kwargs)p…...

vue3框架笔记

Vue Vue 是一个渐进式的前端开发框架&#xff0c;很容易上手。Vue 目前的版本是 3.x&#xff0c;但是公司中也有很多使用的是 Vue2。Vue3 的 API 可以向下兼容 2&#xff0c;Vue3 中新增了很多新的写法。我们课程主要以 Vue3 为主 官网 我们学习 Vue 需要转变思想&#xff0…...

pytest --collectonly 收集测试案例

pytest --collectonly 是一条命令行指令&#xff0c;用于在运行 pytest 测试时仅收集测试项而不执行它们。它会显示出所有可用的测试项列表&#xff0c;包括测试模块、测试类和测试函数&#xff0c;但不会执行任何实际的测试代码。 这个命令对于查看项目中的测试结构和确保所有…...

dev express 15.2图表绘制性能问题(dotnet绘图表)

dev express 15.2 绘制曲线 前端代码 <dxc:ChartControl Grid.Row"1"><dxc:XYDiagram2D EnableAxisXNavigation"True"><dxc:LineSeries2D x:Name"series" CrosshairLabelPattern"{}{A} : {V:F2}"/></dxc:XYDi…...

WorkPlus:领先的IM即时通讯软件,打造高效沟通协作新时代

在当今快节奏的商业环境中&#xff0c;高效沟通和协作是企业成功的关键。而IM即时通讯软件作为实现高效沟通的利器&#xff0c;成为了现代企业不可或缺的一部分。作为一款领先的IM即时通讯软件&#xff0c;WorkPlus以其卓越的性能和独特的功能&#xff0c;助力企业打造高效沟通…...

学习SpringCloud微服务

SpringCloud 微服务单体框架微服务框架SpringCloud微服务拆分微服务差分原则拆分商品服务拆分购物车服务拆分用户服务拆分交易服务拆分支付服务服务调用RestTemplate远程调用 微服务拆分总结 服务治理注册中心Nacos注册中心服务注册服务发现 OpenFeign实现远程调用快速入门引入…...

WPF 显示气泡提示框

气泡提示框应用举例 有时候在我们开发的软件经常会遇到需要提示用户的地方&#xff0c;为了让用户更直观&#xff0c;快速了解提示信息&#xff0c;使用简洁、好看又方便的气泡提示框显得更加方便&#xff0c;更具人性化。如下面例子&#xff1a;(当用户未输入账号时&#xff0…...

L1-062:幸运彩票

题目描述 彩票的号码有 6 位数字&#xff0c;若一张彩票的前 3 位上的数之和等于后 3 位上的数之和&#xff0c;则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。 输入格式&#xff1a; 输入在第一行中给出一个正整数 N&#xff08;≤ 100&#xff09;。随后 N 行…...

python+vue高校体育器材管理信息系统5us4g

优秀的高校体育馆场地预订系统能够更有效管理体育馆场地预订业务规范&#xff0c;帮助管理者更加有效管理场地的使用&#xff0c;有效提高场地使用效率&#xff0c;可以帮助提高克服人工管理带来的错误等不利因素&#xff0c;所以一个优秀的高校体育馆场地预订系统能够带来很大…...

10 款顶级的免费U盘数据恢复软件(2024 年 更新)

你曾经遇到过U盘无法访问的情况吗&#xff1f;现在我们教你如何恢复数据。 在信息时代&#xff0c;数据丢失往往会造成巨大的困扰。而USB闪存驱动器作为我们常用的数据存储设备&#xff0c;其重要性不言而喻。但是&#xff0c;U盘也可能会出现各种问题&#xff0c;如无法访问、…...

C# json 转匿名对象及C#关键字的处理

调用第三方接口&#xff0c;返回的json字符串&#xff0c;为了方便使用转为C#匿名对象&#xff1a; /// <summary>/// json转为匿名对象/// </summary>/// <typeparam name"T"></typeparam>/// <param name"json"></para…...

关于彻底通过外网,自动批量下载Python的pip依赖包后到企业内网重安装的步骤-比单个包的要方便多了。

关于彻底通过外网&#xff0c;自动批量下载Python包后到企业内网重安装的步骤 前言&#xff1a; 哎&#xff0c;在本人的前面的博客中&#xff0c;分享的方法可能是不通用的。因为在一次实践中发现它不能总是通用且麻烦。所以本次记录分享一个更方便快速的方式。 上期前言&am…...

Oracle T4-4小型机上配置Ldom部署rac

Ldom控制域配置 (两台主机一样&#xff0c;以hydb1为例) roothydb1 # ldm add-vds primary-vds0 primary roothydb1 # ldm add-vcc port-range5000-5100 primary-vcc0 primary roothydb1 # ldm add-vsw net-devigb0 primary-vsw0 primary roothydb1 # ldm add-vsw net-devixgbe…...

【2023Hadoop大数据技术应用期末复习】填空题题型整理

大数据的 4V 特征包含&#xff08;&#xff09;&#xff08;&#xff09;&#xff08;&#xff09;&#xff08;&#xff09; 答案&#xff1a;大量、多样、高速、价值Hadoop 三大组件包含&#xff08;&#xff09;&#xff08;&#xff09;&#xff08;&#xff09; 答案&…...