- 博客(511)
- 资源 (7)
- 收藏
- 关注
原创 使用MyBatis动态生成sql
问题举例:有一个带占位符的模板sql,语法跟mybatis的XML是类似的,如select period, sum(amount) as sum from abc where type = '${type}' <if test='period != null'> and period = '${period}' </if><if test='debtType != null'> and debt_type = '${debtType}'
2021-08-19 14:38:16
4942
1
原创 如何更加稳妥地做校验
在工作期间,师兄教我一个更为保险的校验顺序:从JDK的AQS官方文档上https://bugs.openjdk.java.net/browse/JDK-6503247可以看到:如果是这样处理异常的话:try { ... } catch (RuntimeException e) { handle(); throw e; }那万一抛出的是throwab...
2019-12-01 13:20:27
2916
原创 如何在Java注解中放一个list
示例如下:public @interface CustomAnnot { String[] author() default "me"; String description() default "";}用这个注解的时候这样用:@CustomAnnot(author={"author1","author2"}, description="test")参考资料:...
2019-11-27 16:42:27
7748
原创 使用Spring Cache Annotation时如何不缓存空值
在插入缓存时,会有<key,value>,我们希望value=null时,不要存入缓存,怎么实现呢?使用 unless="#result == null"注解就可以,代码示例如下:@Cacheable(value="defaultCache", key="#pk", unless="#result == null")public Person findPerson(int ...
2019-11-27 16:36:05
3296
翻译 Spring Cache Annotation 使用的注意点和小技巧
使用spring中的cacheable注解需要注意的点,列举了如下:默认Cache Key的注意点对一个方法增加缓存是很简单的一件事,只需要简单加上@Cacheable注解就OK了。@Cacheable(value = "reservationsCache")public List<Reservation> getReservationsForRestaurant( R...
2019-11-27 16:31:08
3973
转载 详解布隆过滤器的原理、使用场景和Java代码示例
今天碰到个业务,他的 Redis 集群有个大 Value 用途是作为布隆过滤器,自己之前只是听说过这个,但是没深入了解过,趁这个机会补充一下知识。在进入正文之前,之前看到的有句话我觉得说得很好:Data structures are nothing different. They are like the bookshelves of your application where you...
2019-11-21 11:38:44
3862
转载 Spring boot cacheable源码及默认配置
一. Spring boot cache原理第一步. 自动配置类自动启动类:CacheAutoConfiguration 属性配置:CacheProperties 主启动类添加:@EnableCaching注解cache POM添加:<dependency><groupId>org.springframework.boot</group...
2019-11-20 11:36:35
4455
原创 Spring Boot Cacheable的默认实现
StackOverFlow上有一个问题https://stackoverflow.com/questions/37780249/spring-boot-cachable-cache-size,提问者使用了Spring Boot的@EnableCaching和@Cacheable注解,想自行设置cacheable缓存的默认最大容量。public interface VendorReposito...
2019-11-18 21:07:04
7762
1
转载 Spring之缓存注解@Cacheable
实操项目中引用:value:该缓存的方法名称,cacheName也可以使用value key:缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 unless:当方法返回空值时,就不会被缓存起来,决定是否要否定方法缓存,可以用来做条件判断 scf_company:结合redis,配置在redis的配置文件里当调用这个方法的时候,...
2019-11-18 16:39:30
12124
1
转载 SpringBoot 自定义参数校验
作者附:可以看JBOSS官方文档:https://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html/validator-customconstraints.html#validator-customconstraints简单校验在后端开发的过程中,验证前端参数的合法性是一个必不可少的步骤。但是参数验证会产生大量的样板代码...
2019-11-18 15:36:53
3592
原创 MySQL索引的更新策略
对于数据的每一次更新,MySQL并不会每次都会更新索引(针对非唯一性索引而言),索引的更新策略是这样的:在InnoDB中,增删改都会立刻修改主键or唯一索引,但是不会rebuild全局索引,而是对这些索引增加值(或移除值)。对于非唯一性索引,InnoDB会进行change buffering操作。将更改排入队列,之后再在后台将其合并到索引中。甚至,为了后续物理更新更加高效,会将变更进行合并。...
2019-11-13 19:42:54
11254
原创 Spring注解执行的默认顺序
对于同一个方法,上面加了n个注解,如下所示。@AnnotationOne@AnnotationTwopublic void test() { ………………………………}如果,不加order来强制表示顺序的话,这2个注解执行的默认顺序是什么样子的呢?经查阅Spring官方文档https://docs.spring.io/spring/docs/current/spring-...
2019-11-13 16:05:49
12639
2
转载 MySql数据库-58沈剑 架构师之路
最近在看 “58沈剑 架构师之路”的公众号,写的非常简练,干货很多。但里面也充斥了很多广告和管理类的文章,本文主要是对里面的数据库文章做一个汇总:InnoDB,5项最佳实践,知其所以然?InnoDB行锁,如何锁住一条不存在的记录?InnoDB并发如此高,原因竟然在这?InnoDB,能将数据存储在DVD里?挖坑,InnoDB的七种锁插入InnoDB自增列,居然是表锁?In...
2019-11-11 16:54:33
2867
原创 对含有null的List进行findAny会报Null Pointer错误
做了一个实验:List<String> list = new ArrayList<String>();list.add(null); list.add(null);Optional<String> result = list.stream().findAny();运行上面的代码会报错:因为:findAnyOptional<...
2019-10-29 21:40:33
3681
原创 Java8中findAny和findFirst的区别
试验了一下java stream中的findAny和findFirst,发现都返回了列表中的第一个元素。那么,这两种方法的区别是什么呢?查看了一下Java API document:findFirst:findFirstOptional<T>findFirst()Returns anOptionaldescribing the first element ...
2019-10-29 20:44:38
90738
6
原创 Java的DateTimeFormatter/SimpleDateFormat如何转义特殊字符
对于JAVA中的 DateTimeFormatter,或者主要是为了日期能够格式化地生成字符串,比如可以使用 yyyy-MM-dd HH:mm:ss 来生成 2019-10-16 21:00:16 这种格式的字符串。这里有一个需求,希望生成[2019-10-16 21:00:16] 这种字符串。可以看到它的左右两边多了中括号,而此时,我如果使用public static void ma...
2019-10-21 21:39:14
5675
原创 1元,5元,10元,20元,50元、100元面值人民币组合给定x元的问题
问题描述目前市面上的纸币主要有1元,5元,10元,20元,50元、100元六种,如果要买一件商品x元,有多少种货币组成方式?解答我们先进行如下变量的定义:dp[i][sum] = 用前 i 种硬币构成sum金额的所有组合数。那么题目的问题实际上就是求dp[m][sum],即用前m种硬币(所有硬币)构成sum的所有组合数。V0=1,V1=5,V2=10,V3=20……...
2019-09-20 22:46:51
9445
转载 为什么String的hashCode选择 31 作为乘子
本文转载自田小波的https://www.tianxiaobo.com/2018/01/18/String-hashCode-方法为什么选择数字31作为乘子/某天,我在写代码的时候,无意中点开了 String hashCode 方法。然后大致看了一下 hashCode 的实现,发现并不是很复杂。但是我从源码中发现了一个奇怪的数字,也就是本文的主角31。这个数字居然不是用常量声明的,所以没法从字...
2019-09-20 22:07:47
3321
原创 慎用HashCode作为Unique Key
处理数据的过程中,希望对数据进行groupBy操作。举个例子,data的组成是<month, baseId, amount>。数据A = <"2019-03","195",100>数据B = <"2019-04","185", 200>数据C =<"2019-03","195", 300>数据D=<"2019-04","...
2019-09-03 20:33:11
3918
原创 mysql left join之后的行数有可能与左表的行数不同
首先,谈一下left join时,放在 on 后面的条件与放在 where 后面的条件有什么不同:on是在生成连接表的起作用,where是生成连接表之后对连接表再进行过滤:当使用left join时,无论on的条件是否满足,都会返回左表的所有记录,对于满足的条件的记录,两个表对应的记录会连接起来,对于不满足条件的记录,那右表字段全部是null;当使用right join时,类似,只不...
2019-08-17 18:51:48
13082
3
转载 谈一谈神奇的ShadowDOM
这两天看《webkit技术内幕》发现了一些神奇的东西,其中之一就是ShadowDOM,学web开发也有两年多时间了,居然一直不知道还有一个ShadowDOM……惭愧惭愧言归正传,ShadowDOM到底是个什么鬼呢?引入ShadowDOM主要解决一个文档中可能需要大量交互的多个DOM树建立和维护各自功能边界的问题那么这段话到底是什么意思呢…举一个常见的例子,先看下面一系列图,...
2019-03-29 12:02:23
498
转载 输入流InputStream的reset()和mark()方法
今天写一个读写程序,运用到InputStream的reset方法是发现竟然失败了,然后查了一下JDK源码,发现BufferInputStream重写了父类FilterInputStream的mark和resetf方法,其有支持 mark 和 reset 方法的能力。而FileInputStream则没有重写父类InputStream的这两个方法,其不具有mark和reset方法的能力...
2019-03-25 15:16:03
4968
转载 mybatis报错:Error querying database. Cause: java.lang.NumberFormatException: For input string: xx
这是由于mybatis参数格式化异常导致,例如在动态sql拼接中String类型参数和数字比较。<if test="param.xxx!= '2'">其中xxx为String类型,加单引号是无法解决的,比如:param.xxx!= 'Y',此时,mybatis认为拿一个字符串(String)和一个字符(char)比较,也会报错。因此,有几种方法可以解决此问题:解决方法...
2019-03-15 20:12:51
10645
2
原创 Java将数组用固定分隔符拼接成字符串
比如有一个数组是 String[] array = [ 'a', 'b', 'c' ],我希望把该数组中每个元素直接用 ' - ' 来拼接,得到 ”a-b-c",那么应该如何实现呢?最传统的办法就是:String result = array.get(0);for(int i = 1; i < array.size(); i++) { result = result + ...
2019-01-12 15:40:36
53926
1
原创 阿里云OSS读取文件时报错:java.lang.ClassNotFoundException: org.jdom.input.JDOMParseException
在使用阿里云OSS读取文件时,报错:java.lang.ClassNotFoundException: org.jdom.input.JDOMParseException原因是 没有引入jdom。工程缺少OSS Java SDK编译或运行必须的包。解决方案:在maven里加上<!-- https://mvnrepository.com/artifact/org.jdom/jdo...
2019-01-03 19:29:28
11224
原创 java无法trim()去除中文全角空白符
Java对于中文全角空格,即unicode为12288的字符,trim()函数无法去除。 那么如何去除呢?去除方法如下:str = str.replace((char)12288, ' ');str = str.trim();即先将 中文全角空格 全部替换为 普通空格,再进行 trim() 操作。...
2018-12-30 13:26:15
5858
转载 使用Lombok @Builder注解导致默认值无效
@Builder注解导致默认值无效使用Lombok注解可以极高的简化代码量,比较好用的注解除了@Data之外,还有@Builder这个注解,它可以让你很方便的使用builder模式构建对象,但是今天发现@Builder注解会把对象的默认值清掉。像下面这段代码,会导致对象的name属性变为null:public class BuilderTest { @lombok.Bui...
2018-12-30 13:15:23
5446
原创 MySQL判断字段是否为null
不能用 '!=','=','<>' 来判断,虽然不会报错,但是并不会得到想要的结果。正确方法:使用 is not null 或 is null 此外, null 值和 ' ' 是有区别的。可以看看大神的分析:https://segmentfault.com/a/1190000009540449相信很多用了MySQL很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑...
2018-12-30 13:08:35
36040
转载 smartsvn9破解及license文件
smartsvn9破解及license文件第一步:去官网下载自己系统smartsvn版本文件下载地址:http://www.smartsvn.com/download第二步:破解(1) 将文件解压到系统路径:/opt/smartsvn(2) 打开smartsvn,选中license注册(3)注册时,选中文件smartsvn.license,下一步下一步就ok了 sm...
2018-11-13 15:49:38
2244
2
原创 MyBatis批量插入几千条数据慎用foreach
近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis中批量插入数据。mapper configuration是用foreach循环做的,差不多是这样。(由于项目保密,以下代码均为自己手写的demo代码)<insert id="batchInsert" parameterType="java.util.List"> ...
2018-10-19 11:35:02
51180
26
原创 MySQL的bug:子查询中使用rand(),上层查询中rand()的值被重算
在使用mysql的过程中,发现了一个神奇的bug。 mysql语句如下:select random_val from (select floor(rand()*10) as random_val from Test) b where b.random_val <3; 其中,Test表是个无关轻重的表(毕竟并没有从里面取数据,只是得到的结果跟Test内的数据条数有关),...
2018-09-29 17:48:46
1630
原创 IOUtils.closeQuietly:在finally中关闭流时不需要再catch一遍IOException
在使用 stream 的时,往往要 try catch IOException。eric教导我要把流的关闭放到 finally 中去写,并且在 close 之前要判断一下是否为 null。但是 stream.close() 也会 throw IOException,这就导致在 finally 中 也需要 try catch 一下,于是代码就很长。如下: byte[] data = new b...
2018-09-07 17:40:23
20734
原创 Java 7新特性:try后面的圆括号能够自动关闭资源
在导师的 previewTemplate 代码中看到,try后面跟了一个圆括号,里面申明了一个 InputStream input,当时并不明白为什么要放在圆括号里,不直接放在 {} 里,直到最近自己开始写 batchDownload,才明白其中的原因。1 自动关闭资源介绍Java 7增强了try语句的功能——它允许在try关键字后跟一对圆括号,圆括号可以声明,初始化一个或多个资源,此处的...
2018-09-07 17:10:59
3269
转载 Java程序员的日常—— IOUtils总结
以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便。下面就结合源码,看看IOUTils都有什么用处吧! 代码参考https://github.com/xinghalo/JDK-Learning常用的静态变量在IOUtils中还是有很多常用的一些变量的,比如换行符等等pub...
2018-09-07 16:42:11
2209
原创 java写入CSV文件后Excel打开乱码的问题
使用java写入csv文件,并且文件编码也设成了“UTF-8”:File file = new File("a.csv");OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");BufferedWriter bw = new BufferedWriter(osw);bw.w...
2018-09-06 19:16:49
7986
转载 使用linux命令删除X天前的文件
转载自: https://www.vionblog.com/linux-delete-files-older-than-x-days/This is a very simple tutorial how to find and delete files older than X days. I needed this for a project where i collected some i...
2018-09-06 12:13:52
2139
转载 ConcurrentHashMap在JDK1.7和1.8中的不同实现
知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。ConcurrentHashMap在多线程环境下,使用HashMap进行put操作时存在丢失数据的情况,为了避免这种bug的隐患,强烈建议使用ConcurrentHashMap代替HashMap,为了对ConcurrentHashMap有更深入的了解,本文将对ConcurrentHashMap1.7和1.8的不同实现进行分析。...
2018-08-19 13:43:19
875
转载 多线程 ForkJoinPool 详解
背景:ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个“小任务”,把多个“小任务”放到多个处理器核心上并行执行;当多个“小任务”执行完成之后,再将这些执行结果合并起来即可。这种思想值得学习。使用Java7 提供了ForkJoinPool来支持将一个任务拆分成多个“小任务”并行计算,再把多个“小任务”的结果合并成总的计算结果。ForkJoi...
2018-08-19 13:36:41
5344
2
转载 MySQL并发时经典常见的死锁原因及解决方法
1. mysql都有什么锁MySQL有三种锁的级别:页级、表级、行级。表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般算法:next KeyLocks锁,同...
2018-08-19 13:31:18
798
转载 Mysql中update后insert造成死锁的分析
问题描述sql如下:START TRANSACTION;UPDATE table_a SET ... WHERE id = x ;IF(ROW_COUNT() = 0) THEN INSERT INTO table_a id VALUES x;END IF; COMMIT;其中id为主键。平均一天有不到10次的死锁。排查过程首先查看程序日志,发现死锁都只有新...
2018-08-19 11:14:37
5341
[数学建模方法与分析].(新西兰)Mark.M.Meerschaert.清晰PDF版
2017-09-15
有名的combobox下拉框插件压缩后的js版本
2016-09-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人