news 2026/10/15 2:56:10

诺瓦笔试全解析:C/C++基础、编程题与避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
诺瓦笔试全解析:C/C++基础、编程题与避坑指南

最近不少人私信问我诺瓦笔试到底考什么,刚好我自己刚经历完一轮完整流程,从投递、在线笔试,到等结果、复盘,前后差不多十几天。诺瓦在显示控制与视频处理这个细分方向里属于求职热门,笔试环节刷人比例不低,简历不错的同学也有直接挂在第一轮的。这篇文章不是官方攻略,只是一个过来人把考察方向、题型套路、环境避坑和备考路线串一遍。如果你是准备投递诺瓦的应届生,或者刚转嵌入式、想了解这类公司笔试怎么准备,应该能少走一些弯路。

1. 投递前先搞清楚:诺瓦笔试的岗位划分与考察逻辑

1.1 笔试不是一套卷子:不同岗位的考察重点差很多

先泼一盆冷水:你听到的“诺瓦笔试”实际上是一组按岗位区分的试卷,不是所有人做同一套题。虽然都叫在线笔试,但软件研发、嵌入式、算法、测试、硬件这几条线的题型和侧重点差别很大。

按照我了解到的情况,大致可以分成这么几类:

岗位方向选择题考察重点编程题特点
C++/嵌入式软件C/C++细节、操作系统、计算机组成2~3道,模拟题+数据结构题为主
Java后端Java基础、数据库、网络偏算法和业务场景模拟
算法岗数学、机器学习基础、数据结构1~2道算法题,难度偏高
测试岗软件测试理论、基础编程简单编程+场景设计题
硬件岗数字电路、模拟电路、单片机与软件岗差异较大

为什么岗位差异这么大?因为显示控制类产品对底层性能、实时性非常敏感,C/C++、内存管理、并发这些基础能力的考察优先级很高。而互联网公司常用的高并发、分布式框架在这里反而没那么重要。这一点直接决定了你刷题的重点方向。

1.2 投递岗位时的一个判断方法:看岗位描述里的关键词

我复盘过自己和身边同学的投递记录,发现一个比较准的规律:岗位描述里的关键词基本预示了笔试试卷的语言和考察范围。

如果岗位描述写着“熟悉C/C++”“掌握Linux环境开发”“了解嵌入式体系结构”,那笔试几乎必然围绕C/C++展开,包括指针、内存、结构体这些内容。如果岗位描述写的是“熟悉Spring Boot”“熟练使用MySQL”,那么C++占比会明显下降,更多是Java基础和数据库SQL题。

所以投递前不要只看公司名字,把岗位JD看三遍特别重要。有些同学用Python语法去答C++笔试题,选择题可能还行,编程题一用到指针就露怯。我建议按岗位写明的最低要求做一次自测,如果自测不过关,要么先补基础,要么换个方向投,不要硬碰硬。

1.3 和互联网公司笔试相比,诺瓦笔试的风格差异

还有一个值得说的地方:诺瓦笔试很难用“大厂笔试”的标准去套。整体感受是,选择题比例更大、分值更分散,编程题的算法难度没有一线大厂那么卷,但对基础知识的细致程度要求非常高。

举个例子,大厂笔试经常考“设计一个LRU缓存”这类综合性算法题,而诺瓦笔试的选择题里更多是“下面哪个操作会导致内存泄漏”“结构体在32位系统下sizeof是多少”这类看似不难、但容易翻车的题。换句话说,它筛的不是你刷题数量多不多,而是你的基本功扎不扎实。

2. 从选择题到编程题:整套试卷的题型拆解与得分策略

2.1 选择题:C/C++细节与操作系统题是拿分基本盘

以我这次的经验,选择题大概在20到30道之间,单选和多选混合,多选少选不得分。高频考点集中在四个模块:

  • C/C++语言细节:内存布局、指针与数组、结构体对齐、static/const/volatile、虚函数
  • 操作系统:进程与线程、死锁、页面置换算法、共享内存
  • 计算机网络:TCP/UDP、三次握手、子网掩码、HTTP状态码
  • 数据结构:链表操作复杂度、二叉树遍历、栈和队列特性

选择题的拿分策略很朴素:先做有把握的,标记不确定的,最后再回头。我当时给自己定的目标是正确率不低于70%,因为后面的编程题很难保证全对,选择题一旦失守,整场笔试就非常被动。特别是多选,犹豫不决的时候宁可选最确定的两个,也不要随手多选。

2.2 编程题:常见题型、样例与判题机制

