自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

愿岁月如歌

OS Algorithm DBMS

原创 深入理解Raft

根据Raft作者Diego Ongaro的课件整理文章目录1.Leader Election(选举leader)1.Leader Election(选举leader)主要包括:选举leader集群出现异常,选举新leaderServer States(状态)cluster成员的状态有三种:Leader:管理与CLient的交互;同一term中最多存在一个LeaderFol...

2019-08-08 22:48:43 227

原创 【Splay】学习笔记

Splay伸展树是一种特殊的BST,Splay能在Log(n)的均摊时间复杂度内完成插入、查找,删除等基本操作。基本结构struct SplayTree{ int val,sz,cnt;//val为值 sz为子树大小,cnt此位置的重叠节点个数 int s[2],f;//s[0]为左儿子 s[1]为右儿子 f为父亲};旋转1.左右儿子判断:如果 当前节点 为 ...

2018-08-29 22:00:40 150

原创 Treap

Treap是什么Treap是一棵同时满足二叉搜索树和堆性质的树,是平衡二叉搜索树,可以在O( log(n))的期望复杂度内完成各个操作。基本结构Treap的节点中比普通的BST多了一个供堆属性使用的随机权值,保证满足堆性质。struct data{ int l,r,v,size,rnd,w;}tr[100005];基本操作  1.旋转  Treap的旋转比较...

2018-08-12 12:56:43 304

原创 O(N)构造K叉哈夫曼树

构建K叉的哈夫曼树和构建二叉哈夫曼树类似,都需要每次选出节点值最小的K个,组成新节点我们使用优先队列(或者其他数据结构)的复杂度为nlogn,这里选用两个有序数组维护最小值的方式来优化每次从a,b两个数组中选择最小的k个,将他们的和加到b的尾部,这个过程能够保证a,b数组都是从小到大的 感觉和归并有点类似因为可能(n-1)%(k-1)!=0 所以可以先补充一些权值为0的节点直到...

2018-07-27 10:26:19 1156

原创 回文自动机 学习笔记

Manacher解决的问题:O(n)时间内求出字符串以每个点为中心时的最长回文长度 1.对字符串的预处理 一般为了避免无限制的匹配下去,会在开头和结尾加入未在原字符串中出现的‘#’ 一般为了方便判断,一般在原字符串的字符之间加入未在原字符串中出现的‘#’, 新串由两部分组成,新加入的‘#’字符的个数就是2*len[原串]+1,原字符串为len[原串],所以 这样新...

2018-07-26 19:06:31 793

原创 计算几何-线段相交

快速排斥:不能处理端点为交点的情况;快速排斥原理:用给出的两条线段作为各自的对角线建立矩形,如果矩形不相交,那么线段一定不相交。具体实现:假设第一条线段的两个端点分别为(p1,p2)(p3,p4);if(min(p1.x,p2.x) <= max(p3.x,p4.x)&&min(p3.x,p4.x) <= max(p1.x,p2.x)&&mi...

2018-04-16 19:12:15 305

转载 成功的背后

转载:来自CSDN第一名博主:http://blog.csdn.NET/phphot/article/details/2187505成功的背后,有着许多不为人知的故事,而正是这些夹杂着泪水和汗水的过去,才成就了一个个走向成功的普通人。  凌晨两点半,早已习惯了一个人坐在电脑前的我,望着屏幕,任思绪在暗夜的包容下静静流淌,时光仿佛又定格在三年多前的那一刻:“283 分”。那是被中国万

2017-04-26 16:36:31 868

转载 有一种感动叫ACM(记WJMZBMR在成都赛区开幕式上的讲话)

各位选手,各位教练,大家好,我是来自清华大学交叉信息学院的陈立杰,今天很荣幸站在这里代表全体参赛选手发言。对于我来说,这是我第一次正式参加ACM的比赛。不过我跟ACM之间的缘分,大概在很早的时候就已经存在了。     我还依稀记得,在我初三的时候,晚上我的一个好朋友在用手机跟妹子聊天,而我在用手机看OI和ACM的题目。自习课上我的那个朋友跟妹子一起学习,而我则翘课想去机房,有时候机房老师不

2017-03-14 05:29:33 861

原创 Redis的设计与实现-读书笔记(二)

文章目录整数集合整数集合的实现整数集合的升级压缩列表压缩列表的构成连锁更新整数集合当集合元素全是整数并且数量不多时,redis就会选择整数集合作为底层实现整数集合的实现typedef struct intset{ uint32_t encoding; //编码方式 uint32_t length; // 集合元素数量 int8_t contents[];根据encoding选择类型 ...

2019-12-12 01:51:22 28

原创 数据库面试题

文章目录MySQL的复制原理以及流程MySQL中myisam与innodb的区别,至少5点MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义问了innodb的事务与日志的实现方式MySQL binlog的几种日志录入格式以及区别MySQL数据库cpu飙升到500%的话他怎么处理?sql优化各种方法500台db,在最快时间之内重启你是如何监控你们的数据库的?你们的...

2019-12-11 12:29:02 22

原创 c++资料

extern关键字作用 static关键字作用 Volatile是什么 说说const的作用,越多越好 new与malloc区别 C++多态性与虚函数表C++多态的实现? (纯)虚函数的作用? 虚函数用于实现多态,这点大家都能答上来但是虚函数在设计上还具有封装和抽象的作用。比如抽象工厂模式。 动态绑定是如何实现的? 静态多态和动态多态。静态多态是指通过模板技术或者函数重载技术实...

2019-12-11 12:27:35 123

原创 数据结构

文章目录排序冒泡排序选择排序插入排序希尔排序快速排序归并算法堆排序计数排序最长公共子序列(LCS)树AVL树红黑树与AVL树,各自的优缺点总结B树B+树红黑树二叉树先序遍历.已知先序和中序,求后序遍历(poj2255)。二叉树转双向链表乘法哈希排序冒泡排序最简单的一种排序算法。先从数组中找到最大值(或最小值)并放到数组最左端(或最右端),然后在剩下的数字中找到次大值(或次小值),以此类推,直...

2019-12-11 12:27:15 40

原创 c++面试新资料

文章目录1.什么是虚函数?什么是纯虚函数?2.基类为什么需要虚析构函数?3.当i是一个整数的时候i++和++i那个更快?它们的区别是什么?4.vector的reserve和capacity的区别?5.如何初始化const和static数据成员?6.static 和const分别怎么用,类里面static和const可以同时修饰成员函数吗?7.指针和引用的区别8.什么是多态?多态有什么用途?10.n...

2019-12-11 12:27:09 56

原创 线程与进程的状态转换

线程的状态变换进程的状态变化

2019-12-11 12:26:50 15

原创 多路IO复用-Select,poll,epoll

文章目录1.Select2. poll3.epoll比较1.Select2. poll3.epoll比较

2019-12-11 12:26:40 35

原创 操作系统资料集锦

文章目录内存管理进程与线程调度内存管理虚拟内存 添加链接描述进程与线程调度线程与进程的区别 添加链接描述线程与进程的状态转换 添加链接描述...

2019-12-11 12:26:07 39 1

原创 New ComputerNetworking Source

文章目录网络层运输层应用层区别网络层IP添加链接描述ICMP 添加链接描述运输层UDP 添加链接描述TCP 添加链接描述NAT 添加链接描述应用层DNS协议 添加链接描述HTTPcookie与session 添加链接描述HTTP 添加链接描述HTTPS 添加链接描述DHCP 添加链接描述FTP 添加链接描述SMTP(基于FTP) 添加链接描述...

2019-12-04 15:57:46 36

原创 Redis的设计与实现-读书笔记(一)

文章目录SDSSDS的定义SDS与C风格字符串的区别链表Redis中链表的结构字典字典的实现解决键冲突处理负载因子SDSSDS的定义在Redis中使用SDS(简单动态字符串)来代替c风格字符串struct SDS{ int len,free; char buf[];}SDS与C风格字符串的区别O(1)获取SDS长度通过分析free来杜绝缓冲区溢出通过空间预分配(大于1M分...

2019-11-27 22:06:33 24

原创 操作系统内存管理_虚拟内存

文章目录虚拟内存的基本思想进程运行内存模型分页段页式存储分页和分段的区别虚拟内存的基本思想按照固定大小将进程的地址空间分为多个页面,每一个页面内部都有连续的地址.这些页被映射到物理内存,但是并不是所有的页都在内存中时程序才能运行.当程序需要已经在物理内存中的地址空间时,由硬件完成映射;当程序引用不在内存中的地址空间时,产生缺页中断,由操作系统将页面调入内存.进程运行内存模型分页地址...

2019-11-06 20:47:58 144

原创 atoi的C++实现

//支持32位下利用除法的溢出判定class Solution{public: string trim(string s) { if (s.empty()) { return s; } s.erase(0, s.find_first_not_of(" ")); s.er...

2019-11-04 11:15:59 26

原创 STL源码剖析:迭代器

目录迭代器是什么迭代器的设计如何获得迭代器指向的数据类型迭代器的五种类型迭代器内部常用的五种型别std::iterator流程总结SGI对traits进行扩展迭代器是什么迭代器是一种模式,实现了通过一个统一接口访问STL容器的方法。STL作为桥梁链接了STL算法与容器。例如,我们可以通过Sort(a.begin() , a.end())完成一次利用算法对vector类型容器a的排序。迭代器的...

2019-11-03 21:45:41 44

原创 MIT6.828 BootLoader代码分析

#include <inc/mmu.h>;bootloader完成了16位模式的初始化,包括gdt,ds,es,ss等 , 然后进入保护模式并初始化, 然后call main.c# Start the CPU: switch to 32-bit protected mode, jump into C.# The BIOS loads this code from the fi...

2019-11-01 21:13:44 81

原创 MIT6.828_2019_Lab翻译_utilities

实验:Xv6和Unix程序欢迎大家一起维护中文Lab文档!共同进步! Github这个实验将会让你熟悉Xv6和它的系统调用引导Xv6你必须使用一个X86 Athena machine;也就是说 uname -a 之后应该显示 i386 GNU/Linux or i686 GNU/Linux or x86_64 GNU/Linux。你可以登陆进一个公共的Athena host,通过使用指令s...

2019-11-01 18:12:45 642

翻译 Innodb 入门(三:锁)

文章目录lock与latchlock与latch

2019-08-27 21:27:44 17

原创 InnoDB 学习(一:InnoDB体系架构)

文章目录体系架构后台线程体系架构后台线程

2019-08-27 00:26:01 36

原创 Redis (三:持久化)

目录RDB方式快照原理AOF方式同步硬盘数据总结RDB方式rdb通过snapshot实现根据配置规则save M N 即M秒内更改了至少N个键,就持久化用户执行save或bgsave,save会阻塞client请求,bgsave是异步的不阻塞flushall若定义过save规则,则执行flushall后snapshot一次,没定义过save则不执行主从复制时快照原理redis...

2019-08-24 17:50:46 42

原创 Redis 入门(二:transaction,timeout,sort,queue,pipe)

事务:都执行或都不执行127.0.0.1:6379> multiOK127.0.0.1:6379> srem number 1 QUEUED127.0.0.1:6379> srem number 3QUEUED127.0.0.1:6379> exec1) (integer) 12) (integer) 1事务的错误处理1语法错误比如参数个数错误:全部...

2019-08-23 16:46:19 75

原创 Redis 入门(一:基本数据类型与操作)

1.redis-server启动2.命令返回值:状态,错误,整数,字符串,多字符串配置文件redis-server (文件) 来按照文件配置启动热更新配置:config set loglevel warning多数据库默认16个 select 1 选择不是独立的操作set bar 1`127.0.0.1:6379> keys pattern(empty list o...

2019-08-23 03:26:04 68

原创 golang实现选择排序,快速排序,希尔排序,堆排序,快速排序,归并排序

func max_heapify(dad int , end int , arr []int){ son := dad * 2 + 1 for son <= end{ if son + 1 <= end && arr[son] < arr[son+1]{ son = son + 1 } if arr[dad] >= arr[son]{...

2019-08-16 22:40:59 32

转载 进程 线程 协程

进程时代image后来,现代化的计算机有了操作系统,每个程序都是一个进程,但是操作系统在一段时间只能运行一个进程,直到这个进程运行完,才能运行下一个进程,这个时期可以成为单进程时代——串行时代。和ENIAC相比,单进程是有了几万倍的提度,但依然是太慢了,比如进程要读数据阻塞了,CPU就在哪浪费着,伟大的程序员们就想了,不能浪费啊,怎么才能充分的利用CPU呢?后来操作系统就具有了...

2019-08-16 02:29:15 26

原创 golang实现C++中upper_bound & lower_bound

package main/*在从小到大的排序数组中,lower_bound( begin,end,num, flag=true):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的index,不存在则返回end upper_bound( begin,end,num, flag=true):从数组的begin位置到end-1位置二分查找第一个大...

2019-08-15 17:28:20 563

转载 Raft中文论文——寻找一种易于理解的一致性算法(扩展版)

寻找一种易于理解的一致性算法(扩展版)摘要Raft 是一种为了管理复制日志的一致性算法。它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得 Raft 算法更加容易理解并且更容易构建实际的系统。为了提升可理解性,Raft 将一致性算法分解成了几个关键模块,例如领导人选举、日志复制和安全性。同时它通过实施一个更强的一致性来减少需要考虑的状态的数量。从一个用户研...

2019-08-11 15:22:17 76

转载 MapReduce中文版论文

文章目录摘要1.介绍2.编程模型2.1 实例2.2类型2.3更多实例3.实现3.1执行预览3.2master数据结构3.3容错3.4存储位置3.5任务粒度3.6备用任务4.技巧4.1分割函数4.2顺序保证4.3combiner函数4.4输入输出类型4.5副作用4.6跳过错误记录4.7本地执行4.8状态信息4.9计数器5.性能5.1机群配置5.2Grep5.3排序5.4备用任务的影响5.5机器失效6...

2019-08-07 12:49:48 211

原创 fpTree的c++实现

1.构造FP-Tree2.标记条件模式基3.得出满足支持度要求的频繁项集重复执行2和3#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+10;struct Node//fptree节点{ Node *father; int nu,val,use; vector&...

2019-05-15 19:32:22 317

原创 单链表/双向链表/单链表反转/双向循环链表

单链表#include <bits/stdc++.h>using namespace std;struct Node{ int val; Node* next;};void Create(Node* head){ int n; cin >> n; Node *head1 = head; for(int i ...

2019-03-20 17:45:14 131

原创 《计算机网络-自顶向下方法》第二章-应用层 学习笔记①

2.1应用层协议原理2.1.1网络应用程序体系结构:客户-服务器结构 , 对等(p2p)结构(自扩展性)、2.1.2进程通信:通过交换报文。客户和服务器进程;进程与计算机网络的接口(套接字即应用程序编程接口API);进程寻址:需要①主机的地址(因特网使用IP)②定义目的主机中接收进程的标识符(端口号)2.1.3 可供应用程序使用的运输服务(运输协议)可靠数据传输:即实...

2019-03-18 15:15:45 209

原创 《深入理解计算机系统》第二章-信息的表示和处理 学习笔记①

1.信息存储虚拟内存被视为字节数组,每个字节都有唯一的数字(即它的地址)来标识;地址的集合即为虚拟地址空间;指针包括值和类型:值表示某个对象的位置,类型表示那个位置所存储的对象的类型1.1十六进制:在c语言中0x,0X开头的数字常量被认为是十六进制1.2字数据大小字长:字长为x的机器,虚拟地址范围为0-2^x - 11.3寻址和字节顺序大端法:最高有效在前...

2019-03-16 17:26:30 156

原创 《深入理解计算机系统 》第一章-计算机系统漫游 学习笔记①

文本文件:只由ASCII字符组成的文件二进制文件:除文本文件外的所有文件所有信息都是一串比特,区分比特当前含义的唯一方法就是上下文GCC翻译.c文件过程1.预处理阶段:处理#开头的命令,导入命令内容修改.c为.i2.编译阶段:编译器把.i翻译成汇编语言程序3.汇编阶段:.s被汇编器翻译成机器语言指令,并把指令打包为可重定位目标程序,保存在二进制文件.o中4.链...

2019-03-15 17:25:29 53

原创 分布式系统Raft算法

在分布式系统中,多个服务器要保持consensus,这是不容易实现的,因为个别服务器的故障是随时可能出现的,所以在出现故障时我们需要有一种方案来保证分布式系统在多种情况下都能保持consensus 因为多个服务器的情况是复杂的,所以不可能让所有服务器达成一致,所以超过一半的服务器达到一致就可以了 Raft算法中有三种角色: 1.Follower:主服务器的追随者 2.L...

2019-03-14 17:05:10 114

原创 树链剖分基本原理

树链剖分本质上就是将一棵树拆分为多条树链,并按照一定的规则进行有规律的存储,简化我们树上的操作。几个定义:size(k) : 以k为根节点时,k的子树的节点个数。重儿子:u的子节点中size()最大的点轻儿子:除了重儿子,剩余的节点都为轻儿子重边:若根节点为u,u的重儿子为v,则(u,v)为重边轻边:除了重边,剩余的边都为轻边重链:链上的所有边都为重边需...

2019-03-12 15:58:32 66

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