自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

恶心的小达达

加油!

  • 博客(59)
  • 收藏
  • 关注

原创 ConcurrentHashMap与HashMap的总结

HashMap:(1)HashMap是一种散列表,采用(数组 + 链表 + 红黑树)的存储结构;(2)HashMap的默认初始容量为16(1<<4),默认装载因子为0.75f,容量总是2的n次方;(3)HashMap扩容时每次容量变为原来的两倍;(4)当桶的数量小于64时不会进行树化,只会扩容;(5)当桶的数量大于64且单个桶中元素的数量大于8时,进行树化;(6...

2019-08-27 12:45:30 955 1

原创 ConcurrentHashMap源码解析

底层数据结构:底层实现和HashMap是一致的,各种特性也是基本保持一致。与1.7版本的区别:取消了segment的分段设置,直接使用Node数组来保存数据,并且采用Node数组元素作为锁来实现每一行数据加锁进一步减少并发冲突的概率。 将数组和单项链表的机构变成了数组+单向链表+红黑树结构。成员变量: /************************************...

2019-08-27 12:35:25 177

原创 ArrayList源码分析

底层实现是数组(没啥好说的这个都知道)成员变量 /** * 默认容量大小 */ private static final int DEFAULT_CAPACITY = 10; /** * 空数组,如果传入的容量为0时使用 */ private static final Object[] EMPTY_ELEMENTDAT...

2019-08-23 15:11:57 181

原创 HashMap源码解析

基本概念:jdk1.8的HashMap底层的数据结构是,数组+链表+红黑树,当我们存储元素的时候,如果存在hash冲突,链表的深度会不断加深,同时集合的容量会不断增加,当到达一个需要转化的点之后(如下),链表会转化成红黑树。链表的深度达到8 集合的容量达到64当我们删除元素的时候,如果红黑树中元素的数量减小到6会转换成链表结构成员变量 /** * 默认的初始化...

2019-08-22 14:50:30 292

原创 一文搞懂RocketMq

基本概念下面是一张 RocketMQ 的部署结构图,里面涉及了 RocketMQ 核心的四大组件:Name Server、Broker、Producer、Consumer ,每个组件都可以部署成集群模式进行水平扩展。生产者生产者(Producer)负责产生消息,生产者向消息服务器发送由业务应用程序系统生成的消息。 RocketMQ 提供了三种方式发送消息:同步、异步、单向。...

2019-08-12 17:35:04 3249

原创 Redis(一) String字符串深入理解

Redis基础数据结构Redis有五种基础数据结构,分别是:String(字符串)、list(列表)、set(集合)、hash(hash)和zset(有序集合)。String(字符串)概念:Redis所有的数据结构都是以唯一的key字符串作为名称,然后通过这个唯一的key值来获取响应的value数据结构,不同类型的数据结构的差异就在于value的结构不一样。字符串结构使用非常广...

2019-08-09 17:26:47 1459

原创 Mysql性能优化索引优化补充

Mysql 之索引优化及索引失效请参考Mysql 之索引优化及索引失效1.最佳左前缀法则-如果索引了多列,要遵守最左前缀法则.指的是查询从索引的最左前列开始并且不跳过索引中的列.2.不在索引上左任何操作(计算,函数,(自动or手动)类型转换),会导致索引失效而转向全表扫描3.存储引擎不能使用索引中范围条件右边的列4.尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致...

2019-08-08 15:30:13 144

转载 Mysql性能优化(五) 索引优化实战多表索引优化

创建员工和部门表:DROP TABLE IF EXISTS employee;CREATE TABLE IF NOT EXISTS employee ( id INT PRIMARY KEY auto_increment, name VARCHAR(50), dept_id INT);DROP TABLE if EXISTS department;create ...

2019-08-08 14:59:10 428

原创 Mysql性能优化(四) 索引优化实战单表索引优化

创建文章表:drop TABLE if EXISTS article;create table if not EXISTS `article` ( id int PRIMARY KEY auto_increment, author_id int, category_id int, comments int, views int);插入3条数据...

2019-08-08 13:26:02 141

转载 Mysql性能优化(三) Explain(转)

Explain:在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行...

2019-08-08 10:05:02 119

原创 Mysql性能优化(三) 索引的基础理解

概念MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。索引的类型(关于数据结构方面的知识请自行寻找):B-Tree索引 Hash索引 聚簇索引 非聚集索引(辅助索引、二级索引) 覆盖索引 B-Tree索引:B-Tree索引使用B-Tree来存储数据,当然不同存储引擎的实现方式不...

2019-08-08 09:29:09 228

原创 Mysql性能优化(二) mysql的逻辑架构

mysql的逻辑架构MySQL体系结构描述了MySQL系统的不同组件如何相互关联。MySQL架构基本上是一个客户端 - 服务器系统。MySQL数据库服务器是服务器,连接到MySQL数据库服务器的应用程序是客户端。MySQL体系结构包含以下主要组件。应用层:该层是MySQL架构中最顶层的层;你可以在许多客户端 - 服务器架构中看到同一层。该层包括大多数客户端 - 服务器应用程序通用...

2019-08-07 10:10:32 1043

原创 Mysql性能优化(一) mysql的数据库文件存储

一、mysql的物理文件默认体系结构默认采用的是在linux系统下yum安装mysql的默认文件结构(/var/lib/mysql)下面是在navcate下查看mysql (比较有意思的是建立的数据库名称为高性能mysql结果存储的数据库文件目录是(@9ad8@6027@80fdmysql)数据库文件:一个数据库对应一个文件夹,创建了六个数据库 其中:高性能mysql对应的...

2019-08-06 16:39:59 1617

转载 Springboot 自定义注解(三) 拦截器实现权限管理

1、首先自定义我们需要的注解package com.plat;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import...

2019-02-28 11:50:06 1205

原创 Springboot 自定义注解(二) AOP 实现日志拦截

(一)JoinPoint类方法java.lang.Object[] getArgs():获取连接点方法运行时的入参列表Signature getSignature() :获取连接点的方法签名对象java.lang.Object getTarget() :获取连接点所在的目标对象java.lang.Object getThis() :获取代理对象本身(二)自定义注解@SysLog...

2019-02-28 11:46:20 534

原创 Springboot 自定义注解(一) 基础讲解

一、定义注解的格式 public@interface 注解名 {定义体}二、依赖注解@interface上面按需要注解上一些东西,包括@Retention、@Target、@Document、@Inherited四种@Retention注解的保留策略: @Retention(RetentionPolicy.SOURCE)// 注解仅存在于源码中,在cla...

2019-02-28 11:41:13 956

原创 Swagger2 整合Springboot(二) 注解讲解

一、注解列举与详解@Api:修饰整个类,描述Controller的作用@Api(description = "物流接口")@ApiOperation : 用在方法上,说明方法的作用    value: 表示接口名称     notes: 表示接口详细描述  @ApiOperation(value = "物流接口非第三方接口",notes = "物流接口非第三方接口"...

2019-02-26 16:25:02 932

原创 Swagger2 整合Springboot(一) 配置与搭建

一、引入依赖 &lt;!--swagger2--&gt; &lt;dependency&gt; &lt;groupId&gt;io.springfox&lt;/groupId&gt; &lt;artifactId&gt;springfox-swagger2&lt;/artifactId&gt; &lt...

2019-02-26 15:49:54 2261

转载 java8 函数式接口

目前由于系统已经全面切换为JDK8,所以有必要系统的了解一下Java8的一些新特性,以便后续在日常工作中可以使用一些高级特性来提高编程效率。因为Java8引入了函数式接口,在java.util.function包含了几大类函数式接口声明。这里第一篇主要研究一下Function相关的接口。FunctionalInterface注解Java8的新引入,包含函数式的设计,接口都有@Funct...

2019-02-26 12:05:11 336

原创 java8 方法引用(五) 构造方法引用

一、概念        如果函数式接口的实现恰好可以通过调用一个类的构造方法来实现,那么就可以使用构造方法引用二、例子package lambda.Example;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;import jav...

2019-02-26 12:01:36 422

原创 java8 方法引用(四) 对象方法引用

一、概念                 抽象方法的第一个参数类型刚好是实例方法的类型,抽象方法剩余的参数恰好可以当做实例方法的参数。如果函数式接口的实现能由上面说的实例方法调用来实现的话,那么就可以使用对象方法引用二、例子public class ObjeactExample { /** * 抽象方法没有输入参数,不能使用对象方法引用 * 比如说,如下函数式接口 ...

2019-02-26 11:58:19 1478

原创 java8 方法引用(三) 实例方法引用

一、概念           如果函数式接口的实现恰好可以通过调用一个实例的实例方法来实现,那么就可以使用实例方法引用二、例子 2.1 父类Base(用于演示super与this在方法引用中的使用)package lambda.Example;public class Base { public String toUpper(String str) { System....

2019-02-26 11:51:26 977

原创 java8 方法引用(二) 静态方法引用

一、概念      如果函数式接口的实现恰好是通过调用一个静态方法来实现,那么就可以使用静态方法引用二、实例public class StaticExample { /** * 无参数有返回值 * @return */ public static String put() { System.out.println("put method"); return ...

2019-02-26 11:45:32 1548

原创 java8 方法引用(一) 基本概念

一、方法的引用方法的引用是用来直接访问类或者实例的已经存在的方法或者构造方法,方法引用提供了一种引用而不执行方法的方式,如果抽放方法(函数式接口的抽象方法)的实现恰好可以使用另外一个方法来实现,就有可能使用方法引用。二、方法引用的分类 类型 语法 对应的lambda表达式 静态方法引用 类名...

2019-02-26 11:30:36 207

原创 java8 StreamAPI(五) 例子代码贴出

package Stream;import java.util.Arrays;import java.util.List;import java.util.Optional;import java.util.Set;import java.util.stream.Collectors;import java.util.stream.IntStream;import java.ut...

2019-02-25 22:03:10 169

原创 java8 StreamAPI(四)顺序流与并行流

一、一个例子package Stream;import java.util.Optional;import java.util.stream.Stream;/** * 演示并行流和顺序流 */public class TaskApp { public static void main(String[] args) { /** * para...

2019-02-25 21:58:43 1086 1

原创 java8 StreamAPI(三) 终止操作

一、终止操作列举循环 forEach计算 min、max、count、 average匹配 anyMatch、 allMatch、 noneMatch、findFirst、 findAny汇聚 reduce收集器 toArray collect二、例子演示2-1 循环 forEachArrays.asList(&amp;amp;quot;1&amp;amp;quot;,&amp;amp;quot;2&amp;amp;quot;,&am

2019-02-25 21:41:29 573

原创 java8 StreamAPI(二) 中间操作

一、中间操作列举过滤 filter 去重 distinct 排序 sorted 截取 limit跳跃 skip 转换map/flatMap 其他 peek二、例子演示2-1 过滤 filter (获取1~5之间的偶数) Arrays.asList(1, 2, 3, 4, 5).stream().filter(x-&amp;gt;x%2==0...

2019-02-25 17:41:13 365

原创 java8 StreamAPI(一) 基本概念以及创建方式

一、作用Stream是一组用来处理数组、集合的API二、Stream的特性1:不是数据结构,没有内部存储2:不支持索引访问3:延迟计算4:支持并行5:很容易生成数组或集合(List,Set)6:支持过滤,查找,转换,汇总,聚合等操作三、Stream运行机制1: Stream分为 源source,中间操作,终止操作2:流的源可以是一个数组、一个集合、一个生成器方法,一...

2019-02-25 16:41:31 448

原创 SpringBoot 导出Excel

Springboot导出Excel -- poi 方式引入依赖创建表头与设置样式获取Excel数据引入依赖 &lt;dependency&gt; &lt;groupId&gt;org.apache.poi&lt;/groupId&gt; &lt;artifactId&gt;poi&lt;/artifactId&gt; &lt;version&...

2019-01-12 05:01:42 2446 5

原创 Springboot 统一异常处理

前言:最近接手了一个比较让人头大的项目(供应商做到一半) 其中最让人头疼的是 Controller层的每一个方法都往外抛异常,自己又是一个菜鸟,而且时间比较短,采用了如下方式来做统一异常处理。定义一个返回类:错误类型返回类@Datapublic class RespData { private Boolean status=true; private int cod...

2019-01-10 23:52:20 313 1

原创 SpringBoot读取配置文件的方式

SpringBoot读取配置文件的方式application.yml my.name: dada使用Environment方式 @RequestMapping(&quot;/test&quot;) @RestController public class UserController { @Autowired private Environment env; @GetMa...

2019-01-10 23:22:59 501

原创 AQS

package java.util.concurrent.locks;import java.util.concurrent.CountDownLatch;import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;import java.util.ArrayList;import java.u...

2019-10-29 00:50:57 157

原创 JVM整理

jvmjava运行时数据区域程序计数器当前线程运行的行号指示器,计数器的任务就是用来调度字节码的执行(分支,循环,跳转,异常处理等),以及线程切换后能记录上次执行的位置java虚拟机栈每一个方法执行的同时都会创建一个栈帧(用于存储局部变量表、操作数栈、动态链接、方法出口等信息),每一个方法的执行就是进栈和出栈的过程,本地方法栈本地方法栈则为虚拟机使用到的Native方法服...

2019-09-04 11:01:47 272

原创 SpringIOC 源码解析(一) BeanDefinition的注册

SpringIOC 源码解析 (一)整体查看demoXmlBeanDefinitionReader 的loadBeanDefinitions(Resource resource)方法调用 loadBeanDefinitions(EncodedResource encodedResource) 方法,执行真正的逻辑实现(省略非关键代码)。获取 XML Document 实例。获取 XML Docum...

2019-06-11 23:29:01 354 1

原创 对象生存还是死亡?

       在堆里面存放着 Java 世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。引用计数算法       引用计数算法的思想是:给对象添加一个引用计数器,每当有一个地方引用它...

2019-05-20 00:12:27 176

原创 jvm(二) 关于java对象

对象的创建(1)指针碰撞:将用过的内存和没用的内存各在一边每次分配的时候只需要将指针向空闲内存一方移动一段和内存大小相等区域即可。(2)空闲列表:虚拟机会维护一个空闲的列表,用于记录哪些内存是可以进行分配的,分配时直接从可用内存中直接分配即可。(3)内存空间初始化:虚拟机将分配到的内存空间都初始化为零值(不包括对象头),如果使用了TLAB,这一工作过程也可以提前至TLAB分配时进行,内存空...

2019-05-19 17:47:34 125

原创 JVM(一) 运行时数据区域

总览其中方法区、堆是线程共享的,而虚拟机栈、本地方法栈、程序计数器是线程隔离的。程序计数器程序计数器是一块较小的内存空间,他可以是看做当前线程所执行的字节码得到行号指示器,通过这个计数器的值来选取下一条需要执行的指令、分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。例: 当线程A执行到第2行,CPU切换到线程B的第1行,当线程B执行到第4行,CPU切换到线程A...

2019-05-19 16:12:38 154

原创 RabbitMQ(四) Publish/Subscribe订阅模式

(1)解读:1,一个生产者,多个消费者2,每一个消费者都有自己的一个队列3,消费者没有直接把消息发送到队列,而是发送到了交换机(转发器上面Exchange)4,每个队列都要绑定到交换机上5,生产者发送消息,经过交换机,到达队列,就能实现一个消息被多个消费者消费(2)例子:注册-> 邮件->短信(3)交换机:生产者:public class Send {...

2019-05-10 00:24:50 599

原创 RabbitMQ(三) Work queues工作队列

一个生产者对应多个消费者为什么会出现工作队列?Simple队列是一一对应的,而且我们实际开发,生产者发送消息是毫不费力的,而且一般消费者是跟业务相结合的。消费者接收到消息之后就需要处理,可能需要花费时间,这时候队列就会积压很多消息。默认采用轮询生产者:package com.dada.work;import com.dada.util.ConnectionUtil;impor...

2019-05-10 00:15:13 243

空空如也

空空如也

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

TA关注的人

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