自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

stpeace的专栏

涛哥不知何许人也,亦不详其姓字。好读书,求甚解。常著文章自娱,颇示己志。忘怀得失,有始有终......

原创 怎么把春节慰问信写成condolence letter呢?

公司打算给员工家庭寄送春节的贺喜关怀卡, 链接发给所有的员工, 让大家填写个申请。我一看那个链接地址, 发现其中居然有condolence这个单词, 是哪位这么有学问, 把慰问信翻译成condolence letter呢? 我读书不多, 你不要开这种玩笑好不好?        不过, 不只是我发现...

2015-01-31 20:55:13

阅读数 6249

评论数 0

原创 亲历印度人把t读成d

昨天, 在公司园区里面等班车, 一老外过来问我:Will the shuttle bus go to "ei den"? 我愣了一会儿后说:It will first go to B2, and then to A. 她满意地点头致谢        不过我第一次确实没有听懂“e...

2015-01-31 20:15:24

阅读数 6521

评论数 0

原创 Windows和Linux上分别怎样实现等待某个线程结束?---用WaitForSingleObject和pthread_join

Windows和Linux上分别怎样实现等待某个线程结束呢, 我们先看Windows的情形, 直接上代码: #include #include DWORD WINAPI Fun1Proc(LPVOID lpParameter) { int i; for(i = 0; i < 100...

2015-01-29 23:26:27

阅读数 9670

评论数 2

原创 gcc编译出现undefined reference to 'pthread_create'的解决方法

下面, 我们先看一个linux多线程程序: #include #include void* threadFunc(void* p) { while (1) { printf("a"); } return NULL; } int main () { p...

2015-01-29 22:59:11

阅读数 18780

评论数 0

原创 父线程退出后, 子线程会退出么?(我在Windows和Linux上都验证过)

我们来看一个常见的基本问题:父线程退出后, 子线程会退出么?         我不喜欢人云亦云, 一贯主张大胆假设, 小心求证,貌似有点实证主义色彩了, 不多说, 直接看程序: #include #include DWORD WINAPI ThreadFun(LPVOID pM) { wh...

2015-01-29 22:27:24

阅读数 12112

评论数 4

原创 一个低概率bug的定位过程---多线程操作文件时一定要注意

某测试MM反馈了一个与文件有关的低概率问题, 我和我带的那个同事(以下简称我们)都没有重现到这个问题。 但是, 某人(我不认识, 也没有见过面)在电话会议中说这个问题多么多么严重, 还把我们骂了一顿, 语言相当龌蹉, 而且非常生硬, 装得很像个啥领导似的。 虽然涛哥我为人随和善良, 工作积极尽责,...

2015-01-29 00:07:11

阅读数 7583

评论数 0

转载 STL容器比较

由于找不到最原始的地方, 所以只能给这里:http://blog.csdn.net/dodolzg/article/details/6127949 STL的容器可以分为以下几个大类:  一:序列容器, 有vector, list, deque, string. 二 : 关联容器,     有...

2015-01-27 23:58:04

阅读数 5963

评论数 0

原创 今天看到了'\xff'这样的字符,记录一下

废话就不说了, 直接上代码: // VC++6.0 #include int main() { int i = '\xff'; printf("%d\n", i); // -1 char c1 = '\xff'; prin...

2015-01-26 23:10:41

阅读数 7795

评论数 0

原创 复习一下DNS---顺便玩玩nslookup www.baidu.com命令

与其说复习, 还不如说学习。 大学学的那点计算机网络知识, 早就还给老师了。 不过还得感谢该老师, 没有让我挂科,在此感谢一下。当然,把计算机网络教成一门靠背诵过关的课, 我也是醉了。       先来简要谈一下几个基本的概念。       域名: 不说复杂的, 说简单点, 你可以把它理解为一...

2015-01-26 23:02:57

阅读数 7804

评论数 0

原创 小议TCP带外数据(OOB--out of band)

首先要说明的是: udp没有带外数据, 而tcp有。        下面, 我们来聊聊tcp带外数据。  当客户端和服务端建立了tcp连接之后, 我们可以说, 建立了一个tcp通道, 于是乎, 数据可以在这个通道上奔波。 这个tcp通道又可以叫做tcp通带, 总之就是一条道路。 带是什么...

