自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

认知 行动 坚持

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

  • 博客(53)
  • 资源 (19)
  • 收藏
  • 关注

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

公司打算给员工家庭寄送春节的贺喜关怀卡, 链接发给所有的员工, 让大家填写个申请。我一看那个链接地址, 发现其中居然有condolence这个单词, 是哪位这么有学问, 把慰问信翻译成condolence letter呢? 我读书不多, 你不要开这种玩笑好不好?       不过, 不只是我发现了这个问题, 还有其他同事也对此进行了吐槽。 其实, 也算是小事一桩, 只当复习了一个六级单词吧,

2015-01-31 20:55:13 8020 1

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

昨天, 在公司园区里面等班车, 一老外过来问我:Will the shuttle bus go to "ei den"? 我愣了一会儿后说:It will first go to B2, and then to A. 她满意地点头致谢       不过我第一次确实没有听懂“ei den”, 后来琢磨了一会儿, 突然发现, 原来A10用地道的印度英语表达就是“ei den”啊, 还好, 我没有指

2015-01-31 20:15:24 8759

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

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

2015-01-29 23:26:27 12197 6

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

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

2015-01-29 22:59:11 47842

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

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

2015-01-29 22:27:24 18037 11

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

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

2015-01-29 00:07:11 9416 1

转载 STL容器比较

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

2015-01-27 23:58:04 7635

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

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

2015-01-26 23:10:41 15292 1

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

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

2015-01-26 23:02:57 12288 4

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

首先要说明的是: udp没有带外数据, 而tcp有。       下面, 我们来聊聊tcp带外数据。  当客户端和服务端建立了tcp连接之后, 我们可以说, 建立了一个tcp通道, 于是乎, 数据可以在这个通道上奔波。 这个tcp通道又可以叫做tcp通带, 总之就是一条道路。 带是什么? 如果你还不明白, 那你就把你的裤带解开, 然后把裤带拉直, 看到了吧, 带就是一条路, 一个通道。

2015-01-23 00:21:32 10075 2

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

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

2015-01-22 22:41:32 11163

原创 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)的时候, 居然是通过的。       我来翻译一下: pc(w.x.y.10)和某设备S(w.x.y.z.20)都 ping不通某ip(w.x.

2015-01-22 22:24:20 21645 1

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

说明: 尽管select函数在Windows和Linux上的用法有些差异, 且这些差异值得我们特别注意, 但从功能上来讲, 他们还是差不多的。 本文, 我们仅仅考虑Windows上的select函数。 关于select函数的原型和用途, 百度和谷歌的介绍到处都是, 在本文中, 我就不赘述了, 我们仅仅来玩代码并作简要分析。 如果有不对或者偏颇的地方, 大家可以各抒己见, 共

2015-01-21 21:56:23 9496 13

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

在前面, 我们讨论过:TCP中send和recv函数针对的是字符(无边界), 而不是字符串(以'\0'作为边界), 在本文中, 我们来讨论一个类似的话题:fwrite和fread函数针对的也是字符(无边界), 而不是字符串(以'\0'作为边界)。        因此, 我们在用的时候一定要注意, 哪里需要'\0', 哪里不需要‘\0’. 这些都是一些基本的问题。        由于之前

2015-01-18 23:31:22 9987 1

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

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

2015-01-18 23:17:48 12726 4

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

一直以来, 我总是以为char str1[11] = "12345\06789";和char str2[11] = {'1', '2', '3', '4', '5', '\0', '6', '7', '8', '9', '\0'};是完全等价的。直到今天调试一个程序, 我才发现, 他们原来是不等价的, 我被这个问题蒙在鼓里, 看来有必要深入看看。        我一直苦苦思索原来程序产生的异常,

2015-01-18 22:35:44 8229 1

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

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

2015-01-18 20:25:49 9753 5

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

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

2015-01-16 17:54:45 8146

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

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

2015-01-15 23:29:11 8853 5

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

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

2015-01-14 00:07:45 8391

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

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

2015-01-13 23:06:41 8780 1

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

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

2015-01-13 22:54:45 8674 1

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

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

2015-01-12 21:42:14 8669

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

年末, 各方催进度, 大家也在抓紧时间码代码, 各种低概率死机问题频出, 这些低概率的死机问题非常难以重现和定位, 即便是修改好了, 也需要验证, 如果没有出现死机, 那也不能完全保证修改好了。 总之, 低概率问题就是这么折腾人。 那低概率死机问题是怎么产生的呢? 其实, 很多时候都是程序猿编码不细心, 对一些问题理解不透彻造成的。 比如最常见的内存错误问题。

2015-01-11 22:05:27 8266 1

原创 玩转Windows/Linux tftp命令

tftp很好理解, 主要用来传文件, 下面以我的操作来谈谈tftp中最重要的几个命令。       一. Windows上的sftp命令(据说Linux上也是这样, 当然此处是指非嵌入式的Linux)      步骤:      a. 在Windows上开启sftp服务器tftpd32.exe, 然后选定一个默认的目录作为服务器根目录,此时, tftpd32.exe自动读取pc

2015-01-11 00:27:28 30213 2

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

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

2015-01-10 22:16:36 8376 1

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

test.cpp文件内容如下:char g_szTest[100] = "original"; 现在, 我要在main.cpp中引用这个数组怎么办呢? 肯定不能把char g_szTest[100] = "original";放到test.h文件中, 然后用main.cpp来包含test.h啊, 这样容易形成编译碰撞, 也是应该禁止的。 那怎么办? 其实, 我们可以

2015-01-10 12:43:34 8052 2

原创 搞不清楚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        也就是说, 在C中, NULL是一个指针, 而在C++中,NULL就是0, 但是该0可以与指针进行比较。 可以这么

2015-01-10 12:27:48 7333

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

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

2015-01-10 00:08:04 7909

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

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

2015-01-09 23:54:24 8037

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

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

2015-01-09 23:25:45 8542 5

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

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

2015-01-09 22:58:12 9130 2

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

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

2015-01-09 22:24:18 14478 2

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

我进行了如下图的操作:        我们可以看到, 第一次在pc的cmd中操作arp -a的时候, arp缓存表中并没有手机的相关信息。  此时, 我们让pc来ping一下手机ip, 通过抓包可以看出pc在局域网内广播了arp包, 意思在说: 谁的ip是192.168.1.100, 请告诉我你的mac,  手机受到这个包后, 发现pc喊的正是自己的ip, 于是把自己的mac地址返回,

2015-01-09 00:13:22 15655 6

原创 与内存对齐有关的sizeof

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

2015-01-07 23:55:01 7228

原创 如何理解看似复杂的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]; a[0] = 0; a[1] = 1; a[2] = 2; return 0;}

