21.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--身份认证服务拆分规划
从这篇文章开始我们将开始一步一步的拆分现有的单体应用孢子记账项目。按照上一篇文章中的介绍,我们首先把身份认证服务拆分出来。
一、功能分析
在当前的单体应用中,身份认证服务主要负责用户认证、授权以及角色权限管理等核心功能。
在拆分之前,我们需要对现有的身份认证服务进行全面的功能分析,明确其核心职责和依赖关系。以下是身份认证服务的主要功能模块:
- 用户认证:处理用户的登录、注册、密码重置等操作。
- 用户信息管理:维护用户的基本信息,包括个人资料和联系方式。
- 角色权限管理:管理用户角色的分配和权限控制。
- 访问控制:验证用户权限并授权访问资源。
- 日志审计:记录用户操作日志,支持后续的审计和分析。
- 安全策略:制定并执行安全策略,如密码复杂度要求和登录失败限制。
- 辅助功能:包括验证码生成和用户在线状态管理等。
在这些功能中,用户认证、用户信息管理和角色权限管理模块已经存在于现有的单体应用中,而访问控制、日志审计和安全策略等功能需要在拆分后进一步完善。同时,现有模块也需要扩展,以支持后续Ocelot网关的认证功能。
在拆分过程中,需要重点关注以下几个方面:
- 数据库设计:为身份认证服务设计独立的数据库,用于存储用户信息和角色权限等数据。
- API设计:设计RESTful API接口,供其他服务调用。
- 拆分步骤:制定合理的拆分计划,确保过程平稳。
- 非业务功能:考虑服务间通信延迟、分布式事务处理和服务依赖关系等(前述文章已讲解)。
- 运维复杂度:关注服务监控、日志管理和自动化部署等运维需求(前述文章已讲解)。
拆分过程中需确保功能完整性和数据一致性,避免对现有系统造成影响。同时,还需考虑未来的扩展性和可维护性,以支持后续的服务拆分和功能扩展。
完成拆分后,身份认证服务将成为一个独立的微服务,其他服务可通过RESTful API与其交互。我们还需实现服务注册与发现机制,以便其他服务动态获取身份认证服务的地址和端口。
二、数据库设计
在拆分身份认证服务之前,需要对现有数据库进行全面分析,明确与身份认证相关的表和字段。根据功能需求,身份认证服务的数据库设计可划分为以下模块:
- 用户表:存储用户基本信息,如用户名、密码、邮箱、手机号等。
- 角色表:存储角色信息,包括角色名称和描述。
- 权限表:存储权限信息,包括权限名称和描述。
- 用户角色关联表:记录用户与角色的关联关系。
- 角色权限关联表:记录角色与权限的关联关系。
- 操作日志表:记录用户操作日志,包括操作时间、类型和结果。
- 安全策略表:存储安全策略信息,如密码复杂度要求和登录失败限制。
- 辅助表:包括验证码表、在线用户表等。
目前系统中已有 SysUser、SysRole、SysUrl 和 SysRoleUrl 四个表与身份认证相关。需要对这些表进行字段扩展,并新增部分表以满足拆分后的需求。
在迁移过程中,应将上述表和字段转移至新的身份认证服务数据库,并确保数据的一致性和完整性。以下是数据库设计的关键考虑点:
- 数据库类型:选择适合的数据库类型,如关系型数据库(MySQL、PostgreSQL)或非关系型数据库(MongoDB、Redis)。
- 数据库架构:合理设计表结构、索引和数据分区。
- 数据库安全:确保数据加密、访问控制和备份恢复机制到位。
- 数据库性能:优化查询性能,采用缓存机制和负载均衡。
- 数据库监控:实现性能监控、异常报警和日志分析。
为满足业务需求并兼顾性能与安全性,建议采用以下方案:
- 关系型数据库 MySQL:存储用户表、角色表、权限表、用户角色关联表和角色权限关联表等结构化数据。
- 非关系型数据库 MongoDB:存储操作日志表和安全策略表等非结构化数据。
- 缓存数据库 Redis:存储验证码表和在线用户表等高频访问数据。
Tip:原计划将安全策略存储为 Nacos 配置项,但考虑到使用者可能缺乏技术背景,且 Nacos 管理界面不宜暴露在公网,为提升安全性,决定将安全策略存储在数据库中。
通过合理的数据库设计,确保身份认证服务具备高性能、高安全性和良好的扩展性,为后续服务拆分和功能扩展奠定基础。
三、API设计
在拆分身份认证服务时,需要设计RESTful API接口,以便其他服务通过HTTP协议与其交互。以下是身份认证服务的API设计方案:
-
用户认证接口
- 登录:
POST /api/auth/login
- 登出:
POST /api/auth/logout
- 注册:
POST /api/auth/register
- 重置密码:
POST /api/auth/reset-password
- 刷新Token:
POST /api/auth/refresh-token
- 登录:
-
用户信息管理接口
- 获取用户信息:
GET /api/auth/user/{userId}
- 更新用户信息:
PUT /api/auth/user/{userId}
- 删除用户:
DELETE /api/auth/user/{userId}
- 获取用户列表:
GET /api/auth/users
- 创建用户:
POST /api/auth/user
- 更新用户状态:
PUT /api/auth/user/{userId}/status
- 获取用户信息:
-
角色权限管理接口
- 获取角色列表:
GET /api/auth/roles
- 获取权限列表:
GET /api/auth/permissions
- 创建权限:
POST /api/auth/permissions
- 更新权限:
PUT /api/auth/permissions/{permissionId}
- 删除权限:
DELETE /api/auth/permissions/{permissionId}
- 获取角色权限:
GET /api/auth/roles/{roleId}/permissions
- 更新角色权限:
PUT /api/auth/roles/{roleId}/permissions
- 删除角色权限:
DELETE /api/auth/roles/{roleId}/permissions/{permissionId}
- 获取角色列表:
-
用户角色关联接口
- 获取用户角色列表:
GET /api/auth/user/{userId}/roles
- 更新用户角色:
PUT /api/auth/user/{userId}/roles
- 删除用户角色:
DELETE /api/auth/user/{userId}/roles/{roleId}
- 创建用户角色:
POST /api/auth/user/{userId}/roles
- 获取用户角色列表:
-
操作日志接口
- 获取操作日志列表:
GET /api/auth/logs
- 获取操作日志详情:
GET /api/auth/logs/{logId}
- 获取操作日志列表:
-
安全策略接口
- 获取安全策略:
GET /api/auth/security-policy
- 更新安全策略:
PUT /api/auth/security-policy
- 删除安全策略:
DELETE /api/auth/security-policy/{policyId}
- 创建安全策略:
POST /api/auth/security-policy
- 获取安全策略:
-
辅助功能接口
- 获取验证码:
GET /api/auth/captcha
- 获取在线用户列表:
GET /api/auth/online-users
- 获取在线用户详情:
GET /api/auth/online-users/{userId}
- 更新在线用户状态:
PUT /api/auth/online-users/{userId}
- 获取在线用户统计:
GET /api/auth/online-users/statistics
- 获取验证码:
通过以上API设计,确保身份认证服务具备清晰的功能划分和高效的交互能力,同时为后续的扩展和维护提供便利。
在API设计中,需要综合考虑高效性和安全性。通过遵循RESTful API设计规范,使用URI表示资源、HTTP方法表示操作,并采用状态码表示结果,同时实现API版本控制以支持未来扩展。为方便其他服务调用和测试,可使用Swagger生成详细的API文档。API性能优化至关重要,应着力提升请求响应速度和并发处理能力,并引入数据缓存机制。为保障系统稳定性,应设计完善的API监控和日志管理方案,包括记录请求日志、错误日志及性能指标。此外,统一的异常处理机制能够返回标准化的错误码和错误信息,从而提升用户体验。
四、非业务功能
4.1 安全性
在微服务架构中,安全性是至关重要的。为了防止未授权访问和数据泄露,身份认证服务的API接口需要具备以下安全设计:
- 数据传输加密:使用HTTPS协议加密数据传输,确保网络传输过程中的数据安全。
- 身份认证机制:采用JWT(JSON Web Token)认证,验证用户身份的合法性。
- 敏感数据保护:对用户密码、访问令牌等敏感数据进行加密存储。
- 访问控制:实现IP白名单和黑名单机制,限制特定IP地址的访问权限。
- 日志审计:定期审查和监控API访问日志,快速发现异常访问行为。
- 频率限制:设置API访问频率限制,防止恶意攻击和滥用。
- 漏洞管理:定期更新系统,修复已知安全漏洞,提升整体安全性。
通过以上措施,可以有效保障用户数据的安全性和系统的稳定性。此外,需定期开展安全测试和漏洞扫描,及时发现并修复潜在的安全隐患。
4.2 性能优化
在微服务架构中,性能优化是提升用户体验和系统稳定性的关键。针对身份认证服务,可以通过引入 Redis 缓存用户登录状态和权限信息来减少对数据库的频繁访问,从而降低数据库压力。同时,对于短信发送、邮件发送等耗时操作,可以采用异步处理方式,将任务放入消息队列中执行,以避免阻塞主线程并提高系统响应速度。此外,通过合理使用异步方法优化 API 接口性能,可以进一步提升并发处理能力。
五、总结
通过以上分析和设计,我们为身份认证服务的拆分奠定了基础。接下来,我们将按照设计方案逐步实施拆分工作,并在过程中不断优化和完善服务功能。拆分完成后,身份认证服务将成为一个独立的微服务,具备高性能、高安全性和良好的扩展性,为整个微服务架构的稳定运行提供有力支持。
在下一篇文章中,我们将按照本文所述的内容拆分身份认证服务,并进行详细的代码实现和测试验证。
相关文章:
21.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--身份认证服务拆分规划
从这篇文章开始我们将开始一步一步的拆分现有的单体应用孢子记账项目。按照上一篇文章中的介绍,我们首先把身份认证服务拆分出来。 一、功能分析 在当前的单体应用中,身份认证服务主要负责用户认证、授权以及角色权限管理等核心功能。 在拆分之前&…...
人工智能100问☞第19问:什么是专家系统?
目录 一、通俗解释 二、专业解析 三、权威参考 专家系统是基于知识库(存储专家经验与规则)和推理机(模拟专家逻辑判断)的人工智能程序,能在特定领域(如医疗诊断、工业控制)高效解决复杂问题。 一、通俗解释 专家系统就像个“智能版老师傅…...
AutoGen+Deepseek+chainlit的简单使用
AutoGen 的应用场景 AutoGen 作为一个强大的多智能体协作框架,可用于多种复杂任务: 自动化工作流:构建由多个智能体组成的流水线,例如数据收集、分析、报告生成复杂问题分解:将难题拆解为子任务,分配给不…...
贪心算法专题(Part1)
目录 1. 贪心算法简介 2. 柠檬水找零 3. 将数组和减半的最少操作次数 4. 递增的三元子序列 5. K次取反后最大化的数组和 6. 增减字符串匹配 7. 分发饼干 8. 整数替换 1. 贪心算法简介 2. 柠檬水找零 题目链接:860. 柠檬水找零 - 力扣(LeetCode…...
PyTorch API 4 - 分布式通信、分布式张量
文章目录 分布式通信包 - torch.distributed后端支持PyTorch 内置的后端选择哪个后端?常见环境变量选择使用的网络接口其他NCCL环境变量 基础概念初始化返回类型:boolTCP初始化共享文件系统初始化环境变量初始化方法 初始化后操作关闭处理重新初始化 组D…...
《类和对象(中)》
引言: 上次我们主要学习了类的相关知识,今天我们就来学习类和对象(中),今天也会用到之前学习过的东西,可以说是前面知识的结合,较前面会难一点(打个预防针)。 一:类的默认成员函数…...
SSH终端登录与网络共享
SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议 注意 SSH终端登录的前提是:电脑和板卡都能够通过网络相连接及通信 与连接互联网不一样,SSH可以不用互联网,只要电脑和板卡组成一个小型网络即可 网络方案 如果您…...
n8n系列(5):LangChain与大语言模型应用
引言 n8n作为一个强大的工作流自动化平台,可以通过集成LangChain框架,为用户提供了便捷地利用OpenAI、Azure OpenAI等大语言模型的能力。 本文将深入探讨n8n中的AI集成功能,特别是LangChain节点的使用,以及如何构建智能化的工作流程来解决实际业务问题。 1. n8n的AI集成概…...
springboot3+vue3融合项目实战-大事件文章管理系统-更新用户信息
在一下三个代码处进行修改 在UserController里面增加uadate方法 PutMapping ("/update")public Result update(RequestBody Validated User user){userService.update(user);return Result.success();}在userservice中增加update方法 void update(User user); 然…...
20250510-查看 Anaconda 配置的镜像源
打开 Anaconda Prompt 查看 Anaconda 当前配置的镜像源,使用命令 conda config --show channels这将显示当前配置的通道(channels),即镜像源列表。 此外,还可以使用 conda config --show命令来显示conda的配置信息&…...
CDGP数据治理主观题评分标准与得分策略
1.数据模型题目评分标准 1)准确理解题目中所描述的业务逻辑和需求得[1分] 2)正确使用模型设计方法,使用信息工程、信息建模集成定义、巴克符号、陈氏符号等其中一种得[1分] 3)正确设计实体和属性,题目中涉及的实体数量为25-30个,10个以内得[2分],10-20个得[3分],25个…...
[学习]RTKLib详解:sbas.c与rtcm.c
RTKLib详解:sbas.c与rtcm.c 本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。 [学习] RTKlib详解:功能、工具与源码结构解析 [学习]RTKLib详解:pntp…...
【基础IO下】磁盘/软硬链接/动静态库
前言: 文件分为内存文件和磁盘文件。磁盘文件是一个特殊的存在,因为磁盘文件不属于冯诺依曼体系,而是位于专门的存储设备中。因此,磁盘文件存在的意义是将文件更好的存储起来,一边后续对文件进行访问。在高效存储磁盘…...
JAVA练习题(1) 卖飞机票
import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scnew Scanner(System.in);System.out.println("请输入飞机的票价:");int pricesc.nextInt();System.out.println("请输入月份:");…...
SpringBoot框架开发网络安全科普系统开发实现
概述 基于SpringBoot框架的网络安全科普系统开发指南,该系统集知识科普、案例学习、在线测试等功能于一体,本文将详细介绍系统架构设计、功能实现及技术要点,帮助开发者快速构建专业的网络安全教育平台。 主要内容 系统功能架构 本系统采…...
机器学习 day02
文章目录 前言一、TF-IDF特征词重要度特征提取二、无量纲化处理1.最大最小值归一化2.normalize归一化3.StanderScaler标准化 前言 通过今天的学习,我掌握了TF-IDF特征词重要度特征提取以及无量纲化处理的相关知识和用法 一、TF-IDF特征词重要度特征提取 机器学习算…...
《AI大模型应知应会100篇》第53篇:Hugging Face生态系统入门
第53篇:Hugging Face生态系统入门 ——从模型获取到部署的全流程实战指南 📌 摘要 在人工智能快速发展的今天,Hugging Face已成为自然语言处理(NLP)领域最具影响力的开源平台之一。它不仅提供丰富的预训练模型、强大…...
计网学习笔记———网络
🌿网络是泛化的概念 网络是泛化的概念 🍂泛化理解 网络的概念在生活中无处不在举例:社交网络、电话网路、电网、计算机网络 🌿网络的定义 定义: 离散的个体通过通讯手段连成群体,实现资源的共享与交流、个…...
Vue3 怎么在ElMessage消息提示组件中添加自定义icon图标
1、定义icon组件代码: <template><svg :class"svgClass" aria-hidden"true"><use :xlink:href"iconName" :fill"color"/></svg> </template><script> export default defineComponen…...
17.Excel:实用的 VBA 自动化程序
一 excel 设置 开始-选项 二 批量创建工作表 某工作簿用于保存31天的东西,手动创建31个工作表不方便。 A1单元格输入内容,或者空着。从A2单元格开始,一定要以字符形式的,不能以数值和日期形式。12345这是数值形式,1月…...
Kubernetes生产实战(十六):集群安全加固全攻略
Kubernetes集群安全加固全攻略:生产环境必备的12个关键策略 在容器化时代,Kubernetes已成为企业应用部署的核心基础设施。但根据CNCF 2023年云原生安全报告显示,75%的安全事件源于K8s配置错误。本文将基于生产环境实践,系统讲解集…...
Cadence学习笔记之---导入PCB板框、网表
目录 01 | 引 言 02 | 环境描述 03 | 导入PCB板框 04 | 自画PCB板框 05 | 导入PCB网表 06 | 总 结 01 | 引 言 在上一篇小记中讲述了创建PCB工程的操作步骤、PCB工程中的类与子类,以及Cadence颇具特色的颜色管理器。 本篇小记主要记述如何导入PCB板框、自画…...
嵌入式硬件篇---麦克纳姆轮(简单运动实现)
文章目录 前言1. 麦克纳姆轮的基本布局X型布局O型布局 2. 运动模式实现原理(1) 前进/后退前进后退 (2) 左右平移向左平移向右平移 (3) 原地旋转顺时针旋转(右旋)逆时针旋转(左旋) (4) 斜向移动左上45移动 (5) 180旋转 3. 数学原理…...
en33网络配置文件未托管
从 nmcli device status 的输出可以看到,所有网络设备(包括 ens33)都处于 "未托管"(unmanaged)状态,这导致 NetworkManager 和传统的 network.service 都无法管理网络接口,从而引发 n…...
嵌入式学习--江协51单片机day4
昨天周五没有学习,因为中午没有睡觉,下午和晚上挤不出整块的时间。周日有考试今天也没有学很多啊,但以后周末会是学一天,另一天休息和写周总结。 今天学了串口通信和LED点阵屏,硬件原理是真的很迷,一但想搞…...
Hadoop 2.x设计理念解析
目录 一、背景 二、整体架构 三、组件详解 3.1 yarn 3.2 hdfs 四、计算流程 4.1 上传资源到 HDFS 4.2 向 RM 提交作业请求 4.3 RM 调度资源启动 AM 4.4 AM运行用户代码 4.5 NodeManager运行用户代码 4.6 资源释放 五、设计不足 一、背景 有人可能会好奇…...
diy装机成功录
三天前,我正式开启了这次装机之旅,购入了一颗性能强劲的 i5-12400 CPU,一块绘图能力出色的 3060ti 显卡,还有技嘉主板、高效散热器、16G 内存条、2T 固态硬盘,以及气派的机箱和风扇,满心期待能亲手打造一台…...
睿思量化小程序
睿思量化小程序是成都睿思商智科技有限公司最新研发和运营的金融数据统计分析工具,旨在通过量化指标筛选与多策略历史回测,帮助用户科学配置基金资产,成为个人投资者与机构用户的“智能化财富管家”。 核心功能:数据驱动决策&…...
STM32实现九轴IMU的卡尔曼滤波
在嵌入式系统中,精确的姿态估计对于无人机、机器人和虚拟现实等应用至关重要。九轴惯性测量单元(IMU)通过三轴加速度计、陀螺仪和磁力计提供全面的运动数据。然而,这些传感器数据常伴随噪声和漂移,单独使用无法满足高精…...
JS DOM操作与事件处理从入门到实践
对于前端开发者来说,让静态的 HTML 页面变得生动、可交互是核心技能之一。实现这一切的关键在于理解和运用文档对象模型 (DOM) 以及 JavaScript 的事件处理机制。本文将带你深入浅出地探索 DOM 操作的奥秘,并掌握JavaScript 事件处理的方方面面。 目录 …...
Hive表JOIN性能问
在处理100TB的Hive表JOIN性能问题时,需采用分层优化策略,结合数据分布特征、存储格式和计算引擎特性。以下是系统性优化方案: 1. 数据倾斜优化(Skew Join) 1.1 识别倾斜键 方法:统计JOIN键的分布频率&…...
关键点检测--使用YOLOv8对Leeds Sports Pose(LSP)关键点检测
目录 1. Leeds Sports Pose数据集下载2. 数据集处理2.1 获取标签2.2 将图像文件和标签文件处理成YOLO能使用的格式 3. 用YOLOv8进行训练3.1 训练3.2 预测 1. Leeds Sports Pose数据集下载 从kaggle官网下载这个数据集,地址为link,下载好的数据集文件如下…...
2025年客运从业资格证备考单选练习题
客运从业资格证备考单选练习题 1、从事道路旅客运输活动时,应当采取必要措施保证旅客的人身和财产安全,发生紧急情况时,首先应( )。 A. 抢救财产 B. 抢救伤员 C. 向公司汇报 答案:B 解析:…...
QMK自定义4*4键盘固件创建教程:最新架构详解
QMK自定义4*4键盘固件创建教程:最新架构详解 前言 通过本教程,你将学习如何在QMK框架下创建自己的键盘固件。QMK是一个强大的开源键盘固件框架,广泛用于DIY机械键盘的制作。本文将详细介绍最新架构下所需创建的文件及其功能。 准备工作 在…...
获取conan离线安装包
1、获取conan离线安装包 # apt-get install python3.12-venv pip #缓存的安装存放在/var/cache/apt/archives目录 # mkdir /myenv && cd /myenv #创建虚拟环境目录 # python3 -m venv myenv #创建虚拟环境 # source myenv/bin/activate #激活虚拟环境ÿ…...
【Java ee初阶】网络原理
应用层 由于下面的四层都是系统已经实现好了的,但是应用层是程序员自己写的,因此应用层是程序员最重要的一层。 应用层中,程序员通常需要定义好数据传输格式,调用传输层api(socket api)进行真正的网络通信…...
Makefile中 链接库,同一个库的静态库与动态库都链接了,生效的是哪个库
Makefile中 链接库,同一个库的静态库与动态库都链接了,生效的是哪个库 在 Makefile 中同时链接同一个库的静态库(.a)和动态库(.so)时,具体哪个库生效取决于链接顺序和编译器行为。以下是详细分析…...
【AI提示词】金字塔模型应用专家
提示说明 专业运用金字塔原理优化信息结构与逻辑表达,实现高效精准的思维传达。 提示词 # Role: 金字塔模型应用专家 ## Profile - **language**: 中文/英文 - **description**: 专业运用金字塔原理优化信息结构与逻辑表达,实现高效精准的思维传…...
电子电器架构 --- 车载以太网拓扑
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
使用FastAPI微服务在AWS EKS上实现AI会话历史的管理
架构概述 本文介绍如何使用FastAPI构建微服务架构,在AWS EKS上部署两个微服务: 服务A:接收用户提示服务B:处理对话逻辑,与Redis缓存和MongoDB数据库交互 该架构利用AWS ElastiCache(Redis)实现快速响应,…...
Flutter PIP 插件 ---- 为iOS 重构PipController, Demo界面,更好的体验
接上文 Flutter PIP 插件 ---- 新增PipActivity,Android 11以下支持自动进入PIP Mode 项目地址 PIP, pub.dev也已经同步发布 pip 0.0.3,你的加星和点赞,将是我继续改进最大的动力 在之前的界面设计中,还原动画等体验一…...
vue开发用户注册功能
文章目录 一、开发步骤二、效果图三、搭建页面创建views/Login.vue在App.vue中导入Login.vue 四、数据绑定五、表单校验六、访问后端 API 接口,完成注册七、完整的Login.vue代码八、参考资料 一、开发步骤 二、效果图 三、搭建页面 创建views/Login.vue 完整内容在…...
Qt中的RCC
Qt资源系统(Qt resource system)是一种独立于平台的机制,用于在应用程序中传输资源文件。如果你的应用程序始终需要一组特定的文件(例如图标、翻译文件和图片),并且你不想使用特定于系统的方式来打包和定位这些资源,则可以使用Qt资源系统。 最…...
muduo源码解析
1.对类进行禁止拷贝 class noncopyable {public:noncopyable(const noncopyable&) delete;void operator(const noncopyable&) delete;protected:noncopyable() default;~noncopyable() default; }; 2.日志 使用枚举定义日志等级 enum LogLevel{TRACE,DEBUG,IN…...
Qt QCheckBox 使用
1.开发背景 Qt QCheckBox 是勾选组件,具体使用方法可以参考 Qt 官方文档,这里只是记录使用过程中常用的方法示例和遇到的一些问题。 2.开发需求 QCheckBox 使用和踩坑 3.开发环境 Window10 Qt5.12.2 QtCreator4.8.2 4.功能简介 4.1 简单接口 QChec…...
【工具记录分享】提取bilibili视频字幕
F12大法 教程很多 但方法比较统一 例快速提取视频字幕!适用B站、AI字幕等等。好用 - 哔哩哔哩 无脑小工具 哔哩哔哩B站字幕下载_在线字幕解析-飞鱼视频下载助手 把链接扔进去就会自动生成srt文件 需要txt可以配合: SRT转为TXT...
设计模式【cpp实现版本】
文章目录 设计模式1.单例模式代码设计1.饿汉式单例模式2.懒汉式单例模式 2.简单工厂和工厂方法1.简单工厂2.工厂方法 3.抽象工厂模式4.代理模式5.装饰器模式6.适配器模式7.观察者模式 设计模式 1.单例模式代码设计 为什么需要单例模式,在我们的项目设计中&…...
Python数据分析案例74——基于内容的深度学习推荐系统(电影推荐)
背景 之前都是标准的表格建模和时间序列的预测,现在做一点不一样的数据结构的模型方法。 推荐系统一直是想学想做的,以前读研时候想学没多少相关代码,现在AI资源多了,虽然上班没用到这方面的知识,但是还是想熟悉一下…...
C PRIMER PLUS——第8节:字符串和字符串函数
目录 1. 字符串的定义与表示 2. 获取字符串的两种方式 3.字符串数组 4. 字符串输入函数 4.1 gets()(不推荐使用,有缓冲区溢出风险) 4.2 fgets()(推荐使用) 4.3 scanf() 4.4 gets_s()(C11 标准&…...
Dia浏览器:AI驱动浏览网页,究竟怎么样?(含注册申请体验流程)
名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、Dia浏览器简介1. 什么是Dia浏览器2. 开发背景与公司简介3. 与传统浏览器的区别 …...