Home

自定义参数校验注解

校验选项中不允许存在相同的数据 @Target({ FIELD }) @Retention(RUNTIME) @Documented @Constraint( // 自定义校验器 校验集合中重复的元素 validatedBy = {DuplicatedElementValidation.class} ) public @interface NotDuplicatedElement { String message() default "{not_duplicated_element_message}"; //该属性用与校验String数据大小写敏感问题 boolean ignoreCase() default false; ...

Read more

解决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去解决,百度上也是这么描述的。虽然这种方式帮助很多人解决了问题,但绝不是我所想要...

Read more

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...

Read more

MySQL实战45讲

丁奇Mysql 45讲 来源于极客时间文章 开篇词,这一次让我们一起来搞懂MySQL 基础架构:一条SQL查询语句是如何执行的 日志系统:一条SQL更新语句是如何执行的 事务隔离:为什么你改了我还看不见 深入浅出索引(上) 深入浅出索引(下) 全局锁和表锁:给表加个字段怎么有这么多阻碍 行锁功过:怎么减少行锁对性能的影响 事务到底是隔离的还是不隔离的?.pdf 普通索引和唯一索引,应该怎么选择 MySQL为什么有时候会选错索引 怎么给字符串字段加索引 为什么我的MySQL会“抖”一下 为什么表数据删掉一半,表文件大小不变 count()这么慢,我该怎么办 答疑文章(一):日志和索引相关问题 “order by”是怎...

Read more

方案设计 | 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 ...

Read more

数据库字段的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说明该店铺今...

Read more

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...

Read more

Java:序列化和反序列化

1.概念与作用 1.1概念 序列化:对象转换为字节序列的过程,本质上是将一个对象转换成二进制的byte[]数组 反序列化:字节序列恢复为对象的过程 两种作用: 将对象序列化后永久的保存到硬盘中,通常是存在一个文件中; 在网络通信传递数据时需要;网络之间的通信均是使用二进制的形式互相通信,无论是发送还是接受,因为序列化和反序列化对网络通信至关重要。 2.对象序列化和反序列化 2.1JDK的序列化API java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。 java.io.ObjectInputStream代表对象输入流,...

Read more

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以及后端提供的一个秘钥,然后...

Read more

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...

Read more