尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
9.24 面试复盘
1.关于atomic和mutex的区别2.项目描述3.自我介绍您好我本科专业是环境科学但因为自己比较喜欢编程所以从大学期间开始系统学习 C。目前主要掌握 C、数据结构、Linux、多线程以及 Qt 开发。C方面学习过面向对象、STL、内存管理等基础知识也通过技术博客和项目进行巩固。Linux方面主要学习了常用命令、进程线程以及多线程同步。项目方面我做过一个基于 Qt 的音乐播放器以及一个仿 muduo 的高并发服务器对 Qt 开发和 Linux 网络编程都有一定实践。实习期间主要负责 Qt 上位机开发其中比较核心的是 FPGA IQ 数据采集链路包括 UDP 通信、协议封装、数据包重排、IQ 数据处理、实时显示和数据落盘。目前我希望找 C/Qt、Linux C 或网络编程相关的开发岗位。4.你为什么专业是环境科学却来做 C我本科虽然是环境科学但我在大学期间逐渐发现自己对编程和计算机系统更感兴趣所以从 C 开始自学。最开始主要学习数据结构和 C 基础之后为了真正做项目又继续学习 Linux、网络编程、多线程和 Qt。我不是只停留在课程学习而是通过音乐播放器、服务器以及实习项目不断验证自己是否适合这个方向。到实习以后我实际参与了 FPGA IQ 数据采集和 Qt 上位机开发也进一步确定自己希望以后从事 C 开发。5.你 Linux 学到了什么虽然我不是科班出身但系统自学了 Linux 开发知识并且写了 Reactor 网络项目落地。Linux 基础命令、Makefile、gcc/gdb 调试静态库动态库进程、线程、信号线程同步互斥互斥锁、读写锁、自旋锁、信号量基础 IO、fd、mmap 内存映射进程间通信 IPCExt 文件系统Socket 网络编程TCP/UDP、HTTP/HTTPSARP、DNS、NAT会 tcpdump 抓包。 我基于这些知识用 C 实现主从 Reactor 高并发 TCP 服务器使用 epoll IO 多路复用将 Linux 网络、多线程、IO 相关知识做了实战。6.你实习主要做什么我实习主要负责频谱监测设备的 Qt 上位机开发其中我负责的核心模块是 IQ 数据采集链路。具体来说上位机需要接收 FPGA 通过 UDP 发送过来的 IQ 数据我负责了应用层通信协议的封装和对接之后实现 UDP 数据接收、数据包重排、IQ 帧重组、数据处理和 Qt Charts 实时显示同时还负责原始 IQ 数据的文件落盘。7.你说协议封装具体怎么做的协议主要分成控制命令和数据包两部分。控制方向由上位机根据采集参数组装命令发送给 FPGA数据方向由 FPGA 按照约定的数据结构封装 IQ 数据。数据包中包含当前包的packet_id、这一帧的total_packets、当前有效数据长度packet_length以及 IQ 数据 payload。我们和硬件工程师确认这些字段的定义后上位机根据packet_id把收到的数据放到对应的缓存位置最后根据total_packets判断一帧是否接收完整。8.UDP 为什么会乱序因为 UDP 本身不提供可靠、有序的传输保证所以发送端连续发送多个数据报之后接收端不能假设它们一定按照发送顺序到达。因此我们在应用层协议中增加了packet_id接收端根据这个序号把数据包放回对应位置从而完成乱序重排。9.你们 UDP 有没有考虑丢包我们在应用层通过 total_packets、packet_id 和 packet_length 对 IQ 数据进行分包和组帧。UDP 本身不保证可靠传输所以理论上存在丢包问题。对于实时频谱监测场景如果为了一个丢失的数据包阻塞等待重传会增加处理延迟因此是否重传需要根据应用场景权衡。如果是实时监测可以选择丢弃当前不完整帧继续处理下一帧如果是对原始 IQ 数据完整性要求较高的采集场景则可以结合 FPGA 侧缓存设计 ACK/NACK 和重传机制。10.你介绍一下你在这个项目中主要负责什么整个数据链路是怎么样的我主要负责 IQ 数据接收和后处理这一部分。FPGA 将一帧原始 IQ 数据分成多个 UDP 数据包发送到上位机我负责接收并解析数据根据包序号、总包数和包长度等信息对数据进行重排和组帧放入应用层缓冲区。之后根据配置的抽取参数对 IQ 数据进行处理再通过 Qt 的跨线程消息机制将处理后的数据投递到 UI 主线程使用 Qt Charts 绘制实时 IQ 波形。同时将原始 IQ 数据保存为 BIN 文件便于后续分析和数据回放。11.如何判断缺包、如何决定等待还是放弃一帧为单位,用包序号判断是否收齐0到N-1号包;在一个很短的超时窗口内等待剩余包,超时仍缺则记为不完整帧。不阻碍实时显示,并记录完整率作为质量指标。这个做法和实时业务目标一致,在取舍上更偏向可用性而非传输完美无缺。12.颜色地址Pastel Color Tones Color Scheme - Palettes - SchemeColor.com13.讲一讲什么是信号和槽机制信号槽是 Qt 元对象系统提供的对象间通信机制用来解耦。 moc 在编译预处理阶段扫描头文件生成元对象相关代码。调用 connect 的时候会把槽函数注册到这个信号对应的回调链表里面不是全局哈希表。 emit 发射信号的时候会遍历该信号绑定的所有槽函数传递参数并执行。 信号是事件发生时对外发出的通知没有函数体但可以携带参数必须写在 signals 下通过 emit 触发。 槽本质就是成员函数。Qt5 新的函数指针 connect 语法普通成员函数不需要写 slots 关键字也能作为槽槽的作用就是收到信号后执行业务逻辑。14.请问槽函数的执行是同步的还是异步的15.你们的设备的协议是如何规定的我们项目没有直接使用 HTTP而是基于 UDP/TCP 之上的自定义二进制应用层协议。代码中的这些 struct 相当于协议报文的数据结构定义程序根据结构体填充同步字、长度、请求 ID、命令字以及具体参数然后经过协议封装/序列化通过 Socket 发送给设备设备按照相同的字段约定进行解析。16.你在简历中写的数据完整率是什么意思你怎么证明是你的分包方案把 90% 提升到了 95%原来的数据传输以一帧 IQ 数据为单位一帧大约 4096 Byte数据量较大。后来我在协议层增加了帧 ID、包序号、帧长度等字段将一帧数据拆分成多个较小的数据包进行传输。接收端根据帧 ID 和包序号进行重组并以完整帧作为统计单位计算数据完整率使完整率从原来的约 90% 提升到了 95%左右。我通过实际运行测试对修改前后的数据完整率进行了对比。在相同测试条件和测试时长下修改前完整率大约 90%增加协议字段并进行分包重组后完整率提升到约 95%。这里的完整率是按照完整 IQ 帧数量与理论应接收帧数量的比例进行统计。项目中原先通过senddatastruct.h和receivedatastruct.h分别定义上下位机之间的控制命令和接收数据结构后续通过NewProtocol.h重新定义了一套统一的协议报文其中Packet_Command负责参数配置Packet_Data负责分包数据传输。相比旧协议新协议最大的变化是协议结构更加统一。旧协议主要按照发送命令和接收数据分别定义结构新协议则把命令和数据统一封装成标准数据包并且对数据分包中的总包数、包序号、有效长度进行了明确描述更方便上位机进行协议解析和IQ数据的组帧处理。17.你的频谱上位机开发为什么要用dialog而不是widget18.如何确定一包数据是否完整到达19.如何解决cpu问题我的实现中每 100ms 检查一次数据更新状态如果允许绘制就通过 QtConcurrent 异步执行 paint。paint 内部需要复制采集数据、进行数据抽取以及最大保持、最小保持、平均等轨迹处理最后再更新 Qt Charts 曲线。因此数据量较大或者刷新频率较高时CPU 开销主要来自数据处理和图表重绘。为了控制开销我做了复用缓冲区、预分配以及超过 5000 点时进行 max/min 抽取等优化同时通过原子标志避免 paint 重入。”20.C中常用的四个类型转换是什么分别适用什么样的场景
RELATED

