- 博客(90)
- 资源 (14)
- 收藏
- 关注
原创 SQLite学习笔记(17)-B-tree(3)
2.5.3 页面重用及回收(PageReuse and Vacuum ) SQLite利用一个freelist进行页面回收。当一个页面的所有记录都被删除时,就被插入到该列表。当运行VACUUM命令时,会清除freelist,所以数据库会缩小,本质上它是在新的文件重新建立数据库,而所有使用的页在都被拷贝过去,而freelist却不会,结果就是一个新的,变小的数据库。当数据库的autovacuum开
2015-09-04 16:31:22
1492
原创 SQLite学习笔记(16)-B-tree(2)
2.5.2 B-tree结构形式 SQLite利用B-tree来组织数据库。一个数据库中含有许多B-tree,每个表和索引都有一个B-tree,其中表利用b+tree来实现,而索引是利用b-tree来实现的。 2.5.2.1 B-tree B-tree是一种多路搜索树,一颗M阶的b-tree,或为空树,或者: 1. 定义任意非叶子结点最多只有M个儿子;且M>2; 2.
2015-09-04 16:28:14
1394
原创 SQLite学习笔记(15)-B-tree(1)
B-Tree B-tree的主要功能就是索引,它维护着各个页面之间的复杂的关系,便于快速找到所需数据。 B-Tree使得VDBE可以在O(logN)下查询,插入和删除数据,以及O(1)下双向遍历结果集。B-Tree不会直接读写磁盘,它仅仅维护着页面 (pages)之间的关系。当B-TREE需要页面或者修改页面时,它就会调用Pager。当修改页面时,pager保证原始页面首先写入日志文件,当它完
2015-09-04 16:21:34
3814
原创 SQLite学习笔记(14)-虚拟机
虚拟机(Virtual Machine) VDBE是SQLite的核心,它的上层模块和下层模块都是本质上都是为它服务的。它的实现位于vbde.c, vdbe.h, vdbeapi.c, vdbeInt.h, 和vdbemem.c等几个文件中。它通过底层的基础设施B-Tree执行由编译器(Compiler)生成的字节代码,这种字节代码程序语言 (bytecode programming laugu
2015-09-04 16:15:33
883
原创 SQLite学习笔记(13)-事务(2)
2.3.5 锁和崩溃恢复 SQLite的锁是基于标准文件锁实现的。SQLite在数据库文件上持有三种不同的文件锁:a reserved byte, a pending byte, and a shared region(图2.5)。 图2.5 锁的机制 它们都是从pending byte开始。如图2.4所示,为了从UNLOCKED移动到SHARED,一个连接在pendingbyte会
2015-08-27 11:58:43
568
转载 SQLite学习笔记(12)-事务(1)
2.3 事务(Transaction) 在SQLite的query执行过程中,事务以及锁操作总是必不可少的。Query总是在事务之中执行,而事务中总是少不了锁操作,但对锁的操作不当的话就可能引起问题。 2.3.1 事务的周期 程序与事务之间有两件事值得注意: (1) 哪些对象在事务下运行——这直接与API有关。 (2) 事务的生命周期,即什么时候开始,什么时候结束以及它在什么时
2015-08-26 20:37:28
752
原创 Sqlite学习笔记(11)-API(2)
2.2.3 执行Prepared Query 前面提到,预处理查询(Prepared Query)是SQLite执行所有SQL命令的方式,包括以下三个过程: (1)Preparation 分析器(parser),分词器(tokenizer)和代码生成器(code generator)把SQL Statement编译成VDBE字节码,编译器会创建一个statement句柄(sqlite3_stm
2015-08-25 17:16:31
868
原创 Sqlite学习笔记(10)-API(1)
API API由两部分组成: 核心API(core API) 和扩展API(extension API) 核心API的函数实现基本的数据库操作:连接数据库,处理SQL,遍历结果集。它也包括一些实用函数,比如字符串转换,操作控制,调试和错误处理。 扩展API通过创建你自定义的SQL函数去扩展SQLite。 2.2.1 主要的数据结构 SQLite由很多部分组成-parser, tokeniz
2015-08-25 17:14:17
624
转载 SQLite学习笔记(9)-SQLite的简单使用
SQLite的简单使用 3.1 建立数据库 C:\sqlite> sqlite3.exe dbname.db sqlite3.exe后面跟数据库文件名 3.2 创建数据表 sqlite> create table users(userid varchar(20) PRIMARY KEY, ...> age int, ...> birthday datetime);
2015-08-24 16:31:28
787
原创 SQLite学习笔记(8)-SQLite编译
Windows平台的编译-利用VS2010 (1)编译生成lib文件 a) 下载SQLite3.8.11.1的源代码http://www.sqlite.org/sqlite-amalgamation-3081101.zip,解压sqlite-amalgamation-3081101.zip到其目录。 b) 打开VS2010,新建一个VC++类型的项目,选择Win32项
2015-08-23 21:52:53
785
原创 SQLite学习笔记(7)-源代码整理
文件名称 大小 分属 备注 Btmutex.c 9047 Btree 实现btree的mutexes Btree.c 335610 Btree btree的主要实现 Btree.h 9955 Btree btree的头文件 btreeInt.h 32429 Btree 用btree实现了一个外部数据库 Os.c 11
2015-08-23 11:42:27
1730
原创 SQLite学习笔记(6)-SQLite架构
SQLite采用了模块的设计,它由三个子系统,包括8个独立的模块构成。 图2.1 SQLite架构图 接口(Interface) 接口由SQLite C API组成,也就是说不管是程序、脚本语言还是库文件,最终都是通过它与SQLite交互的。 编译器(Compiler) 在编译器中,分词器(Tokenizer)和分析器(Parser)对SQL进行语法检查,然后把它转化为底层能更
2015-08-23 11:39:49
1305
原创 SQLite学习笔记(5)-资料整理
SQLite学习过程中所使用的一些资料 SQLite官方社区 SQLite维基百科 SQLite菜鸟教程 SQLite学习手册 SQLite源码剖析 SQLite剖析系列 SQLite入门与分析
2015-08-23 11:31:38
827
原创 SQLite学习笔记(4)-数据库基本操作
创建数据库 SQLite中创建数据库的命令如下: $sqlite3 DatabaseName.db 该命令会创建名为Database的数据库,若该数据库已存在,则打开它。 一般情况下,数据库名称应该是唯一的。 实例 D:\SQLite>sqlite3 tmp.db SQLite version 3.8.11.1 2015-07-29 20:00:57 Enter ".help"
2015-08-20 14:53:02
1094
转载 SQLite学习笔记(3)-SQLite数据类型
SQLite 数据类型 SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。 您可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关。 SQLite 存储类 每个存储在 SQLite 数据库中的值都具有以
2015-08-19 21:50:53
746
原创 SQLite学习笔记(1)-安装及其点命令
SQLite安装 在Windows上安装SQLite 访问点击进行下载,从Windows区进行下载 下载 sqlite-shell-win32-*.zip 和 sqlite-dll-win32-*.zip 压缩文件 从D盘下创建文件夹D:\SQLite,并将下载的二个压缩文件解压在此,将得到sqlite3.def、sqlite3.dll 和 sqlite3.exe 文件
2015-08-18 13:37:28
10105
转载 如何创建守护进程
守护进程 在linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进程。为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统。 守护进程是脱离于终端并且在后台运行的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。 守
2014-09-20 15:20:32
605
转载 系统调用原理
1什么是系统调用 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。 从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求
2014-09-20 14:44:20
696
转载 C函数调用与堆栈的变化
感想:这个的堆栈的图示画的还是非常好的。。。。。。。,反汇编的注释也是相当通俗易懂,就是纳闷,我的反汇编的代码为嘛不好复制出来呢,本来想自己写这篇文章的~~~ 这几天突然很想弄明白c函数调用时栈的使用情况,上网查了一下资料,自已也研究了一下,这篇blog就把我的所得记录下来吧。 这篇blog试图讲明当一个c函数被调用时,一个栈帧(stack frame)是如何被建立,又如何被消除的。这些
2014-09-20 14:31:22
743
转载 教你透彻了解红黑树
教你透彻了解红黑树 作者:July、saturnman 2010年12月29日 本文参考:Google、算法导论、STL源码剖析、计算机程序设计艺术。 推荐阅读: Left-Leaning Red-Black Trees, Dagstuhl Workshop on Data Structures, Wadern, Germany, Fe
2014-09-17 21:36:27
536
转载 硬链接与符号链接的区别
对于一个文件来说,有唯一的索引接点(inode)与之对应,而对于一个索引接点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问该文件。注意在Linux下是一切皆文件的啊,文件夹、新加的硬盘 ...都可以看着文件来处理的啊。 连接有软连接和硬连接(hard link)之分的,软连接(symbolic link)又叫符号连接。符号连接相当于Windows 下
2014-09-16 10:38:34
2493
转载 最大全1子矩阵
题目描述: 在一个M * N的矩阵中,所有的元素只有0和1,从这个矩阵中找出一个面积最大的全1子矩阵,所谓最大是指元素1的个数最多。 输入: 输入可能包含多个测试样例。 对于每个测试案例,输入的第一行是两个整数m、n(1 矩阵共有m行,每行有n个整数,分别是0或1,相邻两数之间严格用一个空格隔开。 输出: 对应每个测试案例,输出矩阵中面积最大的全1子矩阵的元素个数。 样
2014-09-11 21:35:44
1019
转载 【C++专题】static_cast, dynamic_cast, const_cast探讨
首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况: 1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。 int ival = 3; double dval = 3.14159;
2014-09-08 14:55:44
400
原创 kmp算法的实现
#include #include #include //计算next数组 void get_next(char *pstr, int next[]) { int len = strlen(pstr); next[0] = -1; int pre = -1; int post = 0; while (post < len - 1) { if (pre == -1 || ps
2014-09-08 10:02:09
541
转载 Linux中常用操作命令
Linux简介及Ubuntu安装 Linux,免费开源,多用户多任务系统。基于Linux有多个版本的衍生。RedHat、Ubuntu、Debian 安装VMware或VirtualBox虚拟机。具体安装步骤,找百度。 再安装Ubuntu。具体安装步骤,找百度。 安装完后,可以看到Linux系统的目录结构,见链接http://www.cnblogs.com/laov/p/3409875.ht
2014-09-05 14:33:35
630
原创 双向链表的基本操作
双向链表 用C++实现一个双向链表(元素类型为int),需支持 a、两个链表之间的深拷贝 b、两个链表的拼接 c、从链表头插入/删除元素 d、查找链表中的某个元素 e、返回链表中指定下标的元素
2014-09-04 16:01:23
683
转载 荷兰国旗问题
问题描述: 我们将乱序的红白蓝三色小球排列成有序的红白蓝三色的同颜色在一起的小球组。这个问题之所以叫荷兰国旗,是因为我们可以将红白蓝三色小球想象成条状物,有序排列后正好组成荷兰国旗。如下图所示: 这个问题,类似快排中partition过程。不过,要用三个指针,一前begin,一中current,一后end,俩俩交换。 1、current遍历,整个数组序列,current指
2014-09-03 15:20:38
730
原创 面试中的一些字符串操作
//字符串转整形 int str_to_int(char str[]) { int num, i = 0, flag = 0; if (str[i] == '+' || str[i] == '-') { if (str[i] == '-') flag = 1; ++i } for (num = 0; str[i] != '\0'; ++ i) { num = 10 *
2014-09-01 18:43:53
619
转载 从Trie树(字典树)谈到后缀树
从Trie树(字典树)谈到后缀树 作者:July、yansha。 出处:http://blog.youkuaiyun.com/v_JULY_v 。 引言 常关注本blog的读者朋友想必看过此篇文章:从B树、B+树、B*树谈到R 树,这次,咱们来讲另外两种树:Tire树与后缀树。不过,在此之前,先来看两个问题。 第一个问题: 一个文本文件,大约有一万行,每
2014-09-01 11:08:38
558
原创 求二叉树中节点的差的最大值
写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差 最大的两个节点间的差值绝对值。请注意程序效率。
2014-08-29 20:59:15
1015
原创 求最长公共子串
给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如, query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。 int str_max(char *text, char *query)
2014-08-29 20:54:31
610
转载 阿里巴巴集团2014校园招聘笔试题(9月22北京)
第一部分 单选题(前10题,每题2分;后10题,每题3分。选对得满分,选错倒扣1分,不选得0分) 1、一次内存访问,SSD硬盘访问和SATA硬盘随机访问的时间分别是() A、几微秒,几毫秒,几十毫秒 B、几十纳秒,几十微秒,几十毫秒 C、几十纳秒,几十微秒,几十毫秒 D、几微秒,几十微秒,几十毫秒 2、8进制数256,转化成7进制数是
2014-08-29 16:37:58
2002
转载 常见的字符串面试问题(二)
1)写出在母串中查找子串出现次数的代码. int count1(char* str,char* s) { char* s1; char* s2; int count = 0; while(*str!='\0') { s1 = str; s2 = s; while(*s2 == *s1&&(*
2014-08-28 21:43:30
782
转载 常见的字符串面试问题(一)
一、整数与字符串之间的相互转换 1.将字符串转换成整数 例如有一字符串str[]=“1234”,最直观的转换方法就是依次将每一个字符转换成相应的数字,然后乘10累加,即((1*10+2)*10+3)*10+4。想要得到每一位相应的数字,只需用每个字符减去数字0的ASCII码,即2= str[1]-'0'。 如果字符串首字符标示的是一个负数,即str[0]=='-'
2014-08-28 21:42:04
511
转载 笔试题—黑板上1—50
在黑板上写下50个数字:1至50。在接下来的49轮操作中,每次做如下操作:选取两个黑板上的数字a和b,擦去,在黑板上写|b-a|。请问最后一次动作之后剩下的数字可能是什么?为什么?
2014-08-28 10:44:00
1526
转载 二叉树中的那些常见的面试题
关于二叉树 二叉树作为树的一种,是一种重要的数据结构,也是面试官经常考的东西。昨天看了一下关于树中的面试题,发现二叉树中的面试题比较常见的题型大概有下面几个:创建一颗二叉树(先序,中序,后序)、遍历一颗二叉树(先序,中序,后序和层次遍历)、求二叉树中叶子节点的个数、求二叉树的高度、求二叉树中两个节点的最近公共祖先、打印和为某一值的全部路径、求某一节点是否在一个树中等等。 再详细的说这些面试
2014-08-28 09:38:43
769
原创 二叉树的基本操作
#include #include #include using namespace std; int cur; typedef struct binarytree { int value; struct binarytree *lchild; struct binarytree *rchild; }node; //先序建立二叉树 node *creat(node *p, int
2014-08-28 09:34:48
563
原创 折半查找算法的实现
#include int find_mid(int array[], int n, int input) { int low = 0, high = n - 1; int mid; if (n < 1) return -1; while (low <= high) { mid = (low + high) / 2; if (array[mid] == input)
2014-08-27 20:20:51
828
ARM® Workbench IDE 4.0 版 用户指南
2013-06-05
C语言编程规范
2014-06-19
RealView? Debugger 用户指南
2013-06-05
SQLite3.8.11.1聚合版源代码
2015-08-26
SQLite3.8.11.1源代码
2015-08-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