- 博客(61)
- 资源 (11)
- 收藏
- 关注
原创 vs2012 DirectX 编译错误
1、error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4这种错误。解决的方法:在库文件的忘了添加或者没有设置为第一位:Microsoft DirectX SDK (August 2009)\Lib\x86。
2014-01-21 15:04:43
1015
原创 tcp 定时器
TCP 四大定时器: 1、重传定时器:最近又看了几遍《TCP/IP 详解》有些疑问弄清了,现在总结一下。TCP为每个连接维护一个重传定时器,在发送报文时如果定时器已经使用,则该报文不会计时(不会计算它的超时)。重传时间RTO最基本的就是等于RTT,但一般会进行平滑,比如: R =previous RTT*i + (1-i)*current RTT, R
2013-08-24 19:17:40
1231
原创 Tornado 源码
如上图,是Tornado运行的大概流程图,其中对RequestHandler的各个接口没有详细分析,仅仅是列出RequestHandler如何与HTTPConnection、IOStream、IOLoop交互的。
2013-07-02 14:34:54
1573
原创 Tornado httpserver模块
httpserver里面定义的类有HTTPServer、HTTPConnection、HTTPRequest。HTTPServer是一个非常简单的HTTP服务器,主要作用就是创建监听套接字,设置监听套接字的读事件hander,(创建多进程模式),接下来调用HTTPConnection处理整个连接。HTTPConnection读取请求并解析,调用HTTPServer设置的callback(一般是Ap
2013-06-27 14:56:46
8894
原创 Tornado IOStream类分析
Tornado中的IOStream封装了socket的非阻塞IO的读写操作,我个人觉得比较有意思的是read_util()接口:设置一个标志字符串和回调函数,其余的工作都可以省略了,当IOStream读到标志字符串时自动调用该回调函数,整个接口很人性化,简洁方便。 属性: self.sockt: 封装的套接字,nonblocking模式; self._read_b
2013-06-26 13:53:30
4185
原创 Tornado 之 IOLoop类分析
源代码 Tornado 1-2-1 IOLoop类是Tornado的边缘触发事件驱动模型,在Linux平台下面封装的是epoll模型,这个类的代码也很简单,比Nginx好看多了。 先看属性: _handlers保存(fd,handler)的映射关系,_events保存就绪的fd以及对应的events事件(读/写/错误),_blocking_signal
2013-06-25 14:04:50
6977
原创 高性能 网络编程
最近在看一些比较好的网络编程方面的文章,也想比较深入地提升自己的技术能力,于是贴出一些链接:1、C10k 问题http://www.kegel.com/c10k.htmlhttp://blog.youkuaiyun.com/goldou/article/details/25797812、高性能的服务架构http://pl.atyp.us/content/tech/s
2013-05-23 11:24:51
1686
原创 epoll 经验
一、epoll相对于select的优势:select/poll的缺点:1.每次调用时要重复地从用户态读入参数。2.每次调用时要重复地扫描文件描述符。3.每次在调用开始时,要把当前进程放入各个文件描述符的等待队列。在调用结束后,又把进程从各个等待队列中删除。4.支持的FD个数比较少,需要修改源代码重新编译内核。epoll的优点:1、支持的FD==进程打
2013-05-20 17:16:57
2292
原创 Nginx event 模块分析
ngx_event_core_module 模块: 上下文是: typedef struct { ngx_str_t *name; void *(*create_conf)(ngx_cycle_t *cycle); char *(*init_co
2013-04-02 14:06:05
6214
原创 虚拟继承、多态的内存布局
测试平台,Ubuntu 12.04--x64 代码如下:#include #include using namespace std;class A {public: long a; virtual void a1() { cout << "A:a1()" << endl; } virtual void a2() { cout << "A:a2()" << e
2013-03-20 16:28:17
1306
原创 Nginx 进程模型
由于这篇博文 http://blog.youkuaiyun.com/gsnumen/article/details/7979484?reload 已经分析的很清楚了,我只想自己整理一下:使用 UNIX域套接字 socketpair() 异步通讯机制:nginx在创建worker前将先调用 socketpair(int channel[2]) ,然后将 channel[0-1]设置为非阻塞IO,但只把
2013-03-07 11:24:49
1317
原创 nginx http_core模块 配置文件解析 2
上一篇讲述了配置文件的整体结构,下面重点分析htt_core模块的配置信息结构,得到如下的一幅图:从上面很明显可以看出需要合并的ngx_http_core_srv_conf_t、ngx_http_core_loc_conf_t结构体。但是ngx_http_merge_locations代码中有:for (q = ngx_queue_head(locations);
2013-03-05 13:56:54
2019
原创 Nginx http_core模块 配置文件解析
Nginx 的配置文件解析很麻烦,数据结构交织在一起,特别恶心,经过几天的分析,得到了一幅大概的关系图,自以为是正确的。cycle = ngx_init_cycle(&init_cycle): 1、在内存池中分配一个ngx_cycle_t变量,并初始化它的各个成员。 2、调用core类型的create_conf,实际只有一个ngx_cor
2013-03-04 13:46:45
5364
原创 zoj 2156
/** * zoj_2156 * 多重背包+遍历路径,优先取小的 */#include #include #include using namespace std;int const value[] = { 1, 5, 10, 25 };int v[60], n;int coin[4], node[4], p;/* * 应该可以直接用一维代替,要再想想 * 错了,
2013-02-06 14:02:25
990
原创 zoj 2401
这题我居然用背包过了。当然,算法不是最好的,根据网上的题解,如下算法更好。考虑str_c,它的最后一个字符c[la+lb-1]是a[la-1]或者是b[lb-1],于是递归下去有方程:dp[i][j] = dp[i-1][j]( 满足:a[i]==c[i+j]) | dp[i][j-1]( 满足:b[j]==c[i+j])。http://hi.baidu.com/delta_4d/it
2013-02-06 13:58:56
1049
原创 zoj 1986
我out了,想不到最长上升子序列还有nlogn的算法,看来以前学得不够仔细,于是把代码贴出来学习一下。 参考:http://blog.youkuaiyun.com/Hashmat/article/details/5883605http://acm.tzc.edu.cn/acmhome/topicListAction.do?method=topicDetail&id=52a13560222
2013-02-04 15:16:00
1021
原创 poj 3494 Largest Submatrix of All 1’s
最近在学习单调桟,这个题目听有意思的,需要稍微动动心思,往poj 2559上想。但是时间总是1700MS左右,真不知道网上那些100ms是怎么出来的。/** * poj_3494.cpp * */#include #include #include using namespace std;#define MN 2010#define hpmax(a,b) ((a)>(b
2012-12-24 22:31:39
1728
原创 pat 1038 Recover the Smallest Number
这题明显是贪心的策略,但是排序算法一直没写好,费了我几个小时。后来发现,有个博客http://ppcool.iteye.com/blog/1731427 里面的排序好简单呀,好受打击。回宿舍继续舔伤口。/* * pat_1038.cpp */#include #include #include #include using namespace std;#define N 100
2012-12-16 11:51:05
2072
原创 zoj 2626 Polygon Game
这题Dp方程很容易想到,但是居然WA了一天,后来一个博客,才发现负数对最大值的影响。恍然大悟呀……/* * zoj_2626.cpp */#include #include #include #include using namespace std;#define N 52#define hpmax(a,b) (a)>(b)?(a):(b)#define hpmin(
2012-12-15 16:28:17
1029
原创 zoj 2710 Two Pipelines
这题我是用dp过的,回头看了网上的资料,可以用谈心。再想想吧,先保存以下代码:/* * zoj_2710.cpp */#include #include #include #include #include using namespace std;#define N 210#define INF 1e12/* * dp[i][x][y]: The state i
2012-12-09 16:04:22
1016
原创 zoj 1100
这题是简单的状态压缩,和黑书的那个bug公司类似,不过更简单。代码如下:(当然,可以打表)#include #include #include using namespace std;#define HW 20#define hpmax(a,b) (a)>(b)?(a):(b)long long dp[2][2048]; //2^11int factor[13] = { 1,
2012-12-06 21:41:12
1573
原创 zoj 1025
这题刚开始直接dp求最长非递减子序列,再加上next数组,于是WA。结合网上的代码,才发现,其实就是求最少组的非递减子序列,直接从小到大扫描就可以了。自己还是太水了,后悔大学不努力呀!/* * zoj_1025,就是求最少组的非递减子序列,用贪心就可以,不用dp求最长非递减子序列 */#include #include #include #include using namesp
2012-12-01 21:57:02
1524
原创 uva 10617
这题想了一下,可以枚举出str[i]、str[j]的所有决策:1、如果str[i] == str[j],不删除str[i] str[j]:dp[i][j] += dp[i+1][j-1] + 1(1表示把[i+1,j-1]全删除后,它还是回文);2、删除str[i]:就是dp[i+1][j];3、删除str[j]:就是dp[i][j-1];4、同时删除str[i]、str[j]:就
2012-11-28 22:25:40
807
原创 poj 1159
这题用short水过,一看网上大牛的代码,居然说可以用滚动数组!太厉害了。//poj_1159#include #include #define N 5010#define INF 10000#define hpmin(a,b) (a)<(b)?(a):(b)int n;char str[N];short int dp[N][N];int main(){ int i, l
2012-11-26 21:03:01
571
原创 poj 1141
这个题目让我蛋疼了一晚上,最后对比别人的代码,才发现问题:居然使用while ( scanf("%s", str) != EOF ) 导致WA!这不科学呀!//poj_1141#include using namespace std;#define INF 10000char str[110], result[210];int dp[110][110], pos[110][1
2012-11-22 20:31:27
798
原创 Splay-tree poj 3580
SplayTree 伸展树:自调节的二叉搜索树,能把最近访问的节点移到根节点出。适用于各种实际应用,尤其适合实现cache和garbage collection算法。空间少,性能平摊也有竞争力,编程易实现。优点:1、 实现简单,比AVL、红黑树更简单。2、 性能好,平均性能比得上其他平衡二叉搜索树。可能会比AVL慢点。常数因子的差距。3、 没有其他的记录数据。4、 可以
2012-07-25 20:55:12
1816
原创 经验点滴
1、strncpy:使用这个函数注意要自己设置结尾,如果原来的缓冲区还有数据,strncpy仅仅是覆盖前n个字节,后面保持原来的数据。很多次写程序都发现缓冲区里的数据还是上次的结果,这里痛定思痛,记下来。而strcpy却会自动的添加'\0'字节。 strncpy( pDest, pSource, maxSize ); pDest[maxSize] = 0;
2012-07-20 16:05:04
598
原创 B+tree 实现
/** BPlusTree.h 2012/6/24--2012/7/5 hpghy, 790042744@qq.com **/#ifndef BPLUSTREE_H_#define BPLUSTREE_H_#include #include #include using std::queue;using std::cout;using std::endl;us
2012-07-05 16:13:49
1545
原创 B+树
为什么说B+-tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?1) B+-tree的磁盘读写代价更低 B+-tree的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。 举个例子,假设磁盘中的一个
2012-06-24 13:22:01
6022
原创 zoj 2107
这题做了很久,一直都是1秒多,真不知道他们300ms是怎么做出来的。看了网上的代码,大部分都是O(nlgnlgn),于是绞尽脑汁,写了个O(nlgn)的代码,但是时间上没有显著地提高。/** * O(nlogn) * zoj_2107 **/#include #include #include #include #include using namespace std;
2012-05-21 15:19:00
977
转载 grub rescue:
ubuntu和Win7的双系统,不知怎么搞成了“error: unknown filesystem grub rescue:”,使用以下的方法:http://www.cnblogs.com/samcn/archive/2011/03/30/1999615.html1. 先使用ls命令,找到Ubuntu的安装在哪个分区: grub rescue>ls
2012-05-16 19:31:24
491
原创 zoj 1453
/** * zoj 1453 * 不需四舍五入 * */#include #include #include #include #include using namespace std;struct Point { int x, y;};const double eps = 1e-5;Point tree[110];Point stack[110];bool b
2012-04-30 16:05:54
647
原创 zoj 3234
#include #include #include #include using namespace std;struct Point { int x, y;};const int N = 2010;Point soldier[N];int n, cnt;int pt[N];bool flag[N];int pcnt;bool bRemain[N];int
2012-04-30 16:03:16
652
原创 zju 2334 monkey king
因为最近在学习二项堆,所以拿这题练练手。其实这题思路很清晰,就是在二项堆中加入并查集的特性。因为在一个sb的地方犯了一个sb的错误,卡了几个小时。一切尽在代码中……/* * zoj2334 monkey king */#include #include #include using namespace std;#define CNT 100010const int INTMA
2012-04-09 22:54:55
954
原创 表达式模板 expression templates 测试
表达式模板,在《c++ template》中是为了同时支持数组操作的优雅性和高效性,并说,metaprogramming主要适用与小的大小固定的数组,而expression templates适用于中性和大型数组的运行期操作。但实际上,经过我的测试,元编程和表达式模板不像书中说的那么神奇,或许,是我没有实现好。下面,我将测试expression templates。 如果要支持
2012-04-07 18:56:28
981
原创 c++ template之trait技法总结
Trait技法的最初目的是为了管理模板参数,有的时候模板中需要几个参数,但是往往有些参数是与main parameters紧密相关的,这时候可以使用trait技巧,从几个主要的模板参数中推导出相应的secondary template argument,并以默认模板参数的形式出现在模板中。实际上使用的trait技巧实例往往会有效地提高程序的效率,下面我结合STL小小的说说trait的实际运用。
2012-03-19 21:20:54
9782
原创 B-树 实现3
上次有了B-树的两种不同的实现,现在我们来测试一下两种实现的效率,由于命名一样,我设置了不同的名字空间,下面是测试代码:#include #include #include #include #include "BTree.h"#include "BTree2.h"using namespace std;const int maxcnt = 1000000;int r[max
2012-03-08 21:19:21
763
原创 B-树实现2
/** * BTree.h * * 采用网上流传已久的插入删除算法——回溯方式 * 与《算法导论》中的不一样,但是效率更高 * * 790042744@qq.com * 2012/3/5 * **/#ifndef BTREE_H#define BTREE_H#include #include using std::vector;using std::
2012-03-08 20:09:20
611
原创 B-树 实现
B-树主要用在文件系统中,关键字为文件名,值为文件在磁盘中的地址。分支因子很大,一般为50到2000,一个节点就用一个磁盘块存储。按照《算法导论》的描述,节点有如下性质:1、至少有t-1个关键字,至多2*t-1个关键字,关键字以升序排列;2、至少有t个子女节点指针,至多2*t个;3、n[x]个关键字对应n[x]+1个子女节点指针;4、根节点至少包含一个关键字;以下是
2012-02-29 20:47:07
678
原创 红黑树
/*****************************************************************************************\ * rb_tree.cpp * 学习 SGI STL 中的实现 《STL源码剖析》 * 没有添加迭代器 *\*************************************************
2012-02-19 20:59:39
1745
任务管理器,源代码,类似于ProcessExplorer,使用Native API:NtQuerySystemInformation
2011-01-03
PE格式解析程序,详细剖析PE格式,对于学习Dll等技术有很大的帮助
2010-11-09
信息安全实验:利用Windows CryptoAPI开发加解密工具软件
2010-05-19
sort_heap push_heap pop_heap 堆的各种算法
2010-05-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人