自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (1)
  • 收藏
  • 关注

原创 java设计模式之责任链模式

java设计模式

2022-02-09 11:26:08 584

原创 java生产者消费者模型

前言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。基于synchronized配合wait()和notify()方法的实现这也是最简单最基础的实现,缓冲区满和为空时都调用wait()方法等待,当生产者生产了一个产品或者消费者消费了一个产品之后会唤醒所有线程。public class Test...

2021-12-14 17:07:15 4994

原创 ReentrantLock及Condition

ReentrantLockReentrantLock,一个可重入的互斥锁,它具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。Condition介绍Condition是一个多线程间协调通信的工具类,使得某个或者某些线程一起等待某个条件(Condition),只有当该条件具备( signal 或者 signalAll方法被带调用)时 ,这些等待线程才会被唤醒,从而重新争夺锁。...

2021-12-14 14:45:34 945

原创 java并发队列

在并发队列上,JDK提供了两套实现: 1. 以ConcurrentLinkedQueue为代表的高性能队列非阻塞。 2.以BlockingQueue接口为代表的阻塞队列。无论哪种都继承自Queue。阻塞队列与非阻塞队列 阻塞队列与非阻塞队列的区别在于: 1. 当阻塞队列是空的时,从队列中获取元素的操作将会被阻塞,试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。...

2021-12-13 17:14:26 2112

原创 ThreadLocal 子类及实现原理

我们在介绍threadLocal子类及实现原理之前,先介绍一下threadLocal类。ThreadLocal类ThreadLocal原理ThreadLocal 是为了解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序,ThreadLocal 并不是一个Thread,而是 Thread 的局部变量。ThreadLocal 用于保存某个线程共享变量:对于同一个 static ThreadLocal,其为...

2021-11-06 15:20:00 597

原创 java8新特性介绍

Lambda表达式 Lambda表达式(也称为闭包)是Java 8中最大和最令人期待的语言改变。它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理:函数式开发者非常熟悉这些概念。很多JVM平台上的语言(Groovy、Scala等)从诞生之日就支持Lambda表达式,但是在Java8之前,很多开发者没有选择,只能使用匿名内部类代替Lambda表达式。 测试代码:package com.redistext.newfeatures;...

2021-10-29 11:43:29 258

原创 ArrayList源码分析

ArrayList和HashMap可以说是我在平时开发过程中用到的最多的两个集合类了,前面对HashMap的源码进行分析过后,再来看ArrayList的源码,相对来说就轻松很多了。ArrayList的特点1.ArrayList本质上就是一个可变大小的数组。 2.ArrayList允许存放null在内的任何元素,且可以存放重复的元素,所以也可以插入存多个null。 3.是一个有序容器,保持了每个元素的插入顺序。 ...

2021-10-28 21:52:41 307

原创 java自定义注解

注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。声明一个注解要用到的东西 修饰符:访问修饰符必须为public,不写默认为pubic关键字:关键字为@interface注解名称:注解名称为自定义注解的名称,使用时还会用到注解类型元素:注解类型元素是注解中内容...

2021-10-27 21:47:44 1506

原创 Object类的常用方法

Object类是所有类的父类,任何类都默认继承Object,位于java.lang包中,Object类主要实现了哪些方法呢?toString方法toString方法可以将任何一个对象转换成字符串返回,返回值的生成算法为:getClass().getName() + '@' + Integer.toHexString(hashCode())。不过,一般子类都会重写该方法。equals方法Object类中的equals方法,用来比较两个引用的虚地址...

2021-10-27 17:30:18 6410

转载 equals和==的区别

