自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 MySQL:HINT

1、强制索引 FORCE INDEXSELECT * FROM TABLE1 FORCE INDEX (FIELD1) …以上的SQL语句只使用建立在FIELD1上的索引,而不使用其它字段上的索引。2、忽略索引 IGNORE INDEXSELECT * FROM TABLE1 IGNORE INDEX (FIELD1, FIELD2) …在上面的SQL语句中,TABLE1表中FIELD1...

2018-07-31 15:37:59 373

原创 垃圾收集器

因为新生代和老年代采用回收算法的不同,垃圾收集器相应地也分为新生代收集器和老年代收集器。其中新生代收集器主要有Serial收集器、ParNew收集器和Parallel Scavenge收集器。老年代收集器主要有Serial Old收集器、Parallel Old收集器和CMS收集器。当然还包括了一款全新的、新生代老年代通用的G1收集器。各款收集器的搭配使用如下图所示,其中有连线的代表收集器可以搭配...

2018-07-29 16:05:53 286

原创 垃圾收集算法

众所周知,Java程序不用像C/C++程序在程序中需要开发人员自行处理内存的回收/释放。这是因为Java在JVM虚拟机上增加了垃圾回收(GC)机制,用以在合适的时间触发垃圾回收,将不需要的内存空间回收释放,避免无限制的内存增长导致的OOM。作为一个合格的Java程序员,有必要了解Java GC相关知识。掌握GC知识一方面可以帮助我们快速排查因JVM导致的线上问题,另一方面也可以帮助我们在Java应...

2018-07-29 15:57:34 407

原创 JVM内存模型

JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。而其他的数据依赖于每一个线程,在线程创建时创建,在线程退出时销毁。 1.程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。由于Java 虚拟机的多线程是通...

2018-07-22 22:46:10 241

原创 Guava——扩展原生JDK线程

