整数溢出问题

在使用 C/C++ 编写的程序中,缓冲区溢出是一个臭名昭著的问题。想必在每一堂 C 语言课程上都会被提及和强调。然而,相对而言缓冲区溢出也是比较容易检测的。对于有经验的程序员来说,比较容易排查和避免。

与缓冲区溢出相比,整数溢出是一个更加隐蔽的问题。与缓冲区溢出导致攻击者可以执行恶意代码不同,整数溢出的后果是程序无法正确的进行判断和检查,其危害取决于该段程序的具体流程。

为什么说整数溢出更加隐蔽呢?因 ...

如何缩短网址

问题1:有些时候我们不希望直接在URL中使用数字ID,原因之一是数字ID显得有些太长了。那么如何使它变得短一些呢?
问题2:相似的需求也出现在微博的短网址服务中。我们如何把一个较长的网址与一个较短的网址对应起来呢?

最容易想到的方法大概是使用哈希函数把URL映射到相应的字符串上。但是使用哈希函数不可避免的会出现冲突的问题。并且,常用的哈希算法(例如MD5、SHA1、CRC32)生成的字符串比较长,不能 ...

在 Windows 下建立符号链接

如果开始使用 Windows,如何建立快捷方式大概是最早教授的使用技巧之一。但是非常糟糕的一点是,快捷方式只能被 Windows 的资源管理器所理解,在其它软件——例如 Apache——看来,快捷方式不过是一个普通的文件。

于是,我们需要一种文件系统层面的“快捷方式”,它能够对所有应用程序都有效。在 Linux 下我们可以通过 ln 命令来创建这样一种被称作“符号链接”的东西。

当然,在 Window ...

为什么要使用Git而不是SVN?

为什么要使用Git而不是SVN?

这个话题或许会带来一些争议,因为Git和SVN确实由于其不同的设计理念而各有优点。这里仅就我个人在使用过程中的一些感受进行阐述。

1、SVN必须要联网才能工作。

这并不一定是指连上互联网,因为SVN服务器往往设置在局域网内。并且,由于某些众所周知的原因,SF.NET 等提供的服务经常中断,导致无法提交更改。

而Git可以在任何时候进行commit,而仅需要在有网络连接的时 ...

Javascript对象赋值

和Java一样,在Javascript中直接把一个对象赋值给另一个变量并不会真正地拷贝整个对象,而是仅仅把该对象的“指针”赋值给该变量。这样的设计显然是出于性能和效率上的考虑。

然而,容易被忽略的是,一些隐式的赋值操作也是遵守这个原则的,例如通过数组对象的push方法为数组添加一个新的元素。这一点可能需要特别注意。

奇怪的是Javascript似乎并不支持“真正的对象拷贝”,因而当需要进行这种拷贝的时 ...

JS打印调试信息

对于初学js开发的童鞋来说,最常用的输出调试信息的办法大概是alert。不过alert显得有些不友好。相较之下,使用console对象来进行程序调试来得优雅一些。

不过使用console的时候,也有个潜在的问题需要注意,由于较老版本的ie浏览器(IE6/7)不支持console对象及相应的方法,如果发布的代码中依然包含console方法时,就会出现js报错。

所以,我们可以使用下面这个函数来打印调试信 ...