2015-01-23 00:21:32

阅读数 7427

评论数 2

原创 在Windows上, 为什么不要将select函数作为定时器?---因为经常返回WSAEINVAL

我们知道, 在linux上, sleep函数的单位是s, 那怎么进行微妙级别的定时呢? 用select函数即可。 但是, 在Windows上, 强烈不建议将select函数用作定时器(该语句出自大名鼎鼎的Windows Socket这本书), 下面我们来实战一下:        看程序: #inc...

2015-01-22 22:41:32

阅读数 9027

评论数 0

原创 ping不通某ip, 但向它发arp请求居然有响应?--- 谈谈一个奇葩非问题的定位过程

先来抽象介绍一下这个bug单.        现象: 测试同事发现, 在局域网内, pc(w.x.y.10)和某设备S(w.x.y.z.20)都 ping不通某ip(w.x.z.30), 但设备S(w.x.y.z.20)在检测ip(w.x.y.30)的时候, 居然是通过的。        我来翻译...

2015-01-22 22:24:20

阅读数 14388

评论数 0

原创 玩转重要的select函数并分析其行为

说明:  尽管select函数在Windows和Linux上的用法有些差异, 且这些差异值得我们特别注意, 但从功能上来讲, 他们还是差不多的。 本文, 我们仅仅考虑Windows上的select函数。       关于select函数的原型和用途, 百度和谷歌的介绍到处都是, 在本文中, 我...

2015-01-21 21:56:23

阅读数 7924

评论数 10

原创 fwrite和fread函数针对的是字符(无边界), 而不是字符串(以'\0'作为边界)

在前面, 我们讨论过:TCP中send和recv函数针对的是字符(无边界), 而不是字符串(以'\0'作为边界), 在本文中, 我们来讨论一个类似的话题:fwrite和fread函数针对的也是字符(无边界), 而不是字符串(以'\0'作为边界)。   ...

2015-01-18 23:31:22

阅读数 7662

评论数 0

原创 TCP中send和recv函数针对的是字符(无边界), 而不是字符串(以'\0'作为边界)

我第一次玩TCP的时候, 接触的都是字符串的传输。 后来,我接触了字符的传输, 才意识到, 原来,TCP中send和recv函数针对的是字符(无边界), 而不是字符串(以'\0'作为边界)。          先看服务端程序: #include #include // ...

2015-01-18 23:17:48

阅读数 9761

评论数 3

原创 char str1[11] = "12345\06789"; 引发的深刻教训---原来'\067'与'7'是相等的