相关推荐

数字化转型实践方法⑨|点·线·面推进法:不要一上来就全公司全盘数字化

数字化转型实践方法⑨|点·线·面推进法:不要一上来就全公司全盘数字化

介绍 “点・线・面” 推进策略;优先做必要的信息数字化,不必一次性全量数字化全部资料;从过程数字化切入,举动态定价需要历史销售数据作为示例。上一篇文章我们聊了速赢——如何在3个月内通过业务改善打开局面。但很多企业走到这一…

📅 2026/10/3 17:42:11
Operit 局域网 External HTTP Chat API 实战指南:从鉴权到同步/SSE/异步回调三种调用模式

Operit 局域网 External HTTP Chat API 实战指南:从鉴权到同步/SSE/异步回调三种调用模式

AI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆 【免费下载链接】Operit The most powerful AI agent and AI chat software on Android/Operit是一款Android上能力最为强大、发展最久的AI Agent 项目地址: https://gitcode.com/gh_mirrors/o…

📅 2026/10/3 17:37:11
本地补丁彻底解除 Wand 免费时长限制,全程不碰服务器

本地补丁彻底解除 Wand 免费时长限制,全程不碰服务器

本地补丁彻底解除 Wand 免费时长限制,全程不碰服务器 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 每天用到第二小时,弹窗…

