自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Kafka3.x最全面的总结

一、概述  (一)、kafka的定义      1、定义        1)kafka传统的定义:kafka是一个分布式的基于发布/订阅模式的消息队列,主要用于大数据实时处理领域        2)kafka最新的定义:kafka是一个开源的分布式事件流平台(event stream platform),主要用高性能数据管道,流分析,数据集成和关键任务等领域      2、消息队列        目前市面上大部分公司采用的消息队列主要有kafka,activeMQ,rabbitMQ,

2022-02-23 00:13:45 1261

原创 Java 位运算详解

目录一、Java中支持的位运算二、位运算规则三、逻辑运算(一)、与运算(&)  一、运算规则  二、运算流程(二)、或运算(|)  一、运算规则  二、运算流程(三)、异或运算(^)  一、运算规则  二、运算流程(四)、取反运算(~)  一、运算规则  二、运算规则四、位移操作  (一)、左移(<<)  (二)、右移(>>)  (三)、无符号右移(>>>)一、Java中支.

2022-02-18 12:12:16 25921 20

原创 设计模式(Java语言)- 建造者模式

前言在日常的生活中,我们可以经常看到建造者模式的影子。比如,建造房子,那么房子就是一个产品,房子由门,窗,墙,地板等部门组成。然后包工头在建造房子的时候就根据设计好的图纸来建造,但是包工头并不是亲自来建造房子的,而是通过指挥工人来施工。再比如组装电脑,可以根据不同的厂商来组装成不同类型的包括cpu,gpu等都不一样的电脑。建造者模式定义建造者模式,也称之为创建者模式,将一个复杂的对象的构建和它的表示分离,使得同样的构建过程可以创建出不同的表示,这样的设计模式称之为建造者模式。建造者模式将一个复杂的.

2021-04-07 11:21:14 155

原创 java基础系列之ConcurrentHashMap源码分析(基于jdk1.8)

  1、前提  在阅读这篇博客之前,希望你对HashMap已经是有所理解的,否则可以参考这篇博客:jdk1.8源码分析-hashMap;另外你对java的cas操作也是有一定了解的,因为在这个类中大量使用到了cas相关的操作来保证线程安全的。  2、概述  ConcurrentHashMap这个类在java.lang.current包中,这个包中的类都是线程安全的。ConcurrentHashMap底层存储数据的结构与1.8的HashMap是一样的,都是数组+链表(或红黑树)的结构。在日常的开.

2021-04-07 00:13:15 233

原创 基于Java实现红黑树的基本操作

一、前言首先,在阅读文章之前,我希望读者对二叉树有一定的了解,因为红黑树的本质就是一颗二叉树。所以本篇博客中不在将二叉树的增删查的基本操作了,需要了解的同学可以到我之前写的一篇关于二叉树基本操作的博客:https://www.cnblogs.com/rainple/p/9970760.html;有随机数节点组成的二叉树的平均高度为logn,所以正常情况下二叉树查找的时间复杂度为O(logn)。但是,根据二叉树的特性,在最坏的情况下,比如存储的是一个有序的数据的话,那么所以的数据都会形成一条链,此时二叉.

2021-04-07 00:02:07 100

原创 深入理解Java 栈数据结构

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。  从上图是基于数组实现的栈,可以看到,对栈的操作(压栈、出栈)其实都是对栈顶元素的操作,因此压栈和出栈的速度都比较快。栈中元素按照FILO顺序排序的,即先入后出的规则,先放进去的元素最

2021-04-06 23:11:48 421

原创 使用Java快速手写一个基于链表的队列

在上一篇博客【教你如何使用Java手写一个基于数组的队列】中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章。那么,现在就直接进入主题吧。这篇博客主要讲解的是如何使用单链表实现一个简单版的队列。单向链表队列是属于非循环队列,同时队列的长度是不受限制的,也就是说添加数据的速度比拉取数据的速度快时,队列的长度是无限增长的。单链队列其本质就是一个链表,只不过是在获取或添加数据的时候跟普通的链表有所区别,队列在获取数据的同时也将该节点删除,并且每次获取数据都是从表头获取,普通链表

