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

Es6新特性

1. let 和 const

概念
  • let:用于声明 块级作用域 的变量。
  • const:用于声明 块级作用域 的常量,声明后不可重新赋值(但可以修改对象的属性或数组的内容)。
原理

JavaScript 在 ES5 中只有全局作用域和函数作用域,没有块级作用域。letconst 引入了块级作用域,使得变量的生命周期仅限于块内(例如 {} 中),避免了变量污染和提升问题。

用法

// let 示例
if (true) {let x = 10;console.log(x); // 10
}
// console.log(x); // 报错,x 未定义// const 示例
const PI = 3.14;
// PI = 3.14159; // 报错,常量不可重新赋值
const obj = { name: 'John' };
obj.name = 'Alice'; // 可以修改对象的属性

 与 var 的区别

  • var 有函数作用域和提升(hoisting),而 let 和 const 有块级作用域,无提升。
  • var 允许重复声明,而 let 和 const 不允许。
var x = 10;
var x = 20; // 合法
let y = 10;
// let y = 20; // 报错,重复声明

2. 箭头函数

概念

箭头函数是一种简化函数定义的语法,使用 =>。它没有自己的 thisargumentssupernew.targetthis 继承自外层作用域。

原理

普通函数的 this 是动态绑定的,取决于调用方式。而箭头函数的 this 是静态绑定的,继承自定义时的外层作用域。