📅 2026/10/3 17:37:11
MORE NEWS

更多资讯

📰

MySQL LIMIT分页:从基础语法到深分页性能优化实战

直接说结论:LIMIT在MySQL里看着简单,工作时你大概率只是把它当作“截断工具”在用,但真正的高效分页、深分页优化、与排序和连接的配合,这些地方才是性能差异和坑位的来源。我见过不少同行,尤其是刚接触MySQL的开发者&…

📰

TBtools共线性图谱精修指南:从可运行到可发表

1. 为什么一张共线性图能登上Nature封面?——从“能画出来”到“值得被看见”的认知断层你有没有过这样的经历:花三天跑通Circos流程,生成一张密密麻麻的染色体环形图,导出PDF发给导师,对方扫了一眼说:“颜…

📰

Navicat 17连接Oracle 11g实例:从监听配置到表空间创建全攻略

1. 动手之前:先说清楚Navicat 17和Oracle 11g这对组合的关系 很多朋友一看到“Navicat 17创建Oracle 11g数据库实例”这个标题,下意识以为打开Navicat点几下“新建数据库”就完事了,实际上这里有两个常见的误解得先纠正。 Navicat 17本身不是…

📰

Python实现宽带GSC波束形成实战指南

1. 项目概述:为什么宽带GSC不是“调个参数就能用”的玩具 你拆开市面上任何一款中高端智能音箱,比如某米、某度、某为的旗舰款,里面几乎都藏着4到6颗麦克风,排成圆形或线性阵列——它们不是为了“多录几个声道”,而是要…

📰

树莓派+STM32+激光雷达三端协同开发实战指南

1. 项目概述:这不是一台小车,而是一套“能跑的嵌入式系统教科书”“树莓派STM32激光雷达:大学生工训赛智能物流小车全栈开发实录(附避坑指南)”——这个标题里没有一个词是虚的。它不是拼凑的关键词堆砌,而…

📰

SpringBoot+Vue+MyBatis在线考试系统:开发部署与避坑指南

做后台开发这些年,考试系统这类项目我前后接手过不少版本:有学校拿来期末测评的,有企业内部做培训认证的,还有金融机构拿来做上岗考核的。需求大同小异,但源码质量真的天差地别。最近花时间把一套基于 SpringBoot Vue…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