编程题一般2到3道,难度阶梯式上升,我遇到的是“字符串处理→数组模拟→图论/DP”这样的组合。第一道字符串题看着简单,实际上考的是对输入格式和输出格式的处理,包括分隔符、空格、空行这些容易忽略的细节;第二道数组模拟题考验建模能力;第三道压轴题用来区分候选人。

判题方面,大部分在线笔试平台会在代码框外提供“自测”功能,允许你用题目给的样例测试。很多人在这里犯了第一个错:只测样例跑通就提交。实际上后台会用多组测试数据来评,包括边界值、极端输入、特殊字符等。你要是只考虑了样例,大概率只能拿到部分分。

我建议编程题按这个顺序处理:

  1. 先看题目的数据范围,估算复杂度上限
  2. 先实现一个正确性有保障的暴力解,提交拿到保底分
  3. 确认保底分之后,再优化到正解

第三题如果读了10分钟还是没有可靠思路,不要死磕,暴力解写好提交,把时间留给前面的代码去检查和优化。

2.3 多组输入输出:最容易拿到的分,也最容易丢

在线笔试编程题有一个很经典的分水岭——多组测试用例的处理。题目如果写了“输入包含多组数据,每组占一行,处理到文件末尾”,那么你的代码主体必须是循环结构,不能处理一行就退出。

举一个最简单的C++例子:

#include <iostream> using namespace std; int main() { int a, b; while (cin >> a >> b) { cout << a + b << endl; } return 0; }

看起来很简单,但考场上紧张的时候,很容易写成只处理一次输入然后return 0。这种代码过样例没问题,一到多组测试直接挂。还有输出格式,题目要求每组结果换行,有些人会在最后一组后面多加一个空行,有些平台会判格式错误。这些都是在本地IDE完全正常、提交就0分的典型原因。

3. 在线笔试环境的坑,比题目本身更值得重视

3.1 笔试前30分钟必须完成的固定动作

我见过太多人挂在环境上,题目其实会做,结果摄像头没过、页面切出来一次被警告、浏览器不兼容,最后成绩作废。分享一套我固定使用的动作:

  1. 提前一天用系统相机测试摄像头是否正常,确保光线充足
  2. 关闭微信、QQ、网盘同步等一切可能弹窗的软件
  3. 确认电脑没有外接第二块屏幕,有些系统对外接显示器检测严格
  4. 使用Chrome或Edge浏览器,提前打开笔试通知里的链接
  5. 准备身份证或学生证放在桌面,个别系统需要手持证件拍照

做这些动作的意义在于把不确定因素提前排除。笔试本身已经够紧张了,如果再被环境打断,心态容易崩。

3.2 自测用例的错觉:为什么本地运行正确,提交却是0分

我自己的编程题提交记录里有过至少两次“本地全对,线上0分”,复盘出来的原因很集中:

  • 输出格式不符:多打了空格、大小写不一致,或者没有按题目要求输出固定字符串
  • 整数溢出:中间的乘法结果超过int上限,样例数据小看不出来,大数据直接被拉穿
  • 递归爆栈:树或图遍历时递归深度过大,判题环境栈空间有限
  • 全局变量污染:多组测试用例时,上一组数据残留导致结果错乱
  • 输入解析错误:混用cin和getline导致换行符被当作下一组数据的一部分

怎么避免?有个笨办法但很有效:把题目给的样例抄成输入文件,再自己编几组边界数据,比如所有值取最大、数组长度为1、字符串全为空格。把这些都跑通了再提交,出错概率会小很多。

3.3 时间分配:选择题和编程题之间的博弈

一场笔试总时长通常是90到120分钟,时间怎么分非常关键。以120分钟为例,我的参考节奏是:

  • 前40分钟:完成选择题,不确定的先标记,不反复纠结
  • 中间60分钟:处理编程题,第一题尽量20分钟内完成,第二题30分钟,第三题留足30分钟
  • 最后20分钟:检查选择题标记项,补充编程题注释说明思路

这里要特别提醒:有些笔试系统不支持切题后再回看,你在选择“进入编程题”之前要先把选择题全部敲定。入场后不要急着做题,第一件事是读一下“考试须知”,搞清楚能否自由跨题、是否有小题计时。这个动作40秒,能省掉很多低级错误。

4. 一周备考冲刺:针对诺瓦笔试方向的实操路线

4.1 算法与数据结构:哪些值得背,哪些可以放

很多人在笔试前疯狂刷题,其实效率很低。针对诺瓦这类倾向考察基本功的笔试,算法准备的重点其实是有限的。我的优先级排序如下:

