面试官你好,我叫潘兴邦,本硕都就读于华中科技大学,专业是船舶与海洋工程,实验室是船海105实验室,在实验室的方向主要是智能水下机器人,在研究生期间作为项目子系统负责人参与和船舶研究所合作的船舶项目。 今年的7月到8月份在华为实习了接近两个月时间,我们部门是做家庭智联,我们组是做也就是wifi,我在组内主要做嵌入式开发,主要做wifi驱动这一块。 在实习期间我学习熟悉业务流程、学习提单、同步分支代码,编译、验证单板等业务流程,完成问题单若干。学习WIFI不同协议之间的差异以及相应技术,掌握802.11的常用帧结构,掌握STA连接AP的WIFI连接过程
- RS232、RS485应用场景和区别
- 堆区、栈区的区别,如果你是程序员,应该将数据放在什么区域
- 中断
- 字节对齐
- 规则1:当前成员变量要对齐到当前成员变量对齐数的整数倍的地址处
- 规则2:结构体的总大小为最大对齐数的整数倍
- 规则3:嵌套结构体的对齐数不是该结构体的总长度,而是该结构体的最大对齐数
- 例如结构体内成员变量长度依次为:1,4,1,则结构体大小为12
- 遇到项目交付节点,你怎么处理
- 怎么拉通对齐,获得资源
- 不要陈述流水账,要从研究和项目工作中提炼一些亮点
- 个人情况陈述为主,亮点工作要以报奖的角度来提炼
- 首先自己在项目中的定位,负责人的话就是主持,或者某技术的主持,核心骨干等等 其次是创新,依次看看有没有方法上的创新、集成上的创新、对象上的创新等等 最后是效果,量化最好
- 你在项目中用的控制算法讲一下
- 是控制舵机还是控制深度
- 讲一下X舵和十字舵的区别,为什么要用X舵?
- 做的都是719的项目,你会投719吗?你在华为实习过,会投华为吗?
- 回答: 一方面了解到贵单位也有无人航行器、水动力试验相关的工作,技术上是相通的。 二是积累了较好的工程经验,也可以更好更快的融入2所的工作
假设主机A为客户端,主机B为服务端 TCP的三次握手的过程:A向B发送连接请求,即SYN报文,B收到请求报文后,返回一个SYN+ACK报文用于请求+确认,A收到来自B的报文后,最终发送一个ACK报文进行确认
采用三次握手是为了防止失效的连接请求报文突然又传到主机,因此产生错误。
假设这样一种情况:A发送的第一个连接请求报文,因为网络延迟,很久之后才达到主机B,B以为A希望建立连接,所以返回一个ACK+SYN报文,然而这个连接请求报文对于A早就失效了。
如果是两次握手,那么当B返回了ACK+SYN报文,B就认为建立了连接,而A很清楚这是早就失效的报文。所以B会发送数据,白白浪费了资源
- 本质关系:线程是系统调度的最小单位,进程是系统进行资源分配的最小单位
- 包含关系:一个进程至少有一个线程,线程是进程的一部分
- 资源开销:进程有自己的独立空间,进程切换有较大的开销;同一个进程内的线程共享进程的地址空间,而每个线程也有自己独立的栈和程序计数器,线程切换开销较小
- 影响关系:一个进程崩溃后,不会影响其他进程。而一个线程崩溃,会影响整个进程崩溃掉,所以多进程要比多线程健壮
- 管道
- 关键命令:在linux中,管道的命令是
|
,它的作用是把前一个命令的标准输出作为后一个命令的标准输入 - 通信方式:管道是单向的数据通道
- 缺点:如果数据没有被拿走,那么写数据的进程会一直等待,直到读数据的进程读取完数据。这使得管道的通信效率很低
- 消息队列
- 关键命令:关键命令
msgget
创建队列 - 本质:消息队列本质是内核提供的链表,向消息队列写数据相当于插入新节点;读数据相当于删除节点
- 缺点:如果数据体积较大,由于读写数据都需要拷贝操作,那么读写数据的速度就会很慢
- Socket
- 特点:不同主机通信
- 层级:应用层和传输层之间的一个抽象层
- 实现:是一种“打开-读/写-关闭”的实现,服务端和客户端各自维护一个“文件”,建立连接后,向自己文件写入内容供对方读取或者读取对方内容
痛点问题:同一个进程的不同线程共享进程资源,那么多线程对同一个数据进行读写操作,就会造成冲突。
- 互斥量
- 定义:只有拥有互斥量的线程才有权对共享资源进行读写操作
- 信号量
- 定义:信号量可以看成计数器,表示允许同时访问共享内存的最多进程数
- 加减操作:每当有一个进程访问共享内存,信号量-1.当信号量为0时,锁住共享内存;当有一个进程取消访问共享内存,信号量+1
静态多态就是重载。 重载的定义:函数名相同,但是参数列表必须不同
满足动态多态的三个条件:
- 父类有虚函数
- 子类重写父类虚函数
- 父类指针指向子类对象
底层实现原理: 拥有虚函数的类有一个虚函数表,当对该类进行实例化对象时,编译器给对象分配了一个指针,指向虚函数表头,那么当满足动态多态的条件:父类指针指向子类对象,由于是子类对象,指针指向的是子类中的虚函数,这样程序就会执行子类中的虚函数,而不是父类中的虚函数
- 堆空间:存储程序员自己new出来的变量,需要由程序员自己delete掉,否则发生内存泄漏
- 栈空间:存储函数的传参、局部变量等
- 全局空间:存储全局变量、静态变量、常量等
- 代码区:存储代码段
动态负载
岗位、工作base