腾讯C/C++面试题演练

本文深入探讨C++ STL中的关键字static作用、vector与map的区别及应用场景,解析map底层红黑树实现与STL sort()算法的智能选择机制,讨论快排潜在问题,对比new与malloc的区别,以及多进程与多线程在网络编程中的优缺点。
摘要由CSDN通过智能技术生成

1.关键字static

静态变量,改变作用域为整个程序。

2.STL vector与map有啥区别,分别应用于什么场景

vector是动态树组,map是类似字典结构,key,value结构

map底层实现

map底层是红黑树

3.STL sort()底层实现

对于STL中的sort()算法:

当数据量大时,将会采用Quick Sort(快排),分段递归进行排序。
一旦分段后的数据量小于某个阈值,为了避免快排的递归带来过大的额外的开销,sort()算法就自动改为Insertion Sort(插入排序)。
如果递归的层次过深,还会改用Heap Sort(堆排序)。
简单来说,sort并非只是普通的快速排序,除了对普通的快排进行优化,它还结合了插入排序和堆排序。

根据不同的数量级以及不同的情况,能够自动选择合适的排序算法。

4.快排有啥问题

可能会退化成O(N^2)

5.new 和 malloc有啥区别

new是运算符,可以重载,malloc是函数

库函数与系统调用区别

库函数是语言标准提供的API函数,系统调用是操作系统提供的API函数

库函数主要运行在用户态,系统调用运行在内核态,库函数也可能调用系统调用。

read() 和 fread()区别(没答上来,回来看其实就是上面那个问题…fread()是C的,忘了)

read 是Linux C系统调用,fread是标准库的库函数,后者带缓冲区。

map中所有操作的复杂度

log(N)

如何解决Hash表碰撞问题

开链法或线性探查,平方探查,在Hash等

TCP释放过程

四次挥手

TCP拥塞控制

总共四种:慢开始,拥塞避免,快重传,快恢复

是否用过多进程,多线程,讲讲区别

进程是系统资源分配的基本单位,线程是系统调度的基本单位。

讲到IPC中问我经常用什么方式

进程间通信的方式

讲讲PIPE与共享内存的优缺点

匿名管道:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。

特点: 
1、共享内存没有提供任何的保护机制 
2、是临界资源 
3、没有同步互斥机制 
4、生命周期随内核(同消息队列)

项目中的难点

看过什么开源代码

多线程和多进程网络编程优缺点

多线程轻量,并发数量较多,但一个线程出问题会影响其他线程。

多进程开销大,并发数量较少,一个进程出问题不会影响另一个进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值