自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

原创 简介事物与隔离级别

事务的特性:原子性(Atomicity)事务中的所有操作要么全部执行,要么都不执行。一致性(Consistency)事务执行前后数据库都处于一致的状态。隔离性(Isolation)多个事务执行都感觉不到其它事务在执行。持久性(Durability)一个事务一旦被提交,所有的修改将永久保存,即使系统故障也不丢失。隔离级别

2013-01-31 13:11:33 1169

原创 PostgresQL中的NUlls first/last功能

Nulls first/last功能简介Nulls first/last功能主要用于order by排序子句中,影响空值Null在排序结果中的位置。简单来说,Nulls first表示Null值在排序时一直排在所有值的前面,也就是处理order by a desc时PostgresQL执行器认为Null值大于所有值,而order by a或order by a asc时执行器认为Null值小于

2013-01-19 17:10:38 3446

原创 算法——递归生成集合的所有组合

题目描述输入一个集合,需要生成该集合所能得出的所有组合。举例说明:若输入集合为{1,2} , 需要生成的组合有{1},{1, 2},{2} 。该题目与生成集合的全排列有很多相似之处,同样也是一个很经典的问题。解决思路在我前面的一篇文章:Gray Code实现按序产生集合的所有子集   http://blog.csdn.net/syzcch/article/det

2013-01-06 11:36:32 4139 1

原创 基于B族树的关系型数据库IO瓶颈分析

前言传统关系型数据库,也就是建立在关系模型基础之上的数据库。关系型数据库本身基于关系代数的数学理论,关系模型是70年代埃德加·科德首次提出的,而该模型成为了关系型数据库的基础。目前市面上众多的传统关系型数据库均是基于B族树实现的,至于传统关系型数据库的众多特性这里就不进行论述了,在这里只想分析一下基于B族树的传统关系型数据库的IO瓶颈。基于B族树的数据库IO瓶颈分析磁盘

2013-01-01 11:26:57 2794

转载 使用 SCTP 优化网络

简介: 流控制传输协议(Stream Control Transmission Protocol,SCTP)是一种可靠的传输协议,它在两个端点之间提供稳定、有序的数据传递服务(非常类似于 TCP),并且可以保护数据消息边界(例如 UDP)。然而,与 TCP 和 UDP 不同,SCTP 是通过多宿主(Multi-homing)和多流(Multi-streaming)功能提供这些收益的,这两种功能

2012-12-27 12:58:46 1013

转载 调试器工作原理系列三篇

基础篇关于本文我打算在这篇文章中介绍关于Linux下的调试器实现的主要组成部分——ptrace系统调用。本文中出现的代码都在32位的Ubuntu系统上开发。请注意,这里出现的代码是同平台紧密相关的,但移植到别的平台上应该不会太难。动机要想理解我们究竟要做什么,试着想象一下调试器是如何工作的。调试器可以启动某些进程,然后对其进行调试,或者将自己本身关联到一个已存在

2012-12-20 15:57:43 1689

原创 shell脚本实现某一进程是否运行结束的监控

问题描述前几天,一位朋友需要实时监控Linux系统下的某一进程,当该程序运行时则继续监控,当该程序结束时需要向终端输出一句话,并做后续操作。问题分析要监控某一进程,最新先到的就是ps 命令列出所有进程,然后grep自己想要的进程,这样经过处理就可以得到该进程是否在运行还是已经结束了运行。这个方法无疑可以实现该问题的需求,但是这里有更简单的方法,可以利用L

2012-12-14 09:15:09 11030

原创 二分查找位运算——32位整数中寻找第一个为1的位

问题描述在程序设计中经常会遇到这样一个问题,即在一个32位整数中,从右到左寻找第一个为1的位。这样的问题是很常见的,而面对这样一个问题,一种常见的解法就是逐位的遍历这个整数中的所有位,直到遇到了为1的位。若第一个为1的位出现在高位区域,逐位查找比较的方法会比较非时间。换一种思路当我们在一个数组中寻找某数的时候,我们有什么办法?简单的顺序的遍历整个

2012-12-13 09:47:50 6194 8

原创 递归生成集合的全排列

