自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 线程池详解

1.线程池的作用 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务加入队列,然后在线程创建后启动这些任务,如果先生超过了最大数量,超出的数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行;他的主要特点为:线程复用;控制最大并发数;管理线程。 使用线程池的好处: 第一:降低资...

2020-04-25 17:00:25 1813 0

原创 java阻塞队列的使用

1.阻塞队列的作用 阻塞队列(BlockingQueue),顾名思义,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如图所示: 当阻塞队列是空时,从队列中获取元素的操作将会被阻塞 当阻塞队列是满时,往队列中添加元素的操作将会被阻塞 同样,试图往已满的阻塞队列中添加新元素的线程同样也会...

2020-04-24 23:57:12 1825 0

原创 通过前序与中序遍历序列构造二叉树

题目: 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出: 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 思路: 先序遍历的顺序是 Root -> L...

2020-05-16 03:29:51 75 0

原创 Java反射原理简析

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

2020-04-30 23:45:40 64 0

原创 Zookeeper选举与消息广播

ZAB协议概述 在前面的文章中,介绍了经典的分布式数据一致性算法Paxos算法,但事实上zookeeper并没有采用完全的Paxos算法,而是采用了一种称为Zookeeper Atomic Broadcast(ZAB,zookeeper原子消息广播协议)。ZAB 协议是为分布式协调服务 ZooKe...

2020-04-30 23:37:38 70 0

原创 Zookeeper脑裂

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

2020-04-30 23:21:48 52 0

原创 MySQL的预读机制

一、预读机制 InnoDB在I/O的优化上有个比较重要的特性为预读,预读请求是一个i/o请求,它会异步地在缓冲池中预先回迁多个页面,预计很快就会需要这些页面,这些请求在一个范围内引入所有页面。InnoDB以64个page为一个extent,那么InnoDB的预读是以page为单位还是以extent...

2020-04-29 18:50:58 100 0

原创 InnoDB插入缓冲

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

2020-04-29 18:38:53 56 0

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

如果想了解一条 sql 语句在 mysql 内部是怎么执行的,需要先了解 mysql 的架构。 mysql 内部架构如下图所示: mysql 中一共有4层,分别如下: 1.连接层 最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主...

2020-04-28 23:37:19 38 0

原创 mysql优化

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

2020-04-28 10:41:59 57 0

原创 mysql索引原理

索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。 我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查...

2020-04-27 22:40:20 24 0

原创 mysql中的7种日志

MySQL中有以下日志文件,分别是: 1:重做日志(redo log) 2:回滚日志(undo log) 3:二进制日志(binlog) 4:错误日志(errorlog) 5:慢查询日志(slow query log) 6:一般查询日志(general log) 7:中继日志(relay log)...

2020-04-22 05:44:42 2065 0

转载 mysql事务的实现原理

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

2020-04-22 01:33:15 281 0

原创 java使用RestTemplate封装post请求

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

2020-04-20 23:01:49 526 0

原创 浅析netty模型

在前面的文章 解析Netty中三种线程模型 里笔者描述了 netty 的三种线程模型。在实际的生产中,netty的主从 Reactor 多线程模型是使用得最为广泛的,那么本文中浅析 netty 的主从 Reactor 多线程模型。 本文将浅析过程分为简单版和详细版,简单版中以一个更为抽象简洁的结构...

2020-04-20 22:36:54 2184 0

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

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

2020-04-20 22:09:01 2256 0

原创 netty核心组件总结

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

2020-04-20 01:52:22 2235 0

原创 netty使用http服务示例

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

2020-04-20 01:41:17 2278 0

原创 netty入门案例

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

2020-04-20 01:32:10 2194 0

原创 mysql之explain详解

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

2020-04-19 21:28:19 2209 0

转载 排查频繁的FulGC

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

2020-04-06 16:19:12 429 0

原创 cookie的安全性

什么是cookie 指某些网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据(通常经过加密)。(注:此定义来自百度百科) cookie对于登录的效果 排除用户手动删除浏览器cookie以及cookie未过期的情况下,用户如果在某网站登录过一次,下次访问这个网站,用户不需要输入...

2020-03-17 22:19:22 458 0

转载 破坏单例模式的三种方式

单例模式的定义: 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。 在java中,单例模式我们常用的有三种(不晓得哪个天杀的说有七种,我懒得去找……) 其实,我们在日常的应用中...

2020-03-16 18:16:11 540 0

转载 http中get和post性能对比

get和post在面试过程中一般都会问到,一般的区别: 1.post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中) 2.post发送的数据量更大(get有url长度限制) 3.post能发送更多的数据类型(get只能发送ASCII字符) 4.post比get慢...

2020-03-16 17:07:42 762 0

原创 java虚拟机为什么要分代回收

堆内存是虚拟机管理的内存中最大的一块,也是垃圾回收最频繁的一块区域,我们程序所有的对象实例都存放在堆内存中。给堆内存分代是为了提高对象内存分配和垃圾回收的效率。 试想一下,如果堆内存没有区域划分,所有的新创建的对象和生命周期很长的对象放在一起,随着程序的执行,堆内存需要频繁进行垃圾收集,而每次回收...

