自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Bolg of EQuaker

从小白走向大神之路

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

原创 Kafka入门到精通

buffer.memory它代表缓冲区内存的大小,默认为32M,batch.size代表消息批次的大小,默认为16kb,在BufferPool中,batch.size其实就是代表一个ByteBuffer的大小,因为BufferPool只管理batch.size大小的ByteBuffer,在kafka初始化的时候,就会创建缓冲区(new BufferPool),如下,在创建消息收集器RecordAccumulator的时候,就创建了BufferPool。然而,索引文件是稀疏的,它们相对较小。

2023-06-22 20:02:10 1583

原创 操作系统 - 线程与进程

操作系统 线程与进程

2022-07-03 18:54:19 1200 1

原创 操作系统 - 内核

操作系统 - 内核

2022-07-03 16:49:25 2934

原创 分布式事务与RocketMq 事务消息

写在前面:什么是分布式事务?单数据源的一致性依靠单机事务来保证。多数据源的一致性就要靠分布式事务实现。分布式事务用于在分布式系统中保证不同节点之间的数据一致性。分布式事务的实现有很多种,最具有代表性的是由Oracle Tuxedo系统提出的XA分布式协议。XA协议包含两阶段提交(2PC)和三阶段提交(3PC)两种实现。一,分布式四种解决方案1,两阶段提交(2PC)两阶段提交2PC是分布式事务中最强大的事务类型之一,两段提交就是分两个阶段提交,第一阶段询问各个事务数据源是否准备好,.

2021-01-19 17:44:49 416

原创 字节码操控框架ASM - 初识

写在前面:ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。简单点说,通过 javac 将 .java 文件编译成

2021-01-14 16:06:10 469 1

原创 Mybati源码解读|缓存介绍

写在前面:mybatis原理的话就几个技术点。反射,动态代理,缓存。一,原理分析最原始的mybatis示例代码。mybatis-config.xml:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">&lt

2021-01-05 16:59:39 147

原创 设计模式 | 装饰者模式

写在前面:上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰模式来实现。一,装饰者模式1.1.

2021-01-05 10:58:18 117

原创 设计模式 | 适配器模式

