随笔分类 - Java
摘要:在Spring Boot项目中可以使用AOP实现自定义注解,从而实现统一、侵入性小的自定义功能。 实现自定义注解的过程也比较简单,只需要3步,下面实现一个统一打印日志的自定义注解: 1. 引入AOP依赖 在pom文件中引入AOP的依赖: 2. 定义注解 定义注解的属性: 3. 定义切面 使用注解 在
阅读全文
摘要:1. 对列表中的元素进行拼接 以前,对一个列表中的字符串进行拼接时,常见的代码如示例1所示: 代码示例1 运行结果 示例1的代码没有问题,结果也是正确的,唯一的缺憾就是:代码比较长。 在JDK8之后,上述代码可以简化: 代码实例2 运行结果 代码由原来的9行缩短到2行,非常简洁,最主要的是节省了时间
阅读全文
摘要:错误使用 在实现限流时,网上的各种文章基本都会提到Guava的RateLimiter,用于实现单机的限流,并给出类似的代码: 可是上面的代码真的能限流吗? 首先,从代码逻辑角度来讲,方法在每次被调用是都new一个RateLimiter,不同请求之间毫无关联,怎么能起到限流的作用呢? 其次,经过本人实
阅读全文
摘要:一段很简单的代码,先自己在大脑中给出结果: for (int i = 0; i
阅读全文
摘要:在实际工作中经常遇到对账户的操作(账户充值和账户消费),处理的逻辑如下: 然而,在实际中经常会有并发操作的问题,下面通过在数据中执行SQL的方式,模拟下不做并发处理的情况: 数据库是MySQL,隔离级别采用默认的可重复读,表为t_money,只有两列:id、money,只有一条记录id=1, mon
阅读全文
摘要:1. CountDownLatch 1.1 功能及使用场景 一个同步工具,使得一个或多个线程等待一组线程执行完成后再执行。 使用场景:等待一些前置任务执行完成后,再执行特定的功能。比如,系统启动时,各种配置生效后,才能运行提供服务。 1.2 代码实例 public class CyclicBarri
阅读全文
摘要:将Java对象转为一个Map,以及将map转为对应Java对象,代码如下: 运行结果:
阅读全文
摘要:Java线程池中线程的数量超过核心线程的数量,且所有线程空闲,空闲时间超过keepAliveTime,会停止超过核心线程数量的线程,那么会保留哪些线程呢?是不是有规则呢? 测试代码: ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 5,
阅读全文
摘要:在工作中,我们会经常用到如下类似的结构 使用起来比较复杂,Guava同样提供了一个类似的接口:SetMultimap,可是从百度上基本找不到该接口的具体实现类,最后还是给Google一下,简单的使用代码:
阅读全文
摘要:对中文进行排序,同样是得定义一个Comparator,下面上代码: 一般情况下,该段程序没有问题,网上说是个别汉字会有问题。
阅读全文
摘要:今天在论坛里看到一段请教list删除的问题,下面先看代码: public static void main(String[] args) { List list = new ArrayList(5); list.add(1); list.add(2); list.add(3); list.add(4
阅读全文
摘要:Bean的定义 遵循Sun的Java Bean规范编写的特殊类 Java Bean的规范 类的访问控制权限是public 类提供有一个无参的构造函数 类的属性的访问控制权限是private,通过setXXX()方法和getXXX()方法访问属性 可序列化,即实现接口java.io.Serializa
阅读全文
摘要:将peoperties文件的读取和写入封装成了一个工具类:
阅读全文
摘要:JDK 1.6中,扩容的源码是这样: 可以看出,扩容的大小是新字符串的长度的2倍,然后再加上2。 为什么要再加上2呢? 在网上找了半天资料,然后在知乎上找到了一个合理的回答:在使用StringBuilder的时候,append()之后,我们一般会在后面在加上一个分隔符,例如逗号,也就是再加上一个ch
阅读全文
摘要:``` public class WordCount { public static void main(String[] args) { String[] stopWords = { "", ",", "." }; List stopWordList = Arrays.asList(stopWords); String strWorld = "Regular expression...
阅读全文
摘要:在Java中,一个String对象被一些特殊字符分隔时,可以使用split()方法,生成一个String[],然后进行其他的操作,就像下面这样: 其实,split()的参数是一个正则表达式,当String对象是被正则表达式中的 特殊字符 分隔时,split()的参数就不能直接仅仅写这个特殊字符(不是
阅读全文
摘要:在《 "Java中ArrayList的fori和foreach效率比较" 》中对ArrayList的两种循环方式进行了比较,本次对LinkedList的两种遍历方式进行效率的比较。 1. list的元素为自定义的对象 自定义的Student类 【代码实例1】 public static void m
阅读全文
摘要:1. list的元素为Integer 【代码实例1】 public static void main(String[] args) { List list = new ArrayList(); int maxNum = 1000000; for (int i = 0; i list = new Ar
阅读全文
摘要:1、什么是线程池? 简单粗暴的理解就是:装着一个或多个线程的容器,我们称这个容器为线程池。 在现实世界中,有着各种各样的“池”,例如游泳池、花池等等。那花池来说,里面种满了各种各样的鲜花,花池本身要做的就是提供一片空地,里面的鲜花是园丁来种植、浇水。不同于花池,线程池不仅仅需要提供一个可以装线程的容
阅读全文