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

设计模式之解释器模式:原理、实现与应用

引言

解释器模式(Interpreter Pattern)是一种行为型设计模式,它定义了一种语言的文法表示,并提供一个解释器来解释该语言中的句子。解释器模式适用于需要解析特定语法规则的场景,如正则表达式、SQL解析等。本文将深入探讨解释器模式的原理、实现方式以及实际应用场景,帮助你更好地理解和使用这一设计模式。


1. 解释器模式的核心概念

1.1 什么是解释器模式?

解释器模式是一种行为型设计模式,它定义了一种语言的文法表示,并提供一个解释器来解释该语言中的句子。解释器模式适用于需要解析特定语法规则的场景。

1.2 解释器模式的应用场景
  • 特定领域语言:如正则表达式、SQL解析等。

  • 语法分析:如编译器、解释器等。

  • 规则引擎:如业务规则解析、条件判断等。


2. 解释器模式的实现方式

2.1 基本结构

解释器模式通常包含以下几个角色:

  • 抽象表达式(Abstract Expression):定义解释操作的接口。

  • 终结符表达式(Terminal Expression):实现与文法中的终结符相关的解释操作。

  • 非终结符表达式(Nonterminal Expression):实现与文法中的非终结符相关的解释操作。

  • 上下文(Context):包含解释器之外的一些全局信息。

  • 客户端(Client):构建语法树并调用解释操作。

2.2 代码示例
// 抽象表达式
public interface Expression {boolean interpret(String context);
}// 终结符表达式
public class TerminalExpression implements Expression {private String data;public TerminalExpression(String data) {this.data = data;}@Overridepublic boolean interpret(String context) {return context.contains(data);}
}// 非终结符表达式
public class OrExpression implements Expression {private Expression expr1;private Expression expr2;public OrExpression(Expression expr1, Expression expr2) {this.expr1 = expr1;this.expr2 = expr2;}@Overridepublic boolean interpret(String context) {return expr1.interpret(context) || expr2.interpret(context);}
}public class AndExpression implements Expression {private Expression expr1;private Expression expr2;public AndExpression(Expression expr1, Expression expr2) {this.expr1 = expr1;this.expr2 = expr2;}@Overridepublic boolean interpret(String context) {return expr1.interpret(context) && expr2.interpret(context);}
}// 客户端代码
public class Client {public static void main(String[] args) {Expression robert = new TerminalExpression("Robert");Expression john = new TerminalExpression("John");Expression orExpression = new OrExpression(robert, john);Expression julie = new TerminalExpression("Julie");Expression married = new TerminalExpression("Married");Expression andExpression = new AndExpression(julie, married);System.out.println("John is male? " + orExpression.interpret("John"));System.out.println("Julie is a married woman? " + andExpression.interpret("Married Julie"));}
}

3. 解释器模式的最佳实践

3.1 文法设计
  • 简单文法:解释器模式适用于简单的文法规则,复杂的文法可能导致类膨胀。

  • 递归结构:非终结符表达式通常采用递归结构来处理复杂的文法规则。

3.2 性能优化
  • 共享表达式:通过共享终结符表达式来减少对象创建的开销。

  • 缓存结果:对于频繁解释的表达式,可以缓存解释结果以提高性能。

3.3 遵循开闭原则
  • 扩展性:通过添加新的表达式类,可以轻松扩展语言的文法规则。

  • 灵活性:解释器模式使得系统更加灵活,易于维护和扩展。


4. 解释器模式的实际应用

4.1 正则表达式

在正则表达式中,解释器模式用于解析和匹配字符串。

// 抽象表达式
public interface RegexExpression {boolean interpret(String context);
}// 终结符表达式
public class LiteralExpression implements RegexExpression {private String literal;public LiteralExpression(String literal) {this.literal = literal;}@Overridepublic boolean interpret(String context) {return context.contains(literal);}
}// 非终结符表达式
public class OrExpression implements RegexExpression {private RegexExpression expr1;private RegexExpression expr2;public OrExpression(RegexExpression expr1, RegexExpression expr2) {this.expr1 = expr1;this.expr2 = expr2;}@Overridepublic boolean interpret(String context) {return expr1.interpret(context) || expr2.interpret(context);}
}// 客户端代码
public class Client {public static void main(String[] args) {RegexExpression hello = new LiteralExpression("Hello");RegexExpression world = new LiteralExpression("World");RegexExpression orExpression = new OrExpression(hello, world);System.out.println("Contains 'Hello' or 'World'? " + orExpression.interpret("Hello, Java!"));}
}
4.2 SQL解析

