c/c++
wxliu1989
这个作者很懒,什么都没留下…
展开
-
各种hash 函数
常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。 常用字符串哈希函数有 BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等。对于以转载 2014-08-06 13:46:06 · 503 阅读 · 0 评论 -
堆的建立与堆排序
http://ahalei.blog.51cto.com/4767671/1425314http://ahalei.blog.51cto.com/4767671/1427156转载 2014-09-05 13:34:07 · 382 阅读 · 0 评论 -
epoll的事件解释
epoll编程终结者在陆续写了《epoll模型编程的几个问题》《epoll模型编程的几个问题2》后,发现epoll有些不理解的地方。今天,深入了解了epoll的事件机制,发现epoll有两种事事件触发机制。一是边沿触发(edge triggered),一是电平触发(levle triggered)。写文一篇《epoll编程终结者》,以总结并终结之epoll的核心就是其事件机转载 2014-06-19 16:21:14 · 609 阅读 · 0 评论 -
Linux网络编程三:非阻塞epoll
Epoll引入Epoll在linux 2.6内核中引入,替代了以前的select/poll模型,能够充分支持linux下的大规模并发网络程序。Epoll和其他linux下并发网络程序对比PPC典型的Apache模型,Process Per Connection,为每一个新的连接创建一个进程进行相关的处理。TPCThread Per Connection,为每一个新的连接创建转载 2014-07-17 22:44:36 · 1052 阅读 · 0 评论 -
Linux 网络编程一:基本阻塞通信
基本流程服务器端声明句柄fd和网络地址sockaddr_in赋值sockaddr_in为服务器的端口和INADDR_ANY表明监听任意连接调用socket函数创建一个socket并赋值句柄为fd调用bind函数将句柄fd和网络地址sockaddr_in进行绑定调用listen函数开始监听客户端的连接调用accept函数获得连接的客户端调用send recv函数进行数据发转载 2014-07-17 22:39:40 · 310 阅读 · 0 评论 -
scons 用法
介绍,scons用的是python语法。需要安装python和scons后才能运行,能够跨平台。比较automake自动生成makefile文件,scons可以认为直接是make的功能,因为只需要执行scons命令就等于执行了make的功能。现在有一个hello.c的文件。新建一个SConstruct文件,是一个python脚本文件。Program('hello.c') 编译hel转载 2014-05-16 18:18:58 · 1497 阅读 · 0 评论 -
epool实现
#include deque>#include map>#include vector>#include pthread.h>#include semaphore.h>#include time.h>#include sys/time.h>#include sys/shm.h>#include errno.h>#include sys/types.h>#in转载 2014-05-22 20:28:55 · 367 阅读 · 0 评论 -
sizeof
如何计算一个数组的大小 int a[] = }|原创 2014-06-12 20:33:38 · 282 阅读 · 0 评论 -
Tcp 创建与断开连接过程
TCP/IP建立与断开连接详细过程 TCP协议连接建立时3次握手的过程。简述TCP协议连接建立时3次握手的过程。根据TCP头部,说明下列3个包在连接建立过程中的次序.0020 00 50 83 aa 46 49 3e dd 33 96 37 a3 a0 12 ...P..FI>.3.7...0030 16 a0 c4 c0 00 00 02 04 05 b4 0转载 2014-05-08 00:16:54 · 1220 阅读 · 0 评论 -
字符串操作
/**注意: * 检查指针有效性 * strncpy和memcpy的区别,'\0'的判断 * 内存区重叠问题 * 进行链式操作等*/char *s_strcpy(char*dest, const char *src){ char *tmp= dest; assert((dest!= NULL) &&(src !=N转载 2014-04-21 19:10:56 · 253 阅读 · 0 评论 -
github 常用的命令
1 Git简介 Git是用C语言开发的分布版本控制系统。版本控制系统可以保留一个文件集合的历史记录,并能回滚到另外一个状态(历史记录状态)。对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改 (modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已转载 2014-09-04 22:23:14 · 277 阅读 · 0 评论 -
数据段,代码段,堆栈段的区别
5个数据段 进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。对任何一个普通进程来讲,它都会涉及到5种不同的数据段。Linux进程的五个段下面我们来简单归纳一下进程对应的内存空间中所包含的5种转载 2014-03-05 11:24:44 · 823 阅读 · 0 评论 -
使用初始化成员列表初始化数据与在构造函数中初始化数据
论坛中回答一个别人问题C++ Primer中在讲构造函数初始化列表的时候有这么一段话:无论是在构造函数初始化列表中初始化成员,还是在构造函数体中对它们赋值,最终结果是相同的。不同之处在于,使用构造函数初始化列表的版本初始化数据成员,没有定义初始化列表的构造函数版本在构造函数体中对数据成员赋值。请问这里的初始化数据成员与对数据成员赋值的含义是什么?有什么区别?我知道在数据转载 2014-06-12 00:35:10 · 713 阅读 · 0 评论 -
堆的优先队列1
堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。 有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。符合这样特点的完全二叉树我们称为最小堆。反之,如果所有父结点都比子结点要大,这样的完全二叉树称为最大堆。那这一特性究竟有什么用呢? 假如有14个数分别是99、5、36转载 2014-06-23 11:11:24 · 363 阅读 · 0 评论 -
堆的优先队列2
接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log i),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下。1234567n=0;for(i=1;i{ n++; h[ n]转载 2014-06-23 11:14:29 · 322 阅读 · 0 评论 -
linux 安装并配置github
安装apt-get install git方法/步骤注册好账号后我们需要建立一个仓库.(注:选把私有仓库是会提示付费的,价格详见网站内说明)配置本的SSH KEY 才可以使远程跟本地连接(1,检查本地SSH KEY生成情况;(如果出现““No such file or directory”或类似的语句,说明缺少ss转载 2014-09-05 00:51:57 · 475 阅读 · 0 评论 -
TCP 中的EAGAIN错误
在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。 从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,以 O_NONBLOCK的标志打开文件/socket/FIFO,如果你连续做read操作而没有数据可读。此时程序不会阻塞转载 2014-07-17 23:13:15 · 1789 阅读 · 0 评论 -
Java中null与数据库的NULL的认识
java和数据库中null、NULL的认识 java和数据库中null、NULL的认识Java是面向对象的高级语言。java中,null表示类或对象的变量是空,不代表任何对象或实例,可以将null赋给引用类型变量,但不可以将null赋给基本类型变量;任何对象在没有进行初始化时,它默认的值都转载 2014-04-28 14:13:29 · 4412 阅读 · 0 评论 -
迭代器失效
迭代器失效小结 2011-06-10 15:31:44| 分类:C |举报|字号 订阅迭代器(iterator)是一个可以对其执行类似指针的操作(如:解除引用(operator*())和递增(operator++()))的对象,我们可以将它理解成为一个指针。但它又不是我们所谓普通的指针,我们可以称之为广义指针,你可以通过sizeof(vector::转载 2014-05-06 21:05:04 · 310 阅读 · 0 评论 -
listen函数解析
listen(int socket ,int backlog)这个函数实际上是把需要监听的socket和监听队列的大小,传给内核,原创 2014-05-26 10:40:29 · 544 阅读 · 0 评论 -
eclipse 集成vim插件
在eclipse的根目录下 建立文件 viPlugin2.lic 内容为:原创 2014-05-27 21:27:25 · 405 阅读 · 0 评论 -
aio,epoll,asio
这几天一直在做linux大批量数据的解决方案,不断的深入了解了一下aio,epoll,libevent,boost::asio。以前只知道他们都是做异步/非阻塞的,但是具体解决的问题的关键点是什么,通过这几天的深入了解,把他们总结一下:aio是linux2.6以后内核实现的异步IO,或者说他才是真正意义上的异步IO。epoll作为select的linux的替代品,解决了selectfd_s转载 2014-06-19 14:48:08 · 1312 阅读 · 0 评论 -
动态规划解最大公共子串
http://blog.chinaunix.net/uid-26548237-id-3374211.html转载 2014-04-21 19:00:10 · 340 阅读 · 0 评论 -
高效的哈希算法
近期由于需要,研究了魔兽文件打包管理器的相关算法,重点对其文件索引表的生成和查找进行了研究:采用哈希表进行,在冲突方面的处理方面,采用线性探测再散列。在添加和查找过程中进行了三次哈希,第一个哈希值用来查找,后两个哈希值用来校验,这样可以大大减少冲突的几率。 这里对其进行了简单的封装,扩展时,仅仅需要对结构体进行扩展即可。更为详细的说明,参考代码:【转载请保留版权,谢谢】转载 2014-04-17 21:38:59 · 903 阅读 · 0 评论 -
socket 通信原理
socket编程原理 socket编程原理 1 问题的引入 UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-close)。在一个用户进程进行I/O操作时,它首先调用“打开”获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文件或设备上进行I/O操作的进程。然后这个用转载 2014-03-05 13:09:16 · 461 阅读 · 0 评论 -
Linux 网络编程二:非阻塞select
函数声明select函数int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);说明:int maxfdp是一个整数值,是指集合中所有文件描述符的范围,即所有文件描述符的最大值加1。fd_set *readfds是指向fd_set结构的转载 2014-07-17 22:43:38 · 398 阅读 · 0 评论 -
测试过程中的问题定位与分析
出现问题之后,可以从以下方面进行分析1原创 2014-05-13 19:32:09 · 2204 阅读 · 0 评论 -
面试的10大算法
以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念。由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍。本文将从Java的角度看问题,包含下面的这些概念:1. 字符串 2. 链表 3. 树 4. 图 5. 排序 6. 递归 vs. 迭代 7. 动态规划 8. 位操作 9. 概率问题 10. 排列组合 1. 字转载 2014-04-16 19:49:56 · 393 阅读 · 0 评论 -
gdb 带参数调试
一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要 把调试信息加到可执行文件中。使用编译 器(cc/gcc/g++)的 -g 参数可以做到这一点。如: > cc -g hello.c -o hello > g++ -g hello.cpp -o hello 如果没有-g,你将看不见程序的函数名、变量名,所代替的全是 运行时的转载 2014-09-10 14:17:13 · 402 阅读 · 0 评论 -
Linux c++ 测试框架 gtest使用简介
(0)gtest是什么gtest是一个跨平台的C++测试框架,google作品。它支持自动发现测试,断言集,用户定义的断言,death测试,致命与非致命的失败,类型参数化测试,各类运行测试的选项和XML的测试报告。(1)下载gtest地址:http://code.google.com/p/googletest/downloads/list笔者下载的版本是1.6.0h转载 2014-09-01 16:16:51 · 608 阅读 · 0 评论 -
使用boost库
./booststrap.sh --prefix=././bjam link=static threadind=multi variant=release address-model=64 toolset=gcc runtime-link=static#include #include #include int main() {原创 2014-09-03 14:35:54 · 400 阅读 · 0 评论 -
linux 共享库问题
很多时候,我们新安装的共享库不是安装原创 2014-09-04 15:47:23 · 327 阅读 · 0 评论 -
pthread_kill 与pthread_join
pthread_kill 可以用来检测线程是否已经结束原创 2014-06-12 19:54:18 · 2093 阅读 · 0 评论 -
友元函数与友元类
友元函数和友元类 采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检转载 2014-09-18 09:49:16 · 340 阅读 · 0 评论 -
bson 与json的区别
BSON与JSON的区别BSON是由10gen开发的一个数据格式,目前主要用于MongoDB中,是MongoDB的数据存储格式。BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。BSON主要会实现以下三点目标:1.更快的遍历速度对JSON格式来说,太大的JSON结构会导致数据遍历非常慢。在JSON中,要跳过一个文档转载 2014-04-21 16:40:32 · 1041 阅读 · 0 评论 -
gcc 使用方法
执行过程示例编辑示例代码1234567#include int main(void){ printf("hello\n"); return0;}预编译过程这个过程处理宏定义和include,并做语法检查。可以看原创 2014-03-03 19:34:15 · 433 阅读 · 0 评论 -
配置log4j
在工程的srclog4j.rootLogger=info, ServerDailyRollingFile, stdout log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.ServerDailyRollingFile.DatePatte原创 2014-04-04 14:19:44 · 325 阅读 · 0 评论 -
TCP timewait 原理
TCP/IP TIME_WAIT状态原理博客分类:网络协议-TCP/HTTP TIME_WAIT状态原理----------------------------通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态。客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释),进转载 2014-07-19 14:38:19 · 428 阅读 · 0 评论 -
字符串的KMP算法
KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);而KMP算法,可以证明它的时间复杂度为O(m+n)。一、简单匹配算法 先来一个简单的匹配算法的函数。int Index_BF(char const *S, char const *T,int pos){ /*------------转载 2014-04-21 18:26:53 · 412 阅读 · 0 评论 -
TCP 协议疑难解析
说明:1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义4).除了《TCP/IP详解》(卷一,卷二)以及《Unix网络编程》以及Linux源代码之外,转载 2014-07-17 23:01:58 · 763 阅读 · 0 评论