自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (3)
  • 收藏
  • 关注

原创 leetcode:Longest Increasing Subsequence

Given an unsorted array of integers, find the length of longest increasing subsequence.For example,Given [10, 9, 2, 5, 3, 7, 101, 18],The longest increasing subsequence is [2, 3, 7, 101], ther

2016-07-05 10:36:31 385

原创 自制动态语言Medusa的解释器

今天整理了一下学习编译原理时,实现语言Medusa时写的笔记,搞出了一篇类似说明文档的东西,介绍下Medusa语法部分Medusa是一门动态脚本语言,语法和代码格式借鉴Python,运行代码在顶层书写。Medusa不识别':' ';'等符号,但识别white spcae和换行符,用户编程注意:1 + -9:执行结果是-81 + - 9:语法分析错误

2016-05-06 10:58:31 1442

原创 leveldb学习:Cache

leveldb自己实现了cache缓冲区替代算法,参见代码cache.h和cache.c文件。leveldb中table_cache等都是以class cache作为底层实现。 cache.h中,我们看到cache类是一个抽象类,声明了lookup;insert;release;value;erase等函数,同时声明了一个全局函数extern Cache* NewLRUCache(size_t c

2015-08-29 17:19:32 1079

原创 leveldb学习:Memtable和Varint

Memtable:Memtable是leveldb数据在内存中的存储形式,写操作的数据都会先写到memtable中,memtable的size有限制最大值(write_buffer_size)。memtable的底层数据结构是skiplist,class memtable完成的只是key-value的打包和调用底层跳表的接口。 首先看看Memtable的成员变量: //实例化跳表模板 typ

2015-08-24 19:28:51 1466

原创 leveldb学习:skiplist

leveldb中的memtable只是一个封装类,它的底层实现是一个跳表。跳表是一种基于随机数的平衡数据结构,其他的平衡数据结构还有红黑树、AVL树,但跳表的原理比它们简单很多。跳表有点像链表,只不过每个节点是多层结构,通过在每个节点中增加向前的指针提高查找效率。如下图: 在/leveldb/db文件夹下有跳表的实现skiplist.h和跳表的测试程序skiplist_test.cc。temp

2015-08-23 23:09:40 1332 1

原创 leveldb学习:Env

考虑到移植以及灵活性,leveldb将系统相关的处理(文件/进程/时间)抽象成Evn,用户可以自己实现相应的接口,作为option传入,默认使用自带的实现。 解压目录/util/中放有env的声明和实现代码。env.h中声明了:虚基类env,在env_posix.cc中,派生类PosixEnv继承自env类,是leveldb的默认实现。虚基类WritableFile、SequentialFi

2015-08-22 16:28:43 1865 1

原创 leveldb学习:内存池Arena

和SGI版的STL一样,leveldb内存分配也采用了memory pool的整理方式,减少内存不断分配释放过程中造成的空间零碎化和浪费。leveldb的内存池实现可参见arena.h和arena.cc,有关内存池的测试代码有arena_test.cc。arena内存池是leveldb的关键组件,是很多其他功能模块(class)的成员,在cache、memtable、table组件中均有使用。 先

2015-08-21 16:13:05 1752

原创 leveldb学习:DBimpl

leveldb将数据库的有关操作都定义在了DB类,它负责整个系统功能组件的连接和调用,是整个系统的脊柱。level::DB是一个接口类,真正的实现在DBimpl类。 作者在文档impl.html中描述了leveldb的实现,其中包括文件组织、compaction和recovery等等。DBimpl的成员变量包括:字符比较器internal_comparator_、配置类options_、bool型

2015-08-20 17:30:13 1064

原创 leveldb学习:Versionedit和Versionset

VersionEdit:compact过程中会有一系列改变当前Version的操作(FileNumber增加,删除input的sstable,增加输出的sstable),为了缩小version切换的时间点,将这些操作封装成versionedit,compact完成时,将versionedit中的操作一次应用到当前version即可得到最新状态的version。 versionedit的成员变量:

2015-08-16 16:19:27 2895

原创 leveldb学习:Version

到此为止,基本上leveldb的主要功能组件都已经分析完了,下面如何把它们组合在一起形成一个高效稳定的数据库,这就是DBimpl类和compact进程的工作。campact进程为了均衡读写的效率,sstable文件分层次(level)管理,db预定义了最大的level值。compact负责将memtable持久化成sstable,以及均衡整个db中各level的sstable。版本控制当执行

2015-07-24 16:51:13 1732

原创 leveldb学习:sstable(2)

block_builderblock.h和.cc里定义了block的entry存储格式和restart,提供了entry的查找接口以及迭代器。那么如何往写block里写entry呢?leveldb遵循面向对象的设计理念在block_builder类里提供了相关接口。

2015-07-22 17:11:28 854

原创 leveldb学习:sstable(1)

memtable是k-v数据在内存中的存储对象,当内存中的memtable达到一定的大小时,就需要dump到磁盘中,而sstable就是数据在磁盘中的存储对象,今天看看leveldb的table对象。有关部分代码在leveldb源码文件下的table文件夹内。

2015-07-20 21:53:47 916

原创 leveldb学习:测试代码续

通过上篇博客,我知道了leveldb的测试程序主函数是如何利用宏TEST和容器tests调用测试程序,今天来看看测试程序,也就是写进_Test_name类的_Run( )究竟实现了什么。

2015-07-17 21:14:48 865

原创 leveldb学习:测试代码

leveldb中带有了大量的测试程序,凡是文件命名中带有_test的文件都是测试代码。就我的理解,阅读测试代码非常要,因为作为一个库,leveldb并不带有main函数,这也不利于我们理解leveldb的结构和流程,而测试代码相当程度上弥补了一点。并且,作为一个在校学生,我们在平时的项目中也极少考虑过写测试代码,今天我就抛砖引玉,以我的水平来剖析下leveldb的测试部分。 leveldb的测试代

2015-07-16 23:14:01 2008

原创 如何利用VS的代码优化和openmp并行计算提高程序运行速度

以前利用多线程为拥有较大量计算的程序提速过,但也深知多线程的同步和程序的调试是一大坑,最近为实验室的项目学习了一点VS下优化代码的设置以及利用openmp加速运算,都是些很基本的提升程序速度的方法,只要稍微修改下代码和设置,就可使程序加速。配合多线程,经过clock()函数验证,我的程序运行可提高60%的速度

2015-07-15 22:43:18 6745

原创 利用C++文件流进行数据块的读写

科研项目上遇到一个文件流的读写问题,要把一个图片像素大小(1392*1038)的矩阵(double型)数据写入磁盘,一开始是用ofstream将数据逐个写入txt文件中,这样做的结果就是写出的文件太大,不利于存储和转移,而且读写速度奇慢,很影响后续工作的速度。还好最近看了leveldb的源码,知道用ofstream的read、write函数将内存中的一块数据与磁盘进行读写。尝试了下,虽然速度和文件的

2015-07-14 10:42:55 2715

原创 leveldb学习开篇

打算研究生在读期间好好学习下leveldb的源码,期望能够从中感悟一下现代软件的开发流程和设计模式,体验一下google编程规范,不得不承认leveldb源码写得很有美感,最后最重要的当然是希望从中进一步理解C++语言的精髓。下面贴两篇博客,一篇是leveldb的使用说明和编程入门,另一篇是我觉得写得很好的leveldb内部结构剖析,两篇博客作为学习leveldb的开始,很不错,日后会更新自己

2015-06-16 22:06:03 1603

原创 C++对象模型之默认构造函数的构造操作,拷贝构造函数同

一个类,如果没有任何的用户声明的的构造函数,那么会有一个默认的构造函数被隐式地声明出来。这个被隐式声明的构造函数,究竟什么时候被合成、被编译器合成的默认构造函数究竟执行怎么样的操作,编译器如何处理用户定义的构造函数,见下:1)类的成员变量带有默认构造函数 (带有default constructor的member class object),合成的default constructor只调

