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

第三部分:进阶概念 7.数组与对象 --[JavaScript 新手村:开启编程之旅的第一步]

第三部分:进阶概念 7.数组与对象 --[JavaScript 新手村:开启编程之旅的第一步]

在 JavaScript 中,数组和对象是两种非常重要的数据结构,它们用于存储和组织数据。尽管它们都属于引用类型(即它们存储的是对数据的引用而不是数据本身),但它们有着不同的特性和用途。

创建和访问数组

当然,下面是四个关于如何在 JavaScript 中创建和访问数组的示例。这些示例涵盖了不同的创建方法以及访问数组元素的方式。

示例 1: 使用数组字面量创建并访问数组

这是最简单且常用的方法来创建一个数组,并通过索引访问其元素。

// 创建一个包含水果名称的数组
const fruits = ['apple', 'banana', 'orange'];// 访问数组中的第一个元素
console.log(fruits[0]); // 输出: apple// 修改数组中的第二个元素
fruits[1] = 'grape';// 打印整个数组
console.log(fruits); // 输出: ["apple", "grape", "orange"]

在这里插入图片描述

示例 2: 使用 Array 构造函数创建数组

你可以使用 Array 构造函数来创建数组。注意,如果只传递一个数字参数给构造函数,则会创建一个具有指定长度但未初始化的数组。

// 创建一个包含数字的数组
const numbers = new Array(1, 2, 3, 4, 5);// 访问数组中的最后一个元素
console.log(numbers[numbers.length - 1]); // 输出: 5// 添加新元素到数组末尾
numbers.push(6);// 打印整个数组
console.log(numbers); // 输出: [1, 2, 3, 4, 5, 6]

在这里插入图片描述

示例 3: 使用数组方法创建和访问多维数组

有时你需要创建一个多维数组(即数组中的每个元素本身也是一个数组),这可以通过嵌套数组来实现。

// 创建一个多维数组
const matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
];// 访问二维数组中的特定元素
console.log(matrix[1][1]); // 输出: 5 (第二行第二列)// 修改二维数组中的元素
matrix[0][2] = 'X';// 打印修改后的整个数组
console.log(matrix); // 输出: [[1, 2, "X"], [4, 5, 6], [7, 8, 9]]

在这里插入图片描述

示例 4: 使用数组填充方法创建并访问大数组

JavaScript 提供了一些便捷的方法来创建大型或特定模式的数组,例如 Array.from()fill() 方法。

// 使用 Array.from() 创建一个从 1 到 5 的数组
const sequence = Array.from({ length: 5 }, (_, i) => i + 1);// 访问数组中的所有元素
console.log(sequence); // 输出: [1, 2, 3, 4, 5]// 使用 fill() 方法创建一个填充相同值的数组
const filledArray = new Array(3).fill('same');// 访问数组中的所有元素
console.log(filledArray); // 输出: ["same", "same", "same"]// 使用 map() 方法创建一个基于现有数组的新数组
const doubled = sequence.map(x => x * 2);// 打印新的数组
console.log(doubled); // 输出: [2, 4, 6, 8, 10]

在这里插入图片描述

总结
  • 示例 1 展示了如何使用数组字面量创建数组,并通过索引访问和修改元素。
  • 示例 2 演示了 Array 构造函数的用法,包括添加新元素。
  • 示例 3 展现了多维数组的创建和访问方式。
  • 示例 4 介绍了几种创建和操作大型或模式化数组的方法,如 Array.from()fill()

这些示例覆盖了 JavaScript 数组的基本创建和访问技巧,帮助你更好地理解和应用这一重要的数据结构。

数组方法概览

JavaScript 提供了丰富的数组方法,使得操作数组变得非常方便。以下是四个常见的数组方法及其使用示例,涵盖了一些最常用的功能,如遍历、查找、过滤和转换数组元素。

示例 1: 使用 forEach 遍历数组

forEach 方法用于对数组中的每个元素执行一次提供的函数,但不返回任何值(即返回 undefined)。

const numbers = [1, 2, 3, 4, 5];// 使用 forEach 遍历数组并打印每个元素
numbers.forEach((number) => {console.log(number);
});// 输出:
// 1
// 2
// 3
// 4
// 5

