自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线程池详解

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

2020-04-25 17:00:25 2276

原创 java阻塞队列的使用

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

2020-04-24 23:57:12 3370

转载 WireShark全版本下载

WireShark 全版本下载最新版最新版请直接进入官方网站首页下载链接: https://www.wireshark.org/download.html选择对应的版本下载就可以了旧版本如果你只是想下载一个离最新版不是太久远的版本,那首页也有, 例如上图的 Old Stable Release (3.0.7)就是指一个稳定的旧版本下载。但你想下载更为久远的版本,则需要进入 wireshark 的版本库里找:链接 : https://1.as.dl.wireshark.org/这是个ftp

2021-03-01 12:12:24 2029 1

原创 pip版本出错解决

报错:ipython 6.5.0 has requirement prompt-toolkit<2.0.0,>=1.0.15, but you’ll have prompt-toolkit 2.0.15 which is incompatible.pip install imagededup 时,报错:ipython 6.5.0 has requirement prompt-toolkit<2.0.0,>=1.0.15, but you’ll have prompt-toolkit

2020-09-14 11:50:50 909

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

题目:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出:前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:思路:先序遍历的顺序是 Root -> Left -> Right,这就能方便的从根开始构造一棵树。首先,preorder 中的第一个元素一定是树的根,这个根又将 inorder 序列分成了左右两棵子树。现在我们只需要将先序遍历的数组中删除根元素,

2020-05-16 03:29:51 2255

原创 Java反射原理简析

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

2020-04-30 23:45:40 991

原创 Zookeeper选举与消息广播

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

2020-04-30 23:37:38 486

原创 Zookeeper脑裂

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

2020-04-30 23:21:48 207

原创 MySQL的预读机制

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

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

原创 InnoDB插入缓冲

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

2020-04-29 18:38:53 222

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

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

2020-04-28 23:37:19 165

原创 mysql优化

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

2020-04-28 10:41:59 163

原创 mysql索引原理

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

2020-04-27 22:40:20 155

转载 mysql事务的实现原理

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

2020-04-22 01:33:15 414

原创 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 2730

原创 浅析netty模型

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

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

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

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

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

原创 netty核心组件总结

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

2020-04-20 01:52:22 2664

原创 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 2820

原创 netty入门案例

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

2020-04-20 01:32:10 2379

原创 mysql之explain详解

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

2020-04-19 21:28:19 3033

转载 排查频繁的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 811

原创 cookie的安全性

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

2020-03-17 22:19:22 2100

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

单例模式的定义:单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。在java中,单例模式我们常用的有三种(不晓得哪个天杀的说有七种,我懒得去找……)其实,我们在日常的应用中,会遇到这么一些问题:单例模式是怎么被破坏的?单例模式无坚不摧到底好不好?单例模式既然会被破坏有没有办...

2020-03-16 18:16:11 2560

转载 http中get和post性能对比

get和post在面试过程中一般都会问到,一般的区别:1.post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)2.post发送的数据量更大(get有url长度限制)3.post能发送更多的数据类型(get只能发送ASCII字符)4.post比get慢我相信不止一个人跟我一样有这种疑惑,既然post有这么多优点,那我们为什么要使用get?甚至有个同事...

2020-03-16 17:07:42 6963

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

堆内存是虚拟机管理的内存中最大的一块,也是垃圾回收最频繁的一块区域,我们程序所有的对象实例都存放在堆内存中。给堆内存分代是为了提高对象内存分配和垃圾回收的效率。试想一下,如果堆内存没有区域划分,所有的新创建的对象和生命周期很长的对象放在一起,随着程序的执行,堆内存需要频繁进行垃圾收集,而每次回收都要遍历所有的对象,遍历这些对象所花费的时间代价是巨大的,会严重影响我们的GC效率,这简直太可怕了。...

2020-03-15 02:18:00 4119

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

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

2020-03-15 02:13:32 1435

原创 java锁升级过程

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

2020-03-14 20:32:17 18234 5

原创 ArrayList和LinkedList区别

1、底层数据结构的差异:ArrayList:数组,连续的一块内存空间,基于动态数组;LinkedList:双向链表,不是连续的内存空间,基于链表的数据结构,每一个元素都是与前一个和后一个元素相连的。(由链表的特性决定);2、性能区别:ArrayList:查询快,因为是连续的内存空间,方便寻址,但是删除,插入效率慢,因为需要发生数据迁移;LinkedList:查询慢,因为需要通过指针一个个...

2020-03-14 20:23:05 3393

原创 数组中的第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说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。解题思路:这个是个典型的 T...

2020-03-14 19:21:06 3520

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

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

2020-03-14 19:17:36 1777

转载 浅谈布隆过滤器

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

2020-03-14 18:55:03 1260

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

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

2020-03-14 18:51:32 4541 2

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

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

2020-03-14 18:40:55 7467 1

转载 白话零拷贝

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

2020-03-14 18:35:02 1217

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

长连接意味着进行一次数据传输后,不关闭连接,长期保持连通状态。如果两个应用程序之间有新的数据需要传输,则直接复用这个连接,无需再建立一个新的连接。就像下图这样。它的优势是在多次通信中可以省去连接建立和关闭连接的开销,并且从总体上来看,进行多次数据传输的总耗时更少。缺点是需要花费额外的精力来保持这个连接一直是可用的,因为网络抖动、服务器故障等都会导致这个连接不可用,甚至是由于防火墙的原因。所以,...

2020-03-14 18:05:47 19696 2

原创 搜索旋转排序数组

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

2020-03-14 18:00:40 2966

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

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

2020-03-14 17:51:54 1495

转载 Redis和Memcached的区别详解

Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较:1.Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一...

2020-03-14 17:47:58 3253

原创 JVM垃圾收集器总结

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

2020-03-13 19:57:19 3223

空空如也

空空如也

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

TA关注的人

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