2024.8.20 作业

目录

思维导图:

面试题练习:

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

        2、结构体字节对齐的原理

        3、TCP和UDP的区别

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

        5、多线程的理解

        6、大小端验证

        7、互斥锁

        8、共享内存特点

        9、C语言的指针

        10、gcc编译

        11、socket套接字

        12、HTTP协议和TCP协议之间的关系

        13、IP地址和子网掩码如何决定网卡所在网段

        14、计算机网络中的OSI七层模型和TCP/IP四层体系结构

        15、数据结构栈和队列的区别

        16、数据结构顺序表和链表的区别

        17、TCP通信三次握手四次挥手

        18、指针和指针变量

        19、共享内存和消息队列的优缺点

        20、结构体中一个char一个int结构体字节长度是多少


思维导图:

面试题练习:

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

        答:指针数组本质上是一个数组,数组中的元素都是指针,数组中可以存储很多指针,这些指针的数据类型一致。数组指针本质上是一个指针,这个指针指向了一个数组

        2、结构体字节对齐的原理

        答:结构体成员在内存地址为其字节大小的倍数的位置开始,不足则补充,各自对齐后还会根据最大字节数的成员的字节数的倍数对齐,另外,也会根据不同的要求额外进行对齐

        3、TCP和UDP的区别

        答:TCP通信时需要连接,数据完整性高、有序性高,但是传输效率不好保证,遇到网络不好等因素就会难以通信,传输速度也更慢,能够根据网络状况调整传输的速度,具有错误恢复机制,常用于传输要求可靠的程序。

                UDP无需连接,但数据完整性难以保证,数据序列也可能是乱的,传输速度相对较快,数据发送可以保持最大速度,没有错误回复机制,常用于实时性要求的程序

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

        答:同步通信的发送方接收方数据传输保持同步,必须确认收到数据才能进行后续操作,基本不需要缓冲区,效率偏低,错误处理也比较简单,CPU占用率较高,使用于需要提高数据完整性和可靠性的环境

               异步通信发送方接收方不用等待对方的数据即可发送数据,需要较大缓冲区等待对方处理数据,效率更高,错误处理更复杂,CPU占用率较低,适用于实时性要求高的环境

        5、多线程的理解

        答:多线程是一种编程技术,可以在同一时间执行多个任务,可以提高程序的效率,多线程允许程序并发进行,也可以并行执行,同一个进程内线程间共享内存和资源,但也要创建和管理线程,多个线程存在时会有同步互斥机制,需要使用互斥锁、信号量、条件变量等来控制,线程间等待释放资源时也可能会发送死锁现象,需要关闭线程等操作来解决

        6、大小端验证

        答:通过共用体判断,创建一个共用体,包含一个int类型的变量和一个char类型的变量,赋予int变量一个特定值,通过char检测对应字节

               通过指针判断,创建一个int*类型的指针并初始化,将其地址转为char*类型,判断指针的值来得知大小端

        7、互斥锁

        答:互斥锁本质上是一种线程同步机制,作用是防止多个线程同时访问同一个共享资源,使用互斥锁时需要先锁定防止其他线程访问,访问完后需要解锁,以便别的线程访问,一个锁尝试锁定另一个已经锁定的锁时,可能会发送死锁,这个机制适用于保护多个线程使用的共享资源

        8、共享内存特点

        答:共享内存允许多进程线程直接访问同一块内存,效率更高,需要同步机制,生命周期需要明确管理,适用于需要高速数据交换的环境,一般和信号量集一起使用

        9、C语言的指针

        答:指针存储了变量在内存的地址,可以通过指针直接访问操作内存,指针声明时需要指定变量类型,也需要初始化才能使用,*操作符可以访问指针所指向的内存地址存储的值,&运算符可以获取指针指向的地址,指针偏移时指向的地址会按照数据类型的字节大小增加,指针指向数组时,数组名通常是指向首元素的指针,可以创建一个指针来存储指针,也可以创建一个指针来指向函数,指针可以转换数据类型,也可以比较指向的地址,指针的操作不当会造成内存泄漏、野指针、缓冲区一处的问题

        10、gcc编译

        答:gcc是一种编译器,常用于编译C语言,用来生成中间文件和可执行文件,分布的编译包括预处理、编译、汇编、链接,预处理阶段处理条件编译、展开头文件、删除注释,编译阶段将程序进行语法分析和语义分析,生成汇编程序,汇编阶段将汇编程序编译生成目标二进制程序,链接阶段将多个目标程序与相关库进行链接,生成可执行文件

        11、socket套接字

        答:套接字是进程间通信的端点,本质上是一种文件描述符,每个套接字与唯一的地址绑定,面向TCP时需要连接才能进行传输,同时也需要监听对方的连接,面向UDP时不用连接,可以设置阻塞状态,socket函数返回的文件描述符开辟了两个缓存区用于传输和接收

        12、HTTP协议和TCP协议之间的关系

        答:HTTP是应用层协议,TCP是传输层协议,两者的联系是BS模型,HTTP需要TCP来传输其封装的数据,TCP也能保证HTTP相关的数据的完整和正确

        13、IP地址和子网掩码如何决定网卡所在网段

        答:子网掩码是32位无符号整数,IP地址&子网掩码得到的结果就是网卡所在的网段

        14、计算机网络中的OSI七层模型和TCP/IP四层体系结构

        答:OSI七层模型包括物理层、数据链路层、网络层、运输层、会话层、表示层、应用层

               TCP/IP四层体系结构包括网络接口层、网际层、运输层、应用层

        15、数据结构栈和队列的区别

        答:栈和队列都是操作受限的线性表,栈的特点是先进后出,队列的特点是先进先出,栈的操作都是同一端进行,队列的操作是在异端进行

        16、数据结构顺序表和链表的区别

        答:顺序表和链表都是根据存储形式区分的线性表,顺序表是顺序存储的线性表,下标相邻的元素物理存储地址也相邻,链表是链式存储的线性表,节点相邻的元素物理存储地址不一定相邻,顺序表的元素数量受数组范围和内存空间最大连续内存空间影响,而链表仅受内存空间剩余总内存大小影响,顺序表可以通过下标快速定位对应元素,而链表需要不断通过指针导向下一个节点最终找到对应元素,顺序表关闭只需要释放本身即可,而链表需要先释放所有节点,再释放本身

        17、TCP通信三次握手四次挥手

        答:客户护短发送SYN包,进入SYN_SENT状态;服务器接收SYN包并发送ACK包和SYN包,进入SYN_RCVD状态;客户端接收SYN包和ACK包,进入establish状态,发送ACK包,服务器也进入establish状态

               主动关闭方发送FIN包,进入FIN_WAIT_1状态;被动方接收FIN包,发送ACK包,进入CLOKSE_WAIT状态,主动方接收ACK包,进入FIN_WAIT_2状态,发送完所有数据;被动方发送FIN包,进入LAST_ACK状态;主动方接收FIN包,发送ACK包,被动方接收ACK包,关闭连接

        18、指针和指针变量

        答:指针是内存地址编号

               指针变量是存储指针的变量

        19、共享内存和消息队列的优缺点

        答:共享内存通信速度快,直接访问内存实现多个进程间通信,但是没有内置的同步机制,可能出现数据不一致的问题,编程复杂度高

               消息队列可以发送具有特定格式和优先级的消息,独立于发送和接收进程,能够保留信息,但是系统复杂度提高,需要处理消息顺序性、丢失等问题,可能引入延迟

        20、结构体中一个char一个int结构体字节长度是多少

        答:8个,int对齐结果是在char和int间插入三个字节

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值