【Easylive】微服务架构在系统中的优缺点的具体体现
【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版
在线视频分享系统项目简介
系统概述
该项目是一个基于SpringCloud微服务架构的在线视频分享系统,主要功能包括:
• 用户自主发布视频
• 后台视频审核
• 用户互动功能(评论、点赞、投币、弹幕)
系统采用springcloud微服务架构构建,主要服务包括 资源服务、主站、互动服务、管理后台 几个服务。项目采用nacos实现服务注册与发现,统一配置管理,通过gateway网关统一对外提供服务,实现负载均衡,服务与服务之间采用openfeign进行相互调用,使用seata解决分布式事务。使用elesticserch实现视频搜索功能。
系统架构
1. 微服务架构
系统采用Spring Cloud微服务架构进行构建,将整个系统拆分为多个独立的服务。
2. 主要服务
• 资源服务:负责视频资源的管理和存储
• 主站服务:提供视频展示和用户交互的主要界面
• 互动服务:处理用户评论、点赞、投币等互动功能
• 管理后台服务:提供后台管理功能,包括视频审核、用户管理等
3. 技术组件
• 服务注册与发现:使用Nacos实现
• 统一配置管理:通过Nacos进行统一配置管理
• 网关服务:使用Gateway网关统一对外提供服务,实现负载均衡
• 服务间调用:采用OpenFeign进行相互调用
• 分布式事务:使用Seata解决分布式事务问题
• 视频搜索:使用Elasticsearch实现
功能模块
1. 账号模块
• 登录:用户可以通过账号和密码安全登录系统
• 注册:新用户可以轻松注册账号
2. 主站模块
• 视频列表展示:按分类展示视频内容
• 视频详情:提供视频播放、实时评论、点赞、收藏、弹幕、投币等互动功能
• 推荐视频:基于Elasticsearch分词技术智能推荐相似视频
3. 创作中心模块
• 发布视频:分片上传视频,使用Redis消息队列进行异步处理(视频合并、转码和切割TS分片)
• 数据统计:展示用户粉丝、播放量、评论、弹幕、点赞、收藏、投币等数据
• 互动管理:评论管理和弹幕管理功能
4. 个人中心模块
• 个人信息展示:展示关注数、粉丝数、获赞数、播放数等
• 投稿视频管理:管理上传的视频(编辑、删除等操作)
• 粉丝管理:查看和管理粉丝列表
5. 搜索模块
• 视频搜索:使用Elasticsearch结合IK分词器实现快速检索
• 搜索热词:通过Redis的incrementScore功能记录热词搜索次数
6. 管理后台模块
• 分类管理:新增、修改、删除视频分类
• 视频管理:视频审核、推荐、删除等操作
• 用户管理:查看用户列表、管理用户状态
• 系统设置:设置文件上传大小、分级数量、评论限制、弹幕限制等系统参数
系统特点
- 高可用性、可扩展性的微服务架构
- 高效的视频处理和搜索能力
- 丰富的用户互动功能
- 完善的创作者支持工具
- 强大的后台管理能力
通俗理解Easylive微服务项目
项目就像一家24小时营业的网红餐厅 🍽️👨🍳
(正在查看餐厅监控大屏的你,突然发现…)
🍲 前厅后厨分工明确
-
迎宾台(Gateway-7071)
• 唯一对外的VIP通道,所有客人必须从这里进入• 戴着智能眼镜的领班小哥会:
✓ 检查会员码(鉴权)
✓ 推荐今日特供(路由转发)
✓ 控制人流量(限流) -
用餐区(Web-7072)
• 超大的LED菜单墙(视频列表)• 每张桌子都配了互动平板(点赞/弹幕功能)
-
中央厨房(Resource-7074)
• 主厨正在用魔法料理机(FFmpeg)处理食材(视频转码)• 冷链仓库(OSS存储)里整齐码放着食材包
-
客服中心(Interact-7073)
• 戴着耳麦的小姐姐们实时处理:✨ “这道菜要加辣”(弹幕)
✨ “给厨师比心”(点赞) -
经理办公室(Admin-7070)
• 秃顶的王经理正在:🔍 审核新菜品(视频审核)
📊 查看今日营收报表(数据统计)
🚦 实时运营看板(Services面板)
✅ 正在营业中 #绿色就是好心情!迎宾台 [7071] - 忙到飞起用餐区 [7072] - 座无虚席 客服中心 [7073] - 消息爆炸中央厨房 [7074] - 灶火全开经理室 [7070] - 正在骂人❌ 歇业中 #红色警告!旧店改造区(easylive-java) - 老师傅们正在研究新菜谱(代码重构中)
💡 为什么这样设计?(主厨的思考)
- 安全第一:不能让客人直接冲进厨房拿菜(防止接口暴露)
- 高效协作:迎宾台用对讲机(Nacos)随时呼叫后厨
- 弹性扩容:突然爆单?立刻召唤兼职厨师(K8s自动扩缩容)
🍰 举个点单实例
你想看《舌尖上的代码》第8集:
- 对迎宾台说:“我要/web/舌尖上的代码/8”
- 领班用对讲机呼叫:“大堂A区接单!”
- 服务员跑去厨房:“主厨,要一份8号餐!”
- 厨房回传:“加好料了(转码完成)”
- 最后送到你面前时,还附赠弹幕小纸条~
⚠️ 如果出状况?
• 弹幕卡住:先骂客服中心(7073),再检查对讲机(OpenFeign)
• 视频加载慢:可能是主厨在摸鱼(FFmpeg进程阻塞)
• 突然502:迎宾台小哥累趴了(网关熔断)
(悄悄说:这些问题在监控大屏都能看到🔥)
🎯 设计精髓
这套系统就像米其林餐厅:
• 迎宾台严格管控(网关隔离)
• 后厨专业分工(微服务解耦)
• 随时应对突发客流(弹性架构)
了解微服务
什么是微服务?
微服务是一种软件架构风格,将一个庞大的系统拆分为多个独立的服务,每个服务都是自包含的,并专注于单一的业务能力。在微服务架构中,每个服务都是独立打包和部署的小型应用程序,它们通过轻量级通信机制(如 API)进行交互。
微服务的优势
- 小型化:每个微服务专注于单一功能,易于开发和维护。
- 自治性:微服务可独立开发、部署和扩展,不受其他服务影响。
- 松耦合:服务间通过定义良好的接口通信,内部实现细节对其他服务隐藏。
- 技术多样性:不同微服务可采用不同的编程语言、数据存储技术和框架。
- 独立部署:每个微服务可单独部署,无需影响整个系统。
- 容错性:单个服务故障不会导致整个系统崩溃。
- 易于扩展:可根据需求独立扩展特定服务,而不必扩展整个应用。
- 支持 CI/CD:微服务架构促进敏捷开发和持续集成/持续交付(CI/CD),加快功能交付速度。
微服务架构的核心优势在于其灵活性、可扩展性和容错性,但也带来了一些挑战,如服务间通信复杂性、数据一致性问题和分布式系统管理难度。
微服务的缺点
尽管微服务架构具有诸多优势,但也存在以下挑战和缺点:
-
复杂性增加
• 系统被拆分为多个服务,需管理更多服务实例、网络通信、数据一致性等问题。 -
运维难度增大
• 每个微服务需独立部署、监控、升级和维护,对自动化工具(如 Kubernetes)依赖性强。 -
服务间通信成本高
• 服务间依赖 API 调用,可能引入网络延迟、故障点,并需处理分布式事务和负载均衡。 -
数据一致性难题
• 传统 ACID 事务难以适用,需采用 Saga 模式、事件驱动或补偿事务等方案。 -
开发与测试复杂
• 需考虑服务边界划分、接口设计、版本控制,测试需覆盖服务间兼容性和端到端功能。 -
团队组织与协作挑战
• 团队需按服务划分,可能导致沟通成本增加,需更强的协调能力。 -
基础设施开销大
• 每个服务运行在独立进程中,可能消耗更多硬件资源,并需单独的数据存储。 -
故障排查困难
• 错误可能分布在多个服务中,定位问题比单体架构更复杂。 -
安全与权限管理复杂
• 更多服务意味着更多安全入口,需严格管控访问权限,防止安全漏洞。
总结
微服务架构适合大型、复杂且需要高可扩展性的系统,但在实施时需权衡其带来的额外复杂性。通过合理的设计(如清晰的领域划分)、自动化运维工具(如 Docker、Kubernetes)和有效的团队协作,可以降低其负面影响。
微服务架构在在线视频分享系统中的具体体现
1. 小型化 & 自治性
优点体现
• 单体架构问题:在单体架构中,视频上传、审核、互动、搜索等功能耦合在一个代码库中,修改一个功能可能影响整个系统。
• 微服务拆分后:
• 资源服务:只负责视频存储、转码、分片上传,可独立优化存储策略(如使用阿里云OSS)。
• 互动服务:专注处理评论、点赞、弹幕,可单独优化高并发写入(如用Redis缓存热门评论)。
• 管理后台服务:审核逻辑变更时,只需重新部署该服务,不影响主站服务。
举例:
当视频转码需求从FFmpeg改为阿里云视频点播服务时,只需修改资源服务,无需改动其他服务。
2. 技术多样性
优点体现
• 单体架构限制:必须统一使用Java+SpringBoot+MySQL技术栈。
• 微服务灵活性:
• 搜索服务:使用Elasticsearch(非Java技术栈)实现分词和推荐,比MySQL全文检索更高效。
• 实时弹幕:可用Go编写WebSocket服务,利用其高并发特性。
• 数据分析:用Python编写用户行为分析微服务,调用Spark进行大数据处理。
举例:
在互动服务中,弹幕功能需要高并发,可以用Go替代Java,而其他服务仍保持Java技术栈。
3. 独立部署 & 易于扩展
优点体现
• 扩展性:
• 热门视频导致流量激增时,只需横向扩展主站服务和资源服务的实例,无需扩展整个系统。
• 管理后台服务访问量低,可保持单实例运行。
举例:
双11活动期间,通过Kubernetes快速扩容主站服务到10个实例,活动结束后缩回2个实例。
4. 容错性
优点体现
• 故障隔离:
• 如果Elasticsearch宕机,搜索功能降级(返回缓存结果),但视频播放和评论仍可用。
• 资源服务故障时,网关可返回兜底视频(如提示“视频暂时无法加载”),而非整个系统崩溃。
举例:
当互动服务因数据库连接超时而崩溃时,用户仍能正常观看视频(主站服务不受影响)。
5. 复杂性增加
缺点体现
• 单体架构:所有功能在同一个进程内调用,无网络开销。
• 微服务问题:
• 用户发布视频需跨服务调用:
主站服务 → 资源服务(上传)→ 管理后台服务(审核)→ 主站服务(展示)
• 一次API调用可能涉及多个服务,链路变长。
举例:
用户上传视频后,需等待资源服务转码完成,再由管理后台服务审核,最后主站服务更新状态,流程复杂。
6. 运维难度增大
缺点体现
• 监控困难:
• 单体架构只需监控一个应用,微服务需监控Nacos、Gateway、Seata、各微服务等10+组件。
• 需使用Prometheus+Grafana搭建全链路监控。
举例:
某次上线后,用户反馈视频加载慢,运维需排查:
- 是资源服务存储慢?
- 还是Gateway限流?
- 或是Nacos服务发现延迟?
7. 数据一致性难题
缺点体现
• 单体架构:用户点赞视频时,可用本地事务保证“视频点赞数+1”和“用户点赞记录”的一致性。
• 微服务问题:
• 点赞涉及主站服务(更新视频点赞数)和互动服务(记录用户点赞),需引入Seata分布式事务。
• 极端情况下可能数据不一致(如点赞成功但计数未更新)。
举例:
用户点赞时,互动服务记录成功,但主站服务因网络超时未更新计数,需人工补偿数据。
8. 开发与测试复杂
缺点体现
• 接口兼容性:
• 如果主站服务修改了视频详情API的返回字段,但互动服务未适配,会导致前端弹幕加载失败。
• 测试困难:
• 需搭建完整微服务环境才能测试“视频发布→审核→展示”全流程。
举例:
开发新功能“视频合拍”,需协调资源服务(存储)、主站服务(展示)、互动服务(合拍评论)三个团队联调。
总结对比
维度 | 单体架构 | 微服务架构(本项目) |
---|---|---|
小型化 | 所有功能耦合,修改风险高 | 各服务独立,如资源服务可单独优化转码逻辑 |
技术多样性 | 必须统一技术栈 | 搜索用Elasticsearch,弹幕可用Go |
扩展性 | 必须整体扩展 | 仅扩展高流量服务(如主站服务) |
容错性 | 一个模块崩溃导致整个系统不可用 | 搜索服务宕机不影响视频播放 |
复杂性 | 代码耦合但运维简单 | 需管理服务发现、分布式事务、链路追踪等 |
数据一致性 | 本地事务保证 | 需引入Seata,仍有最终一致性风险 |
结论:
微服务适合业务复杂、需快速迭代、团队规模较大的场景(如本视频系统),但会显著增加运维和开发成本。对于小型项目,单体架构仍是更简单高效的选择。
一、架构分层解析
-
前端层(Vue+HTML)
• 技术选型:轻量级前端框架Vue实现动态交互,与后端完全解耦。• 功能映射:支撑主站模块(视频列表/详情)、个人中心、创作中心等UI交互,通过API与网关通信。
-
代理与负载均衡(Nginx集群)
• 作用:流量入口,实现SSL卸载、静态资源缓存、请求分发。• 高可用设计:集群部署避免单点故障,结合Nginx的加权轮询/一致性哈希算法均衡流量。
-
网关层(Spring Cloud Gateway)
• 核心功能:◦ 路由转发:根据路径将请求路由至主站/互动/资源等服务。
◦ 请求过滤:JWT鉴权、限流(如Redis令牌桶)、敏感词过滤(如弹幕内容)。
◦ 负载均衡:集成Ribbon,基于Nacos服务列表动态选择实例。
• 微服务治理:统一API入口,隐藏内部服务拓扑。
-
服务层(Spring Cloud微服务)
• 服务拆分与职责:服务 功能亮点 技术实现要点 资源服务 分片上传(断点续传)、视频转码(FFmpeg) Redis队列异步处理,OSS存储 主站服务 视频推荐(ES相似度计算)、详情页聚合查询 OpenFeign调用互动服务,缓存穿透防护 互动服务 实时弹幕(WebSocket)、分布式计数器(点赞) Redis Incr+定时持久化,消息队列削峰 管理后台 审核工作流(状态机)、敏感词过滤(AC自动机) Seata保证审核日志与视频状态一致性 -
存储层
• 多模数据存储:◦ Redis:缓存热点视频信息(Hash结构)、分布式锁(审核并发控制)、弹幕消息队列(Stream)。
◦ MySQL:用户关系(粉丝列表用反范式设计)、视频元数据(分库分表)。
◦ Elasticsearch:倒排索引+IK分词器支持标题/简介搜索,结合TF-IDF排序。
二、微服务架构核心设计
-
服务注册与发现(Nacos)
• 动态扩展:新增服务实例自动注册,网关/消费者实时感知。• 健康检查:心跳机制自动剔除故障节点,保障服务可用性。
-
分布式事务(Seata)
• 典型场景:用户投币时需同时更新账户余额和视频硬币数,采用AT模式(二阶段提交)。 -
服务通信
• OpenFeign:声明式调用互动服务的评论接口,集成Hystrix熔断(超时降级)。• 消息队列:视频转码完成后通过RabbitMQ通知主站服务更新状态。
-
配置中心(Nacos)
• 动态配置:如调整弹幕发送频率限制,无需重启服务即时生效。
架构分析:为什么只有 Gateway 服务对外?
从图片中的项目结构和运行状态来看,该在线视频分享系统采用 Spring Cloud 微服务架构,并严格遵循 API 网关模式,确保 easylive-cloud-gateway
(7071 端口)是唯一对外暴露的服务,而其他服务(7070-7074)仅限内部调用。以下是详细分析:
1. 服务分层与职责
服务名称 | 端口 | 运行状态 | 对外暴露? | 功能说明 |
---|---|---|---|---|
easylive-cloud-gateway | 7071 | ✅ Running | 是 | 统一入口,路由、鉴权、限流 |
easylive-cloud-web | 7072 | ✅ Running | ❌ 仅内部 | 主站业务(视频列表、详情页) |
easylive-cloud-interact | 7073 | ✅ Running | ❌ 仅内部 | 处理评论、点赞、弹幕等互动功能 |
easylive-cloud-resource | 7074 | ✅ Running | ❌ 仅内部 | 视频上传、存储、转码(FFmpeg) |
easylive-cloud-admin | 7070 | ✅ Running | ❌ 仅内部 | 后台管理(审核、用户管理) |
• easylive-cloud-gateway
(7071) 是唯一对外的服务,承担 API 路由、认证、限流、日志记录 等职责。
• 其他服务(7070-7074) 仅限内部调用,通过 Nacos 服务发现 + OpenFeign 进行通信,不直接暴露给公网。
2. 为什么这样设计?
(1) 安全性
• 减少攻击面:所有外部请求必须经过网关,避免直接暴露内部服务(如管理后台 7070
)。
• 统一鉴权:网关集中处理 JWT/OAuth2 认证,内部服务无需重复实现安全逻辑。
(2) 可维护性
• 简化客户端调用:前端只需对接网关(7071
),无需感知后端服务拓扑变化(如 interact
服务扩容)。
• 动态路由:网关可根据路径(如 /api/video/**
→ resource:7074
)灵活调整,不影响调用方。
(3) 高可用 & 负载均衡
• 网关集群化:可部署多个网关实例,通过 Nginx 负载均衡,避免单点故障。
• 内部服务无状态:web
、interact
等服务可自由伸缩,网关自动发现新实例。
(4) 监控与治理
• 集中日志:所有请求日志在网关层统一收集(如 ELK 分析)。
• 限流熔断:网关集成 Sentinel/Hystrix,防止突发流量击垮内部服务。
3. 如何确保只有 Gateway 对外?
(1) 网络层隔离
• 防火墙规则:仅开放 7071
端口(网关),其他端口(7070-7074)限制为内网访问。
• Kubernetes/云安全组:仅允许网关 Pod 接收外部流量。
(2) 服务注册与发现(Nacos)
• 内部服务注册到 Nacos,但 不绑定公网 IP,仅网关能通过服务名(如 easylive-cloud-resource
)调用它们。
(3) 网关路由配置示例
spring:cloud:gateway:routes:- id: video-serviceuri: lb://easylive-cloud-resource # 内部服务名predicates:- Path=/api/video/**filters:- StripPrefix=1 # 去掉 /api 前缀
4. 例外情况(如有)
• WebSocket 服务(如弹幕):
• 仍需通过网关(7071
)暴露,但需特殊配置 ws://
路由。
• 管理后台直连(不推荐):
• 某些场景下,管理员可能通过 VPN/跳板机直接访问 easylive-cloud-admin:7070
,但应尽量避免。
5. 验证方式
(1) 测试外部访问
# 直接访问内部服务(应失败)
curl http://localhost:7072/api/video/1 # 返回 403 或连接拒绝# 通过网关访问(应成功)
curl http://localhost:7071/api/video/1 # 正常返回数据
(2) 检查 Nacos 服务列表
• 确认 easylive-cloud-resource
等服务的 IP 是否为内网地址(如 192.168.x.x
),而非公网 IP。
总结
✅ 该架构严格遵循微服务最佳实践:
• easylive-cloud-gateway:7071
是唯一对外入口,承担路由、安全、流控等职责。
• 其他服务(7070-7074)仅限内部通信,通过 Nacos + OpenFeign 协作。
• 安全性、可维护性、扩展性 得到有效保障。
相关文章:
【Easylive】微服务架构在系统中的优缺点的具体体现
【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版 在线视频分享系统项目简介 系统概述 该项目是一个基于SpringCloud微服务架构的在线视频分享系统,主要功能包括: • 用户自主发布视频 • 后台视频审核 • 用户互动…...
锁(Mutex)、信号量(Semaphore)与条件量(Condition Variable)
一、同步机制的核心意义 在多线程/多进程编程中,当多个执行流共享资源(如变量、内存、文件)时,可能因操作顺序不确定导致数据竞争(Data Race)。同步机制的作用是: 保证原子性:确保…...
使用pnpm第一次运行项目报错 ERR_PNPM_NO_PKG_MANIFEST No package.json found in E:\
开始用unibestpnpm写一个小程序 运行pnpm init报错 如标题所示没有package.json这个文件 博主犯了一个很愚蠢的错误。。 准备方案手动创建一个json文件 此时才发现没到根目录下,创建了一个项目之后就没有切入文件夹里。 切入根目录再下载就成功啦...
前沿篇|CAN XL 与 TSN 深度解读
引言 1. CAN XL 标准演进与设计目标 2. CAN XL 物理层与帧格式详解 3. 时间敏感网络 (TSN) 关键技术解析 4. CAN XL + TSN 在自动驾驶领域的典型应用...
从零开始学A2A一:A2A 协议的高级应用与优化
A2A 协议的高级应用与优化 学习目标 掌握 A2A 高级功能 理解多用户支持机制掌握长期任务管理方法学习服务性能优化技巧 理解与 MCP 的差异 分析多智能体场景下的优势掌握不同场景的选择策略 第一部分:多用户支持机制 1. 用户隔离架构 #mermaid-svg-Awx5UVYtqOF…...
追赶地球变化的“快镜头“:遥感时间分辨率的奥秘
在地球表面,万物的生长、兴衰和变迁,如同一部永不停歇的电影。而科学家们想要看清每一帧画面,就必须依赖遥感卫星这个"超级摄影师"。今天,我们就来聊聊遥感领域里一个关键的维度——时间分辨率。 想象一下,如…...
轻量还是全量?Kubernetes ConfigMap 与专业配置中心的抉择
文章目录 简介什么是 ConfigMapConfigMap 的核心能力配置存储与注入动态更新与 Kubernetes 原生生态深度集成 ConfigMap 的固有局限专业配置中心对比选型建议结语 简介 在现代微服务架构中,集中式配置管理是保证应用可维护性、可扩展性和安全性的关键环节。Kuberne…...
mybatis plus打印sql日志到指定目录
1、mybatis plus打印sql日志 参考文档:mybatis plus打印sql日志_mybatisplus日志打印-CSDN博客 2、修改 修改InfoLevelLogger Override public void debug(String s) {// 修改这里logger.info(s);log.debug(s); } 增加:log.debug(s); 修改logback.x…...
CUDAfy的使用
此文章是对一篇使用文档的翻译总结 文档地址 https://www.doczj.com/doc/0f2570173.html CUDAfy使用步骤 1. 环境准备 硬件要求:支持CUDA的NVIDIA显卡(如GTX系列)。软件安装: 安装最新版NVIDIA驱动。下载并安…...
DeepSeek 部署中的常见问题及解决方案
DeepSeek(深度求索)大模型部署过程中常见问题的系统性解决方案,涵盖环境配置、模型加载、性能优化、安全防护及企业级部署等核心场景,结合官方文档与社区实践提供可落地的操作指南: 一、环境配置与依赖问题 1. 操作系统与硬件兼容性 问题表现:部署失败提示驱动不兼容或…...
【AI提示词】儿童看护员
提示说明 儿童看护员旨在帮助用户构建一个既专业又富有爱心的儿童看护员角色,以满足儿童在成长过程中的各种需求。 提示词 # 角色 儿童看护员## 注意 1. 儿童看护员应具备亲和力和耐心,以确保与儿童的良好互动。 2. 专家设计应关注儿童的安全、健康和…...
深入解析 Python 中的装饰器 —— 从基础到实战
1. 装饰器基础 1.1 什么是装饰器? 装饰器本质上是一个 Python 函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能。装饰器的返回值也是一个函数对象。 1.2 语法糖: 符号 Python 提供了 符号作为装饰器的语法糖,…...
学习海康VisionMaster之中线查找
一:进一步学习了 今天学习下VisionMaster中的中线查找,这个就是字面意思,输入两条直线,输出两条直线的中线 二:开始学习 1:什么是中线查找?今天这个比较简单,其实这个模块算是一个几…...
笔记整理五
STP生成树 stp生成树是用于解决二层环路问题的协议。 二层环路为有以下三种: 1.广播风暴 2.MAC地址的偏移(每一次循环,都会导致交换机来回刷新MAC地址表记录) 3.多帧复制 stp生成树:需要将原本的环型拓扑结构转换…...
js实现的前端水印
效果 var defaultConfig {content: [], // 水印内容数组fontSize: 14, // 字体大小(px)fontFamily: sans-serif, // 字体color: rgba(255, 255, 255,.3), // 字体颜色rotate: -20, // 旋转角度(度数)zIndex: 2147483647, // 层级globalAlpha: 0.5, // 透明度canvasWidth: 30…...
前端服务器部署报错记录
报错1:Refused to apply style from http://xxxxxxx.online/assets/index.DepkYCYv.css because its MIME type (text/plain) is not a supported stylesheet MIME type, and strict MIME checking is enabled. index-Dnq3oQAv.js:1 解释:浏览器期望加载…...
JAVA中多线程的经典案例
文章目录 一、线程安全的单例模式(一)饿汉模式(二)懒汉模式 二、阻塞队列(一)生产者消费者模型(二)阻塞队列(三)自定义阻塞队列 三、定时器(一&am…...
国产三维CAD皇冠CAD(CrownCAD)在「轨道交通行业」建模教程:轨道列车
在轨道交通行业,复杂系统集成、大规模装配验证与跨地域协同设计始终是核心痛点。传统设计工具难以应对动辄百万级零部件的装配挑战,且数据孤岛、版本混乱、硬件成本高昂等问题长期制约行业数字化转型。皇冠CAD(CrownCAD)作为国产云…...
Linux 日常运维命令大全
Linux 作为一种开源操作系统,在服务器运维中扮演着重要角色。掌握常用的 Linux 命令对于运维人员而言至关重要。本文将整理一份 Linux 服务器运维常用命令大全,帮助你在日常工作中提高效率和准确性。 1. 基础命令 基础命令是Linux操作的起点࿰…...
安全测试报告模板
安全测试报告 一、项目概况 项目名称XX智慧医疗平台被测系统版本V2.3.1测试类型渗透测试漏洞扫描测试时间2024年2月15-20日测试标准OWASP TOP 10 2021 二、测试环境 生产环境镜像: - 服务器:CentOS 7.9 Tomcat 9 - 数据库:MySQL 8.0集群…...
树莓派超全系列教程文档--(31)config.txt常用选项介绍
config.txt常用选项介绍 常用选项常用显示选项hdmi_enable_4kp60 常用硬件配置选项camera_auto_detectdisplay_auto_detectdtoverlaydtparamarm_boostpower_force_3v3_pwm 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 常用选项 常用显示选项 …...
算法-堆+单调栈
堆 首先堆在我们的Java中我们的是一个优先队列类 PriorityQueue 然后我们要弄最大堆和最小堆 最大堆: PriorityQueue<Integer> pq new PriorityQueue<Integer>((a, b) -> b - a); 最小堆: PriorityQueue<Integer> pq new P…...
Charles破解 激活码 Java
第一步,下载charles Download a Free Trial of Charles • Charles Web Debugging Proxy 第二部,生成key,这里使用的是java代码 import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Random;public class test {private static final int ROUNDS 12;p…...
线上蓝桥杯比赛环境配置
1.编译环境(以下是JAVA示例) Java软件开发编程环境 链接: https://pan.baidu.com/s/1JRNx0bkgHmPqQhANSFBNkQ 提取码: ftgw 下载对应的编译器和jdk以及对应的API文档 解压后把eclipse发送到桌面方便使用 2.录屏软件,我这边选择的是OBS St…...
民办生从零学C的第十一天:操作符
每日励志:我们可以随时的转身,但是决不能后退。 一.操作符的分类 算术操作符:、-、*、/、% 移位操作符:<<、>> 位操作符:&、|、^ 赋值操作符:、、-、*、/、%、<<、>>、&…...
疑难问题解决(2)
(1):在k230开发板中,ubuntu操作系统中的文件夹中的k230_sdk文件夹与canmv_k230文件夹的区别,以及 /home/ubuntu/canmv_k230/src/rtsmart/rtsmart/userapps/07_driver_hello 与 /home/ubuntu/k230_sdk/src/big/rt-smart…...
第六章 进阶04 尊重
本周周会给大家讲的议题是:尊重。 用“尊重”给周报文件冠名,周会中打开这个文件,就可以在标题中醒目地看到,加深了大家的印象、勾起了大家的好奇心。坚持长期事项的同时,偶尔也灵光一现给团队管理加入一些小插曲&…...
Android 12.0 framework实现对系统语言切换的功能实现
1.前言 在12.0的系统rom定制化开发过程中,在定制某些接口的过程中,需要通过系统提供接口,然后实现对系统语言的切换 功能实现,接下来分析下系统中关于系统语言切换的相关功能 2.framework实现对系统语言切换的功能实现的核心类 frameworks/base/core/java/android/app/IA…...
Origin LabTalk
之前用惯了matplotlib绘图,出于科研需要部分图用origin来画,但是还是想着要结合python来处理数据更加的方便,经过一番捣鼓发现origin自带有labtalk,并且还带有python的环境,真可谓是NB的很。 若能由程序代劳,何必亲手?…...
基于VS Code 为核心平台的python语言智能体开发平台搭建
以下是基于 VS Code 为核心平台,整合 Node-RED、Gradio、Docker Desktop 的智能体可视化开发平台优化方案,聚焦工具链深度集成与开发效率提升: 一、核心架构设计 #mermaid-svg-f8l9kYPAlJ2TlpGF {font-family:"trebuchet ms",verd…...
Python 创意:AI 图像生成
一、基于 Stable Diffusion 的本地创意创作 Stable Diffusion 是开源图像生成模型的代表,通过 Python 结合diffusers库,可实现本地图像生成。 1. 环境搭建 首先,安装必要的库: pip install diffusers transformers torch若使用 GPU 加速,需安装对应版本的 CUDA 和 cuD…...
vue3 传参 传入变量名
背景: 需求是:在vue框架中,接口传参我们需要穿“变量名”,而不是字符串 通俗点说法是:在网络接口请求的时候,要传属性名 效果展示: vue2核心代码: this[_keyParam] vue3核心代码&…...
Skipped breakpoint at ... because of stepping in another thread问题分析
在Java多线程应用程序的调试过程中,开发者可能会遇到“Skipped breakpoint at … because of stepping in another thread”这样的提示。这通常是因为调试器在处理多线程操作时,忽略了某个断点。本文将详细分析这一问题的原因,并提供有效的解…...
MATLAB脚本实现了一个转子系统的参数扫描和分岔分析
% 参数扫描范围 clc; clear; close all;S_values 500:200:20000; % 转速范围% 定义系统参数 N 5; % 质量点数量 num_nodes N; % 节点数 num_dofs_per_node 4; % 每个节点的自由度数 num_elements num_nodes-1; % 单元数 total_dofs num_nodes * num_dofs_per_node; % 总自…...
基于Flask的AI工具聚合平台技术解析
基于Flask的AI工具聚合平台技术解析 一、项目架构设计 本系统采用经典的三层架构模式,通过Mermaid架构图可清晰看到数据流向: 用户请求通过浏览器发送至Flask服务器路由系统解析请求路径模板引擎动态渲染页面静态资源提供样式支持独立数据模块实现内容…...
AUTOSAR图解==>AUTOSAR_SWS_CryptoInterface
AUTOSAR 加密接口(Crypto Interface)详解 基于AUTOSAR标准4.4.0的加密接口规范详细分析与图解 目录 概述 1.1 加密接口的作用与位置 1.2 主要术语解释架构设计 2.1 加密接口架构 2.2 组件关系内部结构 3.1 类结构 3.2 配置项运行流程 4.1 加密请求处理流程 4.2 同步与异步处理…...
GCD算法的学习
GCD算法的学习 学习了前辈wzx15927662183的文章GCD算法精讲-CSDN博客 介绍 GCD通常用来求两个数的最大公约数 算法的核心:gcd(a,b) gcd(b,a % b) 证明的思路: 证明 gcd(a, b) gcd(b, a % b) 的思路: 设 a > b 1. 构造 a % b : 设 …...
完美解决浏览器不能复制的问题(比如赛氪网的中题库练习题)
仅供复制题库题目进行打印学习使用! 最近想把赛氪网题库中的题目打印出来做练习,发现题库中的题目不能复制,不能在试卷上勾画标记太难受了,而且不能留作材料以后复习,故出此策。 而且CtrlP打印出的pdf会缺少题目。(我…...
Java 爬虫按关键字搜索淘宝商品:实现与优化
在电商领域,获取淘宝商品信息对于市场分析、价格监控和竞争情报等方面具有重要意义。Java 爬虫技术为我们提供了一种高效、自动化的方式来按关键字搜索淘宝商品。本文将详细介绍如何使用 Java 爬虫按关键字搜索淘宝商品,并提供完整的代码示例。 一、准备…...
build.gradle task copyJarToDesktop
build.gradle task copyJarToDesktop 构建完,拷贝jar包到指定文件夹AAA,例如:桌面,方便拉到宝塔发布 build.gradle plugins {id org.springframework.boot }jar {enabled false // 不生成 plain.jar }bootJar {archiveFileNa…...
Git合并分支的两种常用方式`git merge`和`git cherry-pick`
Git合并分支的两种常用方式git merge和git cherry-pick 写在前面1. git merge用途工作方式使用git命令方式合并使用idea工具方式合并 2. git cherry-pick用途工作方式使用git命令方式合并使用idea工具方式合并 3. 区别总结 写在前面 一般我们使用git合并分支常用的就是git mer…...
基于n8n的AI应用工作流原理与技术解析
基于n8n的AI应用工作流原理与技术解析 在AI技术深度融入企业数字化转型的今天,开源工作流自动化工具n8n凭借其灵活的架构和强大的集成能力,成为构建智能自动化流程的核心引擎。本文将从技术原理、AI融合机制、典型应用场景三个维度,解析n8n在…...
Day3-UFS深入学习路线
UFS 学习链接1:UPUI数据包格式 学习链接2:UPUI数据包详解 学习链接3:UFS电源及低功耗 一、基础准备阶段 1.理解存储技术背景 学习NAND Flash基本原理(SLC/MLC/TLC、读写擦除操作、磨损均衡)。对比其他存储协议&…...
广东2024信息安全管理与评估一阶段答案截图
2023-2024 学年广东省职业院校技能大赛 高等职业教育组 信息安全管理与评估 赛题一 模块一 网络平台搭建与设备安全防护 一、 比赛时间 本阶段比赛时间为 180 分钟。 二、 赛项信息 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一…...
8.Rust+Axum 数据库集成实战:从 ORM 选型到用户管理系统开发
摘要 深入探讨 RustAxum 数据库集成,包括 ORM 选型及实践,助力用户管理系统开发。 一、引言 在现代 Web 应用开发中,数据库集成是至关重要的一环。Rust 凭借其高性能、内存安全等特性,与 Axum 这个轻量级且高效的 Web 框架结合…...
题解:CF886E Maximum Element
正难则反,考虑长度为 i i i 的排列得到正确的结果的方案数。 设 d p i dp_i dpi 表示长度为 i i i 的排列直到循环完也没有提前 return 的方案数。考虑 i i i 所放置的位置,由于不会提前 return,也就说明该数字所在的位置为 [ i − k…...
OPC Client第3讲(wxwidgets):wxFormBuilder;基础框架;事件处理
wxwidgets开源桌面软件框架使用 - 哔哩哔哩 wxwidgets跨平台GUI框架使用入门详解_哔哩哔哩_bilibili 一、wxwidgets配置【见上一讲五、】 二、安装wxFormBuilder 1、wxFormBuilder介绍、安装 wxFormBuilder是一个开源的GUI设计工具,支持C、Python等语言&#…...
20250418项目接入scalar
scalar官网地址 scalar-dotnet文档地址 1. 引入nuget包 这里必须是2.1.* 以上 否则不支持多库 <PackageReference Include"Scalar.AspNetCore" Version"2.1.16" />2. 引入命名空间 using Scalar.AspNetCore;3. 使用scalar var documents new[] {…...
数控铣床自动上下料机械手控制装置设计
一、引言 在数控铣床加工过程中,实现自动上下料能够提高生产效率、降低劳动强度、减少人为因素对加工质量的影响。设计一款高效、可靠的数控铣床自动上下料机械手控制装置,是实现数控铣床自动化加工的关键。 二、控制装置设计要求 自动化程度…...
STM32F407的引脚说明
当笔记站 引脚说明在STM32F407数据手册中的48页到71页,下载地址: https://www.stmcu.com.cn/Designresource/detail/document/696193?auto_download1 以下是在图片转表格得到的东西 Pinouts and pin description …...