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

4.6js面向对象

js原型继承

JavaScript 的原型链继承是其核心特性之一,理解原型链对于掌握 JavaScript 的面向对象编程至关重要。


1. ​原型(Prototype)基础

在 JavaScript 中,每个对象都有一个内部属性 [[Prototype]](可以通过 __proto__ 或 Object.getPrototypeOf() 访问),它指向该对象的原型。原型本身也是一个对象,因此它也有自己的原型,这样就形成了一个链式结构,称为原型链

关键点:
  • 每个函数都有一个 prototype 属性,这个属性是一个对象,用于实现基于原型的继承。
  • 当访问一个对象的属性或方法时,如果对象本身没有该属性或方法,JavaScript 会沿着原型链向上查找,直到找到该属性或方法,或者到达原型链的顶端(null)。

2. ​原型链的基本原理

示例:

function Animal(name) {this.name = name;
}// 在 Person 的原型上添加方法
Animal.prototype.sayHello = function () {console.log(`Hello, 我是动物 ${this.name}`);
};const cat = new Animal("小猫");
cat.sayHello(); // 输出: Hello, 我是动物 小猫
解析:
  1. Animal是一个构造函数,Animal.prototype 是它的原型对象。
  2. 当调用 new Animal("小猫") 时,会创建一个新对象 cat,并将 cat.__proto__ 指向 Animal.prototype
  3. 当调用 cat.sayHello() 时,cat自身没有 sayHello 方法,因此 JavaScript 会沿着原型链查找,最终在 Animal.prototype 上找到该方法。


3. ​原型链继承的实现

原型链继承的核心思想是通过将子类的原型对象指向父类的实例,从而实现继承。

示例:

function Parent(name) {this.name = name;
}Parent.prototype.sayName = function () {console.log(`My name is ${this.name}`);
};function Child(age) {this.age = age;
}// 实现原型链继承
Child.prototype = new Parent(); // 将 Child 的原型指向 Parent 的实例const child1 = new Child();
child1.name = "Alice"; // 给子类实例添加属性
child1.sayName(); // 输出: My name is Alice
解析:
  1. Child.prototype = new Parent():将 Child 的原型对象指向 Parent 的一个实例,这样 Child 的实例就可以访问 Parent.prototype 上的方法。
  2. child1.name = "Alice":由于 Child 的构造函数没有 name 属性,因此需要手动为实例添加 name 属性。

缺点:

  • 所有子类实例共享同一个父类实例的属性(如果属性是引用类型,如数组或对象,可能会导致意外的修改)。
  • 无法在子类构造函数中向父类构造函数传递参数。

4. ​改进的原型链继承(借用构造函数)​

为了解决上述问题,可以使用借用构造函数的方式,在子类构造函数中调用父类构造函数。

示例:

function Parent(name) {this.name = name;
}Parent.prototype.sayName = function () {console.log(`My name is ${this.name}`);
};function Child(name, age) {Parent.call(this, name); // 借用父类构造函数this.age = age;
}// 仍然需要手动设置原型链
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;const child1 = new Child("Alice", 10);
child1.sayName(); // 输出: My name is Alice
解析:
  1. Parent.call(this, name):在子类构造函数中调用父类构造函数,确保每个子类实例都有自己的属性副本。
  2. Child.prototype = Object.create(Parent.prototype):通过 Object.create 创建一个新的对象,该对象的原型指向 Parent.prototype,从而避免直接修改 Child.prototype
  3. Child.prototype.constructor = Child:修复构造函数指向问题。

5. ​原型式继承

原型式继承通过创建一个临时构造函数,并将其原型指向目标对象,从而实现继承。

示例:

const parent = {name: "Alice",sayName() {console.log(`My name is ${this.name}`);},
};// 使用 Object.create 实现原型式继承
const child = Object.create(parent);
child.name = "Bob";
child.sayName(); // 输出: My name is Bob
解析:
  • Object.create(parent) 创建了一个新对象,该对象的原型指向 parent
  • 这种方式适合简单的对象继承,但不适合需要构造函数的场景。


6. ​ES6 的 class 和 extends

ES6 引入了 class 和 extends 关键字,使得继承的语法更加简洁和直观。

示例:

