最近不少人私信问我诺瓦笔试到底考什么,刚好我自己刚经历完一轮完整流程,从投递、在线笔试,到等结果、复盘,前后差不多十几天。诺瓦在显示控制与视频处理这个细分方向里属于求职热门,笔试环节刷人比例不低,简历不错的同学也有直接挂在第一轮的。这篇文章不是官方攻略,只是一个过来人把考察方向、题型套路、环境避坑和备考路线串一遍。如果你是准备投递诺瓦的应届生,或者刚转嵌入式、想了解这类公司笔试怎么准备,应该能少走一些弯路。
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”这样的组合。第一道字符串题看着简单,实际上考的是对输入格式和输出格式的处理,包括分隔符、空格、空行这些容易忽略的细节;第二道数组模拟题考验建模能力;第三道压轴题用来区分候选人。
判题方面,大部分在线笔试平台会在代码框外提供“自测”功能,允许你用题目给的样例测试。很多人在这里犯了第一个错:只测样例跑通就提交。实际上后台会用多组测试数据来评,包括边界值、极端输入、特殊字符等。你要是只考虑了样例,大概率只能拿到部分分。
我建议编程题按这个顺序处理:
- 先看题目的数据范围,估算复杂度上限
- 先实现一个正确性有保障的暴力解,提交拿到保底分
- 确认保底分之后,再优化到正解
第三题如果读了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分钟必须完成的固定动作
我见过太多人挂在环境上,题目其实会做,结果摄像头没过、页面切出来一次被警告、浏览器不兼容,最后成绩作废。分享一套我固定使用的动作:
- 提前一天用系统相机测试摄像头是否正常,确保光线充足
- 关闭微信、QQ、网盘同步等一切可能弹窗的软件
- 确认电脑没有外接第二块屏幕,有些系统对外接显示器检测严格
- 使用Chrome或Edge浏览器,提前打开笔试通知里的链接
- 准备身份证或学生证放在桌面,个别系统需要手持证件拍照
做这些动作的意义在于把不确定因素提前排除。笔试本身已经够紧张了,如果再被环境打断,心态容易崩。
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++基础题和在线笔试环境提前适应好。笔试只是一个入口,后面还有面试,稳扎稳打比什么都重要。