AI编程时代Node.js后端安全:VibeCure如何防范API滥用与天价账单

news2026/5/5 2:52:46
1. 项目概述当AI助手成为你的“安全漏洞”最近在给一个Node.js后端项目做安全审计发现了一个挺有意思的现象团队里的小伙伴们现在写代码尤其是集成第三方付费API比如Twilio发短信、OpenAI调用、SendGrid发邮件时越来越依赖AI编程助手像Cursor、Claude Code、GitHub Copilot这些。AI生成代码确实快一句“给我加个短信验证码功能”几秒钟就能吐出一段能跑的Twilio集成代码。但问题也出在这里——AI只负责让功能“跑起来”它不会替你考虑“安全”和“成本”这两个要命的问题。我看到的代码里一个调用GPT-4的聊天接口没有任何速率限制一个发送短信验证码的端点既没有验证码防刷机制也没有对发送目标国家做任何限制。这意味着什么意味着任何一个攻击者只要找到这个公开的端点写个简单的脚本循环调用就能在几小时内让你的云账单飙升成千上万美元。这种攻击在安全领域有个专门的名字叫“经济拒绝服务”EDoS或者更直白点——“账单攻击”。它不像传统的DDoS攻击你的服务器而是直接攻击你的钱包直到你破产。这让我意识到在AI辅助编程成为主流的今天我们缺的不是写代码的工具而是一个能专门为AI生成的代码“查漏补缺”的安全技能。它需要能理解现代Node.js后端常见的付费服务集成模式能自动扫描出那些AI助手永远不会主动给你加上的“成本护栏”和“安全阀门”。这就是VibeCure这个项目试图解决的问题它不是一个传统的静态代码分析工具而是一个专门为AI编程助手设计的“安全副驾驶”。你把它安装到你的Claude、Cursor里然后简单输入一个/vibecure命令它就能像一位经验丰富的安全工程师一样遍历你的代码库揪出所有可能导致“天价账单”的潜在漏洞。2. 核心风险场景与VibeCure的检查逻辑要理解VibeCure的价值得先看看在AI时代一个粗心或者说过于信任AI的开发者会埋下哪些“财务炸弹”。这些风险往往非常隐蔽因为它们不一定会导致服务崩溃或数据泄露只是默默地、持续地从你的信用卡里扣钱。2.1 短信SMS接口通往“天价话费”的捷径短信验证码是大多数应用的标配。AI助手生成的代码通常长这样一个/api/send-otp的POST接口接收一个手机号参数然后调用Twilio或MessageBird的SDK把验证码发出去。代码逻辑完美但毫无防护。风险一国际短信欺诈Toll Fraud这是最经典的攻击手段。攻击者会编写脚本让你的接口向“高费率国家”的手机号发送短信。不同国家的短信费率差异巨大。向美国、加拿大发送可能只要0.01美元一条但如果你不小心或被恶意利用向一些太平洋岛国、特殊服务号码发送单条费用可能高达0.75美元。VibeCure会检查你的短信发送逻辑是否对目标国家代码进行了白名单或黑名单限制你的Twilio等提供商账户是否设置了地理围栏如果没有这就是一个高风险项。风险二验证码轰炸与号码冷却缺失即使攻击者只用本国号码攻击他也可以针对同一个号码在极短时间内循环调用你的接口。想象一下一个号码在一分钟内收到60条验证码短信这对用户是灾难对你也是——你仍然需要为每一条短信付费。VibeCure会检查你的代码是否实现了“号码冷却”机制例如同一个手机号在1小时内只能请求3次验证码。AI生成的代码里你几乎找不到这个逻辑。实操心得很多开发者以为用了云服务商自己的“验证码”产品如Twilio Verify就万事大吉。确实这些产品内置了频率限制。但问题在于AI助手在生成“自定义”短信逻辑如营销通知、交易提醒时可不会自动给你套上Verify服务。VibeCure能帮你发现这些“漏网之鱼”。2.2 AI/LLM接口按Token燃烧的钞票集成大语言模型是现在的潮流。一个/api/chat接口接收用户问题转发给GPT-4返回答案。看起来很简单对吧但这里的成本模型是按“Token”可以粗略理解为词元计费的而且输入和输出分开算。风险一无上限的输出Token这是最烧钱的漏洞。OpenAI的API允许你设置max_tokens参数来限制模型单次响应的长度。如果你不设置或者设置得过高比如32768那么每次请求模型都可能生成一个长篇大论。攻击者只需构造一个诱导长回复的提示词然后循环调用你的接口。GPT-4级别的模型输出32K tokens一次请求的成本就可能超过0.2美元。一个简单的脚本每秒调用10次一小时就是7200美元。VibeCure会扫描你的LLM调用代码检查max_tokens是否被设置在一个合理的范围比如1024或2048。风险二缺失的输入验证与“思考预算”除了输出输入也要钱。攻击者可以提交一个超级长的提示词比如粘贴一整本书或者提交一个包含大量元素的数组让你进行“批量处理”从而指数级放大输入Token的消耗。此外一些支持“深度思考”如Claude的“思考预算”或“函数调用”的模型其“中间推理”过程也可能产生额外费用。VibeCure会检查你的代码是否对用户输入的长度、结构进行了校验以及是否对这类高级功能的用量进行了限制。2.3 邮件发送接口毁掉发件人信誉的炸弹邮件发送看起来成本低廉甚至很多服务商提供免费额度。但它的风险不在于直接的经济损失而在于“信誉摧毁”。如果你的/api/send-email接口没有速率限制和防刷机制攻击者可以用它向任意地址甚至是根本不存在的地址海量发送邮件。风险一发件人域名进入黑名单主要的邮箱服务商如Gmail、Outlook、QQ邮箱都有复杂的反垃圾邮件算法。如果你的IP或域名在短时间内发送了大量邮件尤其是无效地址的邮件会被立刻标记为垃圾邮件来源。一旦进入黑名单你所有通过这个域名发送的邮件——包括密码重置、订单确认、系统通知——都将直接进入用户的垃圾邮件箱。想要恢复信誉可能需要数周甚至数月与邮件服务商的艰难沟通。VibeCure会检查你的邮件发送端点是否实施了“每收件人冷却”策略比如同一个邮箱地址24小时内最多只能收到5封来自你应用的邮件。2.4 语音/转录接口为“沉默”付费语音转文字STTAPI如OpenAI的Whisper或Deepgram通常按音频时长计费每分钟多少钱。这里的攻击向量非常狡猾上传一个超长的、低比特率的静音音频文件。风险一缺失的文件大小与时长校验一个25分钟的静音MP3文件大小可能只有几MB轻松通过常见的“文件大小限制”比如100MB。但转录API会老老实实地对这25分钟“静音”进行计费。攻击者同时上传几十个这样的文件你的账单就会在无声无息中爆炸。VibeCure会检查你的文件上传处理逻辑是否对音频文件的时长进行了限制例如最长不超过5分钟是否在服务端验证了文件确实是有效的音频格式而不是一个伪装成音频的文本文件3. VibeCure的安装与集成实战理解了风险我们来看看如何把VibeCure这把“安全锁”装到你的开发流程里。它的设计理念是“无缝集成”尽可能不增加开发者的额外负担。3.1 安装一行命令的事VibeCure遵循 Agent Skills 标准这意味着它能安装到任何支持该标准的AI编程助手中。主流的如Claude Code、Cursor、Windsurf、GitHub Copilot等都支持。最推荐的安装方式适用于大多数场景打开你的项目根目录在终端中执行npx skills add vibecure/vibecure这条命令会从npm仓库拉取VibeCure技能包并自动安装到你的AI助手技能目录中。npx是Node.js自带的工具无需全局安装任何东西。备选方案手动克隆适用于内网或定制化需求如果你公司的网络策略限制或者你想先看看代码可以采用手动方式git clone https://github.com/vibecure/vibecure.git cp -r vibecure/skills/vibecure/ ~/.config/{your-ai-assistant}/skills/ # 注意上面的路径需要替换成你实际AI助手的技能目录。 # 例如对于Cursor可能是 ~/.cursor/skills/手动安装后通常需要重启一下你的AI助手客户端让它重新加载技能列表。3.2 触发扫描与AI助手自然对话安装成功后使用方式极其简单。在你项目的代码编辑器中直接打开AI助手的聊天面板通常是Cmd/Ctrl K然后输入/vibecure按下回车。接下来你会看到VibeCure开始工作。它不是一个在终端里运行的命令行工具而是在你的AI助手会话内部执行的一个智能工作流。这种方式的好处是扫描结果和修复建议可以直接在聊天上下文中呈现你可以即时与AI讨论每一个发现的问题。3.3 工作流四部曲检测、分析、修复、报告当你触发/vibecure后它会自动执行一个四阶段工作流。这个过程是自动的但了解其内部机制有助于你理解它的可信度。第一阶段检测DetectVibeCure首先会静默地“行走”在你的项目文件树中。它有一个内置的“提供者检测器”在prepare.js中实现通过分析import、require语句以及常见的初始化代码模式如new Twilio()、OpenAI()来识别你的项目使用了哪些第三方付费服务。它会找什么twiliosendgrid/mailopenaigoogle-generativeaiaws-sdk特定服务node-mailer等包的引入痕迹。智能之处它只关注你实际用到的服务。如果你没用Deepgram它就不会用转录服务的规则来扫描你的代码从而避免了大量误报。第二阶段分析Analyze锁定目标服务后VibeCure会深入阅读相关代码文件。它不是简单的关键字匹配而是进行轻量级的语法和语义分析。对于路由文件它会找出所有定义了API端点的地方如Express的app.post(‘/api/chat’, …)。对于业务逻辑它会检查关键的安全配置是否存在。例如在找到的Twilio短信发送函数周围它会不会找到一个rateLimit中间件发送手机号是否经过国家代码校验OpenAI的客户端初始化时max_tokens参数是否被设置对于配置它会扫描是否有API密钥被硬编码在源码中这是极高危行为。第三阶段修复Fix这是VibeCure最核心的价值所在。它不会只抛出一堆令人焦虑的“安全问题”列表就撒手不管。相反它会提供交互式的修复方案。一键修复对于一些简单、有安全默认值的问题比如为某个端点添加一个缺省的速率限制中间件VibeCure可以直接生成代码补丁并询问你是否应用。引导式修复对于更复杂的问题如如何设计基于用户ID而非IP的限流策略它会启动一个交互式对话一步步引导你理解问题并共同写出正确的代码。例如它会问“你的用户认证体系是怎样的JWT token里哪个字段是用户ID我们需要用它作为限流的键。”跳过你也可以选择暂时跳过某个问题的修复VibeCure会将其记录在最终报告里。第四阶段完成Done扫描和修复交互结束后VibeCure会生成一份简洁的总结报告清晰地列出✅已修复的问题以及具体修改了哪些文件。⚠️已跳过的问题提醒你后续需要手动处理。剩余待办事项有些问题可能无法自动修复比如需要你手动去云控制台设置地理围栏它会给出明确的操作指引。注意事项VibeCure的修复是“建议性”和“辅助性”的。它生成的代码需要你审查后再确认应用。虽然它遵循安全最佳实践但每个应用的具体架构和业务逻辑不同最终的责任人还是开发者自己。把它看作一个极其专业、不知疲倦的代码审查伙伴而不是一个全自动的机器人。4. 核心检查项深度解析与配置建议VibeCure的检查清单是其专业性的集中体现。它不仅仅检查“有没有”更检查“对不对”。下面我们拆解几个关键检查项看看在实际项目中应该如何正确配置。4.1 通用防护层每个付费端点都必须有的“底线”无论你调用什么API只要它可能产生费用下面这些防护就是必须的。VibeCure会逐一核查。检查项风险描述推荐配置与实操要点速率限制 (Rate Limiting)无限制 - 攻击者可无限调用成本无上限。使用express-rate-limit中间件。关键点在于windowMs时间窗口和max最大请求数。对于付费API建议设置得比较严格例如windowMs: 15 * 60 * 100015分钟max: 100每个键15分钟内100次。机器人防护 (Bot Protection)无防护 - 机器人的请求速度是人类100倍轻松击穿速率限制。在注册、登录、公开API等关键端点添加CAPTCHA如Google reCAPTCHA v3。对于API还可以考虑使用像express-slow-down这样的库让频繁请求的IP延迟响应干扰自动化脚本。用户配额 (Per-user Quota)无每日/每月上限 - 一个被盗账号可产生无限费用。在数据库用户表或Redis中维护计数器。例如users表增加sms_sent_today字段每次发送后递增午夜清零。或者在Redis中设置user:123:sms_count键用INCR和EXPIRE命令实现。VibeCure会检查是否有此类计数逻辑。端点认证 (Auth on Paid Endpoints)公开端点调用付费API - 任何人可直接滥用。确保路由使用了认证中间件。在Express中检查类似app.use(‘/api/’, authMiddleware)的全局设置或每个路由显式添加authenticate。VibeCure会识别出未受保护的路由。身份验证混淆 (Broken Auth Identity)从请求体如req.body.userId而非认证令牌中读取用户ID - 可被篡改导致A用户操作B用户资源。必须从经过验证的Token如JWT的sub字段中获取用户身份。VibeCure会检查你的业务逻辑如果发现类似const userId req.body.userId; chargeUser(userId);的代码会标记为高危。硬编码凭证 (Hardcoded Credentials)API密钥写在源码中 - 可通过Git历史、日志、客户端打包泄露。必须使用环境变量。VibeCure会扫描源码中类似sk-OpenAI、SG.SendGrid、ACTwilio等格式的字符串一旦发现强烈建议你立即轮换该密钥并将其移至.env文件通过process.env读取。无防护的注册接口 (Unprotected Registration)注册接口无限速、无验证 - 攻击者可批量注册垃圾账户用于后续攻击。对/api/register或/api/signup实施比常规更严格的速率限制如1小时5次并强制要求邮箱验证或手机验证后才能使用付费功能。代理信任配置 (Trust Proxy)Express的trust proxy设置错误 - 攻击者可伪造X-Forwarded-For头绕过IP限流。如果你的应用部署在Nginx、ELB等反向代理之后必须正确设置。例如app.set(‘trust proxy’, 1)信任第一跳代理或app.set(‘trust proxy’, ‘loopback’)。VibeCure会检查此设置是否存在及是否正确。限流键策略 (Rate Limit Keying)错误地使用IP而非用户ID作为限流键 - 攻击者可通过切换代理IP轻松绕过。对于已认证的用户端点限流键必须是用户唯一标识。express-rate-limit的keyGenerator选项应设置为 (req) req.user?.id4.2 特定领域的“外科手术式”检查除了通用检查VibeCure针对不同领域的API有着更精细、更懂行的检查规则。SMS/短信领域国家限制 (Country Restriction)VibeCure会检查你的短信发送函数中是否对to接收方的国家代码进行了校验。一个健壮的实现应该维护一个允许发送的国家代码列表白名单或者在发送前调用Twilio的Lookup API来验证号码类型和费率。// 示例简单的国家代码白名单校验 const allowedCountryCodes [‘1’, ‘44’, ‘86’, ‘91’]; // 美、英、中、印 function canSendTo(number) { return allowedCountryCodes.some(code number.startsWith(code)); }号码冷却 (Phone Cooldown)除了全局速率限制针对同一号码应有独立冷却。VibeCure会寻找类似下面的Redis模式const key cooldown:sms:${phoneNumber}; const exists await redisClient.exists(key); if (exists) { throw new Error(‘请求过于频繁’); } await redisClient.setex(key, 60, ‘1’); // 60秒冷却AI/LLM领域最大Token上限 (Max Tokens Cap)VibeCure会检查OpenAI等客户端初始化或调用时是否显式设置了max_tokens。一个安全的做法是设置一个远低于模型上限的值并在API响应中截断。const openai new OpenAI(); const completion await openai.chat.completions.create({ model: “gpt-4”, messages: […], max_tokens: 1024, // 明确设置上限 });输入验证 (Input Validation)检查是否对用户输入的messages数组长度、单个content的长度进行了校验。防止提交超长提示词或海量消息历史。邮件发送领域收件人冷却 (Recipient Cooldown)与短信类似但维度是邮箱地址。防止向同一邮箱地址轰炸。VibeCure会检查是否有基于to地址的限流或冷却逻辑。语音转录领域文件时长限制 (File Duration Limit)这是最关键的。需要在服务器端对上传的音频文件进行时长分析。可以使用像ffmpeg或audio-decoder这样的库来获取音频的精确时长并在超过阈值如300秒时拒绝处理。const getAudioDuration require(‘get-audio-duration’); const duration await getAudioDuration(‘./uploaded-audio.mp3’); if (duration 300) { // 5分钟 throw new Error(‘音频文件过长’); }5. 集成到CI/CD与团队工作流个人使用VibeCure进行自查固然好但要想在团队中系统性消除账单风险就必须将其集成到自动化流程中。5.1 本地Git钩子提交前的自动检查最轻量级的集成方式是利用Git的pre-commit钩子。你可以在团队项目中配置在每次提交代码前自动运行VibeCure的扫描或其核心检查逻辑的脚本版本如果发现高危问题则阻止提交。安装HuskyGit钩子工具npm install husky --save-dev npx husky init创建检查脚本在package.json中增加一个脚本调用VibeCure的检查逻辑。由于VibeCure主要作为AI技能你可能需要提取其核心的AST分析逻辑或使用其提供的CLI工具如果未来有的话。这里假设有一个vibecure-scan命令。“scripts”: { “precommit-scan”: “vibecure-scan --block-on-critical” }配置pre-commit钩子在.husky/pre-commit文件中添加#!/usr/bin/env sh . “$(dirname — “$0”)/_/husky.sh” npm run precommit-scan这样任何包含未防护付费API的代码都无法被提交从源头控制风险。5.2 CI/CD流水线集成合并请求的守门员对于更严格的团队可以将VibeCure扫描作为CI/CD流水线如GitHub Actions、GitLab CI中的一个必须通过的检查步骤。示例GitHub Actions工作流name: Security Scan on: [pull_request] jobs: vibecure-scan: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Setup Node.js uses: actions/setup-nodev3 with: node-version: ‘18’ - name: Install VibeCure Scanner run: npm install -g vibecure/scanner # 假设有独立扫描包 - name: Run VibeCure Scan run: vibecure-scan --format sarif --output results.sarif - name: Upload SARIF results uses: github/codeql-action/upload-sarifv2 if: always() with: sarif_file: results.sarif这个工作流会在每次Pull Request时运行扫描并将结果以SARIF格式上传到GitHub在PR界面上显示安全检查结果阻塞存在严重漏洞的代码合并。5.3 与AI助手深度结合将安全作为编码习惯最高效的方式是让VibeCure的检查成为开发者肌肉记忆的一部分。这需要团队文化的建立。团队规范在团队章程中明确所有涉及外部付费API集成的代码在编写后必须使用/vibecure命令进行自查。代码审查清单在Code Review清单中加入一项“是否已通过VibeCure扫描”。审查者可以要求作者提供扫描通过的截图。定期审计即使旧代码也应定期如每季度用VibeCure对整个代码库进行扫描因为依赖、API使用方式可能已发生变化暴露出新的风险。6. 常见问题与排查实录在实际使用和推广VibeCure的过程中我和团队遇到了一些典型问题。这里记录下来希望能帮你避开这些坑。6.1 扫描结果与预期不符误报/漏报问题VibeCure报告了一个我认为已经防护了的问题误报或者没报告一个我认为存在的风险漏报。排查思路检查检测阶段输出重新运行/vibecure仔细看第一阶段“Detecting services”的输出。确认它是否正确识别了你使用的服务提供商。如果识别错误后续检查自然不会触发。理解检查逻辑对照本文第4部分的检查项理解VibeCure在找什么。例如对于“速率限制”它可能是在寻找express-rate-limit中间件被应用到特定路由上的证据。如果你用的是自定义的限流中间件或者限流逻辑在网关层如Nginx、API GatewayVibeCure可能无法识别。这时属于“漏报”你需要手动确认网关配置是否正确。检查代码模式VibeCure主要基于静态模式匹配。如果你的代码结构非常独特例如将API调用封装在一个深层工具函数中路由层没有明显痕迹可能会导致漏报。考虑调整代码结构或将关键配置以更明显的方式声明。提交Issue如果确认是工具的问题欢迎在GitHub仓库提交Issue。提供最小化的代码复现样例帮助开发者改进规则。6.2 自动修复的代码引入了冲突或错误问题使用VibeCure的“一键修复”功能后代码运行出错或与现有逻辑冲突。根本原因与预防冲突VibeCure生成的修复代码如添加一个中间件可能会改变请求-响应链的顺序或者覆盖已有的同名中间件设置。错误它可能基于通用模板生成代码但你的项目使用了特定的框架版本、数据库驱动或编码风格。黄金法则永远把AI生成的修复代码当作“建议草案”。正确的操作流程是仔细阅读看清楚VibeCure打算修改哪个文件在什么位置插入什么代码。手动应用不要直接使用“应用”按钮。而是手动将建议的代码复制到你的编辑器中放在你认为合适的位置。调整适配根据你的项目结构调整引入的变量名、函数引用等。例如它生成的限流配置可能用了rateLimit而你的项目里叫limiter。运行测试在应用修改后运行相关的单元测试或接口测试确保功能正常。6.3 如何处理无法自动修复的“剩余待办事项”问题扫描结束后报告里列出了一些“需要手动操作”的项目比如“请在Twilio控制台设置地理围栏”。解决方案创建清单将这些待办事项整理成一个团队共享的清单如GitHub Issue、Jira Ticket或Notion页面。区分优先级高危涉及硬编码密钥、完全无认证的付费端点。必须立即处理。中危缺少速率限制、配额。应在当前开发周期内解决。低危/配置类如云控制台的地理围栏设置。可以安排在下一次运维窗口进行。分配与跟进为每个事项分配负责人和截止日期定期在团队站会上跟进进度。6.4 在微服务或Serverless架构下的适用性问题我们的后端是微服务架构或者使用AWS Lambda等Serverless函数VibeCure还能用吗答案可以但检查重点需要调整。微服务在每个独立的服务项目中运行VibeCure扫描。需要注意的是如果限流、认证等能力由API网关统一处理那么VibeCure在服务代码内部可能找不到相关配置这属于正常情况。你应该确保API网关的配置同样经过了严格审查。Serverless函数VibeCure同样可以扫描函数代码。对于Serverless要特别关注冷启动与限流函数实例是瞬态的。传统的内存中计数器限流如express-rate-limit会失效。必须使用外部存储如Redis、DynamoDB来实现分布式限流和配额。VibeCure会检查你的限流逻辑是否依赖外部存储。凭证管理在Serverless环境中环境变量和密钥管理服务如AWS Secrets Manager的使用尤为重要。VibeCure对硬编码密钥的检查在此环境下依然有效且至关重要。7. 超越扫描构建成本感知的开发文化工具终究是辅助VibeCure最大的价值在于它像一个持续的提醒器在每次你集成一个可能产生费用的外部服务时敲响安全的警钟。要真正杜绝“账单攻击”需要在团队内建立起一种“成本感知”的安全文化。第一步教育。向所有开发者尤其是新人普及EDoS攻击的原理和典型案例。让他们明白一个没有max_tokens的GPT接口和一个没有密码的数据库在危险性上是同等的。第二步将成本纳入设计评审。在技术方案设计阶段除了讨论功能、性能和架构必须加入“成本与滥用防护”这一项。问几个简单的问题这个新接口调用付费服务吗它的限流策略是什么单用户配额是多少异常流量的监控和告警如何设置第三步实施分层防御。代码层VibeCure扫描 严格的Code Review。网关/网络层在API Gateway、负载均衡器或WAF上设置全局速率限制和地理封锁规则作为第二道防线。监控告警层在云账单上设置费用预算告警如AWS Budgets GCP Billing Alerts。监控关键付费API的调用量设置环比暴增告警例如短信发送量同比昨日增长500%。运营层制定应急预案。如果真的发生攻击如何快速定位问题接口如何临时封禁IP或禁用功能如何与云服务商沟通申请费用减免在我个人经历中引入VibeCure这样的工具最大的收获不是它发现了多少个漏洞而是它潜移默化地改变了团队的编码习惯。现在每当有同事写出一个调用外部API的函数时他会下意识地自问“我加限流了吗我验证输入了吗密钥安全吗”这种条件反射式的安全思维才是对抗不断进化的自动化攻击最坚固的盾牌。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2583638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…