- 博客(90)
- 收藏
- 关注
转载 处理 InterruptedException
这样的情景您也许并不陌生:您在编写一个测试程序,程序需要暂停一段时间,于是调用Thread.sleep()。但是编译器或 IDE 报错说没有处理检查到的InterruptedException。InterruptedException是什么呢,为什么必须处理它?对于InterruptedException,一种常见的处理方式是 “生吞(swallow)” 它 —— 捕捉它,然后什么也不做...
2019-05-17 16:36:05
210
原创 Redis过期策略 实现原理
我们在使用redis时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期。当我们设置了过期时间,redis是如何判断是否过期,以及根据什么策略来进行删除的。1.redis设置过期时间:expire key time(以秒为单位)--这是最常用的方式setex(String key, int seconds, String value)--字...
2019-04-30 14:59:21
142
原创 arthas 在线诊断工具
1.官方文档:https://alibaba.github.io/arthas/install-detail.html2.demo网站:https://alibaba.github.io/arthas/arthas-tutorials?language=cn
2019-04-19 18:19:44
272
转载 CountDownLatch详解
CountDownLatch中count down是倒数的意思,latch则是门闩的含义。整体含义可以理解为倒数的门栓,似乎有一点“三二一,芝麻开门”的感觉。CountDownLatch的作用也是如此,在构造CountDownLatch的时候需要传入一个整数n,在这个整数“倒数”到0之前,主线程需要等待在门口,而这个“倒数”过程则是由各个执行线程驱动的,每个线程执行完一个任务“倒数”一次。总结来...
2019-04-15 15:02:01
272
转载 理解Java中的ThreadLocal
ThreadLocal是什么ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程则无法访问和修改。Global && Local上面的两个修饰看似矛盾,实则不然。Global 意思是在当前线程中,任何一个点都可以访问到ThreadLoc...
2019-04-15 14:08:47
103
转载 理解Java中的弱引用
强引用(Strong Reference)强引用就是我们经常使用的引用,其写法如下 1 StringBuffer buffer = new StringBuffer(); 上面创建了一个StringBuffer对象,并将这个对象的(强)引用存到变量buffer中。是的,就是这个小儿科的操作(请原谅我这样的说法)。强引用最重要的就是它能够让...
2019-04-15 14:07:41
6955
原创 mysql varchar类型条件查询不加引号
一张160w数据量的表 select * from order_promotion where order_no='15441913435665186' select * from order_promotion where order_no=15441913435665186 使用两条sql的查询时间查了一百多倍。orde_no存在索引。通过explain s...
2018-12-11 10:04:37
4483
转载 MySQL Explain详解
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略...
2018-11-23 16:21:52
110
转载 分布式锁
原创地址为:http://www.54tianzhisheng.cn/2018/04/24/Distributed_lock/什么是锁?在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。 而同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某...
2018-10-16 11:34:43
96
转载 Swagger2 生成 Spring Boot API 文档
POM 文件 代码支持 访问地址 Swagger UI 注解Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。本文主要介绍了在 Spring Boot 添加 Swagger 支持, 生成可自动维护的 API 文档。POM 文件首先我们需要修改工程的 POM 文件 , 添加 Swagger 的 JAR 包 springfox...
2018-08-28 18:23:36
298
转载 如何在数据库事务提交成功后进行异步操作
问题业务场景业务需求上经常会有一些边缘操作,比如主流程操作A:用户报名课程操作入库,边缘操作B:发送邮件或短信通知。业务要求 操作A操作数据库失败后,事务回滚,那么操作B不能执行。 操作A执行成功后,操作B也必须执行成功 如何实现 普通的执行A,之后执行B,是可以满足要求1,对于要求2通常需要设计补偿的操作 一般边缘的操作,通常会设置成为异步的,以提...
2018-08-28 14:37:05
688
原创 Mybatis缓存的那些事
今天写代码的时候碰到了一个情况 简单的的写了一个小demo@Test @Transactional public void test(){ Role role = new Role(); role.setRolename("xxxx"); int insert = roleMapper.insert(role); ...
2018-07-31 18:44:56
180
转载 Java 8 中的 Streams API 详解
为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合...
2018-07-18 19:45:15
143
原创 Jdk1.8 集合处理
@Test public void test(){ List<User> list = new ArrayList<>(); for (int i=0; i<10; i++) { User user = new User(); user.setId(i); ...
2018-07-16 13:53:39
785
原创 Redis常用命令
Redis常用命令集1)连接操作命令quit:关闭连接(connection)auth:简单密码认证help cmd: 查看cmd帮助,例如:help quit2)持久化save:将数据同步保存到磁盘bgsave:将数据异步保存到磁盘lastsave:返回上次成功将数据保存到磁盘的Unix时戳shundown:将数据同步保存到磁盘,然后关闭服务3)远程服务控制info:提供服务器的信息和统计mon...
2018-03-26 21:21:38
222
转载 Range
在Guava中新增了一个新的类型Range,从名字就可以了解到,这个是和区间有关的数据结构。从Google官方文档可以得到定义:Range定义了连续跨度的范围边界,这个连续跨度是一个可以比较的类型(Comparable type)。比如1到100之间的整型数据。 在数学里面的范围是有边界和无边界之分的;同样,在Guava中也有这个说法。如果这个范围是有边界的,那么这个范围又可以分为包括开集(不包...
2018-03-07 20:53:50
352
转载 EventBus
EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。 Observer模式是比较常用的设计模式之一,虽然有时候在具体代码里,它不一定叫这个名字,比如改头换面叫个Listener,但模式就是这个模式。手工实现一个Observer也不是多复...
2018-03-07 20:52:14
138
转载 Guava新集合-Table等
Table 当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现。为此Guava提供了一个新的集合类型-Table集合类型,来支持这种数据结构的使用场景。Table支持“row”和“column”,而且提供多种视图。 @Test public void TableTes...
2018-03-07 20:49:35
160
转载 Guava新增集合类型-Bimap
BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构。 通常情况下,我们在使用Java的Map时,往往是通过key来查找value的,但是如果出现下面一种场景的情况,我们就需要额外编写一些代码了。首先来看下面一种表示标识序号和文件名的map结构。 @Test public void logMapTest(){ Map<Integer...
2018-03-07 20:47:31
194
转载 Guava新增集合类型-Multimap
在日常的开发工作中,我们有的时候需要构造像Map<K, List<V>>或者Map<K, Set<V>>这样比较复杂的集合类型的数据结构,以便做相应的业务逻辑处理。例如:import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.ut...
2018-03-07 20:45:00
152
转载 Guava新增集合类型-Multiset
Guava引进了JDK里没有的,但是非常有用的一些新的集合类型。所有这些新集合类型都能和JDK里的集合平滑集成。Guava集合非常精准地实现了JDK定义的接口。Guava中定义的新集合有: Multiset SortedMultiset Multimap ListMultimap SetMultimap BiMap ClassToInstanceMap Table Multise...
2018-03-07 20:42:45
197
转载 Immutable(不可变)集合
不可变集合,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。 为什么要用immutable对象?immutable对象有以下的优点: 1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象 2.线程安全的:immutable对象在多线程下安全,没有竞态条件 3.不需要支持可变性, 可以尽量节省空间...
2018-03-07 20:39:57
138
转载 简化异常处理的Throwables类
有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中。Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常。例如:import java.io.IOException;import org.junit.Test;import com.google.common.base.Throwables;public class ThrowablesT...
2018-03-07 20:35:25
1282
1
转载 复写的Object常用方法
在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals,hashCode和toString等方法。每次写这几个方法都要做很多重复性的判断, 很多类库提供了覆写这几个方法的工具类, Guava也提供了类似的方式。下面我们来看看Guava中这几个方法简单使用。 equals方法: equals是一个经常需要覆写的方法, 可以查看Object的equals方法...
2018-03-07 20:31:41
233
转载 Preconditions优雅的检验参数
在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去。对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处理来保证流程正确执行,毕竟错误处理是比较消耗资源的方式。在平常情况下我们对参数的判断都需要自己来逐个写方法判断,代码量不少并且复用性不高,如下所示:import org.junit.Test;pu...
2018-03-07 20:26:37
588
转载 Optional优雅的使用null
在我们学习和使用Guava的Optional之前,我们需要来了解一下Java中null。因为,只有我们深入的了解了null的相关知识,我们才能更加深入体会领悟到Guava的Optional设计和使用上的优雅和简单。 null代表不确定的对象: Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。 Java中,变...
2018-03-07 20:23:35
509
转载 Google Guava 类库简介
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦。下面我...
2018-03-07 20:14:59
115
原创 Redis setnx
SETNXSETNX key value将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 SETNX 不做任何动作。SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写。可用版本:>= 1.0.0时间复杂度:O(1)返回值:设置成功,返回 1 。设置失败,返回 0 。redis> EXISTS job ...
2018-03-02 16:03:19
329
原创 POI excel导出
package com.gotokeep.erp.test.utils;import com.gotokeep.erp.test.JsonData;import org.apache.poi.hssf.usermodel.*;import org.apache.poi.ss.usermodel.BorderStyle;import org.apache.poi.ss.usermodel...
2018-02-26 16:26:26
128
转载 Elastic-JOB 定时任务
开发指南代码开发作业类型目前提供3种作业类型,分别是Simple, DataFlow和Script。DataFlow类型用于处理数据流,它又提供2种作业类型,分别是ThroughputDataFlow和SequenceDataFlow。需要继承相应的抽象类。Script类型用于处理脚本,可直接使用,无需编码。方法参数shardingContext包含
2018-01-23 17:22:18
1921
转载 shiro
简介Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。本教程只介绍基本的 Shir
2018-01-19 17:10:24
691
原创 利用URLConnection来发送POST和GET请求
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接。程序可以通过URLConnection实例向该URL发送请求、读取URL引用的资源。通常创建一个和 URL 的连接,并发送请求、读取此 URL 引用的资源需要如下几个步骤:(1)通过调用URL对象openConnection()方法来创建URLConnecti
2017-12-25 16:53:18
313
转载 MySQL EXPLAIN命令
rowsrows列显示MySQL认为它执行查询时必须检查的行数。注意这是一个预估值。ExtraExtra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。类型说明Using filesortMySQL有两种方式可以生成有序的结果,通过排序操作或者使用索引,当Extra中出现了Using
2017-12-19 11:13:56
159
原创 InputStream 的坑!
这两天在做一个上传文件到oss,然后从oss获取文件发送邮件的case。然后发现文件上传到了oss,但是取出来之后邮件的附件是空的。找了半天也没有发现,之后通过日志发现他们的长度是不同的。写了个测试demoimport org.apache.commons.io.IOUtils;import org.junit.Test;import java.io.ByteArrayInput
2017-12-08 16:12:56
469
原创 JavaMail带附件时出错
JavaMail requires an InputStreamSource that creates a fresh stream for every// 添加附件的方法public void addAttachment(String attachmentFilename, DataSource dataSource) throws MessagingEx
2017-12-07 10:14:34
5420
转载 ExecutorService 的理解与使用
商城中用到邮件发送报表。使用异步机制在后台完成邮件发送。这个类就可以很好的完成这个功能接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。壹個 ExecutorService 实例因此特别像壹個线程池。事实上,在 java.util.concurrent 包中的 ExecutorSe
2017-12-07 10:02:55
172
原创 mysql 5.6 order by limit 排序分页数据重复问题
今天使用mybatis和PageHelper分页查询时出现了重复数据的问题,一开始以为sql有错,检查了没有问题。之后就测试数据没发现了问题。百度了一下发现order by limit 这个问题。使用版本mysql 5.7.20。select * from table order by xx limit 0,10当xx不存在索引,且有xx相同的行是,可能出现分页
2017-12-04 16:04:24
325
转载 字符串处理:分割,连接,填充 Google Guava
连接器[Joiner]用分隔符把字符串序列连接起来也可能会遇上不必要的麻烦。如果字符串序列中含有null,那连接操作会更难。Fluent风格的Joiner让连接字符串更简单。1Joiner joiner = Joiner.on("; ").skipNulls();2return joiner.j
2017-12-04 15:50:47
1003
原创 Linux查看日志命令
1、cat命令: 功能:1)显示整个文件。 示例: $ cat fileName 2)把文件串连接后传到基本输出,如将几个文件合并为一个文件或输出到屏幕。 示例: $ cat file1 file2 > file 说明:把档案串连接后传到基本输出
2017-11-09 19:48:40
275
转载 数据库连接池的实现及原理
数据库连接池的实现及原理对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。连接复用。通过建立一个数据库连接池以及一套连接使用
2017-08-21 20:47:30
285
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人