2015-06-15 22:50:13 413

转载 .h和.cpp区别

关于头文件和源文件的分别 首先,我们可以将所有东西都放在一个.cpp文件内. 然后编译器就将这个.cpp编译成.obj,obj是什么东西? 就是编译单元了.一个程序,可以由一个编译单元组成,也可以有多个编译单元组成. 如果你不想让你的源代码变得很难阅读的话, 就请使用多个编译单元吧.(一个函数不能放到两个编译单元里面,但两个以上 就可以分别放在一个单元,也就是cpp里面)

2015-05-22 16:51:47 460

原创 #pragma once 与#ifndef,#define,#endif的差别 、重复定义等相关问题

.cpp文件是一个编译单元,obj文件是编译的输出文件,链接是将所有地obj文件链接起来组成一个exe。链接过程中如果有不同的cpp文件中包含相同的函数名,变量名(注意不包括变量的引用、函数的声明、以及static函数和变量),链接将会报重复定义的错误,很多时候如果把函数和变量的定义写在.h文件,多个cpp包含此.h文件,就极可能会发生这样的错误,所以应该实现写在.cpp中,在.h中声明。有一种情

2015-05-22 15:57:13 1086

转载 模板类和友元函数

模板类的友元分3类:非模板友元约束(bound)模板友元,即友元的类型取决于类被实例化时的类型。非约束(undound)模板友元,即友元的所有具体化都是类的每一个具体化的友元。1.模板类的非模板友元函数templateclass HasFriend{ friend void counts();  //friend to all HaFriend inst

2015-05-22 09:45:32 451

转载 Linux中/etc/init.d

init.d目录包含许多系统各种服务的启动和停止脚本。它控制着所有从acpid到x11-common的各种事务。(acpid 是linux操作系统新型电源管理标准 ;X11也叫做X Window系统,X Window系统 (X11或X)是一种位图显示的视窗系统 。它是在 Unix 和 类Unix 操作系统 ,以及 OpenVMS 上建立图形用户界面的标准工具包和协议,并可用于几乎已有的现代操作系统

2015-05-19 22:21:49 357

原创 多线程编程里如何运用CreateMutex,WaitForSingleObject,ReleaseMutex来实现线程同步

多线程编程里如何运用CreateMutex,WaitForSingleObject,ReleaseMutex来显现线程同步

2015-03-28 15:31:00 1156

原创 opencv库cvProjectPoints2函数遇到的问题

将摄像机的内外参标定好之后,今天用opencv库的cvProjectPoints2的函数计算反投影,得到标定误差,发现误差正常,但是自己用matlab通过矩阵运算得到的误差大的惊人,最后经过几番对cvProjectPoints2和成像模型的研究,发现真正的成像方程是Zc*Mm = K*[R T]*Mw ,很多文章为了推理过程简洁,忽略了这一点,而基于opencv库的标定程序又不输出Zc的值,结果自

2015-03-11 21:04:03 5967 2

摄像机标定-畸变校正-梯形修正软件

采用opencv库利用张正友的摄像机标定方法对图像进行畸变校正,内容涉及边缘提取、内参获取,畸变系数获取以及畸变校正,最后还加入了一个图像中的梯形变化修正的功能,形成了一个小型的摄像机校正软件,内附图片,结果对大畸变图像有很好的校正效果。

2014-10-20

波形采集存储回放系统

这是我做的电设校赛题目,用的是MSP430F149DE 开发板,里面对信号频率和幅值的处理算法、430内部ADC12 ,TIMERA中断的使用和flash区的读写代码很值得初学者借鉴,希望对大家有帮助,开发环境为IAR

2013-05-14

波形采集 存储 回放系统

这是我做的电设校赛题目,用的是430开发板,所以程序整体复制没什么意义,但里面对信号频率和幅值的处理算法和430内部ADC12 ,TIMERA中断的使用很值得430的初学者借鉴,希望对大家有帮助。

2013-05-14

空空如也

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

TA关注的人

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