一直以来, 我总是以为char str1[11] = "12345\06789";和char str2[11] = {'1', '2', '3', '4', '5', '...

2015-01-18 22:35:44

阅读数 6391

评论数 0

原创 recv函数究竟是在剪切(偷取)还是复制(偷窥)? 由0和MSG_PEEK决定!

我们先来看MSG_PEEK的值 #include #include int main() { printf("%d\n", MSG_PEEK); // 2 return 0; }        下面, 我们来看服务端程序: #include #include ...

2015-01-18 20:25:49

阅读数 7756

评论数 5

原创 打油诗一首: 《版本失火, 波及涛哥》

版本失火, 波及涛哥。        夜色已深, 电话慰问。        模块不详, 赶快起床。        奔赴公司, 零点过四。        灯火通明, 个个精神。        凌晨扑火, 彼此忘我。        这火谁纵, 让人心痛。        DT德电,   闪...

2015-01-16 17:54:45

阅读数 6480

评论数 0

原创 多找方法, 少找借口, 总有人可以找到问题的解决办法, 为什么不能是你我呢?---不能抓日志场景下如何抓到日志?

今天遇到一个问题, 需要去定位分析, 但是, 在该场景下却无法抓日志, 那就没办法分析了, 下面我来描述一下场景。          场景: 某S系统在环境A下出现某重要功能异常, 糟糕的是,此时不能开启抓日志, 不能抓日志就没法分析异常的原因啊。 两个开发的领导在那里猜测问题的根源, 但没啥结果...

2015-01-15 23:29:11

阅读数 6891

评论数 0

原创 闲谈软件测试和软件调试的区别---如果要喷, 请手下留情

本文聊聊软件测试和软件调试的区别, 可能会流于肤浅。如果要喷, 请手下留情       一.  测试和调试的主体不同。          一般来说, 测试是由测试人员来完成, 你很少看到有测试人员去调试代码的; 而调试主要是由开发人员来完成的, 当然, 如果要写出高质量的代码, 开发人员必须进...

2015-01-14 00:07:45

阅读数 6046

评论数 0

原创 用BCB做一个自己的Color Dector --- 实时显示鼠标所在位置的像素值

两年前, 我做过一段时间的iOS开发, 我记得自己用过这样一个工具: 该工具可以实时显示鼠标所在位置的像素值。 下面, 我自己用BCB来做一个这样的工具, 代码如下(定时时间间隔为10ms): //--------------------------------------------------...

2015-01-13 23:06:41

阅读数 7055

评论数 0

原创 BCB中如何实时显示鼠标的坐标?---利用定时器

当鼠标在窗体上滑动时, 可以触发窗体的FormMouseMove方法, 代码如下: //--------------------------------------------------------------------------- #include #pragma hdrstop #...

2015-01-13 22:54:45

阅读数 6821

评论数 0

原创 ++i比i++好?---没有意义! i++比i = i + 1好?---仅有一点意义!

经常听到有人谈论, 为什么++i的效率比i++高, 还讨论得饶有兴趣, 在这里, 我要说, 我一点兴趣也没有。 它能提高多少开发效率呢? 不能, 所以, 以后再也不关注这类无聊的问题了。         那i++比i = i + 1好吗? 如果你要跟我说什么逆波兰的效率高, 我也不敢兴趣。 但是,...

2015-01-12 21:42:14

阅读数 6870

评论数 0

原创 宁愿犯编译期错误, 也不犯运行期错误 ---再谈 char *p = "abc"; 的不合理性 以及 写成 if(NULL == p)而不是if(p == NULL)的理由

年末, 各方催进度, 大家也在抓紧时间码代码, 各种低概率死机问题频出, 这些低概率的死机问题非常难以重现和定位, 即便是修改好了, 也需要验证, 如果没有出现死机, 那也不能完全保证修改好了。 总之, 低概率问题就是这么折腾人。          那低概率死机问题是怎么产生的呢? 其实, 很多时...

2015-01-11 22:05:27

阅读数 6211

评论数 0

原创 玩转Windows/Linux tftp命令

tftp很好理解, 主要用来传文件, 下面以我的操作来谈谈tftp中最重要的几个命令。        一. Windows上的sftp命令(据说Linux上也是这样, 当然此处是指非嵌入式的Linux)       步骤:       a. 在Windows上开启sftp服务器tftpd32....

2015-01-11 00:27:28

阅读数 20281

评论数 1

原创 与端口冲突有关的一个低概率bug的定位过程(这次不是360的错啊)---浅谈bind()函数返回失败

测试同事提单反馈: 工具A的x功能会低概率失效, 但没有发现什么规律。事实上, 我也确实遇到过这个低概率问题, 但是没有深入去分析过它(实际上也不是什么概率不概率, 只要发生了, 就会一直发生, 直到某种条件出现改变)。 前段时间用360抢票, 要回家啊, 抢着抢着, 突然发现, A工具的x功能没...

2015-01-10 22:16:36

阅读数 6598

评论数 0

原创 再谈全局数组的外引用

test.cpp文件内容如下: char g_szTest[100] = "original";              现在, 我要在main.cpp中引用这个数组怎么办呢? 肯定不能把char g_szTest[100] = "original";放到...

2015-01-10 12:43:34

阅读数 6345

评论数 0

原创 搞不清楚NULL, "", '\0', '0', 0, "0"的程序猿(C系列)应该好好练习基本功

我们首先来说NULL,  在VC++6.0中, NULL是这么定义的: #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif        也就是说, 在...

2015-01-10 12:27:48

阅读数 5882

评论数 0

原创 静态检查工具检查出 NULL == szTest 问题---估计该程序员是被空指针吓怕了

下面, 我们先来看一个程序: #include using namespace std; int main() { char szTest[100] = {0}; // 一系列操作 ..., ... if(NULL == szTest) { // ... retur...

2015-01-10 00:08:04

阅读数 6298

评论数 0

原创 如何简要判断自己对.cpp文件的修改是否生效? 如何简要判断程序所进入的预编译分支?

有这样的场景: 我们辛辛苦苦地在大型工程某文件中增加了不少代码, 然后经过长时间的编译, 生成版本, 然后长时间地进行刷机升级,刷到机子中(比如手机), 但是, 最终发现自己改的代码并没有生效, 于是就蒙了, 不知道哪个环节出了问题。        这个时候, 怀疑自己的工程代码有问题, 有怀疑编...

2015-01-09 23:54:24

阅读数 6314

评论数 0

原创 写char szTest[1024 * 256] = {0};这种代码的人, 是该反省一下了

某次, 看到了这样的一个代码片段, 顿时想找到代码的作者, 找他议论议论, 最后没有找到啊。 直接给其“精髓”之处: #include using namespace std; int main() { char szTest[1024 * 256] = {0}; // 谁写的, 要挨批评啊...

2015-01-09 23:25:45

阅读数 6704

评论数 5

原创 不对文件指针进行非空判断是很危险的(今天就碰到了)

假设在C:\Documents and Settings\Administrator\桌面\myTest目录下不存在test.txt文件, 那么下面程序便有问题: #include using namespace std; int main() { FILE *pFile = fopen (...

2015-01-09 22:58:12

阅读数 7357

评论数 2

原创 如何利用openssl来计算一个文件的MD5值?

openssl环境的配置, 我就不再说了, 可以参考之前的的博文。 前面, 我们计算过字符串的md5值, 在本文中, 我们来讨论一个文件的md5值, 废话少说, 直接给大家代码, 上点干货: #include #include // 如果你直接拷贝我的程序运行, 那注定找不到md5.h #pr...

2015-01-09 22:24:18

阅读数 10668

评论数 0

原创 我来玩转一下arp -a (pc ping 手机)

我进行了如下图的操作:         我们可以看到, 第一次在pc的cmd中操作arp -a的时候, arp缓存表中并没有手机的相关信息。  此时, 我们让pc来ping一下手机ip, 通过抓包可以看出pc在局域网内广播了arp包, 意思在说: 谁的ip是192.168.1.100, 请告诉...

2015-01-09 00:13:22

阅读数 9698

评论数 0

原创 与内存对齐有关的sizeof

内存对齐, 大家应该都听说过, 我们直接来看程序: #include using namespace std; struct { int a; short b; }A; struct { short b; int a; }B; struct { short b; shor...

2015-01-07 23:55:01

阅读数 5806

评论数 0

原创 如何理解看似复杂的int **p[2][3]; 和int (**p)[3];

我们先看:int a[3];        实际上,我们完全可以理解为int a0; int a1; int a2;  也就是是, 只要理解了int a; 就会理解int a[3]; 如: #include using namespace std; int main() { int a[3]...

2015-01-07 23:41:14

阅读数 9480

评论数 0

原创 再看出参---分析GetMemory的错误(笔试常考)

先来上一个到处可见的错误程序实例: #include using namespace std; void GetMemory( char *p ) { p = (char *)malloc(100); } int main() { char *str = NULL; GetMemory...

2015-01-07 23:25:29

阅读数 5760

评论数 0

原创 C++中的mutable

先来看一个简单的有错误的程序: #include using namespace std; class A { int x; public: void fun() const { x = 100; // error } }; int main() { A a; a.fun...

2015-01-07 23:15:23

阅读数 5760

评论数 0

原创 小议入参和出参

在实际应用中, 我们经常碰到入参和出参, 下面简要说说我个人的体会: 1.  入参的值是被调函数需要, 出参的值是主调函数需要的。 2.  最好不要让参数既做出餐, 又做入参, 否则混乱啊。 3.  入参最好搞成const类型的, 别人一看就知道是入参, 而且安全性高...

2015-01-07 00:07:13

阅读数 17187

评论数 6

原创 这个MM有点萌---请问“非法输入”是指“不合法则的输入”还是“违反法律的输入”?

某次, 软件中有很多中文需要翻译, 我就发给翻译中心的MM帮忙翻译, 我负责答疑一下。 结果, 某MM问:请问“非法输入”是指“不合法则的输入”还是“违反法律的输入”?哈哈, 这MM问得很有道理啊, 我当时被萌倒了, 为她的认真点个赞

2015-01-05 23:43:53

阅读数 6185

评论数 0

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