在SQL解析中,解释器模式用于解析和优化SQL语句。

// 抽象表达式
public interface SQLExpression {String interpret();
}// 终结符表达式
public class TableExpression implements SQLExpression {private String tableName;public TableExpression(String tableName) {this.tableName = tableName;}@Overridepublic String interpret() {return "FROM " + tableName;}
}// 非终结符表达式
public class SelectExpression implements SQLExpression {private List<String> columns;private SQLExpression table;public SelectExpression(List<String> columns, SQLExpression table) {this.columns = columns;this.table = table;}@Overridepublic String interpret() {return "SELECT " + String.join(", ", columns) + " " + table.interpret();}
}// 客户端代码
public class Client {public static void main(String[] args) {List<String> columns = Arrays.asList("id", "name", "age");SQLExpression table = new TableExpression("users");SQLExpression select = new SelectExpression(columns, table);System.out.println(select.interpret());}
}
4.3 业务规则引擎

在业务规则引擎中,解释器模式用于解析和执行业务规则。

// 抽象表达式
public interface RuleExpression {boolean interpret(Map<String, Object> context);
}// 终结符表达式
public class EqualsExpression implements RuleExpression {private String key;private Object value;public EqualsExpression(String key, Object value) {this.key = key;this.value = value;}@Overridepublic boolean interpret(Map<String, Object> context) {return context.get(key).equals(value);}
}// 非终结符表达式
public class AndExpression implements RuleExpression {private RuleExpression expr1;private RuleExpression expr2;public AndExpression(RuleExpression expr1, RuleExpression expr2) {this.expr1 = expr1;this.expr2 = expr2;}@Overridepublic boolean interpret(Map<String, Object> context) {return expr1.interpret(context) && expr2.interpret(context);}
}// 客户端代码
public class Client {public static void main(String[] args) {Map<String, Object> context = new HashMap<>();context.put("age", 25);context.put("gender", "male");RuleExpression ageRule = new EqualsExpression("age", 25);RuleExpression genderRule = new EqualsExpression("gender", "male");RuleExpression andRule = new AndExpression(ageRule, genderRule);System.out.println("Rule passed? " + andRule.interpret(context));}
}

5. 解释器模式的优缺点

5.1 优点
  • 灵活:解释器模式可以轻松扩展语言的文法规则。

  • 解耦:解释器模式将文法规则与解释操作解耦,使得系统更加灵活。

  • 可维护:解释器模式使得文法规则的修改和维护更加容易。

5.2 缺点
  • 类膨胀:复杂的文法规则可能导致类膨胀。

  • 性能问题:解释器模式可能带来性能开销,特别是在处理复杂文法时。


结语

解释器模式是设计模式中用于解析特定语法规则的经典模式之一,适用于需要定义和解释语言的场景。通过掌握解释器模式的原理、实现方式以及最佳实践,你可以在实际开发中更好地应用这一模式。希望本文能为你的设计模式学习之旅提供一些实用的指导!


如果你有具体的需求或想要深入探讨某个主题,请告诉我,我可以进一步调整内容!

相关文章:

设计模式之解释器模式:原理、实现与应用

引言 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种语言的文法表示&#xff0c;并提供一个解释器来解释该语言中的句子。解释器模式适用于需要解析特定语法规则的场景&#xff0c;如正则表达式、SQL解析等。本文将深入…...

redis itheima

缓存问题 核心是如何避免大量请求到达数据库 缓存穿透 既不存在于 redis&#xff0c;也不存在于 mysql 的key&#xff0c;被重复请求 public Result queryById(Long id) {String key CACHE_SHOP_KEYid;// 1. redis & mysqlString shopJson stringRedisTemplate.opsFo…...