在这里插入图片描述

示例 2: 使用 map 创建新数组

map 方法创建一个新数组,其结果是对调用数组中的每个元素调用提供的函数后的返回值。

const numbers = [1, 2, 3, 4, 5];// 使用 map 将每个元素乘以 2,并创建一个新的数组
const doubled = numbers.map((number) => number * 2);console.log(doubled); // 输出: [2, 4, 6, 8, 10]

在这里插入图片描述

示例 3: 使用 filter 筛选数组元素

filter 方法创建一个新数组,包含所有通过测试的元素。原数组不会被改变。

const numbers = [1, 2, 3, 4, 5, 6];// 使用 filter 找出所有偶数
const evens = numbers.filter((number) => number % 2 === 0);console.log(evens); // 输出: [2, 4, 6]

在这里插入图片描述

示例 4: 使用 reduce 计算数组的总和或聚合数据

reduce 方法对数组中的每个元素(从左到右)执行一个提供的 reducer 函数,将其结果汇总为单个输出值。

const numbers = [1, 2, 3, 4, 5];// 使用 reduce 计算数组中所有元素的总和
const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);console.log(sum); // 输出: 15// 使用 reduce 计算对象数组中特定属性的总和
const orders = [{ id: 1, amount: 200 },{ id: 2, amount: 450 },{ id: 3, amount: 300 }
];const totalAmount = orders.reduce((sum, order) => sum + order.amount, 0);console.log(totalAmount); // 输出: 950

在这里插入图片描述

总结
  • forEach:遍历数组,对每个元素执行指定的操作,但不返回新数组。
  • map:创建一个新数组,其中包含对原始数组中每个元素应用函数后的结果。
  • filter:创建一个新数组,包含所有满足给定条件的元素。
  • reduce:将数组中的元素累积成一个单一的值,常用于求和或聚合操作。

这些方法是处理数组时最常用的工具之一,它们不仅简化了代码,还提高了可读性和效率。通过组合使用这些方法,你可以更灵活地操作和处理数组数据。

对象的创建与属性访问

在 JavaScript 中,对象是存储键值对(即属性和方法)的数据结构。它们是非常灵活且强大的工具,用于组织和操作数据。下面是四个关于如何创建对象以及访问其属性的示例。

示例 1: 使用对象字面量创建对象并访问属性

这是最简单的方法来创建一个对象,并通过点符号或方括号语法访问其属性。

// 创建一个表示人的对象
const person = {firstName: 'John',lastName: 'Doe',age: 30,getFullName: function() {return `${this.firstName} ${this.lastName}`;}
};// 访问对象属性
console.log(person.firstName); // 输出: John
console.log(person['lastName']); // 输出: Doe// 调用对象方法
console.log(person.getFullName()); // 输出: John Doe

在这里插入图片描述

示例 2: 使用构造函数创建对象实例

你可以定义一个构造函数,然后使用 new 关键字来创建该构造函数的多个实例。

// 定义一个构造函数
function Person(firstName, lastName, age) {this.firstName = firstName;this.lastName = lastName;this.age = age;this.getFullName = function() {return `${this.firstName} ${this.lastName}`;};
}// 创建构造函数的实例
const john = new Person('John', 'Doe', 30);
const jane = new Person('Jane', 'Smith', 25);// 访问实例属性
console.log(john.firstName); // 输出: John
console.log(jane.getFullName()); // 输出: Jane Smith

在这里插入图片描述

示例 3: 使用 class 语法创建对象

ES6 引入了类(class)语法,它提供了一种更简洁的方式来定义构造函数和方法。

// 定义一个类
class Person {constructor(firstName, lastName, age) {this.firstName = firstName;this.lastName = lastName;this.age = age;}getFullName() {return `${this.firstName} ${this.lastName}`;}
}// 创建类的实例
const john = new Person('John', 'Doe', 30);
const jane = new Person('Jane', 'Smith', 25);// 访问实例属性
console.log(john.firstName); // 输出: John
console.log(jane.getFullName()); // 输出: Jane Smith

在这里插入图片描述

示例 4: 使用 Object.create 方法创建对象

Object.create 方法允许你基于现有的对象创建新对象,并指定原型对象。这对于实现继承非常有用。

