自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 说说AQS的基本原理

AQS是Abstract Queued Synchronizer的简称。AQS提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架。

2022-10-07 12:35:20 536 1

原创 说说synchronized关键字的底层原理

synchronized关键字是java语言进行多线程编程,非常常用的关键字。使用了synchronized关键字后,在底层编译后的JVM指令中,会有monitorenter和monitorexit两个关键字。这两条指令是成对出现的。

2022-10-03 17:08:29 983

原创 深入理解HashMap底层数据结构

HashMap作为开发中常用的数据结构,也是面试中经常被问的知识点,因此作为开发者应该尽可能多的理解其底层的数据结构。

2022-10-02 15:04:32 1094

原创 深入理解Java内存模型JMM与volatile关键字

但是这种设计也带来一个问题,由于线程在执行到store这一步时,才开始加锁,当两个线程同时修改共享变量值,只有一个线程能够抢到锁进行操作,操作完成后,另一个线程通过总线嗅探机制,感知到数据变化,让自己缓存中的数据失效,需要重新read最新的变量值,从而使得上一次操作作废,比较典型的例子是计数器。早期的方案是总线加锁。该协议规定,当多个CPU从主内存读取同一个数据到各自缓存,当其中某个CPU修改了缓存里的数据,将马上同步回主内存,其它CPU通过总线嗅探机制可以感知到数据的变化从而将自己缓存内的数据失效。

2022-09-05 15:52:33 375

原创 Java虚拟机底层原理分析

Class文件中的常量池中存有大量的符号引用,字节码中的方法调用指令就是以常量池里指向方法的符号引用作为参数的,这些符号的一部分会在类加载阶段或者第一次使用的时候被转化为直接引用,这种转化被称为静态解析。因为方法的执行对应着栈帧的入栈出栈,所以将所属方法的引用存放在栈帧中。3.默认情况下,对应一个64位的服务端JVM来说,其默认的-XX:MetaspaceSize值为21MB,这就是初始的高水位线,一旦元空间的大小触及这个高水位线,就会触发Full GC并会卸载没有用的类,然后高水位线的值将会被重置。

2022-09-05 15:09:47 942

原创 MySQL索引底层数据结构深入剖析

MySQL索引底层数据结构深入剖析

2022-08-23 18:58:54 934

原创 JVM垃圾收集器总结

JVM的垃圾收集算法,最终是要由垃圾收集器实现的。不同厂商、不同版本的虚拟机的垃圾收集器实现差别很大。本文只介绍HotSpot中的垃圾收集器

2022-08-15 11:20:25 1394

原创 MySQL分组(group by)查询优化

MySQL分组(group by)查询优化

2022-08-11 18:56:32 2752

原创 MySQL排序优化

MySQL有两种方式生成有序的结果:1.通过排序操作;2.按索引顺序扫描。

2022-08-11 18:12:17 2562

原创 MySQL索引在关联查询中的作用

MySQL索引在关联查询中的作用

2022-08-11 16:59:58 1135

原创 RocketMQ事务消息机制

