• 等级
  • 1154976 访问
  • 130 原创
  • 13 转发
  • 4759 排名
  • 358 评论
  • 768 获赞

使用Guava实现限流器

为什么需要限流?在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。限流可以认为服务降级的一种,限流通过限制请求的流量以达到保护系统的目的。一般来说,系统的吞吐量是可以计算出一个阈值的,为了保证系统的稳定运行,一旦达到这个阈值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:延迟处理,拒绝处理,或者部分拒绝处理等等。否则,很容易导致服务器的宕机。现有的方案Google的Guava工...

2018-06-17 13:39:09

MyBatis根据表结构自动生成PO/Mapper代码的最佳实践

前言当我们新建一个表时,在项目中至少要新建3个文件:实体类*PO.java、接口类*POMapper.java、存放SQL的接口实现类*POMapper.xml。对于字段少的表来说,可能你不会在意,但是如果是一个字段超过几十个的表,那你可能要写的头昏眼花了。并且,当字段多了,手写错误的几率特别大。这个时候,我们就需要MyBatis来自动生成。基本使用1.新建配置文件在src/main/resour...

2018-06-04 23:10:42

Log4j2与Slf4j的最佳实践

前言日志对于项目的重要性不言而喻,现在市面上的日志框架多种多样:Log4j、Log4j2、Slf4j、JDKLog、Logback等等,如果没有真正深入了解过,可能会被搞得眼花缭乱。本文将介绍目前Java项目中最常见的Log4j2 + Slf4j的使用组合,这也是我自己项目中目前使用的。另外,由于现在项目基本都是Servlet 3.0及以上版本,因此本文针对Servlet 3.0及更高的版本,如果...

2018-05-07 21:38:30

排序算法:快速排序

