自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 JVM之垃圾回收机制

垃圾回收是做什么的呢? 处理不需要的对象的,就像是垃圾清理工。是一个后台服务,默默处理任务的。 垃圾对象是如何被判定的呢? ①没有任何方法的局部变量指向它 ②没有任何类的静态变量指向它 ③没有常量指向它 方法区内的类会不会进行垃圾回收呢? 会的。 ①该类的所有实例对象都...

2019-10-26 15:36:06

阅读数 27

评论数 0

原创 JVM之内存区域划分

程序计数器: 当前线程执行的字节码的指示器。也就是记录当前执行的字节码指令位置用的。 Java虚拟机栈: 虚拟机栈是用来描述Java方法执行的内存模型,每个线程都有自己的Java虚拟机栈,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。 堆内存: 主要用来给对象分...

2019-10-26 15:24:20

阅读数 34

评论数 0

原创 JVM之类加载机制

一个类从加载到使用的过程中,会经历一个过程: 加载--验证--准备--解析--初始化--使用--卸载 验证阶段: 这一步会根据Java虚拟机规范,对加载的.class文件进行校验。 准备阶段: 这个阶段,会给类对象分配内存空间,也会给类的静态变量分配内存空间,并赋一个初始值...

2019-10-26 14:53:53

阅读数 24

评论数 0

原创 架构演进

1.什么是大型网站? 访问量和数据量缺一不可的网站。 2.大型网站架构演进 2.1.首先是单机构建的网站, 2.2.随着业务量的增长,单机无法满足,将数据库与应用分离 2.3.应用服务器集群化 2.3.1.负载均衡设备 2.3.2.解...

2019-10-07 10:06:45

阅读数 18

评论数 0

原创 分布式系统介绍

什么是分布式系统? A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing...

2019-10-03 16:21:10

阅读数 17

评论数 0

原创 Wireshark---网络被劫持

打开某个目标网站时,有时候会加载出其他的网站。 思路: 1.通过抓包,发现有些包乱序了,为什么会乱序呢?因为劫持的包抢先到达,导致乱序。 2.被劫持的原理是:正常情况下,用户发出的HTTP请求,经过层层路由才能到达真实的Web服务器,然后真实的HTTP响应又经过层层路由才能回到用户端。如果是非正常...

2019-09-15 10:07:21

阅读数 32

评论数 0

原创 Wireshark---MTU带来的问题

当客户端发送给服务器的巨帧经过路由器时,要么被丢包,要么被分片,取决于该巨帧是否在网络层带了DF(Don’t Fragment)标志。 案例1: 用户浏览某些共享目录时客户端会死机,浏览其他目录则不会。 思路: 通过抓包,发现一直在重传,但是客户端一直没有确认。 发生丢包的可能性很多,为什么能确定...

2019-09-15 09:45:09

阅读数 83

评论数 0

原创 Wireshark---几个关于分片的问题

1.为什么要分片? 目的是为了提高链路的利用率。电路交换的双方要独占链路,所以利用率很低,后来发明了分组交换,将数据分割,分割就需要确定包的大小,即MTU(最大传输单元)。 2.发送方是如何确定分片大小的? 一般发送方是根据自身的MTU来决定分片大小的。 3.接收方是靠什么重组分片的? 包里面有个...

2019-09-15 09:26:45

阅读数 150

评论数 0

原创 Wireshark的一些提示

1.TCP Previous segment not captured TCP传输过程中,同一台主机发出的数据段应该是连续的,即后一个包的Seq号等于前一个包的Seq+Len(握手和挥手除外)。当Wireshark发现后一个包的Seq号大于前一个包的Seq+Len时,就会提示TCP Previou...

2019-09-15 09:26:12

阅读数 51

评论数 0

原创 Wireshark---延迟确认和SACK

TCP协议栈默认是启用延迟确认的,启用的好处是在发送数据时,捎带确认,节省带宽,坏处是延迟,还有一点不太好的是,延迟确认会触发超时重传,这样带来的影响就更大了,在TCP窗口较小时,启用延迟确认,性能更差。 解决方案: 关闭延迟确认。 有没有别的解决方案呢? 有的,启用SACK。尤其在远程通讯时,启...

2019-09-15 09:25:44

阅读数 51

