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

【spring】参数校验Validation

前言

在实际开发中,我们无法保证客户端传来的请求都是合法的。比如一些要求必传的参数没有传递,传来的参数长度不符合要求等,这种时候如果放任不管,继续执行后续业务逻辑,很有可能就会出现意想不到的bug。

有人可能会说,这不是前端的问题吗,让前端校验去。话是这么说,但我们也不能前端校验百分百不会出现问题。并且有些请求可能也不是正规通过客户端发来的,可能是黑客恶意攻击,又或是通过Postman等发来的,这些请求就不一定会“合法”了。

因此,对客户端传来的每个请求都进行必要的参数校验是十分重要的。而很多简单的校验如果都需要程序员自己去写的话,就会导致代码过于冗长、繁琐。为了让校验更加简洁明了,Spring为我们提供了Validation工具类来提供各种校验方法。

一、Validation常见的校验注解

空校验注解

  • @Null:被注释的元素必须为null
  • @NotNull:被注释的元素必须不为null
  • @NotBlank:被注释的字符串去掉前后空格后长度必须非零。
  • @NotEmpty:被注释的字符串、集合或数组不能为空(字符串长度非零、集合大小非零)。

布尔校验注解

  • @AssertTrue:被注释的元素必须为true
  • @AssertFalse:被注释的元素必须为false

日期校验注解

  • @Past:被注释的元素必须是一个过去的日期。
  • @Future:被注释的元素必须是一个将来的日期。

数字校验注解

  • @Min(value):被注释的元素必须是一个数字,其值必须大于等于指定的最小值。
  • @Max(value):被注释的元素必须是一个数字,其值必须小于等于指定的最大值。
  • @DecimalMin(value):被注释的元素必须是一个数字,其值必须大于等于指定的最小值。
  • @DecimalMax(value):被注释的元素必须是一个数字,其值必须小于等于指定的最大值。

长度校验注解

  • @Size(max, min):被注释的元素(如字符串、集合、数组)的大小必须在指定的范围内。

模式匹配校验注解

  • @Pattern(regexp):被注释的元素必须符合指定的正则表达式。

邮箱校验注解

  • @Email:被注释的元素必须是电子邮箱地址。

范围校验注解

  • @Range(min, max):被注释的元素必须在合适的范围内。

二、Validation的简单应用

首先我们需要导入Validation的依赖:

<!--validation依赖,负责参数校验-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

接着在需要使用校验的类上添加@Validation注解

接着主要有两种方式使用校验注解:

1、直接在对应参数上加上注解

