当前位置: 首页 > news >正文

Springboot 集成 RBAC 模型实战指南

RBAC 模型核心原理

详情可参考之前的笔记:https://blog.csdn.net/qq_35201802/article/details/146036789?spm=1011.2415.3001.5331

RBAC 定义与优势

RBAC(Role-Based Access Control,基于角色的访问控制)** 是一种通过角色关联用户和权限的权限管理模型。其核心思想是将权限分配给角色,再将角色授予用户,从而解耦用户与权限的直接关系。

核心优势:

- 灵活性,权限变更只需调整角色,无需逐个修改用户。
- 可维护性,通过角色层级和约束规则实现复杂权限场景。
- 最小权限原则,用户仅拥有完成工作所需的最小权限集。

Spring Boot 集成 RBAC 实现原理

技术架构

          ┌───────────────┐│  客户端请求    │└──────┬────────┘│┌──────▼────────┐│ Spring Security 过滤器链 │└──────┬────────┘│┌──────▼────────┐│ 身份认证 (Authentication) │└──────┬────────┘│┌──────▼────────┐│ 权限验证 (Authorization) │└──────┬────────┘│┌──────▼────────┐│  业务逻辑处理  │└───────────────┘

权限验证流程

  1. 请求拦截FilterSecurityInterceptor` 拦截受保护请求
  2. 身份提取:从 SecurityContext` 获取已认证的用户信息
  3. 元数据匹配:将请求 URL/Method 与 SecurityMetadataSource` 中的规则匹配
  4. 权限决策:调用 AccessDecisionManager` 对比用户权限与资源所需权限
  5. 访问控制:通过则继续执行,否则抛出 AccessDeniedException`

Spring Boot 实战实现

数据库设计

-- `user`.tb_user definitionCREATE TABLE `tb_user` (`id` int NOT NULL AUTO_INCREMENT COMMENT '用户 ID(主键)',`user_id` varchar(50) NOT NULL COMMENT '用户编号',`username` varchar(50) NOT NULL COMMENT '用户名',`password` varchar(255) NOT NULL COMMENT '密码',`email` varchar(100) NOT NULL COMMENT '邮箱',`status` tinyint DEFAULT '1' COMMENT '状态:1-启用, 0-禁用',`is_deleted` tinyint DEFAULT '0' COMMENT '删除标志:0-未删除, 1-已删除',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`create_by` int DEFAULT NULL COMMENT '创建人 ID(关联 tb_user.user_id)',`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',`update_by` int DEFAULT NULL COMMENT '修改人 ID(关联 tb_user.user_id)',PRIMARY KEY (`id`),UNIQUE KEY `user_id` (`user_id`),UNIQUE KEY `username` (`username`),UNIQUE KEY `email` (`email`),UNIQUE KEY `user_id_2` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';-- `user`.tb_role definitionCREATE TABLE `tb_role` (`id` int NOT NULL AUTO_INCREMENT COMMENT '角色 ID(主键)',`role_id` varchar(50) NOT NULL COMMENT '角色编号',`role_name` varchar(50) NOT NULL COMMENT '角色名称',`role_description` varchar(500) DEFAULT NULL COMMENT '角色描述',`is_deleted` tinyint DEFAULT '0' COMMENT '删除标志:0-未删除, 1-已删除',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`create_by` int DEFAULT NULL COMMENT '创建人 ID(关联 tb_user.user_id)',`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',`update_by` int DEFAULT NULL COMMENT '修改人 ID(关联 tb_user.user_id)',PRIMARY KEY (`id`),UNIQUE KEY `role_id` (`role_id`),UNIQUE KEY `role_name` (`role_name`),UNIQUE KEY `role_id_2` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='角色表';-- `user`.tb_permission definitionCREATE TABLE `tb_permission` (`id` int NOT NULL AUTO_INCREMENT COMMENT '权限 ID(主键)',`permission_id` varchar(100) NOT NULL COMMENT '权限编号',`permission_name` varchar(100) NOT NULL COMMENT '权限标识(如 user:read)',`permission_desc` varchar(500) DEFAULT NULL COMMENT '权限描述',`is_deleted` tinyint DEFAULT '0' COMMENT '删除标志:0-未删除, 1-已删除',`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`create_by` int DEFAULT NULL COMMENT '创建人 ID(关联 tb_user.user_id)',`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',`update_by` int DEFAULT NULL COMMENT '修改人 ID(关联 tb_user.user_id)',PRIMARY KEY (`id`),UNIQUE KEY `permission_id` (`permission_id`),UNIQUE KEY `permission_name` (`permission_name`),UNIQUE KEY `permission_id_2` (`permission_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='权限表';-- `user`.tb_user_role definitionCREATE TABLE `tb_user_role` (`id` int NOT NULL AUTO_INCREMENT COMMENT '用户角色 ID(主键)',`user_role_id` varchar(100) NOT NULL COMMENT '用户角色编号',`user_id` varchar(100) NOT NULL COMMENT '用户 ID(关联 tb_user.user_id)',`role_id` varchar(100) NOT NULL COMMENT '角色 ID(关联 tb_role.role_id)',PRIMARY KEY (`id`),UNIQUE KEY `user_id` (`user_id`,`role_id`),UNIQUE KEY `user_role_id` (`user_role_id`),KEY `role_id` (`role_id`),CONSTRAINT `tb_user_role_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `tb_user` (`user_id`) ON DELETE CASCADE,CONSTRAINT `tb_user_role_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `tb_role` (`role_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户角色关联表';-- `user`.tb_role_permission definitionCREATE TABLE `tb_role_permission` (`id` int NOT NULL AUTO_INCREMENT COMMENT '角色权限 ID(主键)',`role_permission_id` varchar(100) NOT NULL COMMENT '角色权限编号',`role_id` varchar(100) NOT NULL COMMENT '角色 ID(关联 tb_role.role_id)',`permission_id` varchar(100) NOT NULL COMMENT '权限 ID(关联 tb_permission.permission_id)',PRIMARY KEY (`id`),UNIQUE KEY `role_id` (`role_id`,`permission_id`),UNIQUE KEY `role_permission_id` (`role_permission_id`),KEY `permission_id` (`permission_id`),CONSTRAINT `tb_role_permission_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `tb_role` (`role_id`) ON DELETE CASCADE,CONSTRAINT `tb_role_permission_ibfk_2` FOREIGN KEY (`permission_id`) REFERENCES `tb_permission` (`permission_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='角色权限关联表';

角色权限配置接口设计

用户

public interface UserService {void saveUser(UserReq req);UserVO getUser(UserReq req);void updateUser(UserReq req);void deleteUser(UserReq req);PageVO<UserVO> pageUser(UserReq req);void addRole(UserRoleReq req);
}

角色

public interface RoleService {void saveRole(RoleReq req);void updateRole(RoleReq req);void deleteRole(RoleReq req);RoleVO getRole(RoleReq req);PageVO<RoleVO> pageRole(RoleReq req);void addPermission(RolePermissionReq req);
}

权限

public interface PermissionService {void savePermission(PermissionReq req);void updatePermission(PermissionReq req);void deletePermission(PermissionReq req);PermissionVO getPermission(PermissionReq req);PageVO<PermissionVO> pagePermission(PermissionReq req);
}

总结

本篇主要对 Springboot 集成 RBAC 模型设计进行梳理,关键点在于用户与权限解耦,通过角色关联权限,其他逻辑的实现,比如接口的权限校验,tooken校验请关注后续文章更新

相关文章:

Springboot 集成 RBAC 模型实战指南

RBAC 模型核心原理 详情可参考之前的笔记&#xff1a;https://blog.csdn.net/qq_35201802/article/details/146036789?spm1011.2415.3001.5331 RBAC 定义与优势 RBAC&#xff08;Role-Based Access Control&#xff0c;基于角色的访问控制&#xff09;** 是一种通过角色关联…...

C++继承(最详细)

目录 1.继承的概念以及定义 1.1 继承的概念 1.2 继承的定义 ​编辑 2.继承中的作用域 3.基类和派生类间的转换 4.派生类的默认成员函数 5.实现不被继承的类 6.継承与友元 ​编辑 7.继承与静态成员 8.多继承及其菱形继承问题 8.2 虚继承 8.3 来看一个小题 9.继承…...

【使用Plink检测ROH问题查找】为什么检测ROH参数不一样,FROH近交系数结果差异很大?

为什么检测ROH参数不一样&#xff0c;结果差异很大&#xff1f; 结果 基于ROH检测的结果与参数设置密切相关。参数的改变&#xff08;对应近交系数改变&#xff09;可能会对结果产生很大影响。 原因 ROH分析缺乏共识标准&#xff0c;这种缺乏共识将导致结果偏倚&#xff0c…...

mybatis mapper.xml中使用枚举

重点&#xff1a;application.propertis配置类 #TypeEnumHandler 这个类的包名&#xff0c;不是全路径 mybatis.type-handlers-packagecom.fan.test.handler两个枚举类&#xff1a; public enum StatusEnum {DELETED(0),ACTIVE(1);private final int code;StatusEnum(int cod…...

探索科技的边界:代理IP与汽车产业链的创新之旅

目录 一、代理IP&#xff1a;汽车产业的"数字放大镜" 二、创新应用场景&#xff1a;从实验室到量产线 三、技术挑战与进化方向 四、未来图景&#xff1a;车联网时代的"数字血管" 结语&#xff1a;重构产业认知的"数字齿轮" 在数字化浪潮席卷…...

单个或批量实现-提取PDF文档中的合同号和姓名并按“合同号_姓名”格式重命名文件。

第一、单个PDF文件命名格式&#xff1a; 提取PDF文档中的合同号和姓名并按“合同号_姓名”格式重命名文件 import pdfplumber import re import osdef extract_contract_info(pdf_path):with pdfplumber.open(pdf_path) as pdf:for page in pdf.pages:text page.extract_tex…...

虚拟机的网络配置

第一章 配置网络&#xff08;注意NAT类型&#xff09; 1. 在VMware中配置 虚拟网络编译器 1&#xff09; 点击编辑 就会出现 虚拟网络编译器 并点击&#xff08;要再虚拟机关机的情况下进行&#xff09; 2&#xff09;点击右下角的 更改设置 再点击 VMnet 红色框里192.168.x…...

JAVA设计模式——(二)组合模式

JAVA设计模式——&#xff08;二&#xff09;组合模式 原理解释实现定义规范接口定义主干定义分支定义叶子测试代码 优势 原理 组合模式用于描述对象在“整体-部分”中的关系&#xff0c;用户对单个对象和组合对象的使用具有一致性。 组合模式中由于单个对象和组合对象的使用…...

【数据结构和算法】5. 堆栈和队列

本文根据 数据结构和算法入门 视频记录 文章目录 1. 堆栈&#xff08;Stack&#xff09;1.1 概念1.2 数组栈实现1.3 链式栈实现 2. 队列&#xff08;Queue&#xff09;2.1 概念2.2 数组队列实现2.3 链式队列实现 在这一章我们来了解两个很特殊的数据结构&#xff1a;堆栈 (Stac…...

万字长文 | Apache SeaTunnel 分离集群模式部署 K8s 集群实践

文章作者&#xff1a;雷宝鑫 整理排版&#xff1a;白鲸开源 曾辉 Apache SeaTunnel官网链接: https://seatunnel.apache.org/ Apache SeaTunnel(以下简称SeaTunnel&#xff09;是一款新一代高性能、分布式的数据集成同步工具&#xff0c;正受到业界广泛关注和应用。SeaTunnel支…...

逻辑回归:使用 S 型函数进行概率预测

逻辑回归&#xff1a;使用 S 型函数进行概率预测 摘要 本文章深入探讨了逻辑回归模型如何利用 S 型函数将线性回归的输出转换为概率值。文章详细阐述了 S 型函数的数学原理、在逻辑回归中的应用以及其在机器学习中的重要性。通过具体示例和练习&#xff0c;帮助读者理解如何使…...

马浩棋:产通链CT-Chain 破局不动产 RWA,引领数智金融新变革

全球不动产 RWA 数智金融高峰论坛上马浩棋先生致辞 在全球不动产 RWA 数智金融高峰论坛暨产通链 CT-Chain 上链首发会的现场&#xff0c;犀牛世纪集团&#xff08;香港&#xff09;有限公司董事会主席马浩棋成为众人瞩目的焦点。此次盛会汇聚了全球金融、区块链及不动产领域的…...

iscsi服务端安装及配置

1. 安装targetcli软件包 yum install -y targetcli 2. 启动target服务 systemctl start target systemctl enable target 3. 配置防火墙 firewall-cmd --add-port"3260/tcp" 3. 准备一个物理分区&#xff08;或者逻辑分区&#xff09;…...

常见的神经网络权重文件格式及其详细说明

常见的神经网络权重文件格式及其详细说明的表格&#xff1a; 扩展名所属框架/工具如何生成表示内容使用方法注意事项.pt, .pthPyTorchtorch.save(model.state_dict(), "model.pt")PyTorch模型的状态字典&#xff08;权重和参数&#xff09;或整个模型加载方式&#…...

帕金森发病类型和阶段

文章目录 直观认识帕金森综合症的类型一、原发性帕金森综合征二、继发性&#xff08;获得性&#xff09;帕金森综合征三、帕金森叠加综合征&#xff08;Atypical Parkinsonism&#xff09;四、遗传性帕金森综合征五、其他罕见类型推荐文献与资源 PD的病理分期理论&#xff08;B…...

基于ssm的“安家”儿童福利院管理系统(源码+文档)

项目简介 “安家”儿童福利院实现了以下功能&#xff1a; “安家”儿童福利院管理系统的主要使用者分为管理员&#xff1a;儿童管理、申请领养管理、捐赠管理、楼栋管理、宿舍管理、分配信息管理、宿舍物品管理、报修管理、维修工管理、报修状态管理、留言管理、系统管理。 用…...

闲聊人工智能对媒体的影响

技术总是不断地改变信息的传播方式。互联网促进了社交媒体的蓬勃发展。 网络媒体成为主流。大语言模型为代表的人工智能的出现&#xff0c;又会对媒体传播带来怎样的改变呢&#xff1f;媒体的演变反映了社会和技术的演变。 人工智能(AI) 将继续对整个媒体行业产生变革性的影响。…...

健身房管理系统(springboot+ssm+vue+mysql)含运行文档

健身房管理系统(springbootssmvuemysql)含运行文档 健身房管理系统是一个全面的解决方案&#xff0c;旨在帮助健身房高效管理其运营。系统提供多种功能模块&#xff0c;包括会员管理、员工管理、会员卡管理、教练信息管理、解聘管理、健身项目管理、指导项目管理、健身器材管理…...

离散化区间和 java c++

文章目录 题面解题思路javacpp 题面 题目链接&#xff1a;点击传送 假定有一个无限长的数轴&#xff0c;数轴上每个坐标上的数都是 0。 现在&#xff0c;我们首先进行 n 次操作&#xff0c;每次操作将某一位置 x 上的数加 c。 接下来&#xff0c;进行 m 次询问&#xff0c;每…...

「数据可视化 D3系列」入门第十二章:树状图详解与实践

树状图深度解析与实现 一、核心API解析1. d3.hierarchy2. d3.tree3. 节点操作方法 二、完整实现解析三、高级技巧与优化四、常见问题解决小结下章预告&#xff1a;地图可视化 树状图是一种常见的层次结构可视化方式&#xff0c;它能够清晰地展示数据之间的父子关系。本文将详细…...

IDEA 创建Maven 工程(图文)

设置Maven 仓库 打开IDEA 开发工具&#xff0c;我的版本是2024.3.1&#xff08;每个版本的位置不一样&#xff09;。在【Customize】选项中&#xff0c;可以直接设置【语言】&#xff0c;在最下面选择【All setting】。 进入到熟悉的配置界面&#xff0c;选择配置的【setting…...

机器学习06-RNN

RNN&#xff08;循环神经网络&#xff09;学习笔记 一、RNN 概述 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一类以序列数据为输入&#xff0c;在序列的演进方向进行递归且所有节点&#xff08;循环单元&#xff09;按链式连接的递归神…...

Java常用正则表达式及使用方法

在 Java 中&#xff0c;Pattern 和 Matcher 类是 java.util.regex 包的核心&#xff0c;用于处理正则表达式。 Pattern 类 Pattern 类表示编译后的正则表达式&#xff0c;它提供了一种将正则表达式字符串编译成可执行对象的方式&#xff0c;以便后续用于匹配操作。 常用方法…...

新零售行业时代:如何用科技驱动传统零售的转型升级​​

新零售行业时代&#xff1a;如何用科技驱动传统零售的转型升级​​ ​​“在变化的世界中&#xff0c;唯一不变的是变化本身。”​​ ​​一、传统零售的困局&#xff1a;当“生存”成为一场鏖战​​ 街角的便利店老板老王&#xff0c;每天凌晨4点起床进货&#xff0c;却在月…...

DeepSeek和Excel结合生成动态图表

文章目录 一、前言二、3D柱状图案例2.1、pyecharts可视化官网2.2、Bar3d-Bar3d_puch_card2.3、Deepseek2.4、WPS2.5、动态调整数据 一、前言 最近在找一些比较炫酷的动态图表&#xff0c;用于日常汇报&#xff0c;于是找到了 DeepseekExcel王牌组合&#xff0c;其等同于动态图…...

大模型学习笔记------Llama 3模型架构之分组查询注意力(GQA)

大模型学习笔记------Llama 3模型架构之分组查询注意力&#xff08;GQA&#xff09; 1、分组查询注意力&#xff08;GQA&#xff09;的动机2、 多头注意力&#xff08;Multi-Head Attention, MHA&#xff09;3、 多查询注意力 (Multi-Query Attention&#xff0c;MQA)4、 分组查…...

WordPress 只能访问html文件,不能访问php

部署WordPress 遇到的问题 说来惭愧&#xff0c;尝试了多次流程&#xff0c;输入ip能够访问到配置路径下面的html文件&#xff0c;但就是无法访问php文件&#xff0c;查来查去&#xff0c;最后在AI工具的逐一梳理下&#xff0c;是PHP-FPM配置下面出的问题&#xff0c;默认账号…...

Python 之 pyecharts 使用

要说绘制动态图表&#xff0c;echarts 肯定是有一席之地的&#xff0c;特别是像 flask 这种轻量级的 web 框架&#xff0c;在 html 中动态嵌入生成 echarts 无疑是很优的选择。pyecharts 简单来说就是以 python 的方式来生成对应的 echarts 图表。 安装 pip install pyechart…...

【第九章 Python学习之函数Ⅱ】

【2025】Python最新最完整教程,零基础看这一个就够了 第九章 Python学习之函数Ⅱ 文章目录 【2025】Python最新最完整教程,零基础看这一个就够了前言一、说两句二、定义函数函数定义规则函数的参数参数的类型及用途1. 必需参数(位置参数)2. 关键字参数3. 默认参数4. 可变参…...

传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100。

### Error updating database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100。 这是因为集合数据量过大&#xff0c;需要对集合进行拆分操作&#xff0…...

IDEA热加载

翻译:"你运行的应用程序 BfApplication 启动之后&#xff0c;它的一些类文件&#xff08;通常是你修改过的 .java​ 文件被重新编译了&#xff09;发生了变化。你想现在就重新加载这些更改过的类吗&#xff1f;" 解释: 热重载: 这是一种开发时非常有用的技术。当你…...

常用第三方库:dio网络库使用与封装

常用第三方库&#xff1a;dio网络库使用与封装 前言 dio是Flutter生态中最受欢迎的网络请求库之一&#xff0c;它提供了强大的功能和灵活的配置选项。本文将从实战角度深入介绍dio的使用技巧和最佳实践。 基础知识 1. dio简介 dio是一个强大的Dart Http请求库&#xff0c;…...

解决IntelliJ IDEA配置文件(application.properties)中文注释变成乱码的问题

文章目录 1. 问题呈现2. 问题产生的原因3. 解决方法 更多 IntelliJ IDEA 的使用技巧可查看 IntelliJ IDEA 专栏中的文章&#xff1a;IntelliJ IDEA 1. 问题呈现 在 IntelliJ IDEA 中打开配置文件&#xff08;application.properties&#xff09;时&#xff0c;文件中的中文注…...

linux基础14--dns和web+dns

DNS&#xff1a;域名系统&#xff08;Domain Name System&#xff09; DNS协议是用来将域名转换为IP地址或将IP地址转换为相应的域名 DNS使用TCP和UDP端口53&#xff0c;给用户提供解析时一般使用UDP53 对于每一级域名长度的限制是63个字符&#xff0c;域名总长度则不能超过2…...

Java 静态内部类面试题与高质量答案合集

本文整理了关于 Java 静态内部类&#xff08;Static Nested Class&#xff09;在面试中的高频问题及标准答案&#xff0c;帮助你理解其底层原理、内存表现以及实际应用。 1. 什么是静态内部类&#xff1f;和普通内部类有什么区别&#xff1f; 答&#xff1a; 静态内部类是定义…...

React.cloneElement的用法详解

React.cloneElement的用法详解 React.cloneElement 是 React 提供的一个 API&#xff0c;用于克隆现有的 React 元素&#xff0c;并在克隆的基础上添加或覆盖属性&#xff0c;同时保留原有的子元素。 语法 React.cloneElement(element: ReactElement, props?: Partial<P…...

【数学建模】孤立森林算法:异常检测的高效利器

孤立森林算法&#xff1a;异常检测的高效利器 文章目录 孤立森林算法&#xff1a;异常检测的高效利器1 引言2 孤立森林算法原理2.1 核心思想2.2 算法流程步骤一&#xff1a;构建孤立树(iTree)步骤二&#xff1a;构建孤立森林(iForest)步骤三&#xff1a;计算异常分数 3 代码实现…...

3.1 WPF使用MaterialDesign的介绍1

MaterialDesignInXAML Toolkit 是一个流行的开源 C# WPF 控件库,它实现了 Google 的 Material Design 规范,让开发者可以轻松创建现代化的 WPF 应用程序界面 Material Design 是一个流行的设计语言,由 Google 开发,旨在帮助开发者构建美观且一致的 UI 界面。对于使用 C# 的…...

多路转接select服务器

目录 select函数原型 select服务器 select的缺点 前面介绍过多路转接就是能同时等待多个文件描述符&#xff0c;这篇文章介绍一下多路转接方案中的select的使用 select函数原型 #include <sys/select.h> int select(int nfds, fd_set *readfds, fd_set *writefds, f…...

【算法】BFS-解决FloodFill问题

目录 FloodFill问题 图像渲染 岛屿数量 岛屿的最大面积 被围绕的区域 FloodFill问题 FloodFill就是洪水灌溉的意思&#xff0c;假设有下面的一块田地&#xff0c;负数代表是凹地&#xff0c;正数代表是凸地&#xff0c;数字的大小表示凹或者凸的程度。现在下一场大雨&…...

二叉树层序遍历技术解析与面试指南

文章目录 一、二叉树层序遍历技术解析1. 问题描述2. 层序遍历核心思想3. Java实现代码&#xff08;带详细注释&#xff09;4. 算法关键点解析5. 复杂度分析 二、资深后端面试深度指南1. 高频面试问题集Q1: 如何实现Z字形层序遍历&#xff08;锯齿形遍历&#xff09;&#xff1f…...

软考软件设计师考试情况与大纲概述

文章目录 **一、考试科目与形式****二、考试大纲与核心知识点****科目1&#xff1a;计算机与软件工程知识****科目2&#xff1a;软件设计** **三、备考建议****四、参考资料** 这是一个系列文章的开篇 本文对2025年软考软件设计师考试的大纲及核心内容进行了整理&#xff0c;并…...

一款丰富的工作流自动化平台 | N8N 83.6K ⭐

N8N 介绍 N8N 是一个工作流自动化平台&#xff0c;为技术团队提供代码的灵活性和无代码的速度。n8n 具有 400 集成、原生 AI 功能和公平代码许可证&#xff0c;可让您构建强大的自动化功能&#xff0c;同时保持对数据和部署的完全控制。 &#x1f6a2; 项目地址 Github: https…...

Apache PDFBox

Apache PDFBox 是一个用于处理 PDF 文档的开源 Java 库&#xff0c;由 Apache 软件基金会开发和维护。它提供了丰富的功能&#xff0c;允许开发者在 Java 应用程序中创建、读取、修改和提取 PDF 文件中的信息。以下是关于 PDFBox 的详细介绍&#xff1a; 主要功能 创建 PDF 文…...

如何批量为多个 Word 文档添加水印保护

在日常办公中&#xff0c;Word文档添加水印是一项重要的操作&#xff0c;特别是在需要保护文件内容的安全性和版权时。虽然Office自带了添加水印的功能&#xff0c;但当需要一次性给多个Word文档添加水印时&#xff0c;手动操作显得非常繁琐且低效。为了提高效率&#xff0c;可…...

【MySQL】005.MySQL表的约束(上)

文章目录 表的约束1. 约束概念2. 空属性2.1 基本语法2.2 使用示例 3. 默认值3.1 基本概念3.2 使用示例 4. 列描述4.1 基本概念4.2 使用示例 5. zerofill5.1 基本功能5.2 使用示例5.3 注意事项 6. 主键6.1 基本概念6.2 使用示例 表的约束 1. 约束概念 真正约束字段的是数据类型…...

力扣刷题Day 27:环形链表(141)

1.题目描述 2.思路 创建一个结点集合&#xff0c;遍历链表&#xff0c;如果遇到已经加进集合的结点就说明链表有环。 3.代码&#xff08;Python3&#xff09; class Solution:def hasCycle(self, head: Optional[ListNode]) -> bool:node headnode_set set()while node…...

window上 elasticsearch v9.0 与 jmeter5.6.3版本 冲突,造成es 启动失败

[2025-04-22T11:00:22,508][ERROR][o.e.b.Elasticsearch ] [AIRUY] fatal exception while booting Elasticsearchjava.nio.file.NoSuchFileException: D:\Program Files\apache-jmeter-5.6.3\lib\logkit-2.0.jar 解决方案&#xff1a; 降低 es安装版本 &#xff0c;选择…...

PDF转换Word深度评测 - ComPDFKit Conversion SDK V3.0

ComPDFKit PDF 转换 SDK 在V3.0 中有以下几个新功能: 使用百万级文档训练数据集对 PPYoloE AI 模型进行微调 全场景布局分析算法及下一代表格识别算法 重构数据结构、转换流程、PDF解析和输出模块 混合布局&#xff1a;将流式布局与固定布局相结合&#xff0c;以保持原始布局…...

Laravel 对接阿里云 OSS 说明文档

Laravel 对接阿里云 OSS 说明文档 一、 简介 将 Laravel 应用与阿里云对象存储服务 (OSS) 对接&#xff0c;可以利用 OSS 提供的高可用、高可靠、可扩展的存储能力来管理应用中的文件&#xff0c;例如用户上传的图片、视频、文档等。这有助于减轻应用服务器的存储压力&#x…...