08 2020 档案
摘要:前言 提起Redis,我们经常会说其底层是一个单线程模型,但这是不严谨的。Redis单线程指的是网络请求模块只使用了一个线程来分发所有网络请求,其他模块该使用多线程,如AOF时的BIGREWRITE时,仍会使用了多线程处理。既然是单线程模型,那么就不需要CPU频繁切换上下文线程了,显然CPU就不是R
阅读全文
posted @ 2020-08-20 22:52
Reecelin
摘要:前言 之前自学网络IO相关知识的笔记。 基础概念 正式开始之前,需要铺垫一些基本概念,以免接下来看到一脸懵逼。 我们都知道,在操作系统中,CPU负责执行指令,这些指令有些来自应用程序,有些是底层系统的自调用。有些指令是非常危险的,如清除内存,网络连接等等,如果错误调用的话有可能导致系统崩溃。因而CP
阅读全文
posted @ 2020-08-20 20:34
Reecelin
摘要:前言 在之前的Redis使用中缓存穿透、缓存雪崩等问题总结中提到过,缓存穿透的解决办法之一就是使用布隆过滤器,BloomFilter来过滤掉无效请求。今天我们来了解一下布隆过滤器。 BloomFilter原理 BloomFilter是一种概率型数据结构,它由一个长度为m的二进制向量(位数组)和k个哈
阅读全文
posted @ 2020-08-15 21:01
Reecelin
摘要:前言 日志是MySQL数据库的重要组成部分,记录着数据库运行期间各种状态信息。MySQL中日志类型有很多种,但对于开发来说,最常见和最重要的就是binlog、redolog和undolog。本篇文章主要对这三种日志类型做一个简要的介绍。 前置知识 简单说一下,逻辑日志和物理日志的区别吧 逻辑日志:可
阅读全文
posted @ 2020-08-14 19:28
Reecelin
摘要:前言 在多线程开发中,线程池是个利器,可以帮助我们管理线程和复用线程。而在线程池中,用来保存线程和任务的数据结构就是队列,如newFixedThreadPool和newSingleThreadExecutor这两个线程池使用的LinkedBlockingQueue队列,newCachedThread
阅读全文
posted @ 2020-08-11 23:45
Reecelin
摘要:前言 MySQL在REPEATABLE READ级别解决了幻读问题,解决方案有两种,一种是MVCC版本控制链,具体可以参考这个,MVCC 多版本控制链,还有就是通过加锁的方式。这篇文章简要介绍一下MySQL是如何通过加锁来解决幻读问题的。 准备工作 还是一样,先创建一张表,如下所示: CREATE
阅读全文
posted @ 2020-08-10 15:21
Reecelin
摘要:前言 讲解多版本控制之前,先说一下结论吧: MVCC多版本控制链指的就是在使用READ COMMITTD、REPEATABLE READ这两种隔离级别的事务在执行普通的SELECT操作时访问记录的版本链的过程,这样子可以使不同事务的读-写、写-读操作并发执行,从而提升系统性能; READ COMMI
阅读全文
posted @ 2020-08-10 13:43
Reecelin
摘要:前言 ArrayList可以说是日常开发中最常用到的一个数据结构了,今天我们开始撸一下它的源码。 整体结构 ArrayList的继承关系如下所示: 需要注意到ArrayList实现了RandomAccess这个接口,其源码如下: public interface RandomAccess { } 可
阅读全文
posted @ 2020-08-09 17:17
Reecelin
摘要:前言 前面分析了jdk8版本的HashMap,虽然在新版本的jdk中解决了HashMap之前存在的死锁问题,但是该版本的HashMap还是只能用于单线程情况下。多线程环境下还是要使用ConcurrentHashMap来解决并发问题。 ConcurrentHashMap的继承关系如下所示: Concu
阅读全文
posted @ 2020-08-09 00:17
Reecelin
摘要:HashSet 日常开发中,如果我们想要过滤重复的元素,通常使用HashSet来实现。HashSet的继承关系如下所示: 成员变量 //底层是由HashMap实现 private transient HashMap<E,Object> map; // 虚拟value private static f
阅读全文
posted @ 2020-08-08 02:12
Reecelin
摘要:前言 HashMap作为日常开发中最常使用的一个数据结构了,同时个人也认为这是最重要的一个数据结构,因此涉及到数组、链表、Hash算法、红黑树等等,基本HashMap搞懂了,数据结构这块没啥问题了。 概览 先来总览一下HashMap的继承关系吧 public class HashMap<K,V> e
阅读全文
posted @ 2020-08-08 01:22
Reecelin
摘要:前言 每个进程都拥有自己的用户地址空间,任何一个进程的全局变量在另一个进程中完全不可见,但是内核空间中每个进程都是共享的,所以进程之间要交换数据必须通过内核空间进行。在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据读取走,内核提供的这种机制称之为进程间通信(
阅读全文
posted @ 2020-08-05 21:43
Reecelin

浙公网安备 33010602011771号