RocketMQ提供了事务消息,通过事务消息就能达到分布式事务的最终一致,从而实现了可靠消息服务。一、事务消息的实现步骤事务消息发送步骤:1. 发送方将半事务消息发送至RocketMQ服务端。2. RocketMQ服务端将消息持久化之后,向发送方返回Ack确认消息已经发送成功。由于消息为半事务消息,在未收到生产者对该消息的二次确认前,此消息被标记成“暂不能投递”状态。3. 发送方开始执行本地事务逻辑。4. 发送方根据本地事务执行结果向服务端提交二次确认(Commit 或是 Rollbac

2022-04-30 20:13:58 4496 2

原创 Springboot启动流程

一、SpringBoot启动的时候,会构造一个SpringApplication的实例,构造SpringApplication的时候会进行初始化的工作,初始化的时候会做以下几件事:1、把参数sources设置到SpringApplication属性中,这个sources可以是任何类型的参数.2、判断是否是web程序,并设置到webEnvironment的boolean属性中.3、创建并初始化ApplicationInitializer,设置到initializers属性中 。4、创建并初始化App

2022-04-30 16:35:35 61190 11

原创 K8S基础组件及高可用实现方式

一、K8S主要组件Master节点:kube-apiserver: k8s集群的统一入口,各个组件信息交互都要通过它。以HTTP API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。kube-controller-manager:处理集群中常规后台任务,维持副本期望数目。一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。kube-scheduler:k8s集群的调度器,根据调度算法为Pod选择Node工作节点。

2022-04-30 16:10:51 3423

原创 Spring如何解决循环依赖

在关于Spring的面试中,我们经常会被问到一个问题:Spring是如何解决循环依赖的问题的。一、问题的提出spring循环依赖包括:构造器循环依赖、field属性注入循环依赖1、构造器循环依赖@Servicepublic class A { public A(B b) { }}@Servicepublic class B { public B(C c) { }}@Servicepublic class C { publi

2021-09-06 18:55:55 407

原创 Redis6 引入多线程是怎么回事

众所周知,Redis 之前的版本一直都是典型的单线程模型(注意:这里不是指 Redis 单实例中只有一个线程,而是表示核心操作模块由单线程完成,当然另外还有一些辅助线程,比如 LRU的淘汰过程等)。然而最新的Redis 6 却引入了多线程。上一篇文章已经提到, Redis 单线程处理有着很快的速度,那为什么还要引入多线程呢?先看看单线程的瓶颈在什么地方?在 Redis 中,单线程的性能瓶颈主要在网络IO操作上。也就是在读写网络 read/write 系统调用执行期间会占用大部分 CPU 时间。比如对一些

2021-09-06 15:33:24 289

原创 Redis单线程为什么快

众所周知,Redis 之前的版本一直都是典型的单线程模型(注意:这里不是指 Redis 单实例中只有一个线程,而是表示核心操作模块由单线程完成,当然另外还有一些辅助线程,比如 LRU的淘汰过程等)。一个经常问到的问题,为什么Redis单线程为什么还那么快呢?要先从Reactor模式说起。一、Reactor模型Reactor模型,也叫反应器模型,是一种多线程模型。我们先来看看多线程模型的发展历史。1、传统阻塞IO模型在传统阻塞IO模型中,由一个独立的 Acceptor 线程来监听客户端的连接,

2021-09-06 15:18:26 525 2

原创 Shardingsphere踩坑

项目中使用shardingsphere作为数据库中间件,之前用过4.x,发现现在最新版本是5.x,决定尝个鲜。按照官方文档配置后一直报以下错误。Inline sharding algorithm expression cannot be null配置完全是按照官方文档配的。网上搜索半天也没有类似的文章,看来没法偷懒了,只能自己翻源码了!经过读源码,找到shardingsphere读取配置的代码,是在shardingsphere-sharding-spring-boot-starter

2021-07-16 21:22:59 5679 7

原创 ElasticSearch内部工作原理及生命周期

在讨论ElasticSearch内部工作原理之前,我们先抛出几个问题:1.新增加文档是否需要重建整个索引?2.为什么ES的搜索是近实时的(1秒后被搜到)?3.ES如何保证断电时,不丢失数据?4.为什么删除了文档,不会立刻释放空间?下面进入正题,我们先理解以下一些概念一.倒排索引不可变性倒排索引采用Immutable Design,一旦生成不可更改。不可变性带来以下好处:1.无需考虑并发写文件问题,避免了锁机制带来的性能问题。2.一旦读入内核的文件系统缓存,便可以留在那里。只要有足够空

2021-03-25 21:15:26 306

原创 ElasticSearch核心概念

ElasticSearch简称ES,是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎,能够达到实时搜索,稳定,可靠,快速,安装使用方便。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎。本文介绍Elasticsearch的一些核心概念。一.文档(Document)1....

2021-03-24 21:05:50 374

原创 Hystrix 限流、超时、熔断和降级

在高并发访问下,系统所依赖的服务的稳定性对系统的影响非常大,依赖有很多不可控的因素,比如网络连接变慢,资源突然繁忙,暂时不可用,服务脱机等。我们要构建稳定、可靠的分布式系统,就必须要有这样一套容错方法。 Hystrix是Netflix开源的一款容错框架,包含常用的容错方法:线程隔离、信号量隔离、降级策略、熔断技术。一、限流 在高并发访问下,由于系统资源有限,必须对访问量进行控制。Hystrix提供了限流功能,在springcloud架构的系统中,可以在网关启用H...

2021-03-16 14:01:01 8802

原创 Kubernetes中Pod的生命周期

Kubernetes (希腊语"舵手" 或 "飞行员",通常称为K8s,K8s是将8个字母“ubernete”替换为“8”的缩写) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。今天讲一讲Kubernetes的核心组件Pod的生命周期。k8s中pod的生命周期大致可分为以下几个阶段:1.当kubectl创建指令下达到api接口,被调度到kubelet上,kubelet首先调用CRI完成容器环境的初始化。2.开始进入pod的生命周期,pod开始创建。3.

2021-02-16 22:05:10 217

原创 Shiro的一些知识点记录

1.subject.isAuthenticated(),本质上会根据是否读取到session判断是否登录,对分布式系统的改造,可以通过sessionDao去缓存中读取。可以从DefaultWebSecurityManager->DefaultWebSubjectFactory.createSubject->DefaultSubjectContext.resolveAuthenticated一步步跟下去。2.默认情况下,如使用 ShiroFilterFactoryBean 创建 shiro

2021-02-16 20:28:39 141

原创 RabbitMQ集群的概念及优化

本文说的RabbitMQ集群,指的是镜像队列集群,搭建步骤网上很多,就不在赘述了,这里主要讲一下概念及优化。1.重要参数disk_free_limit:磁盘低水位线,若磁盘容量低于指定值则停止接收数据。存储模式为硬盘时有意义。可以指定绝对值,也可以设置相对于机器中的RAM的可用空间限制。默认值为1.0,表示将磁盘可用空间限制设置为与机器上的RAM数量相同。注意设置低于1.0的值很危险,应谨慎使用。vm_memory_high_watermark:内存低水位线,若磁盘容量低于指定值则开...

2020-09-27 21:03:23 410

原创 RabbitMQ高级特性

本文介绍一些RabbitMQ的高级特性。一.confirm消息确认消息确认,是指生产者投递消息后,如果broker收到消息,则会给生产者一个应答。生产者通过接收应答,来确定是否发送成功,这种机制也是消息可靠性投递的底层机制。这个过程是异步的,生产者将消息发送出去后就不用管了,内部会有一个confirm listener负责监听确认消息。实现confirm消息确认步骤:第一步在channel上开启确认模式:channel.confirmSelect()第二步,在channel上添加监听:

2020-09-21 22:08:44 232

原创 RabbitMQ及AMQP基本概念

Rabbitmq是目前使用非常广泛的消息中间件,它是基于AMQP(Advanced Message Queue Protocol 高级消息队列协议)协议实现的。AMQP是具有现代特征的二进制协议,是一个提供统一消息服务的应用层标准高层消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。一.虚拟主机 virtual host 虚拟主机是一个虚拟的地址,用于进行逻辑隔离,是最上层的消息路由。一个 virtual host里面可以有若干个Exchange和Queue...

2020-09-13 21:14:00 433

原创 简述Spring MVC的异常处理机制

Spring MVC 是通过 HandlerExceptionResolver 处理程序的异常,包括 Handler 映射、数据绑定以及目标方法执行时发生的异常。HandlerExceptionResolver 是一个接口,SpringMVC 中提供了HandlerExceptionResolver 的一系列实现类,比如ExceptionHandlerExceptionResolver、ResponseStatusExceptionResolver、DefaultHandlerExceptionRes.

2020-06-27 12:01:56 141

原创 简述Spring Cloud Gateway过滤器

Spring Cloud Gateway是Spring Cloud家族的第二代网关。其主要功能是通过过滤器来实现的。根据过滤器的作用范围划分为GatewayFilter和GlobalFilter,二者区别如下:GatewayFilter : 需要通过spring.cloud.routes.filters 配置在具体路由下,只作用在当前路由上或通过spring.cloud.default-filters配置在全局,作用在所有路由上。GlobalFilter : 全局过滤器,不需要在配置文件中配置,作用

2020-06-27 11:43:07 211

原创 Spring MVC运行流程

一. 运行流程图二. 运行流程描述1. 客户端向服务器发送请求,请求首先被Spring MVC前端控制Servelt DispatcherServlet捕获。2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。根据url-pattern定义,判断Spring MVC中是否存在对应的映射。如果不存在,报404错误,控制台打印No mappi...

2020-05-03 21:41:58 178

原创 Spring MVC的数据绑定

Spring MVC是Spring提供的基于 MVC 设计理念的优秀的Web 框架。Spring3.0 后全面超越 Struts2,成为目前最主流的 MVC 框架。本文介绍一下Spring MVC的数据绑定功能。一.数据绑定流程Spring MVC 通过反射机制对目标处理方法进行解析,将请求消息绑定到处理方法的入参中。数据绑定的核心部件是DataBinder,运行机制如下:1. Sprin...

2020-05-03 14:22:47 293

原创 大并发网站Nginx服务器优化

对于大并发网站可以从减少请求和提升性能两个角度考虑减少请求可以从以下方面考虑:1.从开发角度,合并css, 背景图片, 减少mysql查询等。2.利用nginx的expires、浏览器缓存等,减少查询。3.利用cdn来响应请求,从而降低到服务器请求。做了尽可能降低请求的优化后,最终剩下的,就是不可避免的请求了。所以,到了这一步就不要再考虑减少请求这个方向了,而是思考如何更好的响应高并发...

2020-04-25 18:25:34 215

原创 Nginx技术要点总结

Nginx("engine x") 是目前使用最广泛的web服务器,同时也是常用的反向代理服务器。本文对Nginx基础功能做一些总结,希望自己加深理解的同时,对需要的朋友有所帮助。一.安装Nginx1.nginx依赖于pcre库,要先安装pcre,执行以下命令 yum install pcre pcre-devel2.下载nginx源码包,并解压,执行以下命令 ....

2020-04-25 13:51:21 252

原创 一文理解数据库索引

数据库索引虽然有多种,但一般说的就是B-tree索引,B-tree索引可抽象理解为”排好序的快速查找结构”。既然是排好序的,当然就非常利于顺序读,而且有利于范围查询以及排序。本文说的索引就特指B-tree索引。一.复合索引索引使用常见的一个误区是,在where条件用到的列上都加上索引。例: where cat_id=3 and price>100 ; //查询第3个栏目,100元以上的...

2019-02-04 16:50:34 248

原创 SQL语句的优化

本文介绍一些sql语句优化的一些知识和经验。IO永远是数据库最容易瓶颈的地方,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑。除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运...

2019-01-27 16:46:10 206

原创 表设计的优化与列类型选择

一.表设计的优化1.定长与变长分离比如如 int,占4个字节,char(4) 占4个字符长度,也是定长,即每一单元值占的字节是固定的。核心且常用字段,宜建成定长,放在一张表。而varchar、text、blob,这种变长字段,适合单放一张表,用主键与核心表关联起来。2.常用字段和不常用字段要分离需要结合具体的业务来分析,分析字段的查询场景。查询频度低的字段,可单拆出来单放一张表,用...

2019-01-20 19:02:45 227

原创 数据库服务器优化思路

在大数据、大访问量的时代,数据库的性能优化无疑是非常重要的,下面总结了一些优化思路。1.应该先从宏观架构角度考虑,先通过观察或脚本,确定数据库性能问题是否是周期性的波动。如果是周期性的,一般是访问高峰或缓存雪崩造成的。可以通过增加缓存或更改缓存失效策略,使失效时间分散或夜间访问量低时定时失效。关于缓存雪崩可以参看这篇https://blog.csdn.net/zsh2050/article/d...

2019-01-20 18:26:40 529

原创 JVM内存设置

设置JVM内存的参数有四个:-Xmx Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定,建议设置为可用内存的最大值的80%;-Xms Java Heap初始值,物理内存的1/64,Server端JVM最好将-Xms和-Xmx设为相同值;-Xmn Java Heap Young区大小;-Xss 每个线程的Stac............

2018-12-10 00:54:07 3117

原创 Spring AOP的实现方式

Spring AOP常用的实现方式有以下三种:1.实现Spring API的传统方式2.@AspectJ注解驱动的切面3.基于XML设置的纯POJO切面Spring支持五种类型的通知:Before(前)  org.apringframework.aop.MethodBeforeAdviceAfter-returning(返回后) org.springframework.aop.Af...

2018-12-08 22:35:17 220

原创 OSI网络模型与TCP/IP网络模型

本文讲一点网络知识,架构师和开发工程师还是需要了解一些网络知识的,尤其分布式系统和云计算已经非常流行的今天,对网络的使用和规划越来越重要。1.OSI网络模型 OSI网络参考模型是ISO的建议,它是为了使各层上的协议国际标准化而发展起来的。OSI参考模型全称是开放系统互连参考模型(Open System Interconnection Reference Model...

2018-11-26 00:42:28 887

原创 数据库范式

       设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。       目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。       第一范式(1NF):属性不可分。 ...

2018-11-25 23:45:25 178

原创 访问者(vistor)模式

       访问者(vistor)模式的定义是,作用于某个对象群中各个对象的操作. 它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作。        假设有男人和女人两种元素,要分别打印出他们在不同状态时的不同表现。 用OO的思想把表现(行为)提取出来作为一个抽象方法,代码如下:public interface Person { public void acti...

2018-11-25 19:00:19 1833

空空如也

空空如也

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

TA关注的人

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