自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 JVM 之 G1收集器

G1收集器概述从JDK(1.3)开始,HotSpot团队一直努力朝着高效收集、减少停顿(STW: Stop The World)的方向努力,也贡献了从串行Serial收集器、到并行收集器Parallerl收集器,再到CMS并发收集器,乃至如今的G1在内的一系列优秀的垃圾收集器。G1(Garbage First)垃圾收集器是当今垃圾回收技术最前沿的成果之一。早在JDK7就已加入JVM的收集器大家...

2019-05-07 21:21:17 432

原创 Java 集合面试

1.说一说 HashMap 的实现原理?HashMap 的底层是个 Node 数组(Node<K, V>[] table),在数组的具体索引位置,如果存在多个节点,则可能是以链表或红黑树的形式存在。增加、删除、查找键值对时,定位到哈希桶数组的位置是很关键的一步,源码中是通过下面 3 个操作来完成这一步:1)拿到 key 的 hashCode值;2)将 hashCode...

2019-05-07 21:21:06 172

原创 Spring 面试题

1.Spring拦截器实现了哪些方法?底层原理?// HandlerInterceptor.java/** * 拦截处理器,在 {@link HandlerAdapter#handle(HttpServletRequest, HttpServletResponse, Object)} 执行之前 */default boolean preHandle(HttpServletRequest...

2019-05-07 21:20:49 250

转载 Dubbo 面试题

1.Dubbo是什么?Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成。RPC 指的是远程调用协议,也就是说两个服务器交互数据。2.Dubbo的由来?互联网的快速发展,Web应用程序的规模不断扩大,一般会经历如下四个发展阶段。单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署...

2019-05-04 18:28:34 605

转载 第3章 RocketMQ集群

第3章 RocketMQ集群3.1 RocketMQ集群模式3.1.1 单个Master这是一种风险比较大的集群方式,因为一旦Borker重启或宕机期间,将会导致这个服务不可用,因此是不建议线上环境去使用的。3.1.2 多个Master​ 一个集群全部都是Master,没有Slave,它的优点和缺点如下:优点:配置简单,单个Master宕机或者是重启维护对应用没有什么影响的,在磁盘配置...

2019-04-25 16:04:02 416

转载 第2章 RocketMQ快速入门

第2章 RocketMQ快速入门2.1 消息生产和消费介绍使用RocketMQ可以发送普通消息、顺序消息、事务消息,顺序消息能实现有序消费,事务消息可以解决分布式事务实现数据最终一致。RocketMQ有2种常见的消费模式,分别是DefaultMQPushConsumer和DefaultMQPullConsumer模式,这2种模式字面理解一个是推送消息,一个是拉取消息。这里有个误区,其实无论是...

2019-04-25 15:46:18 448 1

转载 第1章 RocketMQ 介绍与安装

第1章 RocketMQ1.1 MQ介绍​ MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去...

2019-04-25 15:30:31 746 1

转载 为什么新生代内存需要有两个Survivor区