2015-01-07 23:41:14 12406

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

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

2015-01-07 23:25:29 7185

原创 C++中的mutable

先来看一个简单的有错误的程序:#include using namespace std;class A{ int x;public: void fun() const { x = 100; // error }};int main(){ A a; a.fun(); return 0;}       如果const类型的fun函数一定要修改x, 那

2015-01-07 23:15:23 7214 1

原创 小议入参和出参

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

2015-01-07 00:07:13 35809 8

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

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

2015-01-05 23:43:53 7941

ipscanner.rar

获取网络的ip, host name和mac地址。我想免费让大家下载, 但csdn规定了必须设置积分, 没办法。

2017-12-01

linux protobuf安装文件

linux, google protobuf, 安装文件。 使用方法:http://blog.csdn.net/stpeace/article/details/53029812

2016-11-04

linux tree命令的源码

很多linux上没有tree命令, 该资源提供了tree命令的源码, 大家可以下载, 编译并安装, 具体请参考:http://blog.csdn.net/stpeace/article/details/49524273

2015-11-01

编译好的openssl库和头文件

编译好的openssl库, 欢迎使用, 具体使用方法, 请见http://blog.csdn.net/stpeace/article/details/41921287

2014-12-14

入门数据库sqlite3的最佳实践资料

入门数据库sqlite3的最佳实践资料, 里面是我打包好的程序, 附加一些数据库工具, 非常可以。 当然你也可以参考我的博文http://blog.csdn.net/stpeace/article/details/38503843

2014-08-12

Wireshark抓包工具

Wireshark抓包分析工具, 非常好用, 非常实用。

2014-06-08

优秀的截图软件

截图软件fast stone. 解压即可使用。 解压后, 可能会产生一些依赖性文件, 请不要轻易删除。

2014-05-25

获取网卡信息所需的头文件和库

获取网卡信息所需的头文件和库:IPEXPORT.H Iphlpapi.h IPHLPAPI.LIB IPRTRMIB.H IPTYPES.H

2013-10-19

哈希值计算软件

可以计算md5, sha1, sha256等哈希值的工具软件,我无法形容它的优秀。

2013-10-18

在Windows下学习Linux命令

在Windows下想学linux命令的同志,你终于找到了该资料。用法:解压,然后双击其中的cmd.exe, 然后就可以输入linux命令了,比如ls等(千万要注意,不要进行路径切换,否则linux命令就执行不了,总之,要确保相应文件在当前目录下)。

2013-08-08

计算机网络第5版谢希仁编配套光盘资料

计算机网络第5版谢希仁编配套光盘资料,这是计算机考研的指定教材对应的资料,你应该拥有它。

2013-07-19

OllyDBG反汇编工具

OllyDBG反汇编工具,非常强大。深化功底,需此工具。

2013-07-19

masm汇编器

微软的汇编器,其中有关键的masm.exe和link.exe,我试过,发现可用。

2013-07-19

word转pdf的插件

word转pdf的插件,直接安装即可,安装完后,“另存”word文档的时候,可以选择pdf(我用的word版本为2007)。

2013-07-18

音频处理软件Gold Wave

一款强大的音频处理软件,可以对音频进行各种处理。例如:如果你在准备某考试,需要听音频资料,但是,你嫌音频太慢,而且你的MP3播放器无法加速,那么你可以用该软件对音频本身进行加速,即改变音频本身,使之变快。另外,在处理的时候,可以实现批处理(我亲自实践过,发现可行)。

2013-07-17

H.264visa软件

一款非常强大的H.264视频码流的解析软件,可以看到解码后视频的像素值,运动矢量,宏块等非常多的信息(也可以打开原始的YUV视频,并看到像素值,但必须先用该软件打开某一H.264视频码流),比Elecard StreamEye软件(有bug)更为强大,我一直用H.264visa,目前没有发现有什么bug. 另外,该软件安装后1个月就会过期,没有关系,1个月后,你重新安装一次即可。

2013-07-13

Elecard StreamEye

Elecard StreamEye,一款分析H.264视频码流的工具,如果你在学习H.264,那么,你应该拥有它。

2013-07-13

YUVviewer :原始的YUV视频的播放器

原始的YUV视频的播放器(软件不是我写的),如果你做视频处理、视频压缩编码、视频通信、视频检索、视频取证,那么你很可能需要它。该软件的缺点是:你无法看到YUV视频的像素值。

2013-06-24

经典的C语言编译器:TC2.0

一款经典的C语言编译器:Borland Turbo C 2.0. 怀念Borland产品的人可以用一下,体验一下DOS下的编程。如果是C语言初学者,建议用MS的VC++6.0. 我试过,该TC2.0可以正常使用。

2013-06-23

空空如也

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

TA关注的人

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