三次握手之后。
流无边界,数据报有边界。TCP是先进先出的,并且可靠。
const用来说明所定义的变量是只读的。
这些在编译期间完成,编译器可能使用常数直接替换掉对此变量的引用。
valitale 的意思是“易变的”,它的作用是建议编译器,此处必须得从地址去取,不得作相关优化。
感觉有点难
#define OFFSETOF(s, m) ({s s1;(void*)(&s1)-(void*)(&s1->m);})
建一个堆,先把最开始的1万个数放进去。以后每进一个,都把最小的赶出来。
参考:一步一步写算法(之洗牌算法) - 平凡的程序员 - 博客频道 - CSDN.NET
计算机网络中五层协议分别是
1) 物理层
2)数据链路层
3)网络层
4)传输层
5)应用层
网上看到的分析:
32位意味着4G的寻址空间,linux把它分为两部分:最高的1G(虚拟地址从0xC0000000到0xffffffff)用做内核本身,成为“系统空间”,而较低的3G字节(从0x00000000到0xbffffff)用作各进程的“用户空间”。这样,理论上每个进程可以使用的用户空间都是3G。当然,实际的空间大小收到物理存储器大小的限制。虽然各个进程拥有其自己的3G用户空间,系统空间却由所有的进程共享。从具体进程的角度看,则每个进程都拥有4G的虚拟空间,较低的3G为自己的用户空间,最高的1G为所有进程以及内核共享的系统空间。
exit()
与_exit()
的基本区别在于前一个调用实施与调用库里用户状态结构
(user-mode constructs)有关的清除工作(clean-up),而且调用用户自定义的清除程序
(译者注:自定义清除程序由atexit函数定义,可定义多次,并以倒序执行),相对
应,后一个函数只为进程实施内核清除工作。
指针和引用的联系与区别
★ 相同点:
1. 都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
★ 区别:
1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;
4. 引用没有 const,指针有 const;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
7. 指针和引用的自增(++)运算意义不一样;
8.从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。
由于C++支持函数重载,语言C则不支持等原因
假设有函数原型为
void foo( int x);
被C编译器编译后在符号库中的名字为_foo,而被C++编译器则会产生像_foo_int类似的名字,即所谓的“由于C++编译器在编译的时候会造成其函数名的该变,在其他应用程序中导致函数不可调用,而C编译器则不会在编译后改变其函数名。”
以下是常用用法
当一个函数已经由C编译器实现
用C++编译器实现C和C++都可调用的函数
新鲜出炉的腾讯后台开发三面面试题!-C/C++-ChinaUnix.net
腾讯后台开发三面面试题
一步一步写算法(之洗牌算法) - 平凡的程序员 - 博客频道 - CSDN.NET
Linux后台开发应该具备技能
一个进程能用的最大内存(堆区)空间大小为1G
i++是否原子操作?并解释为什么??????? - zyq522376829的专栏
一篇很厉害的博客:
虚函数实现原理(转)
还有一篇也是讲虚函数的:
虚函数实现原理