2021-04-06 18:19:10 103

原创 教你如何使用Java手写一个基于数组实现的队列

一、概述队列,又称为伫列(queue),是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。在Java中队列又可以分为两个大类,一种是阻塞队列和非阻塞队列。1、没有实现阻塞接口:1)实现java.util.Queue的LinkList,2)实现java.util.AbstractQueu

2021-04-06 15:33:18 182

原创 Java多线程类FutureTask源码阅读以及浅析

FutureTask是一个具体的实现类,实现了RunnableFuture接口,RunnableFuture分别继承了Runnable和Future接口,因此FutureTask类既可以被线程执行,又可以拿到线程执行的结果。FutrueTask应用于多线程中异步处理并得到处理结果的场景,比如:加入有个流程需要调用远程接口拿到相关数据在本地进行处理,但是这个接口花费时间比较长。如果使用传统的阻塞线程去处理的话,那么就会一直阻塞在调用接口这里,其它的事情都干不了,这样操作显然效率相对较低的。因此,我们可以使用F

2020-09-11 00:20:50 180

原创 Java实现的二叉堆以及堆排序详解

一、前言  二叉堆是一个特殊的堆,其本质是一棵完全二叉树,可用数组来存储数据,如果根节点在数组的下标位置为1,那么当前节点n的左子节点为2n,有子节点在数组中的下标位置为2n+1。二叉堆类型分为最大堆(大顶堆)和最小堆(小顶堆),其分类是根据父节点和子节点的大小来决定的,在二叉堆中父节点总是大于或等于子节点,该二叉堆成为最大堆,相反地称之为最小堆。因此,最大堆父节点键值大于或等于子节点,最小堆父节点键值小于或等于子节点。根据二叉堆的特点,二叉堆可以用来实现排序、有限队列等。堆排序就是利用二叉堆的特性来实现

2020-09-02 18:08:34 196

原创 手写实现java栈结构,并实现简易的计算器(基于后缀算法)

一、定义栈是一种线性表结构,栈结构中有两端,对栈的操作都是对栈的一端进行操作的,那么被操作的一端称为栈顶,另一端则为栈底。对栈的操作其实就是只有两种,分别是入栈(也称为压栈)和出栈(也称为弹栈)。入栈,将新元素压入栈中,那么此时这个栈元素就成为了栈顶元素,栈深度相应的+1。出栈,将栈中的栈顶元素弹出来,此时栈顶的下一个元素就会成为新的栈顶元素,栈深度也相应的-1。根据入栈和出栈的规则,也可以得...

2020-05-04 20:05:40 359

原创 设计模式(Java语言)- 工厂方法模式

前言在介绍工厂方法模式之前,我们需要知道这个设计模式是什么,解决了什么样的问题?在上一篇博客 设计模式(Java语言)- 简单工厂模式 介绍了简单工厂模式,然后总结了简单工厂模式的缺点:1、当新增类型时,我们不得不修改原来的工厂,这样就违背了设计模式6大原则中的 开闭原则。2、简单工厂模式使用了静态方法来创建对象,因此无法被实现或继承,从而导致改工厂类缺少灵活性,不易拓展。3、所有的类的创...

2020-01-22 09:49:51 124

原创 设计模式(Java语言)- 简单工厂模式

简单工厂模式有称为静态工厂模式,属于设计模式中的创建型模式。简单工厂模式通过对外提供一个静态方法来统一为类创建实例。简单工厂模式的目的是实现类与类之间解耦,其次是客户端不需要知道这个对象是如何被穿创建出来的,只需要调用简单工厂模式的方法来统一创建就可以了,从而明确了各个类的职责。一、创建简单工厂模式的步骤  第一步:声明一个抽象类(接口),以及对应的抽象方法,由实现类分别去实现这个方法。第二...

