一些笔试面试题

1.c语言中指针数组和数组指针的区别

答:指针数组本质上是一个数组,数组中的每个元素都是指针变量;每个数组元素都可以存储一个地址,这个地址可以指向变量、数组或其他数据结构。

数组指针本质上是一个指针,该指针指向一个数组,这意味着这个指针存储的是数组首元素的地址,并且每次偏移都将偏移该数组的大小

2.描述结构体字节对齐

答:每个结构体成员都有一个对齐值,其对齐值通常是该成员类型的字节大小的一个幂次方(如1、2、4、8等);

编译器在分配结构体成员的内存时,会尽量按照每个成员的对齐值来分配空间,以确保每个成员都满足其对齐要求。这可能会导致在结构体成员之间插入填充字节,以确保每个成员都位于正确的对齐位置。

除了成员的对齐值外,整个结构体也有一个对齐值,它通常是结构体中最大成员的对齐值

3.TCP与UDP的区别

答:对于tcp通信而言,可以使用recv和send进行通信,也可以使用read,write进行通信,还可以使用sedto和recvfrom进行通信

对于udp通信而言,如果当前端只是用于接受数据,不发送数据,可以使用recvfrom,recv,read进行接收,如果当前端接受数据后还要发送数据给对端,则需要使用recvfrom进行接受数据,顺便将对端地址信息结构体接收过来。

tcp是一种面向连接的协议,再数据传输之前,通信双方必须先建立连接,即三次握手过程。使数据通信更可靠。tcp通信的数据传输速度更慢,并且具有拥塞控制机制

udp是一种无s议,发送方不需要与接收方建立连接,虽然简单方便但也增加了数据的不确定性。但udp数据传输速度通常比tcp更快

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

答:同步通信要求发送房和接收方具有同频同相的同步时钟信号,发送数据前,发送端会先发送一个特定的同步字符,用于两端的始终信号同步,一旦同步建立,数据便在同步时钟的控制下逐位发送和接收。传输效率高,但实现相对复杂,对通信设备和通信线路的要求也较高。

异步通信是面向字符的通信方式,通过字符的起始码来标识一个字符的开始和结束,发送和接收方可以在通信过程中独立工作,无需强制同步。传输效率较低,但实现简单,可以在不同的波特率下工作,并且能够适应不同的数据传输需求。

5.谈谈对多线程的理解

答:多线程是指从软件或硬件上实现多个线程并发执行的技术,多线程技术可以将一个程序划分为多个子任务,每个子任务由一个单独的线程来执行,这些线程共享程序的资源和内存空间。

多线程通过将处理器划分为若干个短的时间片,每个时间片依次轮流的执行处理各个线程,相对于从而达到多个线程在同时进行的效果。

6.关于大小端的验证

答:

7.关于互斥锁

答:当某个线程需要访问共享资源时,它会尝试获取互斥锁,如果锁当前未被其他线程持有,则获取锁成功,线程可以访问共享资源;如果锁已经被其他线程持有,则当前线程被阻塞,直到锁被释放。

8.共享内存的特点

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

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

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

9.描述一下c语言中的指针

答:指针是存储变量地址的变量。通过指针,程序可以间接地访问和操作内存中的数据。

未初始化或已经被释放的指针被称为野指针,野指针指向的内存的地址是不确定的,访问野指针可能导致程序崩溃或数据损坏。

指针变量可以被赋值为NULL,该指针被称为空指针,表示它不指向任何有效的内存地址。

指针的指针是指向指针的指针,它可以用来修改指针变量的值。

10.关于gcc

答:分为4步:预处理  编译  汇编  链接

预处理:预处理指令解析(例如条件编译的处理,头文件的展开等),删除注释

编译:将程序进行语法分析和语义分析,中间代码优化,生成汇编程序

汇编:将汇编程序编译生成目标文件(o文件),是一个二进制程序

链接:将多个目标与相关库(静态库和动态库)进行连接,生成可执行程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值