题目描述递归,生成集合的全排列,也是在笔试面试中经常考的问题。全排列问题一般要求递归或非递归的解决,非递归按序输出集合的全排列在我的另一篇博客中有介绍(http://blog.csdn.net/syzcch/article/details/8136218),这里主要介绍递归生成集合全排列的方法。递归思路递归的解这道题的方法相对于非递归的解法来说较为简

2012-12-10 09:34:10 1752

原创 小议C++中const的实现机制

问题C语言以及C++语言中的const究竟表示什么?其具体的实现机制又是如何实现的呢? 本文将对这两个问题进行一些分析,简单解释const的含义以及实现机制。问题分析简单的说const在C语言中表示只读的变量,而在C++语言中表示常量。关于const在C与C++语言中的使用以及更多的区别,以后有时间另开一贴说明。那么const究竟是如何实现的呢? 对

2012-12-02 10:10:01 6099 2

转载 用GDB调试程序总结

本文转自陈皓的博客 感谢陈皓分享 http://blog.csdn.net/haoel/article/details/2879用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比V

2012-11-21 11:19:06 1300

原创 算法——求数组中最大子数组和

题目有一输入数组,数组里面的数字都是整数,可能为正,可能为负,也可能是0,要求该输入数组中最大子数组的和。题目分析面对这样的一个问题,首先需要仔细分析问题的条件与问题所求。这个问题提供了一个输入数组,里面会有若干个元素,每个元素可以为正数,可以为负数,也可以为0。而题目要求输出该数组中最大子数组的和,注意是要求连续相邻的若干元素组成的子数组,并且保证该子数组的和最大。

2012-11-20 11:02:05 1854 4

原创 算法——字节高低位交换

问题对一个字节数据,逐个交换其高低位,例如11010001,经过0-7,1-6,2-5,3-4对应位的交换,变成10001011 。解决思路对于该问题,我们最先想到的是对原字节通过移位操作来逐位处理,使用另一个变量来存储交换后的结果。这种解决方案处理起来思路清晰,编写代码应该不难。下面是该思路对应的代码:unsigned char shift_fun1(un

2012-11-15 08:50:08 26358 15

原创 动态规划解决跳台阶问题

问题描述某互联网公司的一道面试题,题目是一个人上台阶,台阶有n级,他可以一次上1级,可以一次上2级,也可以一次上3级,问上这个n级的台阶一共有多少种上法。问题分析首先我们先归纳分析一下一些比较简单的情况:如果台阶只有1级,那么他一次就可以上去,很显然,上法只有1种;如果台阶有2级,那么他可以1-1,也可以直接上到2级,这时一共有2种上法;如果台阶有3级,那么他可以1

2012-11-13 12:52:16 3139

原创 C语言中有没有bool类型?

问题首先请大家回想一下,在你们所编写的C程序中,是否使用过bool(布尔)类型?bool类型一般用来表示真假,是程序设计中一个很基本的数据类型。但是,C语言里面并不直接支持bool类型。一些初学C语言,或者是对C语言不是很精通的朋友肯定觉得很奇怪,为什么在C++,JAVA等语言里使用的bool类型,在C语言里无法使用了呢?问题解析bool类型的变量,为0时表示为假,为非0时表示

2012-11-07 16:10:02 28823

原创 C编程小技巧——结构体强制类型转换

问题前些天看一款数据库语法解析器的代码,其中的词法分析语法解析阶段,利用一个结构体存储所解析的SQL语句的类型,然后根据这个类型将改结构体强制转换为对应的另一结构体并赋值给他,以便做进一步的执行工作。举个简单的例子:存储语法解析后数据的结构体(注意,其只有一个元素)为:struct analyse{int type;};我们约定的不同的type代表不同的SQ

2012-11-06 10:38:56 6663 3

原创 非递归,按序输出集合的全排列

题目描述非递归,按序输出集合全排列,是在笔试面试中经常考的问题。递归输出集合的全排列相对来说还是比较简单的,而非递归实现这个问题需要一些小技巧。全排列是将集合中的元素(可以为数字,可以为字符),按照字典序生成所有排列的集合,并输出这些排列。以数字集合距离,集合{1,2,3}的按序全排列为:1 2 31 3 22 1 32 3 13 1 23 2 1这样3个元

2012-11-02 12:26:27 3019 5

原创 c编程技巧——获取可用的处理器(CPU)核数

需求我们在编程时,尤其是在涉及到系统环境的程序开发中,可能会需要动态的获得当前机器中可用的CPU核数。例如,当我们需要做并行计算时,我们可能会根据CPU核数来决定并行度,因此我们需要在C程序中获得当前机器中可用的CPU核数。方法为了跨平台的需要,我们需要同时考虑在不同平台下获取机器处理器核数的方法。在这里我们考虑Linux与Windows两个平台,不同的平台有不同的方法来获取处

2012-10-29 16:24:22 19233 2

翻译 TCMalloc : Thread-Caching Malloc

http://goog-perftools.sourceforge.net/doc/tcmalloc.html作者: Sanjay Ghemawat, Paul Menage 动机TCMalloc要比glibc 2.3中的malloc(所在库为ptmalloc2),以及我测试过的其他版本的malloc要快。在2.8 GHz P4机器上,ptmalloc2大约需要300纳

2012-10-25 15:51:10 2252

转载 利用CAS操作(Compare & Set)实现无锁队列

关于CAS等原子操作在开始说无锁队列之前,我们需要知道一个很重要的技术就是CAS操作——Compare & Set,或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令。有了这个原子操作,我们就可以用其来实现各种无锁(lock free)的数据结构。这个操作用C语言来描述就是下面这个样子:(代码来自Wikip

2012-10-19 16:35:59 18630

原创 C语言利用setjmp/longjmp实现模仿C++的层次异常处理机制

传统C语言异常处理机制传统的C语言异常处理,一般情况下为被调用者通过设置不同的返回值或者设置一个表示错误的全局变量值,以代表执行正常或者是发生了各种各样的错误,异常,警告等等。而调用者则通过被调用者的返回值来判断是否发生了异常,并对异常进行处理。以下是这种处理方式的简单示例:fun1(){....int result=fun2();switch(result){case 1

2012-10-16 13:38:00 2214 1

原创 在升序数组中选取2个数,使其和等于一个输入数字n

题目描述这是一道某互联网公司的面试题,输入为一个以按升序排序好的数组和一个数字n,要求在数组中查找两个数,使得他们的和正好等于那个输入数字n。如果有多对数字的和等于n,输出任意一对即可。朴素解法使用两个变量i和j,利用两层循环遍历数组,当遇到data[i]+data[j]等于输入数字,并且i不等于j的时候,输出data[i]和data[j],即找到了所求的两个数字。下面是这种解法的代码

2012-10-16 11:12:35 2158 1

转载 Merkle Hash Tree

Merkle Hash Tree 简介上图(来自Wikipedia[1])给出了一个二进制的哈希树(二叉哈希树, 较常用的tiger hash tree也是这个形式). 据称哈希树经常应用在一些分布式系统或者分布式存储中的反熵机制(Anti-entropy),也有称做去熵的.这些应用包括 Amazon的Dynamo 还有Apache的Cassandra数据库, 通过去熵可以去做到各

2012-10-10 09:40:41 6450

原创 Oracle并行执行服务器(parallel execution servers)

Oracle并行执行服务器Oracle为所有的并行操作(并行查询,并行DML,并行DDL,并行数据加载,并行恢复,并行复制等)提供了一整套的支持机制。其中并行DDL与其他Oracle并行操作有很多相似的地方,例如都是由主执行服务器(协调者)首先分析所要执行的操作以及机器的配置,决定并行度(完成一个操作所需的并行执行服务器的数目,仅适用于内部操作)是多少,然后动态的将操作切分为子任务并获得足够多

2012-10-09 11:17:30 1557

转载 跳表SkipList 简介

. 聊一聊作者的其人其事 跳表是由William Pugh发明。他在 Communications of the ACM June 1990, 33(6) 668-676 发表了Skip lists: a probabilistic alternative to balanced trees,在该论文中详细解释了跳表的数据结构和插入删除操作。William Pugh同时还是Find

2012-10-09 09:33:54 1247

原创 关于Raid0访问性能的一点探讨

Raid0是利用两个或者多个磁盘构成的磁盘阵列,利用分片存储方式将数据散布到阵列中。使用Raid0的读写速度在理论上是要比单个盘快的,但是要具体问题具体分析,其读写速度取决于数据条纹(Stripe Size)的宽度以及每次读写请求的大小。一个重要的指标IOPS,即I/O per second,也就是每秒进行IO操作的次数。很适合数据库这样的应用场合,用来衡量随机访问的性能。计算公式为I

2012-09-24 16:35:40 1455 1

原创 Oracle 并行DDL简介

Oracle DDL的概念DataDefinition Language(DDL),数据定义语言DDL用来创建数据库中的各种对象——表、视图、索引、同义词、聚簇等如:CREATETABLE/VIEW/INDEX/SYN/CLUSTER,主要的命令有CREATE、ALTER、DROP等。DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表

2012-09-12 16:11:47 1802

原创 Gray Code实现按序产生集合的所有子集

简介Gray Code,是几十年前贝尔实验室的科学家Frank Gray提出的一种编码方案,当时主要用于传输信号以防止出错。Gray Code 除了在通信,硬件设计领域中应用以外,在计算机相关科学的其他方面也有广泛的应用,例如按序产生集合的所有子集。Gray Code实现按序产生集合的所有子集子集的按序产生,这个概念很简单,举个例子,假设我们的集合为{a,b,c},那么按序产生

2012-08-26 18:45:09 2050 1

原创 关于C语言中的宏的一点点讨论

前言:熟悉C语言的朋友应该对宏不陌生, 宏在C语言程序开发中是经常使用的,使用其的主要目的是方便程序员的编程工作,并且能在一定程度上提高程序的效率。C语言中提供的宏定义命令是#define。下面就使用宏的几个小细节进行一些讨论。1,宏中使用()在宏中,尽量多使用(),不要觉得无所谓或者觉得使用不使用没有什么影响。请切记,在宏中尽量多使用(),这样才能尽量的保证你的宏的正确性

2012-08-21 22:51:20 1152 1

原创 一道关于Linux系统下fork系统调用的面试题

相关知识:熟悉Linux平台开发的朋友应该都知道fork这个系统调用。Linux系统下,fork系统调用用于从当前进程(父进程)中创建一个新进程(子进程)。要使用fork,只需在程序中引用unistd.h库,即#include 。fork每被调用一次,产生两次值(父进程一次,子进程一次),子进程中的返回值为0,而父进程中返回值是子进程的进程号。所以通过返回值就可以判定当前进程是父进

2012-08-13 22:33:12 1951 3

Source insight v3.5

Source insight,绝对经典的写代码看代码的软件! 程序员的必备。

2009-04-14

空空如也

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

TA关注的人

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