用法
// 普通函数
function add(a, b) {return a + b;
}// 箭头函数
const add = (a, b) => a + b;
console.log(add(2, 3)); // 5// this 绑定示例
const person = {name: 'John',greet: function() {setTimeout(() => {console.log(`Hello, ${this.name}`); // this 继承自 greet}, 1000);}
};
person.greet(); // Hello, John
与普通函数的区别
  • 箭头函数不能作为构造函数(不能使用 new)。
  • 箭头函数没有 arguments 对象。
  • 箭头函数不能使用 yield,不能作为生成器函数。

3. 模板字符串

概念

模板字符串使用反引号(`),可以嵌入变量和多行文本,支持表达式。

原理

模板字符串在编译时会被解析为普通字符串,嵌入的变量和表达式会被替换为实际值。

用法
const name = 'Alice';
const age = 25;
const message = `Hello, my name is ${name} and I am ${age} years old.`;
console.log(message); // Hello, my name is Alice and I am 25 years old.// 多行文本
const multiLine = `This is line 1.This is line 2.
`;
console.log(multiLine);
与传统字符串的区别
  • 传统字符串需要使用 + 拼接变量,模板字符串更简洁。
  • 模板字符串支持多行文本,传统字符串需要手动换行符 \n

4. 解构赋值

概念

解构赋值允许从数组或对象中提取值,并赋值给变量。

原理

解构赋值是一种语法糖,底层仍然是通过逐个赋值实现。

用法
// 数组解构
const [a, b] = [1, 2];
console.log(a, b); // 1 2// 对象解构
const { name, age } = { name: 'John', age: 25 };
console.log(name, age); // John 25// 默认值
const [x = 10, y = 20] = [1];
console.log(x, y); // 1 20
与传统赋值的区别
  • 传统赋值需要逐个提取值,解构赋值更简洁。
  • 解构赋值支持默认值,避免变量为 undefined

5. 默认参数

概念

默认参数允许在函数定义时为参数设置默认值,如果调用时未提供该参数,则使用默认值。

原理

在函数调用时,如果参数值为 undefined,则使用默认值。

用法
function greet(name = 'Guest') {console.log(`Hello, ${name}`);
}
greet(); // Hello, Guest
greet('Alice'); // Hello, Alice
与传统方法的区别
  • 传统方法需要在函数体内判断参数是否为 undefined,默认参数更简洁。

6. 扩展运算符和剩余参数

概念
  • 扩展运算符(...:用于展开数组或对象。
  • 剩余参数(...:用于将剩余的参数收集为一个数组。
原理

扩展运算符将数组或对象的内容“展开”为独立的值。剩余参数将剩余的值“收集”为一个数组。

用法
// 扩展运算符
const arr1 = [1, 2];
const arr2 = [3, 4];
const combined = [...arr1, ...arr2];
console.log(combined); // [1, 2, 3, 4]// 剩余参数
function sum(...numbers) {return numbers.reduce((acc, num) => acc + num, 0);
}
console.log(sum(1, 2, 3)); // 6
与 arguments 的区别
  • arguments 是一个类数组对象,剩余参数是一个真正的数组

7. 类和继承

概念

ES6 引入了 class 关键字,用于定义类和继承。

原理

class 是语法糖,底层仍然是基于原型链的继承。

用法
class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a noise.`);}
}class Dog extends Animal {speak() {console.log(`${this.name} barks.`);}
}const dog = new Dog('Rex');
dog.speak(); // Rex barks.

 与传统原型链的区别

  • class 语法更直观,易于理解。
  • extends 关键字简化了继承的实现。

8. **模块化(import 和 export

概念

ES6 引入了模块化语法,允许将代码分割成多个文件,通过 importexport 进行导入和导出。

原理

模块化将代码组织为独立的单元,每个模块有自己的作用域。

用法
// 导出模块
export const name = 'John';
export function greet() {console.log('Hello!');
}// 导入模块
import { name, greet } from './module.js';
console.log(name); // John
greet(); // Hello!
与 CommonJS 的区别
  • CommonJS 使用 require 和 module.exports,ES6 模块化语法更现代化。

 9. Symbol

概念

Symbol 是一种新的原始数据类型,表示 唯一 的值。通常用于创建对象的唯一属性名,避免属性名冲突。

原理

每次调用 Symbol() 都会生成一个唯一的值,即使传入相同的参数。

用法
const sym1 = Symbol('key');
const sym2 = Symbol('key');
console.log(sym1 === sym2); // false,Symbol 是唯一的const obj = {[sym1]: 'value' // 使用 Symbol 作为属性名
};
console.log(obj[sym1]); // value
与字符串属性的区别
  • 字符串属性名可以被覆盖,而 Symbol 属性名是唯一的,不会冲突。

10. 迭代器(Iterators)和生成器(Generators)

概念
  • 迭代器:一种对象,具有 next() 方法,用于按顺序访问集合的元素。
  • 生成器:一种特殊的函数,使用 function* 声明,可以生成多个值。
原理

迭代器和生成器基于 协程 的机制,允许函数暂停和恢复执行。

用法
// 迭代器
const iterator = {data: [1, 2, 3],next() {return {value: this.data.shift() || undefined,done: this.data.length === 0};}
};
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }// 生成器
function* generateNumbers() {yield 1;yield 2;yield 3;
}
const gen = generateNumbers();
console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
与普通函数的区别
  • 普通函数只能返回一个值,而生成器可以返回多个值。
  • 生成器的执行可以被暂停和恢复。

11. Promise

概念

Promise 是一种异步编程的解决方案,用于处理异步操作的结果。

原理

Promise 是一个对象,表示一个异步操作的最终状态(完成或失败)。它有三种状态:pendingfulfilledrejected