评论数 0

原创 Wireshark---LSO是什么

如果需要估算网络的拥塞点,可能会遇到一种情况,只能看见重传的包,根据Seq过滤找不到原始的包。 可能原因: 1.包是在接收方抓的,看不到已经丢在路上的原始包 2.开始抓包时,原始包已经传完。 实际情况是,原始包已经抓到了,但是Seq号过滤不出来。换了一个过滤条件,但是有意外的发现,TCP的MSS是...

2019-09-13 11:43:09

阅读数 27

评论数 0

原创 Wireshark---没有启用SACK的性能问题

存储设备,写的性能很好,但是读的性能很差,相差约4.5倍。 思路: 1.一般的存储设备都是读比写快,所以排除存储设备本身的问题。 2.存储端的带宽大,客户端的小,读取文件时数据从大入小,难免会有溢出的问题(网络拥塞),然后就会导致性能问题。写是相反的。 3.抓包验证。 分析: 1.抓包以后,发现很...

2019-09-13 11:11:44

阅读数 47

评论数 0

原创 Wireshark---接收方乱序导致的问题

首先,这是一个性能问题,经过简答你的抓包排查,发现有较多的重传(Retransmission),还有较多的乱序(Out-Of-Order)。 思路: 1.判断是乱序导致的重传,影响了性能。 2.乱序产生的原因?一般是由发送方或者网络设备导致的。 方案: 1.通讯最小化原理,尽量减少中间设备 2.L...

2019-09-13 10:47:27

阅读数 182

评论数 0

原创 Wireshark---TCP的重传

为什么会有重传?重传的阈值是怎么计算的?重传有哪几种方式? ①网络的传输大小不可能无限大,那么就会有限制,如果超过这个限制就会导致网络拥塞,拥塞就会丢包,丢包就需要重传。 ②动态的,无法精确计算。 ③快速重传,超时重传 1.慢启动 刚建立连接,发送方对网络不了解,如果一次发送太多就可能拥塞,RFC...

2019-09-13 09:29:38

阅读数 73

评论数 0

原创 Wireshark---TCP窗口的几个误区

1.window size (即win=),这个值是发送窗口的大小吗? 不是,这是在向对方声明自己的接收窗口。 2.如何从包里看出发送窗口的大小呢? 没有办法。 3.发送窗口和MSS(最大段大小)有什么关系? 发送窗口决定了一次能发送多少字节,而MSS决定了这些字节要分多少个包发完。 4.发送方...

2019-09-13 08:06:28

阅读数 117

评论数 0

原创 MyBatis之数据源

DataSourceFactory是数据源工厂,两个子类是PooledDataSourceFactory和UnpooledDataSourceFactory,唯一的区别是,PooledDataSourceFactory的构造函数初始化的是PooledDataSource。 PooledDataSo...

2019-06-18 08:12:50

阅读数 257

评论数 0

原创 Mybatis之分页插件

