自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

13:07

小流跬步

  • 博客(97)
  • 资源 (2)
  • 收藏
  • 关注

原创 关于编译的非常重要的问题

<br />碰到了一个比较棘手的问题:<br />类A有两个文件A.h和A.cpp如下<br />//A.hclass A{public: A() {a = 0;} void print(); int a;};<br />//A.cpp#include <stdio.h>void A::print(){ printf("a=%d/n", a);}  <br />然后编译,得到一个可执行文件a.out和另外一个文件A.o<br /> <br />接下来修

2011-02-16 11:33:00 454

原创 (二)目录

<br />PHP版本为5.2.17<br /> <br />源代码目录组织方式:<br />-ext扩展库<br />+standard PHP内建库,比如文件IO和字符串处理<br />...<br />+build: 构建二进制文件相关<br />+main: 一些C基础库<br />+netware: netware平台相关<br />+regex: 提供正则表达式功能<br />-sapi: 和各种web服务器接口代码<br />+apache<br />...<br />+scripts: 一些

2011-02-01 11:52:00 489

原创 (一)Makefile

<br />PHP版本为5.2.17<br /><br /><br />1、windows平台上,PHP使用了一个configure.js的脚本来生成Makefile文件,在生成Makefile文件之后,调用nmake生成代码即可。<br /> <br />2、Makfile中比较值得学习的地方是定义GLOBAL_OBJ,也就是说这是共享的OBJ文件,比如每个模块可能都需要vsprintf.o这个文件,那么就将它列入共享obj文件中

2011-02-01 10:56:00 434

原创 论游戏服务器-开篇(为什么要有游戏服务器)

注意:我们先对将要讨论的问题加以界定,“论游戏服务器”涉及到的范围只限服务器实现技术和实现过程中需要注意的事项。为什么要有游戏服务器?回答这个问题的方法是反证手法,假设没有游戏服务器会怎么样?一般人都回答说游戏者之间不能互动。当然只要懂点技术的人会说没有服务器我们可以用P2P呀,比如什么PSP不是都用ad hoc技术吗?没看见我们俩“玩怪物猎人”正high着吗?OK,你说的没有错。那么我提出一个问题,如果对方作弊了怎么办?比如修改数据。好的,P2P的支持者肯定会说我们每个机器上都需要有个反作弊系统,那么反作

2011-01-15 20:06:00 637

原创 有趣的问题(一)

<br />编码计算/../../a/b/.././../c的最终长度?(答案:"/c",长度为2),不允许使用辅助缓冲区

2011-01-04 14:47:00 309

原创 对象的初始化

<br />一个对象必须初始化,特别是有bool值成员变量的时候就更应该小心警惕

2010-12-28 22:08:00 264

原创 自旋锁(1)

<br />自旋锁的初衷就是:在短期间内进行轻量级的锁定。一个被争用的自旋锁使得请求它的线程在等待锁重新可用的期间进行自旋(特别浪费处理器时间),所以自旋锁不应该被持有时间过长。如果需要长时间锁定的话, 最好使用信号量。

2010-12-28 14:46:00 287

原创 要使问题进入可讨论的状态,就必须对所要讨论的问题尽可能加以明确的界定。

<br />要使问题进入可讨论的状态,就必须对所要讨论的问题尽可能加以明确的界定。

2010-12-01 12:49:00 309

原创 网络编程:close相关

<br />A、B通过socket互联,A主动close,之后B不管调用多少次recv返回的结果都是0.

2010-10-14 16:04:00 329

原创 gcc链接

<br /><br />gcc在连接目标代码时需要保证库的依赖关系,被依赖的库要放在使用的库之后,比如A使用了B,那么-lB应该在-lA之后。

2010-10-13 10:25:00 414

原创 html排版原理-float

<br />当只有float:left的时候<br />以前我经常认为设置了float属性的块节点将会成为内联节点,其实实际上不是这样,设置了float属性的节点就是会变得“透明”,比如块A、B、C,D;A是float:left,B是float:left,C没有设置float属性,D也没有设置float属性,那么排版出来的效果是<br />ABC<br />D<br />C并不会在独立的一行出现,但是依然要求后续节点D在所在行的下一行,这说明C忽视了AB的存在并认为第一行是空的。<br />再比如A、B、C

2010-09-22 09:36:00 2304

原创 服务器开发(五)

<br />不要盲目自信,任何的改动都可能会产生意想不到的问题,特别是你对这代码不熟的时候(照着抄甚至是拷贝过来)。

