自定义参数校验注解
校验选项中不允许存在相同的数据
@Target({ FIELD })
@Retention(RUNTIME)
@Documented
@Constraint(
// 自定义校验器 校验集合中重复的元素
validatedBy = {DuplicatedElementValidation.class}
)
public @interface NotDuplicatedElement {
String message() default "{not_duplicated_element_message}";
//该属性用与校验String数据大小写敏感问题
boolean ignoreCase() default false;
...
解决git pull中 fatal:Not possible to fast-forward, aborting
1. 问题场景
最近工作机从Windows换成了Mac, 发现在Mac 机上pull代码时总会出现“fatal: Not possible to fast-forward, aborting”,然而在Windows机是没有问题的。
开发流程:基于release拉取一个feature分支,然后在feature分支上进行开发,再把feature分支往master合并,如果有冲突先git pull 一下,然后解决冲突进行push。
(release是master的子集)
上述流程在windows上运行很流畅但是到mac上就不行,在stackoverflow的大佬说是因为base不一致,需要使用rebase去解决,百度上也是这么描述的。虽然这种方式帮助很多人解决了问题,但绝不是我所想要...
git 基本命令
git - remote
git remote add origin git@github.com:Encyclopedias/MavenRepo.git
git — stash
display all stash list: git stash list
delete all stash list: git stash clear
delete one of stash: git stash drop stash@{number}
use one of stash: git stash apply “stash@{number}”
git — push
push the local branch to remote branch[first]: git push or...
MySQL实战45讲
丁奇Mysql 45讲 来源于极客时间文章
开篇词,这一次让我们一起来搞懂MySQL
基础架构:一条SQL查询语句是如何执行的
日志系统:一条SQL更新语句是如何执行的
事务隔离:为什么你改了我还看不见
深入浅出索引(上)
深入浅出索引(下)
全局锁和表锁:给表加个字段怎么有这么多阻碍
行锁功过:怎么减少行锁对性能的影响
事务到底是隔离的还是不隔离的?.pdf
普通索引和唯一索引,应该怎么选择
MySQL为什么有时候会选错索引
怎么给字符串字段加索引
为什么我的MySQL会“抖”一下
为什么表数据删掉一半,表文件大小不变
count()这么慢,我该怎么办
答疑文章(一):日志和索引相关问题
“order by”是怎...
方案设计 | Bit位用于Option的总结
1.应用初衷
在日常的开发中,会产生各种各样的开关应用,开关对于某些功能的应用。如果对于每一个开关都要搞一个字段存储在字段中,这样显得特别笨重,而且占用存储内存。此时Bit位便应用而生。
Note:
建议大家int类型的存储32 - 1个开关,因为第32位是符号位,可能在有些情况下会导致一些不必要的麻烦,另外存储option的数据库字段数据库的默认值不可以设置成负数。
2.基本应用
使用bit位存储option只会存在两点:1.十进制数转成bit为体现option(1/0); 2.option体现bit位转成十进制数。
@Data
public class Option {
private Boolean muteUser;
private boolean ...
数据库字段的not null意义何在
1. 官网解释存在的问题
点此进入官网
总结一下官网所给出的解释:
null和空字符串是两回事,查找为null的要使用 is null的方式;
在使用一些聚合函数(count(), min(), sum() 等)时会忽略null的统计;
Note: count(*)是计算行数,count(某个字段)是统计不为null的个数;
将null插入自增的字段,该字段会显示null;
对于MyISAM,InnoDB和MEMORY 这类存储引擎是支持插入null数据的;
2.的踩坑经验
2.1 数据库字段为null有意义的情况
例如:使用number统计某店铺今天的出售情况。如果卖出一件,number加一,如果退款一件,number减一;那么如果number为0说明该店铺今...
Spring Boot如何实现零配置
1. Web项目启动的过程
Servlet的容器:Tomcat,Jetty,Jboos等,其中Nginx、Apache是http容器;
Web.xml配置(配置listener和servlet)
listener需要配置ContextLoaderListener,再通过访问webApplicationContext加载spring上下文,实际就是为了加载spring.xml文件;
配置servlet是为了启动spring-MVC, 该过程是通过DispatchServlet访问spring-mvc.xml
web.xml 文件
<context-param>
<param-name>context...
Java:序列化和反序列化
1.概念与作用
1.1概念
序列化:对象转换为字节序列的过程,本质上是将一个对象转换成二进制的byte[]数组
反序列化:字节序列恢复为对象的过程
两种作用:
将对象序列化后永久的保存到硬盘中,通常是存在一个文件中;
在网络通信传递数据时需要;网络之间的通信均是使用二进制的形式互相通信,无论是发送还是接受,因为序列化和反序列化对网络通信至关重要。
2.对象序列化和反序列化
2.1JDK的序列化API
java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
java.io.ObjectInputStream代表对象输入流,...
JWT:从理论到实践
1.JWT应用场景
JWT官网:
JWT一般用于网站的授权认证的过程
前端在每次请求时将JWT放在请求连接header中的Authorization位
后端会检查JWT的合法性
签名是否正确
检查token是否过期
2.JWT的结构
JWT通过三部分组成:
1.header(标头) :token的类型(即JWT)和所使用的的签名算法,如:HMAC, SHA256, RSA,然后使用Base64对标头进行编码形成JWT的第一部分。
2.payload(有效负载):有效负载包含用户的数据声明,同样会使用Base64对该部分进行编码形成JWT第二部分。
3.signature(签名):签名使用的是经过编码后的header和payload以及后端提供的一个秘钥,然后...
Mysql:根据现存数据生成insert语句
1. 谈谈需求
在开发的过程中将两个项目(A与B)公用的几张表,该表中的某些数据是针对项目A的,另外一些数据是用于项目B的。为了逐渐将两个项目独立处理,拆分表和缓存是刻不容缓。
表拆分:通过select语句查找出项目B的数据,将这些数据生成insert语句。
2.拆分详解
table_user
主要是通过concat方法将其拼接成insert语句,具体脚本如下:
select concat("insert into table_user(user_id, name, email,
created_time, modified_time) value(", "'", user_id, "',", quote(name), ",", quote(email), ",'", crea...
51 post articles, 6 pages.