Month: March 2012

带宽的概念

网络带宽“在口语中用来表示 信道容量,信道容量是 系统能够传输数据位的速度”(wikipedia) 常见的误解是把它当成比特位在线路中跑的速度,以为带宽越大,比特位跑的就越快 实际上,比特位在宽带上跑的速度跟在窄带上跑的速度是一样大的;如果把线路比喻成一车道的公路的话,比特位就是汽车,汽车在宽带这条路上的行驶速率跟汽车在窄带路上的 行驶速率是一样的,但是宽带路上各车之间的车距比较小,单位时间内可以通过的汽车比较多(谢希仁): 更确切一点地说, 宽带并不是高速公路,而是高速公路的入口(郭欣);带宽越高,意味着高速入口的吞吐越快。 带宽其实是 数据块从结点进入到传输媒体的速度 (谢希仁) 而所谓的高速公路的速率,对应的则是比特位单位时间内在介质中传播的距离;一般可视为 2* 10^8米/秒 如果考虑真实的硬件设备,带宽又是怎么一回事呢? 比如说, 百兆网卡,连接到千兆交换机,那整体的传输数率是多少呢? 答案是:取最小的那个值,即100Mb/s 当然,还应该考虑网线的带宽。如果网线带宽只有1M,则整体传输速率就降为1M了 (谈到网线的带宽时,不要去想高速公路的事情,否则会糊涂)。网线的带宽取决于材质(光纤比铜线好),以及一根网线是由多少细线组成的 最后,我们讨论一下,在已知带宽、传输距离的情况下,用户从一个网站下载一个东西到底要多长时间。   解这套题要套这个公式:   总时间 = 数据块从结点进入到传输媒体的时间 + 信号在介质中传播的时间 + 交换结点的处理、排队时间 如果网站服务器的接入带宽是100M, 用户PC的接入带宽是10M, PC和服务器在同一张桌子上(传输距离忽略不计),且PC直连服务器;要下载的文件大小是1G(约1000MB),则 总时间 = 数据块从结点进入到传输媒体的时间 + 信号在介质中传播的时间 + 交换结点的处理、排队时间 = 数据块从结点进入到传输媒体的时间 + 0m/传播速率 + 0 = 数据块从结点进入到传输媒体的时间 = 数据块大小/整体带宽 = 1000MB/min(100M, 10M)b/s = …

带宽的概念 Read More »

Velocity Template Language: The unknown story

例示velocity模板语言中的一些陷阱 objects, strings, quotes #set ($var = $list) $var.class, $var   ## java.util.List, list.toString() #set ($var = ‘$list’) $var.class, $var   ## java.lang.String, "$list"  #set ($var = "$list") $var.class, $var   ## java.lang.String, list.toString()     ——————————— public field not treated as property $publicFieldBean.publicField    ##won’t work; velocity doesn’t recognize public fields as properties ——————————— maps are also supported $map.firstKey, …

Velocity Template Language: The unknown story Read More »

让mysql server打印trace日志

mysql server里面内置了一个类于似log4j的日志框架,以输出mysqld执行时产生的trace log. 要让mysql服务器在运行时输出此类trace log,可以这样启动mysql: (for version 5.1) mysqld –debug=d:F:L:n:O,trace.log:t 具体参数见下图:(摘自 ‘Expert MySQL’)

从java视角学习c++的文件组织、函数及对象的写法

从java视角看待c++代码的一些写法,挺有意思 1. 一个文件未必只定义一个类。实际上, 有的函数和变量可以不属于任何类 //playcpp.cpp文件 int main(){ cout << "hello world! "; return 0; } 2. 函数一般先声明,再定义 int doSum(int a, int b); //声明 int main(){ cout << "hello world! " << doSum(3, 5); return 0; } int doSum(int a, int b){ //定义 return a + b; } 3. 类与对象的写法 //声明类,当前文件是Person.h class Person{ private: //注意冒号 int …

从java视角学习c++的文件组织、函数及对象的写法 Read More »

linux下通过代码补丁升级开源软件

你的软件是通过编译开源软件安装好的,如果开源软件出了新版本,你如何更新你安装了的软件到新版本? 最简单的做法是下载新的版本,重新configure, make再install; 但它的缺点有:   1. 下载新版本的所有文件比较耗时   2. 重新configure意味着原有的配置会丢失,所以要预先整理出来,再configure一次;这样做很容易出错 另一种做法就是使用patch法。所谓patch,指的是版本更新中,具体改变了的代码内容(具体到行);把这个内容存为patch文件,再将这个文件以某个命令“打”到你原来的源码文件中,把它变成新的文件。也就是说,只更新需要更新的代码,同时,保留原来的config;等patch打好了,再进行编译和安装。 这里隐含了一个前提,即你上次安装软件时使用的源码在configure之后不会删掉。 总结一下步骤:    1. 安装1.0版的开源软件       a. 下载1.0版: xxx.1.0.tar.gz       b. 解压它到一个正式的目录中,一般是 /usr/local/src/xxx       c. configure       d. make       e. make install    2. 开源软件商放出1.01版,并提供了patch文件 xxx.patch.1.01    3. 升级到 1.01       a. 下载patch文件       b. 进入到 /usr/local/src/xxx, 打上补丁 xxx.patch.1.01       c. make       …

linux下通过代码补丁升级开源软件 Read More »

centos 5.7上编译构建可调试的mysql5.1

步骤: 0.安装g++:  yum install gcc-c++* 1.安装yum install ncurses-devel, 否则在./configure时可能会遇到 No curses/termcap library found错误  2. ./configure –with-debug –enable-mysql-maintainer-mode=no #如果没有后面这个参数,会导致warnings being treated as errors,一些警告就会导致安装失败 3. make 4. sudo make install 参考: http://book.51cto.com/art/201001/180782.htm http://hi.baidu.com/zys1234/blog/item/a9ae56019256541f1d9583d4.html http://bugs.mysql.com/bug.php?id=57989 http://www.blogjava.net/chenlb/archive/2007/03/20/105114.html的最后一个评论,解决redeclaration of C++ built-in type ‘bool’