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

深入理解JavaScript设计模式之迭代器模式

文章目录

  • 深入理解JavaScript设计模式之迭代器模式
    • 定义
      • 官方翻译
      • 白话翻译
    • 实现jQuery中的each迭代器
      • 实现数组迭代器
      • 迭代器实现创建Dom元素
    • 内部迭代器和外部迭代器
      • 内部迭代器
      • 外部迭代器
    • 迭代类数组对象和字面量对象
    • 倒序迭代器
    • 中止迭代器
    • 迭代器的应用举例
      • 音乐播放器
      • 案例待输出更新。。。
    • 总结

深入理解JavaScript设计模式之迭代器模式

定义

官方翻译

迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,不用关心对象你的内部构造也可以按顺序访问其中的每个元素。

白话翻译

为遍历不同数据结构的集合提供统一的接口,能遍历访问集合数据中的项,不用关心项的数据结构。

实现jQuery中的each迭代器

实现数组迭代器

很简单,就是创建一个高阶函数结构两个参数,一个参数为数组,另外一个参数为调用此函数的回调函数,回调函数中返回遍历对象的下标与对应下标值。

<html><body><script>var each = function (arr, callback) {for (var i = 0, l = arr.length; i < l; i++) {callback.call(arr, i, arr[i]);}};each([1, 2, 3], function (i, n) {console.log(i, n);});</script></body>
</html>

深入理解JavaScript设计模式之迭代器设计模式

迭代器实现创建Dom元素

在很多原生开发业务中,需要批量创建n个指定元素,也可以将迭代与业务区分开来实现,如下代码根据数组中的内容动态创建li元素,业务模式与迭代方法分类分离的设计模式。

<html><body><ul id="list"></ul><script>var each = function (arr, callback) {for (var i = 0, l = arr.length; i < l; i++) {callback.call(arr, i, arr[i]);}};each([1, 2, 3], function (i, n) {var oli = document.createElement("li");oli.innerHTML = n;list.appendChild(oli);});</script></body>
</html>

深入理解JavaScript设计模式之迭代器设计模式

内部迭代器和外部迭代器

内部迭代器

上面代码中的each函数属于内部迭代器,each函数的内部已经定义好了迭代规则,each完全接手整个迭代过程,外部只需要依次调用,内部迭代器很方便,不用关心迭代器内部的实现,跟迭代器的交互也就是一次调用。但是也有缺点,由于内部迭代器的迭代规则已经被规定死,上面的each函数就无法同时迭代两个数组了,如果有需求要求迭代两个数组,判断两个数组是否相等,如果不该写内部迭代器each的代码,只能在外部套一个compare的方法进行数组相等逻辑的判断。

<html><body><ul id="list"></ul><script>var each = function (arr, callback) {for (var i = 0, l = arr.length; i < l; i++) {callback.call(arr, i, arr[i]);}};var compare = function (ary1, ary2) {if (ary1.length !== ary2.length) {throw new Error("ary1 和 ary2 不相等");}each(ary1, function (i, n) {if (n !== ary2[i]) {throw new Error("ary1 和 ary2 不相等");}});console.log("ary1 和 ary2 相等");};compare([1, 2, 3], [1, 2, 4]); // throw new Error ( 'ary1 和 ary2 不相等' )</script></body>
</html>

深入理解JavaScript设计模式之迭代器设计模式
上面写的compare函数真的难看难懂,但是好歹可以完成需求。

外部迭代器

部迭代器必须显式地请求迭代下一个元素。外部迭代器增加了一些调用的复杂度,但相对也增强了迭代器的灵活性,我们可以手工控制迭代的过程或者顺序。
定义一个Iterator函数,接收一个对象或者数组作为参数,返回一个包含三个方法的对象next,isDonegetCurrItem,它们允许外部代码控制迭代过程。
改写compare方法,compare接收两个迭代器作为参数,并逐一比较这两个迭代器所指向的元素,如果任意两个迭代器对应的元素不相等,就抛出错误不相等,如果元素都相等且两个迭代器都达到了莫问,则弹出警告,显示相等。

