- 博客(30)
- 资源 (3)
- 收藏
- 关注
原创 leveldb
sst table 是leveldb存储数据的主要形式,每一个sst table 是一个文件,其中主要存储了用户数据,即k-v数据。为了快速找到待查找的key,sst文件中的数据按照key的大小有序排放,而且,还设置了索引,加快查找的效率。skip listmmt 在内存中以skip list的形式保存,skiplist提供 iterator,以及put get等功能,其put和get并...
2018-11-06 20:41:21 719
原创 hive spark等
hive是基于hdfs的一个数据库工具 可以类比为 mysql 是基于本地文件系统的数据库, hive则是基于hdfs的数据库,不太准确spark 对应于mapreduce, 但是更快,本来spark是单独于hadoop生态的,但是hadoop太强大了, spark 渐渐的基于hadoop发展了, spark的运行模式多样:Spark可运行于独立的集群模式中,或者运行于Hado...
2018-08-24 21:23:08 227
原创 itachi学习
itachi是偶然在网上看到的dirtysalt 编写的异步编程框架库 https://github.com/dirtysalt/dirtysalt.github.io/blob/master/codes/cc/itachi/itachi.cc 异步框架是用来解决什么问题的?当我们说异步框架时,一般指的是注册回调函数的方式来完成一件事,最简单的例子,比如创建一个线程就是典型的异...
2017-12-29 23:25:34 613
原创 生产者消费者问题
生产者消费者是一个典型的多线程处理模型。可以利用多处理器,提高处理效率,典型的应用场景比如, 存储服务器接收用户数据并存储此模型可以进一步分为,多生产者多消费者,多生产者单消费者,单生产者单消费者。从实现角度讲,以单生产者,单消费者举例,一般生产者和消费者各为一个线程,两个线程通过某种共享存储方式来传递数据。C++的实现一般为通过生成两个线程,共享数据可以通过一个同步队列来实现
2017-12-28 13:03:26 198
原创 Muduo 笔记
Channel类 此类代表了一个fd,并且记录了fd对应的几个callback函数,当发生read event时调用什么函数,发生write event时调用什么函数。Pooler类,此类为基类,具体函数定义参见PollPollerpooler类主要的方法为poll函数,调用内核poll函数,阻塞等待某个fd发生某种事件,之后把发生的事件,对应的fd,返回给调用者。 另外一类方法是,注册关心的f
2017-12-10 20:20:28 536
原创 HTTPS理解
https跟http相比较,采用密文来传递消息,能够防止篡改内容等。https关键就是ssl握手的过程。 概括来说,ssl握手就是用非对称加密的过程来协商一个对称密钥,然后用此对称密钥对之后的消息内容进行对称加密。
2017-10-16 21:13:37 259
原创 leveldb源码学习——Cache
Leveldb中会使用cache来提高读取性能,cache两种数据,1,file meta信息,2,data block信息。 leveldb开放了cache的接口,用户可以通过自定义cache类,完成对cache的定制化实现,另外leveldb定义了一个default cache,叫做LRU cache,在用户未实现自定义cache类时,将使用此类作为level的cache,本文脱离业务,单纯分
2017-10-07 15:04:05 829
原创 leveldb源码学习——系统函数封装Env
Env是一个接口类,提供了基本的系统访问接口,如操作文件,线程等。 leveldb在util中实现了PosixEnv,实现上述接口首先定义了几个基本类型SequentialFile,提供顺序读方法的接口类 RandomAccessFile,提供随机读方法的接口类 WritableFile, 提供顺序写方法的接口类Env接口类定义了以下接口创建文件句柄读文件 顺序读句柄随机读句柄-创建
2017-10-03 14:59:27 662
原创 leveldb源码学习——db读写流程
读流程当用户调用Get方法从leveldb中读取一个key的value时,leveldb按照memtable,imm,sst文件的顺序,依次寻找key。其中,在sst文件中搜索是通过在当前version中Get来实现的,version是sst文件的一个snapshot,可以保证版本一致,如果没有version机制,在get过程中,此key所在sst文件被合并到了其他文件中,则可能会get失败。关键代
2017-10-01 16:26:36 1348
原创 leveldb源码学习-writebatch
WriteBatch是leveldb提供批量写入的工具,writebatch中保存有若干用户的输入k-v,writebatch组织这些k-v,并最终将其写入memtable。writebatch主要的成员变量是一个string rep_,用户k-v按照以下格式保存在 rep中 writebatch类提供的主要功能包括写入一个key ,put 像rep_中增加一个k-v结构删除一个key ,de
2017-10-01 11:06:08 585
原创 LevelDb源码学习——版本管理
Version及相关的Version-set,Version-edit是leveldb中最重要的概念之一。Version保存了db中sst文件的元信息,提供对sst文件的查询等功能,另外Version还为Compact提供数据支持。Version-set是Version的集合,随着db的使用,sst文件会发生合并,新增,db呈现为不同的版本,Version-set集合了各个版本。Version
2017-09-29 12:15:53 571
原创 golang 闭包
闭包是一个匿名函数一般典型的函数跟调用者沟通的方式就两种,一种是输入输出参数,一种是全局变量。但是闭包是一种特殊的函数,可以有第三种,闭包可以access 上下文变量func outer(name string) func() { // variable text := "Modified " + name // closure. function has access to
2017-08-01 13:38:57 300
原创 c++ 11 特性随笔
thread_local 关键字thread_local 修饰的变量, 会在每个thread 中有一个拷贝,之前遇到的一个问题是在一个全局对象 g_db_access中, 有一个static 对象 query string,用于保存sql语句,在使用db access时, 会将sql语句先灌入 query string中,然后执行。当多线程并发调用g_db_access中的
2017-06-08 20:59:31 230
原创 golang context
context是一个用来通信的信号发生器比如两个哑巴去打水,压水井在小屋里面,出水口在小屋外面,一个哑巴在里面压水,另外一个在外面接水,为了不浪费,希望接水的哑巴能及时通知压水的哑巴停止压水。问题:如何让接水哑巴及时通知压水哑巴停止压水解决方法:一根绳子,两头栓着两个哑巴,当接水的哑巴需要停止时,拉绳子,压水的哑巴就会感知到,停止压水具体流程获取一个绳子,这个绳子有两个
2017-04-02 11:47:20 999
原创 分布式系统的一些基本理论算法概述
lamport timestampslamport timestamps是分布式系统的用来为所有事件排序的一种算法。分布式系统中,可能有多个进程,单个进程中的各个事件的顺序是容易确定的,通过本地物理时钟就可以,但是不同进程间的事件顺序该如何确定呢?lamport timestamps首先确定了两个显而易见的原则:1,同一个进程中,a先发生,b后发生,则 a->b2,不同进程
2017-01-17 13:43:08 704
原创 线程池相关总结
线程可以实现任务的并发执行,线程池的实现思路是在程序启动时一次性启动很多线程,在任务到来时,直接从池中取线程执行任务,这样可以节省创建线程的开销。线程池的实现中,有几个关键点:1,每个线程启动时,需要指定一个入口函数,此函数即线程将执行的函数。但是线程生成时,并不知道要执行什么任务,此时线程入口函数将怎么设置呢?答案就是使用函数指针。线程池中各个线程的入口函数一般是同一个函数,而此函数的参
2017-01-06 15:37:35 290
原创 在海量数据中统计出现次数最多的n个
在海量数据中统计出现次数最多的n个 分两种情况, 1 如果数据能够在内存中放下,比如如果海量数据是ip地址,最多有4G个ip地址,每个ip地址占4个字节 需要内存16G,如果内存在几十G,则完全可以全部装入内存, 直接读取大文件,然后创建一个hash表,统计次数,最后再用堆统计最大的n个2 如果不能在内存放下,比如海量数据是字符串,不同的字符串个数无限,内存中可能存
2015-06-08 11:20:16 3823
原创 多路归并 外排序 大文件排序 海量数据处理
//多路归并外排序的实现//将一个保存在磁盘上的文件内的数据进行排序//基本思路是:设文件共有m*n条记录, 内存中每次可以对m条记录进行排序//则排序过程分两步://第一步:从磁盘中读入m条记录到内存; 在内存排序; 将排好序的数据写入新文件; // 重复上述过程n次 共生成n个新文件//第二步:分配一个文件指针数组 包含n个文件指针,分别指向n个新文
2015-06-08 10:35:01 2387
原创 成员初始化表的作用 实例解析
在类的初始化过程中,成员初始化表是一种更高效的方式,从下面例子可以看出以下两种初始化方法的效率区别这个例子中 MemClass是BigClass成员类,MemClass中仅包含一个int成员,我们通过一个例子来看1 类和成员类的构造函数之间的执行关系2 成员初始化表的作用BigClass的拷贝构造函数有两种定义第一种:BigClass(c
2015-05-26 10:10:02 502
原创 矩阵连乘最优次序 c++实现 动态规划算法
#include const int N=4;namespace recursion{ /*p数组存储比从start到end再多一个的数,代表着m[start][end]*/int matrixChain(const int *p,int start,int end){ if(start>=end)return 0; int min=65536;
2015-05-25 14:07:19 1678
原创 单源点最短路径 c++实现 分支限界算法
问题描述:在一个网(带权图)中,从指定节点出发,找到到各个节点的最短路径 分支限界思想:一个问题的解空间可以用一棵树来表示,比如此题,在此题的解空间树中,根是指定节点,任何一个节点的子女是与此节点连接的除父节点之外的所有节点。当使用分支限界思想来解决此题时,在广度遍历此树的过程中,及时对那些不可能的子树进行剪枝。用一个最小堆来存储活节点表,其key是对应节点
2015-05-25 14:06:41 3339
原创 赫夫曼编码详解
/**************************** stack.c ***********************************************/#include #define STACK_MAX 100int stack[STACK_MAX + 1]; // 0 is not usedint top = 0, bottom = 0;void push(
2015-05-25 13:31:03 570
原创 函数栈空间
示例程序#include using namespace std;int func(int a, int b); int main(){ bool i = ""; if(i) cout<<"i="<<i; else cout<<"i!=true"; cout<<endl; func(1,2); return 1;}int
2015-04-21 10:35:29 471
原创 背包问题 动态规划和回溯算法
背包问题: 有n个物品 质量分别为w[n] 价值分别为v[n] 有一个最多能装c质量物品的背包,问怎么装载,才能让背包里面装的物品价值最大实际生活中遇到此类问题,一般的思路是将所有物品按照单位质量价值排序,然后从最大的开始装,其实这样并不一定能得到最优解,比如质量分别为 5 5 6 价值分别为 7 7 12 容量为10 单位质量价值分别为 7/5 7/5
2015-04-13 16:20:53 860
原创 最优装载问题 回溯算法
#include using namespace std;const int N=5;const int C=4;/*问题描述:n个物品 重量分别为w[1] w[2]...w[n]放入一个容量为c的背包里求可以取得的最大重量。*/class maxLoading{private:int n;//包个数int *w;//包重量数组int
2015-04-13 14:53:14 4610
原创 拿硬币的必胜方 轮流拿硬币 最后拿的输
硬币游戏一堆硬币,共n枚,两个人轮流从其中拿出若干枚,每次只能拿1个,2个或者4个。规定最后一个拿硬币的人为输。问:在先手和后手中,谁有必胜策略?比如,最简单的情况,总共就1枚硬币,则后手有必胜策略(而且无论如何必胜),因为先手必须要拿走这一个。如果总共2枚硬币,则先手有必胜策略,即,首先拿走一个,剩下一个,则后手只能拿走最后一个,后手输。
2015-04-08 11:42:38 11505
原创 经典算法面试题及解题思路
))一个数组中有若干整数,其中只有一个数只出现奇数次次,其他数都出现偶数次,找出出现奇数次的数。O(n) 解题思路:逐个抑或))统计一个字符串中出现次数最多的字符 解题思路:count[a[i]]++;最后遍历count))求一个数组中的第N大的元素。O(n) 解题思路:参考快速排序算法 每次以支点将数组分为两部分 ,递归)
2015-04-08 10:31:47 1175
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人