2020-03-15 02:18:00 2986 0

原创 java虚拟机如何知道哪些对象需要被回收

java虚拟机是通过可达性分析算法来判定对象是否存活。 当一个对象到GC Roots没有任何引用链相连,或者说从GC Roots到这个对象不可达时,这个对象将会被判定为是可回收的对象。 在Java语言中,可作为GC Roots的对象包括下面几种: 虚拟机栈(栈帧中的本地变量表)中引用的对象 方法...

2020-03-15 02:13:32 1164 0

原创 java锁升级过程

java中对象锁有4种状态:(级别从低到高) 1.无锁状态 2.偏向锁状态 3.轻量级锁状态 4.重量级锁状态 对象头分两部分信息,第一部分用于存储哈希码、GC分代年龄等,这部分数据被称为"Mark Word"。在32位的HotSpot虚拟机中对象未被锁定的状态下,Mark W...

2020-03-14 20:32:17 3520 0

原创 ArrayList和LinkedList区别

1、底层数据结构的差异: ArrayList:数组,连续的一块内存空间,基于动态数组; LinkedList:双向链表,不是连续的内存空间,基于链表的数据结构,每一个元素都是与前一个和后一个元素相连的。(由链表的特性决定); 2、性能区别: ArrayList:查询快,因为是连续的内存空间,方便寻...

2020-03-14 20:23:05 2874 0

原创 数组中的第K个最大元素

题目: 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 ...

2020-03-14 19:21:06 2965 0

转载 一个TCP连接可以发多少个HTTP请求?

曾经有这么一道面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么? 相信大多数准备过的同学都能回答出来,但是如果继续问:收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建立了多少连接、使用什么协议被下载下来的呢? 要搞懂这个问题,我们需要先解决下面五个问题:...

2020-03-14 19:17:36 1205 0

转载 浅谈布隆过滤器

一、布隆过滤器是什么 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 二、布隆过滤器的基本思想...

2020-03-14 18:55:03 1123 0

转载 从海量数据中找出中位数

题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。 关于中位数:数据排序后,位置在最中间的数值。即将数据分成两部分,一部分大于该数值,一部分小于该数值...

2020-03-14 18:51:32 1218 0

原创 redis为什么选择了跳跃表而不是红黑树

Redis只在两个地方用到了跳跃表,一个是实现有序集合键(zset),另一个是在集群节点中用作内部数据结构,除此之外,跳表在Redis里面没有其他用途。 但是为什么用跳表而不用红黑树呢?猜想如下: **1)**在做范围查找的时候,平衡树比skiplist操作要复杂。在平衡树上,我们找到指定范围的小...

2020-03-14 18:40:55 1473 0

转载 白话零拷贝

sendfile()这个系统调用 是在两个文件描述符之间直接传递数据(这个操作是完全在内核态进行),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,称之为零拷贝,操作效率很高 --------------------------- 下面我们一步一步来了解什么是零拷贝 --------------...

2020-03-14 18:35:02 1119 0

转载 长连接和短链接的区别

长连接意味着进行一次数据传输后,不关闭连接,长期保持连通状态。如果两个应用程序之间有新的数据需要传输,则直接复用这个连接,无需再建立一个新的连接。就像下图这样。 它的优势是在多次通信中可以省去连接建立和关闭连接的开销,并且从总体上来看,进行多次数据传输的总耗时更少。缺点是需要花费额外的精力来保持...

2020-03-14 18:05:47 1131 0

原创 搜索旋转排序数组

题目: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度...

2020-03-14 18:00:40 2855 0

转载 为什么redis单线程却能支撑高并发

redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 这个是问 redis 的时候,最基本的问题吧,redis 最基本的一个内部原理和特点,就是 redis 实际上是个单线程工作模型,你要是这个都不知道,那后面玩儿 redis 的...

2020-03-14 17:51:54 1162 0

转载 Redis和Memcached的区别详解

Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较: 1.Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set...

2020-03-14 17:47:58 1122 0

原创 JVM垃圾收集器总结

HotSpot 虚拟机在 JDK 1.7 之后提供了7款垃圾收集器,分别是: 1.Serial收集器 2.ParNew收集器 3.Parallel Scavenge收集器. 4.Serial Old收集器 5.Parallel Old收集器 6.CMS收集器 7.G1收集器 其中Serial、Pa...

2020-03-13 19:57:19 3058 0

原创 Minor GC的时候其他线程是否可以继续运行

目前所有的新生代gc都是需要STW(Stop the World)的! Serial:单线程STW,复制算法 ParNew:多线程并行STW,复制算法 Parallel Scavange:多线程并行STW,吞吐量优先,复制算法 G1:多线程并发,可以精确控制STW时间,整理算法 Stop the ...

2020-03-13 19:28:01 1680 0

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