第一梯队(必须会默写模板):

  • 二分查找及其边界变体
  • 双指针、滑动窗口
  • DFS/BFS遍历
  • 并查集
  • 简单DP:最大子段和、最长上升子序列、0/1背包

第二梯队(理解思路即可):

  • 拓扑排序:题目通常和任务依赖关系挂钩,代码模板不长
  • Dijkstra最短路径
  • 最小生成树
  • 单调栈

第三梯队(时间富余再看):

  • 线段树、树状数组
  • KMP、字典树

说实话,如果没有长期刷题背景,第三梯队临时学性价比很低。笔试的核心是拿基础分,第一梯队吃透,加上暴力解的兜底,已经能超过大多数裸考的人。

4.2 嵌入式与显示控制相关的高频基础题

诺瓦这类公司的笔试区别于大厂的特点是:基础知识中嵌入式比例明显偏高。我把高频考点整理了一下,基本都是从同学分享和个人经历里汇总的:

  • 结构体字节对齐:给出一段struct,问sizeof大小
  • 大小端:考内存中的字节顺序
  • 位运算:用位操作实现乘除法、置位、清位
  • volatile与const的区别
  • 进程间通信方式:管道、消息队列、共享内存、信号量
  • Linux常用命令:ps、netstat、chmod、grep
  • 中断和轮询的区别

拿结构体对齐举例,这是最典型的选择题考点:

struct Example { char c; // 偏移0 int i; // 对齐到4,偏移4 short s; // 偏移8 };

在32位系统、默认4字节对齐的条件下,这个结构体大小不是1+4+2=7,而是12:char后面填充3字节,int占4字节,short占2字节,整体对齐到4字节后是12字节。这类题一旦理解原理,就能举一反三,不需要死记。

4.3 一周时间表的参考方案

如果只有一周时间,可以参考下面的安排,每天3到4小时:

Day1:C/C++基础选择题,重点复习指针、内存、结构体,刷题量不需要大,但错题要整理

Day2:操作系统和计算机网络选择题,重点覆盖死锁、进程线程、TCP/UDP

Day3:二分、双指针、滑动窗口,每种题型写熟一个模板

Day4:字符串处理和模拟题,练习各种输入格式的解析

Day5:DFS/BFS和并查集,准备图论模板

Day6:简单DP和拓扑排序,掌握基本状态转移

Day7:限时120分钟做一套完整模拟题,严格模拟考场的节奏和切题操作

这个时间表不追求覆盖所有题目,只求把最高频、最稳定的分拿到手。

5. 笔试之后怎么判断结果、怎么复盘

5.1 笔试成绩什么时候出,怎么判断自己是否通过

根据身边同学的反馈,笔试后的节奏通常是:一到两周内状态会发生变化,比如从“笔试完成”变为“面试中”。超过两周没有任何变化,基本上可以认为这轮没有通过。有些公司不公布笔试具体分数,只让HR在后台看,所以不要抱着“查询成绩”的想法干等。

这期间最正确的做法是继续投其他公司,让笔试变成日常训练的一部分。把诺瓦笔试当成一次免费的全真模拟,下一场状态只会更好。

5.2 错题复盘:比估分更有价值的一件事

我每次笔试结束后会趁记忆还热,立刻做一个表格:

题号考察知识点失分原因重做结果改进方向
选择题10结构体内存对齐概念不清已理解补充字节对齐规则
编程题1字符串分割多组用例没处理已重做输入输出模板化
编程题3状态压缩DP完全没有思路看题解后理解放弃冷门DP

复盘的核心不是“这题我错了”,而是“这个知识点我下次遇到还能不能做对”。如果重做一遍仍然卡住,说明需要回到基础知识层面去补,而不是再看一遍题解。

最后再说一点个人感受。诺瓦笔试的难度其实没有很多人想的那么夸张,它更看重稳定性和基础扎实度。我第一次参加的时候总想着把压轴题AC,结果前面选择题有点飘、编程题暴力分也没拿全,成绩出来后很遗憾。后来调整策略,把自己定位成“尽量拿满基础分,难题能骗一点是一点”,效果明显更好。如果你正打算投递,建议至少提前一周按上面的清单走一遍,尤其是把C/C++基础题和在线笔试环境提前适应好。笔试只是一个入口,后面还有面试,稳扎稳打比什么都重要。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 2:54:00

GEC6818嵌入式BMP显示实战:从文件解析到RGB565帧缓冲映射

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/15 2:51:55

STM32用PWM播放WAV:低成本语音播报方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华