class Parent {constructor(name) {this.name = name;}sayName() {console.log(`My name is ${this.name}`);}
}class Child extends Parent {constructor(name, age) {super(name); // 调用父类构造函数this.age = age;}
}const child1 = new Child("Alice", 10);
child1.sayName(); // 输出: My name is Alice
解析:
  • class 和 extends 是语法糖,底层仍然是基于原型的继承。
  • super() 用于调用父类构造函数。

  • 原型链继承:通过将子类的原型指向父类的实例实现继承,但存在共享属性的问题。
  • 借用构造函数:在子类构造函数中调用父类构造函数,解决属性共享问题,是现代 JavaScript 中最推荐的继承方式。
  • ES6 class 和 extends:语法糖,底层仍然是基于原型的继承,推荐使用。

es6面向对象详解

1. ​类(Class)​

ES6 引入了 class 关键字,提供了一种更简洁的语法来定义类和构造函数。

示例:

class Person {// 构造函数constructor(name, age) {this.name = name;this.age = age;}// 方法sayHello() {console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);}
}// 创建实例
const person1 = new Person("Alice", 25);
person1.sayHello(); // 输出: Hello, my name is Alice and I am 25 years old.
解析:
  1. ​**class**:定义一个类。
  2. ​**constructor**:类的构造函数,用于初始化对象的属性。new 关键字调用时会自动执行构造函数。
  3. 方法:类中的方法不需要 function 关键字,直接定义即可。

2. ​继承(Inheritance)​

ES6 提供了 extends 关键字来实现类的继承。

示例:

class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a noise.`);}
}class Dog extends Animal {constructor(name, breed) {super(name); // 调用父类的构造函数this.breed = breed;}speak() {console.log(`${this.name} barks.`);}
}const dog1 = new Dog("Buddy", "Golden Retriever");
dog1.speak(); // 输出: Buddy barks.
console.log(dog1.breed); // 输出: Golden Retriever
解析:
  1. ​**extends**:用于创建子类,继承父类的属性和方法。
  2. ​**super**:在子类的构造函数中调用 super(),用于调用父类的构造函数。super 必须在 this 之前调用,否则会报错。
  3. 方法重写:子类可以重写父类的方法(如 speak 方法)。

3. ​静态方法和静态属性

ES6 支持在类中定义静态方法和静态属性,这些方法和属性属于类本身,而不是类的实例。

示例:

class MathUtils {// 静态方法static add(a, b) {return a + b;}// 静态属性static PI = 3.14;
}console.log(MathUtils.add(2, 3)); // 输出: 5
console.log(MathUtils.PI); // 输出: 3.14// 静态方法和属性不能通过实例访问
const math = new MathUtils();
console.log(math.add(2, 3)); // 报错: math.add is not a function

解析:

  • 静态方法和属性通过类名直接访问,而不是通过实例访问。
  • 静态方法通常用于工具函数或与实例无关的操作。

4. ​私有属性和方法

在 ES6 中,JavaScript 并没有直接支持私有属性和方法,但从 ​ES2022(ES13)​ 开始,引入了 # 符号来定义私有成员。

示例:

class Counter {// 私有属性#count = 0;// 公共方法increment() {this.#count++;}// 私有方法#reset() {this.#count = 0;}getCount() {return this.#count;}reset() {this.#reset();}
}const counter = new Counter();
counter.increment();
console.log(counter.getCount()); // 输出: 1
counter.reset();
console.log(counter.getCount()); // 输出: 0// 无法直接访问私有属性和方法
console.log(counter.#count); // 报错: SyntaxError
counter.#reset(); // 报错: SyntaxError

解析:

  • 使用 # 前缀定义私有属性和方法。
  • 私有成员只能在类的内部访问,外部无法直接访问。

5. ​Getter 和 Setter

ES6 支持通过 get 和 set 关键字定义属性的 getter 和 setter 方法,用于控制对属性的访问和修改。

示例:

class Person {constructor(firstName, lastName) {this.firstName = firstName;this.lastName = lastName;}// Getterget fullName() {return `${this.firstName} ${this.lastName}`;}// Setterset fullName(name) {const [firstName, lastName] = name.split(" ");this.firstName = firstName;this.lastName = lastName;}
}const person = new Person("Alice", "Smith");
console.log(person.fullName); // 输出: Alice Smithperson.fullName = "Bob Johnson";
console.log(person.firstName); // 输出: Bob
console.log(person.lastName); // 输出: Johnson

解析:

  • ​**get**:定义属性的读取方法。
  • ​**set**:定义属性的写入方法。
  • 使用 getter 和 setter 可以在访问或修改属性时添加额外的逻辑。

6. ​继承中的 super

在继承中,super 的作用非常重要,它用于调用父类的构造函数或方法。

示例:

class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a noise.`);}
}class Dog extends Animal {constructor(name, breed) {super(name); // 调用父类的构造函数this.breed = breed;}speak() {super.speak(); // 调用父类的方法console.log(`${this.name} barks.`);}
}const dog = new Dog("Buddy", "Golden Retriever");
dog.speak();
// 输出:
// Buddy makes a noise.
// Buddy barks.

解析:

  • 在子类的构造函数中,super() 必须在 this 之前调用。
  • 在子类的方法中,super.methodName() 可以调用父类的方法。

7. ​多态

多态是面向对象编程的一个重要特性,允许子类重写父类的方法,从而实现不同的行为。

示例:

class Animal {speak() {console.log("Animal makes a noise.");}
}class Dog extends Animal {speak() {console.log("Dog barks.");}
}class Cat extends Animal {speak() {console.log("Cat meows.");}
}const animals = [new Animal(), new Dog(), new Cat()];
animals.forEach((animal) => animal.speak());
// 输出:
// Animal makes a noise.
// Dog barks.
// Cat meows.

解析:

  • 子类可以重写父类的方法,从而实现不同的行为。
  • 多态使得代码更加灵活和可扩展。

8. ​抽象类

ES6 并没有直接支持抽象类,但可以通过约定或结合 TypeScript 来实现抽象类。抽象类是一种不能被实例化的类,通常用于定义子类的通用接口。

示例(约定方式):

class Animal {constructor(name) {if (new.target === Animal) {throw new Error("Animal is an abstract class and cannot be instantiated.");}this.name = name;}speak() {throw new Error("Method 'speak()' must be implemented.");}
}class Dog extends Animal {speak() {console.log(`${this.name} barks.`);}
}// const animal = new Animal(); // 报错: Animal is an abstract class
const dog = new Dog("Buddy");
dog.speak(); // 输出: Buddy barks.

解析:

  • 使用 new.target 检查类是否被直接实例化。
  • 抽象方法可以通过抛出错误来强制子类实现。

 ​总结

ES6 的面向对象特性使得 JavaScript 的类和继承更加直观和现代化:

  • ​**class**:定义类的语法糖。
  • ​**extends**:实现继承。
  • ​**super**:调用父类的构造函数或方法。
  • 静态方法和属性:通过 static 定义。
  • 私有成员:通过 # 定义(ES2022+)。
  • Getter 和 Setter:控制属性的访问和修改。

ES6 的面向对象特性使得 JavaScript 更加适合大型项目的开发,同时也为开发者提供了更清晰和直观的语法。

相关文章:

4.6js面向对象

js原型继承 JavaScript 的原型链继承是其核心特性之一,理解原型链对于掌握 JavaScript 的面向对象编程至关重要。 1. ​原型(Prototype)基础 在 JavaScript 中,每个对象都有一个内部属性 [[Prototype]](可以通过 __p…...

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft Fabric 服务器搭建,Fabric 模组详细搭建教程

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft Fabric 服务器搭建,Fabric 模组详细搭建教程 一、 服务器介绍二、安装 JDK 21三、搭建 Minecraft 服务端四、本地测试连接五、如何添加模组(mods)六、添加服务,并设置开…...

SQL SELECT DISTINCT 语句详解:精准去重的艺术

SQL SELECT DISTINCT 语句详解:精准去重的艺术 一、为什么需要数据去重? 在日常数据库操作中,我们经常会遇到这样的场景:查询客户表时发现重复的邮箱地址,统计销售数据时出现冗余的订单记录,分析用户行为…...

从ChatGPT到AutoGPT——AI Agent的范式迁移

一、AI Agent的范式迁移 1. ChatGPT的局限性与Agent化需求 单轮对话的“工具属性” vs. 多轮复杂任务的“自主性” ChatGPT 作为强大的生成式AI,虽然能够进行连贯对话,但本质上仍然是“工具型”AI,依赖用户提供明确的指令,而无法自主规划和执行任务。 人类介入成本过高:提…...

SQL EXISTS 与 NOT EXISTS 运算符

EXISTS 和 NOT EXISTS 是 SQL 中的逻辑运算符,用于检查子查询是否返回任何行。它们通常用在 WHERE 子句中,与子查询一起使用。 EXISTS 运算符 EXISTS 运算符用于检查子查询是否返回至少一行数据。如果子查询返回任何行,EXISTS 返回 TRUE&…...

AGI 的概念、意义与未来展望

随着人工智能技术的飞速发展,我们已经见证了在图像识别、自然语言处理等特定领域取得的巨大突破。然而,这些成就都属于弱人工智能(Narrow AI)的范畴,它们只能在预设的任务范围内高效工作。 人们对于一种拥有更广泛、更…...

基于Java与Go的下一代DDoS防御体系构建实战

引言:混合云时代的攻防对抗新格局 2024年某金融平台遭遇峰值2.3Tbps的IPv6混合攻击,传统WAF方案在新型AI驱动攻击面前全面失效。本文将以Java与Go为技术栈,揭示如何构建具备智能决策能力的防御系统。 一、攻击防御技术矩阵重构 1.1 混合攻击特征识别 攻击类型Java检测方案…...

FPGA调试笔记

XILINX SSTL属性电平报错 错误如下: [DRC BIVRU-1] Bank IO standard Vref utilization: Bank 33 contains ports that use a reference voltage. In order to use such standards in a bank that is not configured to use INTERNAL_VREF, the banks VREF pin mu…...

Axure项目实战:智慧城市APP(七)我的、消息(显示与隐藏交互)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:智慧城市APP 主要内容:我的、消息、活动模块页面 应用场景:消息页设计、我的页面设计以及活动页面设计 案例展示&#xff…...

深度学习——图像余弦相似度

计算机视觉是研究图像的学问,在图像的最终评价时,往往需要用到一些图像相似度的度量指标,因此,在本文中我们将详细地介绍原生和调用第三方库的计算图像余弦相似度的方法。 使用原生numpy实现 import numpy as npdef image_cosin…...

求矩阵某列的和

设计函数sum_column( int A[E1(n)][E2(n)], int j ),E1(n)和E2(n)分别为用宏定义的行数和列数,j为列号。在该函数中,设计指针ptr&A[0][j],通过*ptr及ptrptrE2(n)访问第j列元素,从而求得第j列元素的和。在主函数中定…...

【论文分析】无人机轨迹规划,Fast-Planner:实时避障+全局最优的路径引导优化算法

这篇论文《Robust Real-time UAV Replanning Using Guided Gradient-based Optimization and Topological Paths》由香港科技大学提出,主要针对无人机(UAV)在复杂环境中的实时轨迹重新规划问题,提出了一种结合梯度优化和拓扑路径搜…...

李飞飞、吴佳俊团队新作:FlowMo如何以零卷积、零对抗损失实现ImageNet重构新巅峰

目录 一、摘要 二、引言 三、相关工作 四、方法 基于扩散先前的离散标记化器利用广告 架构 阶段 1A:模式匹配预训练 阶段 1B:模式搜索后训练 采样 第二阶段:潜在生成建模 五、Coovally AI模型训练与应用平台 六、实验 主要结果 …...

AutoDev 2.0 正式发布:智能体 x 开源生态,AI 自动开发新标杆

在我们等待了几个月之后,国内终于有模型(DeepSeek V3-0324)能支持 AutoDev 的能力,也因此是时候发布 AutoDev 2.0 了!在 AutoDev 2.0 中,你可以: 编码智能体 Sketch 进行自动化编程自动化编程的…...

PHP 应用MYSQL 架构SQL 注入跨库查询文件读写权限操作

MYSQL 注入:(目的获取当前 web 权限) 1 、判断常见四个信息(系统,用户,数据库名,版本) 2 、根据四个信息去选择方案 root 用户:先测试读写,后测试获取…...

鸿蒙-全屏播放页面(使用相对布局)---持续更新中

最终实现效果图: 实现步骤 创建FullScreenPlay.ets全品播放页面 并将其修改为启动页面。 全屏播放,屏幕必然横过来,所以要将窗口横过来。 编辑 src/main/ets/entryability/EntryAbility.ets 若写在/EntryAbility.ets中,则所有…...

第4期:重构软件测试体系——生成式AI如何让BUG无所遁形

真实战场报告 某金融系统上线前,测试团队用AI生成3000条边缘用例,发现了一个隐藏极深的并发漏洞——该BUG在传统用例覆盖下需要7年才会触发一次。这次发现直接避免了可能上亿元的资金风险! 一、测试革命:当AI遇见质量保障 场景1&…...

力扣.旋转矩阵Ⅱ

59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; class Solution {const int MAX25; public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> ans;vector<int> hang;int len_nn;int arry[25][25]…...

Docker 安装部署Harbor 私有仓库

Docker 安装部署Harbor 私有仓库 系统环境:redhat x86_64 一、首先部署docker 环境 定制软件源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repoyum install -y yum-utils device-mapper-persistent-data lvm2…...

SQL Server 中常见的数据类型及其详细解释、内存占用和适用场景

以下是 SQL Server 中常见的数据类型及其详细解释、内存占用和适用场景&#xff1a; 数据类型类别数据类型解释内存占用适用场景整数类型bigint用于存储范围较大的整数&#xff0c;范围是 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)8 字节需要…...

javascript实现一个函数,将字符串中的指定子串全部替换为另一个字符串的原理,以及多种方法实现。

大白话javascript实现一个函数&#xff0c;将字符串中的指定子串全部替换为另一个字符串的原理&#xff0c;以及多种方法实现。 在JavaScript里&#xff0c;要是你想把字符串里的指定子串都替换成另外一个字符串&#xff0c;有不少方法可以实现。下面我会详细介绍实现的原理&a…...

Python 3 与 MySQL 数据库连接:mysql-connector 模块详解

Python 3 与 MySQL 数据库连接&#xff1a;mysql-connector 模块详解 概述 在Python 3中&#xff0c;与MySQL数据库进行交互是一个常见的需求。mysql-connector是一个流行的Python模块&#xff0c;它提供了与MySQL数据库连接和交互的接口。本文将详细介绍mysql-connector模块…...

HCIA-Datacom高阶:基础的单区域 OSPF 与多区域 OSPF的配置

动态路由协议是实现网络高效通信的关键技术之一。开放式最短路径优先&#xff08;Open Shortest Path First&#xff0c;OSPF&#xff09;协议作为内部网关协议&#xff08;IGP&#xff09;的一种&#xff0c;因其高效性、稳定性和扩展性&#xff0c;在大型网络中得到了广泛应用…...

蓝桥杯单片机刷题——E2PROM记录开机次数

设计要求 使用E2PROM完成数据记录功能&#xff0c;单片机复位次数记录到E2PROM的地址0中。每复位一次数值加1&#xff0c;按下按键S4&#xff0c;串口发送复位次数。串口发送格式如下&#xff1a; Number&#xff1a;1 备注&#xff1a; 单片机IRC振荡器频率设置为12MHz。 …...

杂草YOLO系列数据集4000张

一份开源数据集——杂草YOLO数据集&#xff0c;该数据集适用于农业智能化、植物识别等计算机视觉应用场景。 数据集详情 ​训练集&#xff1a;3,664张高清标注图像​测试集&#xff1a;180张多样性场景样本​验证集&#xff1a;359张严格筛选数据 下载链接 杂草YOLO数据集分…...

Python自动化面试通关秘籍

Python自动化测试工程师面试&#xff0c;不仅仅是考察你的代码能力&#xff0c;更看重你如何在项目中灵活运用工具和框架解决实际问题。如果你正准备面试&#xff0c;这篇文章将为你总结最常见的高频考题及答题技巧&#xff0c;帮助你快速上手&#xff0c;通关面试&#xff0c;…...

机器学习的一百个概念(1)单位归一化

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…...

Python 笔记 (二)

Python Note 2 1. Python 慢的原因2. 三个元素3. 标准数据类型4. 字符串5. 比较大小: 富比较方法 rich comparison6. 数据容器 (支持*混装* )一、允许重复类 (list、tuple、str)二、不允许重复类 (set、dict)1、集合(set)2、字典(dict)3、特殊: 双端队列 deque 三、数据容器的共…...

【商城实战(97)】ELK日志管理系统的全面应用

【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配,乃至运营推广策略,102 章内容层层递进。无论是想…...

3.使用epoll实现单线程并发服务器

目录 1. epoll的概述 2. 多线程与epoll的处理流程 2.1 多线程处理流程 2.2 epoll处理流程 3. epoll与多线程的比较 4. epoll的操作函数 4.1 epoll_create() 4.2 epoll_ctl() 4.3 epoll_wait() 5. 示例代码 6. epoll的工作模式 7. 使用O_NONBLOCK防止阻塞 8.运行代…...

蓝桥杯真题------R格式(高精度乘法,高精度加法)

对于高精度乘法和加法的同学可以学学这几个题 高精度乘法 高精度加法 文章目录 题意分析部分解全解 后言 题意 给出一个整数和一个浮点数&#xff0c;求2的整数次幂和这个浮点数相乘的结果最后四舍五入。、 分析 我们可以发现&#xff0c;n的范围是1000,2的1000次方非常大&am…...

PyCharm操作基础指南

一、安装与配置 1. 版本选择 专业版&#xff1a;支持 Web 开发&#xff08;Django/Flask&#xff09;、数据库工具、科学计算等&#xff08;需付费&#xff09;。 社区版&#xff1a;免费&#xff0c;适合纯 Python 开发。 2. 安装步骤 访问 JetBrains 官网 下载对应版本。…...

21 python __name__ 与 __main__

在办公室里&#xff0c;每个员工都有自己的工牌&#xff0c;上面写着姓名和部门。 一、__name__&#xff1a;模块的名字 Python 模块也有类似的 "工牌"——__name__属性&#xff0c;它记录了模块的身份&#xff1a; 直接运行时 → __name__ "__main__"&…...

NixVis 开源轻量级 Nginx 日志分析工具

NixVis NixVis 是一款基于 Go 语言开发的、开源轻量级 Nginx 日志分析工具&#xff0c;专为自部署场景设计。它提供直观的数据可视化和全面的统计分析功能&#xff0c;帮助您实时监控网站流量、访问来源和地理分布等关键指标&#xff0c;无需复杂配置即可快速部署使用。 演示…...

elementUI el-image图片加载失败解决

是不是&#xff0c;在网上找了一些&#xff0c;都不行&#xff0c;这里一行代码&#xff0c;解决&#xff0c;后端返回图片路径&#xff0c;el-image图片加载失败的问题 解决办法&#xff0c; vue项目里&#xff0c;index.html文件里加一行代码就可 <meta name"refe…...

lxd-dashboard 图形管理LXD/LXC

前言 LXD-WEBGUI是一个完全用AngularJS编写的Web应用程序,无需应用服务器、数据库或其他后端服务支持。只需要简单地托管静态HTML和JavaScript文件,就能立即投入使用。这个项目目前处于测试阶段,提供了直观的用户界面,帮助用户便捷地管理和控制LXD实例。 安装lxd-dashboa…...

C# MemoryStream 使用详解

总目录 前言 在.NET开发中&#xff0c;流&#xff08;Stream&#xff09;是一个用于处理输入和输出的抽象类&#xff0c;MemoryStream是流的一个具体实现&#xff0c;它允许我们在内存中读写数据&#xff0c;就像操作文件一样&#xff0c;而无需涉及磁盘 I/O 操作。尤其适合需…...

(二)万字长文解析:deepResearch如何用更长的思考时间换取更高质量的回复?各家产品对比深度详解

DeepResearch的研究背景 业务背景&#xff1a;用更长的等待时间&#xff0c;换取更高质量、更具实用性的结果 当前AI技术发展正经历从“即时响应”到“深度思考”的范式转变。用户对延迟的容忍度显著提升&#xff0c;从传统200ms的交互响应放宽至数秒甚至数分钟&#xff0c;以…...

Redis场景问题1:缓存穿透

Redis 缓存穿透是指在缓存系统&#xff08;如 Redis&#xff09;中&#xff0c;当客户端请求的数据既不在缓存中&#xff0c;也不在数据库中时&#xff0c;每次请求都会直接穿透缓存访问数据库&#xff0c;从而给数据库带来巨大压力&#xff0c;甚至可能导致数据库崩溃。下面为…...

数据结构(并查集,图)

并查集 练习版 class UnionFindSet { public:void swap(int* a, int* b){int tmp *a;*a *b;*b tmp;}UnionFindSet(size_t size):_ufs(size,-1){}int UnionFind(int x){}void Union(int x1, int x2){}//长分支改为相同节点int FindRoot(int x){}bool InSet(int x1, int x2)…...

深度学习篇---断点重训模型部署文件

文章目录 前言一、断点重训&#xff08;Checkpoint&#xff09;文件1. 动态图&#xff08;DyGraph&#xff09;模式.pdparams 文件.pdopt 文件.pdscaler 文件.pdmeta 或 .pkl 文件 2. 静态图&#xff08;Static Graph&#xff09;模式.pdparams 和 .pdopt 文件.ckpt 文件 3. 恢…...

chromem-go + ollama + bge-m3 进行文档向量嵌入和查询

Ollama 安装 https://ollama.com/download Ollama 运行嵌入模型 bge-m3:latest ollama run bge-m3:latestchromem-go 文档嵌入和查询 package mainimport ("context""fmt""runtime""github.com/philippgille/chromem-go" )func ma…...

运维面试题(十一)

1.如果一个硬盘 IO 时阻塞了&#xff0c;会发生什么情况&#xff1f; 进程/线程挂起&#xff1a;发起I/O操作的进程或线程会被操作系统置为阻塞状态&#xff08;等待状态&#xff09;&#xff0c;直到I/O完成。CPU资源释放&#xff1a;阻塞的线程会让出CPU&#xff0c;操作系统…...

深度学习中常见的专业术语汇总

本硕博都是搞机械的匠人&#xff0c;当然也想做一下交叉学科的东西&#xff0c;蹭一下人工智能的热点。虽然世界是个草台班子&#xff0c;但是来都来了&#xff0c;咱也要把这场戏演好。 记得之前网上爆料有位大学生发了很多水文&#xff0c;对&#xff0c;是交叉学科的&#x…...

人工智能赋能医疗:开启智慧医疗新时代

在当今数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度渗透到各个行业&#xff0c;其中医疗领域更是成为AI技术大放异彩的重要舞台。从疾病诊断到治疗方案制定&#xff0c;从医疗影像分析到药物研发&#xff0c;AI正在为传统医疗带来…...

stable diffusion 本地部署教程 2025最新版

前提&#xff1a; 需要环境 git git下载地址Git - Downloading Package ​ 直接装即可 python3.10.6 下载地址 Python Release Python 3.10.6 | Python.org ​ 记得python环境一定要3.10.6&#xff01;&#xff01;&#xff01; 第一个版本 项目地址https://github.…...

[Mac]利用Hexo+Github Pages搭建个人博客

由于我这台Mac基本没啥环境&#xff0c;因此需要从零开始配置&#xff0c;供各位参考。 注意⚠️&#xff1a;MacBook (M4)使用/bin/zsh作为默认Shell&#xff0c;其对应的配置文件为~/.zshrc 参考文档&#xff1a; HEXO系列教程 | 使用GitHub部署静态博客HEXO | 小白向教程 文…...

罗杰斯特回归

定义 逻辑回归其实就是原来的线性回归加了激活函数&#xff0c;这个函数其实就是sigmoid函数&#xff0c;把一个回归的连续数值压缩到了0到1的空间&#xff0c;其实只要有函数能够满足把数值压缩到0,1之间就可以&#xff08;因为0到1之间的数值就是概率值&#xff09; 对于分类…...

27_promise

插入一下前端助手测试&#xff0c;顺手可以用来做安全 promise promise 是一个es6新增的语法 汉语&#xff1a;承诺的意思 作用:是专门用来解决回调地狱!!!! 什么是回调函数&#xff1f; <script>// 回调函数 callback回调// 就是把函数A当作参数传递到函数B中// 在函…...

【机械视觉】C#+VisionPro联合编程———【六、visionPro连接工业相机设备】

【机械视觉】C#VisionPro联合编程———【六、visionPro连接工业相机设备】 目录 【机械视觉】C#VisionPro联合编程———【六、visionPro连接工业相机设备】 前言&#xff1a; 连接步骤说明 一. 硬件连接 支持的相机接口类型&#xff1a; 连接步骤 2. 软件配置 Visio…...