嵌入式软件面试题

一、TCP为什么是可靠传输

  1. 检验和:检验发送方和接收方是否相同

  1. 确认应答:ACK和序列号机制保证数据的完整性

  1. 超时重传

  1. 连接管理

  1. 最大消息长度

  1. 流量控制

  1. 拥塞控制

二、TCP和UDP的区别

  1. tcp是面向连接的可靠传输,udp是面向无连接的不可靠传输

  1. Tcp适用于对传输数据准确、而对速度没有很高要求场景,udp适用于对实时性要求很高的场景

  1. tcp是面向字节流的协议,udp是面向报文的协议

  1. Tcp仅仅支持一对一通信,udp支持一对一、一对多、多对多等通信方式

  1. Tcp中的超时重传、拥塞控制、流量控制来保证数据的安全性,同时网络拥塞的话,数据传输变慢,而udp即使在网络拥塞的时候,传输速度也不慢

三、面向对象的三大特征

  1. 封装:将客观事物进行抽象,将其属性和方法合成一个类,封装了成员函数和成员变量,同时又实现了对属性和方法的权限控制,降低了与外界的耦合度

  1. 继承:子类继承父类的各种属性和方法,同时子类还可以在父类的基础上重新定义和扩展父类的属性和方法,使其具有不同的功能,继承提高了代码的复用性及可维护性

  1. 多态:统一调用语句在父类和子类间使用具有不同的表现形式,可以使用同一段代码处理不同类型的对象,提高代码的复用性

四、进程和线程的区别

共同点:都为操作系统提供了并发执行力

不同点:

  1. 调度资源:线程是系统调度的最小单位,进程是资源分配的最小单位

  1. 地址空间:同一进程创建多个线程共享进程资源;进程的地址空间相互独立

  1. 通信方面:线程通信将对简单,只要通过全局变量就可以实现,但需要考虑临界资源访问的问题;进程间的通信比较复杂,需要借助进程间的通信机制(3~4G的内核空间)

  1. 安全性方面:线程安全性差一些,当进程结束时会导致所有线程退出,进程相对安全

五、深浅拷贝的问题

  1. 浅拷贝:增加一个指向相同堆区的指针,这将导致在析构的时候会重复释放,默认的拷贝构造和运算符重载都是浅拷贝

  1. 深拷贝:拷贝的时候将内容申请内存,重新拷贝一份,放到内存中,指针指向这个新拷贝的部分,这样就不会出现析构的时候重复释放问题了

简单来说:

  1. 浅拷贝是讲对象的指针进行简单的复制,原对象和副本指向的是相同的资源

  1. 深拷贝是新开辟一块空间,将原对象的资源复制到新的空间中,并且返回该空间的地址

六、进程有哪几种状态

  1. 创建:一个进程启动,首先进入创建状态,需要获取系统资源创建进程管理模块完成资源分配

  1. 就绪状态:在创建状态完成之后,进程已经准备好,处于就绪状态,但是还未获得处理器资源,无法运行

  1. 运行状态:获取处理器资源,被系统调度,当具有时间片开始处于运行状态,如果进程的时间片用完了就进入就绪态

  1. 阻塞状态:在运行状态期间,如果进行了阻塞操作,此时进程暂时无法操作进入到了阻塞状态,在这些操作完成后就进入就绪状态。等待再次获取处理器资源,被系统调度,当具有时间片就进入运行态

  1. 终止状态:进程结束或者被系统终止,进入终止态

七、堆区和栈区的区别

  1. 管理方式:栈区是由编译器自动管理,无需手动控制。堆区的分配和释放都是由程序员控制的

  1. 空间大小:栈的空间是要小于堆区的,堆区内存几乎没有限制,栈区一般是有一定的空间大小的

  1. 碎片问题:堆分配和释放都是由程序员控制的,频繁操作势必会造成内存空间的不连续,从而造成大量的内存碎片,使程序效率降低。栈是先进后出的数据结构,在某一数据弹出之前,他之前的所有数据都已经弹出

八、TCP粘包和拆包的原因

  1. 要发送的数据大于tcp发送缓冲区剩余空间大小,将发生拆包

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值