2019-11-19 23:45:53 83

原创 设计模式(Java语言)-单例模式

单例模式,简而言之就是在整个应用程序里面有且仅有一个实例,在程序的任何时候,任何地方获取到的该对象都是同一个对象。单例模式解决了一个全局的类被频繁创建和销毁的,或者每次创建或销毁都需要消耗大量cpu资源的对象的问题。单例模式总的可以分为懒汉模式和饿汉模式,顾名思义,懒汉模式是一个非常懒的汉子,只要你没有使用到它,它就永远不会实例化。饿汉模式的意思就是,汉子非常饥渴,只要在程序的编译阶段就给你分配内...

2019-11-19 00:15:55 86

原创 设计模式-六大原则详解

设计模式它是一种代码编程长期发展的经验和解决某种问题的通用的思想,并且中所周知的一套代码方法和理念。也是我们编写程序的基石。我日常写代码就好比建造房子一样,首先我们需要搭建好架子。然后根据这个架子慢慢的将整个大厦建起来。同样的,我们在编写程序的时候,也需要遵循一定的原则和框架,这样我们写出来的程序才更见健壮,开发起来也会更加省时间,提高代码的可读性,拓展性,重用性,灵活性等,减少开发成本。设计模式...

2019-11-17 10:22:36 241

原创 Java类文件结构,看这篇文章就够了

一、前言代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。经过多年的发展,目前的计算机仍然只能识别0和1,但是由于近10年内虚拟机以及大量建立在虚拟机之上的程序语言如雨后春笋般出现并蓬勃发展,将我们编写的程序编译成二进制本地机器码(Native Code)已不再是唯一的选择,越来越多的程序语言选择了操作系统和机器指令集无关的、平台中立的格式作为程序编译后的...

2019-06-01 03:11:41 369

原创 深入理解java虚拟机之垃圾收集器

前言如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同的版本的虚拟机所提供的垃圾收集器都有可能会有很大的区别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。    相关系列博客:深入理解java虚拟机之java内存区域深入理解java虚拟机之对象真的死了...

2019-05-09 23:56:37 141

原创 Java垃圾收集算法

由于垃圾收集算法的实现涉及大量的程序细节,而且每个平台的虚拟机操作内存的方法又各不相同,因此博客中不过多的讨论算法的实现,只是介绍几种算法的思想以及发展。相关阅读:1、深入理解java虚拟机之java内存区域2、深入理解java虚拟机之对象真的死了吗1、标记-清除算法  标记清除算法分为“标记”和“清除”两个阶段,首先先标记出那些对象需要被回收,在标记完成后会对这些被标记了的对象进行回收...

2019-05-07 17:46:13 84

原创 深入理解java虚拟机之垃圾收集器

Java一个重要的优势就是通过垃圾管理器GC (Garbage Collection)自动管理和回收内存,程序员无需通过调用方法来释放内存。也因此很好多的程序员可能会认为Java程序不会出现内存泄漏的问题,这种想法是不对的,当我们对内存使用不当的时候仍然可能会出现内存泄漏,并且问题相对与c++来说更隐秘,问题的根源排查起来也比较困难。不过,当我们了解了Java虚拟机内存区域,Java垃圾收集器之后...

2019-04-29 18:27:57 139

原创 深入理解java虚拟机之java内存区域

java虚拟机在执行java程序的时候会把它所管理的内存分为多个不同的区域,每个区域都有不同的作用,以及由各自的生命周期,有些随着虚拟机进行的启动而存在,有些区域则依赖于用户线程的启动或结束而建立或销毁等。在《java虚拟机规范(Java SE7版)》中规定,java内存分为以下一种,如图所示:  1、程序计数器  程序计数器(Program Counter Register)是一个内存较小...

2019-04-26 16:40:35 106

空空如也

空空如也

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

TA关注的人

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