前端编程艺术(3)---JavaScript
目录
1.JavaScript
1.输出
2.变量和数据类型
3.运算符
4.数组
5.函数
6.面向对象
7.ES6面向对象
2.BOM
1.document对象
3.DOM
4.JSON
1.JavaScript
JavaScript是一种脚本编程语言,通常用于为网页增加交互性和动态效果。它是一种高级语言,可以在客户端(即网页浏览器)和服务器端运行。JavaScript的设计目标是让网页和用户能够交互,动态地改变内容、样式和行为。
JavaScript的语法和结构与其他编程语言,如C语言和Java类似,易于学习和理解。它不需要编译,可以直接在网页中嵌入使用,因此被广泛应用于网页开发。
JavaScript可以用来操作网页中的HTML元素、处理用户输入、发送网络请求、验证表单、创建动画效果等。它还支持事件处理,可以对按钮点击、鼠标移动、键盘输入等用户操作进行响应。
JavaScript的特点包括:
- 强大的交互性:通过JavaScript,可以在用户与网页之间实现丰富的交互体验。
- 跨平台性:JavaScript可以在各种操作系统和浏览器中运行,无需额外配置。
- 轻量级:JavaScript的代码通常很小,加载速度快,不会给网页带来过多的负担。
- 丰富的库和框架:JavaScript拥有许多开源的库和框架,可以帮助开发人员更高效地开发和维护网页。
1.输出
JavaScript 可以通过不同的方式来输出数据:
- 使用 window.alert() 弹出警告框。
- 使用 document.write() 方法将内容写到 HTML 文档中。
- 使用 innerHTML 写入到 HTML 元素。
- 使用 console.log() 写入到浏览器的控制台。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>// 在 head 部分添加动态内容document.write("标题");</script>
</head>
<body><h1 id="h1">JavaScript</h1><script>// 在 body 部分添加动态内容document.write("<h1>这是一个标题</h1>");document.write("<p>这是一个段落</p>");document.getElementById("h1").innerHTML="前端编程艺术"window.alert(666);console.log(666)</script><script src="1.js"></script>
</body>
</html>
2.变量和数据类型
在JavaScript中,变量用于存储数据值。在声明变量之前,应先使用关键字var、let或const来指定变量的作用域和特性。
JavaScript中的数据类型包括:
- 基本数据类型:
- 字符串(String):用于表示文本数据,可以使用单引号或双引号包裹起来。
- 数字(Number):用于表示数值,包括整数和浮点数。
- 布尔值(Boolean):表示真(true)或假(false)。
- 空值(Null):表示一个空值或无效值。
- 未定义(Undefined):表示一个未被赋值的变量。
- 引用数据类型:
- 对象(Object):表示抽象的数据集合,可以包含多个键值对。
- 数组(Array):表示一组数据的集合,可以包含多个项,每个项可以是任意数据类型。
- 函数(Function):是一段可重复执行的代码块,可以通过函数名来调用。
变量的赋值可以通过等号(=)来实现,例如:
var name = 'John';
let age = 25;
const PI = 3.14;
在JavaScript中,变量的数据类型可以通过typeof操作符来检查。
console.log(typeof name); // 输出 "string"
console.log(typeof age); // 输出 "number"
console.log(typeof PI); // 输出 "number"
JavaScript中的变量和数据类型是动态的,意味着同一个变量可以在不同的时候保存不同的数据类型。例如:
var x = 5;
console.log(typeof x); // 输出 "number"x = 'Hello';
console.log(typeof x); // 输出 "string"
3.运算符
在JavaScript中,运算符用于执行各种操作,例如数学计算、逻辑判断和字符串连接等。下面是一些常见的JavaScript运算符:
算术运算符:
- 加法(+):将两个值相加。
- 减法(-):将一个值减去另一个值。
- 乘法(*):将两个值相乘。
- 除法(/):将一个值除以另一个值。
- 取余(%):返回除法的余数。
- 自增(++):将变量的值增加1。
- 自减(--):将变量的值减少1。
赋值运算符:
- 简单赋值(=):将值赋给变量。
- 加等于(+=):将右侧的值加到变量上。
- 减等于(-=):将右侧的值减去变量。
- 乘等于(*=):将右侧的值乘以变量。
- 除等于(/=):将变量除以右侧的值。
- 取余等于(%=):将变量取余右侧的值。
比较运算符:
- 等于(==):检查两个值是否相等。
- 不等于(!=):检查两个值是否不相等。
- 全等(===):检查两个值是否严格相等。
- 不全等(!==):检查两个值是否不严格相等。
- 大于(>):检查左侧的值是否大于右侧的值。
- 大于等于(>=):检查左侧的值是否大于或等于右侧的值。
- 小于(<):检查左侧的值是否小于右侧的值。
- 小于等于(<=):检查左侧的值是否小于或等于右侧的值。
逻辑运算符:
- 与(&&):如果操作数都为真,则返回真。
- 或(||):如果其中一个操作数为真,则返回真。
- 非(!):用于对操作数的逻辑非运算。
字符串运算符:
- 加号(+):用于连接两个字符串。
- 赋值运算符加号(+=):将右侧的字符串添加到左侧的字符串。
4.数组
在JavaScript中,数组是一种用于存储多个值的有序集合。数组可以包含任意类型的数据,包括数字、字符串、布尔值和其他数组等。下面是一些关于JavaScript数组的重要特性和操作:
创建数组: 可以使用数组字面量([ ])或Array构造函数来创建数组。例如:
let arr1 = [1, 2, 3]; // 使用数组字面量创建数组
let arr2 = new Array(4, 5, 6); // 使用Array构造函数创建数组
访问数组元素: 可以使用索引来访问数组元素,数组的索引从0开始。例如:
let arr = [1, 2, 3];
console.log(arr[0]); // 输出1
console.log(arr[1]); // 输出2
console.log(arr[2]); // 输出3
修改数组元素: 可以通过索引来修改数组元素的值。例如:
let arr = [1, 2, 3];
arr[1] = 4;
console.log(arr); // 输出[1, 4, 3]
数组长度: 可以使用length属性来获取数组的长度。例如:
let arr = [1, 2, 3];
console.log(arr.length); // 输出3
数组方法: JavaScript提供了许多内置的数组方法,用于对数组进行操作。一些常用的数组方法包括:
- push():向数组末尾添加一个或多个元素。
- pop():从数组末尾移除最后一个元素。
- shift():从数组开头移除第一个元素。
- unshift():向数组开头添加一个或多个元素。
- splice():删除、替换或添加元素。
- slice():截取数组的一部分。
- concat():合并两个或多个数组。
- indexOf():返回指定元素的索引。
- sort():对数组进行排序。
- reverse():颠倒数组中元素的顺序。
- forEach():遍历数组并对每个元素执行特定的操作。
5.函数
在JavaScript中,函数是一段可重复使用的代码块,用于执行特定的任务或计算。函数有多种作用,可以接受参数,执行一些操作,并返回一个值。以下是JavaScript函数的一些重要特性和用法:
定义函数: 可以使用function关键字来定义函数。函数有一个名称和一对圆括号,括号内可以包含参数列表。函数体是一对花括号之间的代码块。例如:
function greet(name) {console.log("Hello, " + name + "!");
}
调用函数: 可以使用函数名和传递的参数来调用函数,以便执行其中的代码。例如:
greet("Alice"); // 输出 "Hello, Alice!"
greet("Bob"); // 输出 "Hello, Bob!"
函数参数: 函数可以接受零个或多个参数,这些参数可以在函数被调用时传递给它。参数可以在函数体内使用,并根据需要进行操作。例如:
function add(num1, num2) {return num1 + num2;
}let result = add(5, 3);
console.log(result); // 输出 8
函数返回值: 函数可以使用return语句来返回一个值,该值可以在函数被调用时被调用方接收并使用。如果函数没有明确指定返回值,则默认返回undefined。例如:
function multiply(num1, num2) {return num1 * num2;
}let result = multiply(4, 5);
console.log(result); // 输出 20
函数表达式: 除了使用function关键字定义函数外,还可以使用函数表达式创建匿名函数。函数表达式没有名称,并可以直接赋值给变量。例如:
let greet = function(name) {console.log("Hello, " + name + "!");
};greet("Alice"); // 输出 "Hello, Alice!"
-
高阶函数: 在JavaScript中,函数还可以作为参数传递给其他函数,或者作为其他函数的返回值。这种能力使得JavaScript支持高阶函数的概念,可以更加灵活地组织和操作代码。
-
内置函数: JavaScript还提供了许多内置的函数,用于执行各种常见的任务,比如字符串操作、数学计算、数组操作等。可以直接调用这些函数来完成特定的操作。
箭头函数是ES6(ECMAScript 2015)中引入的一种新的函数语法,它提供了一种更简洁的方式来定义函数。箭头函数通常用于匿名函数或回调函数的简写形式。
以下是箭头函数的一些重要特点:
箭头函数的语法: 箭头函数使用箭头(=>)来分隔参数和函数体。它没有function关键字,也没有自己的this、arguments和super绑定。例如:
// 传统函数
function add(a, b) {return a + b;
}// 箭头函数
let add = (a, b) => a + b;
箭头函数的简写形式: 当函数体只包含一个表达式时,可以省略花括号和return关键字。该表达式的结果将作为函数的返回值。例如:
// 传统函数
function multiply(a, b) {return a * b;
}// 箭头函数
let multiply = (a, b) => a * b;
箭头函数没有自己的this绑定: 箭头函数没有自己的this值,它从上下文中继承this值。这意味着箭头函数中的this始终指向定义它时的对象,而不是调用它的对象。例如:
function Person() {this.age = 0;setInterval(() => {this.age++; // 这里的this指向Person对象console.log(this.age);}, 1000);
}let person = new Person();
箭头函数没有arguments绑定: 与this类似,箭头函数也没有自己的arguments对象。如果需要访问函数的参数,可以使用rest参数(...)或使用展开运算符(...)来处理参数。例如:
let sum = (...args) => {let total = 0;for (let arg of args) {total += arg;}return total;
};console.log(sum(1, 2, 3)); // 输出 6
6.面向对象
JavaScript是一门面向对象的编程语言,它提供了一些内置的机制来支持面向对象编程。
JavaScript中的面向对象编程主要基于以下几个关键概念:
-
对象:对象是JavaScript中的基本构建块,它封装了数据和行为。对象可以具有属性和方法。属性表示对象的状态或数据,而方法表示对象的行为或操作。
-
类:类定义了一组共享相同属性和方法的对象的蓝图。类是一种创建对象的模板或原型。在JavaScript中,类是通过构造函数和原型来实现的。
-
构造函数:构造函数是一个特殊的函数,用于创建和初始化一个对象。构造函数通过使用
new
关键字来实例化一个对象。构造函数可以定义对象的属性和方法。 -
原型:原型是一个对象,它包含用于共享和继承属性和方法的对象。每个JavaScript对象都有一个原型,它可以是其他对象或null。当访问对象的属性或方法时,如果对象自身没有该属性或方法,JavaScript会沿着原型链向上查找。
-
继承:继承是一种机制,通过它一个对象可以从另一个对象继承属性和方法。JavaScript使用原型链来实现继承。子类可以通过将父类的原型设置为自己的原型来继承父类的属性和方法。
下面是一个简单的示例,展示了JavaScript中的面向对象编程的基本用法:
// 定义一个类
function Person(name, age) {this.name = name;this.age = age;
}// 在类的原型上添加方法
Person.prototype.sayHello = function() {console.log("Hello, my name is " + this.name);
};// 创建对象实例
let person1 = new Person("Alice", 25);
let person2 = new Person("Bob", 30);// 调用对象的方法
person1.sayHello(); // 输出:Hello, my name is Alice
person2.sayHello(); // 输出:Hello, my name is Bob
继承和多态是面向对象编程中两个重要的概念。
- 继承(Inheritance):继承是一种机制,通过它一个对象(称为子类或派生类)可以从另一个对象(称为父类或基类)继承属性和方法。继承可以使代码更加可复用和可扩展。子类可以使用父类的属性和方法,也可以根据需要重写或扩展父类的方法。
在JavaScript中,继承通过原型链来实现。子类的原型被设置为父类的实例,从而继承了父类的属性和方法。子类可以通过访问父类的原型来调用父类的方法。
下面是一个简单的继承示例:
// 定义一个父类
function Animal(name) {this.name = name;
}// 父类的方法
Animal.prototype.speak = function() {console.log(this.name + " makes a sound.");
};// 定义一个子类
function Dog(name) {Animal.call(this, name); // 调用父类的构造函数
}// 子类继承父类的原型
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;// 子类的方法
Dog.prototype.speak = function() {console.log(this.name + " barks.");
};// 创建对象实例
let animal = new Animal("Animal");
let dog = new Dog("Dog");// 调用对象的方法
animal.speak(); // 输出:Animal makes a sound.
dog.speak(); // 输出:Dog barks.
在上面的示例中,我们定义了一个父类Animal和一个子类Dog。子类Dog通过调用父类的构造函数Animal.call(this, name)来继承了父类的属性name。然后,我们使用Object.create()方法将子类的原型设置为父类的实例,从而实现了继承。子类Dog可以重写父类的方法speak(),并在这个方法内部添加额外的行为。
- 多态(Polymorphism):多态是指同一个操作可以有不同的表现形式。在面向对象编程中,多态性允许在不同的对象上执行相同的操作,产生不同的结果。多态性提高了代码的灵活性和可扩展性。
在JavaScript中,多态性通过对象的动态绑定来实现。不同的对象可以对同一个方法有不同的实现,当调用这个方法时,根据对象的类型确定要执行哪个实现。
下面是一个简单的多态示例:
// 定义一个父类
function Animal(name) {this.name = name;
}// 父类的方法
Animal.prototype.speak = function() {console.log(this.name + " makes a sound.");
};// 定义一个子类
function Dog(name) {Animal.call(this, name);
}// 子类继承父类的原型
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;// 子类重写父类的方法
Dog.prototype.speak = function() {console.log(this.name + " barks.");
};// 多态性示例
let animal = new Animal("Animal");
let dog = new Dog("Dog");function makeSound(animalObj) {animalObj.speak();
}makeSound(animal); // 输出:Animal makes a sound.
makeSound(dog); // 输出:Dog barks.
在上面的示例中,我们定义了一个函数makeSound(),它接受一个Animal对象作为参数,并调用对象的speak()方法。根据传入的对象的类型,调用方法的实现不同,产生不同的结果。当我们分别将父类Animal对象和子类Dog对象传递给makeSound()函数时,实现的方法也不同,分别输出不同的结果。
7.ES6面向对象
在ES6 (ECMAScript 2015) 中,引入了一些新的语法和特性,使得面向对象编程更加简洁和易于理解。下面是ES6中面向对象编程的一些特性:
- 类(Class):ES6引入了类的概念,可以使用class关键字定义一个类。类可以包含构造函数、属性和方法,通过实例化类可以创建对象。
class Animal {constructor(name) {this.name = name;}speak() {console.log(this.name + " makes a sound.");}
}let animal = new Animal("Animal");
animal.speak(); // 输出:Animal makes a sound.
- 继承:ES6中的类支持继承,可以使用extends关键字继承另一个类的属性和方法。子类可以调用父类的构造函数和方法,并可以根据需要重写或扩展父类的方法。
class Dog extends Animal {constructor(name) {super(name); // 调用父类的构造函数}speak() {console.log(this.name + " barks.");}
}let dog = new Dog("Dog");
dog.speak(); // 输出:Dog barks.
-
super关键字:super关键字用于调用父类的构造函数或方法。在子类的构造函数中使用super关键字调用父类的构造函数,并可以传递参数。在子类的方法中使用super关键字调用父类的方法。
-
静态方法(Static Method):ES6引入了静态方法的概念,可以使用static关键字定义一个静态方法。静态方法是属于类而不是实例的,通过类本身调用,而不是实例。
class MathUtils {static sum(a, b) {return a + b;}
}console.log(MathUtils.sum(2, 3)); // 输出:5
- Getter 和 Setter:ES6中可以使用get和set关键字定义属性的访问方法。get方法用于获取属性的值,set方法用于设置属性的值。
class Rectangle {constructor(width, height) {this._width = width;this._height = height;}get area() {return this._width * this._height;}set width(value) {this._width = value;}set height(value) {this._height = value;}
}let rectangle = new Rectangle(5, 7);
console.log(rectangle.area); // 输出:35rectangle.width = 10;
console.log(rectangle.area); // 输出:70
2.BOM
BOM(Browser Object Model)是浏览器对象模型的简称,它提供了一组用于操作浏览器窗口和页面内容的对象和方法。BOM是JavaScript与浏览器交互的接口,通过BOM可以获取和操作浏览器窗口、导航、历史记录、页面内容等。
BOM对象包括以下重要的对象:
- window对象:window对象是BOM的顶层对象,表示整个浏览器窗口。它提供了一系列方法和属性,用于操作窗口的大小、位置、打开新窗口、关闭窗口等。
// 打开新窗口
window.open('https://www.google.com', '_blank');// 关闭当前窗口
window.close();// 获取当前窗口的宽度和高度
let width = window.innerWidth;
let height = window.innerHeight;
- location对象:location对象用于获取和设置当前窗口的URL信息。它提供了一些属性和方法,例如获取URL的协议、主机名、路径名、查询参数等。
// 获取当前URL的主机名
let hostname = location.hostname;// 重定向到新的URL
location.href = 'https://www.google.com';
- history对象:history对象用于操作浏览器的历史记录。它提供了一些方法,例如前进、后退、跳转到指定页面等。
// 前进一步
history.forward();// 后退一步
history.back();// 跳转到历史记录中的某个页面
history.go(-2);
- navigator对象:navigator对象用于获取浏览器的信息。它提供了一些属性,例如浏览器的名称、版本号、操作系统等。
// 获取浏览器的名称
let browserName = navigator.appName;// 获取浏览器的用户代理字符串
let userAgent = navigator.userAgent;
1.document对象
document对象是BOM中的一部分,它表示当前HTML文档,并提供了一系列方法和属性,用于操作和操纵HTML文档的内容、结构和样式。
常见的document对象的属性和方法包括:
getElementById(): 通过元素的id属性获取对应的DOM元素。
let element = document.getElementById('myElement');
getElementsByClassName(): 通过元素的class属性获取一组DOM元素。
let elements = document.getElementsByClassName('myClass');
getElementsByTagName(): 通过元素的标签名获取一组DOM元素。
let elements = document.getElementsByTagName('div');
querySelector(): 通过CSS选择器获取匹配的第一个DOM元素。
let element = document.querySelector('.myClass');
querySelectorAll(): 通过CSS选择器获取匹配的所有DOM元素。
let elements = document.querySelectorAll('.myClass');
createElement(): 创建一个指定的HTML元素。
let element = document.createElement('div');
appendChild(): 在指定元素的子节点列表末尾添加新的子节点。
let parent = document.getElementById('parentDiv');
parent.appendChild(element);
removeChild(): 从指定元素的子节点列表中移除一个子节点。
let parent = document.getElementById('parentDiv');
parent.removeChild(element);
innerHTML: 获取或设置元素的HTML内容。
let element = document.getElementById('myElement');
let htmlContent = element.innerHTML;
element.innerHTML = '<span>New content</span>';
style: 获取或设置元素的样式属性。
let element = document.getElementById('myElement');
element.style.color = 'red';
3.DOM
DOM(Document Object Model,文档对象模型)是一种用于表示和操作HTML、XML文档的API(Application Programming Interface,应用程序编程接口)。
DOM将HTML、XML文档表示为一个由节点(Node)组成的树状结构。每个节点都代表文档中的一个部分,例如元素、属性、文本等。节点之间通过父子关系和兄弟关系相互连接,形成了文档的结构。
常见的DOM节点类型包括:
- 元素节点(Element Node):表示HTML或XML文档中的元素,例如
<div>
、<p>
等。 - 文本节点(Text Node):表示HTML或XML文档中的文本内容。
- 属性节点(Attribute Node):表示HTML或XML文档中元素的属性,例如
id
、class
等。 - 注释节点(Comment Node):表示HTML或XML文档中的注释内容。
通过DOM,我们可以使用一些API来访问和操作这些节点,例如:
- getElementById(): 通过元素的id属性获取对应的DOM元素。
- getElementsByClassName(): 通过元素的class属性获取一组DOM元素。
- getElementsByTagName(): 通过元素的标签名获取一组DOM元素。
- querySelector(): 通过CSS选择器获取匹配的第一个DOM元素。
- querySelectorAll(): 通过CSS选择器获取匹配的所有DOM元素。
- createElement(): 创建一个指定的HTML元素。
- appendChild(): 在指定元素的子节点列表末尾添加新的子节点。
- removeChild(): 从指定元素的子节点列表中移除一个子节点。
- innerHTML: 获取或设置元素的HTML内容。
- style: 获取或设置元素的样式属性。
通过这些API,我们可以动态地操作和修改HTML、XML文档的结构、内容和样式,实现动态页面的效果和交互。
4.JSON
JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。它是基于JavaScript的一个子集,可以用来表示结构化数据。
JSON使用键值对的方式来表示数据。一个JSON对象由一对花括号包围,键值对之间使用逗号分隔。键是一个字符串,值可以是字符串、数字、布尔值、数组、对象或null。
下面是一个简单的JSON对象的例子:
{"name": "John","age": 30,"isStudent": false,"hobbies": ["reading", "painting", "playing guitar"],"address": {"street": "123 Main St","city": "New York","country": "USA"}
}
在上面的例子中,键是字符串,值可以是字符串、数字、布尔值、数组、对象或null。键值对之间使用逗号分隔,对象的键和值之间使用冒号分隔。
在JavaScript中,可以使用JSON对象来处理JSON数据。JSON对象提供了两个核心方法来处理JSON数据:JSON.parse()
和JSON.stringify()
。
-
JSON.parse(): 该方法用于将JSON字符串解析为JavaScript对象。
var jsonStr = '{"name": "John", "age": 30, "isStudent": false}'; var jsonObj = JSON.parse(jsonStr);console.log(jsonObj.name); // 输出: John console.log(jsonObj.age); // 输出: 30 console.log(jsonObj.isStudent); // 输出: false
在上面的例子中,
JSON.parse()
将JSON字符串解析为JavaScript对象,并存储在jsonObj
变量中。我们可以通过访问对象的属性来获取相应的值。 -
JSON.stringify(): 该方法将JavaScript对象转换为JSON字符串。
var obj = {name: "John",age: 30,isStudent: false };var jsonString = JSON.stringify(obj);console.log(jsonString); // 输出: {"name":"John","age":30,"isStudent":false}
在上面的例子中,
JSON.stringify()
将JavaScript对象obj
转换为JSON字符串,并存储在jsonString
变量中。
相关文章:

前端编程艺术(3)---JavaScript
目录 1.JavaScript 1.输出 2.变量和数据类型 3.运算符 4.数组 5.函数 6.面向对象 7.ES6面向对象 2.BOM 1.document对象 3.DOM 4.JSON 1.JavaScript JavaScript是一种脚本编程语言,通常用于为网页增加交互性和动态效果。它是一种高级语言ÿ…...

动态规划算法题目练习——91.解码方法
1.题目解析 题目来源:91.解码方法——力扣 测试用例 2.算法原理 基础版本 1.状态表示 由于题目只要求返回第i个位置的可能情况,则只需要开辟n(ns.size())个大小的dp表即可 2.状态转移方程 题目可知第i个位置可以单独解码也可以与前一个位置组合解码&am…...
每天一个数据分析题(四百九十二)- 主成分分析与因子分析
在因子分析中,因子载荷矩阵是用来表示( )。 A. 变量和因子之间的关系 B. 样本和因子之间的关系 C. 变量和样本之间的关系 D. 因子和因子之间的关系 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案…...

Linux shell编程学习笔记86:sensors命令——硬件体温计
0 引言 同事们使用的Windows系统电脑,经常莫名其妙地装上了鲁大师,鲁大师的一项功能是显示系统cpu等硬件的温度。 在Linux系统中,sensors命令可以提供类似的功能。 1 sensors命令 的安装和配置 1.1 sensors命令 的安装 要使用sensors命…...

基于SSM车位租赁系统【附源码】
基于SSM车位租赁系统 效果如下: 注册页面 首页展示 车位租赁订单展示 车位列表页面 公告信息管理页面 公告类型管理界面 研究背景 随着经济的持续增长和城市化进程的加速,土地资源变得日益紧缺,停车难问题已成为许多城市面临的共同挑战。随…...

JAVA开源项目 新生报到网站 计算机毕业设计
本文项目编号 T 002 ,文末自助获取源码 \color{red}{T002,文末自助获取源码} T002,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 提…...

QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题
1、问题代码 #include <QCoreApplication>#pragma pack(push, 1) typedef struct {int a; // 4字节float b; // 4字节char c; // 1字节int *d; // 8字节 }testStruct; #pragma pack(pop)#include <QByteArray> #include <QDebug>int main() {testStruct …...

修改银河麒麟操作系统V10(SP1)网卡名称为ethx
修改银河麒麟桌面操作系统V10(SP1)网卡名称为ethx 步骤一:查看当前网卡信息步骤二:修改GRUB配置文件步骤三:更新GRUB配置步骤四:编辑网络接口文件步骤五:重启机器 💖The Begin&#…...

MySQL多表查询:标量子查询
先看我的emp表结构 emp表 子查询基本语法 select * from t1 where column1 (select column1 from t2);例子1:查询"销售部" 的所有员工信息 这个可以先拆解为两个 a.查询"销售部"的部门ID select id from dept where name 销售部; b. 根…...
C++学习笔记----8、掌握类与对象(六)---- 操作符重载(1)
经常在对象上执行如相加,比较,文件传输等操作。例如,spreadsheet只有在可以在上面执行自述运算才有用,比如对整行的单元格求和。所有这些都可以通过重载操作符来完成。 许多人发现操作符重载的语法复杂而令人迷惑。至少一开始是这…...

Ascend C 自定义算子开发:高效的算子实现
Ascend C 自定义算子开发:高效的算子实现 在 Ascend C 平台上,开发自定义算子能够充分发挥硬件的性能优势,帮助开发者针对不同的应用场景进行优化。本文将以 AddCustom 算子为例,介绍 Ascend C 中自定义算子的开发流程及关键技术…...

面向对象技术——设计模式
目录 层次结构 具体设计模式分类 创建型模式(处理创建对象) 结构型模式(处理类和对象的组合) 行为型模式(描述类或者对象的交互行为) 创建型设计模式 编辑 结构型设计模式 行为型设计模式编辑 …...

2024 Mysql基础与进阶操作系列之MySQL触发器详解(20)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS 专栏跑道三 ➡️HCIP;H3C-SE;CCIP——…...

找不到concrt140.dll如何修复,快来试试这6种解决方法
concrt140.dll是微软Visual C 2015 Redistributable Package中的一个重要动态链接库文件,它在许多Windows应用程序中扮演着关键角色。本文将详细探讨concrt140.dll丢失的原因、影响、解决方法以及预防措施,帮助用户更好地理解和应对这一问题。 一、什么是…...

年会工作会议会务报名签到小程序开源版开发
年会工作会议会务报名签到小程序开源版开发 会议管理微信小程序,对会议流程、开支、数量、标准、供应商提供一种标准化的管理方法。以达到量化成本节约,风险缓解和服务质量提升的目的。适用于大型论坛、峰会、学术会议、政府大会、合作伙伴大会、经销商…...
UE C++ 实时加载模型的总结
一.总体思路: 如果实时加载UE模型,需要先将之前的模型删除。再生成出来,放在根节点,保持相对位置,相对的俯仰角。 void AAirForce::LoadWeapon(int ID, int Type, double X, double Y, double Z) {//m_weaponMap.Emp…...

实施威胁暴露管理、降低网络风险暴露的最佳实践
随着传统漏洞管理的发展,TEM 解决了因攻击面扩大和安全工具分散而产生的巨大风险。 主动式 TEM 方法优先考虑风险并与现有安全工具无缝集成,使组织能够在威胁被有效利用之前缓解威胁。 为什么威胁暴露管理 (TEM) 在现代网络安全策略中变得至关重要&…...

51.哀家要长脑子了!
1.P1003 [NOIP2011 提高组] 铺地毯 重复 模拟 要求覆盖在最上面的地毯编号,用四个数组abgk分别记录地毯起点的左下角横纵坐标,地毯的长度宽度,输入的坐标x y 当它满足大于等于左下角坐标 并且 小于等于 地毯左下角横纵坐标的时候…...

Overleaf 无法显示图片
问题描述 在Overleaf中的代码为: \begin{figure}\centering\includegraphics[width0.98\linewidth]{figures/test.png}\caption{This is a test.}\label{fig:test} \end{figure}但无法正常显示图片: 解决方案 修改编译模式为正常Normal而非快速Fast …...

如何实现 C/C++ 与 Python 的通信?
在现代编程中,C/C与Python的通信已经成为一种趋势,尤其是在需要高性能和灵活性的场景中。本文将深入探讨如何实现这两者之间的互通,包括基础和高级方法,帮助大家在混合编程中游刃有余。 C/C 调用 Python(基础篇&#…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...