- 博客(123)
- 资源 (1)
- 收藏
- 关注
原创 常用服务器模型总结
UNPv3上一共总结了9种服务器模型分别是:1.迭代服务器 2.并发服务器,为每个客户fork一个进程 3.预先派生子进程,每个子进程都调用accept,accept无上锁保护 4.预先派生子进程,以文件锁的方式保护accept 5.预先派生子进程,以线程互斥锁上锁的方式保护accept 6.预先派生子进程,由父进程向子进程传递套接口描述字 7.并发服务器,为每个客户请求创建
2012-08-19 14:15:10
3237
2
原创 线程私有数据thread-specific
设计线程私有数据主要基于一下两点需求: 1.我们希望线程间不需要同步机制就能访问各自的separate数据 2.我们期望由于历史原因以进程为基础设计的接口可以适应多线程环境 为实现线程私有数据POSIX规定了如下接口:int pthread_key_create(pthread_key_t *key, void (*destructor)(void*)); 这个函数创
2012-08-09 21:00:46
1245
原创 TCP—定时器简介
本系列文章是博主学习TCP协议以来的个人笔记。博主不能保证本文所述内容绝对正确,所以请读者抱着怀疑的态度阅读本博客内的文字。如果读者因本博客内的文字造成损失,本人无力负责。如果有任何谬误或者问题,希望读者不吝赐教。 定时器在TCP可靠传输的过程中起着举足轻重的作用。TCP在建立连接之后可能(保活keep-alive定时器是可选的)会 启动四个定时器,分别是:重传定时器:为了
2012-08-03 23:06:59
3214
3
原创 TCP—拥塞控制简介
本系列文章是博主学习TCP协议以来的个人笔记。博主不能保证本文所述内容绝对正确,所以请读者抱着怀疑的态度阅读本博客内的文字。如果读者因本博客内的文字造成损失,本人无力负责。如果有任何谬误或者问题,希望读者不吝赐教。 TCP实现可靠传输有赖于其超时/重传机制,但这种机制并非总是那么可靠。设想广域网上网络拥塞,某些报文传输延时较长(但并未丢失),此时发送端重传计时器超时
2012-07-27 22:42:49
1332
原创 掌握Linux之实际用户ID 有效的用户ID 保存的设置用户ID
Linux通过进程的 实际用户ID/实际组ID,有效用户ID/有效组ID/附加组ID,保存的设置用户ID/保存的设置组ID 来控制进程对资源的访问。 其中,实际用户ID/实际组ID标识进程究竟是谁(即是进程在系统的唯一标识) 有效用户ID/有效组ID/附加组ID决定了进程的访问权限 保存的设置用户ID/保存的设置组ID在执行一个程序时包含了有效用户ID和
2012-07-24 21:37:25
2844
原创 TCP—慢启动简介
本系列文章是博主学习TCP协议以来的个人笔记。博主不能保证本文所述内容绝对正确,所以请读者抱着怀疑的态度阅读本博客内的文字。如果读者因本博客内的文字造成损失,本人无力负责。如果有任何谬误或者问题,希望读者不吝赐教。 在广域网,TCP报文可能要经过多个路由器和速率较慢的链路。如果发送方一开始就向网络发送多个报文段,则中间路由器的缓冲负担会立刻加重,很可能致使路由器缓存空
2012-07-23 22:24:57
8598
原创 TCP—滑动窗口协议
本系列文章是博主学习TCP协议以来的个人笔记。博主不能保证本文所述内容绝对正确,所以请读者抱着怀疑的态度阅读本博客内的文字。如果读者因本博客内的文字造成损失,本人无力负责。如果有任何谬误或者问题,希望读者不吝赐教。在遍布世界的互联网线路上进行可靠的数据传输谈何容易,一来传输介质有差异,因此当肥胖管道中的数据洪流涌入瘦小管道时,很可能发生拥塞;二来发送者和接受者的数据
2012-07-22 22:34:12
3694
原创 TCP—Nagle算法
本系列文章是博主学习TCP协议以来的个人笔记。博主不能保证本文所述内容绝对正确,所以请读者抱着怀疑的态度阅读本博客内的文字。如果读者因本博客内的文字造成损失,本人无力负责。如果有任何谬误或者问题,希望读者不吝赐教。 Nagle算法的名字来源于其发明者John Nagle,该算法主要用于避免过多小分节报文在网络中传输,从而降低网络容量利用率。比如一个20字节的TCP首部+20字节
2012-07-22 13:54:20
8250
1
原创 TCP报文首部各参数简介
本系列文章是博主学习TCP协议以来的个人笔记。博主不能保证本文所述内容绝对正确,所以请读者抱着怀疑的态度阅读本博客内的文字。如果读者因本博客内的文字造成损失,本人无力负责。如果有任何谬误或者问题,希望读者不吝赐教。TCP报文段首部格式如下图所示: 常用的选项段包括:1.窗口扩大选项 2.时间戳选项 3.MMS选项等需要注意的事:1.序号是以字节为单位,因
2012-07-21 18:38:25
3444
原创 Boost::bind
bind库在boost库导论中被称作绑定器,其实在STL中已经有类似的功能,称之为函数配接器《C++标准库》中说明“所谓函数配接器是指能够将仿函数和另一个仿函数(或某个值,或某个一般函数)结合起来的仿函数” 在STL中,对于函数对象,成员函数,一般函数分别设计了绑
2011-09-09 15:21:51
849
原创 当Perl遇见Mysql 1
MySQL就不用多介绍了,最著名的开源关系型数据库。Perl的优势之一就是已经有了很多库,用于处理领域问题,比如说CGI,HTML,XML等模块。对于MySQL自然也有专门的开发库,就是DBI。 用DBI连接到数据库一般分为五个步骤:1.连接到数据库 2.准备一条语句
2011-09-08 11:43:12
691
原创 线程安全,异常安全,类型安全
线程安全,类型安全以及异常安全之前的共同点是它们都是为创建更为健壮的程序而被提出的。线程安全线程安全是指如果一个函数在同一时刻可以被多个线程安全地调用,则称该函数是线程安全的。不具备线程安全的函数在没有保护的情况下,不能在多线程环境中正确使用。
2011-09-03 20:55:26
2026
原创 CGI小结
这段时间一直在学习Perl。既然学习了Perl,不学CGI似乎有些说不过去(Perl是CGI事实上的标准语言)。今天对CGI原理,运行流程,以及相关概念做一个小结。 CGI即公共网关接口,其功能是允许web服务器越过它的常规边界,以便从外部数据库或文件中检索和访问信息
2011-09-03 10:53:43
1176
原创 TCP/IP:MSS MSL MTU
1.MSS(maximum segment size)即最大分节大小,是TCP的选项之一。TCP发送的SYN中带有这个选项,它通知对端它能接受的每个TCP分节中的最大数据量。发送端TCP用接收到的MSS值作为所发送分节的最大大小。在TCP的MSS选项中,MSS值是一个
2011-09-01 00:25:56
3816
原创 单例模式的几种实现及其比较
1.惰性实现class Singleton{ static Singleton singletonM; int i; Singleton(int x):i(x){} Singleton& operator=(Singleton&);
2011-08-30 21:04:55
657
原创 STL总结:迭代器
所有容器都定义了各自的迭代器迭代器是一个对象,它的工作是在容器中挑选元素,并将其呈现给迭代器使用者。迭代器分类Input迭代器 向前读取 istreamOutput迭
2011-08-30 16:42:53
830
原创 构造函数,析构函数与public,protected,private的恩怨纠葛
确保类动态创建的一种方法是将析构函数移到类的私有区域。 从语法上来讲,一个函数被声明为protected或者private,那么这个函数就不能从“外部”直接被调用了。对于protected的函数,子类的“内部”的其他函数可以调用之。而对于private的函数,只能被本
2011-08-25 21:17:00
861
原创 TIME_WAIT 状态
TIME_WAIT状态小析 毫无疑问,TCP中有关网络编程最不容易理解的就是TIME_WAIT状态。首先明确一个概念:最长分节生命期(maximum segment lifetime,MSL).MSL是IP数据报能够在互联网中生存的最长时间。这个状态是执行主动关闭的一端才会有的 存在TIME_WAIT状态有两个理由:1.可靠的实现TCP全双工连接的终止如果TC
2011-08-24 23:20:13
868
2
原创 Perl 正则表达式小结
Perl 正则表达式小结1. m定界符 “/ ****/”斜杠为默认定界符,若更改“/ ”,则须m定界符说明,m{****}2. g 全局匹配3. i 大小写不敏感4. s用于替换操作5. e求表达式值6. \d 匹配单个数字7.\D匹配非数字字符
2011-08-19 15:24:25
553
原创 STL 标准容器比较
这一类的比较以前写过一篇,但是找不到了。这次再总结一下。STL基本容器分为:顺序容器和关联容器顺序容器1.Vector其内部是由动态数组(dynamic array)实现,其他操作都是以这个实现为基础的。 Vector支持随机存取,只要知道位置就可以在常数时
2011-08-18 22:44:47
1079
转载 SHELL:awk,sed,常用文本处理命令
awk:awk ‘print{$1,$2}’ grade.txt 打印单独记录awk ‘BEGIN print{“Name Belt/n-------------------------------”} print{$1”/t”$4
2011-08-07 16:04:55
1375
原创 Inside The C++ Object Model(Note):sizeof in an object
Data语义学:一.一个类得实际大小受到三个因素影响:1.语言本身所造成的额外负担.比如 virtual ,虚基类.2.编译器对于特殊情况所提供的优化处理3.内存对齐(Alignment)的限制
2011-07-15 14:50:39
594
原创 Inside The C++ Object Model(Note):Member Initialization List
为了让程序顺利通过编译,在下列四种情况中你必须使用成员初始化列表:1.当初始化一个reference member时;2.当初始化一个const member时;3.当调用一个base class 的constructor,而它拥有一组参数;4.当调用一个member class
2011-07-13 22:57:54
673
原创 Inside The C++ object model:note(3)
程序转化语义学主题:在对象的初始化时,编译器对用户程序的转化以及优化处理。一,明确的初始化操作 当用户使用显示初始化的时候,编译器会进行对象重新定义,并调用对应的拷贝构造函数。例如,已知X x0; 的时候,我们使用的时候, 编译器会剖开成这样:X x1(
2011-07-12 15:29:43
520
原创 Inside the C++ Object Model:note(2)
构造函数语义学 主题:论述编译器对于“对象构造过程”的干涉,以及对于“程序形式”和“程序效率”上的冲击一.默认构造函数的建构操作和拷贝构造函数的建构操作ARM:默认构造函数和拷贝构造函数在必要时,才被编译器产生出来。说明:“必要”意指当类不展现按位逐次拷贝语义(bitwise c
2011-07-11 23:35:19
497
原创 Inside The C++ Object Model :note (1)
1.C++ 在布局以及存取时间上的主要的额外开销是由virtual引起,包括:virtual function机制:用以支持一个小效率的执行期绑定
2011-07-10 20:02:31
469
原创 memberwise and bitwise in C++
Default Memberwist Initialization: During initialize an object, base classs constructor(s) is(are) called, data members are called, this constructor is called. Of course, this is a recursive procedu
2011-06-15 13:58:00
734
原创 top命令各参数含义
top - 08:28:14 up 30 days, 5:28, 4 users, load average: 0.00, 0.00, 0.00Tasks: 150 total, 1 running, 149 sleeping, 0 stopped, 0 zombieCpu(s): 0.0% us, 0.0% sy, 0.0% ni, 99.9% id, 0.0% w
2011-06-04 17:51:00
995
原创 TX GAME笔试
关于宏定义:我们最好在宏定义中把每个参数都用括号括起来。同样,整个结果表达式也应该用括号括起来,以防止当宏用于一个更大一些的表达式中可能出现的问题。 1 #define SQR(X) X*Xint a=10a/=SQR(1+2)/SQR(1+2)a = ?a=1 SQR(1+2)/SQR(1+2)=1+2*1+2/1+2*1+2 = 1+2+2+2+2 = 9
2011-06-04 17:47:00
623
转载 C++中extern “C”含义深层探索
<br />1.引言<br /> C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。<br /> 2.从标准头文件说起<br /> 某企业曾经给出如下的一道面试题:
2010-10-11 11:49:00
375
转载 动态链接库*.so的编译与使用
动态链接库*.so的编译与使用 动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一点帮助。1、动态库的编译下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。so_test.
2010-10-09 18:20:00
451
原创 LINUX下的C编程实战之gcc/gdb/make
<br /> <br />Linux下的C编程实战之gcc/gdb/make<br />1 :文本编辑器<br />2:Gcc 编译器的使用<br />3:GDB debug调试器<br />4:make<br /> <br /> <br />一:文本编辑器<br />在Linux平台下,可用任意一个文本编辑工具编辑源代码,但笔者建议使用emacs软件,它具备语法高亮、版本控制等附带功能<br />二:GCC编译器<br /> GCC 是 GNU 编译器集合(GNU Compiler Col
2010-10-09 13:56:00
746
转载 程序员:下一次面试前你需要准备的五个基本步骤
<br />导读:面试准备的重要性不用编者多言,大家都很清楚。本文是加拿大的一位程序员所写。大家可以看看国外程序员是怎么准备面试。不管你是否认同他的说法,《诗经》中有句话非常好——“它山之石,可以攻玉”。如果你还有其他面试准备方法,不妨在评论或微博中和大家一起分享。<br />一、开门见山<br />一般来说,你(求职者)在面试中会花很多时间谈论以前的经历。如果你还没有想出你的最具代表性的经历/案例,那么你现在是时候该做了。下面有张问题 表,虽然很多问题看似比较低级,但相信我,看完这些问题后,你应当反思自己
2010-10-05 22:53:00
474
转载 diff和patch使用指南
<br />diff和patch是一对工具,在数学上来说,diff是对两个集合的差运算,patch是对两个集合的和运算。<br />diff比较两个文件或文件集合的差异,并记录下来,生成一个diff文件,这也是我们常说的patch文件,即补丁文件。<br />patch能将diff文件运用于 原来的两个集合之一,从而得到另一个集合。举个例子来说文件A和文件B,经过diff之后生成了补丁文件C,那么着个过程相当于 A -B = C ,那么patch的过程就是B+C = A 或A-C =B。<br />因此我们
2010-09-26 14:25:00
474
转载 Unix环境变量
<br />Unix的环境变量 <br /><br /><br />一、SHELL 的START FILES <br /><br />不管你的login shell是那一种shell,每一个shell都有它自己的start files,我们设定理想环境时所需使用的指令与设定的变量,都可以写在这些start files中,在login时先後加以执行,这些start files的名称分别是: <br /><br />SHELL START FILES <br /><br />sh /etc/profile
2010-09-16 11:49:00
1344
转载 /etc/profile和 . profile 文件
<br /><br />两个重要的profile文件<br />在UNIX/Xenix系统中有两个对用户而言必不可少的文件——etc目录下的profile文件和<br />用户主目录($HOME)下的.profile文件。前者是系统文件,对系统下全体用户起作用,后者是<br />用户自己的"私人"文件。<br />这两个文件的功能类似于DOS系统下的Autoexec.bat文件,不同之处在于Autoexec.bat文<br />件可以为空,而这两个文件内容不仅不能为空,而且必须存在。它们在用户登录(Logi
2010-09-15 17:42:00
58210
转载 脚本与环境变量设置
<br />遇到问题:<br />在一个脚本文件中定义一个了变量,然后export变量,脚本退出后,设置的环境变量失效。<br /><br />分析问题:<br />执行一个脚本时,会先开启一个子shell环境(不知道执行其它程序是不是这样),然后将父shell中的所有系统环境变量复制过来,这个脚本中的语句就 在子shell中执行。(也就是说父shell的环境变量在子shell中可以调用,但反过来就不行,如果在子shell中定义了环境变量,只对该 shell或者它的子shell有效,当该子shell结束时,
2010-09-15 16:47:00
3442
转载 UltraEdit 常用快捷方式
UltraEdit常用快捷键Ctrl+N :创建一个新文件 <br />Ctrl+O :打开文件 <br /><br />Ctrl+Q :快速打开文件 <br /><br />Ctrl+F4 :关闭文件 <br /><br />Ctrl+S :保存活动文件 <br /><br />F12 :另存为 <br /><br />Ctrl+P :打印当前活动文件 <br /><br />Ctrl+0~9 (0~9为对应的粘贴板号,一共可建十个):编辑指定的粘贴板 Ctrl+Y (previously Ctrl+A)
2010-09-13 19:03:00
1379
转载 Linux文件系统ACL介绍
<br />简介<br />ACL是访问控制列表(Access Control Lists)的缩写,对于Unix系统,ACL是标准Unix文件属性(r,w)的附加扩展。ACL给予用户和管理员更好控制文件读写和权限赋予的能力,商业Unix和NTFS以及Freebsd都支持文件系统的ACL,Linux从2.6内核开始支持对Ext2,Ext3和XFS,JFS等文件系统的ACL支持。<br />注意,Fedora Core从2开始支持ACL操作,虽然好像并不支持JFS和ReiserFS。<br /><br />打开
2010-09-10 12:22:00
4172
原创 more effective c++:the difference between pointer and reference
<br />首先,没有所谓的 nul reference 但是有 null pointers.一个reference必须总是代表某个对象。<br />pointers可以被重新赋值,指向另一个对象,reference却总是指向(代表)
2010-09-10 12:21:00
582
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人