在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区?1、为什么要有Survivor区:先不去想为什么有两个Survivor区,第一个问题是,设置Survivor区的意义在哪里?如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC(因为Major GC一般伴随着Minor GC,也可以看做...

2019-04-01 10:23:19 218

转载 常见JVM参数配置和GC性能优化

一、常见的JVM参数配置:1、垃圾回收统计信息:-XX:+PrintGC 打印GC简要信息-XX:+PrintGCDetails打印GC的详细信息-XX:+PrintGCTimeStamps打印CG发生的时间戳-Xloggc:log/gc.log 指定GC log的位置,以文件输出-XX:+PrintHeapAtGC 每一次GC前和GC后,都打印堆信息。2、堆设置:-Xms...

2019-03-31 21:50:32 293

转载 性能监控与故障处理工具

概述:给一个系统定位问题的时候,知识、经验是关键基础,数据是依据。工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照文件(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。JDK的命令行工具:JDK的命令行工具大多数是对jdk/lib/tools.jar类库的一层薄包装而已,它们的主要功能代码是在tools类库中...

2019-03-31 21:42:19 170

转载 七种垃圾收集器特点、优劣势、及使用场景

HotSpot JVM:上面有7种收集器,分为两块,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。一、Serial(串行GC)收集器:Serial收集器是一个新生代收集器,单线程执行,使用复制算法。它在进行垃圾收集时,必须暂停其他所有的工作线程(用户线程)。对于限定单个CPU的环境来说,由于没有线程交互的开销,可以获得最高的单线程收集效率。是...

2019-03-31 21:37:14 664

转载 垃圾收集与内存分配策略

一、确认对象是否存活:垃圾收集器在对堆进行回收前,首先要做的事情就是确定对象是否还存活,判断对象是否存活主要有两种算法:引用计数算法和可达性分析算法。1、引用计数算法:对象创建时,给对象添加一个引用计数器,每当有一个地方引用到它时,计数器值加1,;引用失效时,计数器值减1;当计数值值为0时,这个对象就是不可能再被引用的。2、可达性分析算法:以“GC Roots”对象为起点,从这些节点向下搜索...

2019-03-31 21:31:20 117

转载 运行时内存数据区域、对象内存分配与访问

一、Java运行时内存中的数据区域: 每一个Java程序启动后,会获得一个JVM的实例,用来管理内存。Java 虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有个字的用途,以及创建和销毁时间。Java虚拟机所管理的内存将会包括以下几个运行时数据区域:1、程序计数器:程序计数器是一块较小的空间,是当前线程执行的字节码的行号指示器,字节码解释器工...

2019-03-31 21:29:39 256

转载 类加载器与双亲委派模型

一、类加载器:类加载器的任务是根据一个类的全限定名来读取此类的二进制字节流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例,在虚拟机默认提供了3种类加载器,引导类加载器(Bootstrap)、扩展类加载器(Extension)、应用类加载器(AppClassLoader),如果有必要还可以加入自己定义的类加载器。对于任意一个类,都需要由加载它的类加载器和类的全限定...

2019-03-31 21:26:34 170

转载 类加载机制、类的加载过程

一、什么是虚拟机的类加载机制:代码在编译后,就会生成java虚拟机能够识别的二进制字节流class文件,class文件中描述的各种信息,都需要加载到虚拟机之中才能运行和使用。虚拟机把类的数据从class文件加载到内存,并对数据进行校检,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,就是类的加载机制。类从加载到虚拟机内存开始,到卸载出内存结束,整个生命周期包括七个阶段:加载-&...

2019-03-31 21:23:11 997

转载 class类文件结构

一、平台无关性:Java的无关性的实现,是由于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。无关性包括:平台无关性以及语言无关性。(1)平台无关性,是指java代码可以运行在不同操作系统的虚拟机上面,因为不同的操作系统都有各自的Java虚拟机,从而实现程序的“一次编写,到处运行”。(2)语言无关性是指Java虚拟机能运行除Java以外的代码,JVM执...

2019-03-31 21:18:50 141

转载 ConcurrentHashMap详解

(本文使用的源码都是基于JDK1.8的)ConcurrentHashMap是conccurrent家族中的一个类,由于它可以高效地支持并发操作,以及被广泛使用,经典的开源框架Spring的底层数据结构就是使用ConcurrentHashMap实现的。与同是线程安全的老大哥HashTable相比,它已经更胜一筹,因此它的锁更加细化,而不是像HashTable一样为几乎每个方法都添加了synchr...

2019-03-31 21:11:47 450

转载 HashMap 详解

概述JDK 1.8对HashMap进行了比较大的优化,底层实现由之前的“数组+链表”改为“数组+链表+红黑树”,本文就HashMap的几个常用的重要方法和JDK 1.8之前的死循环问题展开学习讨论。JDK 1.8的HashMap的数据结构如下图所示,当链表节点较少时仍然是以链表存在,当链表节点较多时(大于8)会转为红黑树。几个点:先了解以下几个点,有利于更好的理解HashMap的源码和阅...

2019-03-31 20:52:52 175

转载 LinkedList 详解

(注:本文内容基于JDK1.6)一、LinkedList概述:LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口链表的实现。基于链表实现的方式使得LinkedList在插入和删除时更优于ArrayList,而随机访问则比ArrayList逊色些。LinkedList实现所有可选的列表操作...

2019-03-29 23:44:56 386

转载 Vector 详解

一、Vector简介:(1)Vector可以实现可增长的对象数组。与数组一样,可以使用整数索引进行访问的组件。不过,Vector的大小是可以增加或者减小的,以便适应创建Vector后进行添加或者删除操作。(2)同时Vector是线程安全的!底层使用的是synchronized进行加锁。public class Vector<E> extends AbstractList&...

2019-03-29 21:08:10 518

转载 ArrayList详解

一、ArrayList概述:ArrayList是实现了List接口的动态数组,所谓动态数组就是他的大小是可变的。实现了所有可选列表操作,并允许包括Null在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小,默认初始容量为10。随着ArrayList中元素的增加,它...

2019-03-29 18:22:15 172

空空如也

空空如也

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

TA关注的人

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