陈松的技术博客

阅读使人充实,会谈使人敏捷,写作使人精确

redis源码之sentinel高可用架构分析

分布式一致性Raft算法

===================================================== redis源码学习系列文章: redis源码分析之sha1算法分析 redis源码分析之字典源码分析 redis源码分析之内存编码分析intset, ziplist编码分析 redis源码分析之跳跃表 redis源码分析之内存淘汰策略的原理分析 redis源码分析之对...

初级排序算法分析

1,选择排序 2, 插入排序 3, 希尔排序 4, 归并排序 5, 快速排序 6, 堆排序

前言 正文 一, 选择排序 选择排序是排序中最简单的排序算法,它的操作是这样的: 首先找到数组中最小那个的元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此往复,直到将整个数组排序。它在不断地选择剩余元素之中的最小者。 命题A: 对于长度为N的数组,选择排序需要大约(N...

STL源码之序列式容器list

双向链表,循环链表

前言 STL中list链表即双向链表又是循环链表 正文 一, STL源码之序列式容器list的节点和内置内存申请alloc节点的设计 1, 使用两个指针 父节点指针和下一个节点的指针 template <class T> struct __list_node { typedef void* void_pointer; void_pointer next; v...

STL源码之内存分配器alloc

内存池

前言 正文 一, C++中的对象new的流程 在C++中 new是调用::operator new (); //分配内存的 在调用赋值函数 construct(); 释放的流程 destroy() ::operator delete ; //释放内存 //初始化对象的值 template <class T1, class T2> inline...

STL源码解析模版

模版语法介绍

前言 正文 C++中模版语法解 1, 模版参数做特殊化设计 #include <iostream> template<class T, class O> class ctest_class { public: ctest_class() { std::cout << "I, O" << std::endl; } // s...

操作系统原理之物理内存管理之非连续内存分配

内存管理单元

前言 正文 一,非连续内存分配的需求背景 1, 连续分配的缺点 分配给程序的物理内存必须连续 存在外碎片和内碎片 内存分配的动态修改困难 内存利用率较低 2,非连续分配的设计目标: 提高内存利用效率和概率灵活性 允许一个程序的使用非连续的物理地址空间 允许共享代码与数据 支持动态加载和动态链接 3,非连续分配需要解决的问题 如何实现虚...

操作系统原理之计算机物理内存管理之连续内存分配

内存管理单元

前言 正文 一, 计算机体系结构和内存层次 1,计算机系统结构 计算机系统体系结构 2, 内存层次 3, 操作系统的内存管理方式 操作系统中采用的内存管理方式 重定位(relocation) 分段(segmentation) 分页(paging) 虚拟存储(virtual memeory) ...

操作系统原理之加载系统的流程, 中断,异常和系统调用

bootlooader

前言 正文 一, 启动流程 计算机体系结构 启动时的计算机内存和磁盘分布图 CS:IP = 0XF000:FFF0 (CS:代码段寄存器; IP:指令指针寄存器) 系统处于实模式 (刚刚通电情况下) PC = 16 * CS + IP 20位地址空间:1MB (可用) BIOS固件提供功能: 基本输入输出的程序 系统设置信息 开...

CPU的占有率计算

操作系统原理

前言 正文 一, 周期(时间片) 我们这里以4GHz就是CPU的频率 我们了解频率单位 Hz 是频率的单位。频率是指电脉冲,交流电波形,电磁波,声波和机械的振动周期循环时,1秒钟重复的次数。 1Hz代表每秒钟周期震动1次,60Hz代表每秒周期震动60次。 Hz是个很小的单位,通常在其前面加上k(千),M(百万),G(十亿),T(万亿)等数量级单位。 KHz,千赫兹,是频率,也可以说...

数据结构之B树和B+树基本概念

插入,查找,删除

前言 正文 一, B树 1, B树的基本性质 B树,又称多路平衡查找树,B树中所有结点的孩子结点数的最大值称为B树的阶,通常用m表示。一棵m阶B树或为空树,或为满足如下特性的m叉树; 树中每个结点至多有m颗子树(即至多含有m-1个关键字)。 若根结点不是终端结点,则至少有两颗子树。 除根结点外的所有非叶结点至少有[m/2]颗子树(即至少含有[m/2] - 1个关键字)...