Spockwang's Blog

Java Gotchas

| 评论

Primitive types, Operators, and Conversions

== tests object identity (whether the variable references the same object), not content identity (consider equals() instead).

TCP FAQ

| 评论

什么是MSS(Maximum Segment Size)?

TCP用MSS选项允许接收方指定它可以接收的最大段长度。传输的双方通过这个选项协商 出一个上方都接受的最大段长。这个值太大或太小都不好。太小使得每次传输的净荷数 据太少,带宽使用率不高。太大会使得IP帧太大。这样的帧碰到具有较小的MTU的网络 时不得不分片。这些片段中只要有一个超时都会导致整个帧重传。重传的概率随片段的 增加而增加。MSS最好等于路径MTU(path MTU)。

打印螺旋矩阵

| 评论

螺旋矩阵是一个nxn的方阵,其中元素为自然数,但像螺旋方向一样递增。举例如下:

若n = 3,螺旋矩阵为: 1 2 3 8 9 4 7 6 5

TCP协议浅析

| 评论

简介

应用程序通常都需要从一个主机传送大量的数据到另一个主机。采用不可靠的传输机制 会使程序变得异常复杂和困难,因为程序需要检测传输错误和重传丢失的数据等。因此 迫切地需要一种能解决可靠性传输问题的通用机制,这就是TCP诞生的目的。有了这样 一个协议就使得应用程序无需考虑网络的各种细节。

FTP的主动和被动模式

| 评论

FTP是仅基于TCP的服务,不支持UDP。与众不同的是FTP使用2个端口,一个数据端口和 一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数 据端口)。但FTP工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大 不同之处。

数据对齐

| 评论

为什么要数据对齐?

所谓数据对齐是指访问数据的地址要满足一定的条件,能被这个数据的长度所整除。例 如,1字节数据已经是对齐的,2字节的数据的地址要被2整除,4字节的数据地址要 被4整除。

C++的new和delete运算符与内存分配函数和释放函数

| 评论

我曾经碰到下面一段代码:

1
int *p = new (sizeof(int));

编译通不过,提示说是new运算符语法错误。但若换成如下:

1
int *p = operator new (sizeof(int));

编译顺利通过。一时不得其解。前一句代码显然是调用new运算符;后一句看起来也像 是调用new运算符,毕竟其它运算符可以这样调用。

生成可执行的共享库

| 评论

Linux系统下共享对象文件和可执行文件的格式都是ELF格式,它们并没有什么本质 上 的区别。共享对象文件也是可以执行的。例如Linux下动态链接器ld-linux.so就 是共 享对象文件,它也可以像可执行文件一样执行;Glibc库函数也是一样。