数据库会话监控工具:从原理到实践,打造高效数据库可观测性方案

news2026/5/6 0:03:54
1. 项目概述一个数据库会话查看器的诞生在数据驱动的日常工作中无论是开发调试、性能调优还是安全审计直接查看和分析数据库会话Session信息都是一项高频且关键的操作。一个典型的场景是你的应用突然响应变慢数据库监控告警CPU或连接数飙升你急需知道是哪些SQL在“兴风作浪”又是哪个用户或服务发起的。这时你需要一个趁手的工具能让你快速、清晰地洞察数据库内部的实时活动。rodbland2021/claw-session-viewer这个项目正是为了解决这个痛点而生。它本质上是一个数据库会话查看器其核心目标是提供一个直观、高效的界面帮助开发者、DBA数据库管理员或运维人员实时监控和管理数据库连接与会话状态。这个工具的名字“Claw Session Viewer”很有趣“Claw”意为爪子形象地比喻了它像爪子一样“抓取”并“展示”数据库会话细节的能力。它不是另一个笨重的企业级监控平台而更像是一个轻量、专注的“手术刀”直击问题核心。想象一下你不再需要反复登录数据库服务器敲打一堆复杂的、因数据库类型而异的管理命令比如 PostgreSQL 的pg_stat_activityMySQL 的SHOW PROCESSLIST而是通过一个统一的Web界面就能一目了然地看到所有活跃会话的SQL语句、执行状态、持续时间、客户端地址等关键信息。这对于快速定位慢查询、分析连接泄漏、识别异常访问模式乃至进行安全审查都提供了极大的便利。它适合任何需要与数据库打交道的人。如果你是后端开发者它可以帮助你验证代码中的SQL是否按预期执行及时发现N1查询等问题如果你是DBA它是你日常巡检和应急响应的得力助手即便是运维人员在排查系统整体性能瓶颈时数据库层面往往也是必须审视的一环。这个工具降低了数据库内部状态的可观测性门槛让“黑盒”变得透明。2. 核心功能与设计思路拆解2.1 核心功能全景图一个完整的数据库会话查看器其功能设计必须紧紧围绕“可观测性”和“可操作性”两个核心。claw-session-viewer的设计思路也大抵如此我们可以将其核心功能拆解为以下几个层面会话信息全景展示这是最基本也是最重要的功能。工具需要能够从目标数据库实时拉取所有活跃会话甚至可能包括空闲会话的详细信息。这些信息通常包括会话标识进程ID、会话ID用于唯一标识一个连接。用户与数据库发起连接的用户名和当前所在的数据库名这对于多租户环境或权限审计至关重要。客户端信息客户端的主机地址、端口号有时还包括应用程序名称如果连接字符串中设置了application_name之类的参数这有助于定位问题来源。会话状态是活跃active、空闲idle、空闲在事务中idle in transaction还是其他状态。不同的状态暗示了不同的问题例如“idle in transaction”可能意味着代码中忘记了提交或回滚事务导致锁持有时间过长。查询执行信息当前正在执行或最近执行的SQL语句。对于长时间运行的查询显示其已执行时间对于 PostgreSQL可能还能看到等待事件wait_event对于 MySQL可以看到命令类型Command。资源消耗查询占用的CPU时间、内存、临时磁盘空间等如果数据库支持并提供此类指标。实时刷新与过滤数据库会话状态瞬息万变一个静态的列表价值有限。因此工具需要支持自动定时刷新例如每5秒或10秒让监控画面“活”起来。同时面对成百上千个会话强大的过滤功能必不可少。用户应该能按用户、数据库、客户端IP、状态、查询时长例如“执行时间10秒”等维度快速筛选出关注的会话。关键操作入口仅有查看还不够在发现问题会话后通常需要干预。因此工具应集成基本的会话管理操作最核心的就是“终止会话”。对于确认是异常或失控的查询DBA需要能一键终止Kill该会话及时释放数据库资源。这个功能必须设计得足够谨慎通常需要二次确认并记录操作日志。历史查询与慢查询聚焦除了实时会话分析历史慢查询也是性能调优的重点。工具可以扩展功能定期从数据库的慢查询日志或pg_stat_statementsPostgreSQL等视图中采集数据提供一个慢查询排行榜展示执行次数多、耗时长的SQL模板帮助进行长期的优化。2.2 技术架构选型考量要实现这样一个工具技术选型上会有几个关键决策点这直接决定了工具的轻量性、通用性和可维护性。后端语言与框架考虑到此类工具需要高效处理数据库I/O和Web请求Python 的 Django 或 Flask、Go、Node.js 都是热门选择。Python生态丰富连接各种数据库的驱动如psycopg2,PyMySQL,sqlalchemy非常成熟快速开发原型有优势。Go语言则以高并发和部署简便著称适合对性能有更高要求的场景。从项目名rodbland2021/claw-session-viewer的命名风格看它很可能是一个开源在代码托管平台如 GitHub上的项目使用现代、流行的技术栈可能性较大。数据库连接与适配这是核心难点。不同的数据库MySQL, PostgreSQL, SQL Server, Oracle查询会话信息的SQL命令和系统视图完全不同。一个健壮的工具不能写死针对某一种数据库的代码。常见的做法是定义一个抽象的“数据库提供者”接口然后为每种支持的数据库实现一个具体的适配器。例如PostgreSQL 适配器执行SELECT * FROM pg_stat_activity;MySQL 适配器执行SHOW FULL PROCESSLIST;或查询information_schema.processlist。适配器负责将不同数据库返回的原始字段映射到工具内部统一的会话数据模型上。前端展示为了达到实时、交互性强的效果一个现代化的单页面应用是理想选择。React、Vue.js 或 Svelte 等框架配合一个UI组件库如 Ant Design, Element UI可以快速构建出功能丰富、体验良好的界面。表格展示是核心需要用到支持排序、过滤、分页的复杂表格组件。对于实时刷新WebSocket 或 Server-Sent Events 比传统的定时轮询setInterval体验更佳能做到状态变更的准实时推送。部署与配置工具应该尽可能轻量化最好能通过一个配置文件如config.yaml或环境变量来指定需要监控的数据库连接串、刷新频率等。部署形式可以是传统的服务器部署也可以打包成 Docker 镜像这样在任何支持 Docker 的环境下都能一键启动大大降低了使用门槛。注意安全是重中之重。这个工具需要直接连接生产数据库其本身就是一个高权限入口。必须考虑严格的访问控制如登录认证、连接信息的加密存储、网络隔离仅在内网部署、以及操作审计。绝不能将未经保护的工具暴露在公网上。3. 核心模块深度解析与实操要点3.1 数据库适配器统一不同数据库的“方言”这是整个项目的引擎。其设计质量直接决定了工具的扩展性和稳定性。一个良好的适配器抽象层应该做到定义统一的数据模型首先在代码中定义一个Session类包含所有你希望展示的字段如id,user,database,client_addr,state,query,duration,query_start等。这个模型是内部处理的唯一标准。创建适配器接口定义一个抽象基类DatabaseAdapter声明关键方法如# 示例代码以Python为例 from abc import ABC, abstractmethod from typing import List from .models import Session class DatabaseAdapter(ABC): def __init__(self, connection_string: str): self.conn_str connection_string self._connection None abstractmethod def connect(self): 建立数据库连接 pass abstractmethod def get_active_sessions(self) - List[Session]: 获取所有活动会话并转换为统一的Session模型列表 pass abstractmethod def kill_session(self, session_id: str) - bool: 终止指定ID的会话 pass abstractmethod def close(self): 关闭连接 pass实现具体适配器为每种数据库编写实现类。这里以 PostgreSQL 和 MySQL 为例展示关键区别PostgreSQLAdapterget_active_sessions: 查询pg_stat_activity视图。这个视图非常强大但字段名是 PostgreSQL 风格的如usename,datname,client_addr。适配器需要做字段映射usename-user,datname-database。kill_session: 执行SELECT pg_terminate_backend(pid);语句。实操要点pg_stat_activity中的query字段在查询非常长时可能被截断。如果需要查看完整查询可能需要结合pg_stat_statements。另外state字段的值active, idle, idle in transaction是分析会话健康度的关键。MySQLAdapterget_active_sessions: 执行SHOW FULL PROCESSLIST;或SELECT * FROM information_schema.processlist;。SHOW命令返回的字段名是固定的如User,Host,db,Command,Time,State,Info。适配器需要将Info映射到queryCommand和State可能需要进行合并或转换来匹配统一的state字段。kill_session: 执行KILL CONNECTION [id];或KILL QUERY [id];。实操要点SHOW PROCESSLIST的权限要求较高通常需要PROCESS权限。information_schema.processlist视图对权限要求稍低但可能在某些版本中信息不如SHOW命令全。需要注意Time字段的单位是秒。踩坑记录连接池与长连接。在实现适配器时一个常见的坑是连接管理。工具本身需要连接数据库去查询会话这个连接本身也会成为一个会话。如果每次查询都新建连接会造成不必要的开销和连接数波动。更佳实践是使用一个持久的连接池或者至少保持一个长连接专门用于查询。同时要确保这个“监控连接”本身是空闲idle或轻量的避免它成为被监控的“问题会话”。3.2 数据采集与缓存策略实时刷新意味着后端需要定时向所有配置的数据库发起查询。这里有几个关键设计点定时任务调度可以使用apschedulerPython或cron表达式库来管理定时任务。任务周期如5秒是可配置的。调度器不应阻塞主线程通常采用异步或后台线程的方式执行。并发查询如果工具监控多个数据库实例串行查询会导致总延迟增加。理想的实现是为每个数据库连接启动一个独立的查询任务并发执行最后汇总结果。这需要用到异步IO如 Python 的asyncioaiomysql/asyncpg或线程池。数据缓存与更新前端每秒都可能请求最新数据而后端采集可能有5秒的周期。直接让后端每次收到请求都去查数据库是不现实的会给被监控库带来额外压力。标准做法是后端定时任务将采集到的数据更新到一个内存缓存如 Redis或内存变量中。当 Web API 接收到前端请求时直接从缓存中返回最新数据。这样数据采集和数据提供是解耦的。增量更新与变化通知为了进一步优化可以只缓存会话ID列表并记录每个会话的哈希值或版本号。每次采集后只将发生变化的会话信息推送给前端通过 WebSocket而不是全量刷新。这能极大减少网络传输量和前端渲染压力实现更流畅的实时体验。3.3 Web API 与前端交互设计后端需要提供清晰的 RESTful API 或 GraphQL 接口供前端调用。核心API端点GET /api/sessions获取所有会话列表。支持查询参数过滤如?userapp_userstateactivemin_duration10。POST /api/sessions/:id/kill终止指定会话。这是一个危险操作必须用 POST 或 DELETE 方法并在后端进行严格的权限校验和操作日志记录。GET /api/stats获取聚合统计信息如总会话数、活跃会话数、不同状态的分布等用于绘制仪表盘。WS /wsWebSocket 端点用于向前端推送实时的会话数据变更。前端表格设计这是用户体验的核心。表格需要支持虚拟滚动/分页会话数可能成千上万一次性渲染会导致浏览器卡死。必须实现分页或虚拟滚动。多列排序点击表头可按该列排序这是分析数据的基本操作。复杂过滤在表格顶部提供过滤输入框可以针对每一列进行过滤如用户包含“web”并且过滤条件应该是实时生效的。高亮显示对于执行时间超过阈值的会话如标红、状态为“idle in transaction”的会话标黄进行视觉高亮让问题一目了然。操作列在每一行末尾提供一个“终止”按钮点击后弹出确认对话框。状态管理前端应用状态会比较复杂包括会话列表、过滤条件、排序规则、定时刷新开关等。使用 VuexVue或 ReduxReact等状态管理库可以更好地组织代码让数据流清晰可控。4. 部署、配置与安全实践4.1 部署方案选型根据团队的技术栈和运维习惯可以选择不同的部署方式。方案一传统服务器部署环境准备在目标服务器Linux上安装 Python/Node.js/Go 运行环境、数据库客户端库。获取代码从代码仓库克隆项目。安装依赖运行pip install -r requirements.txt或npm install。配置编辑配置文件如config.yaml填入数据库连接信息、监听端口、密钥等。启动使用进程管理工具如 systemd, supervisor启动应用例如gunicorn app:appPython Flask或直接运行编译后的二进制文件Go。反向代理配置 Nginx 或 Apache 作为反向代理将域名或路径如https://internal-tools.yourcompany.com/db-sessions代理到应用的实际端口并配置SSL证书。方案二Docker容器化部署推荐这是更现代化、更一致的方式。构建镜像项目应提供Dockerfile。你可以直接使用docker build -t claw-session-viewer .构建。编写docker-compose.yml这是管理应用及其依赖如Redis如果需要的便捷方式。version: 3.8 services: session-viewer: build: . container_name: claw-session-viewer ports: - 8080:8080 # 主机端口:容器端口 environment: - DB_CONNECTION_STRINGpostgresql://user:passhost:5432/db?target_session_attrsread-write - REFRESH_INTERVAL5 - SECRET_KEYyour-secret-key-here # volumes: # - ./config.yaml:/app/config.yaml # 可选使用配置文件挂载 restart: unless-stopped启动运行docker-compose up -d。优势环境隔离依赖明确一键部署易于版本管理和横向扩展。4.2 关键配置详解一个生产可用的配置通常包含以下部分# config.yaml 示例 server: host: 0.0.0.0 # 监听地址 port: 8080 debug: false # 生产环境必须为 false database: # 支持多个监控源 sources: - name: 主生产库 type: postgresql dsn: postgresql://monitor_user:strong_passworddb-host-1:5432/postgres?sslmoderequire # 连接池配置 pool_size: 5 pool_timeout: 30 - name: 报表从库 type: mysql dsn: mysqlpymysql://monitor_user:strong_passworddb-host-2:3306/analytics?charsetutf8mb4 security: secret_key: a-very-long-and-random-secret-key-for-session-signing # 用于加密Cookie等 # 基本认证简易版生产环境建议集成LDAP/OAuth等 basic_auth: enabled: true users: - username: admin password_hash: $2b$12$... # bcrypt加密后的密码 # 操作审计日志目录 audit_log_dir: /var/log/claw-session-viewer/audit refresh: interval_seconds: 5 # 数据采集间隔 # 慢查询阈值用于高亮显示 slow_query_threshold_seconds: 10 frontend: # 表格默认配置 default_page_size: 50 # WebSocket 心跳间隔 ws_heartbeat_interval: 30配置要点数据库连接用户务必创建一个专用于监控的数据库用户如monitor_user并只授予最小必要权限。对于 PostgreSQL通常需要pg_read_all_stats角色和连接到目标数据库的权限。对于KILL操作还需要额外的权限如超级用户或特定函数执行权限这个权限要格外谨慎分配。密码管理DSN中的密码不应明文写在配置文件中。应使用环境变量注入或在部署时使用密钥管理服务如 HashiCorp Vault, AWS Secrets Manager。Secret Key必须是一个强随机字符串用于保护用户会话。泄露此密钥会导致安全风险。4.3 安全加固实践网络隔离此工具绝对不能暴露在公网。应部署在公司内部网络或通过VPN/VPC访问。前端访问也应通过内网域名。强制认证必须启用登录功能。最简单的实现是HTTP基本认证但更佳实践是集成公司的单点登录系统。权限细分实现基于角色的访问控制。例如“查看者”角色只能看“操作员”角色可以看和终止会话“管理员”角色可以管理监控目标和用户。操作审计所有终止会话的操作必须记录详尽的审计日志操作人、时间、目标会话ID、客户端IP、SQL语句前N个字符等。这些日志应发送到集中的日志系统。输入验证与防注入虽然工具本身是查询数据库但来自前端的过滤参数如用户名、客户端IP在拼接成查询条件前必须进行严格的验证和转义防止二次SQL注入攻击。HTTPS即使在内网也建议使用自签名证书或内部CA颁发的证书启用HTTPS防止流量被窃听。5. 常见问题排查与性能调优在实际使用claw-session-viewer或类似工具的过程中你可能会遇到一些典型问题。以下是一些排查思路和调优建议。5.1 工具自身连接数据库失败现象工具启动后界面上显示无法连接到某个数据库或者日志中报连接超时、认证失败。排查步骤检查网络连通性在部署工具的服务器上使用telnet或nc命令测试是否能连接到数据库的IP和端口。验证连接信息仔细核对配置文件中的主机名、端口、数据库名、用户名和密码。特别注意密码中的特殊字符是否需要转义。检查数据库权限使用配置中的用户名密码手动通过命令行客户端如psql,mysql尝试连接并执行工具将要运行的查询语句如SELECT * FROM pg_stat_activity;确认该用户有相应权限。检查防火墙与安全组确保数据库服务器的防火墙或云服务商的安全组规则允许来自工具部署服务器的IP地址访问数据库端口。检查数据库负载极少数情况下数据库负载过高可能无法响应新的连接。可以尝试从其他能连上的客户端进行连接测试。5.2 数据刷新延迟或卡顿现象前端页面刷新很慢或者数据更新不及时。排查步骤检查后端采集任务查看工具的后端日志确认定时采集任务是否在按预期执行每次执行的耗时是否过长。如果某个数据库查询特别慢会拖累整个刷新周期。优化数据库查询工具自身的查询语句如pg_stat_activity在会话非常多时也可能变慢。确保被监控的数据库上相关系统视图的查询有合适的索引虽然系统视图通常无法直接加索引但可以检查数据库整体性能。检查前端网络与资源打开浏览器的开发者工具F12查看Network标签页中调用/api/sessions或 WebSocket 连接的耗时。如果响应时间很长可能是网络问题或后端处理瓶颈。同时检查Console有无JavaScript错误。调整采集频率如果数据库实例非常多或会话数巨大将REFRESH_INTERVAL从5秒调整为10秒或15秒可以显著降低工具自身和对数据库的压力。引入缓存层如果尚未引入考虑增加 Redis 作为缓存。后端采集的数据写入 Redis前端API从 Redis 读取。这能有效降低数据库的查询压力并加快API响应速度。5.3 前端表格渲染性能差现象当会话数量很多例如超过1000行时浏览器页面卡顿、滚动不流畅。优化建议启用分页这是最直接的解决方案。不要一次性加载所有数据而是通过后端API支持分页查询前端每次只加载和渲染一页的数据如50-100条。实现虚拟滚动如果必须展示超长列表可以使用支持虚拟滚动的表格组件如ag-Grid,vue-virtual-scroller配合的表格。它们只渲染可视区域内的行极大提升了性能。减少非必要数据与后端协商在获取列表的API中不要返回完整的SQL语句可能很长而是返回截断后的前200个字符。当用户点击某一行查看详情时再通过另一个API去获取该会话的完整SQL。优化表格列减少不必要的列特别是那些需要复杂计算的列。确保每列的width是固定的或可预测的这有助于浏览器优化渲染。5.4 “终止会话”操作失败现象点击终止按钮后提示失败但数据库连接用户似乎有KILL权限。排查步骤检查权限再次确认用于监控的数据库用户是否真的有终止会话的权限。对于 PostgreSQL需要pg_terminate_backend()函数的执行权限这通常意味着需要超级用户权限。可以创建一个专门用于KILL的、具有更高权限的独立用户并在工具中为危险操作使用这个“高权限连接”但这需要更精细的安全设计。检查会话状态有些会话可能处于特殊状态无法被终止。例如某些系统后台进程。工具应能捕获数据库返回的错误信息并清晰地展示给用户如“权限不足”或“无法终止系统进程”。审计日志立即查看工具的审计日志确认终止请求是否真的发送到了后端以及后端是否尝试执行了KILL命令。这有助于区分是前端/网络问题还是后端/数据库问题。5.5 工具自身成为高负载源现象数据库服务器上出现大量来自工具部署服务器的连接工具自身的查询出现在慢查询日志中。解决方案合并查询如果监控多个数据库确保不是为每个实例创建过多的连接。使用连接池并控制池的大小。精简查询字段只查询真正需要的字段避免SELECT *。例如pg_stat_activity中有很多字段可能用不到。延长采集间隔如前所述这是最有效的降低负载的方法。对于非核心监控场景30秒甚至1分钟的间隔也是可以接受的。错峰采集如果监控大量实例不要让所有采集任务在同一秒触发。可以为每个实例的采集任务设置一个随机的初始延迟将负载均匀分布开。使用只读副本如果条件允许让工具连接数据库的只读副本Replica来查询会话信息。这样即使工具查询压力大也不会影响主库的写入性能。通过以上这些设计、实现和运维层面的细节把控一个像claw-session-viewer这样的数据库会话监控工具才能真正成为团队中可靠、高效、安全的“第三只眼”在关键时刻帮你快速抓住问题本质保障数据服务的稳定与性能。

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