AF3 OpenFoldDataModule类setup方法解读

AlphaFold3 data_modules 模块的 OpenFoldDataLoader 类 setup 方法用于设置数据集的关键部分,负责根据不同的模式(训练、验证或预测)生成和初始化相应的数据集。 源代码: def setup(self, stage=None):# Most of the arguments are the same for the three datasets data…...

服务器报错:xxx/libc.so.6: version `GLIBC_2.32‘ not found

/lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32 not found (required by ./aima-sim-app-main) 解决思路 根据错误信息&#xff0c;您的应用程序 aima-sim-app-main 和 libmujoco.so.3.1.6 库依赖于较新的 GNU C Library (glibc) 版本&#xff08;如 GLIBC_2.32, GLIBC…...

FPGA状态机设计:流水灯实现、Modelsim仿真、HDLBits练习

一、状态机思想 1.概念 状态机&#xff08;Finite State Machine, FSM&#xff09;是计算机科学和工程领域中的一种抽象模型&#xff0c;用于描述系统在不同状态之间的转换逻辑。其核心思想是将复杂的行为拆解为有限的状态&#xff0c;并通过事件触发状态间的转移。 2.状态机…...

机试题——最少乘坐公交次数

题目描述 春节将近&#xff0c;小明想在节日期间逛一逛城里的 ( N ) 个著名景点。所有景点都能通过坐公交到达。需要设计一种公交路线方案&#xff0c;让小明能最快地逛完所有景点。 输入描述 第一行&#xff1a;一个整数 ( N )&#xff0c;表示景点数量&#xff0c;满足 ( …...

防孤岛保护装置在分布式光伏并网中的应用

什么是光伏的“孤岛效应” 孤岛islanding 包含负荷和电源的部分电网&#xff0c;从主网脱离后继续孤立运行的状态。孤岛可分为非计划性孤岛和计划性孤岛。 孤岛效应的危害 当电网侧停电检修&#xff0c;若并网光伏电站的逆变器仍在继续供电&#xff0c;维修人员不一定…...

记一次gitlab服务器负载过高问题处理

服务器上进程 /var/opt/gitlab/gitlab-rails/etc/unicorn.rb /opt/gitlab/embedded/service/gitlab-rails/config.ru 进程服务器cpu占用过高应该怎么处理 tail -f /var/log/gitlab/gitlab-rails/production.log调整 Unicorn 配置&#xff1a;unicorn.rb 是 Unicorn 服务器的配…...

LiT and Lean: Distilling Listwise Rerankers intoEncoder-Decoder Models

文章&#xff1a;ECIR 2025会议 一、动机 背景&#xff1a;利用LLMs强大的能力&#xff0c;将一个查询&#xff08;query&#xff09;和一组候选段落作为输入&#xff0c;整体考虑这些段落的相关性&#xff0c;并对它们进行排序。 先前的研究基础上进行扩展 [14,15]&#xff0c…...

【项目日记】高并发服务器项目总结

生活总是让我们遍体鳞伤&#xff0c; 但到后来&#xff0c; 那些受伤的地方一定会变成我们最强壮的地方。 -- 《老人与海》-- 高并发服务器项目总结 模块关系图项目工具模块缓冲区模块通用类型模块套接字socket模块信道Channel模块多路转接Poller模块 Reactor模块时间轮Tim…...

P1332 血色先锋队(BFS)

题目背景 巫妖王的天灾军团终于卷土重来&#xff0c;血色十字军组织了一支先锋军前往诺森德大陆对抗天灾军团&#xff0c;以及一切沾有亡灵气息的生物。孤立于联盟和部落的血色先锋军很快就遭到了天灾军团的重重包围&#xff0c;现在他们将主力只好聚集了起来&#xff0c;以抵…...

systemd 与 SysVinit

1. 什么是 systemd 和 SysVinit&#xff1f; systemd 和 SysVinit 都是 Linux 的初始化系统&#xff08;init system&#xff09;&#xff0c;用于管理系统启动、服务、进程和日志。 比较项SysVinitsystemd启动方式逐步启动&#xff08;串行&#xff09;并行启动&#xff08;…...

PythonWeb项目-Django+vue白酒数据推荐系统功能介绍

❥(^_-) 上千个精美定制模板,各类成品Java、Python、PHP、Android毕设项目,欢迎咨询。 ❥(^_-) 程序开发、技术解答、代码讲解、文档,💖文末获取源码+数据库+文档💖 💖软件下载 | 实战案例 💖文章底部二维码,可以联系获取软件下载链接,及项目演示视频。 本项目源…...

AWS Bedrock:开启企业级生成式AI的钥匙【深度解析】

引言&#xff1a;生成式AI的工业革命需要新基建 根据Gartner预测&#xff0c;到2026年超过80%的企业将在生产环境中部署生成式AI。而AWS Bedrock作为首个企业级生成式AI托管平台&#xff0c;正在重塑AI工业化落地的技术范式。本文将深入解构其技术架构与商业价值。 一、Bedroc…...

网络安全应急响应-文件痕迹排查

在Windows系统的网络安全应急响应中&#xff0c;文件痕迹排查是识别攻击行为的关键步骤。以下是针对敏感目录的详细排查指南及扩展建议&#xff1a; 1. 临时目录排查&#xff08;Temp/Tmp&#xff09; 路径示例&#xff1a; C:\Windows\TempC:\Users\<用户名>\AppData\L…...

【玩转全栈】—— Django 连接 vue3 保姆级教程,前后端分离式项目2025年4月最新!!!

本文基于之前的一个旅游网站&#xff0c;实现 Django 连接 vue3&#xff0c;使 vue3 能携带 CSRF Token 发送 axios 请求给后端&#xff0c;后端再响应数据给前端。想要源码直接滑倒底部。 目录 实现效果 解决跨域 获取 csrf-token 什么是 csrf-token &#xff1f; CSRF攻击的…...

网络安全·第一天·IP协议安全分析

本篇博客讲述的是网络安全中一些协议缺陷以及相应的理论知识&#xff0c;本博主尽可能讲明白其中的一些原理以及对应的防卫措施。 学习考研408的同学也能进来看看&#xff0c;或许对考研有些许帮助&#xff08;按照考研现在的趋势&#xff0c;年年都有新题目&#xff0c;本文当…...

TensorFlow深度学习实战——字符嵌入、子词嵌入、句子嵌入和段落嵌入

TensorFlow深度学习实战——字符嵌入、子词嵌入、句子嵌入和段落嵌入 0. 前言1. 字符嵌入2. 字词嵌入3. 句子嵌入和段落嵌入相关链接 0. 前言 在自然语言处理中&#xff0c;嵌入 (Embedding) 技术是将文本转化为数值向量的核心方法&#xff0c;使计算机能够理解和处理语言中的…...

剖析AI与5G:是夸大其词,还是时代变革的引擎?-优雅草卓伊凡

剖析AI与5G&#xff1a;是夸大其词&#xff0c;还是时代变革的引擎&#xff1f;-优雅草卓伊凡 在当今科技飞速发展的时代&#xff0c;AI与5G无疑是两大备受瞩目的焦点。近日&#xff0c;一个引人深思的问题浮出水面&#xff1a;“AI是不是被夸大了&#xff0c;就像当年的5G一样…...

Python Cookbook-5.7 在增加元素时保持序列的顺序

任务 你需要维护一个序列&#xff0c;这个序列不断地有新元素加入&#xff0c;但始终处于排序完毕的状态这样你可以在任何需要的时候检查或者删除当前序列中最小的元素。 解决方案 假设有一个未排序的列表&#xff0c;比如: the_list [903, 10, 35, 69, 933, 485, 519, 37…...

Ubuntu18系统安装

1、虚拟机安装 请参照之前的《虚拟机安装centos7-NAT网络模式安装》与《虚拟机安装centos7-桥接模式》 2、启动虚拟机进入系统的欢迎界面 选择English后并点击回车键(Enter) 3、进入安装页面 选择Countinue without updating并点击回车键(Enter) 4、键盘配置 选择Done并点击…...

【AIGC】零样本学习方法综述(TPAMI 2023 研究综述)

出版日期为2022年7月18日&#xff1b;工作由国家自然科学基金资助6217616年6061732011和61976141&#xff0c;部分由广东基础和应用基础研究基金资助2022A1515010791&#xff0c;部分由深圳大学自然科学基金会稳定支持计划资助号20200804193857002&#xff0c;部分由SZU的跨学科…...

Redis持久化之AOF

AOF&#xff08;Append Only File&#xff09;持久化&#xff1a;以独立日志的方式记录每次写命令&#xff0c;重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用解决了数据持久化的实时性。 1.使用AOF 开启AOF需要设置配置文件&#xff1a; appendonly yes…...

QT6(12)3.3.1 Qt元对象系统概述:QObject 类与 QMetaObject 类,类型转换 qobject_cast<T>()。

&#xff08;33&#xff09;Qt元对象系统概述&#xff1a; QObject 类&#xff1a; 以及&#xff1a; 老师带咱们学生测试一下&#xff1a; 谢谢老师 &#xff08;34&#xff09;类型转换 qobject_cast( ) &#xff1a; 来自 一言的教导&#xff1a; &#xff08;35&#x…...

Electron使用WebAssembly实现CRC-32 STM32校验

Electron使用WebAssembly实现CRC-32 STM32校验 将C/C语言代码&#xff0c;经由WebAssembly编译为库函数&#xff0c;可以在JS语言环境进行调用。这里介绍在Electron工具环境使用WebAssembly调用CRC-32 STM32格式校验的方式。 CRC-32 STM32校验函数WebAssembly源文件 C语言实…...

C++11QT复习 (十五)

文章目录 Day10 标准模板库学习笔记&#xff08;2025.04.02&#xff09;一、函数和数组能否放入 STL 容器&#xff1f;1. 引用不能直接作为容器元素类型✅ 推荐做法&#xff1a;使用 std::reference_wrapper<T> 2. 函数不能直接作为容器元素类型✅ 推荐做法一&#xff1a…...

文件存储的路径简单分析

filename file_pic.filename pic /static/img/filename # 将文件的名称存储在数据库中&#xff0c;方便调取 p_file os.path.join(/home/enen/ee/static/img, filename) file_pic.save(p_file) # 保存文件到指定目录&#xff0c;具体项目是要根据项目的存储地址来看的…...

汽车与航空航天领域软件维护:深度剖析与未来展望

一、引言 在当今科技飞速发展的时代&#xff0c;汽车和航空航天领域的软件应用愈发广泛和深入&#xff0c;软件已成为这些行业系统的核心组成部分。从汽车的智能驾驶辅助系统到航空航天飞行器的飞行控制软件&#xff0c;软件的可靠性、安全性直接关系到整个系统的正常运行和人…...

吉利汽车采用 EMQX 与AutoMQ联合方案构建公私有云一体化的车联网核心架构

吉利汽车集团 数字化基础架构总工程师 洪旅杭 关于吉利汽车 吉利汽车集团在中国上海、宁波、以及海外等地建有造型设计和工程研发中心&#xff0c;研发实力雄厚。在中国、马来西亚建有世界一流的现代化整车和动力总成制造工厂&#xff0c;拥有各类销售网点超过 1400 多家&…...

深圳漫云科技户外公园实景儿童剧本杀小程序:开启亲子互动新纪元

在亲子娱乐需求日益增长的当下&#xff0c;深圳漫云科技推出的户外公园实景儿童剧本杀小程序&#xff0c;凭借其创新玩法与丰富功能&#xff0c;为亲子家庭带来全新体验。该小程序融合户外探险、角色扮演与逻辑推理&#xff0c;不仅满足孩子好奇心&#xff0c;更提升其思维能力…...

如何实现H5端对接钉钉登录并优雅扩展其他平台

如何实现H5端对接钉钉登录并优雅扩展其他平台 钉钉H5登录逻辑后端代码如何实现&#xff1f;本次采用策略模式工厂方式进行定义接口确定会使用的基本鉴权步骤具体逻辑类进行实现采用注册表模式&#xff08;Registry Pattern&#xff09;抽象工厂进行基本逻辑定义具体工厂进行对接…...

借助 AI 工具使用 Python 实现北京市店铺分布地理信息可视化教程

一、项目概述 本项目通过 Python 的pyecharts库&#xff0c;结合 AI 工具辅助代码编写与逻辑梳理&#xff0c;实现北京市店铺数量分布及区域连线的地理信息可视化&#xff0c;最终生成交互式地图图表。 二、准备工作 1. 环境与工具 Python 环境&#xff1a;确保已安装 Pyth…...

如何选择优质的安全工具柜:材质、结构与功能的考量

在工业生产和实验室环境中&#xff0c;安全工具柜是必不可少的设备。它不仅承担着工具的存储任务&#xff0c;还直接影响工作环境的安全和效率。那么&#xff0c;如何选择一个优质的安全工具柜呢&#xff1f;关键在于对材质、结构和功能的考量。 01材质&#xff1a;耐用与防腐 …...

使用Vue、Nodejs以及websocket搭建一个简易聊天室

简易聊天室 说在前面效果展示websocketwebsocket的由来websocket的特点 vue前端静态结构效果代码 点击切换用户以及该用户高亮实现思路效果展示 发送消息功能效果展示 连接服务端 Nodejs服务器端实现步骤代码 说在前面 在学习计算机网络的时候&#xff0c;看到了websocket这个…...

node.js使用pnpm运行时报错“Command failed with exit code 1.“怎么办

目录 遇到的问题 问题排查 遇到的问题 在使用pnpm dev运行时报错"Command failed with exit code 1." 如图 问题排查 是先使用pnpm install指令进行安装 然后使用pnpm dev&#xff0c;出现的问题 查看版本号node 发现是版本号高了 将node_modules文件夹删除 通…...

从GPU加速到深度学习革命 —— AlexNet论文概述

广泛认为&#xff0c;将显卡&#xff08;GPU&#xff09;用于深度学习模型训练这一突破性发现&#xff0c;主要归功于2012年发表的经典论文《ImageNet Classification with Deep Convolutional Neural Networks》。在这篇论文中&#xff0c;Alex Krizhevsky、Ilya Sutskever 和…...

视频分析设备平台EasyCVR打造汽车门店经营场景安全:AI智慧安防技术全解析

一、方案背景 某电动车企业不停爆出维权新闻&#xff0c;支持和反对的声音此起彼伏&#xff0c;事情不断发酵、反转&#xff0c;每天都有新消息&#xff0c;令人目不暇接。车展、车店作为维权事件的高发场所&#xff0c;事后复盘和责任认定时&#xff0c;安防监控和视频监控平…...

Python•判断循环

ʕ⸝⸝⸝˙Ⱉ˙ʔ ♡ 判断🍰常用的判断符号(比较运算符)andor括号notin 和 not inif-elif-else循环🍭计数循环 forrange()函数简易倒计时enumerate()函数zip()函数遍历列表遍历元组遍历字符串遍历字典条件循环 while提前跳转 continue跳出循环 break能量站😚判断🍰 …...

导入python包模块时报错Segmentation fault (core dumped)的解决思路

一、问题概述 有时候我们在Linux环境下执行代码时&#xff0c;会莫名奇妙出现Segmentation fault (core dumped)这个报错&#xff0c;很难定位到问题&#xff0c;就算定位到了&#xff0c;如果发现是导包的问题&#xff0c;也很难判断。所以记录下相关解决方式&#xff0c;以待…...

tcp转串口

windows 在 Windows 系统上&#xff0c;可以使用以下成熟的串口转 TCP 工具&#xff1a; HW VSP3 (HW Virtual Serial Port) 提供串口到 TCP/IP 的映射功能。支持虚拟串口和网络通信。下载地址&#xff1a;HW Group com0com com2tcp 开源工具&#xff0c;支持虚拟串口和 TCP…...

杂谈:抖音双塔召回模型:亿级内容分发的数学魔法

在信息爆炸的数字时代&#xff0c;我们每天都被海量内容包围。以抖音为例&#xff0c;这个日活跃用户数亿的平台&#xff0c;每分钟就有数以万计的新视频上传。面对如此庞大的内容库&#xff0c;一个核心问题自然浮现&#xff1a;系统如何从这浩瀚的内容海洋中&#xff0c;为每…...

Set 集合

默认情况下&#xff0c; Scala 使用的是不可变集合&#xff0c; 如果你想使用可变集合&#xff0c; 需要引用 scala.collection.mutable.Set Set 默认是不可变集合&#xff0c;数据无序 数据不可重复 遍历集合 创建可变集合 mutable.Set 打印集合 集合添加元素 向集合中…...

青蛙吃虫--dp

1.dp数组有关元素--路长和次数 2.递推公式 3.遍历顺序--最终影响的是路长&#xff0c;在外面 其次次数遍历&#xff0c;即这次路长所有情况都更新 最后&#xff0c;遍历次数自然就要遍历跳长 4.max时时更新 dp版本 #include<bits/stdc.h> using namespace std; #def…...

加油站小程序实战教程08用户注册

目录 1 授权手机号2 前端调用API总结 上一篇我们介绍了小程序的登录功能&#xff0c;当用户未注册的时候&#xff0c;点击自动加油按钮会弹出授权手机号&#xff0c;然后进行注册&#xff0c;本篇我们介绍一下用户注册的开发过程。 1 授权手机号 微搭提供了小程序手机号获取的…...

进程内存分布--之showmap呈现memory-layout.cpp内存分布

上一篇我们讲了&#xff1a;进程内存分布--之pmap呈现memory-layout.cpp内存分布 我们这里讲一个用于分析内存占用的更直观的方式&#xff0c;showmap来看看会是什么呈现效果&#xff1a; 我们再来使用showmap命令来看下它是怎么呈现内存分布的&#xff1a; 可以看到showmap…...

vim/vi程序(1)

今天我们来学习一下一个编辑器,vim(vi是以前的版本),这个是linux常用的编辑器,我们是必须要学习滴,来看. 各种模式示意图&#xff1a; 案例&#xff1a; vim aaa.txt 按i进入编辑模式,此时可以输入 按ESC可以退出 :进入命令模式 输入wq保存并退出 今天大家先简单了解一下基础…...

【Python】案例:计算股票收益率和波动率

【Python】案例&#xff1a;计算股票收益率和波动率&#xff1a; 1、案例需求2、数据准备3、案例实现 1、案例需求 在分析股票数据时&#xff0c;我们需要从这些数据中得到一些关键指标进行评估&#xff0c;比如收益率、波动率&#xff0c;其中收益率又可以细分为简单收益率和…...

从云计算到算网融合:未来已来的算力革命

一、算力网络&#xff1a;重塑数字时代的基础设施 在当今的数字世界&#xff0c;我们似乎已习惯了云计算带来的便利。然而&#xff0c;随着技术的飞速发展&#xff0c;一种全新的架构 —— 算力网络&#xff0c;正悄然崛起&#xff0c;有望彻底改变我们对计算资源的认知和利用…...

高级:消息队列面试题精讲

一、引言 消息队列在现代软件架构中扮演着至关重要的角色&#xff0c;尤其在处理高并发、系统解耦和异步通信等场景下。Kafka 和 RabbitMQ 作为两种主流的消息队列技术&#xff0c;各自具有独特的特性和适用场景。本文将深入分析 Kafka 和 RabbitMQ 的原理、使用场景及相关面试…...

大模型RAG项目实战-知识库问答助手v1版

安装 Ollama 根据官网指导&#xff0c;安装对应版本即可。 下载安装指导文档&#xff1a; handy-ollama/docs/C1/1. Ollama 介绍.md at main datawhalechina/handy-ollama 注意&#xff1a;在 Windows 下安装 Ollama 后&#xff0c;强烈建议通过配置环境变量来修改模型存储…...