// 创建一个原型对象
const personPrototype = {getFullName: function() {return `${this.firstName} ${this.lastName}`;}
};// 使用 Object.create 基于原型对象创建新对象
const john = Object.create(personPrototype);
john.firstName = 'John';
john.lastName = 'Doe';
john.age = 30;const jane = Object.create(personPrototype);
jane.firstName = 'Jane';
jane.lastName = 'Smith';
jane.age = 25;// 访问对象属性
console.log(john.firstName); // 输出: John
console.log(jane.getFullName()); // 输出: Jane Smith

在这里插入图片描述

总结
  • 对象字面量:最简单的方式创建对象,适合单个对象的快速定义。
  • 构造函数:适合需要创建多个相似对象的情况,提供了初始化参数。
  • class 语法:ES6 提供的更简洁、面向对象的语法,便于定义构造函数和方法。
  • Object.create:基于现有对象创建新对象,有助于实现原型链继承。

这些方法展示了不同情况下创建和操作 JavaScript 对象的方式,每种方法都有其适用场景和优点。根据具体需求选择合适的方法,可以使代码更加清晰和高效。

遍历对象

JavaScript 遍历对象的三种常见方法

遍历对象是指访问对象的所有属性(键值对)。JavaScript 提供了多种方式来实现这一点,下面将介绍三种常见的方法,并附带示例代码。

示例 1: 使用 for...in 循环遍历对象属性

for...in 循环可以遍历对象的所有可枚举属性,包括继承的属性。如果你只想遍历对象自身的属性,应该使用 hasOwnProperty() 方法进行过滤。

