25届嵌入式秋招准备(八股)

C/C++

关键字

C 语言中变量的完整定义

(a)sizeof 和strlen 

(1)sizeof是运算符,计算变量或数据类型占用的字节数,在编译时计算(内存大小)

(2)strlen是函数,计算字符串的长度,在运行期计算(长度)

(3)sizeof 可以是类型函数做参数,而strlen只能是char *,且以/0结尾

(4)字符串里面,sizeof 计算的是长度+ /0,stelen是真实长度

(b)volatile

防止被编译器优化,让编译器不再去优化被volatile修饰的变量的操作,每次读取该变量的值都重新从内存中读取而非从寄存器中。

场景:

(1)硬件寄存器,状态寄存器等,因为每次对它的读取可能是不同意义。

(2)多线程或者并发编程中,多个线程访问一个变量并且进行操作,需要确保每次都从内存中读取,避免数据不一致。

(3)信号处理程序,需保证信号处理程序和主程序的数据一致性,当信号处理程序中修改变量以后,主程序能够立即感知变化,从而响应程序。

(c)static

静态的,可以在以下场景中运用:

类内static成员声明属于类而非实例

全局static声明不可被链接

函数内static对象在该函数第一次被调用时初始化,随后一直存在到程序结束

(1)静态成员函数、静态成员变量(结构体/类):

静态:全局统一;非静态:与实例相关

用了static就全局统一,所以和对象无关,a,b的对应成员是同一个,用类名打印都可以

(2)静态全局变量/普通函数

用static修饰的全局变量仅在该文件中生效,(inner内联)

(3)静态局部变量

生命周期:在第一次初始化时创建,在整个程序结束时释放,存在静态全局区。

(d)extern

将一个C文件中的变量或者函数的作用域拓展到整个项目,将变量或者函数在不同文件共享。

(1)修饰变量,extern声明这个变量是在其他文件中定义的

(2)extern定义函数,用法一样。

extern void hello();
(e)new/delete,malloc/free

(f)typedef和define
(g)#define 和const,谁定义变量好
(h)struct和union区别

arm体系架构

操作系统

网络编程

TCP/UDP

(a)TCP怎么保证可靠性

TCP是可靠性传输协议,既然是可靠的,就需要解决比如包丢失了、数据被破坏了、包重复了、乱序了等等这样的问题

(1)建立连接:通过三次握手建立连接,保证连接实体真实存在。

(2)数据校验:TCP每一段报文头都有校验和,用于检验报文是否损坏。

(3)序列号和确认应答:TCP发送的每一个包都有一个序列号,可以让接收方知道收到了哪些包,哪些包丢失了,重复的包可以丢弃,可以通过序列号排序,且每个发送的包都会有一个确认应答消息。

(4)重传机制:当未收到确认应答消息,会利用重传机制:超时重传、快速重传、SACK、D-SAC。

超时重传:每当遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍。两次超时,就说明网络环境差,不宜频繁反复发送。

快速重传:以数据为驱动,服务器如果收到乱序的包,也给客户端回复 ACK,比如收到乱序的包 6,7,8,9 时,服务器全都发 ACK = 5,这样客户端就知道5丢失了,当客户端收到三个相同的 ACK 报文时,会在超时之前,重传丢失的报文段。

(5)流量控制

当接收方来不及处理发送方的数据,能通过滑动窗口,提示发送方降低发送的速率,防止包丢失。

接收方返回的 ACK 中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。

(6)拥塞控制

拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况。即防止发送方的数据填满整个网络,在网络出现拥堵时减少数据包的发送,网络恢复后它又会增加数据包的发送。标志:发生了超时重传,就会认为网络出现了拥塞。

有慢启动,拥塞避免,快速重传三种机制。

(b)TCP建立连接和断开连接的过程
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值