p,li { white-space: pre-wrap }
# C/C++的笔试题目
+ include<> 和include"" 的区别
+ sizeof操作符与字符串长度
>
char *p = "hello world";
char q[] = "hello world";
sizeof(p), sizeof(q), strlen(p), strlen(q)的值?
###结果
>
fire@fire:~/train$ ./a.out
sizeof p : 12
strlen p : 11
sizeof q : 4
strlen q : 11
+ malloc函数和new操作符的区别
>
malloc/free 是标准库函数,new/delete是C++操作符
+ 初始化 计算大小 返回类型 内部对象初始化
+ new是malloc+初始化
+ 析构,自动管理内存
+ 注意事项
+ 对socket的阻塞、非阻塞、同步、异步问题的理解
>
阻塞IO和非阻塞IO的区别就在于:应用程序的调用是否立即返回!
+ socket服务端的建立过程 伪码
>
服务器端:
1.创建ServerSocket对象,绑定监听端口
2.通过accept()方法监听客户端请求
3.连接建立后,通过输出流读取客户端发送的请求信息
4.通过输出流向客户端发送响应信息
5.关闭相关资源
+ extern "C"
>
注意与extern关键字的使用,与static相对。
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。
加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。
由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型
也加到编译后的代码中,而不仅仅是函数名;
而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,
一般之包括函数名。
比如说你用C 开发了一个DLL 库,为了能够让C ++语言也能够调用你的DLL输出(Export)的函数,
你需要用extern "C"来强制编译器不要修改你的函数名。
+ 编写一个跨平台的文件拷贝函数
>
使用C类库中的fopen,fread,fwrite,fclose函数,即可实现跨平台。
+#ifdef,#define,#ifndef
>
防止头文件的重复包含和编译。
+线程,进程的区别和联系
>
进程:分配管理资源的基本单位,进程空间的大小,五种状态切换。
线程:CPU调度的基本单位。
是否具有独立空间,独立空间说明什么?切换开销