自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

steedhorse的专栏

throw自己的exception,让别人去catch吧。。。(欢迎关注 http://weibo.com/steedhorse)

原创 测试真是个细致活

测试真是个细致活。产品某模块里有一种实体,行为主要受三个参数控制,用户可以修改这它们。其中两个参数可以等于0,此时产生一种退化形式的实体;另一个不可以等于0。QA都测过了,大于0,正常;等于0,实体退化成简单形式,显示、打印也都正常;小于0,直接拒绝修改,都是正确的行为。却没想到,这种退化的实体在后续操作时会有问题。比如用鼠标选中后,实体上要显示一些便于用户操作的信息,此时程序挂了。这个问题最终被...

2015-01-23 15:00:40 3157

原创 密码学简介(四)

C++加密解密库信息安全对各种信息系统重要性无庸质疑。因此,用于实现软件信息系统的各种编程语言都会有相应的与加密解密有关的库,有的语言(如Java)在其标准库中直接提供基础组件,有的语言(如C++)则需使用第三方库。各种库中带“crypto-”前缀的模块,基本都是用来做这个的。值得一提的是,开源操作系统Linux的内核源码中也有加解密模块,“crypto”源码目录下的便是。这不难理解:OS

2012-05-13 23:54:52 8762 10

原创 密码学简介(三)

报文签别码散列函数的另一种用法与报文鉴别有关。有时候,通信双方不仅关心通信内容的私密性,对信息是否被篡改过(内容完整性)更为关心;或者,他们根本不关心信息的私密性而只关心信息的完整性。亦或者,软件的不同层次可能负责不同的任务,比如底层负责加解密,上层完成完整性鉴别。报文鉴别码可以解决这类需要。报文鉴别码,英文是Message Authentication Code,简写为MAC(注意它

2011-12-19 23:39:30 5140 2

原创 密码学简介(二)

散列函数散列函数,也叫杂凑函数,实际就是哈希(Hash)函数,“散列函数”是信息安全领域惯用的译法。不论从概念还是从形式上看,它跟数据结构课程上讲的哈希函数的确如出一辙:基于任意输入都产生定长的输出,且好的散列函数值域会分布得尽量平均。然而,信息安全领域使用的散列函数却有着诸多安全方面的要求。像针对字符串的每个字节不断乘以一个素数并取模的那种哈希函数,在数据结构领域用于构造关联数组已经

2011-11-30 01:02:02 5677 2

原创 密码学简介(一)

本文简单介绍密码编码学领域的一些基本原理,基本算法和基本理念。仅针对原先对此领域无甚了解的朋友做入门之用。加密解密是信息安全领域的基本技术,加解密系统中的基本概念从下面这张常规加密的简化模型中就可以知道个大概。从图中可以看出,明文输入在密钥K1的作用之下,通过加密算法(如DES)转换成密文,于是可以发送给通信的接收方;接收方则可以通过解密算法以及密钥K2将密文恢复成明文。注意通信内

2011-11-15 21:28:56 6803 2

原创 咱也来做面试题(一)

身边有些做Java开发的朋友,找工作时常常被考到一道关于字符串的题目。题目倒是很基础,然而根据朋友们事后的描述,有理由认为有的面试官自己都没有完全搞清楚这个问题。此外,在CSDN论坛中我也多次看到一些朋友在这个问题上的迷惑。索性把自己的理解写下来吧。 题目是一道简单的小程序,像下面这样:public class Test1 { public static void main(Str

2011-10-21 00:44:05 12409 49

原创 漫谈C++内存分配失败

没错,是“漫谈”,而且“漫”得有点乱。然而,抛砖尚可引玉,想到的事情,纵然脉络不是很畅,写下来也不是坏事。开卷有益,动笔也有益。 一切缘自一位C语言开发经验非常丰富的的朋友问我的一个问题。朋友问:“C++中的new在分配内存失败时会抛出异常(std::bad_alloc)而不返回0(一些老的编译器可能还在返回0,但这样的编译器实在“太老了”),这跟C程序员的做法很不一样。而且,许多C++程

2011-10-19 00:26:44 15837 32

翻译 右值引用简介(中英文对照)

[译注:原文出处:http://www.artima.com/cppsource/rvalue.html][译注:本文介绍的“右值引用”是C++11的新特性]A Brief Introduction to Rvalue Referencesby Howard E. H

2011-10-07 10:56:50 5942 4

原创 PuTTY Configuration Memo

(1) In "Terminal / Features", turn on "Disable application keypad mode", otherwise, the number keys on paypad would not behave well in appli

2011-10-02 15:55:56 2986

转载 好长一句话

读CS:APP,见一段落近乎一句呵成,虽不费解,仍觉恢宏,遂摘录此长句: Buffer overflow attacks have become so pervasive and have caused so many problems with computer syste

2011-10-01 18:13:52 2227

原创 技术翻译感悟——在“原汁原味”与“不露痕迹”之间寻求平衡

关于翻译的品质,我们都知道严复先生在一百多年前提出了“信”、“达”、“雅”三重原则。这三重原则成为百年来译者们追求的目标。实际上,关于翻译,鲁迅先生也有一段很有说服力的见解,它主要从“信”和“顺”两方面讨论翻译的质量。翻译必须有异国情调,就是所谓洋气。其实世界上也不会有完全归化的译文,倘有,就是貌合神离,从严辨别起来,它算不得翻译。凡是翻译,必须兼顾着两面,一当然力求易解,一则保存着原作的丰姿

2011-09-23 23:43:08 2996

原创 两个古老问题的递归算法。

1. 全排列思路1:递归分治(基于交换)#include void perm(int* a, int start, int end);void swap(int& m, int& n);void output(const int* a, int size);int main() { int a[5] = {1, 2, 3, 4, 5}; perm(a, 0,

2011-08-31 17:45:22 2353

转载 读刊摘抄

某日午休时间,看到同事桌上有一本卷了角的2011年第1期《程序员》杂志,随手翻开一页,是一篇访谈,题目叫“Java的命运”,是Common Lisp专家Peter Seibel对Google公司首席Java架构师Joshua Bloch的访谈(郝培强 译)。从这篇文章里,我并没有对有关Java命运的讨论留下较深印象,然而,文中诸多妙语读起来却酣畅淋漓,便随手摘录了下来:(因核心内容并非原创,故标为

2011-06-11 22:12:00 2734 3

原创 单元测试的意义

一般认为,单元测试有四种作用:(1)使代码可以放心修改和重构;(2)迫使程序员从调用者而不是实现者的角度设计软件模块;(3)迫使程序员将软件模块写得易于测试和调用,从而有利于解耦;(4)测试本身可作为被测代码的用法说明,从而替代了一部分文档功能。 如果更深入地

2011-01-27 11:37:00 5666 6

原创 锁的代价

秃子说并发程序的性能瓶颈常常在于锁的滥用。我对此虽深信不疑,却一直没有量化的感性认识。刚才写了个浮点运算小程序一跑,结果有锁无锁性能相差8到10倍。注意,测试程序是单线程的,也就是说这还只是没有实际竞争时的差别。

2011-01-25 14:59:00 3895 6

原创 说说C语言运算符的“优先级”与“结合性”

论坛和博客上常常看到关于C语言中运算符的迷惑,甚至是错误的解读。这样的迷惑或解读大都发生在表达式中存在着较为复杂的副作用时。但从本质上看,仍然是概念理解上的偏差。本文试图通过对三个典型表达式的分析,集中说说运算符的优先级、结合性方面的问题,同时说明它们跟求值过程之间存在的区别与联系。 优先级决定表达式中各种不同的运算符起作用的优先次序,而结合性则在相邻的运算符的具有同等优先级时,决定表达式

2010-09-24 23:58:00 24786 21

原创 二进制补码的特性

C语言是一种较接近机器底层的语言,但它的语言标准中并没有规定有符号数要用二进制补码来表示;可事实上几乎所有平台上有符号数都用二进制补码来表示,它已成为“事实上的标准”,这无疑源于二进制补码巧妙的设计,这种巧妙使得用它来表示有符号数时会带来很多有用的或有趣的特性。

2010-08-07 17:14:00 4548 1

原创 第二届云计算大会上拍的几张照片

张亚勤先生的“云计算定义”: 微软的云平台和技术: 黄铠教授“互联网云中的基本概念”: 黄铠教授的“云服务栈”: 对了,在这次大会上,CSDN的蒋涛老大主持过一个论坛,印象中他说的最多的一个词是“分享”。可惜他主持的时候相机没电了。- -b 再附一张北京夜景: 下面是第二天被几个哥们拉去唱歌的地方……

2010-05-31 00:02:00 2832 3

原创 递归-回溯法求解8皇后问题(C)

无意中翻出了N年前写的递归-回溯法求解8皇后问题,干粹塞到博客中吧。#include #include #include #define QUEENS 8 // 记录解的序号的全局变量。int iCount = 0; // 记录皇后在各列上的放置位置的全局数组。int Site[QUEENS]; // 递归求解的函数。void Queen

2010-05-18 17:29:00 3997 1

原创 蒙特卡罗算法计算圆周率PI(C++)

蒙特卡罗(Monte Carlo)算法计算圆周率的主要思想:给定边长为R的正方形,画其内切圆,然后在正方形内随机打点,设点落在圆内的概为P,则根据概率学原理:P = 圆面积 / 正方形面积 = PI * R * R / 2R * 2R = PI / 4。即 PI=4P。这样,当随机打点足够多时,统计出来的概率就非常接近于PI的四分之一了。#include #include

2010-04-27 09:33:00 14509 5

原创 精确计算100的阶乘(C++)

#include #include using namespace std;void calc(vector& v);void print_result(const vector& v);int main() { vector v; calc(v); print_result(v); return 0;}void calc(vecto

2010-04-23 16:37:00 4870 2

原创 0做除数时

试着编译运行下面的几行小程序:#include int main() { int a = 0; double d = 3 / a; printf("%lf./n", d); return 0;} 正常编译后,运行发生了异常,程序被终止运行,啥也没打印出来。当然问题也是显然的,严重的除0异常。(没有人会写程序故意除以一个零,但难保来自于其它

2010-02-25 11:53:00 2508 3

原创 从Linux的进程调度机制中想到的

Linux持续维护相关的数据结构(诸如runqueue、prio_array),不断更新进程的动态优先级,并相应的调整时间片,从而实现了O(1)复杂度的进程调度算法,可以在常量时间内调度新进程上台运行,而不受系统中进程总数的影响。我觉得这至少能佐证三个道理:(1)效益可以来自于平时点点滴滴地积累(功夫都在平时,而并非只针对schedule()函数本身做“天才的设计”);(2)维持秩序固

2009-11-20 15:40:00 1254 6

原创 推荐几本Linux相关的好书

应用层开发的,可以看看《Linux Application Development》《Advanced Linux Programming》第二本废人同学曾经翻译过,译稿可从这里获取。另外Linux和Unix渊源极深,因此,应用层开发也可以看看《Advanced Programming in the Unix Environment》《The Art of UNIX P

2009-11-18 00:27:00 3118 14

原创 求整数中比特为1的二进制位数

 好几次在CSDN上看到别人讨论如何求出一个整数的二进制表示中状态为1的比特位数。今天写了个程序把从网上看来的加上自己想出来的共有5种方法测试了一下,觉得好玩,就写了这篇博客。首先简单介绍一下这五种方法。第一种:最简单的,通过移位操作逐位测试并计数,不妨称为“逐位测试法”;第二种:注意到对于“单比特二进制”而言,其状态与数值“相同”。即对于单个比特的“数”而言,为0即表示数值0,“

2009-11-14 01:05:00 10166 5

原创 Linux获取本机IP、MAC示例程序

#include #include #include #include #include #include #include #include #include using namespace std;void peek_interfaces(int fd);void print_hw_addr(int fd, const char* if_

2009-09-24 16:36:00 2747

原创 sizeof、pack和alignment

本文简单总结了在考虑字节对齐的前提下,计算对象size的基本规则。但本文只说结论,不讨论初衷和更深奥的原理。有兴趣的朋友可以读读这个:http://msdn.microsoft.com/en-us/library/aa290049(VS.71).aspx 为方便叙述,我们先定义一个概念:“对齐要求”(Alignment Requirement),并用AR来表示,即编译器将把一个对象m对齐到

2009-09-04 16:24:00 1428 5

原创 Hello World——Linux汇编

采用AT&T语法。32位:  1 .section .text 2 .global _start 3 4 msg: 5     .ascii "Hello World!/n" 6 msg_end: 7     .equ len, msg_end - msg 8     .equ SYS_write, 4 9     .equ SYS_exit, 11011 _start:1213    

2009-08-26 13:49:00 2499

转载 网上找来的不错的Debian sources.list

网上找来的Debian sources.list,中科大的,速度不错(我家的网络好像是网通的)。为广而播之,就粘贴一份放自己博客上吧。 deb http://debian.ustc.edu.cn/debian stable main contrib non-freedeb-src http://debian.ustc.edu.cn/debian stable main contrib

2009-08-16 16:41:00 2098 4

原创 相关数据是否封装/封装之后是否隐藏

当一个类包含(组合)了许多数据成员,是否需要把其中某一些相关性很大的数据提取出来,重构成一个或几个小对象,然后让原来的大类直接组合这些小对象呢?当满足以下两种情况之一时,这种重构是有必要的:(1)        存在专门针对这些数据的操作;(2)        还有其它的类或package也包含这些数据。第一种情况有必要,因为我们不仅提取了数据,也提取了方法。结果就是提

2009-08-01 16:37:00 1261 1

原创 front/pop从理论到实践

从STL的std::queue说起STL的std::queue类是个容器适配器,即由其它容器包装而成的特殊数据结构。提到queue,就少不了提及它的两个最重要的操作:往队列尾部填加数据的push和从队列头部弹出数据的pop。本文不打算讨论push,只想考查一下pop。std::queue的pop函数相当简单:void pop();它的唯一作用就是将当前的队首元素从队列中删除。同

2009-02-25 00:51:00 12346 5

原创 一个BUG

解决了一个很隐蔽的BUG,就在刚才。写了一个类,其对象实例需在多线程中使用,因此打算把互斥机制封装在类的内部。于是在类里定义了一个boost::mutex类型的变量,取名叫“mutex_”。在成员函数中使用的时候,用这个mutex_对象初始化一个局部锁:mutex::scoped_lock lock(mutex_);然后写了个单元测试,创建三个线程,每个线程调用对象的某

2008-12-28 16:52:00 1760 3

原创 一个不怎么正确的程序加深一点你对this指针的理解

下面这个程序不见得在每种编译器上都能通过编译,既使通过了编译,也不见得可以成功运行并输出结果。让人欣慰,更让人郁闷的是:它在我的Visual Studio 2005 SP1中,既能顺利编译,也能正常运行。它虽然投机取巧,胡作非为,蝇营狗苟,横行霸道。但它至少能引发你的思考,加深一点你对this指针的理解,如果你还不是十分理解的话。#include using namespace s

2008-07-16 16:55:00 2058 10

原创 打印自然数1到10

最近挺忙的,可不知道为啥,还是愿意把正事丢在一边,琢磨着为自己找点乐子。前两天由于看到Java版一个帖子,竟然越想越好玩,于是又拾起了偶初学BASIC语言时就写得烂熟的一道题目:打印自然数1到10。如果用C++语言来写,会有多少种写法呢? (1)直接循环大多数人的第一反应应该是这样的吧:#include using namespace std; int main() {

2008-07-16 00:50:00 3116 3

原创 浅谈学习C语言与学习C++语言的关系

本文写给C或C++语言初学者。论坛中,常有初学者问“学C++语言前是否要先学C?”。我认为这是个伪问题。问题本身的答案并不是提问人真正想要的。回答问题本身很简单:“当然不需要”。因为C++是一门独立的编程语言,它在语法、构建环境和运行环境上都无需依赖任何其它语言。至于说它是“C语言的超集”,那只是一种模糊的提法而已,更准确的说法应是:C++语言从设计之初就充分考虑了对C语言的兼容,结果它在

2007-12-17 02:26:00 11276 28

原创 C++学习推荐书目

wingfiring(别逗了)(非典型秃子) 初稿steedhorse(晨星) 整理 (一)   语言入门:v        《C++ Primer》最新版本:第三版(第四版国外已上架,国内一些网上书店也在预订中)适合有丰富C经验,缺乏C++经验的。不过我个人一直认为此书带着过于强烈的C语言的痕迹,对于C++的学习未必是好事。 v        《The C++ P

2006-12-15 19:56:00 6328 5

原创 从一个修改私有变量的问题想到的

前几天,在论坛里看到一个帖子,内容是:(原帖见:http://community.csdn.net/Expert/topic/5014/5014384.xml?temp=.3018152 )========================================class a{private: int k;};要求不用友元,不在这个类里添加任何代码

2006-09-22 02:39:00 4561 10

原创 C++、Java和C#语言在处理“虚拟私有方法”上的差异

运行时动态绑定被调过程的“虚拟方法”(virtual method)机制是实现多态的关键技术。C++、Java和C#(按出生年月排列,上同,下同)作为三种主流的支持对面向对象的程序设计语言,自然都提供了这种动态的方法绑定机制,在这个问题上三兄弟没有谁是含糊的。但当“虚拟”(virtual)和“私有”(private)碰在一起时,这几种语言在处理上却有所不同,本文的故事就是从一段小程序说起的:我

2005-03-29 22:19:00 3467 4

翻译 【译】C++回调(CallBack)方案

steedhorse(晨星)译 文章出处: http://www.partow.net/programming/templatecallback/问题提出 解决方案 模板的使用 可变参数回调模板 未来展望 一条小提示 最终的考量 兼容性 资源 问题提出 跟诸如Object Pascal和Ada等其它一些语言不同,C++语言并没有内在地提供

2005-03-25 15:36:00 6707 3

原创 sprintf,你知道多少?

printf可能是许多程序员在开始学习C语言时接触到的第二个函数(我猜第一个是main),说起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf了解多吗?在将各种类型的数据构造成字符串时,sprintf的强大功能很少会让你失望。   由于sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这

2005-03-25 15:29:00 16011 13

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