C,数据结构,多进程线程,网络编程面试题总结

目录

1.指针数组和数组指针

2.结构体字节对齐

3.Tcp和Udp的区别

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

5.多线程理解

6.大小端验证

7.互斥锁相关问题

8.共享内存特点

9.c中的指针

10.Gcc编译

11.Socket的了解

12.Ip地址和子网掩码如何决定网卡所在的网段

13.数据结构中栈与队列的区别

14.OSI七层模型和TCP四层模型

15.顺序表和链表的区别

16.三次握手和四次挥手

17.指针和指针变量分别指什么

18.共享内存和消息队列的优缺点


1.指针数组和数组指针

        1. 指针数组是一个数组,里面存放的是指针;

        2. 数组指针是一个指针,指向一个数组;

        3. 指针数组常用于函数参数,特别是传递多个指针给函数时,而数组指针常用于处理动态分配的数组;

        4. 指针数组在栈上分配内存,而数组指针在堆上分配内存。

2.结构体字节对齐

        1. 结构体里面的每个成员,要以自己的所占字节数对齐一次

        2. 所有成员分配完毕后,32位系统要用最大字节跟4比较谁小,然后拿去对齐;64位系统要用最大字节跟8比较谁小,然后拿去对齐,

3.Tcp和Udp的区别

        1. tcp和udp都是传输层协议。

        2. TCP是稳定的,而UDP是快速的;

        3. TCP是面向有连接,数据无丢失、无误、无重复,而UDP是面向无连接的,数据可能会丢失,重复,不可靠,尽自己最大努力传输;

        4. TCP传输速率慢,UDP传输速率快;

        5. TCP沾包,UDP不沾包;

        6. TCP适合传输质量高或者数据多的通信,UDP只适合小尺寸的通信。

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

        1. 同步通信效率高,异步通信效率低;

        2. 同步通信误差小,比较复杂,而异步通信简单,允许有误差;

5.多线程理解

        1. 线程也称轻量版的进程,是进程的一个执行路径。

        2. 线程是任务调度的最小单位。

        3. 每个进程都至少有一个线程。

        4. 线程操作消耗内存较小,效率较高。

        5. 线程还有同步互斥机制:对于线程同步问题,有两个机制完成:无名信号量和条件变量;

                                                对于线程互斥问题,采用互斥锁来解决。

        6. 线程允许多并发执行,多个线程可以共用一个进程

        7. 多个线程释放资源时,可能会发生死锁。

6.大小端验证

        1. 大端是地址低位存储数据高位,小端是地址低位存储数据低位;

        2. 用指针和共用体来验证;

        3. 网络字节序是大端存储的字节序列,可以使用主机字节序转换成网络字节序的方法验证大小端。

7.互斥锁相关问题

        1. 互斥锁是一个临界资源,该临界资源在同一时刻被一个线程所占有,当另一个线程想获取时,该线程将会被堵塞,等待前一个线程释放该临界资源,下个线程才可以去占有。

        2. 当多个互斥锁都被不同的线程占有时,很容易发生死锁。

8.共享内存特点

        1、共享内存表示的是多个进程共享一个外部的物理内存,效率比较高

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

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

9.c中的指针

        指针是一种特殊的变量,它存储的是另一个变量的内存地址。指针提供了一种间接访问内存的方式,使得程序能够动态地操作数据。

        指针有:指针数组,数组指针,指针函数,函数指针,野指针,空指针,指针和内存分配。

10.Gcc编译

1. 预处理:gcc -E,处理源代码文件中的预处理指令

2. 编译:gcc -S,将预处理后的源代码转换成汇编语言

3. 汇编:gcc -C,将汇编代码转换成机器代码

4. 链接:gcc -o,将一个或多个目标文件链接在一起,生成可执行文件。

11.Socket的了解

        1、sfd = socket(); //创建一个用于连接的套接字文件描述符

        2、bind(); //为服务器套接字绑定ip地址和端口号,为了让客户端额能够找到服务器

        3、listen(); //将服务器套接字设置成被动监听状态,用于接收客户端的连接请求

        4、newfd = accept(); //阻塞等待客户端的连接请求,如果有客户端发来连接请求,创建一个新的用于通信的套接字文件描述符

        5、while(1) { send\recv\read\write; //数据收发工作 }

        6、close(); //关闭套接字、关闭监听

12.Ip地址和子网掩码如何决定网卡所在的网段

IP地址&子网掩码

13.数据结构中栈与队列的区别

        1. 栈和队列都是操作受限的线性表;

        2. 栈是先进后出的,队列是先进先出的;

        3. 栈是在栈顶进行插入和删除的,而队列实在队尾进行插入,队头进行删除的;

14.OSI七层模型和TCP四层模型

物理层,数据链路层,网络层,传输层,会话层,表示层,应用层;

网络接口层,网际层,传输层,应用层。

15.顺序表和链表的区别

        1. 顺序表通常使用数组实现,链表通常使用若干个节点组成;

        2. 顺序表访问速度较快,链表访问速度较慢;

        3. 顺序表插入元素或删除元素需要移动大量元素,链表只需改变它的相邻节点指针就可以了;

        4. 顺序表通常在栈上分配内存,而链表在堆上分配内存;

        5. 顺序表实现相对简单,链表实现相对复杂;

16.三次握手和四次挥手

        第一次握手:客户端向服务器发送一个SYN报文,并进入SYN_SENT状态,请求建立连接;

        第二次握手:服务器收到请求后,想客户端发送一个SYN-ACK报文,,并进入SYN_RCVD状态,同意连接请求;

        第三次握手:客户端收到后,想服务器发送AVK报文,此时连接成功。

        第一次挥手:主动端向被动端发送FIN报文,进入FIN-WAIT_1状态;

        第二次挥手:被动端收到后,发送ACK报文,进入CLOKSE_WAIT状态。主动方接收到ACK报文后进入FIN-WAIT_2状态。如果数据未发送完毕,则继续发送直到完毕;

        第三次挥手:被动端向主动端发送FIN报文,进入LAST_ACK状态;

        第四次挥手:主动端收到后,回复一个ACK报文,被动端收到后断开连接。

17.指针和指针变量分别指什么

        1. 指针是一种数据类型,而指针变量是这种类型的实例;

        2. 指针变量存储的是一个内存地址,而指针定义了指针变量可以存储哪一种指针类型的内存地址;

18.共享内存和消息队列的优缺点

共享内存: 

        优点:提供了最快的IPC之一,实施起来相对方便,访问速度快;

        缺点:需要使用额外的同步机制来避免竞态条件和数据不一致,不当的使用可能使内存泄漏。

消息队列:

        优点:提供了数据封装,每个消息都可以包含不同的数据和优先级;本身提供了同步机制,避免竞态条件;

        缺点:比共享内存更复杂;消息可能会延迟;对资源有限制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值