const person = {firstName: 'John',lastName: 'Doe',age: 30,occupation: 'Developer'
};// 使用 for...in 遍历对象属性
for (let key in person) {if (person.hasOwnProperty(key)) { // 确保只遍历自身属性console.log(`${key}: ${person[key]}`);}
}// 输出:
// firstName: John
// lastName: Doe
// age: 30
// occupation: Developer

在这里插入图片描述

示例 2: 使用 Object.keys()forEach 遍历对象键

Object.keys() 方法返回一个包含对象所有自身属性键的数组,然后你可以使用数组的方法如 forEach 来遍历这些键。

const person = {firstName: 'John',lastName: 'Doe',age: 30,occupation: 'Developer'
};// 使用 Object.keys() 和 forEach 遍历对象键
Object.keys(person).forEach(key => {console.log(`${key}: ${person[key]}`);
});// 输出:
// firstName: John
// lastName: Doe
// age: 30
// occupation: Developer

在这里插入图片描述

示例 3: 使用 Object.entries() 和解构赋值遍历键值对

Object.entries() 方法返回一个给定对象自身所有 [key, value] 对的数组迭代器。结合 for...offorEach 可以方便地同时获取键和值。

const person = {firstName: 'John',lastName: 'Doe',age: 30,occupation: 'Developer'
};// 使用 Object.entries() 和解构赋值遍历键值对
for (let [key, value] of Object.entries(person)) {console.log(`${key}: ${value}`);
}// 或者使用 forEach
Object.entries(person).forEach(([key, value]) => {console.log(`${key}: ${value}`);
});// 输出:
// firstName: John
// lastName: Doe
// age: 30
// occupation: Developer

在这里插入图片描述

总结
  • for...in:适合遍历对象的所有可枚举属性,但需要注意区分自身属性和继承属性。
  • Object.keys() + 数组方法:通过将对象键转换为数组,利用数组的遍历方法,清晰且易于操作。
  • Object.entries():提供了一种简洁的方式来同时获取键和值,特别适用于需要同时处理键和值的场景。

选择哪种方法取决于具体的需求和偏好。上述三种方法都是有效且常用的遍历对象的方式,可以帮助你根据实际情况选择最适合的一种。

相关文章:

第三部分:进阶概念 7.数组与对象 --[JavaScript 新手村:开启编程之旅的第一步]

第三部分:进阶概念 7.数组与对象 --[JavaScript 新手村:开启编程之旅的第一步] 在 JavaScript 中,数组和对象是两种非常重要的数据结构,它们用于存储和组织数据。尽管它们都属于引用类型(即它们存储的是对数据的引用而…...

LabVIEW密码保护与反编译的安全性分析

在LabVIEW中,密码保护是一种常见的源代码保护手段,但其安全性并不高,尤其是在面对专业反编译工具时。理论上,所有软件的反编译都是可能的,尽管反编译不一定恢复完全的源代码,但足以提取程序的核心功能和算法…...

Docker魔法:用docker run -p轻松开通容器服务大门

前言 “容器”与“虚拟化”作为现代软件开发和运维中的关键概念,已经广泛应用于各个技术领域。然而,在使用 Docker 部署应用时,常常会遇到这样的问题:容器正常运行,却无法让外界访问其内部服务?即使容器内的应用顺利启动,外部无法通过浏览器或 API 进行连接。此时,doc…...

ubuntu防火墙(三)——firewalld使用与讲解

本文是Linux下,用ufw实现端口关闭、流量控制(二) firewalld使用方式 firewalld 是一个动态管理防火墙的工具,主要用于 Linux 系统(包括 Ubuntu 和 CentOS 等)。它提供了一个基于区域(zones)和服务&#x…...

【大数据技术基础 | 实验十一】Hive实验:新建Hive表

文章目录 一、实验目的二、实验要求三、实验原理四、实验环境五、实验内容和步骤(一)启动Hive(二)创建表(三)显示表(四)显示表列(五)更改表(六&am…...

Python实现Excel中数据条显示

Python中要实现百分比数据条的显示,可以使用pandas库,pandas图表样式的设置与Excel中的条件格式设置比较类似,比如Excel里常用的数据条的用法,在pandas中使用代码进行高亮显示,用来突出重点数据,下面一起来…...

矩阵与向量的基本概念

**一、四个基本子空间的定义** 1. **行空间(Row Space)** 行空间是由矩阵的所有行向量所形成的空间。它包含所有可能的行向量的线性组合。行空间的维度称为矩阵的行秩。 2. **零空间(Null Space)** 零空间是与矩阵相乘后结果为零的…...

亚马逊云科技大语言模型加速OCR应用场景发展

目录 前言Amazon Bedrock关于OCR解决方案Amazon Bedrock进行OCR关键信息提取方案注册亚马逊账号API调用环境搭建 总结 前言 大语言模型是一种基于神经网络的自然语言处理技术,它能够学习和预测自然语言文本中的规律和模式,可以理解和生成自然语言的人工…...

十九(GIT2)、token、黑马就业数据平台(页面访问控制(token)、首页统计数据、登录状态失效)、axios请求及响应拦截器、Git远程仓库

1. JWT介绍 JSON Web Token 是目前最为流行的跨域认证解决方案,本质就是一个包含信息的字符串。 如何获取:在使用 JWT 身份验证中,当用户使用其凭据成功登录时,将返回 JSON Web Token(令牌)。 作用&#xf…...

深入探索现代 IT 技术:从云计算到人工智能的全面解析

目录 1. 云计算:重塑 IT 基础设施 2. 大数据:挖掘信息的价值 3. 物联网(IoT):连接物理世界 4. 区块链:重塑信任机制 5. 人工智能(AI):智能未来的驱动力 结语 在当今…...

Redis的持久化

目录 1. 文章前言2. RDB2.1 触发机制2.2 流程说明2.3 RDB文件的处理2.4 RDB的优缺点 3. AOF3.1 使用AOF3.2 命令写入3.3 文件同步3.4 重写机制3.5 启动时数据恢复 4. 持久化总结 1. 文章前言 (1)Redis支持RDB和AOF两种持久化机制,持久化功能…...

小型支付商城系统-MVC工程架构开发

第1-1节 DDD 架构概念 1.DDD 是什么 那 DDD 是什么呢?来自于维基百科的一段定义:"Domain-driven design (DDD) is a major software design approach. ",DDD 是一种软件设计方法。也就是说 DDD 是指导我们做软件工程设计的一种手…...

探索 ONLYOFFICE 8.2 版本:更高效、更安全的云端办公新体验

引言 在当今这个快节奏的时代,信息技术的发展已经深刻改变了我们的工作方式。从传统的纸质文件到电子文档,再到如今的云端协作,每一步技术进步都代表着效率的飞跃。尤其在后疫情时代,远程办公成为常态,如何保持团队之间…...

Spark 计算总销量

Spark 计算总销量 题目: 某电商平台存储了所有商品的销售数据,平台希望能够找到销量最好的前 N 个商品。通过分析销售记录,帮助平台决策哪些商品需要更多的推广资源。 假设你得到了一个商品销售记录的文本文件 product_id, product_name,…...

力扣每日一题 - 3001. 捕获黑皇后需要的最少移动次数

题目 还需要你前往力扣官网查看详细的题目要求 地址 1.现有一个下标从 1 开始的 8 x 8 棋盘,上面有 3 枚棋子。2.给你 6 个整数 a 、b 、c 、d 、e 和 f ,其中:(a, b) 表示白色车的位置。(c, d) 表示白色象的位置。(e, f) 表示黑皇后的位置。…...

【React】React常用开发工具

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、React DevTools二、Redux DevTools三、Create React App 前言 React 是一种用于构建用户界面的流行 JavaScript 库,由于其灵活性、性能和可重用…...

c++ 数据结构:图

图是一种重要的非线性数据结构,用于表示对象及其关系。它广泛应用于社交网络、交通网络、任务调度、导航等领域。 图的基本概念 图的定义: 图由 顶点(Vertex) 和 边(Edge) 组成,记为 G(V,E)&a…...

SpringBoot整合Mockito进行单元测试超全详细教程 JUnit断言 Mockito 单元测试

Mock概念 Mock叫做模拟对象,即用来模拟未被实现的对象可以预先定义这个对象在特定调用时的行为(例如返回值或抛出异常),从而模拟不同的系统状态。 导入Mock依赖 pom文件中引入springboot测试依赖,spring-boot-start…...

十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能

十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能 文章目录 十六,Spring Boot 整合 Druid 以及使用 Druid 监控功能1. Druid 的基本介绍2. 准备工作:3. Druid 监控功能 3.1 Druid 监控功能 —— Web 关联监控3.2 Druid 监控功能 —— …...

Python办公—DataMatrix二维条码制作

目录 专栏导读1、库的介绍2、库的安装3、核心代码4、完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专…...

Linux:软硬链接

目录 一、概念 软链接 硬链接 二、原理 硬链接 软链接 三、使用场景 硬链接 软链接 一、概念 软链接 在当前目录下,有一个普通文件a.txt。 ln -s a.txt a_soft.link结论: 软链接是一个文件。 观察inode_id,发现软链接有着独立…...

[笔记] Windows 上 Git 安装详细教程:从零开始,附带每个选项解析

Git 是目前最流行的分布式版本控制系统之一,广泛应用于软件开发和项目管理中。对于 Windows 用户来说,正确安装和配置 Git 是开始使用 Git 的第一步。本文提供一份详细的指南,帮助你在 Windows 系统上顺利安装 Git,并解释每个安装…...

23种设计模式之策略模式

目录 1. 简介2. 代码2.1 Strategy (策略接口)2.2 AddStrategy (具体策略类)2.3 SubStrategy (具体策略类)2.4 MultiplyStrategy (具体策略类)2.5 Operation (上下文类&am…...

总篇:Python3+Request+Pytest+Allure+Jenkins接口自动化框架设计思路

1、技术选型 Python3 Python 是一种广泛使用的高级编程语言,具有简洁、易读、易维护的特点。 Python 拥有丰富的第三方库,可以方便地进行接口测试的开发。 Request Request 是一个强大的 HTTP 库,用于发送 HTTP 请求和处理响应。 Request 支持多种 HTTP 方法,如 GET、P…...

【QML】release版本bug,信号的参数无法获取

1. 现象 问题 QML程序在debug编译模式下程序可以正常运行,但是release版本下报错:ReferenceError: para is not defined版本 Qt creator 10.0.2Qt_5_15_2_MinGW 平台 win 10 2. 解决方法 暂时没有找到好的解决办法,只能规避规避方法 //问…...

Javaweb 前端 ajax

作用:和后端交互 script 是 js axios(这里是函数的调用方式){封装的是对象} {}是对象 案例 。then的含义,请求后端之后,后端把数据放在回调 点了清空之后,还要查询全部 await等待请求执行完之后,接收这个结果 代码…...

汽车EEA架构:发展历程

1.发展历程的基本逻辑 汽车电子电气的发展历程中,其使用的基本逻辑是IPO(Input-Processing-Output)模型,如下图1所示: 图 1 那什么是IPO模型了?我们从控制器的原理入手解释IPO模型,控制器的主要用途如下: 根据给定的逻…...

几个Linux系统安装体验: 统信服务器系统

本文介绍统信服务器系统(UOS)的安装。 下载 下载地址: https://www.chinauos.com/resource/download-server 本文下载的文件名称为uos-server-20-1070e-amd64.iso。 安装 本次实践仅是做测试体验,因此在pc上使用虚拟机vmware…...

用二维图像渲染3D场景视频

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...

ChatGPT 最新推出的 Pro 订阅计划,具备哪些能力 ?

OpenAI 最近推出了 ChatGPT Pro,这是一个每月收费 200 美元的高级订阅计划,旨在为用户提供对 OpenAI 最先进模型和功能的高级访问。 以下是 ChatGPT Pro 的主要功能和能力: 高级模型访问: o1 模型:包括 o1 和 o1 Pro…...

如何在 IntelliJ IDEA 中为 Spring Boot 应用实现热部署

文章目录 1. 引言2. 准备工作3. 添加必要的依赖4. 配置 IntelliJ IDEA4.1 启用自动编译4.2 开启热部署策略 5. 测试热部署6. 高级技巧7. 注意事项8. 总结 随着现代开发工具的进步,开发者们越来越重视提高生产力的特性。对于 Java 开发者来说,能够在不重启…...

NLP与LLM的工程化实践与学习思考 - 写在开头

NLP与LLM的工程化实践与学习思考[24年半年工作总结] - 写在开头 0 开头的开头 0 开头的开头 24年因为一些工作原因,短暂在NLP领域遨游了半年。这半年对我的影响蛮大,一来是因为此前从没接触过这个方向学到新东西挺开心的,二来是在工程化实践…...

Redis(一)

Redis 基础 什么是 Redis? Redis (REmote DIctionary Server)是一个基于 C 语言开发的开源 NoSQL 数据库(BSD 许可)。与传统数据库不同的是,Redis 的数据是保存在内存中的(内存数据库&#xf…...

RocketMq源码-broker(五)

一、RocketMq存储设计 RocketMQ 主要存储的文件包括Commitlog 文件、ConsumeQueue 文件、IndexFile。RocketMQ 将所有主题的消息存储在同一文件,确保消息发送时顺序写文件,尽最大的能力确保消息发送的高性能与高吞吐量。 但由于一般的消息中间件是基于消…...

【Linux】文件描述符fd

1.前置预备 文件 内容 属性访问文件之前&#xff0c;都必须先打开他 #include<stdio.h> int main() { FILE* fpfopen("log.txt","w"); if(fpNULL) { perror("fopen"); return 1; } fclose(fp); return 0…...

mysql之事务

MySQL的事务隔离特性指的是多个并发事务之间相互隔离的程度&#xff0c;以保证数据的一致性和并发性。MySQL支持四个隔离级别&#xff0c;分别是读未提交&#xff08;Read Uncommitted&#xff09;、读已提交&#xff08;Read Committed&#xff09;、可重复读&#xff08;Repe…...

python插入mysql数据

# 插入与上一篇变化不大,只是需要进行确认操作. 增加确认操作的方法有两种&#xff08;假设类对象为a&#xff09;: 1.在连接时传入一个参数:autocommitTrue aConnection&#xff08; host"localhost", port3306, user"root", password"自己的密码…...

C语言面试题/笔试题/高频面试题

一、C&#xff1a; 1.static和const的作用优缺点 限制作用域&#xff1a; static声明中使用全局变量、函数 &#xff0c;仅当前文件内可用&#xff0c;其他文件不能引用 static修饰的局部变量只能在本函数中使用. 延长生命周期: static修饰的变量生命周期为整个程序 存放位置&a…...

rust websocket Echo server高性能服务器开发

最近在学习websocket时,一直没有发现好的websocket server工具来调试,于是就自己做了一个websocket server用来学习和调试。因为rust性能遥遥领先,所以就采用了rust来搭建服务器。废话不多说直接上代码main.rs: use tokio::net::TcpListener; use tokio_tungstenite::tung…...

Docker打包SpringBoot项目

一、项目打成jar包 在进行docker打包之前&#xff0c;先确定一下&#xff0c;项目能够正常的打成JAR包&#xff0c;并且启动之后能够正常的访问。这一步看似是可有可无&#xff0c;但是能避免后期的一些无厘头问题。 二、Dockerfile 项目打包成功之后&#xff0c;需要编写Doc…...

ViT学习笔记(二) Patch+Position Embedding阶段的详细推演与理解

我认为讲得最好的一个文章&#xff1a;Vision Transformer详解-CSDN博客 有很多文章&#xff0c;自己并没有完全正确理解。 我的笔记&#xff0c;以ViT的标准应用为例&#xff1a; • 输入图像&#xff1a;输入图像的尺寸是224x224&#xff0c;且是RGB图像&#xff0c;因此输…...

Elasticsearch 单节点安全配置与用户认证

Elasticsearch 单节点安全配置与用户认证 安全扫描时发现了一个高危漏洞&#xff1a;Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时&#xff0c;需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤&#xff0c;为单节…...

【PHP项目实战】活动报名系统

目录 项目介绍 开发语言 后端 前端 项目截图&#xff08;部分&#xff09; 首页 列表 详情 个人中心 后台管理 项目演示 项目介绍 本项目是一款基于手机浏览器的活动报名系统。它提供了一个方便快捷的活动报名解决方案&#xff0c;无需下载和安装任何APP&#xff0c…...

ASP.NET Core8.0学习笔记(二十五)——EF Core Include导航数据加载之预加载与过滤

一、导航属性数据加载 1.在EF Core中可以使用导航属性来加载相关实体。 2.加载实体的三种方式&#xff1a; (1)预先加载&#xff1a;直接在查询主体时就把对应的依赖实体查出来&#xff08;作为初始查询的一部分&#xff09; (2)显式加载&#xff1a;使用代码指示稍后显式的从…...

【RK3562J开发笔记】MCP2518FD外部CAN-FD控制器的调试方法

“SPI转CAN-FD”是嵌入式开发领域的常用方法&#xff0c;它极大地促进了不同通信接口之间的无缝连接&#xff0c;并显著降低了系统设计的复杂性。飞凌嵌入式依托瑞芯微RK3562J处理器打造的OK3562J-C开发板因为内置了SPI转CAN-FD驱动&#xff0c;从而原生支持这一功能。该开发板…...

docker安装Emqx并使用自签名证书开启 SSL/TLS 连接

docker安装Emqx并使用自签名证书开启 SSL/TLS 连接 一、获取自签名证书1、创建openssl.cnf文件2、生成证书自签名证书 二、docker安装EMQX1、初始化目录2、加载镜像文件并挂载相应的文件目录3、启动docker容器4、EMQX加载自签名证书 三、客户端MQTTX连接测试四、Springboot整合…...

AI驱动的低代码平台:解密背后的算法与架构创新

引言 在如今的数字化浪潮中&#xff0c;企业对软件的需求正以前所未有的速度增长。传统的开发方式由于开发周期长、成本高&#xff0c;已逐渐无法满足市场的快速变化。而低代码平台的出现&#xff0c;使得开发者和业务人员能够以极简的方式快速构建应用。然而&#xff0c;随着企…...

ruoyi的excel批量导入

最简单方式 若依的官方文档提供了教程&#xff0c;可以按照起前后端的教学&#xff0c;进行代码编写 前段 组件 <!-- 导入对话框 --><el-dialogtitle"导入数据"v-model"openImport"width"500px"append-to-body><el-uploadref&quo…...

大数据-244 离线数仓 - 电商核心交易 ODS层 数据库结构 数据加载 DataX

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…...

Spring Security

一.权限控制 1.1 认证和授权概念 问题1&#xff1a;在生产环境下我们如果不登录后台系统就可以完成这 些功能操作吗&#xff1f; 答案显然是否定的&#xff0c;要操作这些功能必须首先登录到系统才可 以。 问题2&#xff1a;是不是所有用户&#xff0c;只要登录成功就都可以操…...