<html><body><ul id="list"></ul><script>var Iterator = function (obj) {var current = 0;var next = function () {current += 1;};var isDone = function () {return current >= obj.length;};var getCurrItem = function () {return obj[current];};return {next: next,isDone: isDone,getCurrItem: getCurrItem,};};var compare = function (iterator1, iterator2) {while (!iterator1.isDone() && !iterator2.isDone()) {if (iterator1.getCurrItem() !== iterator2.getCurrItem()) {throw new Error("iterator1 和 iterator2 不相等");}iterator1.next();iterator2.next();}console.log("iterator1 和 iterator2 相等");};var iterator1 = Iterator([1, 2, 3]);var iterator2 = Iterator([1, 2, 3]);compare(iterator1, iterator2); // 输出:iterator1 和 iterator2 相等</script></body>
</html>

深入理解JavaScript设计模式之迭代器设计模式

迭代类数组对象和字面量对象

有时候迭代器需要迭代遍历数组也能迭代遍历对象的需求,其实就是在上面的方法中添加一个if判断,判断是否是数组和对象,通过for或者for in进行遍历即可。

<html><body><script>var each = function (obj, callback) {var value,i = 0,length = obj.length,isArray = Array.isArray.apply(obj);if (isArray) {// 迭代类数组for (; i < length; i++) {value = callback.call(obj[i], i, obj[i]);if (value === false) {break;}}} else {for (i in obj) {// 迭代 object 对象value = callback.call(obj[i], i, obj[i]);if (value === false) {break;}}}return obj;};each([1, 2, 3, 4, 5], function (i, v) {console.log(i, v);});console.log("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");each({ a: 1, b: 2, c: 3, d: 4, e: 5 }, function (i, v) {console.log(i, v);});</script></body>
</html>

深入理解JavaScript设计模式之迭代器设计模式

倒序迭代器

倒序遍历数组输出,其实就是长度高到低判断:

<html><body><script>var reverseEach = function (ary, callback) {for (var l = ary.length - 1; l >= 0; l--) {callback(l, ary[l]);}};reverseEach([0, 1, 2], function (i, n) {console.log(n); // 分别输出:2, 1 ,0});</script></body>
</html>

深入理解JavaScript设计模式之迭代器设计模式

中止迭代器

上面代码中有这么一段,迭代器可以像普通for循环中的break一样,可以跳出循环方法,如果回调函数的执行结果返回false,则提前终止循环。

if (isArray) {// 迭代类数组for (; i < length; i++) {value = callback.call(obj[i], i, obj[i]);if (value === false) {break;}}
} 

代码展示如下,如果i>2则跳出循环即可。return false。

<html><body><script>var each = function (obj, callback) {var value,i = 0,length = obj.length,isArray = Array.isArray.apply(obj);if (isArray) {// 迭代类数组for (; i < length; i++) {value = callback.call(obj[i], i, obj[i]);if (value === false) {break;}}} else {for (i in obj) {// 迭代 object 对象value = callback.call(obj[i], i, obj[i]);if (value === false) {break;}}}return obj;};each([1, 2, 3, 4, 5], function (i, v) {if (i > 2) {return false;}console.log("each", i, v);});</script></body>
</html>

深入理解JavaScript设计模式之迭代器设计模式

迭代器的应用举例

音乐播放器

场景一、假设我们正在开发一个音乐播放列表功能,需要实现一个可以逐首播放歌曲的播放器,并支持“下一首”、“重置”等功能。

有一个歌曲数组。
可以按顺序播放歌曲。
支持“下一首”、“当前歌曲”、“是否播放完毕”等操作。

使用外部迭代器实现:

<html><body><script>function PlaylistIterator(songs) {let index = 0;return {next() {return index < songs.length? { value: songs[index++], done: false }: { done: true };},current() {return songs[index];},reset() {index = 0;},hasNext() {return index < songs.length;},};}// 使用示例const songs = ["Song X", "Song Y", "Song Z"];const player = PlaylistIterator(songs);console.log(player.next().value); // Song Xconsole.log(player.next().value); // Song Yconsole.log(player.hasNext()); // trueconsole.log(player.next().value); // Song Zconsole.log(player.hasNext()); // falseplayer.reset(); // 从头开始console.log(player.next().value); // Song X(重新开始)</script></body>
</html>

深入理解JavaScript设计模式之迭代器设计模式

案例待输出更新。。。

总结

设计模式不是“炫技”,而是"沉淀",希望通过阅读和学习《JavaScript设计模式》和实践中,在显示业务需求开发中写出更具有可维护性,可扩展性的代码。

致敬—— 《JavaScript设计模式》· 曾探

相关文章:

深入理解JavaScript设计模式之迭代器模式

文章目录 深入理解JavaScript设计模式之迭代器模式定义官方翻译白话翻译 实现jQuery中的each迭代器实现数组迭代器迭代器实现创建Dom元素 内部迭代器和外部迭代器内部迭代器外部迭代器 迭代类数组对象和字面量对象倒序迭代器中止迭代器迭代器的应用举例音乐播放器案例待输出更新…...

【项目管理】项目管理资料文档模板(ZIP,PPT,WORD)

项目交付文档 01项目详细调研计划编写规范V1.0.doc 03项目详细调研报告编写规范V1.0.doc 07软件需求规格说明书评审规范V1.0.doc 10.软件需求规格说明.doc 产品检查单,xls 工程评审.zip 软件标准过程集.zip 系统测试管理规程.docx 四)项目管理计划.doc 项目管理系统实施项目管理…...

DeepSeek中的提示库及其用法示例

《DEEPSEEK原生应用与智能体开发实践 图书》【摘要 书评 试读】- 京东图书 为了深入探索DeepSeek提示词样例的丰富内涵&#xff0c;充分挖掘其背后潜藏的无限可能&#xff0c;同时致力于为用户打造更为卓越、便捷且高效的使用体验&#xff0c;DeepSeek官网的API文档匠心独运地…...

292. Nim 游戏

292. Nim 游戏 - 力扣&#xff08;LeetCode&#xff09; 想法 枚举问题&#xff1a; n 1 ~ 3 &#xff0c;由于我先手&#xff0c;我可以直接拿走全部的石头&#xff0c;所以我赢n 4&#xff0c;由于我先手&#xff0c;我拿掉 1 - 3 块石头 &#xff0c;剩下的可能就是 1 -…...

STM32 串口通信②:蓝牙模块HC-05控制单片机

一 前言 上一篇我们已经成功实现单片机和电脑的连接&#xff0c;接下来&#xff0c;我们学习一个有趣的板块&#xff0c;HC-05蓝牙模块&#xff0c;这个蓝牙模块&#xff0c;我们就要建立手机和单片机的通讯啦&#xff0c;还是比较有趣的一个过程&#xff0c;大家可以跟着多操作…...

艾立泰数字化重塑汽车零部件包装租赁行业

在汽车零部件包装租赁行业&#xff0c;资产利用率低、流转效率差、运输成本高等痛点长期困扰企业。艾立泰科技通过数字化解决方案&#xff0c;成为该行业降本增效的关键合作伙伴&#xff0c;助力企业实现从传统管理模式向智能化的跃迁。 精准库存管理&#xff1a;告别“盲人摸…...

Windows电脑数据恢复终极指南:从原理到实战

Windows电脑数据恢复终极指南&#xff1a;从原理到实战 数据丢失是每个电脑用户都可能遭遇的噩梦。本文将为您全面解析Windows平台下的数据恢复技术&#xff0c;从基础原理到高级技巧&#xff0c;帮助您在文件误删、格式化、系统崩溃等情况下找回宝贵数据。 一、数据恢复基础…...

进入python虚拟环境的方法

首先&#xff0c;切换到虚拟环境所在的目录&#xff08;即包含venv文件夹的目录&#xff09;&#xff1a; Cmd cd D:\phd\phd1spring\July\pythonstduy\projecton 然后&#xff0c;激活虚拟环境&#xff1a; Cmd .\venv\Scripts\activate 如果上述方法不行&#xff0c;还可…...

大数据时代UI前端的变革:从静态展示到动态交互

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在大数据时代&#xff0c;信息以前所未有的速度和规模增长。这种数据环境的变化&#xff0c;深…...

海拔案例分享-门店业绩管理小程序

在各大电商平台和直播带货如火如荼来的当下&#xff0c;各行各业的门店都在积极寻求创新的管理方式&#xff0c;以提升业绩、优化运营。长沙的一家策划运营公司&#xff0c;敏锐地捕捉到这一市场需求&#xff0c;他们见过太多门店老板对着Excel表格叹气&#xff1a;美容店算错提…...

Python中的数据可视化:使用Matplotlib绘制图表

数据可视化是将复杂数据集转换为图形或图像表示的过程&#xff0c;旨在简化信息的解释和传达。Python作为一种多功能编程语言&#xff0c;提供了多种强大的库来实现这一目标&#xff0c;其中最受欢迎和广泛使用的是Matplotlib。 首先&#xff0c;我们需要确保已经安装了必要的…...

【VUE】1.准备工作

一、环境准备&#xff08;本机仅需一次&#xff09; 安装 Node.js&#xff08;推荐 LTS 版本&#xff0c;包含 npm&#xff09; 打开 VSCode&#xff0c;安装插件&#xff08;推荐&#xff09;&#xff1a; Vetur 或 Volar&#xff08;用于 Vue 支持&#xff09; ESLint / Pr…...

Linux下的版本控制器Git(15)

文章目录 如何理解版本控制&#xff08;9-0.00.00&#xff09;Git 的理解Git 的历史具体操作和用法补充细节 简介&#xff1a;那个对Git的理解&#xff0c;是我用自己的话语结合故事进行阐述&#xff0c;可能理解的不到位&#xff0c;有些错误还请多多包含&#xff01;说句实话…...

UI设计 | 审美积累 | 极繁风格(Maximalism / Complex UI)

如果极简追求“只保留必须的”&#xff0c;那极繁的设计思路就是“有条理地堆叠信息和情绪”。它不是无序的炫技&#xff0c;而是在秩序中有意识地填满视觉空间&#xff1a;字体层叠、图文混排、大量干扰信息并置&#xff0c;却又彼此克制。最终目标&#xff0c;是让用户在强信…...

MocapApi 中文文档 和github下载地址 NeuronDataReader(以下简称 NDR)的下一代编程接口

以下是 MocapApi 技术文档 github https://github.com/pnmocap/MocapApi?tabreadme-ov-file 国内可以查找getcode 英文文档 https://mocap-api.noitom.com/mocap_api_en.html 概述 MocapApi 是 NeuronDataReader&#xff08;以下简称 NDR&#xff09;的下一代编程接口&…...

c++面试题每日一学记录-C++类型转换

一、C++ 类型转换体系 C++ 提供 4 种命名转换操作符,比 C 风格转换更安全、意图更明确: 转换类型关键字主要用途安全检查静态转换static_cast相关类型转换(数值、类层次上行/下行)编译期动态转换dynamic_cast多态类型的安全下行转换运行时常量转换const_cast添加/移除 con…...

Maven 多模块项目调试与问题排查总结

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

【C#】C#异步编程:异步延时 vs 阻塞延时深度对比

文章目录 前言一、阻塞延时&#xff1a;Thread.Sleep1、 实现方式2、 工作原理3、 缺点 二、异步延时&#xff1a;Task.Delay1、 实现方式2、 工作原理3、 优点 三、深度对比四、实际应用示例对比1、 阻塞延时在UI应用中的问题2、 异步延时在UI应用中的正确用法3、 带取消功能的…...

c#实现halcon的rle编码blob分析

效果展示 实现功能 connection膨胀腐蚀开运算闭运算特征计算 核心代码 using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Drawing; using System.Linq;namespace view3d {// 基础对象类&#xff0c;类似于 Halcon 的 HO…...

python基于微信小程序的广西文化传承系统

文章目录 具体实现截图本项目支持的技术路线源码获取详细视频演示&#xff1a;文章底部获取博主联系方式&#xff01;&#xff01;&#xff01;&#xff01;本系统开发思路进度安排及各阶段主要任务java类核心代码部分展示主要参考文献&#xff1a;源码获取/详细视频演示 ##项目…...

Apache Flink深度解析:现代流处理引擎

好的,我来帮您写一篇关于Flink技术的详细介绍博客: Apache Flink深度解析:现代流处理引擎 一、Flink简介 Apache Flink是一个开源的分布式流处理和批处理统一计算引擎。它提供了数据流上的状态计算、精确一次性语义保证、高吞吐、低延迟等特性,能够运行在所有常见的集群…...

跨平台后端编程ASP.NET CORE Razor新一代Web开发框架C#

asp.net core Razor动态语言编程代替asp.net .aspx更高级吗&#xff1f; https://blog.csdn.net/xiaoyao961/article/details/148846065 C#Blazor应用-跨平台WEB开发VB.NET-CSDN博客 https://blog.csdn.net/xiaoyao961/article/details/148846437 Products.razor文件,Blazor和…...

【开源工具】一键解决使用代理后无法访问浏览器网页问题 - 基于PyQt5的智能代理开关工具开发全攻略

&#x1f310;【开源工具】一键解决使用代理后无法访问浏览器网页问题 - 基于PyQt5的智能代理开关工具开发全攻略 &#x1f308; 个人主页&#xff1a;创客白泽 - CSDN博客 &#x1f525; 系列专栏&#xff1a;&#x1f40d;《Python开源项目实战》 &#x1f4a1; 热爱不止于代…...

uniapp安卓GPIO电平控制

模块简介 本模块为 UniApp 提供了对 Android 系统下 GPIO 的访问能力&#xff0c;支持导出、设置方向、读写电平值等操作。适用于 Android 架构设备&#xff08;如 RK3288 平台&#xff09;。 支持功能 功能方法名说明初始化 GPIO 方向initGpio({gpio, direction})设置 GPIO…...

苹果芯片macOS安装版Homebrew(亲测)

在Linux服务器上安装一个软件常用yum&#xff0c;apt、dnf命令&#xff0c;同样macOS可以使用brew命令来安装软件。 brew会自动帮你下载、解压、安装和配置&#xff0c;更重要的是&#xff1a;它还会自动处理好软件之间的依赖关系&#xff0c;它将所有软件都安装在独立的统一目…...

vue | vue-macros 插件升级以及配置

Vue Macros 是一个为 Vue.js 提供更多宏和语法糖的开源项目vue-macros/vue-macros: Explore and extend more macros and syntax sugar to Vue. 问题&#xff1a;npm run build-only 打包时&#xff0c;报错&#xff1a;[Vue] Load plugin failed: vue-macros/volar 排查发现…...

计算机网络:(六)超详细讲解数据链路层 (附带图谱表格更好对比理解)

计算机网络&#xff1a;&#xff08;六&#xff09;超详细讲解数据链路层 前言一、数据链路层1. 数据链路层是什么&#xff1f;2. 哪些设备需要数据链路层&#xff1f;3. 数据链路层如何工作&#xff1f;4. 数据链路层的俩种信道4.1 点对点信道&#xff1a;一对一4.2 广播信道&…...

智能生成分析报告系统在危化安全生产监测预警评估中的应用

一、引言 在危险化学品安全生产监管中&#xff0c;传统的分析报告依赖人工整理与审核&#xff0c;效率低、响应慢&#xff0c;且极易受到主观判断、格式不规范、不同地区掌握尺度不一致的影响。而随着工业互联网、大数据、人工智能&#xff08;AI&#xff09;特别是大语言模型…...

微算法科技(NASDAQ:MLGO)研发可信共识算法TCA,解决区块链微服务中的数据一致性与安全挑战

随着区块链技术的不断演进和应用场景的拓展&#xff0c;微服务架构因其灵活性、可扩展性以及易于维护的特点&#xff0c;逐渐成为了构建复杂系统的首选架构模式。如何在微服务架构中有效应用区块链技术&#xff0c;确保数据的一致性和安全性&#xff0c;成为了一个亟待解决的问…...

UE5 开发遇到的bug整理

文章目录 一、人物在挂载某个Actor之后&#xff0c;移动有问题&#xff0c;可能是Actor类的碰撞没有关闭&#xff0c;和人物自身发生了碰撞。 一、人物在挂载某个Actor之后&#xff0c;移动有问题&#xff0c;可能是Actor类的碰撞没有关闭&#xff0c;和人物自身发生了碰撞。...

单片机——浮点数转换4位数码管显示

浮点数转换4位数码管显示 static char buffer[5]; int DecimalPlace 0; #define HideChar h void DisplayFloatOn4LED(float value) {long integer roundf(value );if (integer > 9999) //4位{integer 9999;snprintf(buffer, sizeof(buffer), "%4ld", integer…...

广东省专升本英语形容词与副词全梳理

一、形容词核心知识详解 &#xff08;一&#xff09;形容词的构成方式&#xff08;附记忆技巧&#xff09; 1. 后缀派生法&#xff08;9 大核心后缀&#xff09; ① -ly 结尾形容词&#xff08;易混副词&#xff0c;重点记忆&#xff09; ✅ 特点&#xff1a;虽以 - ly 结尾…...

GeoServer和GeoTools XML外部实体注入漏洞(CVE-2025-30220)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...

Python Django全功能框架开发秘籍

本文在创作过程中借助 AI 工具辅助资料整理与内容优化。图片来源网络。 文章目录 引言一、Django 简介1.1 Django 的诞生与背景1.2 Django 的特点概述 二、Django 的核心特性2.1 ORM 特性2.1.1 ORM 原理与优势2.1.2 ORM 在实际应用中的优势 2.2 模板引擎2.2.1 模板引擎的工作机…...

四核 A53+工业级存储:移远 SC200L 与 pSLC SD NAND 如何重构 T-BOX 性能边界?

博客目录 一、移远 SC200L&#xff1a;T-BOX 的 “智慧大脑”二、米客方德 MKDN064GIL-ZA T-BOX&#xff1a;数据安全的坚固堡垒三、深度协同&#xff1a;拓展 T-BOX 应用边界 在车联网浪潮席卷而来的当下&#xff0c;T-BOX 作为汽车与外界交互的核心枢纽&#xff0c;其性能优劣…...

docker方式启动Jenkins

docker方式启动Jenkins 1.启动命令 我已经打包好了文件,如下命令即可启动 docker run -d -v jenkins_home:/var/jenkins_home -p 8088:8080 -p 50000:50000 --restarton-failure registry.cn-hangzhou.aliyuncs.com/devops_de/jenkins:lts-jdk17 还需要设置一下目录权限,要…...

【目标检测】图像处理基础:像素、分辨率与图像格式解析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

国产免费的k8s管理平台

xkube是一款永久免费且无任何功能限制的k8s集群管理平台&#xff0c;提供PC端和移动端全平台支持&#xff0c;具备完善的集群管理、运维监控和CI/CD发布功能&#xff0c;让企业轻松实现跨集群的统一管理和自动化运维。 技术特点&#xff1a; 1、xkube是一款国产永久免费的k8s…...

火山引擎大模型未来发展趋势

用户可能正在做技术选型或者行业研究&#xff0c;需要预测火山引擎在激烈竞争中的突围方向。从问题简洁性看&#xff0c;ta可能已经有一定基础认知&#xff0c;不需要我从零科普大模型概念。 火山引擎作为字节跳动的技术输出平台&#xff0c;优势在于背靠抖音、今日头条等超级应…...

Java基础(三):逻辑运算符详解

Java基础系列文章 Java基础(一)&#xff1a;发展史、技术体系与JDK环境配置详解 Java基础(二)&#xff1a;八种基本数据类型详解 Java基础(三)&#xff1a;逻辑运算符详解 目录 一、什么是逻辑运算符&#xff1f;二、基础逻辑运算符&#xff08;3种&#xff09;1、&&…...

设计模式 | 单例模式

单例模式&#xff08;Singleton Pattern&#xff09; 是设计模式中最简单却最常用的模式之一&#xff0c;它确保一个类只有一个实例&#xff0c;并提供全局访问点。本文将深入探讨单例模式的核心思想、实现技巧以及在C中的多种实现方式。 为什么需要单例模式&#xff1f; 在软…...

SQL_Server 基本语法

1.创建数据库 use master go if exists(select * from sysdatabases where nameCourseManageDB) drop database CourseManageDB go --创建数据库 create database CourseManageDB on primary (--数据库的逻辑文件名&#xff08;就是系统用的&#xff0c;必须唯一&#xff09…...

剑指offer39_连续子数组的最大和

连续子数组的最大和 输入一个 非空 整型数组&#xff0c;数组里的数可能为正&#xff0c;也可能为负。 数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。 要求时间复杂度为 O ( n ) O(n) O(n)。 数据范围 数组长度 [ 1 , 1000 ] [1,1000] [1,100…...

SPL 实践系列:跨库移植 SQL

背景 应用程序可能要基于不同数据库工作&#xff0c;各种数据库的 SQL 语法大体一致&#xff0c;但仍有些差别&#xff0c;结果就要改造这些 SQL&#xff0c;而这事通常只能手工调整&#xff0c;工作量大还容易出错。 完全自动改造 SQL 几乎是无法做到的&#xff0c;毕竟各种…...

docker启动的rabbitmq搭建并集群和高可用

Docker 搭建 RabbitMQ 集群步骤 以下是使用 Docker 快速搭建 RabbitMQ 集群的详细步骤&#xff0c;包含配置文件、网络设置和集群组建过程。 1. 创建自定义网络 首先创建一个 Docker 网络&#xff0c;使容器间可以通过名称互相访问&#xff1a; docker network create rabb…...

ISCSI存储

ISCSI存储 一、iscsi简介 1. 基本概念 iSCSI&#xff08;Internet Small Computer System Interface&#xff09;即互联网小型计算机系统接口&#xff0c;它是一种基于 TCP/IP 协议的存储网络协议&#xff0c;将传统的 SCSI&#xff08;Small Computer System Interface&…...

算法与数据结构:动态规划DP

文章目录 动态规划算法全面解析一、核心思想与基本概念二、动态规划与其他算法的区别三、动态规划的解题步骤四、经典案例解析1. **斐波那契数列&#xff08;Fibonacci&#xff09;**2. **0-1背包问题&#xff08;0-1 Knapsack&#xff09;**3. **最长公共子序列&#xff08;LC…...

核心概念解析:AI、数据挖掘、机器学习与深度学习的关系

核心概念解析&#xff1a;AI、数据挖掘、机器学习与深度学习的关系 本节旨在厘清人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;、深度学习&#xff08;DL&#xff09;、数据挖掘等常被混淆的概念及其相互关系。 1. 从应用目标看&#xff1a;人工智…...

跨域视角下强化学习重塑大模型推理:GURU框架与多领域推理新突破

跨域视角下强化学习重塑大模型推理&#xff1a;GURU框架与多领域推理新突破 大语言模型&#xff08;LLM&#xff09;推理能力的提升是AI领域的重要方向&#xff0c;强化学习&#xff08;RL&#xff09;为此提供了新思路。本文提出的GURU框架&#xff0c;通过构建跨领域RL推理语…...

黑马python(十三)

目录&#xff1a; 1.文件编码概念 2.文件的读取操作 3.文件的写入操作 4.文件的追加写操作 5.文件操作的综合案例 1.文件编码概念 2.文件的读取操作 多次调用read或相关读取方法会接着上一次读取的记录读 如果文件没有关闭&#xff0c;只要程序还在运行&#xff0c;文件…...