2025-3-20 美团 测开-项目完善

发布于:2025-03-24 ⋅ 阅读:(28) ⋅ 点赞:(0)

项目背景

此项目旨在推动成都市探索**超大城市社区发展治理新路**,由三个实验室负责三大内容

  • 1、**研发社区阵地空间管理模块**:AI算法实现态势感知(如通过社区图片和视频、文本,对环境 空间质量、绿视率、安全感分数、压抑感分数等.....)
  • 2、**社区服务机器人**:门禁控制、视频监控检测
  • 3、**社区“微网实格”智慧管理综合服务平台**:党群服务、大数据管理、AI能力管理、与上面两 大块的集成

算法团队是怎么提供服务

1.通过提供AI模型和算法接口来为其他模块(如前端、后端、机器人系统)提供支持。

你是做什么的

  • 数据库设计:设计 MySQL 关系型数据库,配置 多数据源(MySQL + HDFS + Redis+OSS),确保数据存储高效、稳定。
  • 后端接口开发:基于 Spring Boot + MyBatis Plus 开发 RESTful API,处理用户请求,保证前后端数据交互流畅。
  • 分布式存储 & 文件管理:基于 HDFS + Redis + 对象存储 设计 缓存策略,优化数据查询性能。

MySQL、Redis、HDFS存入什么数据

存储方式 用途 特点
MySQL 存储用户管理、社区服务管理、机器人状态管理、日志数据 适合需要事务处理的场景,确保数据的一致性和完整性
Redis 存储用户认证信息、缓存热点数据(社区服务推荐、社区活动信息)、AI处理结果 适合用于高并发场景的缓存加速
HDFS 存储 社区日志数据、AI 训练数据、监控视频 适合大规模顺序读写,兼容大数据处理

对象存储(OSS)

存储 网格图片、用户上传文件 适合非结构化数据存储,支持 S3 API

项目中用到的java多线程池、以及输入和输出的数据是什么、为什么不直接让算法团队去做