写在前面:在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。一,适配器模式1.1,概念适配器模式(Adapt.

2021-01-05 09:26:25 109

原创 设计模式 | 结构型 - 代理模式与动态代理

写在前面:在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。一,代理模式1.1,概念代理模式的定义:由于某些.

2021-01-04 17:25:05 106

原创 设计模式 | 结构型模式

写在前面:结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。结构型模式分为以下 7 种:代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。 适配器(Adapter)模式:将一个类的接口转换

2021-01-04 15:55:33 139

原创 设计模式 | 原型模式

写在前面:在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。一,原型模式1.1,概念原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装.

2021-01-04 15:23:35 203

原创 设计模式 | 建造者模式

写在前面:在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。以上所有这些产品都是由多个部件构成的,各个部件可以灵活选择,但其创建步骤都大同小异。这类产品的创建无法用前面介绍的工厂模式描述,只有建造者模式可以很好地描述该类产品的

2021-01-03 23:04:00 142

原创 设计模式 | 工厂模式

写在前面:现实生活中,原始社会自给自足(没有工厂),农耕社会小作坊(简单工厂,民间酒坊),工业革命流水线(工厂方法,自产自销),现代产业链代工厂(抽象工厂,富士康)。我们的项目代码同样是由简到繁一步一步迭代而来的,但对于调用者来说,却越来越简单。工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。我

2021-01-03 14:18:57 147

原创 JAVA七大设计模式原则

写在前面:在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。一,开闭原则(Open-Closed Principle, OCP)1.1,定义开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。强调的是用抽象构建框架,用实现扩展细节。开闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的

2021-01-02 17:25:32 311

原创 http协议,tcp/ip以及“三次握手“,“四次挥手“

写在前面:一,Tcp/Ip协议1.1,tcp/ip协议簇TCP/IP不单单指的就是TCP和IP这两个协议,而是指的与其相关的各种协议。比如HTTP, FTP, DNS, TCP, UDP, IP, SNMP等等都属于TCP/IP协议族的范畴。客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西;由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它们之间都是经过由TCP创建的一个从客户端发起,服务器接收的类似连接的通道,..

2020-12-30 19:14:27 456

原创 一文看懂Session和Cookie

写在前面:会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。一,Cookie1.1,Cookie机制:在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时

2020-12-30 12:10:55 279

原创 Redis集群三种方式与持久化

写在前面:redis有三种集群方式:主从复制,哨兵模式和集群。一,集群的三种方式1.1,主从复制主从复制原理:从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;...

2020-12-28 19:32:01 1225

原创 I/O流(3)-NIO

写在前面:NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。NIO和传统IO(一下简称IO)之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读

2020-12-28 17:58:50 196

转载 IO流(2)-底层基础

写在前面:io的种类: 阻塞I/O (Blocking I/O) 非阻塞I/O (Non-Blocking I/O) I/O复用(I/O Multiplexing) 信号驱动的I/O (Signal Driven I/O) 异步I/O (Asynchrnous I/O) 一,内存空间/内核空间的概念我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操心系统的核心是内核,独立..

2020-12-25 11:45:04 300

原创 spring bean加载过程

写在前面:目录概述 总体流程 细节分析 3.1. 转化 BeanName 3.2. 合并 RootBeanDefinition 3.3. 处理循环依赖 3.4. 创建实例 3.5. 注入属性 3.6. 初始化 3.7. 类型转换 总结一,概述Spring 作为 Ioc 框架,实现了依赖注入,由一个中心化的 Bean 工厂来负责各个 Bean 的实例化和依赖管理。各个 Bean 可以不需要关心各自的复杂的创建过程,达到了很好的解耦效果。我们对 Spring 的工作流.

2020-12-24 10:36:45 464

原创 IO流(1)-初识

写在前面:先看机组图片吧。输入输出流是相对内存而言的。一,常识1.1,java有几种流字符流和字节流。字节流继承inputStream和OutputStream,字符流继承自InputSteamReader和OutputStreamWriter。1.2,字符流和字节流有什么区别?要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这个抽象描述..

2020-12-23 23:10:35 123 1

原创 Java并发包之CountDownLatch,Semaphore,CyclicBarrier用法

写在前面:CountDownLatch计数器闭锁是一个能阻塞主线程,让其他线程满足特定条件下主线程再继续执行的线程同步工具。Latch闭锁的意思,是一种同步的工具类。类似于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭着的,不允许任何线程通过,当到达结束状态时,这扇门会打开并允许所有的线程通过。且当门打开了,就永远保持打开状态。CountDowmLatch是一种灵活的闭锁实现,包含一个计数器,该计算器初始化为一个正数,表示需要等待事件的数量。countDown方法递减计数器,表示有一个事件发生

2020-12-21 16:08:53 145

原创 JIT即时编译与编译优化

写在前面:1,java是编译型语言还是编译型语言? 像C、C++ 他们经过一次编译之后直接可以编译成操作系统了解的类型,可以直接执行的,所以他们是编译型的语言。没有经过第二次的处理。而Java不一样,他首先由编译器编译成.class类型的文件,这个是java自己类型的文件 然后在通过虚拟机(JVM)从.class文件中读一行解释执行一行,所以他是解释型的语言,而由于java对于多种不同的操作系统有不同的JVM,所以,Java实现了真正意义上的跨平台!一、你可以说它是编译型的:...

2020-12-19 23:15:36 829 1

原创 JVM的锁(2) - 锁优化

写在前面:逃逸分析

2020-12-18 23:19:59 172 2

原创 JVM的锁(1) - 常见的几种锁

写在前面:锁是多线程并发访问共享资源产生的概念。假如没有多线程,没有并发,那要锁干吗?不纯粹浪费时间吗。就好比,世界上没有小偷,每家每户还需要上锁吗(杠精请走开)?一,synchronizedsynchronized 关键字是一把经典的锁,也是我们平时用得最多的。在 JDK1.6 之前, syncronized 是一把重量级的锁,不过随着 JDK 的升级,也在对它进行不断的优化,如今它变得不那么重了,甚至在某些场景下,它的性能反而优于轻量级锁。在加了 syncronized 关键字的方法、代码块

2020-12-18 19:30:37 2092 1

原创 Mysql索引类型与索引方法

写在前面:乍一看这两个概念可能有点混,先上一张发图。索引类型就是我们平常说的唯一索引,主键索引,组合索引等索引类型。我们都知道索引是一种数据结构,到底我们建的索引应该以什么样的结构存储呢?存储的结构不一样有什么优缺点呢?这就是索引方法的概念。常见的索引方法有BTREE,FULLTEXT, HASH等。一,索引类型MySql常见索引类型有:主键索引、唯一索引、普通索引、全文索引、组合索引1.1,普通索引这种是最常见的。ALTER TABLE `table_na..

2020-12-17 19:09:54 7455 1

原创 几种常见的路由负载均衡算法

写在前面:什么是负载均衡?负载均衡,英文名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡能够平均分配客户请求到服务器阵列,借此提供快速获取重要数据,解决大量并发访问服务问题,这种集群技术可以用最少的投资获得接近于大型主机的性能。负载均衡分为软件负载均衡和硬件负载均衡,

2020-12-16 23:44:39 1833 1

转载 一致性哈希(hash)算法

写在前面:一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。分布式系统中对象与节点的映射关系,传统方案是使用对象的哈希值,对节点个数取模,再映射到相应编号的节点,这种方案在节点个数变动时,绝大多数对象的映射关系会失效而需要迁移;而一致性哈希算法中,当节点个数变动时,映射关系失效的对象非

2020-12-16 20:00:40 352

原创 分布式锁的三种实现方式

写在前面:什么是分布式锁?为什么要使用分布式锁?我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间!后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图:上图可以看到,变量A存在JVM1、JVM2、JV

2020-12-16 13:38:44 1856

原创 JAVA内存模型与JVM内存结构

写在前面:JVM内存结构、Java内存模型和Java对象模型是截然不同的三种概念。JVM内存结构:和Java虚拟机的运行时区域有关。 Java内存模型:和Java的并发编程有关。 Java对象模型:和Java对象在虚拟机中的表现形式有关。Java 内存模型,描述的是多线程允许的行为 JVM 内存结构,描述的是线程运行所设计的内存空间JVM 是什么呢?它屏蔽了底层架构的差异性,是 Java 跨平台的依据,也是每个 Java 程序员必须了解的一部分。在了解这三个对象之前,我们先来看看

2020-12-09 18:45:10 212

原创 Java类加载,垃圾收集

写在前面:Java 的类加载过程可以分为 7 个阶段:载入、验证、准备、解析、初始化、使用和卸载。这 7 个阶段一般是顺序发生的,但在动态绑定的情况下,解析阶段发生在初始化阶段之后。一,载入(Loading)JVM 在该阶段的主要目的是将字节码从不同的数据源(可能是 class 文件、也可能是 jar 包,甚至网络)转化为二进制字节流加载到内存中,并生成一个代表该类的 java.lang.Class 对象。主要分成三个步骤:通过一个类的全限定名获取该类的二进制流 将该二进制流种的静态存储结

2020-12-09 16:50:56 138

原创 数据结构与算法—(java实现)

写在前面:一,冒泡排序 基本思想 对当前还未排好序的范围内的全部数,自左向右对相邻的俩个数依次进行比较和调整,让较大的数下沉,较小的数往上冒。即:每当俩相邻的数比较后发现他们的排序与排序的要求相反时,就将他们交换。每次遍历都可确定一个最大值放到待排数组的末尾,下次遍历,对该最大值以及它之后的元素不再排序。 java代码实现 public static void main(String[] args){ int arr[] = {11,2,3,5,6,8,9.

2020-12-09 14:11:04 177

原创 K8S 进阶 -3 (金丝雀发布、滚动更新、蓝绿部署)

写在前面:金丝雀发布(又称灰度发布、灰度更新):金丝雀发布一般是先发1台机器,或者一个小比例,例如2%的服务器,主要做流量验证用,也称为金丝雀 (Canary) 测试,国内常称灰度测试。以前旷工下矿前,会先放一只金丝雀进去用于探测洞里是否有有毒气体,看金丝雀能否活下来,金丝雀发布由此得名。简单的金丝雀测试一般通过手工测试验证,复杂的金丝雀测试需要比较完善的监控基础设施配合,通过监控指标反馈,观察金丝雀的健康状况,作为后续发布或回退的依据。如果金丝测试通过,则把剩余的 V1 版本全部升级为 V2 版本

2020-12-04 18:30:10 1177 1

原创 K8S 进阶 -2(deployment,replicateSet...)

写在前面:deployment和replicateSet都是管理pod的工具,那么他们是如何工作呢?先上图deploy控制RS,RS控制Pod,这一整套,向外提供稳定可靠的Service

2020-12-03 11:09:56 752

原创 K8S 进阶 -1(pod,deployment,service,namespace...)

写在前面:K8s是什么?k8s是一个编排容器的工具,(服务编排工具,集群化管理工具)其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器损坏,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。

2020-12-01 15:18:45 3321 3

原创 Nginx+Tomcat+Memcached搭建tomcat集群

写在前面:tmcat集群,nginx起到负载均衡的作用,作为一个统一入口,转发请求。由于项目部署再两台服务器上面,所以 就涉及session共享的问题。环境: tomcat8 应用服务器1:172.26.5.189;  应用服务器2: 172.26.5.88;  memcached服务器:172.26.5.74;  Nginx地址:172.26.5.74注:memcached服务和nginx部署在一台服务器上面。看你的服务器资源而定。一、安装t...

2020-11-18 17:15:52 352

原创 K8S 入门 - 搭建nginx服务

写在前面:首先要了解k8s的几个关键词(pod,deployment,service,namespace...).这里大概介绍一下,后面我们需要用到。pod:在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合。可以理解为运行的容器。相关的操作有:# 特定namespace下的所有podsdocker get pods -n "namespace名称"# 所有namespace下的podsdocker get pods -al.

2020-10-19 18:02:17 1971

翻译 K8S 入门 - Centos7.6搭建k8s环境

写在前面:本篇文章,安装大步骤如下: 安装docker-ce 18.09.9(所有机器) 设置k8s环境前置条件(所有机器) 安装k8s v1.16.0 master管理节点 安装k8s v1.16.0 node工作节点 安装flannel(master) 这里有重要的一步,请记住自己master和node之间通信的ip,如我的master的ip为192.168.99.104,node的ip为:192.168.99.105. 请确保使用这两个ip在...

2020-10-19 17:17:46 475

翻译 Java基础篇 - 强引用、弱引用、软引用和虚引用

前言:Java执行GC判断对象是否存活有两种方式其中一种是引用计数。引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。.

2020-07-01 10:39:21 117

原创 java 锁 Lock接口详解

一:java.util.concurrent.locks包下常用的类与接口(lock是jdk 1.5后新增的)  (1)Lock和ReadWriteLock是两大锁的根接口,Lock代表实现类是ReentrantLock(可重入锁),ReadWriteLock(读写锁)的代表实现类是ReentrantReadWriteLock。    Lock 接口支持那些语义不同(重入、公平等)的锁...

2020-04-01 10:18:40 265

空空如也

空空如也

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

TA关注的人

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