亿海蓝 C++开发工程师

答题时间: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编程五种模型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值