面试题之各种区别

版权声明: https://blog.csdn.net/qq_41880190/article/details/86696652

栈和队列的区别?

栈和队列都是在运算受限制的一种线性表,栈的插入删除操作在其一端进行,其特性先进后出,又称 LIFO 表。而队列是在一段进行插入操作而在另一端进行删除操作,即先进先出,又称 FIFO 表

二者区别可在如下方面:

元素出入顺序

对插入和删除操作的界定

遍历数据的效率,即时间复杂度

TCP 和 UDP 的区别?

1、基于连接与无连接

当客户端和一个服务器通过 TCP发送数据时,必先建立连接,俗称TCP握手。此过程控制消息在客户端和服务器之间进行互换来实现。而UDP则是无连接的协议,比如我门的QQ消息

2、可靠性方面

TCP提供交付保证,确认对方能够收到数据,这便意味着使用TCP协议发送的消息是保证交付给客户端的,如果传输过程中发生丢失,那么它将重发,这是TCP协议自身保证的,

而UDP是不保证消息能够传达给客户端,比如我们给对方发送了一则消息对方收到没收到,我们是不能保证的

  • 有序性

TCP除了保证交付,还有一定的有序性,该消息从服务器发出并以同样的顺序发送到客户端,尽管消息在网络的另一端可能时无序的,这就说明TCP协议会为你排序,而UDP没有任何有序性的保证

  • 数据边界

TCP不保存数据的边界,而UDP保证。在传输控制协议,数据以字节流的形式发送,并没有明显的标志表明传输信号消息(段)的边界。在UDP中,数据包单独发送的,只有当他们到达时,才会再次集成。包有明确的界限来哪些包已经收到,这意味着在消息发送后,在接收器接口将会有一个读操作,来生成一个完整的消息。虽然TCP也将在收集所有字节之后生成一个完整的消息,但是这些信息在传给传输给接受端之前将储存在TCP缓冲区,以确保更好的使用网络带宽

  • 传输速度、报头大小、重量级(开销成本)

由于TCP协议在进行数据传送之前要进行创建连接,并且要提供数据的可靠交付以及序列性的保证,因此TCP协议传输速率较UDP传输协议慢一些。并且TCP要比UDP拥有更大的“头”一个TCP包头大小为20字节;TCP报头中包含ACK号、序列号、数据偏移量、保留、控制位、紧急指针、可选项、填充项、校验位、目的端口与原端口等;而UDP中只包含长度、目的端口、源端口号、校验和

  1. 拥塞控制与流量窗口

TCP作为面向连接的提供全双工可靠服务协议,具有差错控制、拥塞控制和流量控制等功能。此处所谓的拥塞控制和流量控制,就是将发送端发送能力、接收端接收信息的能力以及当前的网络环境参与考虑,在网络拥塞情况严重或者接收端接收能力有限的情况下,减缓或暂停消息发送,当情况改善时,增强消息发送能力,加上超时/丢失重发的机制,共同提供可靠传输。

进程和线程的区别?

https://blog.csdn.net/qq_41880190/article/details/84674962

数组和链表的区别?

  1. 组成两种数据结构元素个数
  2. 存储单元分配方式
  3. 元素与元素之间的联系
  4. 对该种数据结构进行增删改查的特性

数组优点:随机访问性、查找速度 链表优点:插入删除效率、内存使用率、大小不固定可动态申请

堆和栈的区别?

栈:是一种运算受限制的线性表,只允许在其一端进行插入与删除操作,此端即位栈顶,特性先进后出

堆:一种完全二叉树,当且仅当所有结点的值总是不大于或者不小于父结点的值,把这种完全二叉树称为堆。有大小堆之分

二者区别可表现在如下方面:

  1. 申请方式

栈:系统自动分配

堆:malloc、new

  1. 申请后系统的反馈

栈:只要申请的空间小于剩余空间就没问题,否则栈溢出

堆:首先我们应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序申请时,会自动遍历该链表,寻找第一块空间大于所申请空间的堆节点。然后将此结点从空闲链表当中删除,并将此结点分配给程序

  1. 申请大小的限制

栈:Windows下栈是向低地址扩展的数据结构,是一块连续的内存区域。意思就是栈顶地址和栈最大容量是系统预先设定好的,一般是2M,如果超出最大空间将提示overflow

堆:堆是向高地址扩展的数据结构,是不连续的内存区域,堆的大小受限于有效的虚拟内存

  1. 申请效率

栈:系统自动分配和释放

