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

WebSocket协议里客户端发送给服务器的数据会用4字节的掩码循环异或的分析

首先,我需要回顾WebSocket协议中对掩码处理的具体要求。根据RFC 6455,客户端发送到服务器的帧必须使用掩码,而服务器发送的帧不需要掩码。掩码是4字节的,应用于有效载荷数据,每个字节依次与掩码的对应字节异或,循环使用掩码。例如,第一个字节与掩码的第0个字节异或,第二个与第1个,第三个与第2个,第四个与第3个,第五个又回到第0个,依此类推。

用户提供的unmask函数看起来是正确的,因为它确实循环使用maskBytes数组中的四个字节,对data的每个字节进行异或操作。测试用例覆盖了空数据、数据长度小于4、超过4、全零掩码、全FF掩码以及一个实际案例(生成"Hello")。这些都是合理的测试点。

接下来,我需要考虑是否有其他边界情况或异常情况未被覆盖。例如:

  1. 掩码数组长度不等于4的情况:根据WebSocket协议,掩码必须是4字节,但函数是否对此做了处理?当前的函数假设maskBytes是4字节,如果传入的maskBytes长度不等于4,可能会导致错误。例如,如果maskBytes长度为3,i%4的结果会是0、1、2、0、1、2,这样会访问maskBytes[3],导致越界。但根据协议,这种情况不应该发生,因为客户端必须发送4字节的掩码。但函数本身是否应该添加防御性代码?用户可能希望函数在非法输入时如何处理?是否需要测试这种情况?

  2. 非Buffer类型的data输入:函数是否假设data是Buffer类型?如果传入的是其他类型(如Array、Uint8Array或字符串),可能会导致错误。但根据上下文,这个函数可能是在WebSocket服务器内部使用,确保data是Buffer,因此可能不需要处理其他类型。但测试中应确保传入的是Buffer。

  3. 性能测试:对于大数据量的处理,是否有效率问题?不过单元测试通常不涉及性能测试,除非特别要求。

  4. 字节顺序问题:是否有可能在掩码的应用顺序上出错?例如,是否应该按大端序或小端序处理?根据RFC,掩码是按顺序依次循环应用,所以函数中的i%4是正确的。

现在,回到用户的问题,他们可能希望确认现有的测试是否足够,或者是否有其他需要注意的地方。根据上述分析,现有的测试已经覆盖了主要情况,但可能需要补充对掩码长度不等于4的测试,尽管根据协议,这种情况不应出现。但为了代码的健壮性,可能需要添加错误处理,比如抛出异常,否则当maskBytes长度不是4时,函数会出错。例如,当maskBytes长度是3,i%4可能为3,此时maskBytes[3]不存在,导致错误。

但根据WebSocket协议,服务器在接收到客户端消息时,掩码必须是4字节,因此在正确的实现中,调用unmask函数之前,应该已经验证了maskBytes的长度为4。所以,在函数内部可能不需要处理这种情况,而是由上层调用者保证。因此,测试用例中可能不需要涵盖这种情况,或者可以添加一个测试用例来验证当maskBytes长度不为4时的行为,比如是否抛出错误。

但原函数并没有处理这种情况,因此在maskBytes长度不足4时,会抛出错误。例如,当maskBytes是空数组时,访问maskBytes[i%4]会越界。因此,可能需要在上层调用时确保maskBytes的长度正确,而不是在unmask函数内部处理。因此,测试用例是否应该包括这种情况?可能应该,但根据现有的测试用例,用户可能更关注正确路径,而异常处理可能由其他部分保证。

另外,考虑到JavaScript的灵活性,如果maskBytes的元素不是整数(比如是字符串或其他类型),异或操作可能会导致意外结果。例如,如果maskBytes中的某个元素是字符串"1",那么在进行异或时,会转换为NaN,导致结果错误。但在WebSocket协议的上下文中,maskBytes应该是4个字节的数组,每个元素是0-255的整数,因此这种情况应由上层输入验证处理,而不是在unmask函数中处理。因此,测试用例可能不需要考虑这些,除非想要增加鲁棒性测试。

总结,现有的测试用例已经覆盖了主要情况,但可能需要补充:

  • 测试当maskBytes长度不为4时的行为,确保函数抛出错误或正确处理(但根据协议,这不应该发生,因此可能作为异常情况处理)。

  • 确认所有测试用例中的maskBytes都是长度为4的数组,避免测试本身引入错误。

  • 考虑是否覆盖更大的数据量,例如数据长度正好是4的倍数,或者非常大的数据,以验证循环逻辑的正确性。