1.使用JDK原生的线程池当要使用线程去执行一个任务时,可以使用ExecutorService.submit(new Callable());这样可以不影响其他的业务的执行,异步的执行我们想要的任务;以下面是一个简单的接口为例:/** * JDK 线程测试 */@RestControllerpublic class JdkThreadController { @...

2018-07-16 19:57:39 2704 1

原创 Guava——平滑限流

1.常用限流方法对于一个应用系统来说一定会有极限并发/请求数,即总有一个TPS/QPS阀值,如果超了阀值则系统就会不响应用户请求或响应的非常慢,因此我们最好进行过载保护,防止大量请求涌入击垮系统。常见的限流方法有:容器限流常见的web容器其实也具备限流的功能。以Tomcat容器为例,其Connector 其中一种配置有如下几个参数:acceptCount:如果Tomcat的线程都忙于响应,新来的连...

2018-07-08 16:24:00 3534

原创 Quartz——任务调度框架

目录Quartz是一个完全由Java编写的开源任务调度的框架,通过触发器设置作业定时运行规则,控制作业的运行时间。其中Quartz集群通过故障切换和负载平衡的功能,能给调度器带来高可用性和伸缩性。主要用来执行定时任务,如:定时发送信息、定时生成报表等等。1.Quartz核心概念概念含义Job任务,即被调度的任务。是一个接口,只有一个方法void execute(JobExecutionContex...

2018-06-30 18:32:08 1497

原创 ElasticSearch入门教程

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。1.安装ElasticSearchElastic 需要 Java 8 环境。如果你的机器还没安装 Java,请自行安装下载Java 8 环境。下...

2018-06-24 16:29:42 240

原创 Linux ps命令详细参数

在Linux系统中,ps(Process Status的缩写)命令常常用来用来列出系统中当前运行的进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和...

2018-06-23 10:49:10 20459 2

原创 Java内省(Introspector)理解

内省(Introspector) 是Java语言对JavaBean类属性、事件的一种缺省处理方法。JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”。这些信息储存在类的私有变量中,通过set()、get()...

2018-06-16 14:35:46 247

原创 Hystrix从入门到放弃

Hystrix框架简介Hystrix翻译成中文是“豪猪”的意思。豪猪身上长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制。因此Hystrix 的logo也是定义成了豪猪。假设有如下场景:比如我们现在有3个业务调用,分别是查询订单、查询商品、查询用户,且这三个业务请求都是依赖第三方服务—订单服务、商品服务、用户服务。三个服务均是通过RPC调用。当查询订单服务,假如线程阻塞了,这个时候后续有大量...

2018-06-10 20:03:08 942

原创 Java并发包下CompletionService源码解析

废话不多说,CompletionService是个接口,源码及其注释如下:/* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. *//* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group ...

2018-06-03 21:52:03 353

原创 Java并发包下BlockingQueue源码解析

废话不多说,源码及其注释直接搞起:/* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * *//* * * * * * * Written by Doug Lea with ...

2018-06-01 17:58:33 336

原创 MySQL InnoDB锁机制

1.背景知识InnoDB与MyISAM的区别?InnoDB支持事务(TRANSACTION)InnoDB采用了行级锁。行级锁与表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题。事务(Transaction)及其ACID属性事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,...

2018-05-26 23:18:57 595

原创 MySQL隔离级别

一、隔离级别导致的问题脏读:A事物允许读取到B事物未提交的数据。不可重复读:A事物在时间点T1读取了一些记录,在T2时再想重新读取一次同样的这些记录时,这些记录可能已经被改变、或者消失不见。幻读:A事物在任意时刻查询的结果都是事务开始时的状态(一致性)。但是,如果另一个事务同时提交了新数据,本事务再更新时,就会“惊奇的”发现了这些新数据,貌似之前读到的数据是“鬼影”一样的幻觉。二、事物隔离级别Re...

2018-05-20 22:15:08 228

原创 MySQL数据库索引解析

        MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。     考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并且每页存储100条记录。如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所...

2018-05-12 13:36:15 249

原创 Hystrix简介

        hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Netflix团队将该框架命名为Hystrix,并使用了对应的卡通形象做作为logo。1. Hystrix是什么?        在分布式环境中,许多服务依赖的一些服务中不可避免地会存在一些失败的情况。 Hystrix是这样一个框架,通过...

2018-04-22 11:23:48 748

原创 SpringBoot新特性之@Transactional

Spring的事物注解是@Transactional,加上@Transactional可以将对多个数据库更新操作作为一个数据来提交。例如:@RestController@RequestMapping("/register")public class RegisterController { @Autowired private ProducerService producer...

2018-04-14 18:36:46 1495

原创 Junit单元测试执行的顺序

Junit单元测试执行的顺序我们在写JUnit测试用例时,有时候需要按照定义顺序执行我们的单元测试方法.比如如在测试数据库相关的用例时候要按照测试插入、查询、删除的顺序测试。如果不按照这个顺序测试可能会出现问题,比如删除方法在前面执行,后面的方法就都不能通过测试.因为数据已经被清空了。而JUnit测试默认的顺序是随机的。所以这时就需要有办法要求JUnit在执行测试方法时按照我们指定的顺序来执行。按...

2018-03-31 22:48:06 12632

原创 SpringBoot集成Redis

1. SpringBoot集成Redis        Redis是一个缓存,消息代理和功能丰富的键值存储。 Spring Boot为Jedis客户端库和在它基础上的Spring Data Redis提供的抽象类提供了基本的自动配置。 有一个spring-boot-starter-data-redis'Starter'以方便的方式收集依赖关系。2. 连接到Redis        可以像其他Spr...

2018-03-18 22:11:34 213

原创 Ehcache与Redis比较

1. Ehcache简介        EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特...

2018-03-17 22:06:22 5935

原创 Java反射动态修改注解的值

先来看看通常情况下,我们通过反射获取注解的值的场景:那么现在我们定义一个 @Foo 注解,它有一个类型为 String 的 value 属性,该注解应用再Field上:/** * @Author 落叶飞翔的蜗牛 * @Date 2018/3/11 * @Description */@Target(ElementType.FIELD)@Retention(RetentionPolicy....

2018-03-11 14:48:47 11141 9

原创 通过Java反射的获取私有成员变量,调用私有方法

Java的反射工具很强大,有句著名的话:No reflection ,no frameworks.纳整理一个小工具类:/** * @Author 落叶飞翔的蜗牛 * @Date 2018/3/10 * @Description */public class ReflectionUtils { /** * 获取私有成员变量的值 * @param instanc...

2018-03-10 22:20:43 13956

原创 ThreadLocal源码解读

1. 三个类之间的关系介绍。解读ThreadLocal之前,先介绍一下Thread、ThreadLocal、ThreadLocalMap这三个类之间的关系ThreadLocal类包含一个静态内部类ThreadLocalMapThread类包含ThreadLocalMap属性threadLocals、inheritableThreadLocals/* ThreadLocal values perta...

2018-03-04 16:46:57 217

原创 Spring Boot官方文档学习——使用Spring Boot开发web应用程序

1. 使用Spring Boot开发web应用程序        Spring Boot非常适合Web应用程序的开发。 您可以使用嵌入式Tomcat,Jetty或Undertow轻松创建自包含的HTTP服务器。 大多数Web应用程序将使用spring-boot-starter-web模块来快速启动和运行。1.1 使用SpringBoot集成的Spring Web MVC框架       Sprin...

2018-03-04 14:10:20 678

原创 Spring Boot官方文档学习——使用Spring Boot

1. 简述    本文将详细介绍如何使用Spring Boot。本文将覆盖系统构建、自动配置、如何运行应用。还会包含一些Spring Boot最佳实践。尽管Spring Boot没有什么特殊的地方(它仅仅是你可以使用的一个类库而已)但是仍然有一些意见你可以采纳。这些意见将会使得你的开发更加容易一些。2. 构建系统    强烈建议您选择支持依赖管理的构建系统,并且可以使用发布到“Maven Cent...

2018-02-11 23:04:59 1097

原创 Spring Boot官方文档学习——Spring Boot快速入门

1.Spring Boot简介申明:本文创作基于当前Spring Boot最新RELEASE版本——1.5.10.RELEASE    Spring Boot可以非常简单的创建一个独立的、生产级别的基于Spring的应用,你只管运行这个应用就好了。Spring boot仅需要非常少的配置。    我们可以使用Spring Boot创建Java应用,将Java应用打包成jar,使用java -jar...

2018-02-10 19:33:21 952

原创 Non-terminating decimal expansion; no exact representable decimal result异常

Non-terminating decimal expansion; no exact representable decimal result翻译:无法终止小数点扩展; 没有确切的可表示的小数结果出现的情形:BigDecimal num1 = new BigDecimal("10");BigDecimal num2 = new BigDecimal("3");

2018-01-15 19:33:15 718

原创 Java内存模型

Java内存模型Java虚拟机管理的内存区域有如下几块: ·程序计数器程序计数器是当前线程所执行的字节码行号指示器。在虚拟机的概念模型中,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基本功能都是依赖这个程序计数器完成。每个线程都有一个独立的程序计数器,各个线程之间的计数器互不影响,独立存储。程序计数器属于线

2018-01-13 22:04:07 199

原创 阅读Java线程池ThreadPoolExecutor源码

1. 阅读Java线程池ThreadPoolExecutor源码(上)1.1前言线程池主要解决两个问题:一方面当执行大量异步任务时候线程池能够提供较好的性能,这是因为使用线程池可以使每个任务的调用开销减少(因为线程池线程是可以复用的)。另一方面线程池提供了一种资源限制和管理的手段,比如当执行一系列任务时候对线程的管理,每个ThreadPoolExecutor也保留了一些基本的统计数据,

2017-12-24 22:56:43 495 1

原创 同步器Synchronizer

闭锁 FutureTask 信号量 关卡

2017-12-17 22:31:09 1786

原创 浅谈synchronized

synchronized、Monitor、Java对象头、偏向锁、轻量级锁、自旋锁、自适应自旋锁、重量级锁、锁消除、锁粗化

2017-12-10 14:49:45 288

原创 共享对象

1. 共享对象可见性可见性涉及的方面: (1) 过期数据非线程安全的计数器:/**  * @Title: NotThreadSafetyCounter.java  * @Package visibility  * @Description: TODO  * @author 落叶飞翔的蜗牛  * @date 2017年12月3日 下午6:47:35*

2017-12-04 23:30:11 2019

原创 线程安全

为什么要线程安全?    无论何时,只要有多于一个的线程访问给定的状态变量,并且其中某个线程会写入该变量,此时必须使用同步来协调线程对该变量的访问。否则,就有可能出现写入线程未把更新写入共享内存,而读取线程读取旧值的情况,从而造成线程不安全的情况。Java中首要的同步机制是synchronized关键字。他提供了独占锁。除此以外,属于同步还包括volatile关键字、显示锁和原理变量。

2017-12-03 17:34:18 310

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除