6 山楂树男孩

尚未进行身份认证

专注于Java、SpringBoot、SpringCloud、微服务、Docker、Kubernetes、持续集成等领域

等级
博文 509
排名 4k+

HashMap原理

HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入...

2019-05-13 15:37:30

java多线程之wait和notify

1.使用注意事项1、永远在synchronized的函数或对象里使用wait、notify和notifyAll,不然Java虚拟机会生成IllegalMonitorStateException。2、永远在while循环里而不是if语句下使用wait。这样,循环会在线程睡眠前后都检查wait的条件,并在条件实际上并未改变的情况下处理唤醒通知。3、永远在多线程间共享的对象上使用wait。4...

2019-05-13 15:05:59

java8特性之集合stream式操作

一、测试类publicclassStudent{publicStudent(Stringcity){this.city=city;}privateStringcity;publicStringgetCity(){returncity;}publicvoids...

2019-05-05 17:20:45

java8特性之lambda表达式

一、概述只要是只有一个方法的接口就可以使用lambda表达式,这样的接口被称为“函数式接口”。二、例子publicinterfaceTestInter{voidtest();}publicinterfaceTestInter2{voidtest(intparam);}publicinterfaceTestInt...

2019-05-05 17:00:46

java设计模式之策略模式

一、定义算法族和实现publicinterfaceIAttack{publicvoidattack();}publicinterfaceIDisplay{publicvoiddisplay();}publicinterfaceIRun{publicvoidrun();}publicclass...

2019-05-05 10:20:16

logback最佳实践

一、logback介绍Logback是由log4j创始人设计的一个开源日志组件。LogBack被分为3个组件,logback-core,logback-classic和logback-access。1.logback-core:提供了LogBack的核心功能,是另外两个组件的基础。2.logback-classic:实现了Slf4j的API,所以当想配合Slf4j使用时,需要...

2019-04-25 16:06:58

深入理解SimpleChannelInboundHandler

因项目需要,需要了解Netty这款号称"高性能Java网络编程"框架。拿起一本《NettyInAction》开始研究,在第2章的例子中,发现Echo服务端使用的ChannelHandler是ChannelInboundHandlerAdapter,而Echo客户端使用的却是SimpleChannelInboundHandler。一脸茫然,不知所措,只能点进去看各自...

2019-04-24 16:30:28

java多线程之ConcurrentLinkedQueue

一、简介一个基于链接节点的无界线程安全队列。此队列按照FIFO(先进先出)原则对元素进行排序。队列的头部是队列中时间最长的元素。队列的尾部是队列中时间最短的元素。新的元素插入到队列的尾部,队列获取操作从队列头部获得元素。当多个线程共享访问一个公共collection时,ConcurrentLinkedQueue是一个恰当的选择。此队列不允许使用null元素。二、例子...

2019-04-23 10:30:54

java多线程之ThreadLocal

一、ThreadLocal概念ThreadLocal的实例代表了一个线程局部的变量,每条线程都只能看到自己的值,并不会意识到其它的线程中也存在该变量。二、ThreadLocal例子/***使用ThreadLocal是为了使得代码看起来更加优雅*其实可以通过在每个线程里面new对象分别计算,*但是因为这些操作是重复的,而且因为是各自线程内部变量(new对象进行...

2019-04-22 18:05:48

Java多线程之原子操作类

一、原子操作类原子操作类有三大类:(1)基本类型,有AtomicInteger、AtomicLong、AtomicBoolean,(2)数组类型,AtomcixxxArray,(3)引用类型,AtomicReference二、例子importjava.util.concurrent.atomic.AtomicIntegerArray;importjava.util.con...

2019-04-22 15:00:07

springcloud之三步实现eureka服务端

一、maven依赖<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.comp...

2019-04-15 09:56:34

RabbitMQ之topic模式

概述消息发送到topic类型的exchange上时不能随意指定routing_key(一定是指由一系列由点号连接单词的字符串,单词可以是任意的,但一般都会与消息或多或少的有些关联)。Routingkey的长度不能超过255个字节。Bindingkey也一定要是同样的方式。Topic类型的exchange就像一个直接的交换:一个由生产者指定了确定routingkey的消息将会被推送给所...

2019-03-12 11:26:39

Redis缓存击穿,穿透,雪崩等问题,及解决方案

缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈...

2019-02-18 16:32:49

java支持的四种I/O模型

同步、异步、阻塞、非阻塞都是和I/O(输入输出)有关的概念,最简单的文件读取就是I/O操作。而在文件读取这件事儿上,可以有多种方式。本篇会先介绍一下I/O的基本概念,通过一个生活例子来分别解释下这几种I/O模型,以及Java支持的I/O模型。基本概念在解释I/O模型之前,我先说明一下几个操作系统的概念文件描述符fd文件描述符(filedescriptor)是计算机科学中的一个...

2018-12-29 15:21:52

RabbitMQ之基础知识

一、背景    RabbitMQ是一个由erlang开发的AMQP(AdvancedMessageQueue)的开源实现。AMQP的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如COBAR的IIOP,或者是SOAP等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的MSMQ,IBM的WebsphereMQ...

2018-12-28 15:55:28

经典问题之消息队列

面试题1.为什么使用消息队列?2.消息队列有什么优点和缺点?3.Kafka、ActiveMQ、RabbitMQ、RocketMQ都有什么区别,以及适合哪些场景?面试官心理分析其实面试官主要是想看看:第一,你知不知道你们系统里为什么要用消息队列这个东西?不少候选人,说自己项目里用了Redis、MQ,但是其实他并不知道自己为什么要用这个东西。其实说白了,就是为了用而用,或...

2018-12-27 11:16:05

Java创建对象的5种方式

实现packagecom.mikamo.newclass;importjava.io.Serializable;publicclassEmployeeimplementsSerializable{privatestaticfinallongserialVersionUID=-2237531491283515012L;private...

2018-12-18 10:37:47

idea git提交项目,忽略文件或文件夹设置

idea提交的时候会出现一些不需要的文件,尤其是.idea文件夹和.iml文件每次提交都要进行操作,很烦人 添加了gitignore貌似没作用,具体怎么设置过滤?File—-Settings—-Editor–FileTypes 在lgnorefilesandfolders中添加.idea以及*.iml然后点击OK就可以了! (PS:注意添加时加上分号...

2018-12-14 16:11:39

spring boot-拦截器和过滤器

拦截器与过滤器的区别:1、过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。 如下图:  2、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业...

2018-12-13 17:41:45

微服务为什么一定要上Docker

引言早在2013年的时候,docker就已经发行,然而那会还是很少人了解docker。一直到2014年,MartinFowler提出了微服务的概念,两个不相干的技术终于走在了一起,创造了今天的辉煌!近几年来,很多互联网关系开始跟风,构建docker+微服务的架构体系。然而,根据笔者观察发现,有些童鞋在使用过程中,只是会用,而根本不了解为什么使用docker,反正对他们来说,公司让用就用!而...

2018-12-11 10:21:37
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。