2010-08-13 10:34:00 337

原创 服务器开发(四)

<br />任何和连接相关的问题请先用tcpdump进行观察。

2010-08-09 08:40:00 254

原创 如何模拟Mysql超时

<br />在开发过程中我们需要模拟出读写Mysql超时的情况,有一种廉价的方法可以帮助我们解决这个问题:<br /> <br />登陆Mysql然后锁表:<br />lock tables role_info write;<br /> <br />--这个时候表role_info就被锁住了,之后的读写操作都会超时<br /> <br />unlock tables;<br /> <br />需要注意:不要忘记解锁!

2010-08-06 13:56:00 2098

原创 Python:三句搞定快排

<br />def qsort(L): if len(L) <= 1: return L return qsort([lt for lt in L[1:] if lt < L[0]]) + [L[0]] + qsort([ge for ge in L[1:] if ge >= L[0]]) <br />摘自《Python Cookbook》

2010-08-06 09:37:00 6094

原创 服务器开发(三)

服务器开发的指标优先级(高到低):功能完成->稳定->可维护->?->高效‘?’主要是为了说明高效的优先级其实很低。一个不妥的程序跑地再快都没用

2010-08-05 11:59:00 414

原创 网络编程(八)非阻塞套接字的连接和select

在处理非阻塞套接字的连接的时候,我们往往会使用select来判断套接字在发起连接之后发生的变化,但是这个过程中linux和windows有些差别,本文将详细分析这两个平台此时的差异性。目标主机端口可达:    当套接字连接目标地址成功之后,select可以检测到这个套接字上的变化:“可写”。这种情况对于linux和windows都是一样的。目标主机不可达:    这种情况下,套接字并没有发生变化,所以select会一直等待直到超时,这种情况对于linux和windows都是一致的。目标端口不可达:    在

2010-07-25 04:17:00 833

原创 linux 终端backspace不能删除字符

<br />解决方法: <br />输入指令stty erase ^h

2010-07-24 11:18:00 1892 1

原创 网络编程(七) 正确的设置非阻塞套接字

<br />我之前都是用以下方法来将套接字设置为非阻塞状态:<br />fcntl(fd, F_SETFL, O_NONBLOCK);<br />其实上面这种做法只对了一半,因为这操作可能就将fd绑定的其他标志位清除,最理想的做法是:<br />int flags = fcntl(fd, F_GETFL);<br />fcntl(fd, F_SETFL, O_NONBLOCK | flags);

2010-07-20 17:22:00 409

原创 Python单件模式

<br />class A: @classmethod def instance(cls): if not hasattr(cls, '_instance'): cls._instance = cls() return cls._instancea = A.instance() 

2010-07-20 16:48:00 1206

原创 语句摘录(六)

<br />队列中的平均物件数等于进入速率和平均保存时间的乘积。<br />                                                                              --Little定律 Peter Denning

2010-07-18 20:53:00 203

原创 语句摘录(五)

<br />过早的优化是万恶之源<br />                                         -Donald Knuth

2010-07-18 20:48:00 221

原创 语句摘录(四)

<br />错误不应该被静静地略过,除非有意为之。<br />                                                            --Tim Peters

2010-07-18 20:45:00 305

原创 安全编码(十一)

<br />char* content = (用户输入)<br />fprintf(fp, content);<br />以上的做法异常危险,当用户的输入包含"%s"的时候造成崩溃的概率很大,将一个字符串作为一个format传入fprintf是非常危险的。<br />应该改为:<br />fprintf(fp, "%s", content);

2010-07-17 00:55:00 340

原创 网络编程(六)

开发网络应用请不要少了让你感激地内牛满面的工具:tcpdumpsniffer常用命令:tcpdump -Xnns 2000 ... ... (具体请看man)

2010-07-14 02:26:00 1189

原创 安全编码(十)

<br />如果你需要实现一个函数void foo(const char* in, char* out),处理的结果需要放到out中,请问你有足够的自信保证不会造成out的<br />溢出吗?如果没有,请写成:void foo(const char* in, char* out, unsigned int out_size),并在实现的时候处处留意。

2010-07-14 02:20:00 678

原创 安全编码(九)

A* a = GetA();if (NULL == a) { a = GenA();}a->doSomething(); 上面的代码有个很大的问题是第一个"A* a"中a和第二个"A* a"的a是不一样的,假设GenA返回的是NULL,那个"a->doSomething()"会造成崩溃现象。

