答题时间:45分钟。请将答案写在答题纸上。
一、C++基础
1.h头文件中的ifndef/define/endif的作用?
防止这个头文件被重复引用
2.new delete 与malloc free 的联系和区别?
区别:malloc/free是C/C++语言的标准库函数,无法满足动态管理对象的要求,就是不能动态分布空间,对象在创建的同时要自己构造函数,在消亡之前要自己析构函数;new/delete是C++的运算符,new能够自动分配空间大小。 联系:C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。
3.已知类String的原型为:
Class String
{
Public:
String(const char* str=NULL); //普通构造函数
String(const String& rhs); //拷贝构造函数
~String(void); //析构函数
String& operator=(const String& rhs); //赋值操作符
Private:
char* m_data; //用于保存字符串
};
请编写String类的上述4个函数。
//普通构造函数
String::String(const char *str){
if (str == NULL){
m_data = new char[1];
*m_data = '\0';
}
else{
int len = strlen(str);
m_data = new char[len + 1];
strcpy(m_data, str);
}
}
// String的析构函数
String::~String(void){
delete m_data;
}
//拷贝构造函数
String::String(const String &other){
int len = strlen(other.m_data);
m_data = new char[len + 1];
strcpy(m_data, other.m_data);
}
//赋值函数
String & String::operator = (const String &other){
if (this == &other)
return *this;
if (m_data)
delete[] m_data;
int len = strlen(other.m_data);
m_data = new char[len + 1];
strcpy(m_data, other.m_data);
return *this;
}
二、算法和数据结构
1.在全球范围内,划有10000个不同大小的多边形区域。同时,我们有大量坐标点,如何高效判断坐标点所归属的区域?请写出主要思路。
(不会)
2.有n个人围成一圈,顺序排号。要求从其中淘汰掉m人,从第一个人开始循环报数(1到3报数),凡报到3的人退出圈子,直到剩余n-m人。请编写算法代码(链表实现),输出剩余人员在圈中的次序。
#include<stdio.h>
int main(void){
int i,array[100];
int k=0;//报数
int t=0;//退出人数
int n;//总人数
int *p;//指针
int m;
printf("Input m and n: ");
scanf("%d %d",&m,&n);
p=array;
//编号
for(i=0;i<n;i++)
*(p+i)=i+1;
i=0;
while(t<n)
{
if( *(p+i) != 0)
k++;
if(k==m){
k=0;
printf("%d ",*(p+i));
*(p+i)=0;
t++;
}
i++;
if(i==n)
i=0;
}
printf("\n");
return 0;
}
三、网络和操作系统
1.通过信号量能沟通控制应用程序只能启动1个实例吗?为什么?控制只能启动3个如何实现?
答:可以只启动一个实例,因为可以信号量实现进程间的同步与互斥。 (不会)
2.简述TCP和UDP的区别。试举出几种Windows Socket的编程模型及适用场景。
TCP和UDP的区别:
-
是否基于连接 TCP是面向连接的协议,而UDP是无连接的协议。即TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接。 -
可靠性和有序性区别 TCP提供交付保证(Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输),无差错,不丢失,不重复,且按序到达,也保证了消息的有序性。该消息将以从服务器端发出的同样的顺序发送到客户端,尽管这些消息到网络的另一端时可能是无序的。TCP协议将会为你排好序。 UDP不提供任何有序性或序列性的保证。UDP尽最大努力交付,数据包将以任何可能的顺序到达。 TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。 -
实时性 UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。 -
协议首部大小 TCP首部开销20字节; UDP的首部开销小,只有8个字节 。 -
运行速度 TCP速度比较慢,而UDP速度比较快,因为TCP必须创建连接,以保证消息的可靠交付和有序性,毕竟TCP协议比UDP复杂。 -
拥塞机制 UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等) -
流模式(TCP)与数据报模式(UDP) TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的。 -
资源占用 TCP对系统资源要求较多,UDP对系统资源要求较少。 TCP被认为是重量级的协议,而与之相比,UDP协议则是一个轻量级的协议。因为UDP传输的信息中不承担任何间接创造连接,保证交货或秩序的的信息。这也反映在用于承载元数据的头的大小。 -
应用 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。基于UDP不需要建立连接,所以且适合多播的环境,UDP是大量使用在游戏和娱乐场所。
Windows Socket的编程模型及适用场景:
- Select模型
- 异步选择
- 事件选择
- 重叠I/O模型
- 完成端口模型
详见CSDN文章:socket编程五种模型
|