java
guandezhi
这个作者很懒,什么都没留下…
展开
-
一个注解搞定全局参数校验
一、引入maven依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>...原创 2020-01-17 16:01:49 · 1140 阅读 · 0 评论 -
sourcetree重置到某次提交
1.重置到某次提交,选择强行合并。2.git强行推送,借助终端,git push -u origin <分支名> -f ,例如:master分支git push -u origin master -f。注意:master分支有保护,需要把master分支保护关闭,操作如下:a.进入所在项目的settings,点击进入Protected branches,点击unprotec...原创 2019-11-21 14:42:16 · 3879 阅读 · 0 评论 -
图解HTTPS、对称加密、非对称加密原理
以图的方式更容易让人理解和记忆,下面通过几幅图片来了解一下对称加密、非对称加密以及https的原理。对称加密 a.加密和解密都是用同一个秘钥 b.加密、解密效率高 c.秘钥被窃取,容易造成数据不安全非对称加密 a.用公钥加密用私钥解密 b.加密、解密相对于对称加密效率更低,但是比对称加密更安全。 ...原创 2019-07-24 16:55:43 · 5098 阅读 · 0 评论 -
redis分布式限流的情况下,如果不能丢弃请求,那么被限流的请求如何处理?
问题思考?redis分布式限流的情况下,如果请求不能被丢弃,那么被限流的请求该怎么处理呢? 在大流量请求的情况下,如何保证接口的稳定性?网络上大部分讲关于分布式限流,都是用redis+lua来实现,被限流的请求都是直接丢弃,然后在前端给用户提示友好信息。这种做法当然没错,但是如果有一种业务场景不能丢弃请求,每个请求都有和业务相关的关键信息该怎么办呢?其实这时候就需要利用kafka+ao...原创 2019-07-18 14:56:17 · 828 阅读 · 0 评论 -
Java forEach 改变多个属性时的Lambda写法
第一种写法(改变一个属性时):fees.forEach(fee -> fee.setCheckInDate(perCheckIn));第二种写法(改变多个属性时,一个入参时括号可以省略):fees.forEach((fee) -> { fee.setCheckInDate(perCheckIn); fee.setAmount(fee.getLocalAmou...原创 2019-05-31 16:42:37 · 5424 阅读 · 0 评论 -
mybatis代码自动生成工具之maven插件mybatis-generator-maven-plugin(mybatis逆向工程)
mybatis自动代码生成工具maven插件可以帮助我们轻松的生成pojo、dao、mapper.xml文件,相比于mybatis-generator等其他方式方便许多,话不多说,上代码先看一下整体操作图一、引入maven依赖<dependencies> <dependency> <groupId>org...原创 2019-05-23 13:00:39 · 4189 阅读 · 2 评论 -
巧用设计模式,提升代码逼格
首先,来思考一个场景(以下单为例)。如果一个下单的请求,调用的服务比较多,也就是一个请求的调用链比较长,这时候该怎么去设计我们的程序?实现的方法多种多样,比较low的方法就是把所有服务调用都写到一起,这是不推荐的,巧用设计模式瞬间提高你代码逼格。一个电商的下单流程一般包括,订单参数校验、调用第三方服务下单、保存订单到本地数据库、保存订单操作日志等等操作。下面用代码来模拟一下这个流程。一,创...原创 2019-05-26 21:33:48 · 676 阅读 · 0 评论 -
单元测试使用多线程遇到的坑
单元测试是不支持多线程的,主线程结束之后,不管子线程有没有结束,都会强制退出。但是我们可以通过控制主线程结束的时间来做多线程测试。话不多说,上代码/** * @Author: guandezhi * @Date: 2019/5/13 12:47 */@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = {A...原创 2019-05-13 13:11:13 · 3805 阅读 · 0 评论 -
Java8 Lambda表达式和Stream流处理,看这篇就够了
Java 8提供的Lambda表达式和Stream能够帮我们简化代码,让我们可以写出更优雅、简洁的代码。话不多说,上代码/** * @Author: guandezhi * @Date: 2019/5/9 17:38 */public class LambdaTest { public static void main(String[] args) { L...原创 2019-05-09 20:45:59 · 3444 阅读 · 0 评论 -
集合排序,看这篇就够了
Comparator接口中的compare方法用来对集合排序时,需要注意排序的结果是升序排序还是降序排序,话不多说,上代码1.第一种情况:/** * @Author: guandezhi * @Date: 2019/5/9 10:11 */public class ComparatorDemo { public static void main(String[] arg...原创 2019-05-09 00:18:53 · 348 阅读 · 0 评论 -
jdbc批处理+手动事务+多线程实现81秒插入1000万数据(多线程版)
现在来试试多线程能够多少秒钟插入千万数据 /** * @Author: guandezhi * @Date: 2019/4/13 15:35 */public class JdbcUtils { private static String url = "jdbc:mysql://localhost:3306/user?useSSL=false&rewriteBa...原创 2019-04-15 13:28:37 · 3293 阅读 · 4 评论 -
jdbc批处理+手动事务实现170秒插入1000万数据(单线程版)
jdbc批处理加上手动开启事务,能够实现170秒左右插入千万级别的数据/** * @Author: guandezhi * @Date: 2019/4/13 15:35 */public class JdbcUtils { private static String url = "jdbc:mysql://localhost:3306/user?useSSL=false&am...原创 2019-04-13 18:16:03 · 860 阅读 · 0 评论 -
一段代码讲透Java所有编程规范(精华版)
本文参考了《代码整洁之道》,《阿里巴巴编程规范》,《华为编程规范》以及大量优秀的源码总结而来。简洁,优雅的代码根本不需要一行注释。先看一下重构之前和之后的代码对比:这是一段根据条件查询订单列表的代码,咋一看好像没有什么问题。但是,一个个来讲其中的问题。/** * @Author: guandezhi * @Date: 2019/3/11 22:30 */@Servicepu...原创 2019-03-12 00:44:05 · 1105 阅读 · 4 评论 -
利用工厂模式简化if else(重构版)
实现思路:1.定义抽象执行器TargetExcutor2.子类继承抽象执行器,并实现其中的抽象方法process3.将if else 分支代码写到子类的process方法中4.定义工厂方法TargetFactory,返回TargetExcutor5.利用工厂方法getExcutor代替if else分支这是我们项目中的一个execl导出工具类的一个方法,看到这么多的if else 简直...原创 2019-01-23 12:53:02 · 6481 阅读 · 3 评论