PageInterceptor上面的@Intercepts注解和@Signature注解,会确定需要拦截的类和方法,然后使用动态代理为Executor创建代理对象。 拦截的具体逻辑是在intercept方法里面: public Object intercept(Invocation invo...

2019-06-15 21:10:47

阅读数 23

评论数 0

原创 MyBatis之ResultSetHandler

ResultSetHandler 会负责映射select语句查询得到的结果集, public interface ResultSetHandler { //生成对应的结果对象集合 <E> List<E> handleResultSets(Statement stmt...

2019-06-15 10:14:06

阅读数 197

评论数 0

原创 MyBatis之初始化

MyBatis初始化的主要工作是加载并解析mybatis-config.xml配置文件、映射配置文件以及相关的注解信息。 MyBatis初始化的入口是 SqlSessionFactoryBuilder#build(Reader reader, String environment, Propert...

2019-06-15 10:08:56

阅读数 27

评论数 0

原创 MySQL之自增主键为什么不是连续的?

自增主键为什么不是连续的? 在 MySQL 5.7 及之前的版本,自增值保存在内存里,并没有持久化。每次重启后,第一次打开表的时候,都会去找自增值的最大值 max(id),然后将 max(id)+1 作为这个表当前的自增值。 在 MySQL 8.0 版本,将自增值的变更记录在了 redo log...

2019-06-09 09:28:57

阅读数 305

评论数 0

原创 Linux之磁盘性能指标有哪些?

磁盘性能指标有哪些? 使用率、饱和度、IOPS、吞吐量以及响应时间等。这五个指标,是衡量磁盘性能的基本指标。 使用率,是指磁盘处理I/O的时间百分比。过高的使用率(比如超过80%),通常意味着磁盘 I/O 存在性能瓶颈。 饱和度,是指磁盘处理 I/O 的繁忙程度。过高的饱和度,意味着磁盘存在严重的...

2019-06-09 09:28:18

阅读数 232

评论数 0

原创 Mybatis基础支持层之反射工具箱

Reflector是Mybatis中反射模块的基础,每个Reflector对象都有对应一个类。 //对应的Class类型 private Class<?> type; //getter属性的名称集合 private String[] readablePropertyNam...

2019-06-09 09:18:55

阅读数 16

评论数 0

原创 Mybatis之整体架构

传统JDBC流程: 注册数据库驱动类,指定数据库URL地址、用户名、密码等连接信息 通过 DriverManager 打开数据库连接 通过数据库连接创建 Statement 对象 通过 Statement 对象执行SQL语句,得到ResultSet对象 通过ResultSet读取数据,并将数据转...

2019-06-02 19:32:25

阅读数 40

评论数 0

原创 Spring之IOC容器的实现

控制反转:依赖对象的获得被反转了,即依赖注入。 BeanDefinition用来管理基于Spring的应用中的各种对象以及它们之间的相互依赖关系。抽象了我们对Bean的定义,是让容器起作用的主要数据模型。依赖反转功能都是围绕对BeanDefinition的处理来完成的。 编程式使用IOC容器的过程...

2019-06-02 17:40:56

阅读数 10

评论数 0

原创 Redis阻塞问题

导致Redis阻塞分为内在原因和外在原因: 内在原因:不合理使用API或数据结构、CPU饱和、持久化阻塞等 外在原因:CPU竞争、内存交换、网络问题等 定位慢查询 Redis原生提供慢查询统计功能,执行 showlog get {n} 命令可以获取最近n条慢查询命令,Redis默认记录仪执行超过1...

2019-06-01 17:01:05

阅读数 195

评论数 0

原创 Redis之持久化

RDB: RDB持久化是把当前进程数据生成快照保存到硬盘的过程,分为手动触发和自动触发。 手动触发:bgsave,会fork一个子进程,持久化过程由子进程负责,save由于会阻塞因此已经废弃。 自动触发:Redis一些内部机制会触发。 RDB优缺点: 优点: 紧凑压缩的二进制文件,适...

2019-06-01 14:56:16

阅读数 8

评论数 0

原创 Redis之Redis Cluster集群方案

数据分布: 分布式数据库首先需要解决的是,把整个数据集按照分区规则映射到多个节点的问题,常见的分区规则有哈希分区和顺序分区。 哈希分区: 离散度好 数据分布业务无关 无法顺序访问 顺序分区: 离散度倾斜 数据分布业务相关 可以顺序访问 Redis Cluster 采用的是哈希分区: 常见的...

2019-06-01 11:23:41

阅读数 14

评论数 0

原创 Linux 磁盘I/O是怎么工作的?

Linux 磁盘I/O是怎么工作的? VFS 内部通过目录项、索引节点、逻辑块以及超级块等数据结构,来管理文件。 目录项,记录了文件的名字,以及文件与其他目录项之间的目录关系。 索引节点,记录了文件的元数据。 逻辑块,是由连续磁盘扇区构成的最小读写单元,用来存储文件数据。 超级块,用来记录文件系统...

2019-05-19 13:23:27

阅读数 116

评论数 0

原创 Redis Sentinel实现原理

Redis Sentinel实现主要包括几个方面:三个定时任务、主观下线和客观下线、Sentinel领导者选举、故障转移。 三个定时任务 1.每隔10秒,每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构 通过向主节点执行info命令,获取从节点的信息 当有新的从节点加...

2019-05-19 13:22:21

阅读数 333

评论数 0

原创 Linux 文件系统是怎么工作的?

Linux 文件系统是怎么工作的? Linux文件系统为每个文件都分配两个数据结构,索引节点(index node)和目录项(directory entry)。 索引节点,简称为inode,用来记录文件的元数据,比如inode编号、文件大小、访问权限、修改日期、数据的位置等。索引节点和文件一一对应...

2019-05-18 18:00:59

阅读数 151

评论数 0

原创 Linux内存是怎么工作的?

Linux内存是怎么工作的? 只有内核才可以直接访问物理内存。那么,进程要访问内存时,该怎么办呢? Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。 虚拟地址空间的内部又被分为内核空间和用户空间两部分,...

2019-05-18 18:00:24

阅读数 42

评论数 0

原创 Redis之主从复制

Redis复制功能分为同步和命令传播两个操作: 同步用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态(类似新建)。 命令传播用于当主从服务器的状态不一致时,让二者状态回到一致(类似更新)。 同步是通过SYNC命令完成的,具体步骤如下: 从服务器向主服务器发送SYNC命令 收到SY...

2019-05-18 15:01:28

阅读数 6

评论数 0

原创 Linux软中断?

怎么理解Linux软中断? 中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。 为了解决中断处理程序执行过长和中断丢失的问题,Linux将中断处理过程分成了两个阶段,也就是上半部和下半部: 上半部用来快速处理中断,它在中断禁止模...

2019-05-12 12:27:05

阅读数 194

评论数 0

原创 Linux之CPU100%

应用的CPU使用率达到100%,怎么处理? 应用的CPU使用率达到100%,怎么处理? Linux 通过 /proc 虚拟文件系统,向用户空间提供了系统内部状态的信息,而 /proc/stat 提供的就是系统的 CPU 和任务统计信息。 CPU 使用率是最直观和最常用的系统性能指标,更...

2019-05-12 12:23:38

阅读数 155

评论数 0

原创 MySQL join 优化

join优化? 回表是指,InnoDB 在普通索引 a 上查到主键 id 的值后,再根据一个个主键 id 的值到主键索引上去查整行数据的过程。回表是一行行搜索主键索引的。 因为大多数的数据都是按照主键递增顺序插入得到的,所以我们可以认为,如果按照主键的递增顺序查询的话,对磁盘的读比较接近顺序读...

2019-05-12 12:22:29

阅读数 177

评论数 0

原创 MySQL之Join

MySQL join? 使用 join 有什么问题呢? 1.如果可以使用 Index Nested-Loop Join 算法,也就是说可以用上被驱动表上的索引,其实是没问题的; 2.如果使用 Block Nested-Loop Join 算法,扫描行数就会过多。尤其是在大表上的 join 操作...

2019-05-12 12:21:48

阅读数 16

评论数 0

原创 MySQL读写分离有哪些坑?

读写分离有哪些坑? 读写分离的主要目标就是分摊主库的压力。 一种架构是客户端(client)主动做负载均衡,这种模式下一般会把数据库的连接信息放在客户端的连接层。也就是说,由客户端来选择后端数据库进行查询。 一种架构是,在 MySQL 和客户端之间有一个中间代理层 proxy,客户端只连接 pro...

2019-05-11 19:05:21

阅读数 245

评论数 0

原创 Linux之 CPU上下文切换

经常说的 CPU 上下文切换是什么意思? 每个任务运行前,CPU 都需要知道任务从哪里加载、又从哪里开始运行,也就是说,需要系统事先帮它设置好 CPU 寄存器和程序计数器(Program Counter,PC)。 CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。而程序计数器,则是用来存...

2019-05-11 08:38:07

阅读数 50

评论数 0

原创 Linux之怎么理解“平均负载”?

怎么理解“平均负载”? 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系。 当平均负载为2时,意味着什么呢? 1.在只有2个CPU的系统上,意味着所有的CPU都刚好被完全占用。 2.在4个CPU的系统上,意味着CPU有50...

2019-05-10 20:28:41

阅读数 43

评论数 0

原创 MYSQL 备库延迟问题

MYSQL 备库延迟问题 一个线程负责客户端写入主库,另一线程sql_thread 执行中转日志(relay log)。 在官方的 5.6 版本之前,MySQL 只支持单线程复制,由此在主库并发高、TPS 高时就会出现严重的主备延迟问题。 coordinator (sql_thread)在分...

2019-05-10 20:27:06

阅读数 129

评论数 0

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