2010-07-10 15:39:00 265

原创 安全编码(八)

printf("%s", ...) sprintf("%s", ...) 等在变参为整数、空指针、无得时候总是很危险,最好是写个工具来检查代码中的类似代码。

2010-05-26 13:56:00 321

原创 语句摘录(三)

如果你不能向一个六岁小孩解释某件事,那么你自己就没有真正理解它。 --爱因斯坦

2010-05-22 13:28:00 307

原创 服务器开发(五)

服务器开发过程中总会碰到异步编程,从而不得不为一次处理过程分配上下文,但不包含异步过程的处理是不需要上下文的;为了保证服务器开发过程中思路的统一和简单性,不管是否包含异步过程,一个处理过程的执行之前都一律申请上下文,不包含异步过程的处理过程在结束之后就立马回收上下文即可。

2010-05-22 12:41:00 294

原创 服务器开发(四)

如果数据库设计的时候使用了分库分表的方案,那么在开发的时候最好也实现一个“修复数据库间数据不同步”的工具,因为没人能够保证自己写的程序不会造成库间不同步的现象。

2010-05-19 11:05:00 387

原创 linux api笔记(10):删除文件

#include int remove(const char *pathname); 使用remove函数可以删除文件。返回值为0表示成功,-1表示失败,具体失败原因需要查看errno。

2010-05-12 15:55:00 2688

原创 linux api笔记(9):保证内存页不被淘汰

linux由于使用了虚拟内存技术,那么在一般的情况每个内存页都有可能被刷出物理内存,出于某种目的比如性能和安全性方面考虑,有时候需要保证内存页不会被淘汰,我们可以使用下面函数: #include int mlock(const void *addr, size_t len);int munlock(const void *addr, size_t len); 当我们需要保证

2010-05-10 15:29:00 529

原创 服务器开发(三)

服务器挂了却没有core文件,是因为系统对core文件的大小限制出问题了,可以将ulimit -c unlimited写在/etc/profile文件的尾部并重新登录,这样子系统将不对core文件的大小做限制。

2010-05-10 11:28:00 379

原创 服务器开发(二)

后台服务器由于各种原因经常需要协作以解决问题,而如果让每台服务器都实现网络层显然无谓的工作很多,我们可以模拟inetd实现一个后台进程专门用于衔接各个服务器,这样子各个服务器就不再需要编写网络层。

2010-05-10 11:01:00 409

原创 lua算术表达式优先级笔记

从低到高:and or== ~= > = ..+ -* /- not^ (右连接) 最左推导的文法上的设计应该(高优先级的表达式总是作为低优先级表达式的最小不可分割因子)是:E -> E and ANDORT | E or ANDORT | ANDORTANDORT -> ANDORT == LOGICT | ANDORT ~= LO

2010-05-08 10:23:00 568

原创 安全编码(七)

服务器开发的设计之初,可以考虑使用一些较c/c++更为安全的语言用来开发变动比较频繁的模块,如lua。

2010-05-08 10:16:00 347

原创 服务器开发(一)

协议的设计请不要硬编码,最好是以某种格式记录到文件中,然后再翻译到特定的语言中,这样有利于原型的开发和测试工作。

2010-05-06 10:11:00 283

原创 网络编程(五) 阻塞套接字如何非阻塞接收数据

“ 阻塞套接字如何非阻塞接收数据?”,虽然这样做比较无聊,而且似乎从来不需要这么用,但是recv函数确实可以做到这一点:recv(fd, buf, size, MSG_DONTWAIT);

2010-05-05 11:25:00 434

原创 网络编程(四) EPOLL

 epoll的优点在于可以支持大量的文件描述符  epoll相关的系统调用: int epoll_create(int size); 参数size的含义我至今没搞懂,如果大家有谁准确的知道的话请一定要留言!   int epoll_wait(int epfd, struct epoll_event * events, int maxevent

2010-05-05 10:31:00 478

C\C++中调用Lua函数的接口封装

调用Lua的接口的时候需要执行进栈和出栈等重复性工作,这几个文件的目的是打造一个简单易用的接口,让C\C++更方便地使用Lua的函数

2009-08-16

通用p2p仿真系统ptpsim

一个通用的且已使用的全分布式结构化p2p网络协议的仿真平台,可以在上面定制自己的P2P协议进行研究

2008-10-01

空空如也

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

TA关注的人

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