自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线程池详解

1.线程池的作用线程池做的工作主要是控制运行的线程的数量,处理过程中将任务加入队列,然后在线程创建后启动这些任务,如果先生超过了最大数量,超出的数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行;他的主要特点为:线程复用;控制最大并发数;管理线程。使用线程池的好处:第一:降低资源消耗;通过重复利用自己创建的线程降低线程创建和销毁造成的消耗;第二:提高响应速度;当任务到达时,任...

2020-04-25 17:00:25 2302

原创 java阻塞队列的使用

1.阻塞队列的作用阻塞队列(BlockingQueue),顾名思义,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如图所示:当阻塞队列是空时,从队列中获取元素的操作将会被阻塞当阻塞队列是满时,往队列中添加元素的操作将会被阻塞同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他线程从队列中移除一个或者多个元素或者全清空队列后使队列重新变得空闲起来并后续新增为什...

2020-04-24 23:57:12 3657

原创 Java反射原理简析

Java的反射机制允许我们动态的调用某个对象的方法/构造函数,获取某个对象的属性等,而无需在编码时确定调用的对象。这种机制在我们常用的框架中也非常常见。1.原理简介类actionClass = Class.forName(“ MyClass”);对象action = actionClass.newInstance();方法method = actionClass.getMethod(“ m...

2020-04-30 23:45:40 1049

原创 Zookeeper选举与消息广播

ZAB协议概述在前面的文章中,介绍了经典的分布式数据一致性算法Paxos算法,但事实上zookeeper并没有采用完全的Paxos算法,而是采用了一种称为Zookeeper Atomic Broadcast(ZAB,zookeeper原子消息广播协议)。ZAB 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议。在 ZooKeeper 中,主要依赖 ZAB 协议...

2020-04-30 23:37:38 508

原创 Zookeeper脑裂

什么是脑裂脑裂(split-brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”,我们都知道,如果一个人有多个大脑,并且相互独立的话,那么会导致人体“手舞足蹈”,“不听使唤”。脑裂通常会出现在集群环境中,比如ElasticSearch、Zookeeper集群,而这些集群环境有一个统一的特点,就是它们有一个大脑,比如ElasticSearch集群中有Master节点,Z...

2020-04-30 23:21:48 224

原创 MySQL的预读机制

一、预读机制InnoDB在I/O的优化上有个比较重要的特性为预读,预读请求是一个i/o请求,它会异步地在缓冲池中预先回迁多个页面,预计很快就会需要这些页面,这些请求在一个范围内引入所有页面。InnoDB以64个page为一个extent,那么InnoDB的预读是以page为单位还是以extent?数据库请求数据的时候,会将读请求交给文件系统,放入请求队列中;相关进程从请求队列中将读请求取出,...

2020-04-29 18:50:58 3516 1

原创 InnoDB插入缓冲

InnoDB存储引擎有三大特性非常令人激动,它们分别是插入缓冲、两次写和自适应哈希,本篇文章先介绍第一个特性 - 插入缓冲(insert buffer)在上一篇《MySQL - 浅谈InnoDB存储引擎》中,我们可以看到在InnoDB的内存中有单独一块叫“插入缓冲”的区域,下面我们详细来介绍它。非聚集索引写性能问题为了阐述非聚集索引写性能问题,我们先来看一个例子:mysql>crea...

2020-04-29 18:38:53 240

原创 mysql架构和sql语句执行流程

如果想了解一条 sql 语句在 mysql 内部是怎么执行的,需要先了解 mysql 的架构。mysql 内部架构如下图所示:mysql 中一共有4层,分别如下:1.连接层最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的...

2020-04-28 23:37:19 190

原创 mysql优化

对于mysql的优化,很多同学上来就来分库分表,这样是不对的,在分库分表之前,还有很多措施可以做。第一,应该先优化 sql 语句和索引,下面列出一些优化索引的措施:(1)依据where查询条件建立索引;(2)使用联合索引,而不是多个单列索引;例如:select * from tab_a where b=? and c=?这个SQL,对b c字段建立联合索引的效率比单列的索引效率更高。(...

2020-04-28 10:41:59 175

原创 mysql索引原理

索引的本质MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕...

2020-04-27 22:40:20 166

转载 mysql事务的实现原理

开篇相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等。今天想跟大家一起研究下事务内部到底是怎么实现的,在讲解前我想先抛出个问题:事务想要做到什么效果?按我理解,无非是要做到可靠性以及并发处理可靠性:数据库要保证当insert或update操作时抛异常或者数据库crash的时候...

2020-04-22 01:33:15 435

原创 java使用RestTemplate封装post请求

之前笔者写过一篇比较实用的文章 java使用httpclient封装post请求和get的请求,其实java中实现http请求还可以用 RestTemplate 完成,下面给出示例代码:import com.alibaba.fastjson.JSONObject;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import or...

2020-04-20 23:01:49 2763

原创 浅析netty模型

在前面的文章 解析Netty中三种线程模型 里笔者描述了 netty 的三种线程模型。在实际的生产中,netty的主从 Reactor 多线程模型是使用得最为广泛的,那么本文中浅析 netty 的主从 Reactor 多线程模型。本文将浅析过程分为简单版和详细版,简单版中以一个更为抽象简洁的结构进行描述,而抽象版则展现了更多的细节。简单版模型如下所示:工作流程:1)BossGroup...

2020-04-20 22:36:54 2494 1

原创 解析Netty中三种线程模型

Reactor模式是基于事件驱动开发的,核心组成部分包括Reactor和线程池,其中Reactor负责监听和分配事件,线程池负责处理事件。Netty是基于Reactor模型开发的,在netty中可以构建3种模型结构,分别是:单 Reactor 单线程单 Reactor 多线程主从 Reactor 多线程1.单 Reactor 单线程单 Reactor 单线程模型如下图所示:或者...

2020-04-20 22:09:01 7088 1

原创 netty核心组件总结

Bootstrap和ServerBootstrapBootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类常见的方法有:public ServerBootstrap group(EventLo...

2020-04-20 01:52:22 2689

原创 netty使用http服务示例

在上一篇文章 netty入门案例 中我们做出了netty的入门示例,那么netty是如何使用http服务的呢?下面贴出示例代码服务端:import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.EventLoopGroup;import io...

2020-04-20 01:41:17 2852

原创 netty入门案例

Netty通过Reactor模型基于多路复用器接收并处理用户请求,内部实现了两个线程池,boss线程池和work线程池,其中boss线程池的线程负责处理请求的accept事件,当接收到accept事件的请求时,把对应的socket封装到一个NioSocketChannel中,并交给work线程池,其中work线程池负责请求的read和write事件,由对应的Handler处理。初学者在学习Net...

2020-04-20 01:32:10 2403

原创 mysql之explain详解

1.简介使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通...

2020-04-19 21:28:19 3068

转载 排查频繁的FulGC

问题前段时间发现线上的一个dubbo服务Full GC比较频繁,大约每两天就会执行一次Full GC。Full GC的原因我们知道Full GC的触发条件大致情况有以下几种情况:1.程序执行了System.gc() //建议jvm执行fullgc,并不一定会执行2.执行了jmap -histo:live pid命令 //这个会立即触发fullgc3.在执行minor gc的时候进行的一...

2020-04-06 16:19:12 850

空空如也

空空如也

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

TA关注的人

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