概述 手写排序算法几乎是程序员面试必问的题目,大多数人都会选择写冒泡排序,如果此时你写的是其他改进过的排序算法,相信会让面试官眼前一亮。本文将介绍常见的排序算法中的“快速排序”。   基本思想 快速排序(QuickSort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是: 从要排序的数据中取一个数为“基准数”。 通过一趟排序将要排序的数据...

2018-04-24 22:02:57

排序算法:选择排序

前言 上一次,我们介绍了排序算法中“龟速三兄弟”的二哥“插入排序”。今天,我们继续介绍“龟速三兄弟”中的小弟——“选择排序”。和二哥“插入排序”一样,由于同样是“龟速三兄弟”中的一员,但是处理过程没有大哥“冒泡排序”那么简单明了,因此有不少人可能都没接触过“选择排序”,本文将通过例子来介绍“选择排序”的完整过程。   基本思想 每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始...

2018-04-12 23:04:49

排序算法:插入排序

前言 上一次,我们介绍了排序算法中“龟速三兄弟”的大哥“冒泡排序”。今天,我们继续介绍“龟速三兄弟”中的二哥——“插入排序”。“冒泡排序”的过程和代码相信大多数人都比较熟悉,但是“插入排序”就不见得了。由于同样是“龟速三兄弟”中的一员,但是处理过程没有“冒泡排序”那么简单明了,因此有不少人可能都没接触过“插入排序”,本文将通过例子来介绍“插入排序”的完整过程。   基本思想 将一个数插入一...

2018-04-06 18:09:58

排序算法:冒泡排序

前言 对于Java程序员来说,一般对于算法没有什么要求,但是有一个算法除外——排序算法。排序算法不仅在日常开发中经常用到,还是面试中几乎必问的题目,并且通常是以“手写代码”的形式出现,因此掌握好排序算法是对每一个程序员的最基本要求。   谈到排序算法,第一个浮现在我们脑中的一定是“冒泡排序”。“冒泡排序”由于较简单的过程,得到大多数程序员的“厚爱”,本文将简单的介绍排序算法的整个过程。  ...

2018-04-05 00:45:55

关于自增操作,你真的懂了吗?

最近看见一道有意思的面试题,是关于自增操作的,让我回想起以前自己也遇到过,并且曾经也让我困惑过,今天拿出来跟大家分享,希望对大家有帮助。题目我相信有不少人会认为输出是100,但实际运行输出是0。为什么了?要知道其中的原理,我们需要先了解下栈中的局部变量表(本地变量表)和操作数栈。局部变量表和操作数栈在介绍JoonWhee:Java虚拟机:Java内存区域的Java虚拟机栈时,我们说过“每个方法在执...

2018-03-30 19:34:50

0基础Java自学之路

前言最近逛知乎的时候,经常看到有人在问“0基础如何自学Java”、“干了几年**,想转行干Java靠谱吗”等问题。不禁让我回想起了自己当初自学Java的日子,因此在这个周末花了点时间,整理了这篇文章,希望对这些正打算自学Java的或者打算转行Java的人有点帮助。我的自学之路先告诉你们我的自学过程可能让你们有点参考。大三的时候,班主任请了2个已经拿到offer的实验室同学来跟我们传授一些经验。听完...

2018-03-25 23:52:08

Java虚拟机面试题精选(二)

概述现在面试Java开发时,基本都会问到Java虚拟机的知识,根据职位不同问的内容深浅又有所区别。本文整理了10道面试中常问的Java虚拟机面试题,希望对正在面试的同学有所帮助。11.介绍下垃圾收集机制(在什么时候,对什么,做了什么)?在什么时候?在触发GC的时候,具体如下,这里只说常见的Young GC和Full GC。触发Young GC:当新生代中的Eden区没有足够空间进行分配时会触发Yo...

2018-03-25 23:47:37

Java虚拟机面试题精选(一)

概述现在面试Java开发时,基本都会问到Java虚拟机的知识,根据职位不同问的内容深浅又有所区别。本文整理了10道面试中常问的Java虚拟机面试题,希望对正在面试的同学有所帮助。1.介绍下Java内存区域(运行时数据区)。Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为以下6个运行时数据区域。程序计数器(Program Counter Register)一块较小的内存空间,可以看作...

2018-03-23 19:30:49

一道有意思的“初始化”面试题

概述今天向大家分享一道Java面试题目,这道题是我自己设计的题目。题目原型来自于《Thinking in Java》中的“初始化与清理”一章,本来是一道简单的考察“初始化”题目,我在上面添加了其他与初始化相关的东西,最后变成一道比较综合的考察“初始化”题目。在很多笔试题中都会考察初始化方面的知识,如果你能把下面这道题目理解了,应付初始化方面的笔试题相信是“易如反掌”。这道题目涉及到的全是很基础的知...

2018-03-18 14:07:55

面试必问的CAS,你懂了吗?

概述CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。CAS也是现在面试经常问的问题,本文将深入的介绍CAS的原理。案例介绍CAS之前,我们先来看一个例子。上面这个例子在volatile关键字详解文中用过,我们知道,运行完这段代码之后,并不会获得期望的结果,而且会发现每次运行程序,输出的结果都不一样,都是一个小于...

2018-03-14 22:29:19

单例模式详解

概述单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,使用单例模式的类只有一个对象实例。单例应用场景Windows系统的任务管理器。Windows系统的回收站。操作系统的文件系统,一个操作系统只能有一个文件系统。数据库连接池的设计与实现。多线程的线程池设计与实现。Spring中创建的Bean实例默认都是单例。Java-Web中,一个Ser...

2018-03-10 19:31:17

Java并发:volatile关键字详解

概述volatile关键字可以说是Java虚拟机提供的最轻量级的同步机制,但是它并不容易完全被正确、完整地理解,以至于许多程序员都习惯不去使用它,遇到需要处理多线程数据竞争问题的时候一律使用synchronized来进行同步。了解volatile变量的语义对了解多线程操作的其他特性很有意义,在本文中我们将介绍volatile的语义到底是什么。由于volatile关键字与Java内存模型(Java ...

2018-03-04 17:18:49

欢迎关注我的微信公众号

在CSDN写第一篇文章的日期是2012-08-28,到今天已经有5年多的时间了。博客访问量也已经超过91万,评论超过210条,很高兴自己的文章能帮助到一些人。最近,我决定搞一个公众号,主要原因是:CSDN无法推送,文章送达率低,流量转化率低。CSDN的移动端使用频率低,而现在很多人都习惯在移动端看文章。CSDN留言送达率不够及时,无法较快响应读者的问题。博客的一些原创文章会逐步搬到微信公众号上,以...

2018-02-24 18:06:54

Java并发:Condition详解

概述任意一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上),主要包括wait()、wait(long timeout)、notify()以及notifyAll()方法,这些方法与synchronized同步关键字配合,可以实现等待/通知模式。Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能...

2018-02-13 16:21:57

Java并发:AbstractQueuedSynchronizer详解(独占模式)

概述AQS(AbstractQueuedSynchronizer)是一个用于构建锁和同步器的框架,许多同步器都可以通过AQS很容易并且高效地构造出来。不仅ReentrantLock和Semaphore是基于AQS构建的,还包括CountDownLatch、ReentrantReadWriteLock、SynchronousQueue和FutureTask。AQS解决了在实现同步器时涉及的大量细节问...

2018-02-10 19:34:54

Java集合:LinkedList详解

概述本文就LinkedList的几个主要方法展开介绍,并结合几个图片来介绍几个重要操作。基础属性transient int size = 0; // 节点数量 /** * Pointer to first node. * Invariant: (first == null && last == null) || * (first.prev == nul...

2018-02-03 16:27:52

Java集合:ArrayList详解

概述ArrayList是我们日常中最长用的集合之一,在使用列表时,除非特殊情况,我们一般都会选择使用ArrayList,本文就ArrayList的几个主要方法主要介绍,并结合几个图片来介绍几个重要操作。基础属性private static final int DEFAULT_CAPACITY = 10; // 初始容量10 private static final Object[] EMPTY_...

2018-01-28 22:54:03

文斯莫克香吉士

关注
  • 互联网·电子商务/Java开发工程师
  • 中国 福建省 泉州市
奖章
  • 持之以恒