Trivy容器镜像漏洞扫描原理与企业级实战指南

news2026/5/24 15:22:48
1. 为什么是Trivy不是Clair、Notary也不是Docker Scout的内置扫描我第一次在CI流水线里看到镜像扫描失败的告警邮件时正蹲在客户现场调试一个K8s集群的网络策略。邮件标题写着“critical vulnerability in nginx:1.21.6-alpine”点进去一看CVE编号后面跟着一串红字CVE-2022-31629 — libjpeg-turbo heap-based buffer overflow。当时心里咯噔一下——这个基础镜像我们用了三年从没手动更新过连docker pull都靠缓存。更尴尬的是安全团队甩过来的整改单里明确要求“所有生产镜像必须通过SAST/DASTSCA容器镜像漏洞扫描三重校验”而我们连第一关都没过。你可能也遇到过类似场景开发提PR前顺手docker build -t myapp:v1 . docker push运维照单部署安全团队月底发通报——“发现27个高危漏洞含3个远程代码执行风险”。这时候再翻文档查工具你会发现选项多得让人头晕Clair要搭PostgreSQLRedisAPI Server三层服务Anchore Engine光是初始化数据库就得等五分钟Docker Scout虽然开箱即用但只支持Docker Hub和GitHub Container Registry私有Harbor仓库直接报unauthorized而Snyk CLI又得配token、设org、绑project一个配置错整个CI就卡在auth failed。Trivy却像一把瑞士军刀单二进制文件无依赖curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh一条命令装完扫描docker.io/library/nginx:alpine不用拉镜像直接走Registry API输出结果带CVSS评分、CWE分类、修复建议甚至能定位到具体Layer里的/usr/lib/libjpeg.so.62.4.0这个文件路径。最关键的是——它真能在5分钟内跑完一次完整扫描。我实测过一台8核16G的CI runner上扫描一个含127个OS包、38个Python依赖的Spring Boot镜像约842MB从trivy image --severity CRITICAL,HIGH myapp:prod敲下回车到终端打印出13 HIGH, 2 CRITICAL并生成HTML报告耗时4分38秒。这背后不是玄学而是Trivy的三个底层设计选择第一不解析镜像文件系统只解析镜像Manifest和Layer Blob。传统工具如Clair会把整个镜像解压到临时目录再用dpkg -l或rpm -qa遍历包列表而Trivy直接读取manifest.json里的layers数组对每个layer的blobSum发起HTTP HEAD请求确认该layer是否为application/vnd.docker.image.rootfs.diff.tar.gzip类型后再用gzip.NewReader()流式解压并扫描/var/lib/dpkg/status或/usr/lib/rpm/Packages.db这类元数据文件。这意味着它跳过了90%的磁盘IO扫描速度提升3倍以上。第二漏洞数据库本地化增量更新。Trivy默认使用Aquasecurity维护的 trivy-db 这是一个SQLite3数据库包含NVD、Red Hat CVE、Ubuntu USN等12个数据源的归一化记录。它不像Clair那样每次扫描都调用外部API查CVE详情而是每12小时自动下载trivy-offline.db.tgz约180MB解压后仅保留cve.sqlite3当前版本427MB。更聪明的是它的增量更新机制新db只包含比本地版本新增的CVE条目diff patch大小通常不到2MBtrivy image命令启动时若检测到db过期会先后台静默下载patch不影响当前扫描。第三语言级依赖扫描与OS包扫描解耦。很多工具把pip list和apt list --installed混在一起分析导致Python包里的jinja23.1.0漏洞被误判为OS层漏洞。Trivy则严格区分OS包扫描走/var/lib/dpkg/statusDebian系或/var/lib/rpm/PackagesRHEL系语言依赖扫描单独触发需显式加--scanners vuln,config,secret,license,dependency参数并且只扫描/app/requirements.txt或/src/go.mod这类已知路径下的清单文件。这种解耦让结果可追溯——你一眼就能看出CVE-2023-27983是来自node_modules/axios还是/usr/bin/openssl。所以当项目组凌晨三点收到安全告警你打开终端输入trivy image --quiet --format table --severity CRITICAL,HIGH myapp:latest看到屏幕上刷出清晰的漏洞列表时那种掌控感不是来自工具多炫酷而是因为它把“扫描”这件事降维到了“执行一个命令”的确定性层面。这不是理想化的技术选型而是我在金融、电商、IoT三个行业落地27个容器化项目后亲手验证过的最省心方案。2. 5分钟实战从零开始完成一次可信扫描含私有Harbor配置别被“5分钟”吓到——这时间包括了环境准备、镜像拉取、扫描执行、结果解读四个环节。我拆解给你看每一步都卡在真实工作流里不是Demo演示。2.1 环境准备三行命令搞定全平台兼容Trivy官方推荐用Shell脚本安装但实际生产中我更倾向用包管理器因为可控性更强。以下是我在不同环境下的实操选择Ubuntu/DebianCI runner常用# 添加Aquasecurity官方APT仓库注意必须用httpshttp会报错 curl -fsSL https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add - echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/trivy.list sudo apt-get update sudo apt-get install trivy提示apt-key add在Ubuntu 22.04已被弃用若报错请改用gpg --dearmor方式导入key具体命令见 Trivy文档#debian 。我踩过坑用旧方法在Jenkins agent上装完trivy version显示command not found查了半天才发现/usr/local/bin不在$PATH里。CentOS/RHEL物理机或裸金属部署# 使用dnfRHEL 8或yumRHEL 7 sudo dnf install -y yum-utils sudo yum-config-manager --add-repo https://aquasecurity.github.io/trivy-repo/rpm/trivy.repo sudo dnf install trivy注意RHEL 7默认用yum但yum-config-manager需先装yum-utilsRHEL 8用dnf且dnf install会自动处理GPG key验证比yum省心。macOS本地开发机# Homebrew是首选避免Go环境冲突 brew install aquasecurity/trivy/trivy # 若brew install失败常见于M1芯片Mac改用curl直装 curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.45.0实测心得M1 Mac用Homebrew装的Trivy有时会报illegal hardware instruction换成curl直装v0.45.0稳定版即可。别贪新——v0.46.0刚发布时我在本地扫描Go镜像就遇到panic: runtime error: invalid memory address回退到v0.45.0立刻解决。装完验证trivy --version # 输出应为Version: 0.45.0 # Vulnerability DB: # Type: Full # Version: 1 # UpdatedAt: 2024-03-15 00:00:00 0000 UTC看到Vulnerability DB状态为Full且UpdatedAt是近24小时内说明漏洞库已就绪。如果显示Light或UpdatedAt是半年前执行trivy image --download-db-only强制更新。2.2 扫描执行一条命令覆盖公有云、私有Harbor、本地镜像Trivy扫描的核心逻辑是先识别镜像来源再决定如何获取Layer数据。它支持三种模式我按使用频率排序▶ 公有RegistryDocker Hub、Quay.io等——最简单trivy image --severity CRITICAL,HIGH python:3.9-slimTrivy会自动拼接https://registry.hub.docker.com/v2/library/python/manifests/3.9-slim用匿名Token请求Manifest再逐个下载Layer Blob扫描。无需docker login也不需要提前docker pull。▶ 私有Harbor——必须配置认证这是企业最常卡住的环节。Harbor的认证机制和Docker Hub不同它要求先向/service/token申请Bearer Token再用该Token访问/v2/接口。Trivy原生支持但配置容易出错创建Harbor机器人账号非个人账号进入Harbor UI →Projects→ 选择目标项目 →Robots→ NEW ROBOT命名如trivy-scanner权限勾选Pull只读足够生成后复制Token字符串注意页面只显示一次。配置Trivy认证文件创建~/.docker/config.json若不存在则新建内容如下{ auths: { harbor.example.com: { auth: dHJpdnktc2Nhbm5lcjp0b2tlbl8xMjM0NTY3OA } } }其中auth字段是username:token的Base64编码。用命令生成echo -n trivy-scanner:token_12345678 | base64执行扫描trivy image --registry-token-header Authorization: Bearer $(cat ~/.docker/config.json | jq -r .auths.harbor.example.com.auth | base64 -d | cut -d: -f2) harbor.example.com/myproject/myapp:v2.1警告上面这条命令在CI中不安全Token会暴露在进程列表里。生产环境必须用环境变量注入export TRIVY_REGISTRY_TOKEN$(cat ~/.docker/config.json | jq -r .auths.harbor.example.com.auth | base64 -d | cut -d: -f2) trivy image --registry-token-header Authorization: Bearer $TRIVY_REGISTRY_TOKEN harbor.example.com/myproject/myapp:v2.1▶ 本地构建镜像——绕过Registry直扫很多团队习惯先docker build再扫描这时Trivy可直接读取本地Docker daemon的镜像数据# 构建镜像假设Dockerfile在当前目录 docker build -t myapp:dev . # 扫描本地镜像注意前面加docker:// trivy image --input docker://myapp:dev --severity CRITICAL,HIGH关键细节--input docker://是Trivy 0.38.0新增参数它会让Trivy跳过Registry请求直接调用docker images --format {{.ID}} myapp:dev获取镜像ID再用docker save导出tar流进行扫描。实测比docker pull再扫快40%且不污染Registry配额。2.3 结果解读看懂这三列胜过读十篇CVE报告Trivy默认输出表格格式核心信息就三列LIBRARY、VULNERABILITY ID、SEVERITY。但新手常忽略第四列INSTALLED VERSION和第五列FIXED VERSION而这恰恰是修复决策的关键LIBRARYVULNERABILITY IDSEVERITYINSTALLED VERSIONFIXED VERSIONopensslCVE-2023-0217HIGH3.0.2-0ubuntu1~22.04.73.0.2-0ubuntu1~22.04.8libjpeg-turboCVE-2022-31629CRITICAL2.0.6-0ubuntu2.12.0.6-0ubuntu2.2LIBRARY列告诉你漏洞在哪openssl是系统包libjpeg-turbo是C库requests是Python包。这决定了修复路径——前者要升级基础镜像后者要改requirements.txt。VULNERABILITY ID列的CVE编号不是摆设。复制CVE-2023-0217去 NVD官网 查你会看到CVSS 3.1 Base Score: 7.5攻击向量NETWORK利用难度LOW。这意味着——只要你的容器暴露了HTTPS端口黑客就能远程触发。INSTALLED VERSION和FIXED VERSION的对比才是行动指南。上表中openssl的修复版本只差一个补丁号.7→.8说明Ubuntu官方已发布安全更新你只需apt update apt install openssl即可而libjpeg-turbo的修复版本要求.2但当前镜像源里最高只有.1这就意味着——你得等Ubuntu发布新包或换用ubuntu:22.04.3这类更新的镜像标签。实战技巧用--format json导出结果后用jq快速过滤高危漏洞trivy image --format json --severity CRITICAL,HIGH python:3.9-slim | \ jq -r .Results[].Vulnerabilities[] | select(.SeverityCRITICAL) | \(.VulnerabilityID) \(.InstalledVersion) → \(.FixedVersion)输出CVE-2023-27983 2.1.0 → 2.1.1—— 一行命令锁定所有紧急修复项。3. 常见报错解决方案从网络超时到证书错误的完整排障链Trivy报错信息往往很“诚实”但不够“友好”。比如failed to fetch vulnerability DB: failed to download vulnerability DB新手第一反应是“DB下载失败”但根本原因可能是公司代理拦截了https://github.com的连接。下面是我整理的TOP 5报错及根因定位法按排查顺序排列3.1 报错failed to fetch vulnerability DB: failed to download vulnerability DB现象执行trivy image nginx:alpine时卡在Downloading vulnerability database...10分钟后报错。根因分析Trivy默认从GitHub Releases下载trivy-offline.db.tgzURL为https://github.com/aquasecurity/trivy-db/releases/download/1/trivy-offline.db.tgz。企业内网常禁用GitHub或DNS污染导致解析失败。排查步骤检查网络连通性curl -I https://github.com/aquasecurity/trivy-db/releases/download/1/trivy-offline.db.tgz # 若返回302或超时证明网络不通验证DNS解析nslookup github.com # 若返回内网IP如10.0.0.1说明DNS被劫持查看Trivy日志详情加-v参数trivy -v image nginx:alpine 21 | grep -A5 vulnerability DB # 输出可能含failed to get response from https://api.github.com/repos/aquasecurity/trivy-db/releases/latest: Get https://api.github.com/...: dial tcp 140.82.112.4:443: i/o timeout解决方案方案A推荐配置国内镜像源创建~/.trivy/config.yamldb: repository: https://mirrors.tuna.tsinghua.edu.cn/github-release/aquasecurity/trivy-db/清华大学TUNA镜像站同步GitHub Release延迟5分钟。我司所有CI节点都配此镜像DB下载从3分钟降到8秒。方案B离线导入DB在能上网的机器上下载DBwget https://github.com/aquasecurity/trivy-db/releases/download/1/trivy-offline.db.tgz tar -xzf trivy-offline.db.tgz将解压后的trivy-offline.db文件拷贝到目标机器的~/.cache/trivy/db/目录下再执行trivy image即可跳过下载。3.2 报错failed to initialize the database: failed to open database: no such file or directory现象首次运行trivy image后报错且~/.cache/trivy/db/目录为空。根因Trivy尝试读取trivy-offline.db但该文件不存在且自动下载又被网络策略阻止。解决方案强制下载DB即使报错也要试trivy image --download-db-only # 若仍失败手动创建目录并赋权 mkdir -p ~/.cache/trivy/db chmod 700 ~/.cache/trivy/db30.3 报错failed to analyze image: unable to parse image: failed to get manifest: unauthorized: authentication required现象扫描私有Harbor镜像时报401但docker login harbor.example.com成功。根因Trivy不读取docker login的凭据它只认~/.docker/config.json里的auths字段。而docker login生成的config.json可能包含多个registry或auth字段格式错误。排查步骤检查config.json结构cat ~/.docker/config.json | jq .auths[harbor.example.com] # 正确输出应为{auth: base64string} # 若输出null说明没配置该registry验证Base64解码echo base64string | base64 -d # 应输出username:password或username:token解决方案用docker-credential-helpers统一管理凭据推荐# 安装docker-credential-passLinux或docker-credential-osxkeychainmacOS trivy image harbor.example.com/myapp:v1 # 自动调用credential helper获取token或手动修复config.json# 用jq安全写入避免手写JSON出错 jq --arg auth $(echo -n robot:token_123 | base64) \ .auths[harbor.example.com] {auth: $auth} \ ~/.docker/config.json /tmp/config.json mv /tmp/config.json ~/.docker/config.json3.4 报错x509: certificate signed by unknown authority现象扫描自签名证书的Harbor时报SSL证书错误。根因Trivy默认校验TLS证书而企业Harbor常用自签名证书。解决方案临时方案测试用加--insecure参数trivy --insecure image harbor.internal/myapp:v1生产方案推荐将CA证书加入系统信任库# 复制Harbor CA证书到系统目录 sudo cp harbor-ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates # Trivy会自动读取系统证书3.5 报错failed to analyze image: failed to extract files: failed to extract layer: ... permission denied现象扫描本地构建的镜像时报permission denied尤其在rootless Docker环境下。根因Trivy调用docker save导出镜像时需要读取Docker daemon的socket文件/var/run/docker.sock而rootless模式下该socket路径为$XDG_RUNTIME_DIR/docker.sock且权限受限。解决方案启用rootless模式适配export DOCKER_HOSTunix://$XDG_RUNTIME_DIR/docker.sock trivy image --input docker://myapp:dev或改用OCI Archive扫描完全绕过Docker daemon# 先保存为OCI格式 docker save myapp:dev | podman load --format oci-archive # 再扫描OCI目录 trivy image --input ./myapp-oci/4. 进阶实践CI/CD集成、扫描策略定制与结果治理把Trivy塞进CI流水线不是终点而是漏洞治理的起点。我见过太多团队把trivy image加进Jenkins Pipeline后就以为万事大吉结果三个月后安全审计发现高危漏洞数量不降反升因为没人看报告也没人跟进修复。下面是我落地的三套组合拳已在5个大型项目中验证有效。4.1 CI/CD集成Jenkins与GitHub Actions双模板▶ Jenkins PipelineGroovy脚本pipeline { agent any environment { // 从Jenkins Credentials绑定Harbor Token HARBOR_TOKEN credentials(harbor-robot-token) } stages { stage(Trivy Scan) { steps { script { // 扫描镜像并生成HTML报告 sh trivy image --format template --template contrib/html.tpl --output trivy-report.html --severity CRITICAL,HIGH ${env.IMAGE_NAME}:${env.BUILD_NUMBER} // 若发现CRITICAL漏洞立即失败构建 sh trivy image --quiet --severity CRITICAL ${env.IMAGE_NAME}:${env.BUILD_NUMBER} || exit 0 // 解析结果判断是否失败 def result sh(script: trivy image --format json --severity CRITICAL ${env.IMAGE_NAME}:${env.BUILD_NUMBER} | jq .Results[].Vulnerabilities | length, returnStdout: true).trim() if (result.toInteger() 0) { error Critical vulnerabilities found! Check trivy-report.html } } } } } post { always { publishHTML([ allowMissing: false, alwaysLinkToLastBuild: true, keepAll: true, reportDir: ., reportFiles: trivy-report.html, reportName: Trivy Vulnerability Report ]) } } }关键设计点|| exit 0确保即使有漏洞命令也不中断后续用jq精确统计数量publishHTML插件生成可视化报告安全团队可直接点击链接查看error语句让构建失败强制开发修复后再提交。▶ GitHub ActionsYAML配置name: Trivy Scan on: push: tags: [v*] jobs: scan: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkoutv3 - name: Set up Trivy uses: aquasecurity/trivy-actionmaster with: # 指定Trivy版本避免自动升级导致行为变更 version: v0.45.0 # 扫描当前commit的Dockerfile构建镜像 image-ref: ghcr.io/${{ github.repository }}:${{ github.sha }} - name: Scan with Trivy run: | trivy image \ --format sarif \ --output trivy-results.sarif \ --severity CRITICAL,HIGH \ ghcr.io/${{ github.repository }}:${{ github.sha }} - name: Upload SARIF file uses: github/codeql-action/upload-sarifv2 with: # GitHub原生支持SARIF自动标记PR中的漏洞行 sarif-file: trivy-results.sarif优势SARIF格式被GitHub原生支持扫描结果会直接显示在PR的Code Scanning Alerts标签页点击即可跳转到Dockerfile中FROM指令行开发修复后重新push告警自动消失。4.2 扫描策略定制按环境分级而非一刀切很多团队用同一套--severity CRITICAL,HIGH扫描所有环境结果是开发环境天天被阻断生产环境却漏掉中危漏洞。我的做法是按环境定义扫描策略环境扫描目标severity参数修复SLA报告用途开发dev本地构建镜像--severity CRITICAL24小时IDE插件提示不阻断构建测试testCI构建镜像--severity CRITICAL,HIGH3工作日Jira自动创建漏洞工单生产prodHarbor中已推送镜像--severity CRITICAL,HIGH,MEDIUM7工作日安全审计报告附件实现方式在CI中用环境变量控制# Jenkins中设置ENVprod则执行 if [ $ENV prod ]; then trivy image --severity CRITICAL,HIGH,MEDIUM $IMAGE else trivy image --severity CRITICAL $IMAGE fi4.3 结果治理从“扫描报告”到“漏洞知识库”Trivy生成的JSON报告只是原始数据真正有价值的是把它变成可操作的知识。我在某银行项目中搭建的治理流程如下每日自动聚合用Python脚本定时拉取所有项目的Trivy JSON报告提取VulnerabilityID、Library、FixedVersion存入Elasticsearch建立漏洞知识图谱关联CVE编号与内部组件如log4j-core→payment-service→Java 11标注修复方案升级JDK/替换组件/打补丁自动化修复建议当新报告出现CVE-2021-44228时脚本自动匹配知识库返回“影响组件log4j-core 2.14.1修复方案升级至2.17.1需修改pom.xml影响服务payment-service, order-service已验证补丁log4j-jndi-fix-1.0.jar联系Infra团队获取”这套流程让平均修复周期从14天缩短到3.2天。关键不是工具多先进而是把冷冰冰的CVE编号翻译成了工程师能听懂的“改哪行代码、找谁要jar包、测试什么场景”。最后分享一个小技巧Trivy的--ignore-unfixed参数常被忽略。它表示“只报告已知修复方案的漏洞”比如openssl的CVE-2023-0217有FIXED VERSION而某些内核漏洞可能永远没修复方案。加这个参数后报告里只留可操作项避免开发面对一堆“无法修复”的告警而放弃治理。这就像医生开药方——不告诉病人“你得了绝症”而是说“吃这三味药两周后复查”。技术治理的本质是给人确定性而不是制造焦虑。

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