用法
const promise = new Promise((resolve, reject) => {setTimeout(() => {resolve('Success!'); // 异步操作成功}, 1000);
});promise.then(result => console.log(result)) // Success!.catch(error => console.log(error)); // 处理错误
与回调函数的区别
  • 回调函数容易导致“回调地狱”,而 Promise 使用链式调用,代码更清晰。

12. Map 和 Set

概念
  • Map:一种键值对的集合,键可以是任意类型的值。
  • Set:一种唯一值的集合,不允许重复值。
原理

MapSet 是基于哈希表实现的,适合存储和查找大量数据。

用法
// Map
const map = new Map();
map.set('name', 'John');
map.set(1, 'One');
console.log(map.get('name')); // John// Set
const set = new Set([1, 2, 3, 3]);
console.log(set); // Set { 1, 2, 3 }
与普通对象的区别
  • Map 的键可以是任意类型的值,而普通对象的键只能是字符串或 Symbol
  • Set 会自动去重,而普通数组不会。

13. Proxy

概念

Proxy 是一种对象,用于定义基本操作的自定义行为(如属性查找、赋值、函数调用等)。

原理

Proxy 可以“拦截”对目标对象的操作,并在操作执行前后添加自定义逻辑。

用法
const target = {name: 'John'
};
const handler = {get(obj, prop) {return prop in obj ? obj[prop] : 'Unknown';}
};
const proxy = new Proxy(target, handler);
console.log(proxy.name); // John
console.log(proxy.age); // Unknown
与直接访问对象的区别
  • 直接访问对象无法拦截操作,而 Proxy 可以实现自定义行为。

14. Reflect

概念

Reflect 是一个内置对象,提供与 Proxy 相同的操作,用于简化代码和统一行为。

原理

Reflect 方法通常与 Proxy 配对使用,例如 Reflect.get()Reflect.set() 等。

用法
const obj = { name: 'John' };
console.log(Reflect.get(obj, 'name')); // John
Reflect.set(obj, 'age', 25);
console.log(obj.age); // 25
与直接调用的区别
  • Reflect 提供了一种更标准化的方式来操作对象。

15. 字符串新增方法

  • includes():检查字符串是否包含指定子串。
  • startsWith():检查字符串是否以指定子串开头。
  • endsWith():检查字符串是否以指定子串结尾。
用法
const str = 'Hello, world!';
console.log(str.includes('world')); // true
console.log(str.startsWith('Hello')); // true
console.log(str.endsWith('!')); // true
与 indexOf 的区别
  • includes()startsWith()endsWith() 更语义化,直接返回布尔值。

16. 数组新增方法

  • Array.from():将类数组对象或可迭代对象转换为数组。
  • Array.of():创建包含任意数量元素的数组。
  • find():查找符合条件的第一个元素。
  • findIndex():查找符合条件的第一个元素的索引。
  • fill():填充数组的指定范围。
用法
const arr = Array.from('abc');
console.log(arr); // ['a', 'b', 'c']const numbers = Array.of(1, 2, 3);
console.log(numbers); // [1, 2, 3]const firstEven = [1, 3, 5, 6, 7].find(num => num % 2 === 0);
console.log(firstEven); // 6

Array.prototype.fill() 是 ES6 引入的一个数组方法,用于用一个固定值填充数组的指定范围。它非常方便,特别是在需要初始化或重置数组时使用。

array.fill(value, start, end)
  • value:用来填充数组的值。
  • start(可选):开始填充的索引(包含该索引),默认为 0
  • end(可选):结束填充的索引(不包含该索引),默认为数组的长度。

使用示例

// 1. 填充整个数组
const arr = [1, 2, 3, 4, 5];
arr.fill(0); // 用 0 填充整个数组
console.log(arr); // [0, 0, 0, 0, 0]// 2. 填充指定范围
const arr = [1, 2, 3, 4, 5];
arr.fill(0, 1, 3); // 从索引 1 到 3(不包含 3)用 0 填充
console.log(arr); // [1, 0, 0, 4, 5]// 3. 从某个索引开始填充
const arr = [1, 2, 3, 4, 5];
arr.fill(0, 2); // 从索引 2 开始用 0 填充
console.log(arr); // [1, 2, 0, 0, 0]// 4. 填充稀疏数组 如果数组是稀疏的(有空位),fill() 会跳过这些空位,只填充有值的位置:
const arr = [1, , , 4]; // 数组有空的索引
arr.fill(0, 1, 3); // 从索引 1 到 3 用 0 填充
console.log(arr); // [1, 0, 0, 4]//注意事项
//修改原数组:fill() 会直接修改原数组,而不是返回一个新数组。
//负数索引:可以使用负数索引,表示从数组末尾开始计算:
<JAVASCRIPT>
const arr = [1, 2, 3, 4, 5];
arr.fill(0, -3, -1); // 从倒数第 3 个到倒数第 1 个用 0 填充
console.log(arr); // [1, 2, 0, 0, 5]//超出范围的索引:
//如果 start 或 end 超出数组的索引范围,fill() 会自动调整到数组的边界:
const arr = [1, 2, 3, 4, 5];
arr.fill(0, 10); // start 超出范围,相当于不填充
console.log(arr); // [1, 2, 3, 4, 5]

实际应用场景

// 初始化数组:
const arr = new Array(5).fill(0); // 创建一个长度为 5 的数组,所有元素为 0
console.log(arr); // [0, 0, 0, 0, 0]//重置数组的一部分:
const scores = [95, 80, 70, 60, 85];
scores.fill(0, 2, 4); // 将索引 2 和 3 的值重置为 0
console.log(scores); // [95, 80, 0, 0, 85]// 生成固定值的数组:
const defaultValues = new Array(10).fill('default'); // 生成 10 个 'default'
console.log(defaultValues); // ['default', 'default', ..., 'default']//与 map() 的区别
//fill() 是直接填充值,而 map() 是通过回调函数生成新值。
//示例:
const arr1 = new Array(5).fill(0); // [0, 0, 0, 0, 0]
const arr2 = new Array(5).fill().map((_, i) => i); // [0, 1, 2, 3, 4]

    相关文章:

    Es6新特性

    1. let 和 const 概念 let&#xff1a;用于声明 块级作用域 的变量。const&#xff1a;用于声明 块级作用域 的常量&#xff0c;声明后不可重新赋值&#xff08;但可以修改对象的属性或数组的内容&#xff09;。 原理 JavaScript 在 ES5 中只有全局作用域和函数作用域&…...

    大数据学习(80)-数仓分层

    &#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

    StarRocks 升级注意事项

    前段时间升级了生产环境的 StarRocks&#xff0c;从 3.3.3 升级到了 3.3.9&#xff0c;期间还是踩了不少坑所以在这里记录下。 因为我们的集群使用的是存算分离的版本&#xff0c;也是使用官方提供的 operator 部署在 kubernetes 里的&#xff0c;所以没法按照官方的流程进入虚…...

    Java 大视界 -- Java 大数据分布式计算中的通信优化与网络拓扑设计(145)

    &#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

    LabVIEW软件长时间运行导致蓝屏问题排查与优化

    计算机在长时间运行LabVIEW或其他软件后出现蓝屏&#xff08;BSOD&#xff09;&#xff0c;通常由硬件资源耗尽、驱动冲突或软件内存泄漏引发。本文提供从日志分析到根本性优化的全流程解决方案&#xff0c;确保系统稳定运行。 一、蓝屏记录查询方法 1. 查看Windows事件日志 操…...

    【机密计算顶会解读】11:ACAI——使用 Arm 机密计算架构保护加速器执行

    导读&#xff1a;本文介绍ACAI&#xff0c;其构建一个基于CCA的解决方案&#xff0c;使得机密虚拟机能够安全地使用加速器&#xff0c;同时保持与现有应用程序的兼容性和安全性&#xff0c;能够实现对加速器的安全访问。 原文链接&#xff1a;ACAI: Protecting Accelerator Ex…...

    【WRF模拟】WPS预处理设置生成文件地址

    目录 WPS 运行 geogrid.exe在 namelist.wps 中指定 geogrid.exe 输出路径WPS 运行 ungrid.exe方法 1:在 namelist.wps 中指定输出路径方法 2:手动移动 FILE:* 文件方法 3:使用环境变量 WPS_UNGRIB_OUTPUT(不推荐)另:设置文件链接地址WPS 运行 metgrid.exe方法 1:在 name…...

    Midjourney使用教程—2.作品修改

    当您已生成第一张Midjourney图像的时候&#xff0c;接下来该做什么&#xff1f;了解我们用于修改图像的工具&#xff01;使用 Midjourney 制作图像后&#xff0c;您的创意之旅就不会止步于此。您可以使用各种工具来修改和增强图像。 一、放大操作 Midjourney每次会根据提示词…...

    基于 ABAP RESTful 应用程序编程模型开发 OData V4 服务

    一、概念 以个人图书管理为例&#xff0c;创建一个ABAP RESTful 应用程序编程模型项目。最终要实现的效果&#xff1a; 用于管理书籍的程序。读取、修改和删除书籍。 二、Data Model-数据模型 2.1 创建项目基础数据库表 首先&#xff0c;创建一个图书相关的表&#xff0c;点…...

    微信小程序登陆之反向代理

    一.背景 在互联网架构中&#xff0c;反向代理是连接客户端与后端服务的核心组件。它的核心价值在于&#xff1a; 安全性&#xff1a;隐藏内部服务细节&#xff0c;防止直接暴露到公网。 负载均衡&#xff1a;分散请求到多个后端实例&#xff0c;提升吞吐量。 SSL终止&#x…...

    [解决] PDF转图片,中文乱码或显示方框的解决方案

    在Java开发中,将PDF文件转换为图片是一项常见的需求,但过程中可能会遇到中文乱码或显示方框的问题。本文将深入探讨这一问题,并提供详细的解决方案,帮助开发者顺利地完成PDF到图片的转换。 一、问题现象 在使用Java库(如Apache PDFBox)将PDF转换为图片时,如果PDF文件中…...

    面试康复训练-SQL语句

    一&#xff0c;数据库操作 1查看所有库 show databases; --查看所有库2使用数据库 use 数据库名; --使用数据库&#xff1b; 3查看当前使用数据库 select database(); --查看当前使用的数据库 4 创建数据库 create databse 数据库名 charsetutf8; --创建数据库 5删…...

    经典面试题:C/C++中static关键字的三大核心作用与实战应用

    一、修饰局部变量&#xff1a;改变生命周期&#xff0c;保留跨调用状态 核心作用&#xff1a; ​延长生命周期&#xff1a;将局部变量从栈区移至静态存储区&#xff08;数据段或BSS段&#xff09;&#xff0c;生命周期与程序一致​保留状态&#xff1a;变量在函数多次调用间保…...

    Linux固定IP方法(RedHat+Net模式)

    1、查看当前网关 ip route | grep default 2、配置静态IP 双击重启 3、验证...

    JVM 学习前置知识

    JVM 学习前置知识 Java 开发环境层次结构解析 下图展示了 Java 开发环境的层级关系及其核心组件&#xff0c;从底层操作系统到上层开发工具&#xff0c;逐步构建完整的开发与运行环境&#xff1a; 1. 操作系统&#xff08;Windows, MacOS, Linux, Solaris&#xff09; 作用&…...

    数据结构---图的深度优先遍历(DFS)

    一、与树的深度优先遍历之间的联系 1.类似于树的先根遍历。 递归访问各个结点&#xff1a; 2.图的深度优先遍历 先设置一个数组&#xff0c;初始值全部设置为false&#xff0c;先访问一个结点&#xff0c;在用一个循环&#xff0c;依次检查和这个结点相邻的其他结点&#xff0c…...

    QPrintDialog弹出慢的问题

    开发环境 操作系统: openkylin2qt版本 : 5.15.10排查过程 首先看下问题的现象, 问题现象 复现问题的demo很简单,只能是从跟踪qt代码方面入手 void MainWindow::on_pushButton_clicked(){QPrinter printer;QPrintDialog dialog(&printer,this);dialog.exec();} 现在需要找一…...

    QT-LINUX-Bluetooth蓝牙开发

    BlueToothAPI QT-BlueToothApi Qt Bluetooth 6.8.2 官方提供的蓝牙API不支持linux。 D-Bus的API实现蓝牙 确保系统中安装了 BlueZ(版本需≥5.56),并且 Qt 已正确安装并配置了 D-Bus 支持。 默默看了下自己的版本.....D-BUS的API也不支持。 在 D-Bus 中,org 目录是 D-Bus…...

    kvm虚拟机的基本使用

    [rootkvm ~]# virsh destroy 虚拟机名 #关闭虚拟机 [rootkvm ~]# virsh undefine 虚拟机名 #删除虚拟机 [rootkvm ~]# virsh start 虚拟机名 #开启虚拟机 [rootkvm ~]# virsh console 虚拟机名 #登录虚拟机 [rootkvm ~]# virsh list --all …...

    K8S中若要挂载其他命名空间中的 Secret

    在Kubernetes&#xff08;k8s&#xff09;里&#xff0c;若要挂载其他命名空间中的Secret&#xff0c;你可以通过创建一个 Secret 的 ServiceAccount 和 RoleBinding 来实现对其他命名空间 Secret 的访问&#xff0c;接着在 Pod 中挂载这个 Secret。下面是详细的步骤和示例代码…...

    【Java SE】抽象类/方法、模板设计模式

    目录 1.抽象类/方法 1.1 基本介绍 1.2 语法格式 1.3 使用细节 2. 模板设计模式&#xff08;抽象类使用场景&#xff09; 2.1 基本介绍 2.2 具体例子 1.抽象类/方法 1.1 基本介绍 ① 当父类的某些方法&#xff0c;需要声明&#xff0c;但是又不确定如何实现时&#xff…...

    如何理解java中Stream流?

    在Java中&#xff0c;Stream 是 Java 8 引入的一个强大API&#xff0c;用于处理集合&#xff08;如 List、Set、Map 等&#xff09;数据的流式操作。它提供了一种声明式、函数式的编程风格&#xff0c;可以高效地进行过滤、映射、排序、聚合等操作。 Stream 的核心概念 流&…...

    QT编程之数据库开发

    一、架构层次 ‌用户接口层‌ ‌QSqlQueryModel‌&#xff1a;管理SQL查询结果&#xff0c;提供表格数据模型用于展示‌‌QSqlTableModel‌&#xff1a;支持直接操作数据库表&#xff08;增删改查&#xff09;‌‌QSqlRelationalTableModel‌&#xff1a;支持带外键关联的复杂表…...

    【10】高效存储MongoDB的用法

    目录 一、什么是MongoDB 二、准备工作 &#xff08;1&#xff09;安装MongoDB ​&#xff08;2&#xff09;安装pymongo库 三、连接MongoDB 四、指定数据库 五、指定集合 六、插入数据 &#xff08;1&#xff09; insert 方法 &#xff08;2&#xff09;insert_one(…...

    使用Qdrant等其他向量数据库时需要将将numpy 数组转换为列表 确保数据能被正确处理和序列化,避免类型不兼容的问题。

    在使用Qdrant等其他向量数据库时需要 转换 numpy 数组为列表主要是为了确保数据能被正确处理和序列化&#xff0c;避免类型不兼容的问题。具体原因如下&#xff1a; 序列化兼容性&#xff1a; 很多数据库接口、API 或者 JSON 序列化工具只能处理 Python 的内置类型&#xff08;…...

    mayfly-go开源的一站式 Web 管理平台

    mayfly-go 是一款开源的一站式 Web 管理平台&#xff0c;旨在通过统一的界面简化 Linux 服务器、数据库&#xff08;如 MySQL、PostgreSQL、Redis、MongoDB 等&#xff09;的运维管理。以下从多个维度对其核心特性、技术架构、应用场景及生态进行详细解析&#xff1a; 一、核心…...

    Linux中的yum和vim工具使用总结

    在Linux系统管理和文本编辑中&#xff0c;yum和vim是两个非常重要的工具。yum作为包管理器帮助我们轻松安装和管理软件&#xff0c;而vim则是一个功能强大的文本编辑器。下面我将对这两个工具进行详细介绍。 一、YUM包管理器 1. YUM简介 YUM (Yellowdog Updater Modified) 是…...

    笔记:代码随想录算法训练营day58:101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿

    学习资料&#xff1a;代码随想录 文中含大模型生成内容 101. 孤岛的总面积 卡码网&#xff1a;101. 孤岛的总面积 所以找周边都是水的陆地的方法就是找边缘的陆地然后删除它连同它的连通的陆地 深搜 #include <iostream> #include <vector> using namespac…...

    Rust语言介绍和猜数字游戏的实现

    文章目录 Rust语言介绍和猜数字游戏的实现cargo是什么使用Rust编写猜数字 Rust语言介绍和猜数字游戏的实现 Rust语言是一种系统编程语言&#xff0c;核心强调安全性、并发性以及高性能&#xff0c;由类似于C/C的底层控制能力&#xff0c;性能也非常接近&#xff0c;Rust有一些…...

    高并发库存系统是否适合使用 ORM(Hibernate / MyBatis)

    在设计高并发的库存管理系统时&#xff0c;数据层的选择至关重要。许多企业开发中习惯使用 ORM&#xff08;如 Hibernate、MyBatis&#xff09;来简化数据库访问&#xff0c;但在高并发、高吞吐的场景下&#xff0c;ORM 的适用性往往成为争议焦点。本文将探讨高并发库存系统是否…...

    Spring Boot中接口数据字段为 Long 类型时,前端number精度丢失问题解决方案

    Spring Boot中接口数据字段为 Long 类型时&#xff0c;前端number精度丢失问题解决方案 在Spring Boot中&#xff0c;当接口数据字段为 Long 类型时&#xff0c;返回页面的JSON中该字段通常会被序列化为数字类型。 例如&#xff0c;一个Java对象中有一个 Long 类型的属性 id …...

    Java-servlet(七)详细讲解Servlet注解

    Java-servlet&#xff08;七&#xff09;详细讲解Servlet注解 前言一、注解的基本概念二、Override 注解2.1 作用与优势2.2 示例代码 三、Target 注解3.1 定义与用途3.2 示例代码 四、WebServlet 注解4.1 作用4.2 示例代码 五、反射与注解5.1 反射的概念5.2 注解与反射的结合使…...

    OpenCV Imgproc 模块使用指南(Python 版)

    一、模块概述 imgproc 模块是 OpenCV 的图像处理核心&#xff0c;提供从基础滤波到高级特征提取的全流程功能。核心功能包括&#xff1a; 图像滤波&#xff1a;降噪、平滑、锐化几何变换&#xff1a;缩放、旋转、透视校正颜色空间转换&#xff1a;BGR↔灰度 / HSV/Lab 等阈值…...

    PostgreSQL:简介与安装部署

    &#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

    流畅如丝:利用requestAnimationFrame优化你的Web动画体验

    requestAnimationFrame 是前端开发中用于优化动画性能的 API。它允许浏览器在下一次重绘之前执行指定的回调函数&#xff0c;通常用于实现平滑的动画效果。 1.作用 优化性能&#xff1a;requestAnimationFrame 会根据浏览器的刷新率&#xff08;通常是 60Hz&#xff0c;即每秒…...

    OpenCV 基础模块 Python 版

    OpenCV 基础模块权威指南&#xff08;Python 版&#xff09; 一、模块全景图 plaintext OpenCV 架构 (v4.x) ├─ 核心层 │ ├─ core&#xff1a;基础数据结构与操作&#xff08;Mat/Scalar/Point&#xff09; │ └─ imgproc&#xff1a;图像处理流水线&#xff08;滤…...

    代码随想录算法训练营第十五天 | 数组 |长度最小的子数组和螺旋矩阵II

    长度最小的子数组 【题目简介】 【自写数组解法】 class Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:minLength float(inf)slow 0fast 0cur_sum nums[slow]# 终止条件&#xff1a;fast不能超过最大索引值while slow < fast and fas…...

    C++ 入门第27天:异常处理详细讲解

    往期回顾&#xff1a; C 入门第24天&#xff1a;C11 多线程基础-CSDN博客 C 入门第25天&#xff1a;线程池&#xff08;Thread Pool&#xff09;基础-CSDN博客 C 入门第26天&#xff1a;文件与流操作基础-CSDN博客 C 入门第27天&#xff1a;异常处理详细讲解 前言 在 C 开发中…...

    Powershell WSL导出导入ubuntu22.04.5子系统

    导出Linux子系统 导出位置在C盘下,根据自己的实际情况更改即可Write-Host "export ubuntu22.04.5" -ForegroundColor Green wsl --export Ubuntu-22.04 c:\Ubuntu-22.04.tar 导入Linux子系统 好处是目录可用在任意磁盘路径,便于迁移不同的设备之间Write-Host &quo…...

    中文文献去哪里查找,个人下载知网、万方、维普文献途径

    国内三大知识库知网、万方、维普是查找中文文献常用数据库&#xff0c;本文将以实例演示个人下载这三个数据库文献的途径及过程。 先说下途径&#xff1a; 获取知网、万方、维普数据库资源可去文献党下载器网站&#xff1a; 使用方法&#xff1a; 在文献党下载器官网下载安装…...

    玩转C#函数:参数、返回值与游戏中的攻击逻辑封装

    Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

    简易shell

    自主实现shell done&#xff0c;故意写成&#xff0c;表示先赋值&#xff0c;再判断&#xff0c;分割之后&#xff0c;strtok会返回NULL&#xff0c;刚好让gArgv最后一个元素是NULL&#xff0c;并且while判断结束 Makefile 1 myshell:myshell.c …...

    注意力机制,本质上是在做什么?

    本文以自注意机制为例&#xff0c;输入一个4*4的矩阵 如下&#xff1a; input_datatorch.tensor([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ],dtypetorch.float) 得到Q和K的转置如下。 此时&#xff0c;计算QK^T ,得到如下结果 第一行第一个位置就是第一条样本和第…...

    【机器学习-模型评估】

    “评估”已建立的模型 在进行回归和分类时&#xff0c;为了进行预测&#xff0c;定义了预测函数fθ(x) 然后根据训练数据求出了预测函数的参数θ(即对目标函数进行微分&#xff0c;然后求出参数更新表达式的操作) 之前求出参数更新表达式之后就结束了。但是&#xff0c;其实我…...

    19681 01背包

    19681 01背包 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;动态规划、01背包 &#x1f4d6; &#x1f4da; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int N 10001…...

    Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测

    Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测 目录 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预…...

    基于CAMEL 的Workforce 实现多智能体协同工作系统

    文章目录 一、workforce 简介1.架构设计2.通信机制 二、workforce 工作流程图示例1.用户角色2.工作流程 三、workforce 中重要函数说明1.__init__函数2.add_single_agent_worker 函数3.add_role_playing_worker 函数4.add_workforce 函数 四、基于workforce实现多智能体协调&am…...

    炫酷的3D按钮效果实现 - CSS3高级特性应用

    炫酷的3D按钮效果实现 - CSS3高级特性应用 这里写目录标题 炫酷的3D按钮效果实现 - CSS3高级特性应用项目介绍核心技术实现1. 基础结构设计2. 视觉效果实现2.1 背景渐变2.2 立体感营造 3. 交互动效设计3.1 悬停效果3.2 按压效果 技术要点分析1. 深度层次感2. 动画过渡3. 性能优…...

    AI视频是否会影响原创价值

    AI视频是否会影响原创价值 AI视频带来全民创意对原创内容的影响 随着AI技术的发展&#xff0c;AI视频技术在视频领域的影响也逐渐凸显&#xff0c;从自动剪辑、特效生成到基于文本或语音自动生成视频内容&#xff0c;这一系列的进步极大地降低了视频制作的技术门槛与成本。这种…...

    代码随想录刷题day50|(回溯算法篇)131.分割回文串▲

    目录 一、回溯算法基础知识 二、分割回文串思路 2.1 如何切割 2.2 判断回文 2.3 回溯三部曲 2.4 其他问题 三、相关算法题目 四、总结 一、回溯算法基础知识 详见&#xff1a;代码随想录刷题day46|&#xff08;回溯算法篇&#xff09;77.组合-CSDN博客 二、分割回文…...