@RestController
@RequestMapping("/user")
@Validation
public class UserController {@RequestMapping("/login")public Result login(@Size(max = 12,min = 4) String username, @Pattern(regexp = "^\S{5,16}$") String password){//登录return Result.success();}}

2、实体类添加校验

对于一些实体类来说,直接在参数上加注解就不太可取了,程序会无法定位到指定参数。

需要再实体类内部对应的变量上添加注解:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Category {@NotNullprivate Integer id;//主键ID@NotEmptyprivate String categoryName;//分类名称@NotEmptyprivate String categoryAlias;//分类别名private Integer createUser;//创建人ID@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//创建时间@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;//更新时间
}

接着在使用实体类的地方加上 @Validated 注解,就能让这些校验生效了:

@PutMapping("/update")public Result update(@RequestBody @Validated User user){//业务逻辑return Result.success();}

二、分组校验

前面我们介绍了如何在实体类中添加校验注解。但是,事实上在实现不同功能时,对同一个实体类的校验规则可能是会有差异的。

比如在添加用户的场景下,用户的id值就是在存入数据库后生成的,在参数传递时自然就不是必传项;而在更新用户的场景下,我们需要通过id定位指定用户,完成信息更新操作,这时在参数传递时id就是必传项了。

这样,对id值的校验就会产生冲突了。如果将id设定为必传值,那么就会导致添加用户的操作可能出现错误。不把id设定为必传值,更新用户的操作又会出现错误。

为了应对这一问题,就可以对校验项进行分组归类。具体操作步骤如下:

在实体类内部定义相应组别接口:

public class User {//各成员变量//添加用户类分组public interface Add extends Default {}//更新用户类分组public interface Update extends Default{}
}

注意:如果没有手动对校验项进行分组,其默认就在 Default

对校验项进行分组,只需要通过groups属性指定组别即可:

@NotNull(groups = Update.class)

接着在校验时指定对应的分组即可:

@PutMapping
public Result update(@RequestBody @Validated(User.Update.class) User user){//业务逻辑return Result.success();
}@PostMapping
public Result add(@RequestBody @Validated(User.Add.class) User user){//业务逻辑return Result.success();
}

这样就能实现不同业务场景下的多样化校验了。

三、自定义校验

实际开发中的校验规则可能是五花八门的,但官方提供的校验注解就这么多,很多时候并不能满足我们的校验需求。这时候就需要通过自定义校验注解来实现个性化的校验了。

首先需要定义一个注解:

@Documented //元注解
@Target(ElementType.FIELD) //元注解
@Retention(RetentionPolicy.RUNTIME) //元注解
@Constraint(validatedBy = {/*校验规则*/}) //自定义校验规则
public @interface State {//提供校验失败后的提示信息String message() default "state参数的值只能是已发布或草稿";//指定分组Class<?>[] groups() default {};//负载  获取到State注解的附加信息Class<? extends Payload>[] payload() default {};
}

接着定义一个类去实现 ConstraintValidator 接口,并实现 isValid 方法:

public class StateValidation implements ConstraintValidator<State,String> {@Overridepublic boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {//返回true表示校验通过,返回false则表示校验不通过if(value==null) return false;if(value.equals("已发布")||value.equals("草稿"))return true;return false;}
}

然后就要在之前定义的注解中的@Constraint中填入自定义类:

@Constraint(validatedBy = {StateValidation.class}) //自定义校验规则

接着就可以像使用其它校验注解一样来使用自己自定义的注解了:


那么本篇文章就到此为止了,如果觉得这篇文章对你有帮助的话,可以点一下关注和点赞来支持作者哦。如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步

相关文章:

【spring】参数校验Validation

前言 在实际开发中&#xff0c;我们无法保证客户端传来的请求都是合法的。比如一些要求必传的参数没有传递&#xff0c;传来的参数长度不符合要求等&#xff0c;这种时候如果放任不管&#xff0c;继续执行后续业务逻辑&#xff0c;很有可能就会出现意想不到的bug。 有人可能会…...

基于 InternLM 和 LangChain 搭建你的知识库

本文基于InternStudio 算力平台利用 InternLM 和 LangChain 搭建知识库。 InternStudio (OpenAIDE)[1] 是面向算法开发者与研究员的云端集成开发环境。基于「容器实例」&#xff0c;「镜像中心」&#xff0c;「分布式训练」&#xff0c;「公开数据集」模块为用户提供 “算力、算…...

C++ 设计模式:备忘录模式(Memento Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 状态模式 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为设计模式&#xff0c;它允许在不破坏封装性的前提下捕获和恢复对象的内部状态。这个模式在需要保存和恢复对象状态的场景中非常有用&#xff…...

STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计

SMEC88ST SDK开发包下载 目前市场上很多嵌入式产品方案都是可以破解复制的&#xff0c;主要是因为方案主芯片不具备防破解的功能&#xff0c;这就导致开发者投入大量精力、财力开发的新产品一上市就被别人复制&#xff0c;到市场上的只能以价格竞争&#xff0c;最后工厂复制的产…...

利用JavaScript实现猜数字

一&#xff0c;使用while循环实现 以下代码为固定数字非随机数&#xff0c;答案通过弹窗来设置&#xff0c;结果太唯一。 let number;while (true) {number prompt(我正在想一个1-10的数字,你猜猜看&#xff1f;);switch (number) {case "1":alert("小了&quo…...

terminal_学习

参考&#xff1a; 让你的 Mac 提前用上 macOS Catalina 的 Shell——Oh My Zsh 配置指南 https://sspai.com/post/55176MAC 终端美化教程&#xff08;来个全套 &#xff09;https://blog.csdn.net/weixin_42326144/article/details/121957795 x.1 zsh做美化&#xff08;安装oh…...

MongoDB 管理工具

关于 MongoDB 的管理工具&#xff0c;目前市面上有多款优秀的 GUI 工具可供选择。这些工具旨在提高 MongoDB 的开发和管理效率&#xff0c;使得数据库操作更加便捷和高效。以下是一些推荐的工具&#xff1a; MongoDB Compass&#xff1a;这是 MongoDB 官方提供的一款 GUI 管理工…...

46. Three.js案例-创建颜色不断变化的立方体模型

46. Three.js案例-创建颜色不断变化的立方体模型 实现效果 知识点 Three.js基础组件 WebGLRenderer THREE.WebGLRenderer是Three.js提供的用于渲染场景的WebGL渲染器。它支持抗锯齿处理&#xff0c;可以设置渲染器的大小和背景颜色。 构造器 antialias: 是否开启抗锯齿&am…...

机器学习-高斯混合模型

文章目录 高斯混合模型对无标签的数据集&#xff1a;使用高斯混合模型进行聚类对有标签的数据集&#xff1a;使用高斯混合模型进行分类总结实战 高斯混合模型 对无标签的数据集&#xff1a;使用高斯混合模型进行聚类 对有标签的数据集&#xff1a;使用高斯混合模型进行分类 总结…...

Linux官文转载-- Linux 内核代码风格

Warning 此文件的目的是为让中文读者更容易阅读和理解&#xff0c;而不是作为一个分支。 因此&#xff0c; 如果您对此文件有任何意见或更新&#xff0c;请先尝试更新原始英文文件。 这是一个简短的文档&#xff0c;描述了 linux 内核的首选代码风格。代码风格是因人而异的&a…...

通过无障碍服务(AccessibilityService)实现Android设备全局水印显示

一、无障碍功能简介 首先我们先来了解下无障碍功能的官方介绍&#xff1a; 无障碍服务仅应用于帮助残障用户使用 Android 设备和应用。它们在后台运行&#xff0c;并在触发 AccessibilityEvents 时接收系统的回调。此类事件表示用户界面中的某些状态转换&#xff0c;例如焦点已…...

Dockerfile基础指令

1.FROM 基于基准镜像&#xff08;建议使用官方提供的镜像作为基准镜像&#xff0c;相对安全一些&#xff09; 举例&#xff1a; 制作基准镜像&#xff08;基于centos:lastest&#xff09; FROM cenots 不依赖于任何基准镜像 FROM scratch 依赖于9.0.22版本的tomcat镜像 FROM…...

rocketmq5源码系列--(二)--生产者发送消息

这是broker源码系列第一篇。还是和往常一样&#xff0c;建议copy到本地阅读 broker是基于netty的 rocketmq队列分物理队列和逻辑队列&#xff0c;物理队列只有一个而逻辑队列有很多个 rocketmq 物理队列&#xff0c;一个物理队列对应一个文件&#xff0c;一个物理队列可以对…...

uniapp从入门到精通(全网保姆式教程)~ 别再说你不会开发小程序了

目录 一、介绍 二、环境搭建&#xff08;hello world&#xff09; 2.1 下载HBuilderX 2.2 下载微信开发者工具 2.3 创建uniapp项目 2.4 在浏览器运行 2.5 在微信开发者工具运行 2.6 在手机上运行 三、项目基本目录结构 四、开发规范概述 五、全局配置文件&#xff0…...

Kali 自动化换源脚本编写与使用

1. 背景与需求 在使用 Kali Linux 的过程中&#xff0c;软件源的配置对系统的更新与软件安装速度至关重要。 Kali 的默认官方源提供了安全且最新的软件包&#xff0c;但有时由于网络条件或地理位置的限制&#xff0c;使用官方源可能会出现速度较慢的问题。 为了解决这一问题&a…...

mysql-二进制安装方式

目录 1. 安装组件即依赖包 2. 创建用户 3. 关闭防火墙 4. 解压mysql二进制源码包 5. 创建文件夹并赋予权限 6. 编译安装mysql&#xff0c;安装完成最后面&#xff0c;会有一串英文&#xff0c;那是登录数据库的密码 7. 设置配置文件 8. 将mysql添加进环境变量 9. 复制…...

深入剖析Android SoundPool及其JNI实现

深入剖析Android SoundPool及其JNI实现 1. SoundPool概述 SoundPool是Android中用于管理和播放音频资源的类,特别适合播放短小的音效,如游戏中的爆炸声、按钮点击声等。与MediaPlayer相比,SoundPool具有以下优势: 低延迟:SoundPool适用于需要快速响应的音效播放。并发播…...

15_C语言 -构造类型

构造类型 数据类型 基本类型&#xff1a; 整型 short / short int&#xff08;2字节&#xff09;整型&#xff08;默认&#xff09; &#xff1a;int&#xff08;4字节&#xff09;长整型&#xff1a;long / long int &#xff08;8字节 &#xff08;64位系统&#xff09;&am…...

Python爬虫 - 豆瓣电影排行榜数据爬取、处理与存储

文章目录 前言一、使用版本二、需求分析1. 分析要爬取的内容1.1 分析要爬取的分类1.2 分析要爬取的单个电影的数据1.3 分析如何获取单个电影数据1.3.1 预览数据1.3.2 查看请求网址、方法及请求头信息1.3.3 查看请求参数 2. 数据用途2.1 统计分析2.2 探索性数据分析 (EDA)2.3 高…...

知识碎片-环境配置

1.添加-i 下载快: pip install onnxruntime-gpu==X.X.X -i https://pypi.tuna.tsinghua.edu.cn/simple 清华源 pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里源 pip install xxx -i https://mirrors.aliyun.com/pypi/simple 中科大源 pip install xxx -…...

手机实时提取SIM卡打电话的信令声音-智能拨号器的SIP线路-双卡双待单通方案

手机实时提取SIM卡打电话的信令声音 --智能拨号器的SIP线路-双卡双待单通方案 一、前言 蓝牙电话的技术方案最初是从蓝牙耳机和车机蓝牙的使用领域延伸出来的技术方式。通过蓝牙的HFP协议&#xff0c;把手机通话的声音和通话事件状态提取出来进行复用和处理。但中国大陆现行…...

LangChain教程 - 表达式语言 (LCEL) -构建智能链

系列文章索引 LangChain教程 - 系列文章 LangChain提供了一种灵活且强大的表达式语言 (LangChain Expression Language, LCEL)&#xff0c;用于创建复杂的逻辑链。通过将不同的可运行对象组合起来&#xff0c;LCEL可以实现顺序链、嵌套链、并行链、路由以及动态构建等高级功能…...

pytorch学习笔记汇总

一.tensor创建 1.张量的定义 张量在形式上就是多维数组&#xff0c;例如标量就是0维张量&#xff0c;向量就是一维张量&#xff0c;矩阵就是二维张量&#xff0c;而三维张量就可以想象RGB图片&#xff0c;每个channel是一个二维的矩阵&#xff0c;共有三个channel&#xff0…...

uniapp配置文字艺术字体风格

1.vue配置 App.vue中&#xff1a; <style>/*每个页面公共css *//* 全局字体风格 */font-face {font-family: gufengFont;src: url(./static/font/gufeng.ttf) format(truetype);font-weight: normal;font-style: normal;} </style>页面中&#xff1a; .text1 {f…...

江科大学习笔记之——HAL库点亮一个LED灯

HAL三步走&#xff1a;1.建工程。2.设配置。3.写代码 一.建立工程 HAL库写法 点击FinIsh 2.配置时钟 2 、设置配置参数 把模块.C.h单独设置文件 生产代码 三写代码 控制GPIO就三步 1.RCC时钟使能 2.结构体配置GPIO寄存器 3.控制GPIO值 上面的步骤已经把前两步的配置完成了接下…...

java web项目软件自动生成使用初体验-帅帅软件生成平台ASoft

软件默认 登陆账号 admin 密码 123456 一、软件使用简介说 AI软件自动生成越来越成熟&#xff0c;但AI生成的软件代码只是片段化的&#xff0c;不成体系。有没有一款可以10-30分钟自动生成JAVA WEB休系的软件&#xff1f;我也找了好久&#xff0c;终于找到了&#xff0c;开发…...

损失函数-二分类和多分类

二分类和多分类的损失函数 二分类 损失函数 L ( y , y ^ ) − ( y l o g ( y ^ ) ) ( 1 − y ) l o g ( 1 − y ^ ) L(y,\hat{y}) -(ylog(\hat{y})) (1-y)log(1-\hat{y}) L(y,y^​)−(ylog(y^​))(1−y)log(1−y^​) 其中真实标签表示为y&#xff08;取值为 0 或 1&#…...

Springboot:后端接收数组形式参数

1、接收端写法 PermissionAnnotation(permissionName "",isCheckToken true)PostMapping("/batchDeleteByIds")public ReturnBean webPageSelf( NotNull(message "请选择要删除的单据&#xff01;") Long[] ids) {for (Long string : ids) {l…...

CSS系列(46)-- Color Functions详解

前端技术探索系列&#xff1a;CSS Color Functions详解 &#x1f3a8; 致读者&#xff1a;探索颜色函数的艺术 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 CSS Color Functions&#xff0c;这个强大的颜色处理特性。 基础函数 &#x1f680; 颜色空间 /…...

MySQL数据库误删恢复_mysql 数据 误删

2、BigLog日志相关 2.1、检查biglog状态是否开启 声明: 当前为mysql版本5.7 当前为mysql版本5.7****当前为mysql版本5.7 2.1.1、Navicat工具执行 SHOW VARIABLES LIKE LOG_BIN%;OFF 是未开启状态&#xff0c;如果不是ON 开启状态需要开启为ON。{默认情况下就是关闭状态} 2.…...

ModiLeo交易平台:引领数字货币交易新未来

在当今数字化高速发展的时代&#xff0c;数字货币作为一种新兴的金融资产形式&#xff0c;正逐渐改变着全球金融格局。而此刻&#xff0c;由印度 ModiLeo 实验室联合全球顶级投行共同打造的全球领先的一站式数字货币交易平台——ModiLeo 即将上线&#xff0c;这无疑是数字货币领…...

57.插入区间 python

插入区间 题目题目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a; 题解解题思路python实现代码解释提交结果 题目 题目描述 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表 intervals&#xff0c;其中 intervals[i] [starti, endi] 表示第 i 个…...

使用WebRTC进行视频通信

一、WebRTC技术简介 什么是WebRTC&#xff1f; 是一种支持浏览器之间实时音频、视频和数据传输的开放源代码项目。它允许开发者在不需要任何第三方插件或软件的情况下实现点对点的实时通信。WebRTC已经成为现代Web应用中的关键技术&#xff0c;为开发者提供了强大的工具和API…...

详细讲解axios封装与api接口封装管理

一、axios封装 axios是基于promise的http客户端&#xff0c;用于浏览器和nodejs发送http请求 &#xff0c;对它进行封装主要是为了统一管理请求配置和处理请求和响应的通用逻辑等。以下是常用的封装逻辑和要点 1&#xff1a;引入axios相关依赖 首先引用项目中的axios库&…...

likeAdmin架构部署(踩坑后的部署流程

1、gitee下载 https://gitee.com/likeadmin/likeadmin_java.git 自己克隆 2、项目注意 Maven&#xff1a;>3.8 ❤️.9 (最好不要3.9已经试过失败 node &#xff1a;node14 (不能是18 已经测试过包打不上去使用14的换源即可 JDK&#xff1a;JDK8 node 需要换源 npm c…...

算法-回文数判断

给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数 是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如&#xff0c;121 是回文&#xff0c;…...

力扣-数据结构-7【算法学习day.78】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;建议灵神的题单和代码随想录&#xff09;和记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关…...

计算机组成原理的学习笔记(8)-- 指令系统·其一 指令的组成以及数据寻址方式/RISK和CISK

学习笔记 前言 ​ 本文主要是对于b站尚硅谷的计算机组成原理的学习笔记&#xff0c;仅用于学习交流。 1. 指令 1.1 组成 操作码&#xff08;Opcode&#xff09;&#xff1a;指指令中执行特定操作的部分。地址码&#xff1a;指令中用于指定操作数位置的部分。 1.2 扩展操作…...

Hive刷分区MSCK

一、MSCK刷分区 我们平时通常是通过alter table add partition方式增加Hive的分区的&#xff0c;但有时候会通过HDFS put/cp命令或flink、flum程序往表目录下拷贝分区目录&#xff0c;如果目录多&#xff0c;需要执行多条alter语句&#xff0c;非常麻烦。Hive提供了一个"…...

2024年12月HarmonyOS应用开发者基础认证全新题库

注意事项&#xff1a;切记在考试之外的设备上打开题库进行搜索&#xff0c;防止切屏三次考试自动结束&#xff0c;题目是乱序&#xff0c;每次考试&#xff0c;选项的顺序都不同&#xff0c;如果有两台电脑设备建议一台打开题库一台考试&#xff0c;如果只有一台电脑设备建议手…...

集成方案 | Docusign + 蓝凌 EKP,打造一站式合同管理平台,实现无缝协作!

本文将详细介绍 Docusign 与蓝凌 EKP 的集成步骤及其效果&#xff0c;并通过实际应用场景来展示 Docusign 的强大集成能力&#xff0c;以证明 Docusign 集成功能的高效性和实用性。 在当今数字化办公环境中&#xff0c;企业对于提高工作效率和提升用户体验的需求日益迫切。蓝凌…...

centos7 免安装mysql5.7及配置(支持多个mysql)

一&#xff09; 下载免安装包&#xff1a; mysql下载地址: https://dev.mysql.com/downloads/mysql/下载时&#xff0c;选择以前5.7版本&#xff1a; image 下载第一个TAR压缩包&#xff1a; image 二&#xff09; 定义安装路径并解压安装包 1、假设需要把MySQL放到 /usr/local…...

【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台

今天我们来借助若依来快速的搭建一个基于springboot的Java管理后台&#xff0c;后台网页使用vue3和 Element Plus来快速搭建。这里我们可以借助若依自动生成Java和vue3代码&#xff0c;这就是若依的强大之处&#xff0c;即便你不会Java和vue开发&#xff0c;只要跟着石头哥也可…...

什么是容器?

什么是容器&#xff1f; 容器是一种虚拟化技术&#xff0c;用于将应用程序及其所有依赖项打包在一起&#xff0c;以便在不同的计算环境中进行移植和运行。容器提供了一种隔离的运行环境&#xff0c;使不同应用程序能够在独立的文件系统、网络和进程空间等独立运行环境中运行&a…...

苍穹外卖——准备工作

模块介绍 后端的工程基于Maven进行项目构建&#xff0c;并且进行分模块开发&#xff0c;我们创建四个模块&#xff1a; sky-take-out&#xff1a;maven父工程&#xff0c;统一管理依赖版本&#xff0c;聚合其他子模块sky-common&#xff1a;子模块&#xff0c;存放公共类&…...

LLMs之o3:《Deliberative Alignment: Reasoning Enables Safer Language Models》翻译与解读

LLMs之o3&#xff1a;《Deliberative Alignment: Reasoning Enables Safer Language Models》翻译与解读 导读&#xff1a;2024年12月&#xff0c;这篇论文提出了一种名为“审慎式对齐 (Deliberative Alignment)”的新方法&#xff0c;旨在提高大型语言模型 (LLM) 的安全性。论…...

百度二面,MySQL 怎么做权重搜索?

考虑这样一个搜索需求&#xff0c;有一个 MySQL 表&#xff0c;表中很多个列存放着不同的内容&#xff0c;希望用户通过关键词进行搜索的时候&#xff0c;能够模糊匹配多个列&#xff0c;比如有 t1 列、t2 列、t3 列&#xff0c;同时还希望 t1 列的匹配权重最高&#xff0c;t3 …...

PHP:IntelliJ IDEA 配置 PHP 开发环境及导入PHP项目

在创建PHP项目之前我们需要安装PHP插件&#xff0c;安装步骤如下&#xff1a;Windows&#xff1a;IntelliJ IDEA Ultimate 安装 PHP 插件-CSDN博客 1、导入已有PHP项目&#xff0c;导入之后选择&#xff0c;File > Setting 选择对应CLL Interpreter&#xff0c;如果没有操作…...

国产数据库TiDB从入门到放弃教程

国家层面战略&#xff0c;安全的角度&#xff0c;硬件、软件国产化是趋势&#xff0c;鸿蒙电脑操作系统、鸿蒙手机操作系统…数据库也会慢慢国产化&#xff0c;国产数据库TiDB用起来比OceanBase丝滑&#xff0c;本身没有那么重。 从入门到放弃 1. 介绍1.1 TiDB 的主要特点1.2 T…...

Android 自定义控件

目录 Android 自定义控件 一、什么是自定义控件 二、创建自定义控件的常见方式 2.1继承现有控件&#xff08;如 Button、TextView 等&#xff09; 2.2直接继承 View 类 2.3组合控件 三、自定义控件的基本步骤 3.1创建一个继承自 View 或现有控件的类 3.2重写 onDraw()…...