“equals” 和 “==” 这俩在我们平时的开发过程中,几乎随时都会出现,一般来说,我们都知道对于String类型字符串的比较,使用equals()方法,而对于比如八大基本数据类型(int、double等)的值比较用 == ,那么这两个具体是啥区别呢?它们到底比较的是什么呢?“==”的作用基本类型:比较的就是值是否相同。引用类型:比较的就是地址值是否相同。基本类型说明: 就是java中的八大基本数据类型(byte,shor...

2021-10-26 22:58:31 240

原创 Serializable 接口的作用

我们在平时的开发过程中,经常发现很多实体类都实现了serializable这个接口,有些又没有实现,好像实现与否都没有太大差别,只知道serializable这个接口是实现序列化的,那么什么是序列化呢?有什么作用呢?这些都不是很清楚。什么是序列化...

2021-10-26 10:24:28 746

转载 Zookeeper入门介绍

Zookeeper是什么官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。简单来说,zookeeper=文件系统+监听通知机制。1.文件系统Zookeeper维护一个类似文件系统的数据结构:每个子目录项如 NameService 都被称作为 ...

2021-10-20 14:40:42 282

原创 MySQL存储引擎、索引及SQL优化

MySQL存储引擎在MySQL中创建表时可以选择存储引擎。有几种不同的存储引擎,但最常用的是MyISAM和InnoDB,它们都是不同MySQL版本的默认存储引擎如果在创建表时没有指定存储引擎,那么将使用MySQL版本的默认引擎在5.5.5之前的MySQL版本中,MyISAM是默认值,但是在5.5.5之后的版本中,InnoDB是默认值。 区别:InnoDB较新,MyISAM较老 InnoDB更复杂,而MyISAM更简单 Inn...

2021-10-12 17:33:59 269

转载 JVM类加载机制

在开始说明JVM的类加载机制之前,可以先看一道面试题目class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} class Father extends Grandpa{ static { System.out.println("爸爸在静态代码块"); } public static int factor = 25; ...

2021-10-11 21:01:39 130

转载 JVM内存结构

Java 虚拟机的内存结构并不是官方的说法,在《Java 虚拟机规范》中用的是「运行时数据区」这个术语。但很多时候这个名词并不是很形象,再加上日积月累的习惯,我们都习惯用虚拟机内存结构这个说法了。根据《Java 虚拟机规范》中的说法,Java 虚拟机的内存结构可以分为公有和私有两部分。公有指的是所有线程都共享的部分,指的是 Java 堆、方法区、常量池。私有指的是每个线程的私有数据,包括:PC寄存器、Java 虚拟机栈、本地方法栈。堆(Heap):...

2021-10-11 19:45:42 209

转载 字节码文件结构

Java 虚拟机使用字节码实现了跨平台的愿景,无论什么系统,我们都可以使用 Java 虚拟机解释执行字节码文件。但其实字节码是有一套规范的,而规定字节码格式的就是《Java 虚拟机规范》。《Java 虚拟机规范》规定了 Java 虚拟机结构、Class 类文件结构、字节码指令等内容。其中类文件结构是有必要了解的一个内容。字节码文件结构是一组以 8 位为最小基础的十六进制数据流, 各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙, 这样可以使得class文件非常...

2021-10-11 16:58:21 1372

转载 什么是java虚拟机

我们知道在 Windows 系统上一个软件安装包是 exe 后缀的,而这个安装包在苹果的 Mac OSX 系统上是无法安装的。类似地,Mac OSX 系统上软件安装包则是 dmg 后缀,同样无法在 Windows 系统上安装。为什么不同系统上的软件无法安装,这是因为操作系统底层的实现是不一样的。对于 Windows 系统来说,exe 后缀的软件代码最终编译成 Windows 系统能识别的机器码。而 Mac OSX 系统来说,dmg 后缀的软件代码最终编译成 Mac OSX...

2021-10-11 15:23:01 362

原创 SpringCloud之Resilience4J

平时在项目上因为QPS较小,所以接口都没有考虑过限流及熔断处理,现在公司要求接口必须做熔断和限流处理,而且公司选择的框架是Resilience4j。以前自己了解的做熔断限流处理的框架有Hystrix和Sentinel,Resilience4j倒是第一次听说,因此特地学习学习。简介随着微服务的流行,熔断作为其中一项很重要的技术也广为人知。当微服务的运行质量低于某个临界值时,启动熔断机制,暂停微服务调用一段时间,以保障后端的微服务不会因为持续过负荷而宕机。...

2021-08-02 21:11:14 3322

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

为什么要使用分布式锁在之前的单体架构中 , 面对线程安全的问题可能使用 Java 提供的 ReentrantLcok 或 Synchronized 即可。但是随着业务不断发展,这时单机满足不了,于是采用分布式部署的方式。虽然一定程度解决了性能的瓶颈 , 但是也带来了许多分布式相关的问题。就分布式锁而言,看如下图: 单体应用部署结构: 分布式部署架构: 如上如所示,可以看出为什么需要分布式锁:在电商业务采用分...

2021-07-27 17:27:58 3275 2

原创 MySQL日志binLog、undoLog和redoLog

背景 日志是mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。作为开发,我们重点需要关注的是二进制日志(bin log)和事务日志(包括redo log和undo log)。 注意:在数据库系统中,既有存放数据的文件,也有存放日志的文件。redo logredo log基本概念当数据库对数据做修改的时候,需要把数据页从磁盘读到bu...

2021-07-27 11:38:03 308

原创 分布式事务

概述随着互联网的快速发展,软件系统由原来的单体应用转变为分布式应用。分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务,例如用户注册送积分事务、创建订单减库存事务,银行转账事务等都是分布式事务。什么是分布式事务大多数场景下,我们的应用都只需要操作单一的数据库,这种情况下的事务称之为本地事务(Local Transaction)。本地事...

2021-07-26 17:26:03 136

原创 分布式系统CAP定理

我们在平时的项目开发过程中经常会听到分布式、集群这两个概念,那么到底什么是分布式,什么是集群呢?分布式系统定义分布式系统是一个硬件或软件组件分布在不通的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。通俗的理解,分布式系统就是一个业务拆分成多个子业务,分布在不同的服务器节点,共同构成的系统为分布式系统。这些服务器节点在空间部署上是可以随意分布的,可能在不同的机柜中,不同的机房中,或者不同的城市中。类比在家办公,一个小...

2021-07-26 14:28:36 271

转载 Spring事务

什么是事务 数据库操作的最小工作单元。通俗点说就是为了达到某个目的而做的一系列操作要么全部成功(事务提交),要么全部失败(事务回滚)。事务的四大特性原子性(Atomicity):事务包含的所有操作要么全部成功要么全部失败。一致性(Consistency):事务必须从一个一致性状态变换到另一个一致性状态。一致性状态的含义是数据库中的数据应满足完整性约束。一致性是对数据可见性的约束,保证在一个事务中的多次操作的数据中间状态对其他事务不可见的。因为...

2021-07-22 19:26:17 219

转载 Spring Bean的生命周期

Spring Bean的生命周期,老生常谈的面试高频问题了。这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!首先粗略来看,bean的生命周期主要分为以下4个步骤: 1. 实例化 Instantiation 2.属性赋值 Populate 3.初始化 Initialization 4.销毁 D...

2021-07-22 15:26:32 160

原创 Spring循环依赖问题

什么是Spring的循环依赖?循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图:什么情况下会出现循环依赖的问题? 1.构造器循环依赖 2.field属性注入循环依赖第一种情况,如下示例:@Componentpublic class ClassA { private ClassB classB; public ClassA(Cl...

2021-07-22 11:41:03 688

原创 AQS浅析及其实现类

AQS(AbstractQueuedSynchronizer),抽象队列同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它。 AQS的核心思想是如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态;如果被请求的共享资源被占用,就需要一定的阻塞等待唤醒机制来保证锁分配,这个机制AQS是用CLH队列的变体实现的,即将暂时获取不到锁的线程加入到队列中。CLH(Craig,Landin,a...

2021-07-21 17:08:28 772

转载 GET和POST的区别

HTTP的请求报文GET 和 POST 其实都是 HTTP 的请求方法。除了这 2 个请求方法之外,HTTP 还有 HEAD、PUT、DELETE、TRACE、CONNECT、OPTIONS 这 6 个请求方法。所以HTTP 的请求方法共计有 8 种。HTTP 的请求报文结构可以看到 HTTP 的请求报文由三部分构成:请求行:由请求方法(Method)、URL 字段和 HTTP 的协议版本组成,注意其中的空格、回车符和换行符均不可省略,所以我们的请求...

2021-07-20 21:05:29 222

原创 SpringCloud路由网关

为什么要使用微服务网关不同的微服务一般会有不同的网络地址(IP和port不一样),而外部客户端(例如手机APP)可能需要调用多个服务的接口才能完成一个业务需求。例如一个电影购票的手机APP,可能会调用多个微服务的接口,才能完成一次购票的业务流程。如果让客户端直接与各个微服务通信,会有以下的问题: 1. 客户端会多次请求不同的微服务,增加了客户端的复杂性。 2. 存在跨域请求,在一定场景下处理相对复杂。 3. 认证...

2021-07-20 14:16:53 980

原创 SpringCloud服务熔断与降级

什么是雪崩效应在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。什么是Hystrix Hystrix是一个用于处理分布式系统的延迟和...

2021-07-19 22:17:07 4112

原创 SpringCloud服务注册

什么是服务注册中心服务注册中心是服务实现服务化管理的核心组件,只要用来存储服务信息等。服务注册中心的作用就是服务的注册和服务的发现。例如: 当下我给张三打电话,那我就需要在通讯录中按照名字找到张三,然后就可以找到他的手机号拨打电话---------服务发现。 李四办了新的手机号并把手机号存进通讯录,后面我就可以通过通讯录找到李四了--------服务注册。 通讯线就是服务注册中心。常见的注册中心...

2021-07-16 16:00:16 1472

原创 SpringCloud

Spring CloudSpring Cloud是一个服务治理平台(微服务框架),提供了一些服务框架。包含:服务注册与发现、配置中心、消息中心、负载均衡、数据监控等。Spring Cloud对微服务基础框架Netflix的多个开源组件进行了封装,同时又实现了和云端平台及Spring Boot框架的集成。常用组件:Spring Cloud Netflix Eureka:服务注册中心。Spring Cloud Netflix Ribbon:客户端负载均衡。Spring Cloud N

2021-07-16 12:20:58 159

转载 java设计模式之策略模式

策略模式概述:策略模式(Pattern:Strategy)属于行为型模型,是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。策略模式包含的角色及其职责: 1.上下文(环境)角色[Context]:持有一个策略类的引用,最终给客户端调用。内部维护一个Strategy的实例,需要使用ConcreteStrategy提供的算法,负责动态设置运行时Strategy具体的实现算法,负责跟Strategy之间...

2021-07-13 16:01:18 102

原创 java设计模式之观察者模式

概述观察者模式又称为发布/订阅(Publish/Subscribe)模式观察者设计模式涉及到两种角色:主题(Subject)和观察者(Observer)Subject模块Subjec模块有3个主要操作addObserver():注册添加观察者(申请订阅)deleteObserver():删除观察者(取消订阅)notifyObserver():主题状态发生变化时通知所有的观察者对象Observer模块...

2021-07-13 14:46:11 481

原创 SpringBoot多数据源配置

说SpringBoot的多数据源配置之前,我们先了解下DataSource。在java世界里操作数据库有很多方式,在众多方式中除了JDBC外还有DataSource对象。DataSource可以看作数据源,它封装了数据库参数,连接数据库,程序中操作DataSource对象即可对数据库进行增删改查操作。不同方式中使用的DataSource对象不同。列举如下:dbcp框架中的DataSource类是:org.apache...

2021-07-08 20:23:44 9346

转载 RabbitMQ学习笔记

RabbitMQ简介:AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。Rabbi...

2021-07-07 00:03:52 662

原创 ActiveMQ学习笔记

目前ActiveMQ好像用的越来越少了,感觉已经快逐渐被淘汰了,不过在项目中还是用到过几次,所以这儿简单的整理了下。什么是AMQ?ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。 单机ActiveMQ的吞吐量在2000以上。AcitveMQ的作用、原理:...

2021-07-06 22:03:10 432

原创 Spring动态代理

学习Spring,那必须学习AOP,但是学习AOP之前,必须了解动态代理。因为Spring的AOP就是基于动态代理来实现的。什么是代理?指为一个目标对象提供一个代理对象, 并由代理对象控制对目标对象的引用. 使用代理对象, 是为了在不修改目标对象的基础上, 增强目标对象的业务逻辑.静态代理:静态代理的特点是, 为每一个业务增强都提供一个代理类, 由代理类来创建代理对象。 实例代码如下:动态代理:...

2021-07-06 16:18:31 140

转载 TCP协议学习笔记

在学习Netty的心跳机制过程中,发现提及到了TCP长连接相关的知识,因此又专门对TCP协议进行了简单的学习。 提到TCP就会想到UDP,那么我们来看看TCP和UDP:TCP协议:传输控制协议。它提供的是面向连接、可靠的字节流服务。当客户和服务器之间交换数据之前,必须首先在双方建立一个TCP连接之后才能传输数据。TCP提供超时重发、丢弃重复数据、检验数据和流量控制等功能,保证数据能从一段传到另一端。UDP:用户数据报协议。是无连接、不可...

2021-06-30 20:50:46 117

转载 Reactor模型学习笔记

学习Netty的过程中,说Netty的线程模型就是基于Reactor模型的一个实现。因此,这里对Reactor模型进行了简单的学习,并进行了一些整理。在web服务中,处理web请求通常有两种体系结构,分别为:thread-based architecture(基于线程的架构)、event-driven architecture(事件驱动模型)。thread-based architecture(基于线程的架构):多线程并发模式:...

2021-06-30 16:47:50 187

转载 零拷贝技术解析

开始接触零拷贝是在java NIO和Netty中听到的零拷贝,但是这两个说的零拷贝主要是数据操作的优化,而在操作系统层面也实现了很多零拷贝技术,这里的零拷贝指的是OS层面的零拷贝技术解析。前言磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。DMA(Direc...

2021-06-30 15:55:10 133

eureka-demo.zip

eureka-demo.zip

2021-07-16

空空如也

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

TA关注的人

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