例如,添加一个测试用例,数据长度正好是4字节,掩码正确应用:


it('处理正好4字节的数据', function() {const mask = [0x01, 0x02, 0x03, 0x04];const data = Buffer.from([0x05, 0x06, 0x07, 0x08]);const expected = Buffer.from([0x04, 0x04, 0x04, 0x0C]); // 0x01^0x05=0x04, 0x02^0x06=0x04, 0x03^0x07=0x04, 0x04^0x08=0x0Cassert.deepStrictEqual(unmask(mask, data), expected);});

或者测试数据长度为8字节,验证掩码正确循环两次:


it('处理8字节数据,两次循环掩码', function() {const mask = [0x01, 0x02, 0x03, 0x04];const data = Buffer.from([0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C]);const expected = Buffer.from([0x01 ^ 0x05, // 0x040x02 ^ 0x06, // 0x040x03 ^ 0x07, // 0x040x04 ^ 0x08, // 0x0C0x01 ^ 0x09, // 0x080x02 ^ 0x0A, // 0x080x03 ^ 0x0B, // 0x080x04 ^ 0x0C  // 0x00]);assert.deepStrictEqual(unmask(mask, data), expected);});

此外,可能需要测试掩码中的某些字节为0的情况,例如掩码中间有零,但之前的测试用例已经覆盖了全零的情况,可能不需要特别测试。

另一个可能的测试点是当数据长度为0时,虽然已经有一个测试用例,但确认是否正确处理。

另外,确保在解掩后的数据与原始数据在应用掩码后是否一致。例如,如果原始数据是payload,应用掩码得到maskedData,再解掩应该得到payload。可以编写一个测试用例,随机生成数据和掩码,验证两次应用后恢复原数据:


it('解掩后应还原原始数据', function() {const mask = [0x37, 0xFA, 0x21, 0x3D];const originalData = Buffer.from('Hello World', 'utf8');// 应用掩码const maskedData = Buffer.alloc(originalData.length);for (let i = 0; i < originalData.length; i++) {maskedData[i] = originalData[i] ^ mask[i % 4];}// 解掩const unmaskedData = unmask(mask, maskedData);assert.deepStrictEqual(unmaskedData, originalData);});

这个测试用例可以验证函数是否正确地双向应用掩码,因为异或操作是可逆的。

综上所述,现有的测试用例已经很好,但可以进一步补充一些边缘情况,如正好4字节的数据、多次循环掩码的数据,以及验证双向应用的正确性。同时,考虑到WebSocket协议的要求,可能不需要测试非法掩码长度,但如果有需要,可以添加相应的测试用例来确保函数在非法输入时的行为(如抛出错误)。

//这个掩码可以改,进行掩码或解码时,这个必须要一样
let maskBytes=[0x55, 0xAA, 0x33, 0xCC];
//数据可以是任何数据或字符等
let data="hello wrold";//数据进行解码函数
let unmask=function(maskBytes,data)
{let payload=Buffer.alloc(data.length);for(let i=0;i<data.length;i++){payload[i]=maskBytes[i%4] ^ data[i];}return payload;
}//数据进行掩码函数
let masked=function(maskBytes,data)
{let d=Buffer.from(data);let dataload=Buffer.alloc(d.length);for(let i=0;i<d.length;i++){dataload[i]=d[i] ^ maskBytes[i%4];}//const maskData=Buffer.from(d.map((b,i)=>b^maskBytes[i%4]));return dataload;}
//进行掩码
let maskedData=masked(maskBytes,data);
//对maskedData进行解码
console.log(unmask(maskBytes,maskedData).toString());

相关文章:

WebSocket协议里客户端发送给服务器的数据会用4字节的掩码循环异或的分析

首先&#xff0c;我需要回顾WebSocket协议中对掩码处理的具体要求。根据RFC 6455&#xff0c;客户端发送到服务器的帧必须使用掩码&#xff0c;而服务器发送的帧不需要掩码。掩码是4字节的&#xff0c;应用于有效载荷数据&#xff0c;每个字节依次与掩码的对应字节异或&#xf…...

【字节青训营-9】:初探字节微服务框架 Hertz 基础使用及进阶(下)

本文目录 一、Hertz中间件Recovery二、Hertz中间件跨资源共享三、Hertz 响应四、Hertz请求五、Hertz中间件Session 一、Hertz中间件Recovery Recovery中间件是Hertz框架预置的中间件&#xff0c;使用server.Default()可以默认注册该中间件&#xff0c;为Hertz框架提供panic回复…...

新版AndroidStudio 修改 jdk版本

一、问题 之前&#xff0c;在安卓项目中配置JDK和Gradle的过程非常直观&#xff0c;只需要进入Android Studio的File菜单中的Project Structure即可进行设置&#xff0c;十分方便。 如下图可以在这修改JDK: 但是升级AndroidStudio之后&#xff0c;比如我升级到了Android Stu…...

cocos spine执行动画报错Cannot read properties of null (reading ‘data‘)

cocos v3.8.3 当想this.spine.setAnimation(0, "action1", false);播放spine动画时报错↓ 解决方法一&#xff1a; 在setAnimation之前调用this.spine.__preload() 解决方法二&#xff1a; 不要让spine或其父节点通过active显隐...

笔记:新能源汽车零部件功率级测试怎么进行?

摘要:本文旨在梳理主机厂对新能源汽车核心零部件功率级测试需求,通过试验室的主流设备仪器集成,快速实现试验方案搭建,并体现测试测量方案的时效性、便捷性优势。目标是通过提升实现设备的有效集成能力、实现多设备测试过程的有效协同、流程化测试,可快速采集、分析当前数…...

【starrocks学习】之将starrocks表同步到hive

目录 方法 1&#xff1a;通过HDFS导出数据 1. 将StarRocks表数据导出到HDFS 2. 在Hive中创建外部表 3. 验证数据 方法 2&#xff1a;使用Apache Spark同步 1. 添加StarRocks和Hive的依赖 2. 使用Spark读取StarRocks数据并写入Hive 3. 验证数据 方法 3&#xff1a;通过…...

Linux提权--SUDO提权

​sudo​ 是 Linux 中常用的特权管理工具&#xff0c;允许普通用户以其他用户&#xff08;通常是 root 用户&#xff09;的身份运行命令。如果配置不当&#xff0c;攻击者可能通过滥用 sudo​ 权限来提升自己的权限。 一.常见的 sudo 提权方法&#xff1a; 误配置的 sudo 权限&…...

【AIGC提示词系统】基于 DeepSeek R1 + Claude 的新年运势占卜系统设计与实现

提示词在最下方 DeepSeek R1调试了整体的提示词&#xff0c;使用Claude进行渲染 引言 在人工智能与传统文化交融的今天&#xff0c;如何让 AI 充分理解并传递东方玄学文化的精髓&#xff0c;成为一个极具挑战性的课题。本文将详细介绍一个基于 Claude 的新年运势占卜系统的设计…...

11. Global Object 全局对象的使用

Global Object 全局对象 1 引言2 制作全局对象3 调用全局对象4 扩展使用1 引言 全局对象适用于大量重复的对象,比如阀门,电机等,如果这些设备的基本逻辑与状态都是一样的,那么就可以使用全局对象的方法来做HMI,省时省力。并且在后期修改的时候只需要修改全局对象即可。 …...

Java synchronized锁升级

偏向锁、轻量级锁和重量级锁是Java中synchronized关键字的三种锁状态&#xff0c;用于优化多线程环境下的性能。以下是它们的简要说明&#xff1a; 1. 偏向锁&#xff08;Biased Locking&#xff09; 目的&#xff1a;减少无竞争时的锁开销。适用场景&#xff1a;只有一个线程…...

【Hadoop】Hadoop的HDFS

这里写目录标题 HDFS概述HDFS产出背景及定义HDFS产生背景HDFS定义 HDFS优缺点HDFS优点HDFS缺点 HDFS组成架构HDFS文件块大小 HDFS的Shell操作常用命令实操准备工作上传下载HDFS直接操作 HDFS的API操作客户端环境准备HDFS的API案例实操HDFS文件上传HDFS文件下载HDFS文件更名和移…...

JAVA异步的TCP 通讯-客户端

一、客户端代码示例 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.AsynchronousSocketChannel; import java.nio.channels.CompletionHandler; import java.util.concurrent.ExecutorService; impo…...

4.回归与聚类算法 4.1线性回归

4.1.1 线性回归的原理 1 线性回归应用场景&#xff1a; 房价预测 销售额度预测 金融&#xff1a;贷款额度预测&#xff0c;利用线性回归以及系数分析因子 2 什么是线性回归 1&#xff09; 定义&#xff1a;利用回归方程&#xff08;函数&#xff09;对一个或者多个自变量…...

联想拯救者开机进入bios

如果你的联想拯救者&#xff08;Lenovo Legion&#xff09;笔记本电脑开机后直接进入 BIOS 设置界面&#xff0c;可能是以下原因之一导致的。以下是解决方法&#xff1a; 1. 检查启动顺序 进入 BIOS 后&#xff0c;找到 Boot&#xff08;启动&#xff09;选项卡。检查启动顺序…...

【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(四)

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;贪心算法篇–CSDN博客 文章目录 前言例题1.合并区间2.无重叠的区间3.用最少数量的箭引爆气球…...

Junit5使用教程(3)

第三部分&#xff1a;JUnit 5 进阶 3. 动态测试 一、动态测试是什么&#xff1f; 动态测试&#xff08;Dynamic Test&#xff09;允许在运行时生成测试用例&#xff0c;而不是在编译时通过 Test 静态定义。它通过 TestFactory 注解标记的方法动态生成一组测试用例&#xff0…...

WPS中解除工作表密码保护(忘记密码)

1.下载vba插件 项目首页 - WPS中如何启用宏附wps.vba.exe下载说明分享:WPS中如何启用宏&#xff1a;附wps.vba.exe下载说明本文将详细介绍如何在WPS中启用宏功能&#xff0c;并提供wps.vba.exe文件的下载说明 - GitCode 并按照步骤安装 2.wps中点击搜索&#xff0c;输入开发…...

通向AGI之路:人工通用智能的技术演进与人类未来

文章目录 引言:当机器开始思考一、AGI的本质定义与技术演进1.1 从专用到通用:智能形态的范式转移1.2 AGI发展路线图二、突破AGI的五大技术路径2.1 神经符号整合(Neuro-Symbolic AI)2.2 世界模型架构(World Models)2.3 具身认知理论(Embodied Cognition)三、AGI安全:价…...

kamailio-osp模块

该文档详细讲解了如何在Kamailio中配置和使用OSP模块&#xff08;Open Settlement Protocol Module&#xff09;&#xff0c;以实现基于ETSI标准的安全多边对等互联&#xff08;Secure Multi-Lateral Peering&#xff09;。以下是核心内容的总结&#xff1a; 1. 模块功能 OSP模…...

【Linux网络编程】:URL(encode),HTTP协议,telnet工具

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://mp.csdn…...

SpringMVC SpringMVC响应 一、数据处理及跳转

1. 结果跳转方式 ①.ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 <bean id"templateResolver" class"org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver"><property name"p…...

C++SLT(三)——list

目录 一、list的介绍二、list的使用list的定义方式 三、list的插入和删除push_back和pop_backpush_front和pop_frontinserterase 四、list的迭代器使用五、list的元素获取六、list的大小控制七、list的操作函数sort和reversemergeremoveremove_ifuniqueassignswap 一、list的介…...

基于Coze平台实现抖音链接提取文案转小红书文案的智能体开发全流程解析

文章目录 引言:跨平台内容运营的AI解法实例最终效果1. 平台特性对比与转化需求分析1.1 用户画像与内容风格对比1.2 文案转化核心需求2. Coze平台技术架构解析2.1 Coze核心能力矩阵2.2 关键技术组件选型3. 智能体工作流设计3.1 完整处理流程3.2 关键节点说明4. 核心模块实现详解…...

32. 最长有效括号

动态规划 dp[i]表示以i下标为结尾的最长有效括号的长度&#xff0c;取dp[i]中的最大值即可。 i从1开始判断&#xff0c;只有s[i])才需要判断&#xff1a; 如果s[i-1](&#xff0c;那么dp[i]dp[i-2]2&#xff0c;注意判断i-2的范围否则&#xff0c;如果dp[i-1]>0&#xff0…...

Linux常见问题解决方法--2

如何反爬 后台对访问进行统计&#xff0c;如果单个 IP 访问超过阈值&#xff0c;予以封锁 后台对访问进行统计&#xff0c;如果单个 session 访问超过阈值&#xff0c;予以封锁 后台对访问进行统计&#xff0c;如果单个 userAgent 访问超过阈值&#xff0c;予以封锁 以上的组…...

STM32H7和F7 主要区别

STM32H7和F7系列是STMicroelectronics推出的高性能ARM Cortex-M微控制器系列&#xff0c;二者在性能、外设和用途上有显著区别。以下是它们的主要区别&#xff1a; 1. 内核与性能 STM32H7&#xff1a; 内核&#xff1a;Cortex-M7&#xff08;单核或双核&#xff0c;部分型号带…...

软件测试丨PyTorch 图像目标检测

随着人工智能和机器学习的飞速发展&#xff0c;图像目标检测技术在各个领域扮演着越来越重要的角色。无论是在安防监控、自动驾驶车辆&#xff0c;还是在医疗影像分析和智能家居中&#xff0c;图像目标检测都发挥着不可或缺的作用。今天&#xff0c;我们将深入探讨其中一种热门…...

利用TensorFlow.js实现浏览器端机器学习:一个全面指南

引言 随着深度学习技术的不断发展&#xff0c;机器学习已从传统的服务器端运算逐渐转向了前端技术。TensorFlow.js 是 Google 推出的一个用于在浏览器中进行机器学习的开源库&#xff0c;它允许开发者在浏览器中直接运行机器学习模型&#xff0c;而无需依赖后端服务器。Tensor…...

全流程安装DeepSeek开源模型

目录 安装Ollama选择大模型安装大模型对话备注 安装Ollama 安装DeepSeek首先需要安装一个Ollama&#xff0c;这个软件相当于运行DeepSeek模型的底层&#xff0c;没有这个底层就没办法跑DeepSeek AI模型。 下载地址&#xff1a; https://ollama.com/点击下载windows版本&…...

VulnHub | Prime - 1

https://vulnhub.com/entry/prime-1,358/https://vulnhub.com/entry/prime-1,358/ 0x01&#xff1a;靶场简介 Prime 1 是 VulHub 中的一台用于 OSCP 考试练习的靶机。通过本靶机&#xff0c;我们可以系统的了解的渗透测试的全流程。本靶机的通关目标如下&#xff1a; Get The…...

实验十 Servlet(一)

实验十 Servlet(一) 【实验目的】 1&#xff0e;了解Servlet运行原理 2&#xff0e;掌握Servlet实现方式 【实验内容】 1、参考课堂例子&#xff0c;客户端通过login.jsp发出登录请求&#xff0c;请求提交到loginServlet处理。如果用户名和密码相同则视为登录成功&#xff0c…...

寒假刷题Day22

一、2570. 合并两个二维数组 - 求和法 class Solution { public:vector<vector<int>> mergeArrays(vector<vector<int>>& nums1, vector<vector<int>>& nums2) {int i 0, j 0, n1 nums1.size(), n2 nums2.size();int tmp 0;…...

KES数据库实践指南:探索KES数据库的事务隔离级别

引言 前两篇文章我们详细讲解了如何安装KES金仓数据库&#xff0c;并提供了快速查询和搭建基于coze平台的智能体的解决方案。今天&#xff0c;我们的焦点将放在并发控制机制和事务隔离级别上。 本文将通过一系列实验操作&#xff0c;深入探讨KES数据库中的并发控制机制和事务…...

基于STM32的智能加湿器设计(新版本)

目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 &#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是加湿器。设备的详细功能见网盘中的文章《12、基于…...

Electricity Market Optimization 探索系列(三)

本文参考链接link 电网容量规划是一个寻求最优发电容量的过程&#xff0c;找到的最优发电容量能够可靠地满足未来电网的需求 发电机的容量和发电成本呈正相关关系&#xff0c;一台发电机的发电量不能超过其额定发电容量&#xff0c;结合我之前的博客所说的内容&#xff0c;可…...

JAVA进阶之线程

为神马有线程&#xff1f;这玩意儿在干嘛&#xff1f;&#xff1f;&#xff1f; 回答这个问题&#xff0c;就先要知道一点点计算机的工作方式。 总所周知&#xff0c;计算机有五部分&#xff1a;输入输出、计算器、存储器、控制器。而在计算机内&#xff0c;CPU、内存、I/O之…...

浙江安吉成新照明电器有限公司分布式光伏发电项目--安科瑞Acrel-1000DP分布式光伏监控系统

安科瑞 崔丽洁 项目背景 随着可再生能源的发展&#xff0c;分布式光伏发电成为重要的能源利用方式。浙江安吉成新照明电器有限公司 3234.465kWp 分布式光伏发电项目应运而生。该公司是螺旋节能灯毛管专业生产企业&#xff0c;于 2007 年 6 月成立&#xff0c;具备全自动生产线、…...

pytorch实现主成分分析 (PCA):用于数据降维和特征提取

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 使用 PyTorch 实现主成分分析&#xff08;PCA&#xff09;可以通过以下步骤进行&#xff1a; 标准化数据&#xff1a;首先&#xff0c;需要对数据进行标准化处理&#xff0c;确保每个特征的均值为 0&#xff0c;方差…...

2025_2_4 C语言中关于free函数及悬空指针,链表的一级指针和二级指指针

1.free函数 free函数所接受的参数只能是动态分配出来的内存&#xff0c;&#xff0c;否者free的行为是未定义的同一片内存空间不能被free两次 free过后的内存可能会引发悬空指针的问题 2.悬空指针 悬空指针的问题主要是free过后的内存空间&#xff0c;原先指向这片空间的指…...

pytorch逻辑回归实现垃圾邮件检测

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 完整代码&#xff1a; import torch import torch.nn as nn import torch.optim as optim from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split …...

一次线程数超限导致的hive写入hbase作业失败分析

1.集群配置 操作系统:SuSe操作系统 集群节点:100台相同配置的服务器 单台:核心112Core,内存396G 2.问题现象 现象1:跑单个入库任务报错,批量提交任务后出现OOM异常 执行12个hivesql,将数据写入hbase.hbase入库有近一半的任务报错。 每次报错的任务不是同一个,hivesql…...

JAVA安全—反射机制攻击链类对象成员变量方法构造方法

前言 还是JAVA安全&#xff0c;哎&#xff0c;真的讲不完&#xff0c;太多啦。 今天主要是讲一下JAVA中的反射机制&#xff0c;因为反序列化的利用基本都是要用到这个反射机制&#xff0c;还有一些攻击链条的构造&#xff0c;也会用到&#xff0c;所以就讲一下。 什么是反射…...

Java集合面试总结(题目来源JavaGuide)

问题1&#xff1a;说说 List,Set,Map 三者的区别&#xff1f; 在 Java 中&#xff0c;List、Set 和 Map 是最常用的集合框架&#xff08;Collection Framework&#xff09;接口&#xff0c;它们的主要区别如下&#xff1a; 1. List&#xff08;列表&#xff09; 特点&#xf…...

【区块链】深入理解椭圆曲线密码学(ECC)

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 深入理解椭圆曲线密码学(ECC)1. 概述2. 椭圆曲线的数学基础2.1 基本定义2.2 有限…...

接口游标分页

由于数据库本身的的限制(以MySQL为例),以 page_num,page_size 为代表的偏移分页方式不可避免的会遇到深分页问题。 不过用户若要找符合条件的少量数据,通过翻页则十分低效,且大多用户也不会往后翻很多页,故对于C端筛选数据场景,限制分页数量增加筛选条件才是标准解决方…...

大数据数仓实战项目(离线数仓+实时数仓)2

目录 1.课程目标和课程内容介绍 2.数仓维度建模设计 3.数仓为什么要分层 4.数仓分层思想和作用 5.数仓中表的种类和同步策略 6.数仓中表字段介绍以及表关系梳理 订单表itcast_orders 订单明细表 itcast_order_goods 商品信息表 itcast_goods 店铺表 itcast_shops 商…...

C++输入输出(上)

cin和cout cin是C中提供的标准输入流对象,一般针对的是键盘,也就是从键盘上输入的字符流,使用 cin来进行数据的提取,cin一般是和 >> (流提取运算符) 配合使用的。 cin的功能和scanf是类似的 cout是C中提供的标准输出流对象,一般针对的是控制台的窗口,也就是将数据以字符…...

SpringBoot 连接Elasticsearch带账号密码认证 ES连接 加密连接

依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency>配置文件 es:ip: 172.23.4.130port: 9200user: elasticpassword: qwertyuiop读取配置文件…...

选择排序

选择排序的基本思想&#xff1a; 每⼀次从待排序的数据元素中选出最⼩&#xff08;或最⼤&#xff09;的⼀个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待 排序的数据元素排完。 直接选择排序 1. 在元素集合 array[i]--array[n-1] 中选择关键码最⼤(⼩)的数据…...

Linux——进程概念

目录 一、系统调用和库函数概念二、基本概念三、描述进程-PCB3.1 task_struct-PCB的一种3.2 task_ struct内容分类 四、组织进程五、查看进程六、通过系统调用获取进程标示符七、通过系统调用创建进程- fork初始7.1 fork函数创建子进程7.2 fork 之后通常要用 if 进行分流 八、进…...