滴滴后端实习生-基础架构部之解答

我简历里写的是C++,面试官说问C也可以。于是我让他问我C语言。

1.堆栈有什么区别?

1、堆栈空间分配不同。栈由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等,栈有着很高的效率;堆一般由程序员分配释放,堆的效率比栈要低的多。

2、堆栈缓存方式不同。栈使用的是一级缓存, 它们通常都是被调用时处于存储空间中,调用完毕立即释放;堆则是存放在二级缓存中,速度要慢些。

3、空间大小: 栈的空间大小并不大,一般最多为2M,超过之后会报Overflow错误。堆的空间非常大,理论上可以接近3G。(针对32位程序来说,可以看到内存分布,1G用于内核空间,用户空间中栈、BSS、data又要占一部分,所以堆理论上可以接近3G,实际上在2G-3G之间)。

4、能否产生碎片: 栈的操作与数据结构中的栈用法是类似的。‘后进先出’的原则,以至于不可能有一个空的内存块从栈被弹出。因为在它弹出之前,在它上面的后进栈的数据已经被弹出。它是严格按照栈的规则来执行。但是堆是通过new/malloc随机申请的空间,频繁的调用它们,则会产生大量的内存碎片。这是不可避免地。

2.一个指针大小是多少?

在32位平台下,无论指针的类型是什么,sizeof(指针名)都是4,在64位平台下,无论指针的类型是什么,sizeof(指针名)都是8。

3.const限定的变量可以修改吗?怎么修改?

简单值类型不可变,如int、float

但const指针可以变,如

int a = 10;
int b = 20;
const int *p = &a;
//该声明的意思是p指向一个const int(这里为10),因此不能使用p来修改这个值,
//换句话来说,*p的值为const,不能被修改。
*p = 20; //错误,编译报错
p = &b; //正确,const只能防止修改p指向的值,但不能防止修改p的值,也就是说,可以将一个新地址赋给p

4.如何用C语言实现面向对象?

C++引入了新的数据类型——类,由此引申出了三大特性(1)封装。(2)继承。(3)多态。

稍微有点复杂,参考一下文章:https://blog.csdn.net/qq_36115224/article/details/121972730

5.用过函数指针吗?

函数指针本质是一个指针,其指向一个函数。

函数指针:int (*fun)(int x,int y);

函数指针使用过程中指向一个函数。通常用于函数回调的应用场景。

6.编程:把字符串转化为整数

7.TCP和UDP有什么区别?TCP是怎么实现可靠传输的?

(1)TCP需要建立一对一稳定连接;UDP无连接

(2)TCP一对一;UDP可以一对一、一对多、多对多

(3)TCP可靠传输,序列号、确认应答、超时重传;UDP不保证可靠传输,尽最大努力交付

(4)TCP头部字节20字节;UDP8个字节

(5)TCP开销大;UDP灵活开销小

(6)TCP提供可靠的服务,适用于通讯质量要求高的场景;UDP传输效率高,适用于高速传输和实时性要求的场景。

TCP保证可靠性

1、序列号、确认应答、超时重传 数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序列号,序列号说明了它下一次需要接收的数据序列号,保证数据传输有序。如果发送方迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一段时间后进行重传。

2、窗口控制 TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值。如果不使用窗口控制,每一个没收到确认应答的数据都要重发。 使用窗口控制,如果数据段1001-2000丢失,后面数据每次传输,确认应答都会不停发送序号为1001的应答,表示我要接收1001开始的数据,发送端如果收到3次相同应答,就会立刻进行重发;数据一旦丢失,接收端会一直提醒。

3、拥塞控制 如果把窗口定的很大,发送端连续发送大量的数据,可能造成网络的拥堵。为了防止拥堵,进行拥塞控制。

(1)慢启动:定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到一次确认应答(一次成功来回传输),将拥塞窗口大小*2

(2)拥塞避免:设置慢启动阈值,一般开始都设为65536。拥塞避免是只当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是+1

(3)快恢复:将报文段的超时重传看做拥塞,则一旦发生超时重传,我们就将阈值设为当前窗口大小的一半,并且窗口大小变为1,重新进入慢启动过程

(4)快速重传:3次重复确认应答,立即重传。

以上答案均来自本人专栏:机器学习面试题汇总与解析(蒋豆芽面试题总结)

欢迎大家围观:https://blog.nowcoder.net/jiangwenbo

#C++#
牛友面经解答 文章被收录于专栏

这个专栏专门用于为牛友解答面经,希望能帮助到大家。

全部评论
楼主有准备项目吗
1 回复 分享
发布于 2023-02-09 18:37 浙江
问的还挺基础的,一面吗。楼主面的哪里的岗位噢
点赞 回复 分享
发布于 2023-02-06 23:04 广东
base哪里?
点赞 回复 分享
发布于 2023-02-10 03:45 山东

相关推荐

不愿透露姓名的神秘牛友
11-28 10:35
阿里云 技术管培生 22*16 硕士211
点赞 评论 收藏
分享
评论
20
180
分享
牛客网
牛客企业服务