- 博客(90)
- 收藏
- 关注
转载 处理 InterruptedException
这样的情景您也许并不陌生:您在编写一个测试程序,程序需要暂停一段时间,于是调用Thread.sleep()。但是编译器或 IDE 报错说没有处理检查到的InterruptedException。InterruptedException是什么呢,为什么必须处理它?对于InterruptedException,一种常见的处理方式是 “生吞(swallow)” 它 —— 捕捉它,然后什么也不做...
2019-05-17 16:36:05
295
原创 Redis过期策略 实现原理
我们在使用redis时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期。当我们设置了过期时间,redis是如何判断是否过期,以及根据什么策略来进行删除的。1.redis设置过期时间:expire key time(以秒为单位)--这是最常用的方式setex(String key, int seconds, String value)--字...
2019-04-30 14:59:21
160
原创 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
302
转载 CountDownLatch详解
CountDownLatch中count down是倒数的意思,latch则是门闩的含义。整体含义可以理解为倒数的门栓,似乎有一点“三二一,芝麻开门”的感觉。CountDownLatch的作用也是如此,在构造CountDownLatch的时候需要传入一个整数n,在这个整数“倒数”到0之前,主线程需要等待在门口,而这个“倒数”过程则是由各个执行线程驱动的,每个线程执行完一个任务“倒数”一次。总结来...
2019-04-15 15:02:01
297
转载 理解Java中的ThreadLocal
ThreadLocal是什么ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程则无法访问和修改。Global && Local上面的两个修饰看似矛盾,实则不然。Global 意思是在当前线程中,任何一个点都可以访问到ThreadLoc...
2019-04-15 14:08:47
130
转载 理解Java中的弱引用
强引用(Strong Reference)强引用就是我们经常使用的引用,其写法如下 1 StringBuffer buffer = new StringBuffer(); 上面创建了一个StringBuffer对象,并将这个对象的(强)引用存到变量buffer中。是的,就是这个小儿科的操作(请原谅我这样的说法)。强引用最重要的就是它能够让...
2019-04-15 14:07:41
7000
原创 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
4525
转载 MySQL Explain详解
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略...
2018-11-23 16:21:52
127
转载 分布式锁
原创地址为:http://www.54tianzhisheng.cn/2018/04/24/Distributed_lock/什么是锁?在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。 而同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某...
2018-10-16 11:34:43
112
转载 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
329
转载 如何在数据库事务提交成功后进行异步操作
问题业务场景业务需求上经常会有一些边缘操作,比如主流程操作A:用户报名课程操作入库,边缘操作B:发送邮件或短信通知。业务要求 操作A操作数据库失败后,事务回滚,那么操作B不能执行。 操作A执行成功后,操作B也必须执行成功 如何实现 普通的执行A,之后执行B,是可以满足要求1,对于要求2通常需要设计补偿的操作 一般边缘的操作,通常会设置成为异步的,以提...
2018-08-28 14:37:05
769
原创 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
200
转载 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
168
原创 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
824
原创 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
236
转载 Range
在Guava中新增了一个新的类型Range,从名字就可以了解到,这个是和区间有关的数据结构。从Google官方文档可以得到定义:Range定义了连续跨度的范围边界,这个连续跨度是一个可以比较的类型(Comparable type)。比如1到100之间的整型数据。 在数学里面的范围是有边界和无边界之分的;同样,在Guava中也有这个说法。如果这个范围是有边界的,那么这个范围又可以分为包括开集(不包...
2018-03-07 20:53:50
381
转载 EventBus
EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。 Observer模式是比较常用的设计模式之一,虽然有时候在具体代码里,它不一定叫这个名字,比如改头换面叫个Listener,但模式就是这个模式。手工实现一个Observer也不是多复...
2018-03-07 20:52:14
157
转载 Guava新集合-Table等
Table 当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现。为此Guava提供了一个新的集合类型-Table集合类型,来支持这种数据结构的使用场景。Table支持“row”和“column”,而且提供多种视图。 @Test public void TableTes...
2018-03-07 20:49:35
173
转载 Guava新增集合类型-Bimap
BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构。 通常情况下,我们在使用Java的Map时,往往是通过key来查找value的,但是如果出现下面一种场景的情况,我们就需要额外编写一些代码了。首先来看下面一种表示标识序号和文件名的map结构。 @Test public void logMapTest(){ Map<Integer...
2018-03-07 20:47:31
214
转载 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
163
转载 Guava新增集合类型-Multiset
Guava引进了JDK里没有的,但是非常有用的一些新的集合类型。所有这些新集合类型都能和JDK里的集合平滑集成。Guava集合非常精准地实现了JDK定义的接口。Guava中定义的新集合有: Multiset SortedMultiset Multimap ListMultimap SetMultimap BiMap ClassToInstanceMap Table Multise...
2018-03-07 20:42:45
210
转载 Immutable(不可变)集合
不可变集合,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。 为什么要用immutable对象?immutable对象有以下的优点: 1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象 2.线程安全的:immutable对象在多线程下安全,没有竞态条件 3.不需要支持可变性, 可以尽量节省空间...
2018-03-07 20:39:57
156
转载 简化异常处理的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
1313
1
转载 复写的Object常用方法
在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals,hashCode和toString等方法。每次写这几个方法都要做很多重复性的判断, 很多类库提供了覆写这几个方法的工具类, Guava也提供了类似的方式。下面我们来看看Guava中这几个方法简单使用。 equals方法: equals是一个经常需要覆写的方法, 可以查看Object的equals方法...
2018-03-07 20:31:41
243
转载 Preconditions优雅的检验参数
在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去。对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处理来保证流程正确执行,毕竟错误处理是比较消耗资源的方式。在平常情况下我们对参数的判断都需要自己来逐个写方法判断,代码量不少并且复用性不高,如下所示:import org.junit.Test;pu...
2018-03-07 20:26:37
603
转载 Optional优雅的使用null
在我们学习和使用Guava的Optional之前,我们需要来了解一下Java中null。因为,只有我们深入的了解了null的相关知识,我们才能更加深入体会领悟到Guava的Optional设计和使用上的优雅和简单。 null代表不确定的对象: Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。 Java中,变...
2018-03-07 20:23:35
536
转载 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
129
原创 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
351
原创 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
143
转载 Elastic-JOB 定时任务
开发指南代码开发作业类型目前提供3种作业类型,分别是Simple, DataFlow和Script。DataFlow类型用于处理数据流,它又提供2种作业类型,分别是ThroughputDataFlow和SequenceDataFlow。需要继承相应的抽象类。Script类型用于处理脚本,可直接使用,无需编码。方法参数shardingContext包含
2018-01-23 17:22:18
1980
转载 shiro
简介Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。本教程只介绍基本的 Shir
2018-01-19 17:10:24
718
原创 利用URLConnection来发送POST和GET请求
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接。程序可以通过URLConnection实例向该URL发送请求、读取URL引用的资源。通常创建一个和 URL 的连接,并发送请求、读取此 URL 引用的资源需要如下几个步骤:(1)通过调用URL对象openConnection()方法来创建URLConnecti
2017-12-25 16:53:18
352
转载 MySQL EXPLAIN命令
rowsrows列显示MySQL认为它执行查询时必须检查的行数。注意这是一个预估值。ExtraExtra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。类型说明Using filesortMySQL有两种方式可以生成有序的结果,通过排序操作或者使用索引,当Extra中出现了Using
2017-12-19 11:13:56
183
原创 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
533
原创 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
5520
转载 ExecutorService 的理解与使用
商城中用到邮件发送报表。使用异步机制在后台完成邮件发送。这个类就可以很好的完成这个功能接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。壹個 ExecutorService 实例因此特别像壹個线程池。事实上,在 java.util.concurrent 包中的 ExecutorSe
2017-12-07 10:02:55
189
原创 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
347
转载 字符串处理:分割,连接,填充 Google Guava
连接器[Joiner]用分隔符把字符串序列连接起来也可能会遇上不必要的麻烦。如果字符串序列中含有null,那连接操作会更难。Fluent风格的Joiner让连接字符串更简单。1Joiner joiner = Joiner.on("; ").skipNulls();2return joiner.j
2017-12-04 15:50:47
1016
原创 Linux查看日志命令
1、cat命令: 功能:1)显示整个文件。 示例: $ cat fileName 2)把文件串连接后传到基本输出,如将几个文件合并为一个文件或输出到屏幕。 示例: $ cat file1 file2 > file 说明:把档案串连接后传到基本输出
2017-11-09 19:48:40
292
转载 数据库连接池的实现及原理
数据库连接池的实现及原理对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。连接复用。通过建立一个数据库连接池以及一套连接使用
2017-08-21 20:47:30
297
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人