120-基于Python的食品营养特征数据可视化分析系统

食品营养特征数据可视化分析系统 --- 技术文档

1. 项目概述

本系统是一个基于 Python 的食品营养特征数据可视化分析平台(NutriLab),集成了数据管理、基础统计分析、统计检验、营养密度评估和高级数据挖掘等功能。系统采用 B/S 架构,后端提供 RESTful API,前端通过 ECharts 实现丰富的交互式数据可视化。
































2. 技术栈

2.1 后端技术

技术 版本 用途
Python 3.8+ 主要开发语言
FastAPI 0.104.1 Web 框架,提供异步 RESTful API
Uvicorn 0.24.0 ASGI 服务器,承载 FastAPI 应用
SQLAlchemy 2.0.23 ORM 框架,数据库操作
SQLite 内置 关系型数据库,存储食品与用户数据
Pandas 2.1.4 数据处理与分析
NumPy 1.26.2 数值计算
SciPy 1.11.4 统计检验(Spearman 相关、Kruskal-Wallis 检验)
scikit-learn 1.3.2 机器学习(PCA 降维、GMM 聚类、标准化)
python-jose 3.3.0 JWT 令牌签发与验证
passlib 1.7.4 密码哈希(bcrypt 算法)
Jinja2 3.1.2 HTML 模板引擎

2.2 前端技术

技术 版本 用途
Bootstrap 5.3.0 UI 组件库与响应式布局
Bootstrap Icons 1.11.0 图标库
ECharts 5.4.3 数据可视化图表库
jQuery 3.7.0 DOM 操作辅助
DataTables 1.13.6 数据表格分页与排序
Google Fonts --- Outfit + DM Sans 字体

