自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

longzuo

每天都开心^_^

  • 博客(30)
  • 资源 (3)
  • 收藏
  • 关注

原创 读写锁就是恶霸和良民一起桑拿

恶霸进去桑拿房,其他人都不能再进,良民却可以共享

2020-06-18 10:51:01 137

原创 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 700

原创 hive spark等

hive是基于hdfs的一个数据库工具 可以类比为 mysql 是基于本地文件系统的数据库, hive则是基于hdfs的数据库,不太准确spark 对应于mapreduce, 但是更快,本来spark是单独于hadoop生态的,但是hadoop太强大了, spark 渐渐的基于hadoop发展了, spark的运行模式多样:Spark可运行于独立的集群模式中,或者运行于Hado...

2018-08-24 21:23:08 212

原创 itachi学习

itachi是偶然在网上看到的dirtysalt 编写的异步编程框架库 https://github.com/dirtysalt/dirtysalt.github.io/blob/master/codes/cc/itachi/itachi.cc 异步框架是用来解决什么问题的?当我们说异步框架时,一般指的是注册回调函数的方式来完成一件事,最简单的例子,比如创建一个线程就是典型的异...

2017-12-29 23:25:34 571

原创 生产者消费者问题

生产者消费者是一个典型的多线程处理模型。可以利用多处理器,提高处理效率,典型的应用场景比如, 存储服务器接收用户数据并存储此模型可以进一步分为,多生产者多消费者,多生产者单消费者,单生产者单消费者。从实现角度讲,以单生产者,单消费者举例,一般生产者和消费者各为一个线程,两个线程通过某种共享存储方式来传递数据。C++的实现一般为通过生成两个线程,共享数据可以通过一个同步队列来实现

2017-12-28 13:03:26 185

原创 Muduo 笔记

Channel类 此类代表了一个fd,并且记录了fd对应的几个callback函数,当发生read event时调用什么函数,发生write event时调用什么函数。Pooler类,此类为基类,具体函数定义参见PollPollerpooler类主要的方法为poll函数,调用内核poll函数,阻塞等待某个fd发生某种事件,之后把发生的事件,对应的fd,返回给调用者。 另外一类方法是,注册关心的f

2017-12-10 20:20:28 521

原创 HTTPS理解

https跟http相比较,采用密文来传递消息,能够防止篡改内容等。https关键就是ssl握手的过程。 概括来说,ssl握手就是用非对称加密的过程来协商一个对称密钥,然后用此对称密钥对之后的消息内容进行对称加密。

2017-10-16 21:13:37 247

原创 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 814

原创 leveldb源码学习——系统函数封装Env

Env是一个接口类,提供了基本的系统访问接口,如操作文件,线程等。 leveldb在util中实现了PosixEnv,实现上述接口首先定义了几个基本类型SequentialFile,提供顺序读方法的接口类 RandomAccessFile,提供随机读方法的接口类 WritableFile, 提供顺序写方法的接口类Env接口类定义了以下接口创建文件句柄读文件 顺序读句柄随机读句柄-创建

2017-10-03 14:59:27 629

原创 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 1317

原创 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 574

原创 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 547

原创 golang 闭包

