8月20面试题

C语言中指针数组和数组指针的区别

是两种不同的数据结构

指针数组是一个数组,其中每个元素都是指针

数组指针是一个指向数组的指针,可以用来指向整个数组

结构体如何对齐

结构体中的每个成员再分配内存时,要以数据类型对齐一次,插入填充字节

所有成员分配内存结束后,整体需要对齐一次,确保结构体大小是最大对齐要求的倍数

TCP和UDP的区别

TCP是面向连接的协议,在数据传输钱需要建立连接,通过三次握手过程建立连接,确保双方能够通信,传输完毕后需要通过四次挥手过程断开连接

UDP是无连接的协议,数据传输不需要建立连接或断开连接过程,数据包可以随时发送和接收,没有握手过程

TCP提供可靠的数据传输服务,TCP确保数据包按顺序到达,并且没有数据丢失或重复

UDP不提供可靠性保证。UDP不保证数据包的到达顺序,也不保证数据包的完整性或不会丢失

TCP数据传输速度通常较慢,但能提供更高的可靠性和准确性

UDP数据传输速度通常较快,但可能会失去丢失数据或出现数据错误

TCP适用于对数据传输可靠性和顺序要求较高的场景

UDP适用于对实时性要求较高,但可以容忍一定数据丢失的场景

同步通信和异步通信的区别

同步通信中,通信的双方需要同一时间进行数据交换,发送方发送数据时会等待接收方的确认响应,接收方处理数据时会等待数据到来。

异步通信中,通信的双方不需要同时进行数据交换,发送方在发送数据后不会等待接收方的响应,可以继续进行其他操作,接收方也可以任意时间处理到达的数据,数据的发送和接收是独立的

对多线程的理解

线程是操作系统能够进行调度的基本单位,属于进程的一个组成部分,一个进程可以包含多个线程,这些线程共享进程的内存和资源

并发:多线程允许程序的多个任务同时进行,在单核处理器上,通过快速切换线程,使这些任务看上去是并行的

并行:在多核处理器上,多线程能够真正实现并行执行,多个线程在同一时刻在不同处理器核心上运行

线程生命周期包括创建、就绪、运行、等待、终止状态

多线程程序中,多个线程可能会访问共享资源。为了防止数据冲突或不一致,需要使用同步互斥机制,如互斥锁,信号量,条件变量

大小端的验证

多字节数据在内存中的存储顺序。

大端:数据的高位字节存储在低地址

小端:数据的低位字节存储在低地址

将一个多字节整数写入内存,检查其在内存中的实际字节顺序

创建一个32位整数0x12345678,将整数的地址强制转换为unsigned char类型指针,逐字节访问内存

互斥锁的相关问题

在同一时刻只允许一个线程访问共享资源。其他试图访问该资源的线程必须等待,直到资源被释放

线程访问共享资源前需要获取互斥锁,访问完成后释放互斥锁,获取锁的线程可以安全访问资源

可以保护共享资源,同步线程

死锁发生在多个线程相互等待对方持有的资源,导致所有线程都无法继续执行

避免持有和等待,尽可能让线程在开始执行前一次性获取所必需资源

按顺序获取资源

等待时间过长可以放弃回退

监测到死锁采取终止线程措施

共享内存特点

共享内存直接在进程间共享数据,不需要通过系统调用进行数据复制,数据传输速度快,效率高

具有时效性,放到共享内存区域中的数据如果不及时读取,下一次写入后前面的数据会被覆盖

共享内存的操作不是一次性的,写入共享内存中的数据,即使读取出去后,依然存在于共享内存,直到下次被覆盖

c语言中的指针

指针是一个变量,它的值是另一个变量的内存地址,指针通过该地址访问和操作存储在那里的数据

gcc编译

预处理-展开头文件,替换宏定义,删除注释

编译-检查语法问题,有错报错,没有则继续运行生成汇编文件

汇编-生成一个不可执行的二进制文件

链接-链接库函数,最终生成二进制文件

http协议和tcp协议udp协议之间的关系

http在应用层协议,通常使用tcp作为其传输层协议,http通过tcp提供可靠连接来确保数据的完整传输顺序,udp是传输层协议,可用于任何应用层协议,不仅限于http

指针和指针变量

指针是一种变量,存储另一个变量的内存地址

指针变量时存储指针值的变量,即存储其他变量地址的变量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值