2.3 设计风格

  • 设计语言:有机暖色调与数据精确感结合
  • 主色调 :橄榄绿(#4a6741)+ 琥珀黄(#d4943a
  • 背景:奶油白渐变 + 微粒纹理覆盖
  • 圆角风格:大圆角卡片(14px ~ 28px)
  • 字体:Outfit(标题) + DM Sans(正文)
  • 页面头部 :图标与标题紧邻排列,page-header-meta 徽章自动右对齐
  • 错误提示:全部使用中文(如「用户名或密码错误」「未找到该食品」)

3. 项目结构

复制代码
code/
├── main.py                         # 应用入口,路由注册与生命周期管理
├── config.py                       # 全局配置(密钥、数据库路径、Token 有效期)
├── database.py                     # 数据库引擎与会话管理
├── models.py                       # SQLAlchemy 数据模型定义
├── schemas.py                      # Pydantic 请求/响应数据模型
├── auth.py                         # 认证与授权(JWT、密码哈希、权限守卫)
├── data_loader.py                  # CSV 数据自动导入
├── requirements.txt                # Python 依赖清单
├── foodstruct_nutritional_facts.csv  # 原始食品营养数据集(1171 条)
├── food_nutrition.db               # SQLite 数据库文件
│
├── routers/
│   ├── __init__.py
│   ├── auth_router.py              # 认证相关 API(登录、注册、获取当前用户)
│   ├── food_router.py              # 食品 CRUD API
│   ├── dashboard_router.py         # 仪表盘概览 API
│   ├── basic_router.py             # 基础分析 API(分类分布、营养素对比)
│   ├── stat_router.py              # 统计分析 API(相关性、检验、雷达图)
│   ├── density_router.py           # 营养密度分析 API
│   ├── mining_router.py            # 高级挖掘 API(聚类、PCA、健康评分)
│   └── user_router.py              # 用户管理 API(仅管理员)
│
├── templates/
│   ├── base.html                   # 基础布局模板(顶栏 + 侧边栏 + 内容区)
│   ├── login.html                  # 登录页面
│   ├── register.html               # 注册页面
│   ├── index.html                  # 数据仪表盘首页
│   ├── category.html               # 分类分布分析页
│   ├── nutrient_compare.html       # 营养素对比分析页
│   ├── macronutrient.html          # 宏量营养素分析页
│   ├── calorie.html                # 热量对比分析页
│   ├── correlation.html            # 相关性热力图分析页
│   ├── stat_test.html              # 统计检验分析页
│   ├── radar.html                  # 雷达图对比分析页
│   ├── density.html                # 营养密度分析页
│   ├── clustering.html             # 聚类分析页
│   ├── mining_advanced.html        # 高级挖掘分析页
│   ├── data_manage.html            # 数据管理页(管理员)
│   └── user_manage.html            # 用户管理页(管理员)
│
└── static/
    ├── css/
    │   └── style.css               # 全局样式(设计系统)
    └── js/
        ├── app.js                  # 核心 JS(认证、API 封装、UI 控制)
        ├── charts.js               # ECharts 图表配置与渲染
        └── food_name_zh.js         # 食品名中英文翻译字典(1171 条)

4. 数据库设计

4.1 数据库引擎

  • 类型:SQLite
  • 连接串sqlite:///./food_nutrition.db
  • ORM:SQLAlchemy 2.0(Declarative Base)

4.2 数据表:users(用户表)

字段 类型 约束 说明
id INTEGER PK, 自增 用户唯一标识
username VARCHAR(50) UNIQUE, NOT NULL, 索引 用户名
password_hash VARCHAR(255) NOT NULL bcrypt 哈希后的密码
role VARCHAR(20) NOT NULL, DEFAULT 'user' 角色:admin / user
created_at DATETIME DEFAULT 当前时间 注册时间

业务规则

  • 第一个注册的用户自动成为管理员
  • 系统至少保留一名管理员,不可降级或删除最后的管理员
  • 用户不可修改自身角色,不可删除自身账号

4.3 数据表:foods(食品营养表)

字段分类 字段名 类型 说明
基本信息 id INTEGER (PK) 食品唯一标识
food_name VARCHAR(200) 食品名称,索引
category_name VARCHAR(100) 食品分类,索引
基础营养 calories FLOAT 热量 (kcal)
protein FLOAT 蛋白质 (g)
carbs FLOAT 碳水化合物 (g)
fats FLOAT 脂肪 (g)
fiber FLOAT 膳食纤维 (g)
sugar FLOAT 糖 (g)
net_carbs FLOAT 净碳水 (g)
starch FLOAT 淀粉 (g)
fructose FLOAT 果糖 (g)
脂肪细分 saturated_fat FLOAT 饱和脂肪 (g)
monounsaturated_fat FLOAT 单不饱和脂肪 (g)
polyunsaturated_fat FLOAT 多不饱和脂肪 (g)
trans_fat FLOAT 反式脂肪 (g)
cholesterol FLOAT 胆固醇 (mg)
矿物质 calcium FLOAT 钙 (mg)
iron FLOAT 铁 (mg)
magnesium FLOAT 镁 (mg)
phosphorus FLOAT 磷 (mg)
potassium FLOAT 钾 (mg)
sodium FLOAT 钠 (mg)
zinc FLOAT 锌 (mg)
selenium FLOAT 硒 (mcg)
copper FLOAT 铜 (mg)
manganese FLOAT 锰 (mg)
维生素 vitamin_a FLOAT 维生素 A
vitamin_a_rae FLOAT 维生素 A (RAE)
vitamin_b1 FLOAT 维生素 B1
vitamin_b2 FLOAT 维生素 B2
vitamin_b3 FLOAT 维生素 B3
vitamin_b5 FLOAT 维生素 B5
vitamin_b6 FLOAT 维生素 B6
vitamin_b12 FLOAT 维生素 B12
vitamin_c FLOAT 维生素 C (mg)
vitamin_d FLOAT 维生素 D
vitamin_e FLOAT 维生素 E
vitamin_k FLOAT 维生素 K
folate FLOAT 叶酸
choline FLOAT 胆碱
氨基酸 histidine FLOAT 组氨酸
isoleucine FLOAT 异亮氨酸
leucine FLOAT 亮氨酸
lysine FLOAT 赖氨酸
methionine FLOAT 蛋氨酸
phenylalanine FLOAT 苯丙氨酸
threonine FLOAT 苏氨酸
tryptophan FLOAT 色氨酸
valine FLOAT 缬氨酸
Omega-3 omega3_dha FLOAT DHA
omega3_dpa FLOAT DPA
omega3_epa FLOAT EPA
omega3_ala FLOAT ALA
Omega-6 omega6_linoleic FLOAT 亚油酸
omega6_eicosadienoic FLOAT 二十碳二烯酸
omega6_gamma_linoleic FLOAT γ-亚麻酸
omega6_dihomo_gamma FLOAT 二高-γ-亚麻酸
omega6_arachidonic FLOAT 花生四烯酸
omega3_eicosatrienoic FLOAT 二十碳三烯酸

数据来源foodstruct_nutritional_facts.csv,共 1171 条食品记录,涵盖 18 个食品分类。

4.4 食品分类一览

英文名 中文名
Baby Foods 婴幼儿食品
Baked Products 烘焙制品
Beverages 饮料
Dairy 乳制品
Fast Foods 快餐
Fruits 水果
Grains 谷物
Greens 绿叶蔬菜
Meals, Entrees, and Side Dishes 餐食与配菜
Meat 肉类
Mushrooms 菌菇
Nuts 坚果
Oils and Sauces 油脂与酱料
Seafood 水产海鲜
Soups 汤羹
Spices 香辛料
Sweets 甜食
Vegetables 蔬菜

5. 系统架构

5.1 整体架构

复制代码
┌─────────────────────────────────────────────────┐
│                   浏览器 (Browser)                │
│  ┌──────────┐  ┌──────────┐  ┌───────────────┐  │
│  │  Bootstrap │  │  ECharts │  │  DataTables   │  │
│  │  (UI 框架) │  │ (图表库) │  │  (数据表格)   │  │
│  └─────┬────┘  └────┬─────┘  └──────┬────────┘  │
│        └────────────┼───────────────┘            │
│                     │  HTTP / AJAX               │
└─────────────────────┼───────────────────────────┘
                      │
┌─────────────────────┼───────────────────────────┐
│              FastAPI 服务端 (Uvicorn)             │
│  ┌──────────────────┼────────────────────────┐  │
│  │           Jinja2 模板引擎                   │  │
│  │   (服务端渲染 HTML 页面骨架)                 │  │
│  └──────────────────┼────────────────────────┘  │
│  ┌──────────────────┼────────────────────────┐  │
│  │            API 路由层 (Routers)             │  │
│  │  ┌──────┐ ┌──────┐ ┌──────┐ ┌──────────┐  │  │
│  │  │ Auth │ │ Food │ │ Stat │ │ Mining   │  │  │
│  │  └──┬───┘ └──┬───┘ └──┬───┘ └────┬─────┘  │  │
│  └─────┼────────┼────────┼──────────┼────────┘  │
│  ┌─────┼────────┼────────┼──────────┼────────┐  │
│  │     └────────┴────────┴──────────┘        │  │
│  │         SQLAlchemy ORM + Pydantic         │  │
│  └──────────────────┬───────────────────────┘  │
│  ┌──────────────────┼───────────────────────┐  │
│  │     认证中间件 (JWT + bcrypt)             │  │
│  └──────────────────┬───────────────────────┘  │
└─────────────────────┼───────────────────────────┘
                      │
┌─────────────────────┼───────────────────────────┐
│               SQLite 数据库                      │
│         ┌───────┐  ┌───────────┐                │
│         │ users │  │   foods   │                │
│         └───────┘  └───────────┘                │
└─────────────────────────────────────────────────┘

5.2 请求处理流程

  1. 浏览器发送 HTTP 请求到 Uvicorn ASGI 服务器
  2. FastAPI 路由匹配并执行依赖注入(数据库会话、认证校验)
  3. 业务逻辑通过 SQLAlchemy ORM 操作 SQLite 数据库
  4. 统计分析模块调用 SciPy / scikit-learn 进行计算
  5. Pydantic 模型序列化响应数据为 JSON
  6. 前端通过 ECharts 渲染交互式图表

5.3 认证流程

复制代码
用户输入账号密码
       │
       ▼
POST /api/auth/login
       │
       ▼
  bcrypt 验证密码 ──── 失败 → 401 "用户名或密码错误"
       │
       ▼ 成功
  JWT 签发 (HS256, 有效期 24h)
       │
       ▼
  前端存储 token 至 localStorage
       │
       ▼
  后续请求 Header: Authorization: Bearer <token>
       │
       ▼
  FastAPI 依赖注入解码 JWT → 获取当前用户
       │
       ├── require_user  → 未登录返回 401
       └── require_admin → 非管理员返回 403

6. API 接口文档

6.1 认证模块 /api/auth

方法 路径 说明 权限
POST /api/auth/register 用户注册 公开
POST /api/auth/login 用户登录,返回 JWT 公开
GET /api/auth/me 获取当前用户信息 需登录

6.2 食品管理模块 /api/foods

方法 路径 说明 权限
GET /api/foods 分页查询食品列表(支持搜索、分类筛选) 公开
GET /api/foods/categories 获取所有食品分类 公开
GET /api/foods/{food_id} 获取单个食品详情 公开
POST /api/foods 新增食品 管理员
PUT /api/foods/{food_id} 修改食品信息 管理员
DELETE /api/foods/{food_id} 删除食品 管理员

6.3 仪表盘模块 /api/dashboard

方法 路径 说明
GET /api/dashboard/overview 概览数据(总食品数、分类数、平均热量、最热门分类)
GET /api/dashboard/category-stats 各分类食品数量统计
GET /api/dashboard/top-foods 按指定营养素排序的 Top N 食品

6.4 基础分析模块 /api/basic

方法 路径 说明
GET /api/basic/category-distribution 各分类食品数量及平均营养素
GET /api/basic/nutrient-comparison 指定营养素按分类的箱线图统计数据
GET /api/basic/macronutrient-comparison 宏量营养素(蛋白质/碳水/脂肪/反式脂肪)分类对比
GET /api/basic/calorie-comparison 热量按分类的箱线图统计数据

6.5 统计分析模块 /api/stat

方法 路径 说明
GET /api/stat/correlation 26 种营养素的 Spearman 相关系数矩阵与 p 值
GET /api/stat/kruskal-wallis Kruskal-Wallis 检验(各分类间营养素差异显著性)
GET /api/stat/radar-compare 两种食品的雷达图对比(含分类均值)
GET /api/stat/foods-by-category 获取指定分类下的所有食品名称

6.6 营养密度模块 /api/density

方法 路径 说明
GET /api/density/heatmap 营养密度指数 (NDI) 热力图数据
GET /api/density/top-categories 按指定营养素 NDI 排序的 Top N 分类
GET /api/density/top-foods 按指定营养素 NDI 排序的 Top N 食品

NDI 计算公式NDI = (营养素含量 / 热量) × 100

6.7 高级挖掘模块 /api/mining

方法 路径 说明
GET /api/mining/clusters GMM 聚类分析(含聚类中心、交叉表、AIC/BIC)
GET /api/mining/pca PCA 降维投影(2D 散点坐标)
GET /api/mining/cluster-profile 单个聚类的详细画像(统计量、分类分布、Top 食品)
GET /api/mining/nutrient-pair-scatter 两种营养素的散点图数据(按聚类或分类着色)
GET /api/mining/radar-cluster 各聚类的雷达图对比
GET /api/mining/health-scores 食品健康评分排名(综合收益/惩罚指标)
GET /api/mining/nutrient-network 营养素相关性网络图(节点 + 边)
GET /api/mining/anomaly-detection 营养素异常值检测(IQR 方法)

6.8 用户管理模块 /api/users(仅管理员)

方法 路径 说明
GET /api/users 获取所有用户列表
PUT /api/users/{user_id}/role 修改用户角色
DELETE /api/users/{user_id} 删除用户

7. 功能模块详解

7.1 用户认证与权限管理

  • 注册:用户名唯一校验,bcrypt 密码哈希存储
  • 登录:JWT Token 签发(HS256 算法,24 小时有效期)
  • 角色 :双角色模型(admin 管理员 / user 普通用户)
  • 前端守卫:页面级权限控制,管理页面自动拦截非管理员访问,展示居中卡片式无权限页面(含脉冲动画盾牌图标、渐变顶栏、「前往登录」与「返回仪表盘」双按钮)
  • API 守卫require_user / require_admin 依赖注入守卫

7.2 数据仪表盘

  • 总食品数、总分类数、平均热量、最热门分类的卡片展示
  • 各分类食品数量柱状图
  • 按营养素排序的 Top 10 食品排行榜

7.3 基础分析

  • 分类分布:饼图展示各分类食品占比,含平均营养素数据
  • 营养素对比:箱线图展示各分类在指定营养素上的分布(最小值、Q1、中位数、Q3、最大值、均值)
  • 宏量营养素:蛋白质、碳水化合物、脂肪、反式脂肪的分类箱线图对比
  • 热量对比:各分类热量分布箱线图

7.4 统计分析

  • 相关性热力图:26 种营养素的 Spearman 秩相关系数矩阵,附带 p 值和显著性标记
  • Kruskal-Wallis 检验:非参数检验各分类间营养素差异,含 Benjamini-Hochberg 校正后的 q 值,以及效应量(epsilon-squared)
  • 雷达图对比:同分类下两种食品的多维营养素雷达图对比,叠加分类均值参考线

7.5 营养密度分析

  • NDI 热力图:各分类 × 各营养素的营养密度指数矩阵
  • Top 分类:按指定营养素 NDI 排名的头部分类
  • Top 食品:按指定营养素 NDI 排名的头部食品

7.6 高级数据挖掘

  • GMM 聚类:基于高斯混合模型的食品聚类(2~10 类),含聚类中心、AIC/BIC 模型选择指标、分类-聚类交叉表
  • PCA 降维:主成分分析将 26 维营养素降至 2 维,可视化聚类分布
  • 聚类画像:单个聚类的详细统计量(均值、中位数、标准差、极值)、分类分布、高热量 Top 10
  • 营养素散点:任意两种营养素的散点图,支持按聚类或分类着色
  • 聚类雷达图:各聚类在 10 种关键营养素上的均值雷达对比
  • 健康评分:综合蛋白质密度、纤维密度、矿物质、维生素等正面指标(权重 75%)和饱和脂肪、钠、糖、胆固醇等负面指标(权重 25%),百分位评分 0~100。Top 食品柱状图与评分详情表格分两行展示
  • 营养素网络:基于 Spearman 相关的营养素关系网络图(可调阈值),节点与连线均显示中文营养素名称,悬浮边时展示相关系数及正/负相关标记
  • 异常检测:IQR 方法识别各营养素的异常高值食品

7.7 数据管理(管理员)

  • 食品数据的增删改查
  • DataTables 分页表格展示
  • 搜索与分类筛选

7.8 用户管理(管理员)

  • 用户列表查看
  • 角色变更(管理员 ↔ 普通用户)
  • 用户删除(含安全校验)

7.9 前端国际化翻译系统

系统通过三层 JavaScript 字典实现前端中文显示:

字典 位置 条目数 说明
FIELD_META app.js 30+ 营养素字段中英文映射(含单位),通过 formatMetricLabel() 调用
CATEGORY_META app.js 18 食品分类中英文映射,通过 formatCategoryLabel() 调用
FOOD_NAME_ZH food_name_zh.js 1171 食品名称中英文映射,通过 formatFoodName() 调用
  • 所有图表轴标签、图例、Tooltip 均使用翻译函数渲染中文
  • 营养素网络图的节点名与连线 source/target 同步翻译
  • 食品名翻译覆盖仪表盘、雷达图、散点图、健康评分、异常检测、营养密度、热量对比、聚类分析、数据管理共 9 个页面
  • 未命中字典的名称回退显示英文原名

8. 数据分析算法说明

8.1 Spearman 秩相关系数

用于衡量两种营养素之间的单调关系,不假设数据服从正态分布。

复制代码
ρ = 1 - (6 Σd²) / (n(n²-1))
  • d:每对观测值的秩次差
  • n:样本量
  • 显著性标记:* p<0.05, ** p<0.01, *** p<0.001

8.2 Kruskal-Wallis 检验

非参数方法,检验多个独立分类组间某营养素的分布是否存在显著差异。

  • H 统计量:基于秩次的组间差异度量
  • p 值:原假设(各组分布相同)下的概率
  • q 值:Benjamini-Hochberg 校正后的 p 值,控制错误发现率 (FDR)
  • 效应量 ε²ε² = (H - k + 1) / (n - k),其中 k 为组数,n 为总样本量

8.3 高斯混合模型 (GMM)

假设数据由多个高斯分布混合生成,通过 EM 算法迭代拟合。

  • 输入:26 维营养素特征,StandardScaler 标准化
  • 参数n_components(聚类数 2~10),n_init=5(多次初始化取最优)
  • 模型选择:AIC(赤池信息准则)和 BIC(贝叶斯信息准则),越低越好

8.4 主成分分析 (PCA)

线性降维方法,将 26 维营养素特征投影到 2 维主成分空间。

  • 目标:保留数据方差最大的方向
  • 输出:2D 坐标 + 各主成分解释方差比

8.5 健康评分模型

综合评分公式:

复制代码
健康评分 = 收益分 × 0.75 + 惩罚分 × 0.25

收益指标(百分位评分,越高越好)

指标 权重
蛋白质密度 22%
膳食纤维密度 22%
维生素 C 密度 15%
钾密度 10%
叶酸密度 10%
钙密度 8%
铁密度 8%
健康脂肪比例 5%

惩罚指标(百分位评分,越低越好)

指标 权重
钠密度 35%
饱和脂肪密度 25%
糖密度 25%
胆固醇密度 15%

8.6 异常值检测(IQR 方法)

对每种营养素:

  1. 计算 Q1(第 25 百分位)和 Q3(第 75 百分位)
  2. IQR = Q3 - Q1
  3. 上界 = Q3 + 1.5 × IQR
  4. 超过上界的值标记为异常高值
  5. 每个食品仅保留 fold 值最高的异常项

9. 前端页面功能一览

页面 路径 功能
登录 /page/login 用户登录,带 loading 动画,渐变图标装饰
注册 /page/register 用户注册,密码一致性与长度校验,渐变图标装饰
数据仪表盘 / 概览卡片 + 分类柱状图 + 营养素 Top 10
分类分布 /page/category 饼图 + 分类营养素均值
营养素对比 /page/nutrient_compare 可选营养素的分类箱线图
宏量营养素 /page/macronutrient 蛋白质/碳水/脂肪/反式脂肪箱线图
热量对比 /page/calorie 各分类热量箱线图
相关性热力图 /page/correlation 26×26 营养素相关矩阵热力图
统计检验 /page/stat_test Kruskal-Wallis 检验结果表格
雷达图对比 /page/radar 两种食品多维雷达图对比
营养密度 /page/density NDI 热力图 + Top 排名
聚类分析 /page/clustering GMM 聚类散点 + 交叉表 + AIC/BIC
高级挖掘 /page/mining_advanced 健康评分 + 异常检测 + 营养素网络
数据管理 /page/data_manage 食品 CRUD 表格(管理员)
用户管理 /page/user_manage 用户角色管理与删除(管理员)

10. 部署与运行

10.1 环境要求

  • Python 3.8 及以上
  • pip 包管理器

10.2 安装依赖

bash 复制代码
pip install -r requirements.txt

10.3 启动服务

bash 复制代码
python main.py

服务默认运行在 http://localhost:8001

10.4 初始化行为

应用启动时自动执行:

  1. 创建数据库表(如不存在)
  2. 检查并补充 users 表的 role 字段(兼容旧数据库)
  3. 确保存在至少一名管理员
  4. 从 CSV 文件导入食品数据(仅在 foods 表为空时执行)

10.5 配置项

配置 默认值 说明
SECRET_KEY food-nutrition-secret-key-2024 JWT 签名密钥(生产环境应更换)
ALGORITHM HS256 JWT 签名算法
ACCESS_TOKEN_EXPIRE_MINUTES 1440 (24h) Token 有效期
DATABASE_URL sqlite:///./food_nutrition.db 数据库连接串

11. 安全机制

机制 实现方式
密码存储 bcrypt 单向哈希,不可逆
身份认证 JWT Bearer Token,HS256 签名
权限控制 角色守卫(require_user / require_admin),前后端双重校验
CORS 允许所有来源(开发模式,生产环境应限制)
输入校验 Pydantic 模型自动校验请求参数类型与约束
SQL 注入防护 SQLAlchemy ORM 参数化查询
前端状态管理 Token 存储于 localStorage,401 时自动清除并跳转登录

12. 数据集说明

  • 文件foodstruct_nutritional_facts.csv
  • 记录数:1171 条食品
  • 字段数:60 个营养素维度
  • 覆盖分类:18 个食品大类
  • 数据特征:数值已归一化为相对评分(0~1000+量级),部分字段存在缺失值(导入时以 0 填充)
相关推荐
logo_281 小时前
Xpath语法规则的学习和使用
javascript·python·xpath·xpath语法
lsx2024061 小时前
《Foundation 模态框》
开发语言
fufu03111 小时前
vscode配置C/C++环境,用GDB调试简单程序分享
开发语言·c++
快乐江湖1 小时前
「层层包装」—— 装饰器模式
开发语言·python·装饰器模式
java1234_小锋1 小时前
String、StringBuilder、StringBuffer的区别?
java·开发语言
星原望野2 小时前
JAVA集合:List、Set和Map
java·开发语言·list·set·map·集合
摘星小杨2 小时前
如何在前端循环调取接口,实时查询数据
开发语言·前端·javascript
yujunl2 小时前
U9的UI插件客开的总结1
开发语言
多敲代码防脱发2 小时前
Spring进阶(容器实现)
java·开发语言·后端·spring