![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
一句话总结
ht8269
这个作者很懒,什么都没留下…
展开
-
服务器为什么需要异步操作
服务器和用户之间是1对多的关系(采用分时处理),一个不能立刻完成的请求往往需要切割多个异步过程,不能因为某一个用户而阻塞了对其他用户的处理。原创 2010-04-25 09:36:00 · 644 阅读 · 0 评论 -
重入
重入多用于描述多任务环境的函数,一个函数被中断之后然后恢复回来不会出现问题的时候,这个函数就是可重入的;使用了未加保护的线程间共享数据的函数不是可重入函数。原创 2010-05-04 20:45:00 · 306 阅读 · 0 评论 -
服务器开发(一)
协议的设计请不要硬编码,最好是以某种格式记录到文件中,然后再翻译到特定的语言中,这样有利于原型的开发和测试工作。原创 2010-05-06 10:11:00 · 289 阅读 · 0 评论 -
安全编码(七)
服务器开发的设计之初,可以考虑使用一些较c/c++更为安全的语言用来开发变动比较频繁的模块,如lua。原创 2010-05-08 10:16:00 · 354 阅读 · 0 评论 -
服务器开发(二)
后台服务器由于各种原因经常需要协作以解决问题,而如果让每台服务器都实现网络层显然无谓的工作很多,我们可以模拟inetd实现一个后台进程专门用于衔接各个服务器,这样子各个服务器就不再需要编写网络层。原创 2010-05-10 11:01:00 · 411 阅读 · 0 评论 -
服务器开发(三)
服务器挂了却没有core文件,是因为系统对core文件的大小限制出问题了,可以将ulimit -c unlimited写在/etc/profile文件的尾部并重新登录,这样子系统将不对core文件的大小做限制。原创 2010-05-10 11:28:00 · 386 阅读 · 0 评论 -
安全编码(九)
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 · 271 阅读 · 0 评论 -
服务器开发(四)
如果数据库设计的时候使用了分库分表的方案,那么在开发的时候最好也实现一个“修复数据库间数据不同步”的工具,因为没人能够保证自己写的程序不会造成库间不同步的现象。原创 2010-05-19 11:05:00 · 391 阅读 · 0 评论 -
安全编码(十一)
<br />char* content = (用户输入)<br />fprintf(fp, content);<br />以上的做法异常危险,当用户的输入包含"%s"的时候造成崩溃的概率很大,将一个字符串作为一个format传入fprintf是非常危险的。<br />应该改为:<br />fprintf(fp, "%s", content);原创 2010-07-17 00:55:00 · 341 阅读 · 0 评论 -
安全编码(十)
<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 · 685 阅读 · 0 评论 -
网络编程(六)
开发网络应用请不要少了让你感激地内牛满面的工具:tcpdumpsniffer常用命令:tcpdump -Xnns 2000 ... ... (具体请看man)原创 2010-07-14 02:26:00 · 1194 阅读 · 0 评论 -
服务器开发(五)
服务器开发过程中总会碰到异步编程,从而不得不为一次处理过程分配上下文,但不包含异步过程的处理是不需要上下文的;为了保证服务器开发过程中思路的统一和简单性,不管是否包含异步过程,一个处理过程的执行之前都一律申请上下文,不包含异步过程的处理过程在结束之后就立马回收上下文即可。原创 2010-05-22 12:41:00 · 299 阅读 · 0 评论 -
安全编码(八)
printf("%s", ...) sprintf("%s", ...) 等在变参为整数、空指针、无得时候总是很危险,最好是写个工具来检查代码中的类似代码。原创 2010-05-26 13:56:00 · 324 阅读 · 0 评论 -
linux 终端backspace不能删除字符
<br />解决方法: <br />输入指令stty erase ^h原创 2010-07-24 11:18:00 · 1910 阅读 · 1 评论 -
自旋锁(1)
<br />自旋锁的初衷就是:在短期间内进行轻量级的锁定。一个被争用的自旋锁使得请求它的线程在等待锁重新可用的期间进行自旋(特别浪费处理器时间),所以自旋锁不应该被持有时间过长。如果需要长时间锁定的话, 最好使用信号量。原创 2010-12-28 14:46:00 · 289 阅读 · 0 评论 -
对象的初始化
<br />一个对象必须初始化,特别是有bool值成员变量的时候就更应该小心警惕原创 2010-12-28 22:08:00 · 266 阅读 · 0 评论 -
网络编程(二):先判断错误还是先接受连接?
在一次网络I/O模型的轮询中,我们一般先接收新的连接,其实这样对于后端的业务来说是有问题的,我们因该先判断出错的连接之后才接受新的连接。原创 2010-04-30 15:31:00 · 357 阅读 · 0 评论 -
语句摘录(一)
有效的标准是你所能掌握的最强大的工具之一 。 摘自《代码大全》原创 2010-05-01 13:44:00 · 280 阅读 · 0 评论 -
网络编程:C/S协议解码失败怎么办
如果从某条TCP连接上取出的数据解码(C/S协议解码)失败的时候就立刻关闭该连接,清空该连接对应的缓冲区,并重新连接(如果要重连的话)。原创 2010-04-24 01:18:00 · 459 阅读 · 0 评论 -
服务器开发中的日志(三)
日志应该有“主键”,比如游戏开发的时候常常以用户ID为“主键”原创 2010-04-29 15:27:00 · 330 阅读 · 0 评论 -
服务器开发中的日志(一)
记住:“早知道就多打点日志了,悔啊...”原创 2010-04-29 15:22:00 · 287 阅读 · 0 评论 -
服务器开发中的日志(二)
尽量每个分支都有日志原创 2010-04-29 15:26:00 · 256 阅读 · 0 评论 -
服务器开发中的日志(四)
打完日志也不要忘了检查日志,因为日志有可能会让进程挂掉,一般会出错的情况是:LOG("%s", 非字符串/空指针)或LOG("0x08X,%s", id, msg)(仔细看看哪里出错了?)原创 2010-04-29 15:28:00 · 376 阅读 · 0 评论 -
安全编码(二)
指针一定要初始化,函数实参指针必须检查是否为空。原创 2010-04-30 13:03:00 · 414 阅读 · 0 评论 -
关于100%CPU(二)
第一种方法解决不了问题?那就使用性能检测工具分析。原创 2010-05-02 11:40:00 · 240 阅读 · 0 评论 -
安全编码(五)
尽量用snprintf,这个函数有个好处是你可以判断字符串是否溢出:(snprintf(buf...) >= sizeof(buf)则溢出)原创 2010-04-30 13:17:00 · 277 阅读 · 0 评论 -
关于100%CPU(一)
第一种方法:attach进程,打印堆栈,定位代码找出问题。原创 2010-05-02 11:38:00 · 248 阅读 · 0 评论 -
关于100%CPU(三)
如果max_count很大而且包含语句“char a[max_count] = { 0 };”的函数被不断地调用的时候,你应该会感觉到CPU的无奈。原创 2010-05-02 11:42:00 · 248 阅读 · 0 评论 -
服务器开发中的日志(五)
日志中最好包含每条日志所在的文件名,行号以及处于的函数名原创 2010-05-03 20:28:00 · 390 阅读 · 0 评论 -
安全编码(一)
服务器不稳定说其他的都是扯淡。原创 2010-04-30 12:33:00 · 534 阅读 · 0 评论 -
安全编码(三)
遍历数组的时候一定要加上ARRAY_SIZE限制:for (int i = 0; i原创 2010-04-30 13:03:00 · 306 阅读 · 0 评论 -
安全编码(四)
数组作为某函数的OUT参数的时候请将"ARRAY_SIZE(数组)"也作为参数传入这个函数中原创 2010-04-30 13:12:00 · 264 阅读 · 0 评论 -
安全编码(六)
通过索引I访问数据A前,请判断I是否在合法范围:[0, ARRAY_SIZE(A))原创 2010-04-30 19:14:00 · 262 阅读 · 0 评论 -
有趣的问题(一)
<br />编码计算/../../a/b/.././../c的最终长度?(答案:"/c",长度为2),不允许使用辅助缓冲区原创 2011-01-04 14:47:00 · 314 阅读 · 0 评论