面试/笔试

一、多态的三个条件

1.要有继承关系,即有基类和派生类

2.有其中基类有虚函数,派生类有虚函数的重写

3.父类指针指向子类对象

二、new和malloc区别

都是从申请堆上的空间动态内存操作。

1.new是操作符,malloc是库函数。

2.malloc需要申请指定内存空间大小,new不需要。

3.new返回的是对象类型指针,类型与对象匹配,无需类型转换;malloc返回的是void型指针,需要通过类型的强制转换换成所需数据类型。

4.new会自动调用对象的构造函数,delete会调用析构函数;而malloc无法自定类型的构造和析构。

三、

线程是进程的实体,CPU调用和分派的基本单位

进程是资源分配的基本单位

同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的

一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行

四、STL

五、static作用

在C中static的作用如下

第一、在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。 
第二、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。 
第三、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。初始化的时候自动初始化为0; 
(1)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用static修饰 
(2)考虑到数据安全性(当程想要使用全局变量的时候应该先考虑使用static)

还有在C++下的作用。C++中static关键字作用总结 - sold_out - 博客园

六、全局数据,局部数据,静态全局数据和静态局部数据,动态数据的存储(存储区域和生命周期)

全局数据和静态数据存储在静态存储区,局部变量和动态数据存储在动态存储区。 

全局变量:从定义到程序结束。

局部变量:其定义的函数内有效

静态全局变量:定义到程序结束,本文件内有效

静态局部变量:函数内有效,函数返回不消失 

动态存储区(堆)、动态存储区(栈)、静态存储区、程序代码区

动态存储区(堆):(动态分配)

程序员自己分配自己释放,malloc动态分配在heap堆区。

动态存储区(栈):(动态分配)

由编译器自动分配释放,存放函数的参数值局部变量等值。其操作方式类似于数据结构中的栈。

静态存储区:(静态分配)

extern全局变量,在static静态存储区。

静态存储区,一旦分配,不会被回收,可读可写

程序代码区:(静态分配)

main函数、其他函数在code程序代码区。

程序代码区,一旦分配,可读不可写,不可改变

堆栈的区别

1、空间分配 

栈是由系统自动分配释放;堆是有程序员自行申请分配释放,若程序员不释放,程序结束时可能由系统来释放。

2、结构

栈就为数据结构的栈;堆则类似于数据结构的树型,通过链表存储。

3、效率

通常栈分配效率比堆快。

七、指针

各指针

数组名和普通指针区别

八、链表

九、预处理

宏定义 文件包含 条件编译

十、线程同步方式

临界区,互斥锁,信号量,事件对象

十一、TCP和UDP的报文内容

序列号 SYN、ACK、FIN 

十二、char *str1="hello!" 和 char str2[]="hello!" 的区别

str1是char型指针变量,本身是个变量,可被赋值多次;其存放的是字符串的首地址。

str2是数组名,定义后为常量指针。赋值时不能拆开赋,需直接后接赋的值。

十三、API

背景:  常见的模块化开发、代码复用、组件化、动态链接库(DLL)、 软件框架、分布式计算以及面向服务的架构(SOA),都隐含了对髙超的API设计技能的需求。

目标:  健壮而优雅、稳定而耐用、抽象而隐藏,最主要的: 变更管理----应对变化、新需求、功能要求及错误修复。

API的一个重要的基本定义是:API是一个明确定义的软件组件的逻辑接口, 可以为其他软件提供特定服务,可大可小,可互相依赖,隐藏了内部实现细节。API是为其所提供的服务或者行为定义的一个契约。

       C++API通常会包含如下的元素:
           (1)头文件:一组.h头文件
           (2)一个或多个静态库或动态库文件
           (3)文档

        Win32 API是纯C API,而非C++API。可以在C++程序中直接使用C API, C++API中的杰出代表是STL( Standard Template Library,标准模板库)。STL包含了一组容器类、对容器中元素进行遍历的迭代器以及作用于容器的各种算法。例如,该算法集合中包括很多高级操作,比如std::search()、std::reverse()、std::sort()和std::set_intersection()。因此,STL 提供的是操作元素集合任务的逻辑接口,且没有暴露每个算法内部的实现细节。


原文:https://blog.csdn.net/j_s_3721/article/details/70175105?utm_source=copy 

十四、RTP (TCP UDP)

1.1.  RTP是什么

RTP全名是Real-time Transport Protocol(实时传输协议)。它是IETF提出的一个标准,对应的RFC文档为RFC3550(RFC1889为其过期版本)。RFC3550不仅定义了RTP,而且定义了配套的相关协议RTCP(Real-time Transport Control Protocol,即实时传输控制协议)。RTP用来为IP网上的语音、图像、传真等多种需要实时传输的多媒体数据提供端到端的实时传输服务。RTP为Internet上端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP来提供。

1.2.  RTP的应用环境 

RTP用于在单播或多播网络中传送实时数据。它们典型的应用场合有如下几个。

(1)简单的多播音频会议。语音通信通过一个多播地址和一对端口来实现。一个用于音频数据(RTP),另一个用于控制包(RTCP)。

(2)音频和视频会议。如果在一次会议中同时使用了音频和视频会议,这两种媒体将分别在不同的RTP会话中传送,每一个会话使用不同的传输地址(IP地址+端口)。如果一个用户同时使用了两个会话,则每个会话对应的RTCP包都使用规范化名字CNAME(Canonical Name)。与会者可以根据RTCP包中的CNAME来获取相关联的音频和视频,然后根据RTCP包中的计时信息(Network time protocol)来实现音频和视频的同步。

(3)翻译器和混合器。翻译器和混合器都是RTP级的中继系统。翻译器用在通过IP多播不能直接到达的用户区,例如发送者和接收者之间存在防火墙。当与会者能接收的音频编码格式不一样,比如有一个与会者通过一条低速链路接入到高速会议,这时就要使用混合器。在进入音频数据格式需要变化的网络前,混合器将来自一个源或多个源的音频包进行重构,并把重构后的多个音频合并,采用另一种音频编码进行编码后,再转发这个新的RTP包。从一个混合器出来的所有数据包要用混合器作为它们的同步源(SSRC,见RTP的封装)来识别,可以通过贡献源列表(CSRC表,见RTP的封装)可以确认谈话者。

十五、ifndef和extern “C”

C++语言支持函数重载,C语言不支持函数重载。函数被C++编译器编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int y); 该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。

十六、位域

有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。位段成员必须声明为int、unsigned int或signed int类型(short char long)。

1. 如果一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。

2.位域的长度不能大于数据类型本身的长度,比如int类型就能超过32位二进位。

3. 位域可以无位域名,这时它只用来作填充或调整位置。无名的位域是不能使用的。

struct foo2 {
char    a : 2;
char    b : 3;
char    c : 1;
};

struct foo3 {
char    a : 2;
char    b : 3;
char    c : 7;
};

sizeof(struct foo2) = 1
sizeof(struct foo3) = 2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值