Qwen3-4B-Instruct-2507部署全攻略:从零开始搭建代码安全分析系统

news2026/3/17 21:51:23
Qwen3-4B-Instruct-2507部署全攻略从零开始搭建代码安全分析系统1. 为什么你需要一个代码安全分析系统想象一下这个场景你负责维护一个中型规模的Web应用代码库有几十万行每天都有新的功能提交。突然安全团队发来一份报告指出你的系统存在一个严重的逻辑漏洞可能导致用户数据泄露。你看着密密麻麻的代码不知道从哪里开始排查更糟糕的是你甚至不确定这是否是唯一的问题。传统的手动代码审计就像大海捞针不仅耗时耗力还容易遗漏关键问题。而基于规则的工具虽然快但面对复杂的业务逻辑漏洞时往往力不从心。这就是为什么越来越多的团队开始探索AI辅助的代码安全分析方案。今天我要介绍的Qwen3-4B-Instruct-2507就是一个能够改变游戏规则的工具。这个40亿参数的模型专门为指令遵循和复杂推理任务优化特别适合用来分析代码逻辑、识别安全漏洞。更重要的是它支持长达256K的上下文这意味着它可以一次性分析整个模块甚至多个相关文件真正理解代码的全局逻辑。在接下来的内容里我会手把手带你完成从环境部署到实际应用的完整流程。无论你是安全工程师、开发人员还是对AI应用感兴趣的技术爱好者都能跟着这篇文章搭建起自己的智能代码审计系统。2. 环境准备与快速部署2.1 理解我们的技术栈在开始之前我们先快速了解一下要用到的几个关键组件Qwen3-4B-Instruct-2507这是阿里开源的最新轻量级大语言模型。相比之前的版本它在指令遵循、逻辑推理和编程理解方面有了显著提升。最重要的是它原生支持256K的超长上下文这对于分析复杂代码逻辑至关重要。vLLM一个高性能的推理引擎。你可以把它想象成一个专门为大模型设计的“加速器”能够大幅提升推理速度同时降低内存占用。它支持连续批处理和PagedAttention技术让模型运行更高效。Chainlit一个专门为AI应用设计的UI框架。它提供了类似ChatGPT的交互界面让你可以通过自然语言与模型对话查看分析结果。对于代码审计这种需要反复交互的任务来说一个友好的界面能极大提升工作效率。这三个组件组合在一起就构成了一个完整的代码安全分析系统vLLM负责高效运行模型Chainlit提供交互界面Qwen3-4B-Instruct-2507则是系统的“大脑”负责理解代码并识别安全问题。2.2 一键部署最简单的启动方式如果你使用的是CSDN星图镜像那么部署过程会简单到超乎想象。这个镜像已经预置了所有必要的组件和配置你只需要几个步骤就能启动服务。首先在镜像广场找到“Qwen3-4B-Instruct-2507”镜像点击部署。系统会自动为你创建一个包含完整环境的工作空间。等待部署完成后打开WebShell终端输入以下命令检查服务状态cat /root/workspace/llm.log如果你看到类似下面的输出说明模型服务已经成功启动INFO 07-25 10:30:15 llm_engine.py:73] Initializing an LLM engine with config: model/root/models/Qwen3-4B-Instruct-2507, tokenizer/root/models/Qwen3-4B-Instruct-2507, tokenizer_modeauto, trust_remote_codeTrue, dtypetorch.float16, ... INFO 07-25 10:30:45 llm_engine.py:158] # GPU blocks: 512, # CPU blocks: 256 INFO 07-25 10:31:20 llm_engine.py:201] KV cache usage: 0.0% INFO 07-25 10:31:20 llm_engine.py:202] Loading model weights took 65.32 GB INFO 07-25 10:31:25 async_llm_engine.py:71] Engine is ready.这个过程通常需要几分钟时间具体取决于你的网络速度和硬件配置。模型加载完成后你会看到“Engine is ready”的提示这时候就可以开始使用了。2.3 手动部署指南备用方案虽然一键部署很方便但了解手动部署的过程也很有价值特别是当你需要在自定义环境中部署时。下面是手动部署的基本步骤环境准备确保你的系统有足够的GPU内存建议至少16GB和磁盘空间模型文件约8GB。安装依赖# 创建虚拟环境可选但推荐 python -m venv qwen_env source qwen_env/bin/activate # 安装核心依赖 pip install vllm chainlit下载模型# 使用ModelScope下载国内推荐 pip install modelscope from modelscope import snapshot_download model_dir snapshot_download(Qwen/Qwen3-4B-Instruct-2507) # 或者使用Hugging Face # from huggingface_hub import snapshot_download # model_dir snapshot_download(Qwen/Qwen3-4B-Instruct-2507)启动vLLM服务python -m vllm.entrypoints.openai.api_server \ --model /path/to/Qwen3-4B-Instruct-2507 \ --served-model-name Qwen3-4B-Instruct-2507 \ --port 8000 \ --max-model-len 262144这里有几个关键参数需要注意--max-model-len 262144这是设置最大上下文长度为256K确保模型能处理大型代码文件--port 8000指定服务端口你可以根据需要修改--served-model-name给服务起个名字方便后续调用验证服务curl http://localhost:8000/v1/models如果返回类似下面的JSON说明服务运行正常{ object: list, data: [ { id: Qwen3-4B-Instruct-2507, object: model, created: 1721900000, owned_by: vllm } ] }3. 使用Chainlit构建交互界面3.1 Chainlit是什么为什么选择它Chainlit是一个专门为AI应用设计的开源框架它最大的特点就是简单易用。你不需要懂前端开发只需要写一个Python脚本就能得到一个功能完整的Web界面。对于代码安全分析这个场景Chainlit有几个特别有用的功能对话历史自动保存你和模型的对话记录方便回溯分析过程文件上传支持直接上传代码文件模型可以直接读取内容Markdown渲染模型返回的结果可以格式化为漂亮的Markdown包括代码高亮流式响应模型生成内容是逐字显示的你可以实时看到分析过程最重要的是Chainlit和vLLM的OpenAI兼容API完美配合你几乎不需要写任何胶水代码。3.2 创建你的第一个Chainlit应用创建一个新文件命名为code_audit_app.py然后添加以下内容import chainlit as cl import requests import json from typing import Optional # vLLM服务的地址 VLLM_API_URL http://localhost:8000/v1/chat/completions # 系统提示词 - 定义模型的角色和任务 SYSTEM_PROMPT 你是一名资深的安全工程师专门从事代码安全审计工作。 你的任务是分析用户提供的代码识别潜在的安全漏洞和逻辑缺陷。 请按照以下步骤进行分析 1. 理解代码的功能和业务逻辑 2. 识别可能的安全风险点 3. 评估风险的严重程度 4. 提供具体的修复建议 输出格式要求 - 使用Markdown格式 - 对识别出的每个问题按以下结构描述 **问题类型**[类型名称] **风险等级**[高/中/低] **位置**[文件:行号] **描述**[详细说明问题] **修复建议**[具体的修复方案] **代码示例**[修复后的代码片段可选] cl.on_chat_start async def start_chat(): 聊天开始时发送欢迎消息 await cl.Message( content 欢迎使用代码安全分析系统\n\n 你可以\n 1. 直接粘贴代码进行分析\n 2. 上传代码文件支持.py、.java、.js等格式\n 3. 询问特定的安全问题\n\n 我会帮你分析代码中的安全漏洞和逻辑缺陷。 ).send() cl.on_message async def main(message: cl.Message): 处理用户消息 user_input message.content # 如果有上传的文件读取文件内容 file_content if message.elements: for element in message.elements: if hasattr(element, content): file_content f\n\n## 文件内容{element.name}\n\n{element.content}\n # 构建完整的用户输入 full_input user_input if file_content: full_input file_content # 显示正在分析的提示 msg cl.Message(content) await msg.send() # 调用vLLM API response await call_vllm_api(full_input) # 流式显示响应 await stream_response(response, msg) async def call_vllm_api(user_input: str): 调用vLLM的API headers { Content-Type: application/json } payload { model: Qwen3-4B-Instruct-2507, messages: [ {role: system, content: SYSTEM_PROMPT}, {role: user, content: user_input} ], temperature: 0.2, # 较低的温度值让输出更稳定 max_tokens: 4096, # 最大输出长度 stream: True # 启用流式响应 } try: response requests.post( VLLM_API_URL, headersheaders, jsonpayload, streamTrue ) response.raise_for_status() return response except Exception as e: raise Exception(fAPI调用失败: {str(e)}) async def stream_response(response, msg: cl.Message): 处理流式响应 full_response for line in response.iter_lines(): if line: line line.decode(utf-8) if line.startswith(data: ): data line[6:] # 去掉data: 前缀 if data ! [DONE]: try: chunk json.loads(data) if choices in chunk and chunk[choices]: delta chunk[choices][0][delta] if content in delta: content delta[content] full_response content await msg.stream_token(content) except json.JSONDecodeError: continue # 更新最终消息 await msg.update()这个脚本做了几件重要的事情定义系统角色通过SYSTEM_PROMPT告诉模型它应该扮演什么角色以及如何进行分析处理文件上传如果用户上传了代码文件会自动读取内容并发送给模型调用vLLM API使用OpenAI兼容的接口与模型交互流式显示逐字显示模型的响应提升用户体验3.3 启动Chainlit应用保存文件后在终端中运行chainlit run code_audit_app.py第一次运行时会提示你创建一个.chainlit配置文件直接按回车使用默认设置即可。服务启动后打开浏览器访问http://localhost:8000Chainlit默认端口是8000如果冲突会使用其他端口终端会显示实际地址。你会看到一个简洁的聊天界面现在就可以开始分析代码了4. 实战用AI分析真实代码漏洞4.1 案例一SQL注入漏洞分析让我们从一个简单的Flask应用开始。假设你有以下用户登录功能的代码from flask import Flask, request, jsonify import sqlite3 app Flask(__name__) def get_db_connection(): conn sqlite3.connect(database.db) conn.row_factory sqlite3.Row return conn app.route(/login, methods[POST]) def login(): username request.form.get(username) password request.form.get(password) conn get_db_connection() cursor conn.cursor() # 直接拼接用户输入到SQL查询中 query fSELECT * FROM users WHERE username {username} AND password {password} cursor.execute(query) user cursor.fetchone() conn.close() if user: return jsonify({message: 登录成功, user_id: user[id]}) else: return jsonify({error: 用户名或密码错误}), 401把这段代码复制到Chainlit的聊天框中发送模型会返回类似这样的分析## 安全分析报告 **问题类型**SQL注入漏洞 **风险等级**高 **位置**第15行 **描述**代码直接使用字符串拼接的方式将用户输入的username和password拼接到SQL查询语句中。攻击者可以通过构造特殊的输入来修改SQL语句的逻辑例如输入admin --作为用户名可以绕过密码验证直接登录。 **修复建议**使用参数化查询预编译语句来防止SQL注入。 **代码示例** python app.route(/login, methods[POST]) def login(): username request.form.get(username) password request.form.get(password) conn get_db_connection() cursor conn.cursor() # 使用参数化查询 query SELECT * FROM users WHERE username ? AND password ? cursor.execute(query, (username, password)) user cursor.fetchone() conn.close() if user: return jsonify({message: 登录成功, user_id: user[id]}) else: return jsonify({error: 用户名或密码错误}), 401补充说明使用?作为占位符数据库驱动会自动处理参数转义这种方法能有效防止所有类型的SQL注入攻击建议对所有数据库查询都使用参数化查询你看模型不仅识别出了漏洞还给出了具体的修复方案和代码示例。这就是AI辅助代码审计的威力——它不仅能发现问题还能告诉你如何解决。 ### 4.2 案例二权限绕过漏洞分析 再看一个更复杂的例子这是一个用户资料查看的API python from flask import Flask, request, jsonify, session from functools import wraps app Flask(__name__) app.secret_key your-secret-key def login_required(f): wraps(f) def decorated_function(*args, **kwargs): if user_id not in session: return jsonify({error: 请先登录}), 401 return f(*args, **kwargs) return decorated_function app.route(/api/user/int:user_id, methods[GET]) login_required def get_user_profile(user_id): # 直接从数据库查询用户信息 conn get_db_connection() cursor conn.cursor() cursor.execute(SELECT id, username, email, phone, address FROM users WHERE id ?, (user_id,)) user cursor.fetchone() conn.close() if user: return jsonify({ id: user[id], username: user[username], email: user[email], phone: user[phone], address: user[address] }) else: return jsonify({error: 用户不存在}), 404这段代码看起来比第一个例子安全多了使用了参数化查询防止SQL注入也有登录检查装饰器。但模型的分析可能会让你惊讶## 安全分析报告 **问题类型**水平权限绕过IDOR **风险等级**高 **位置**第18-30行 **描述**虽然接口有登录检查login_required但没有验证当前登录用户是否有权限查看目标用户的信息。任何登录用户都可以通过修改URL中的user_id参数来查看其他用户的敏感信息邮箱、电话、地址。 **修复建议**添加权限验证逻辑确保用户只能访问自己的信息。 **代码示例** python app.route(/api/user/int:user_id, methods[GET]) login_required def get_user_profile(user_id): # 获取当前登录用户的ID current_user_id session.get(user_id) # 如果不是管理员只能查看自己的信息 if not is_admin(current_user_id) and current_user_id ! user_id: return jsonify({error: 无权访问该用户信息}), 403 # 查询用户信息根据权限返回不同字段 conn get_db_connection() cursor conn.cursor() if is_admin(current_user_id): # 管理员可以查看所有字段 cursor.execute(SELECT id, username, email, phone, address FROM users WHERE id ?, (user_id,)) else: # 普通用户只能查看公开字段 cursor.execute(SELECT id, username FROM users WHERE id ?, (user_id,)) user cursor.fetchone() conn.close() if user: return jsonify(dict(user)) else: return jsonify({error: 用户不存在}), 404 def is_admin(user_id): 检查用户是否为管理员 conn get_db_connection() cursor conn.cursor() cursor.execute(SELECT is_admin FROM users WHERE id ?, (user_id,)) result cursor.fetchone() conn.close() return result[is_admin] if result else False补充说明永远不要相信客户端传来的ID必须在服务端验证权限遵循最小权限原则不同角色的用户应该看到不同的信息对于敏感操作如删除、修改建议添加二次确认机制这个分析展示了模型对业务逻辑的深度理解。它不仅能识别技术层面的漏洞还能理解业务规则和权限模型。 ### 4.3 案例三业务逻辑漏洞分析 业务逻辑漏洞往往更隐蔽也更难通过传统工具发现。看这个电商网站的优惠券使用逻辑 python class CouponService: def apply_coupon(self, user_id, coupon_code, order_amount): 应用优惠券到订单 # 获取优惠券信息 coupon self.get_coupon_by_code(coupon_code) if not coupon: return {success: False, message: 优惠券不存在} # 检查优惠券是否过期 if coupon[expire_date] datetime.now(): return {success: False, message: 优惠券已过期} # 检查使用次数限制 used_count self.get_coupon_usage_count(coupon_code) if used_count coupon[usage_limit]: return {success: False, message: 优惠券已达到使用上限} # 计算折扣金额 if coupon[discount_type] percentage: discount order_amount * coupon[discount_value] / 100 else: # fixed amount discount coupon[discount_value] # 确保折扣不超过订单金额 discount min(discount, order_amount) final_amount order_amount - discount # 记录使用日志 self.record_coupon_usage(user_id, coupon_code, discount) return { success: True, discount: discount, final_amount: final_amount } def get_coupon_by_code(self, code): 模拟从数据库获取优惠券 # 这里简化实现 coupons { SAVE10: { discount_type: percentage, discount_value: 10, expire_date: datetime(2024, 12, 31), usage_limit: 100, min_order_amount: 0 }, FIXED20: { discount_type: fixed, discount_value: 20, expire_date: datetime(2024, 12, 31), usage_limit: 50, min_order_amount: 100 } } return coupons.get(code)模型可能会发现一个关键问题## 安全分析报告 **问题类型**业务逻辑缺陷 **风险等级**中 **位置**第28-30行 **描述**代码缺少对最低订单金额的检查。虽然FIXED20优惠券要求订单金额至少100元才能使用但apply_coupon方法没有验证这个条件。攻击者可以创建小额订单如1元来使用该优惠券导致实际支付金额为负数或极低造成业务损失。 **修复建议**在应用优惠券前检查订单金额是否满足最低要求。 **代码示例** python def apply_coupon(self, user_id, coupon_code, order_amount): 应用优惠券到订单 # 获取优惠券信息 coupon self.get_coupon_by_code(coupon_code) if not coupon: return {success: False, message: 优惠券不存在} # 检查订单金额是否满足最低要求 if min_order_amount in coupon and order_amount coupon[min_order_amount]: return {success: False, message: f订单金额不足{coupon[min_order_amount]}元无法使用此优惠券} # 检查优惠券是否过期 if coupon[expire_date] datetime.now(): return {success: False, message: 优惠券已过期} # ... 其余代码保持不变补充说明业务规则检查应该放在最前面避免不必要的计算所有业务限制条件都应该在代码中明确体现建议添加优惠券使用频率限制防止短时间内重复使用对于高价值优惠券可以考虑添加用户等级限制这个例子展示了AI在理解复杂业务规则方面的能力。它不仅能看懂代码还能理解代码背后的业务意图发现逻辑不一致的地方。 ## 5. 高级技巧与最佳实践 ### 5.1 设计有效的提示词 提示词的质量直接决定了分析结果的准确性。经过多次实践我总结出了几个设计提示词的技巧 **技巧一明确角色和任务**你是一名有10年经验的安全架构师专门负责金融系统的代码审计。 你的任务是深度分析以下代码找出所有可能被攻击者利用的安全漏洞。**技巧二指定输出格式**请按以下JSON格式输出分析结果 { vulnerabilities: [ { type: 漏洞类型, severity: high/medium/low, location: 文件:行号, description: 详细描述, impact: 可能造成的影响, remediation: 修复建议, code_example: 修复后的代码示例 } ], overall_risk: 总体风险等级, recommendations: [建议1, 建议2] }**技巧三提供上下文信息**这是某个电商平台的支付模块代码使用Python Flask框架。 业务背景用户可以使用优惠券、积分、银行卡等多种支付方式。 安全要求必须防止重复支付、未授权支付、金额篡改等风险。**技巧四分步骤分析**请按以下步骤分析理解代码的业务功能识别所有用户输入点分析数据处理逻辑检查权限控制机制验证业务规则完整性### 5.2 处理大型代码库的策略 当面对整个项目而不仅仅是单个文件时你需要一些策略来有效利用模型的256K上下文 **策略一分层分析** python def analyze_large_project(project_path): 分层分析大型项目 # 第一层架构分析 architecture_report analyze_architecture(project_path) # 第二层模块分析 for module in get_modules(project_path): module_report analyze_module(module) # 第三层关键文件分析 for critical_file in identify_critical_files(module): detailed_report analyze_file(critical_file) return compile_reports()策略二关键路径聚焦与其分析所有代码不如专注于安全关键路径用户认证和授权相关代码支付和交易处理逻辑数据导出和导入功能文件上传和处理管理员后台功能策略三增量分析class IncrementalAnalyzer: def __init__(self): self.knowledge_base {} # 存储已分析的结果 def analyze_with_context(self, new_code, related_files): 结合已有知识分析新代码 context self.get_relevant_context(new_code, related_files) prompt f 基于以下已知信息 {context} 分析新代码 {new_code} return call_model(prompt)5.3 集成到开发流程要让代码安全分析真正产生价值需要把它集成到开发流程中CI/CD流水线集成# .gitlab-ci.yml 或 .github/workflows/security-scan.yml stages: - security_scan ai_code_audit: stage: security_scan image: python:3.9 script: - pip install requests - python scripts/ai_security_scan.py rules: - if: $CI_COMMIT_BRANCH main || $CI_MERGE_REQUEST_ID本地开发集成# pre-commit hook import subprocess import sys def run_ai_audit(): 在提交前运行AI代码审计 changed_files get_changed_files() for file in changed_files: if is_code_file(file): result analyze_file(file) if result[has_critical_issues]: print(f❌ 发现严重安全问题{file}) print(result[details]) return False return True if __name__ __main__: if not run_ai_audit(): sys.exit(1)代码审查辅助def generate_review_comment(code_snippet, issue): 为代码审查生成详细评论 return f ## 安全审查发现 **问题类型**{issue[type]} **风险等级**{issue[severity]} **位置**{issue[location]} **问题描述** {issue[description]} **潜在影响** {issue[impact]} **修复建议** {issue[language]} {issue[fix_suggestion]} **参考资源** - OWASP相关指南{issue[owasp_link]} - 最佳实践示例{issue[best_practice_example]} 5.4 性能优化建议虽然Qwen3-4B-Instruct-2507相对轻量但在处理大量代码时仍然需要考虑性能批量处理async def batch_analyze(files, batch_size5): 批量分析多个文件 results [] for i in range(0, len(files), batch_size): batch files[i:ibatch_size] batch_content \n\n.join([ f文件{f[name]}\n\n{f[content]}\n for f in batch ]) # 使用更高效的提示词 prompt f 请快速扫描以下{len(batch)}个文件只报告高风险问题 {batch_content} 输出格式简要描述问题用 | 分隔字段 示例SQL注入 | 高 | user_service.py:45 | 直接拼接用户输入 result await call_model(prompt) results.extend(parse_batch_result(result)) return results缓存机制from functools import lru_cache import hashlib lru_cache(maxsize1000) def analyze_code_cached(code_hash, code_content): 缓存分析结果 # 如果相同的代码已经分析过直接返回缓存结果 return cached_results.get(code_hash) or analyze_fresh(code_content) def get_code_hash(code): 生成代码的哈希值用于缓存键 return hashlib.md5(code.encode()).hexdigest()优先级队列class PriorityAnalyzer: def __init__(self): self.high_priority_patterns [ rexec\(, reval\(, rsql, rpassword, rsecret, rkey, rtoken, rauth ] def prioritize_files(self, files): 根据安全风险对文件进行优先级排序 prioritized [] for file in files: score 0 content file[content].lower() # 检查高危模式 for pattern in self.high_priority_patterns: if re.search(pattern, content): score 10 # 检查用户输入处理 if any(keyword in content for keyword in [request, input, form, query]): score 5 # 检查数据库操作 if any(keyword in content for keyword in [select, insert, update, delete]): score 3 prioritized.append((score, file)) # 按分数降序排序 prioritized.sort(keylambda x: x[0], reverseTrue) return [file for _, file in prioritized]6. 总结通过这篇文章我们完成了一个完整的旅程从理解为什么需要AI辅助的代码安全分析到实际部署Qwen3-4B-Instruct-2507模型再到构建交互式的分析界面最后通过真实案例展示了系统的强大能力。让我总结几个关键收获第一部署其实很简单。无论是使用预置镜像一键部署还是手动搭建环境现在的工具链已经相当成熟。vLLM提供了高性能的推理服务Chainlit让交互界面开发变得轻而易举而Qwen3-4B-Instruct-2507则提供了强大的分析能力。第二提示词设计是关键。模型的能力就像一块璞玉好的提示词就是雕刻刀。通过明确角色、指定格式、提供上下文你可以让模型输出更精准、更有用的分析结果。记住你给模型的指令越清晰它给你的回报就越有价值。第三从简单开始逐步深入。不要一开始就试图分析整个百万行代码的项目。从单个文件、单个功能开始积累经验优化流程然后再扩展到更复杂的场景。那些真实的漏洞案例告诉我们很多安全问题就藏在看似简单的代码里。第四AI是助手不是替代品。这个系统最大的价值不是完全取代人工审计而是作为安全工程师的智能助手。它可以快速扫描大量代码发现可疑模式给出初步分析让人工专家可以专注于最复杂、最关键的审查任务。最后安全是一个持续的过程。代码安全分析不应该只是一次性的活动而应该集成到整个开发流程中。无论是通过CI/CD流水线自动扫描还是作为代码审查的辅助工具或者是开发者的本地检查持续的安全实践才能真正降低风险。随着大模型技术的不断进步像Qwen3-4B-Instruct-2507这样的工具会变得越来越智能越来越易用。现在正是开始探索和实践的好时机。无论你是想提升现有项目的安全性还是构建新的安全工具这个组合都值得一试。记住最好的安全措施是预防而不是补救。而最好的预防就是从代码层面开始。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2416951.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…