1.java数据处理流程

  • Java 负责视频流接入 & 并发管理

    • 连接多个摄像头(HTTP/RTSP )。
    • 线程池 处理多个视频流,避免阻塞。
    • 进行 视频帧提取(如 1 秒 5 帧、RGB)。
    • 将帧缓存到 HDFS 供 AI 读取。
  • AI 团队负责算法推理

    • 读取 Java 提供的视频帧(通常是 WebsocketREST API 或 Kafka)。
    • 进行 目标检测 / 行为分析(如识别车辆、异常行为、火灾)。
    • 生成分析结果(JSON结构数据结果结构:包括帧ID、时间戳、行为类型、检测结果、置信度、定位信息等。
    • WebSocket 将分析结果实时返回给 Java 后端
  • Java 负责存储 & 实时推送

    • 处理 AI 结果(存入 MySQL / Redis
    • 通过 WebSocket 实时推送前端(ECharts 可视化)
    • 触发告警(如异常行为时,调用通知系统)。

CompletableFuture作用于多线程池,来异步处理视频帧,处理完后把结果存到 HDFS。

CountDownLatch 确保 所有视频帧处理完成 后再统一存储 AI 结果到 Redis。并通过 WebSocket 推送给前端。

{
  "camera_id": "A15",
  "timestamp": "2025-03-20T12:45:30",
  "abnormal_behaviors": [
    {
      "behavior_type": "fight",  // 异常行为类型
      "confidence": 0.92,
      "bbox": [150, 200, 80, 100],  // 异常行为发生的位置
      "start_time": "2025-03-20T12:40:00",
      "end_time": "2025-03-20T12:45:00"
    },
    {
      "behavior_type": "晕倒",
      "confidence": 0.85,
      "bbox": [400, 300, 50, 75],
      "start_time": "2025-03-20T12:46:00",
      "end_time": "2025-03-20T12:47:00"
    }
  ]
}

2.针对存储在Redis里面的AI结果,该怎么处理?

  • 对于分析结果,尤其是同一视频流中的多个帧,考虑将多个结果 批量 存储在一个列表。
  • 对实时性要求高的事件(如火灾或异常行为检测结果),可以设置较短的缓存过期时间(10 分钟)对于某些不需要实时性的分析结果(如行为分析的总结报告),可以设置较长的过期时间(例如 1 天1 周),或根据系统负载和存储需求灵活调整。

3.为什么不直接让算法团队处理

  1. 算法团队关注AI模型,而非并发管理

    • 他们的重点是优化模型准确率,但不擅长并发编程、线程管理
    • 让他们处理视频流,会导致 性能问题(线程不合理调度)资源消耗过高
  2. 高并发任务调度是后端的职责

    • 需要处理 任务队列、资源分配、负载均衡,这些都属于 后端架构优化 的范畴。
    • 例如:如果有 100 个摄像头,应该如何分配 CPU/GPU 资源?这些问题是后端工程师要解决的。
  3. 数据存储 & 预处理需要统一管理

    • 视频流需要存储到 HDFS / Redis / MySQL,格式必须 标准化,否则算法团队的数据格式可能不一致。
    • 日志 & 监控 也是后端管理的,确保任务执行过程中有完整的错误跟踪。

针对项目的并发请求的 QPS(Queries Per Second,查询每秒),要确保高效处理视频流

用户的关键信息有没有加密(电话、身份证)

MySQL 提供了内置的加密函数 AES_ENCRYPTAES_DECRYPT,可以用于对敏感数据进行加密和解密。这些函数适合加密小型数据,如手机号和身份证号。你需要提供一个加密密钥(对称密钥),该密钥用于加密和解密操作。

数据脱敏:对于用户敏感信息,如身份证号、手机号等,可以考虑在查询时对部分数据进行脱敏,只显示部分信息,如显示手机号的后四位或身份证号的最后 4 位。

AI训练的样本是什么?数据格式是什么?

  • 样本
    • 视频数据、图片数据和文本数据
  • 数据格式
    • 视频文件格式 MP4
    • 帧数据:视频数据会被分解成一帧一帧的图像( JPEG)每一帧图像将作为一个样本输入到 AI 模型进行训练。
  • 标签数据
    • 每帧图像/视频片段会附带相应的标签信息,例如:
      • 目标检测:框选人或物体的坐标(如边界框坐标)。
      • 行为分析:检测到的动作(如行走、跑步、聚集等)或异常行为的类型(如打斗、跌倒)。
      • 时间标签:每个视频帧的时间戳,用于表示图像的顺序。

HDFS从AI模型那里拿数据,返回结果是什么

  • 数据存储:AI 模型训练的数据存储在 HDFS 中。
  • 读取数据:AI 团队使用 Hadoop API 或 PySpark 从 HDFS 中读取数据进行训练。
  • 模型训练与保存:使用深度学习框架进行模型训练,训练结果(包括模型文件、性能评估)可以存储在 HDFS 中。
  • 返回结果:训练后的模型可以用于后续的推理任务,并将推理结果传递到前端展示或用于进一步分析。

你在项目里面有什么收获、用到了哪些技能

  • 大数据与分布式存储:通过与 HDFS 的集成,了解了如何处理大规模数据的存储和管理,并提高了对大数据存储与处理技术的理解。
  • 实时数据流处理:在视频流的实时处理上,掌握了如何使用 Java 多线程、线程池等技术高效地处理并行数据流,解决高并发下的数据处理问题。、

针对智慧社区这个项目,如果让你来测试,有什么思路和流程

针对智慧社区项目的测试,我会从功能测试、性能测试、安全测试、兼容性测试、稳定性测试五个方面进行系统性测试,确保整个系统的可靠性和稳定性。

1.功能测试:验证各模块是否正常工作。

用户管理模块

  • 账号注册/登录(正确账号、错误账号、SQL 注入)

  • JWT 令牌认证是否生效

  • 权限管理(普通用户、管理员权限区分)

  • 性能测试:测试 QPS、AI 计算能力、WebSocket 并发。

大数据管理与可视化

  • WebSocket 是否能正确推送实时数据

  • ECharts 图表能否正常展示数据

  • Redis 缓存是否能正确存取分析结果

2.性能测试:测试 QPS、AI 计算能力、WebSocket 并发。

  • 压力测试

    • 使用 JMeter 或 Locust 模拟 1000+ 用户同时访问系统,观察 MySQL、Redis、HDFS 负载

    • 测试 WebSocket 并发能力,查看推送延迟

  • QPS(每秒查询数)测试

    • 重点测试 视频帧处理能力(每秒可处理多少帧)

    • 数据库查询性能,如 Redis 每秒查询量、MySQL 查询优化(索引)

3.安全测试:重点关注用户数据、接口、存储安全。

  1. 用户数据加密

    • 检查 MySQL 身份证号/手机号是否加密存储(AES 加密)

    • 确保 JWT 令牌不能被篡改

  2. HDFS 安全

    • 访问控制(确保 AI 团队只能访问特定目录)

    • 防止恶意上传大文件

  3. WebSocket 安全

    • 确保 WebSocket 连接是加密的

    • 防止 WebSocket 消息篡改

4.兼容性测试:确保前端/网络环境兼容性。

  • 前端适配性

    • 适配 PC / 移动端

    • 兼容 Chrome / Firefox / Edge / Safari

  • 网络环境测试

    • 测试 4G / 5G / WiFi 环境下 WebSocket 是否能稳定推送数据

    • 模拟高丢包、弱网环境,看 WebSocket 断线重连能力

5.稳定性测试:确保系统长时间稳定运行,不因错误崩溃。

  • 长时间运行测试

    • 让系统连续运行 72 小时,观察 CPU / 内存占用

    • 确保 WebSocket 不会断连

  • 错误恢复测试

    • 模拟 HDFS 宕机,看 Java 端如何处理

    • Redis 数据丢失,看系统是否能自动恢复

    • AI 服务器异常,检测 Java 是否能重试或降级处理

针对项目中,文件的上传和下载用的什么方法,怎么传输,对大小有限制吗?

HDFS 默认使用 FileSystem API 进行文件上传和下载,这种方式是 单线程、串行 IO,所以在 大文件高并发请求 场景下会比较慢。

Nginx + 多线程 + 线程池

Nginx 反向代理,使用 BufferedInputStream 进行流式传输

上传步骤:

针对小于10MB

  1. Nginx 作为静态资源服务器,先接收前端上传的文件,减少 HDFS 直接写入的压力。
  2. 后端(Spring Boot)从 Nginx 读取文件流,并用 BufferedInputStream 进行高效 IO 读取。
  3. 使用多线程并发写入 HDFS,避免单线程写入慢的问题。

针对大于10MB

  • 使用多线程(线程池)优化并发上传 对于大文件上传(>10MB),可以使用多线程并行写入 HDFS,提高吞吐量。

下载步骤:

针对小于10MB

  1. 下载文件时,不直接访问 HDFS,而是让 Nginx 缓存静态文件

  2. 客户端先访问 Nginx,如果 Nginx 没有缓存,则从 HDFS 读取

针对大于10MB

  • 多线程下载:同样可以使用 ExecutorService.submit(),并行读取多个块,提升下载速度。

加密对应哪一层加密

加密层级 加密方案 适用数据
传输层 HTTPS / TLS 客户端 ⇄ 服务器 / 服务器 ⇄ HDFS
数据库层 哈希加密(用户密码)AES 加密存储(用户手机号、身份证)
HDFS 层 HDFS 加密区(2.6+提供) AI 训练数据、监控视频
Redis 层 Redis TLS 加密(默认) AI 识别结果

Mysql相关的知识

用户管理

根据你的项目架构,数据库主要涉及以下几张核心表:

1.1 用户管理(users)

字段名 类型 说明 备注
id BIGINT 用户 ID 主键,自增
username VARCHAR(50) 用户名 唯一索引
password VARCHAR(255) 密码 采用 BCrypt/AES 加密 存储
phone VARCHAR(20) 手机号 AES 加密存储
role ENUM('admin', 'user', 'robot') 用户角色
created_at DATETIME 注册时间

1.2 设备管理(devices)

字段名 类型 说明
id BIGINT 设备 ID(主键)
device_name VARCHAR(100) 设备名称
device_type ENUM('camera', 'sensor', 'robot') 设备类型
location VARCHAR(255) 设备所在位置
status ENUM('online', 'offline', 'error') 设备状态
created_at DATETIME 创建时间

1.3 AI 任务调度(ai_tasks)

字段名 类型 说明
id BIGINT 任务 ID
user_id BIGINT 触发任务的用户
task_type ENUM('face_recognition', 'behavior_analysis') 任务类型
status ENUM('pending', 'running', 'completed', 'failed') 任务状态
created_at DATETIME 任务创建时间
completed_at DATETIME 任务完成时间

1.4任务结果存储(ai_results)

字段名 类型 说明
id BIGINT 结果 ID
task_id BIGINT 关联的任务 ID
result TEXT AI 识别结果(JSON 格式)
created_at DATETIME 结果生成时间

1.5日志存储(logs)

字段名 类型 说明
id BIGINT 日志 ID
user_id BIGINT 关联用户
action VARCHAR(255) 操作类型
timestamp DATETIME 记录时间

2. 左右邻接(树状结构存储)

如果你的项目涉及到 设备分层组织结构(如 社区楼栋 → 单元 → 房间),可以使用 邻接表模型(Adjacency List) 或 嵌套集模型(Nested Set)。

2.1 邻接表模型(Adjacency List)

示例数据:

id name parent_id
1 小区A NULL
2 楼栋1 1
3 单元1 2
4 房间101 3

项目用到的工具:

Postman:检查接口是否可行

JMeter:模拟多线程并发请求


网站公告

今日签到

点亮在社区的每一天
去签到