微服务项目->在线oj系统(Java版 - 2)
相信自己,终会成功
微服务代码: lyyy-oj: 微服务
接口文档定义
响应数据定义:
响应数据格式:通常,HTTP API 的响应数据采用 JSON 格式
例如:成功响应(带数据)
{"code": 200,"message": "查询成功","data": {"id": 1,"name": "张三","age": 25}
}
名称 | 内容 |
接口概述 | 包括接口名称,接口功能,接口类别 |
接口地址 | 接口的唯一访问地址 |
请求方法 | 定义接口的请求方式,如GET(查询) POST(新增) PUT(修改) DELETE(删除) |
请求参数 | 定义请求时需要传递的参数 , 包括路径参数(Path Parameters),查询参数(Query Parameters),请求头(Headers),请求体(Body)等 |
响应数据 | 定义接口返回的数据类型,包括状态码(Status Code),消息(Message),数据体(Data)等(包含接口请求出现错误时),返回的状态码和错误信息,不同接口格式统一,状态码含义相同 |
请求和相应示例 | 为了更好的描述接口的使用,接口文档会提供一些具体的接口请求和响应示例,以供读者参考 |
状态码定义
RFC 9110: HTTP SemanticsHTTP 状态码的官方文档 :RFC 9110: HTTP Semantics
状态码分类
官方文档将状态码分为 5 类(以 RFC 9110 为准):
分类 | 范围 | 说明 | 常见状态码 |
---|---|---|---|
1xx | 100-199 | 信息性响应(临时状态) | 100 Continue, 101 Switching Protocols |
2xx | 200-299 | 成功响应 | 200 OK, 201 Created, 204 No Content |
3xx | 300-399 | 重定向响应 | 301 Moved Permanently, 304 Not Modified |
4xx | 400-499 | 客户端错误 | 400 Bad Request, 403 Forbidden, 404 Not Found |
5xx | 500-599 | 服务器错误 | 500 Internal Server Error, 502 Bad Gateway |
常见状态码详解(RFC 定义)
状态码 | 官方描述 | 适用场景 |
---|---|---|
200 OK | 请求已成功完成。 | 常规成功响应(如 GET 请求返回数据)。 |
301 Moved Permanently | 请求的资源已永久移动到新 URI。 | 网站改版后的旧 URL 跳转。 |
400 Bad Request | 服务器无法理解请求的语法。 | 客户端发送了无效参数或格式错误。 |
401 Unauthorized | 请求需要用户认证。 | 未登录或 Token 过期。 |
403 Forbidden | 服务器理解请求,但拒绝执行。 | 权限不足(如普通用户访问管理员接口)。 |
404 Not Found | 服务器找不到请求的资源。 | URL 路径错误或资源已删除。 |
500 Internal Server Error | 服务器遇到意外情况,无法完成请求。 | 后端代码抛出未捕获的异常。 |
这些状态码不能完全支撑我们的业务,有时候我们需要更加详细的信息,另一方面处于安全考虑当服务器出错时我们不能直接暴露底层的系统错误就需要自定义状态码
Swagger
wagger 是一套围绕 OpenAPI 规范构建的开源工具集,用于设计、构建、文档化和消费 RESTful API
<!-- Maven 依赖 -->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>
<!-- springdoc-openapi(Swagger UI 的现代替代方案)-->
<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.2.0</version>
</dependency>
注解 | 作用 | 示例 |
---|---|---|
@Tag | 接口分组(替代 @Api ) | @Tag(name = "用户管理") |
@Operation | 接口描述(替代 @ApiOperation ) | @Operation(summary = "创建用户") |
@Parameter | 参数说明 | @Parameter(name = "id", required = true) |
@Schema | 模型/字段说明(替代 @ApiModelProperty ) | @Schema(description = "用户名" |
JWT介绍
JWT (JSON Web Token) 是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为JSON对象。
一个JWT由三部分组成,用点(.)分隔:
-
Header (头部):包含令牌的类型和使用的算法
-
Payload (负载):包含用户信息和其他元数据
-
Signature (签名):用于验证令牌的完整性和真实性
库名称 | 特点 |
---|---|
jjwt | 简单易用,API友好,维护良好 |
java-jwt | Auth0提供,功能全面 |
nimbus-jose-jwt | 功能最全,支持所有JWT/JWS/JWE规范,但API较复杂 |
身份认证流程:
-
客户端使用用户名跟密码请求登录。
-
服务端收到请求,去验证用户名与密码。
-
验证成功后,服务端会签发一个Token,再把这个Token发送给客户端。(token上述的jwt串)
-
客户端收到Token以后可以把它存储起来,比如放在Cookie里或者Local Storage里。
-
客户端每次向服务端请求资源的时候需要带着服务端签发的Token。
-
服务端收到请求,然后去验证客户端请求里面带着的Token,如果验证成功,就向客户端返回请求的数据。
身份认证仅仅使用JWT机制就可以吗?
-
JWT中payload存储用户相关信息,采用Base64编码,没有加密,因此JWT中不能存储敏感数据。但部分业务逻辑需要获取当前登录用户的敏感信息参与业务处理。
-
JWT是无状态的,修改内容必须重新签发新Token。用户修改个人信息后需要重新登录。
-
无法延长JWT的过期时间。用户正在操作时可能突然身份认证失效。
所以使用redis+jwt的结构完成身份认证.jwt中进存储用户的唯一标识信息,使用redis作为第三方存储机制,存储用于用户身份认证的信息,并通过redis控制 jwt 的过期时间
存储信息 | redis中数据结构 | key | value(JSON结构) | 缓存有效时间 | 缓存刷新时机 |
---|---|---|---|---|---|
登录用户信息 | string类型 | login_tokens:用户token | - token(用户唯一标识) - userId(用户名id) - nickName(用户昵称) - identity(用户身份) | 720分钟(用户长时间不操作自动下线,防止盗用) | 1. 用户访问页面时若缓存即将失效则更新有效期 2. 用户重新登录时重新录入缓存 3. 通过拦截器在业务处理前刷新 |
管理端介绍 :
管理员登录:账号密码 不提供管理员注册 不对外开放新增管理员用户接口
下图是B端大致流程
全局异常处理
/*** 全局异常处理器*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {/*** 请求方式不支持*/@ExceptionHandler(HttpRequestMethodNotSupportedException.class)public R<?> handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,HttpServletRequest request) {String requestURI = request.getRequestURI();log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod());return R.fail(ResultCode.ERROR);}@ExceptionHandler(ServiceException.class)public R<?> handleServiceException(ServiceException e, HttpServletRequest request) {String requestURI = request.getRequestURI();ResultCode resultCode = e.getResultCode();log.error("请求地址'{}',发生业务异常: {}", requestURI, resultCode.getMsg(), e);return R.fail(resultCode);}@ExceptionHandler(BindException.class)public R<Void> handleBindException(BindException e) {log.error(e.getMessage());String message = join(e.getAllErrors(),DefaultMessageSourceResolvable::getDefaultMessage, ", ");return R.fail(ResultCode.FAILED_PARAMS_VALIDATE.getCode(), message);}private <E> String join(Collection<E> collection, Function<E, String>function, CharSequence delimiter) {if (CollUtil.isEmpty(collection)) {return StrUtil.EMPTY;}return collection.stream().map(function).filter(Objects::nonNull).collect(Collectors.joining(delimiter));}/*** 拦截运行时异常*/@ExceptionHandler(RuntimeException.class)public R<?> handleRuntimeException(RuntimeException e, HttpServletRequest request) {String requestURI = request.getRequestURI();log.error("请求地址'{}',发生运行时异常.", requestURI, e);return R.fail(ResultCode.ERROR);}/*** 系统异常*/@ExceptionHandler(Exception.class)public R<?> handleException(Exception e, HttpServletRequest request) {String requestURI = request.getRequestURI();log.error("请求地址'{}',发生异常.", requestURI, e);return R.fail(ResultCode.ERROR);}
}
@RestControllerAdvice:
抛出异常时,@RestControllerAdvice标注的类将被自动调用,并根据异常类型和处理程序的注解来决定如何处理该异常,这使得开发者可以在整个应用程序范围内统一处理异常
@ExceptionHandler:
@ExceptionHandler一般与 @RestControllerAdvice配合使用,使用其来捕获和处理不同类型的异常
日志输出格式:
Chapter 6: Layouts
占位符 | 说明 | 示例输出 |
---|---|---|
%d | 日期时间 | 2023-08-15 14:30:45.123 |
%thread | 线程名 | main |
%level | 日志级别 | INFO |
%logger | Logger名称 | com.example.MyClass |
%msg | 日志消息 | User login successfully |
%n | 换行符 | - |
%c | 类名缩写 | MyClass |
%M | 方法名 | doSomething |
%L | 行号 | 42 |
%X | MDC变量 | {key:value} |
日期输出格式
%d{yyyy-MM-dd HH:mm:ss.SSS}
%d{ISO8601}
%d{UNIX}
Entity、DTO、VO
类型 | 英文全称 | 作用域 | 核心职责 | 生命周期 |
---|---|---|---|---|
Entity | Domain Entity | 数据持久层 | 与数据库表结构映射,承载业务实体 | 从数据库查询到内存操作 |
DTO | Data Transfer Object | 服务层-表现层 | 跨进程/服务数据传输,优化网络效率 | 远程调用过程 |
VO | Value Object/View Object | 表现层 | 前端展示数据定制,适配界面需求 | 请求响应周期 |
-
问题:Entity直接作为API返回值
-
风险:暴露敏感字段、产生循环引用
-
解决:严格通过DTO转换
-
-
问题:DTO与VO混用
-
现象:前端需求变更导致服务层频繁修改
-
解决:VO应独立演化,通过Adapter模式转换DTO
-
-
问题:过度转换造成性能损耗
-
优化:
-
使用MapStruct编译期生成转换代码
-
对只读场景采用投影查询(如JPA的Interface Projection)
-
-
枚举
枚举(Enum)是Java 5引入的一种特殊数据类型,它允许开发者定义一组命名的常量,使代码更加清晰、安全且易于维护
举例:
public enum UserStatus {Normal(1),Black(0);}
特点
-
类型安全:编译时检查
-
不可实例化:枚举构造器默认private
-
不可继承:所有枚举都隐式继承java.lang.Enum
-
线程安全:枚举实例在类加载时创建
枚举进阶特性
@Getter
public enum UserStatus {Normal(1),Black(0);private Integer value;UserStatus(Integer value) {this.value = value;}
}//使用方法 //user.setStatus(UserStatus.Normal.getValue());
枚举最佳实践
-
优先使用枚举替代常量
-
替代public static final int常量
-
替代字符串常量
-
-
考虑性能影响
-
values()方法每次返回新数组
-
可缓存values()结果
-
-
合理设计枚举方法
-
避免过于复杂的业务逻辑
-
保持单一职责
-
-
序列化考虑
-
默认序列化机制安全
-
自定义属性需要特殊处理
-
枚举限制
-
不能继承其他类
-
不能显式声明为final
-
不能创建枚举实例(new操作)
-
不能扩展枚举常量(每个常量都是final)
final(由枚举延申的知识点)
final
是 Java 中的一个重要关键字,可以用来修饰类、方法和变量,具有不同的语义和作用
1.final
修饰变量
基本特点
-
不可变性:一旦赋值,值(基本类型)或引用(对象类型)不可更改。
-
必须初始化:必须在声明时、构造方法中或静态代码块(
static final
)中初始化。
变量类型 | 特点 | 示例 |
---|---|---|
局部变量 | 方法内使用,初始化后不可修改 | final int x = 10; |
成员变量 | 必须在声明时或构造方法中初始化 | final String name = "Java"; |
静态变量 | 必须在声明时或静态代码块中初始化,通常作为常量 | static final double PI = 3.14; |
引用类型变量:final
仅保证引用不变,但对象内部属性仍可修改(除非对象本身不可变,如 String
)。
2. final
修饰方法
核心特点
-
不可重写:子类不能重写
final
方法(防止继承破坏父类逻辑)。 -
早期绑定:编译时确定调用目标,可能提高性能(JVM 可能内联优化)
适用场景
-
关键方法:如核心算法、安全性相关方法。
-
模板方法模式:防止子类修改流程骨架。
3. final
修饰类
核心特点
-
不可继承:
final
类不能被其他类继承(如String
、Integer
)。 -
隐式 final 方法:类中所有方法自动成为
final
方法(不可重写)
适用场景
-
不可变类:如
String
、基本类型包装类(Integer
等)。 -
安全性要求高的类:防止恶意子类化破坏行为。
总结
-
变量:值/引用不可变,必须初始化。
-
方法:不可重写,可能优化性能。
-
类:不可继承,适合不可变设计。
-
线程安全:
final
字段天然线程安全。 -
平衡使用:在需要限制修改或保证安全时使用,但避免过度。
LambdaQueryWrapper 详解 (Mybatis-Plus)
LambdaQueryWrapper
是 MyBatis-Plus 提供的一个强大的查询条件构造器,它通过 Lambda 表达式的方式引用实体属性,避免了字段名的硬编码,提高了代码的安全性和可维护性。
只查询必要字段
基本特点
-
类型安全:使用 Lambda 表达式引用实体属性,避免字段名拼写错误
-
链式调用:支持流畅的链式编程风格
-
防止SQL注入:自动处理参数化查询
常用方法对照表
方法名 | 说明 | 示例 |
eq | 等于 | wrapper.eq(User::getName, "张三") |
ne | 不等于 | wrapper.ne(User::getAge, 18) |
gt | 大于 | wrapper.gt(User::getAge, 18) |
ge | 大于等于 | wrapper.ge(User::getAge, 18) |
lt | 小于 | wrapper.lt(User::getAge, 30) |
le | 小于等于 | wrapper.le(User::getAge, 30) |
like | 模糊查询 | wrapper.like(User::getName, "张") |
in | IN 查询 | wrapper.in(User::getId, Arrays.asList(1, 2, 3)) |
orderByAsc | 升序排序 | wrapper.orderByAsc(User::getAge) |
orderByDesc | 降序排序 | wrapper.orderByDesc(User::getCreateTime) |
select | 指定查询字段 | wrapper.select(User::getId, User::getName) |
重写和重载
特性 | 方法重写 (Override) | 方法重载 (Overload) |
---|---|---|
定义 | 子类重新定义父类中已有的方法 | 同一个类中定义多个同名但参数不同的方法 |
英文名 | Overriding | Overloading |
目的 | 实现多态,改变父类方法的行为 | 提供处理不同类型数据的多种方 |
场景 | 选择 |
---|---|
需要改变继承方法的行为 | 使用重写 |
需要以不同方式处理不同类型/数量的参数 | 使用重载 |
实现多态特性 | 必须使用重写 |
提供多种构造对象的方式 | 使用构造方法重载 |
能否根据返回类型区分重载方法?
不能,仅返回类型不同会导致编译错误重写方法是否可以修改参数列表?
不可以,修改参数列表会变成重载而非重写为什么重写不能抛出更宽泛的异常?
子类方法不应破坏父类方法的约定重载方法在继承体系中如何工作?
子类会继承父类的所有重载版本,并可以添加新的重载
为什么要封装service?
第三方组件封装的核心价值
-
抽象与解耦 : 提供高级抽象层,隔离具体实现 , 更换组件时只需修改封装层,避免全局代码改动
-
统一接口 : 标准化不同第三方工具的API差异 , 开发者无需关注底层工具实现细节
-
扩展性增强 : 便于添加项目特定功能 , 灵活扩展第三方工具原生能力
-
异常管理 : 统一转换第三方工具原生异常 , 提供业务语义明确的错误信息
-
可维护性提升 : 通过语义化接口提高代码可读性 , 完善的封装层文档降低新人学习成本
相关文章:
微服务项目->在线oj系统(Java版 - 2)
相信自己,终会成功 微服务代码: lyyy-oj: 微服务 接口文档定义 响应数据定义: 响应数据格式:通常,HTTP API 的响应数据采用 JSON 格式 例如:成功响应(带数据) {"code": 200,"message": "查询成功","…...
整理了 2009 - 2025 年的【199 管综真题 + 解析】PDF,全套共 34 份文件
每年真题原卷 ✅ 每年详细解析 ✅ 📂【管综真题 2009-2025】 📂【管综解析 2009-2025】 目录树: ├── 2009-2025管综真题 PDF │ ├── 2009年199管综真题.pdf │ ├── 2010年199管综真题.pdf │ ├── 2011年199管综真题.pd…...
HarmonyOS 与 OpenHarmony:同根而不同途
HarmonyOS 与 OpenHarmony:同根而不同途 引言 在操作系统领域,HarmonyOS 和 OpenHarmony 这两个名字频繁出现,它们之间既存在着千丝万缕的联系,又有诸多显著的区别。对于开发者和相关从业者而言,深入了解两者的差异点…...
并发编程(4)
final修饰 1. 用final修饰类 当一个类被final修饰时,意味着它不能被其他类继承,也就是该类无法派生出子类。像 Java 中的String类就是典型的final类。 public final class FinalClass {// 类的内容 }// 下面的代码会报错,因为FinalClass不…...
合并K个升序链表
目录 合并 K 个升序链表 解题思路 ListNode 数组方式给出 k 个链表 ArrayList 方式给出 k 个链表 ArrayList常见操作 合并 K 个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后…...
UART、SPI、IIC复习总结
一、UART 1、UART和USART的异同? 相同点 基本功能:都是用于串行通信的数据收发设备,能够实现数据在不同设备之间的传输。在异步通信模式下,二者的工作方式相似,都使用起始位、数据位、校验位(可选&#…...
【AWS入门】Amazon Bedrock简介
【AWS入门】Amazon Bedrock简介 [AWS Essentials] Brief Introduction Amazon Bedrock By JacksonML 1. 引言 Amazon Bedrock,在AWS官网,映入眼帘的第一句话就是,“使用基础模型构建和扩展生成式人工智能应用程序的最简单方法”。如下图所…...
报告精读:华为2024年知行合一通信行业数据治理实践指南报告【附全文阅读】
《华为 2024 年知行合一通信行业数据治理实践指南报告》聚焦通信行业数据治理,指出在数字化转型背景下,通信行业面临数据量庞大、类型多样、时效要求高、价值密度低、安全要求高等特点与数据质量、汇聚、开放等难点。报告提出通信行业数据治理需构建包含…...
Eigen与OpenCV矩阵操作全面对比:最大值、最小值、平均值
功能对比总表 功能Eigen 方法OpenCV 方法主要区别最大值mat.maxCoeff(&row, &col)cv::minMaxLoc(mat, NULL, &maxVal, NULL, &maxLoc)Eigen需要分开调用,OpenCV一次获取最小值mat.minCoeff(&row, &col)cv::minMaxLoc(mat, &minVal, NU…...
机器学习(12)——LGBM(1)
文章目录 LightGBM算法详解1. 算法背景2. 核心创新2.1 基于直方图的决策树算法2.2 单边梯度采样(GOSS)2.3 互斥特征捆绑(EFB) 3. 算法细节3.1 树生长策略3.2 特征并行与数据并行3.3 类别特征处理 4. 关键参数说明4.1 核心参数4.2 控制速度参数4.3 控制过拟合参数 5. 与XGBoost对…...
深入理解TCP与UDP:协议对比、头部结构与连接管理
一、TCP与UDP的核心区别 特性TCPUDP连接特性面向连接(三次握手建立连接)无连接,直接传输数据可靠性通过确认重传、排序、流控保证可靠尽力交付,不保证数据到达流量控制支持滑动窗口机制调节发送速率不支持数据分段支持大数据分段…...
Flask快速入门和问答项目源码
Flask基础入门 源码: gitee:我爱白米饭/Flask问答项目 - 码云 目录 1.安装环境2.【debug、host、port】3.【路由params和query】4.【模板】5.【静态文件】6.【数据库连接】6.1.安装模块6.2.创建数据库并测试连接6.3.创建数据表6.4.ORM增删改查 6.5.ORM模…...
python创建flask项目
好的,我会为你提供一个使用 Flask、pg8000 和 Pandas 构建的后台基本框架,用于手机理财产品 App 的报表分析接口。这个框架将包含异常处理、模块化的结构以支持多人协作,以及交易分析和收益分析的示例接口。 项目结构: financial_report_ap…...
Flink 的窗口机制
🪟 1. 基于时间驱动的滚动时间窗口(Tumbling Time Window - Time-based) ✅ 定义: 每隔固定的时间周期开启一个新的窗口。窗口之间不重叠。 🕒 示例: DataStream<Tuple2<String, Integer>>…...
STM32 OTA 中断向量表重定向
在STM32的OTA(Over-the-Air)升级中,中断向量表重定向是关键技术需求,其核心原因在于STM32的硬件架构和固件运行机制。以下从原理、实现方式及必要性三个角度详细分析: 一、中断向量表的作用与默认机制 中断向量表的…...
先说爱的人为什么先离开
2025年5月19日,15~23℃,贼好的一天,无事发生 待办: 2024年税务申报 《高等数学2》取消考试资格学生名单 《物理[2]》取消考试资格名单 5月24日、25日监考报名 《高等数学2》备课 《物理[2]》备课 职称申报材料 教学技能大赛PPT 遇…...
OnlyOffice秘籍系列.6-表格保护功能详解-灵活设置单元格的权限
最近很多用户在咨询是否可以提供一个灵活控制表格权限的在线协同编辑表格,这里和大家分享如果用OnlyOffice在线表格实现。 OnlyOffice 是一款功能强大的在线协作办公套件,其表格工具(Spreadsheet Editor)提供了完善的数据保护机制,…...
LLM笔记(八)Transformer学习
文章目录 1. Transformer 整体架构2. 核心组件详解2.1. 输入部分 (Input Embedding & Positional Encoding)2.2. 注意力机制 (Attention Mechanism)2.2.1. Padding Mask (填充掩码)2.2.2. Sequence Mask (Look-ahead Mask / Subsequent Mask / Causal Mask) 2.3. Multi-Hea…...
Vue 3 中使用 md-editor-v3 的完整实例markdown文本
下面我将提供一个完整的 Vue 3 项目中使用 md-editor-v3 的 Markdown 编辑器实现,包含常用功能和最佳实践。 1. 基础实现 安装依赖 npm install md-editor-v3也可以是pnpm安装 pnpm install md-editor-v3基础编辑器组件 (BasicEditor.vue) <template> &l…...
OpenCV-图像分割
实验1 实验内容 上述代码通过使用OpenCV和Matplotlib库来执行以下操作: 读取名为’kt.jpg’的图像文件,并存储在变量img中。将图像img转换为灰度图像,将其存储在变量gray中。使用cv2.threshold函数对灰度图gray进行阈值化处理,…...
Vue-计算属性
计算属性 案例 输入姓、名, 全名称姓名 实现 插值语法 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>计算属性与监视</title><!-- 引入Vue --><script type&…...
16. 通用配置文件开发.py
16. 通用配置文件开发.py 一、配置文件架构设计 1.1 模块化结构规划 #mermaid-svg-Iuex47psGWeZj6XQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Iuex47psGWeZj6XQ .error-icon{fill:#552222;}#mermaid-svg-Iu…...
Python训练营打卡 Day29
复习日:类的装饰器 知识点回顾 类的装饰器:餐厅升级计划 假设你是一家餐厅的老板,餐厅已经运营了一段时间,但你希望提升服务质量,比如在每道菜上增加一些特别的服务(比如日志记录、额外的装饰等)…...
解决 Tailwind CSS 代码冗余问题
解决 Tailwind CSS 代码冗余问题 Tailwind CSS 确实可能导致 HTML 类名过长和冗余的问题,以下是几种有效的解决方案: 1. 使用 apply 指令提取重复样式 /* 在CSS文件中 */ .btn {apply px-4 py-2 rounded-md font-medium; }.card {apply p-6 bg-white …...
【藏经阁】加密机服务完整解决方案,包含客户端+服务端
前言 你是否存在这样的苦恼,数据需要安全存储,但是每个系统大家自己写,很浪费时间。 encryption-local 一个离线版本的金融敏感信息加解密工具,用于数据库敏感信息存储。 离线版本的加解密好处是非常的方便。不过缺点也比较明显…...
互联网大厂Java求职面试:AI与大模型应用集成及云原生挑战
互联网大厂Java求职面试:AI与大模型应用集成及云原生挑战 面试场景设定 郑薪苦是一位具有搞笑风格但技术潜力巨大的程序员,正在接受一位严肃专业的技术总监面试。 第一轮提问 面试官:在我们公司的短视频平台中,需要处理千万级…...
ffmpeg -vf subtitles添加字幕绝对路径问题的解决方法
今天遇到奇怪的问题,老是报 Unable to parse option value Error applying option original_size to filter subtitles: Invalid argument 踩坑很长时间,记录下 因subtitles需要指定绝对路径, 注意点: 外面要用单引号 不能…...
JetBrains IDEA,Android Studio,WebStorm 等IDE 字体出现异常时解决方法
JetBrains IDEA,Android Studio,WebStorm 等IDE 中文字体出现异常,很怪的时候,通常需要设置字体回退才能解决。 需要在 Font 中将字体连写打开,并且设置字体回退为 Microsoft YaHei Ul 只有这样 IDEA 在没有中文字体的样式下,会将…...
鸿蒙AI开发:10-多模态大模型与原子化服务的集成
鸿蒙AI开发:10-多模态大模型与原子化服务的集成 在鸿蒙生态中,多模态大模型与原子化服务的集成是一个重要课题。本文将介绍如何在鸿蒙平台上进行多模态大模型与原子化服务的集成,以及相关的技术细节和实际案例。 鸿蒙AI开发概述 什么是鸿蒙AI…...
信奥赛CSP动态规划入门-最大子段和
针对**“最大子段和”**问题的详细分步解析与程序实现,通过动态规划将大问题分解为小问题: 一、问题拆解步骤 1. 明确问题定义 大问题:在数组[-2,1,-3,4,-1,2,1]中,找到连续子数组的和的最大值。 小问题:以每个位置i结尾的子数组能得到的最大和。 2. 状态定义 定义数组…...
Python爬虫实战:通过PyExecJS库实现逆向解密
1. 核心定义 1.1 PyExecJS 库 PyExecJS 是 Python 的第三方库,通过调用 JavaScript 运行时环境(如 Node.js、PhantomJS),实现 Python 与 JavaScript 的无缝交互。其核心功能包括: JavaScript 代码编译与执行跨语言函数调用与数据传递多引擎支持与自动环境检测1.2 字段加…...
网络安全深度解析:21种常见网站漏洞及防御指南
一、高危漏洞TOP 10 1. SQL注入(SQLi) 原理:通过构造恶意SQL语句突破系统过滤机制 典型场景: - 联合查询注入: union select 1,version(),3--+ - 布尔盲注:and (select substr(user(),1,1)=r) - 时间盲注:;if(now()=sysdate(),sleep(5),0)/ 防御方案: - 严格参数化查…...
web系统安全管理
一、概述 认证、授权是JavaWeb项目的核心部分。 二、相关概念 1、认证Authentication 认证,简单来说,就是确认用户身份的过程,确认“你是谁”(验证身份)。 2、授权(Authorization) 授权&…...
相机基础常识
相机基础常识 相机中颜色滤镜的作用🎨 1. **捕捉彩色图像**✅ 最常见的颜色滤镜阵列是 **拜耳滤镜(Bayer Filter)**: 🔍 2. **实现特定的图像效果或分析功能**✅ 常见的滤镜类型包括: 🛠️ 3. *…...
Python训练营打卡Day29
复习日:类的装饰器 知识点回顾 类的装饰器装饰器思想的进一步理解:外部修改、动态类方法的定义:内部定义和外部定义 1. 类的装饰器 类的装饰器是一种特殊的函数,用于修改或扩展类的行为。它们在类定义时被应用,类似于函…...
不同版本 Linux 系统账号操作指令 ——rtkit 账号删除、普通账号的创建 / 删除 / 权限修改超详细大全
不同版本 Linux 系统账号操作指令 ——rtkit 账号删除、普通账号的创建 / 删除 / 权限修改超详细大全 安全提醒 先备份:/etc/passwd 、/etc/shadow 、/etc/group 、/etc/sudoers 以及 Home 目录。系统账户慎删:rtkit 属于实时调度守护进程 RealtimeKit&…...
基于 Zookeeper 部署 Kafka 集群
文章目录 1、前期准备2、安装 JDK 83、搭建 Zookeeper 集群3.1、下载3.2、调整配置3.3、标记节点3.4、启动集群 4、搭建 Kafka 集群4.1、下载4.2、调整配置4.3、启动集群 1、前期准备 本次集群搭建使用:3 Zookeeper 3 Kafka,所以我在阿里云租了3台ECS用…...
Listener method could not be invoked with the incoming message
问题描述 生产者方代码: private void rollbackOrder(long orderId, CorrelationData correlationData) {rabbitTemplate.convertAndSend("order-rollback-exchange","rollback.order",new QuotaRollbackTO(orderId,null,null),correlationData…...
VueUse/Core:提升Vue开发效率的实用工具库
文章目录 引言什么是VueUse/Core?为什么选择VueUse/Core?核心功能详解1. 状态管理2. 元素操作3. 实用工具函数4. 浏览器API封装5. 传感器相关 实战示例:构建一个拖拽上传组件性能优化技巧与原生实现对比常见问题解答总结 引言 在现代前端开发…...
记录一次win11本地部署deepseek的过程
20250518 win11 docker安装部署 ollama安装 ragflow部署 deepseek部署 文章目录 1 部署Ollama下载安装ollama配置环境变量通过ollama下载模型deepseek-r1:7b 2 部署docker2.1 官网下载amd版本安装2.2 配置wsl2.3 Docker配置:位置代理镜像源 3 部署RAGFlow更换ragfl…...
PrimeVul论文解读-如何构建高质量漏洞标签与数据集
目录 1. 引入2. 现有漏洞识别方案的不足2.1 数据集中label不准2.2 数据重复2.3 测评标准不够好 3. 现有漏洞识别数据集分析3.1 关于现有数据集中label的准确率分析3.2 关于现有数据集中数据泄露( Data Leakage)情况分析 4. 漏洞识别测评5. PrimeVul数据集…...
现代生活健康养生新视角
在科技飞速发展的今天,我们的生活方式发生巨大转变,健康养生也需要新视角。从光线、声音等生活细节入手,能为健康管理开辟新路径。 光线与健康密切相关。早晨接触自然光线,可调节生物钟,提升血清素水平,…...
开启健康生活的多元养生之道
健康养生是一门值得终身学习的学问,在追求健康的道路上,除了常见方法,还有许多容易被忽视却同样重要的角度。掌握这些多元养生之道,能让我们的生活更健康、更有品质。 室内环境的健康不容忽视。定期清洁空调滤网,避…...
Flink 并行度的设置
在 Apache Flink 中,并行度(Parallelism) 是控制任务并发执行的核心参数之一。Flink 提供了 多个层级设置并行度的方式,优先级从高到低如下: 🧩 一、Flink 并行度的四个设置层级 层级描述设置方式Operator…...
抖音视频怎么去掉抖音号水印
你是不是经常遇到这样的烦恼?看到喜欢的抖音视频,想保存下来分享给朋友或二次创作,却被抖音号水印挡住了画面?别着急,今天教你几种超简单的方法,轻松去除水印,高清无水印视频一键保存࿰…...
类的加载过程详解
类的加载过程详解 Java类的加载过程分为加载(Loading)、链接(Linking) 和 初始化(Initialization) 三个阶段。其中链接又分为验证(Verification)、准备(Preparation&…...
运行:MSI Afterburner报错:应用程序无法启动并行配置不正确
从日志中可以看出,MSI Afterburner 运行时因缺少关键依赖组件(Microsoft.VC90.MFC)导致激活上下文生成失败。这是典型的 Visual C 运行时库缺失/版本不匹配 问题,与您提到的 for %1 in (%windir%\system32\*.dll) do regsvr32.exe…...
基于智能家居项目 ESP8266 WiFi 模块通信过程与使用方法详解
一、ESP8266 简介 ESP8266 是由乐鑫科技(Espressif)推出的一款低功耗、高集成度的 WiFi SoC 芯片。它内置 TCP/IP 协议栈,支持 STA(Station)、AP(Access Point)和 STA+AP 混合模式,可以独立作为主控 MCU 或配合其它主控(如 STM32、Arduino)通过串口通信使用。 常见…...
字节跳动开源通用图像定制模型DreamO,支持风格转换、换衣、身份定制、多条件组合等多种功能~
项目背景分析 图像定制是一个快速发展的领域,包括身份(ID)、风格、服装试穿(Try-On)等多种任务。现有研究表明,大规模生成模型在这些任务上表现出色,但大多数方法是任务特定的,难以推…...
Cursor:简单三步提高生成效率
第一步:结构化提示词——像写需求文档一样对话 常见误区:“做个知识管理模块,用SpringBoot。” 问题:AI会陷入迷茫——需要哪些字段?分页怎么做?异常处理是否需要? 正确写法: Note C…...