闭包是一个匿名函数一般典型的函数跟调用者沟通的方式就两种,一种是输入输出参数,一种是全局变量。但是闭包是一种特殊的函数,可以有第三种,闭包可以access 上下文变量func outer(name string) func() { // variable text := "Modified " + name // closure. function has access to

2017-08-01 13:38:57 282

原创 消息中间件理解总结

TBC

2017-06-12 11:11:55 359

原创 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 220

原创 golang context

context是一个用来通信的信号发生器比如两个哑巴去打水,压水井在小屋里面,出水口在小屋外面,一个哑巴在里面压水,另外一个在外面接水,为了不浪费,希望接水的哑巴能及时通知压水的哑巴停止压水。问题:如何让接水哑巴及时通知压水哑巴停止压水解决方法:一根绳子,两头栓着两个哑巴,当接水的哑巴需要停止时,拉绳子,压水的哑巴就会感知到,停止压水具体流程获取一个绳子,这个绳子有两个

2017-04-02 11:47:20 982

原创 分布式系统的一些基本理论算法概述

lamport timestampslamport timestamps是分布式系统的用来为所有事件排序的一种算法。分布式系统中,可能有多个进程,单个进程中的各个事件的顺序是容易确定的,通过本地物理时钟就可以,但是不同进程间的事件顺序该如何确定呢?lamport timestamps首先确定了两个显而易见的原则:1,同一个进程中,a先发生,b后发生,则 a->b2,不同进程

2017-01-17 13:43:08 677

原创 线程池相关总结

线程可以实现任务的并发执行,线程池的实现思路是在程序启动时一次性启动很多线程,在任务到来时,直接从池中取线程执行任务,这样可以节省创建线程的开销。线程池的实现中,有几个关键点:1,每个线程启动时,需要指定一个入口函数,此函数即线程将执行的函数。但是线程生成时,并不知道要执行什么任务,此时线程入口函数将怎么设置呢?答案就是使用函数指针。线程池中各个线程的入口函数一般是同一个函数,而此函数的参

2017-01-06 15:37:35 277

原创 在海量数据中统计出现次数最多的n个

在海量数据中统计出现次数最多的n个 分两种情况,  1 如果数据能够在内存中放下,比如如果海量数据是ip地址,最多有4G个ip地址,每个ip地址占4个字节 需要内存16G,如果内存在几十G,则完全可以全部装入内存,   直接读取大文件,然后创建一个hash表,统计次数,最后再用堆统计最大的n个2  如果不能在内存放下,比如海量数据是字符串,不同的字符串个数无限,内存中可能存

2015-06-08 11:20:16 3797

原创 多路归并 外排序 大文件排序 海量数据处理

//多路归并外排序的实现//将一个保存在磁盘上的文件内的数据进行排序//基本思路是:设文件共有m*n条记录, 内存中每次可以对m条记录进行排序//则排序过程分两步://第一步:从磁盘中读入m条记录到内存; 在内存排序; 将排好序的数据写入新文件; //         重复上述过程n次 共生成n个新文件//第二步:分配一个文件指针数组 包含n个文件指针,分别指向n个新文

2015-06-08 10:35:01 2366

原创 成员初始化表的作用 实例解析

在类的初始化过程中,成员初始化表是一种更高效的方式,从下面例子可以看出以下两种初始化方法的效率区别这个例子中 MemClass是BigClass成员类,MemClass中仅包含一个int成员,我们通过一个例子来看1 类和成员类的构造函数之间的执行关系2 成员初始化表的作用BigClass的拷贝构造函数有两种定义第一种:BigClass(c

2015-05-26 10:10:02 485

原创 矩阵连乘最优次序 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 1646

原创 单源点最短路径 c++实现 分支限界算法

问题描述:在一个网(带权图)中,从指定节点出发,找到到各个节点的最短路径 分支限界思想:一个问题的解空间可以用一棵树来表示,比如此题,在此题的解空间树中,根是指定节点,任何一个节点的子女是与此节点连接的除父节点之外的所有节点。当使用分支限界思想来解决此题时,在广度遍历此树的过程中,及时对那些不可能的子树进行剪枝。用一个最小堆来存储活节点表,其key是对应节点

2015-05-25 14:06:41 3245

原创 赫夫曼编码详解

/**************************** 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 537

原创 函数栈空间

示例程序#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 457

原创 背包问题 动态规划和回溯算法

背包问题:   有n个物品   质量分别为w[n]  价值分别为v[n]   有一个最多能装c质量物品的背包,问怎么装载,才能让背包里面装的物品价值最大实际生活中遇到此类问题,一般的思路是将所有物品按照单位质量价值排序,然后从最大的开始装,其实这样并不一定能得到最优解,比如质量分别为 5 5 6  价值分别为 7 7 12    容量为10  单位质量价值分别为 7/5 7/5

2015-04-13 16:20:53 846

原创 最优装载问题 回溯算法

#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 4581

原创 拿硬币的必胜方 轮流拿硬币 最后拿的输

硬币游戏一堆硬币,共n枚,两个人轮流从其中拿出若干枚,每次只能拿1个,2个或者4个。规定最后一个拿硬币的人为输。问:在先手和后手中,谁有必胜策略?比如,最简单的情况,总共就1枚硬币,则后手有必胜策略(而且无论如何必胜),因为先手必须要拿走这一个。如果总共2枚硬币,则先手有必胜策略,即,首先拿走一个,剩下一个,则后手只能拿走最后一个,后手输。

2015-04-08 11:42:38 11154

原创 经典算法面试题及解题思路

))一个数组中有若干整数,其中只有一个数只出现奇数次次,其他数都出现偶数次,找出出现奇数次的数。O(n)      解题思路:逐个抑或))统计一个字符串中出现次数最多的字符     解题思路:count[a[i]]++;最后遍历count))求一个数组中的第N大的元素。O(n)     解题思路:参考快速排序算法 每次以支点将数组分为两部分 ,递归)

2015-04-08 10:31:47 1151

原创 要考研

好好考研 

2007-04-08 10:47:00 472

C++ 常见 面试题

C++ 常见 面试题 二十套 word格式

2010-08-23

连连看(java版)

模仿qq游戏中的连连看,具有连机功能

2007-07-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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