力扣题记之单调栈
More content:LeetCode hot100@栈 96. 下一个更大元素 I✅ 单调栈 + 哈希 class Solution { public: vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) { stack…
STL 浅层剖析
源码版本:SGI-STL V3.3 set / map 底层都为 RB-tree(平衡二叉搜索树),每一个元素都是红黑树上的一个节点,所有元素都会根据键值自动被排序(默认递增)。 map 的元素是 pair,同时拥有键值 key 和实值 value,不允许两个元素拥有相同的 key;set 元素的键值就是实值,也不允许两个元素拥有相同的键值。 查找…
文件系统深层剖析
在 Linux 内核中,一切皆文件。 概论 Linux 文件系统为每个文件分配两个数据结构:索引节点(inode)和目录项(dentry)。 索引节点,里面存储了文件的元数据(比如 inode 编号、文件大小、访问权限、修改时间、数据块在磁盘中的位置等),但不包括文件名。索引节点是文件的唯一标识,也被存储在硬盘中。 目录项,用来记录文件的名字、索引…
存储深层剖析
如今主流的三种存储类型分别是:块存储、文件存储和对象存储。这三者都是分布式存储中的概念,由不同的网络存储协议实现。 注意分布式存储指的是底层的存储系统,为了满足不同的访问需求,往往一个分布式存储系统,可以同时提供文件存储、块存储和对象存储这三种形式的服务。因为要存放的数据非常多,单一服务器所能连接的物理介质是有限的,提供的 IO 性能也是有限的,所…
RaftKV-分布式存储
Raft 算法 Raft 作为经典的分布式一致性算法,旨在实现多节点状态机的高可靠一致性。 Raft 算法由 leader 节点来处理一致性问题,并分为了以下几个子问题: leader 选举:集群中必须存在一个 leader 节点。 日志复制:leader 节点接收来自客户端的请求,然后将这些请求序列化成日志数据再同步到集群中其它节点。 安全性(幂…
Raft深层剖析
概述 Raft 是一种分布式共识算法,相比于 Paxos,它最大的特性就是易于理解。为了达到这个目标,Raft 主要做了两方面的事情: 问题分解:把共识算法分为三个子问题,分别是领导者选举(leaderelection)、日志复制(log replication)和安全性(safety)。 状态简化:对算法做出一些限制,减少状态数量和可能产生的变动…
网络编程深层剖析
为什么需要 EPOLLONESHOT? epoll 有两种触发的方式:LT(水平触发)和ET(边缘触发)。对于前者,只要存在着事件就会不断的触发,直到处理完成;而后者只触发一次相同事件,或者说只在从非触发到触发两个状态转换的时候才触发。 想象这样一种情况,当前是多线程在处理,一个 socket 事件到来,数据开始解析。这时候这个 socket 又来…
力扣题记之hard
LCR 078. 合并 K 个升序链表 既然每个链表都是升序的,那么合并后的第一个节点一定是某个链表的头节点 合并后的第二个节点,可能是某个链表的头节点,也可能是第一个节点的下一个节点 所以我们需要把所有可能是下一个节点的节点放在一个集合中,并且最小的可以自动浮起来,即最小堆 /** * Definition for singly-linked l…
分布式深层剖析
CAP原理 CAP原理指的是:在一个分布式系统(互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。也就是说,在分布式系统的设计中,没有一种设计可以同时满足这3个特性。 强一致性(C)…
力扣题记之动态规划
More content:LeetCode hot100@动态规划&多维动态规划 DP是由前一个状态推导而出,而贪心是在局部直接选择最优 DP五部曲: 确定dp数组以及下标的含义 确定递推公式(状态转移公式) dp数组如何初始化 确定遍历顺序 举例推导dp数组 01背包模板: for(int i = 0; i < weight.siz…