堆:由new分配内存,容易产生内存碎片,用起来方便,另外Windows下,最好的方式使用VirtualAlloc分配内存,是直接在进程地址空间中保留的一块内存,速度快、灵活

  1. 存储内容比较

栈:函数调用时,第一个进栈的是函数调用语句的下一条可执行语句的地址,然后是各个参数,大多数编译器下参数由右往左依次入栈,然后是局部变量,静态变量不入栈

堆:其内容有程序员安排,一般在堆的头部存放堆的大小

  1. 存取效率

栈相较堆块

Set 和 list 的区别?

Get 和 post 的区别?

HTTP1.0 和 HTTP1.1 的区别?

New 和 malloc 的区别?

二者区别表现在以下方面:

  1. 属性

New 和 delete是C++关键字,而malloc是库函数需要头文件支持

  1. 参数

New :使用new操作符申请空间分配时,无需显式指定内存块的大小,编译器会根据类型自行计算而malloc则需要人为自行计算,显示的指定所需内存块大小

  1. 返回类型

New:new成功后返回对象类型的指针,严格与对象匹配,无需进行类型转换,因此new是出于安全性的操作符而malloc成功后返回的是(void*)需要我们进行强制类型转换

  1. 分配失败

Malloc:分配失败返回NULL,而new:失败后会抛异常bad_alloc

  1. 自定义类型

自定义类型:new会先调用operator new()函数,申请足够空间(通常底层由malloc实现)然后调用类型构造函数,初始化成员变量,最后返回自定义类型指针,delete先调用析构函数,然后调用operator delete()来进行函数释放(底层通常free实现)

Malloc/free是库函数只能动态申请动态释放,无法强制要求做自定义类型对象构造和析构

  1. 重载

C++允许new和delete重载,malloc不允许重载

  1. 内存区域

New操作符从自由存储区上为对象动态分配空间,自由存储区是一个抽象的概念,凡是通过new申请的空间即在自由存储区,而不是堆。Malloc另谈

指针和引用的区别?

都是地址(一个是指向一块内存另一个则是这块内存的别名)

指针是一个实体,需要分配内存空间,引用只是变量的别名,不需要分配内存空间

引用在定义的时候必须初始化,并且不能改变,指针在定义的时候不一定要进行初始化,并且指向的空间可以不变

存在多级指针但是不存在多级引用,引用只有一级

指针和引用的自增不能一概而论,指针 + 1是指向下一个内存空间,引用是引用的变量值 + 1

指针和引用的访问效果不同,间接访问和直接访问,

Sizeof(指针)是指指针的大小,sizeof(引用)是指所指对象的大小

使用指针之前要判空

引用只能在定义是被初始化一次,从一而终不再发生变化,而指针可以见异思迁

五种 IO 模型的区别?

结构和联合的区别?

Struct中成员按顺序依次排列,互相独立,在排列时引入了对齐问题,而union中成员共用一块内存,起始地址都是相同的即union中成员是对同一地址的多个引用,对同一地址的多种表达

对于union不同成员赋值,将会对其进行重写,原来成员的值就会不复存在,而对与struct的不同成员是互不影响的

Vector 和 list 的区别?

  1. vector是顺序表表示一块连续的内存,底层为动态数组,元素被顺序存储,而list是双向链表在内存中不一定连续
  2. 当数值内存不够时,vector会重新申请一块内存把原来的数据拷贝到新的内存上,list不用考虑内存的连续因此开销比较小
  3. List只能通过指针来访问元素,元素的随机性访问效率低下,在频繁进行存取元素是应采用vector较为合适
  4. 当vector插入删除一个元素时需要移动复制带插入元素后面的所有元素,因此有频繁插入删除操作时list合适

Map[] 和 find 的区别?

仿函数和函数指针的区别?

红黑树和 B 树的区别?

C 和 C++ 的区别?

Vector 和 map 的区别?

宏和普通函数的区别?

Sizeof(数组名) 和 sizeof(&数组名) 的区别?

内联函数和宏?

https://blog.csdn.net/chenguolinblog/article/details/27126589

$1、$2、$@、$#、$?区别?

$#参数个数、$0脚本本身的名字、$1传给脚本的第一个参数、$2传给脚本的第二个参数、$@传给脚本的所有参数、$$脚本运行的进程ID号、$?命令的推出状态,0表示无错误

虚函数和纯虚函数?

常量指针和指针常量的区别?

 

猜你喜欢

转载自blog.csdn.net/qq_41880190/article/details/86696652