拓冰建站拓冰建站
首页 / 资讯中心 / 正文

2024蔚来秋招软件开发岗笔试复盘:题型解析与备考指南

2024年秋招我投了蔚来汽车的软件开发岗。说实话在投递之前我对车企的笔试认知还停留在“考考C语言、考考嵌入式”的层面但真正坐到赛码网笔试页面面前时才发现完全不是这么回事。这场笔试既有常规的算法编程题也夹杂了不少操作系统、网络、数据库的专业题甚至还有一些结合智能汽车场景的扩展题。如果你正在准备大厂笔试或者对新能源车企的技术岗感兴趣这篇复盘应该能帮你少走不少弯路。我会把笔试的形式、题型分布、有代表性的真题思路、备考策略以及我踩过的坑全部整理出来尽量做到连参考代码都给到位而不是只给一句“动态规划”就完事。无论你是走Java方向、C方向还是嵌入式软件开发方向这篇文章里的内容都能直接拿来参考。1. 蔚来秋招笔试整体情况岗位、流程与平台选型1.1 软件开发岗的投递方向与笔试入口蔚来汽车在秋招里开放的软件开发岗并不是一个笼统的岗位它内部还细分了好几个方向。我当时在官网投递时看到至少包括智能座舱软件开发、自动驾驶相关的应用软件、车联网服务端开发以及底层的嵌入式软件开发等。不同方向的笔试内容会有差异但大体框架一致编程题 专业基础选择题 场景扩展题。如果你投递的是Java后端方向那么笔试里Java相关的题目会占一定比重如果你投的是嵌入式方向C/C和操作系统底层知识的比重会明显升高。我投的是偏应用层的软件开发岗所以笔试里C、数据结构和算法是主菜但也有几道题涉及Linux和网络通信。建议在投递前认真看一遍岗位描述里的技术要求这决定了你笔试复习的重点应该放在哪里。赛码网是蔚来秋招笔试的主要在线笔试平台。它不是唯一使用赛码网的大厂像其他一些互联网公司和中大型科技企业也会用所以如果你之前在这个平台上有过笔试经验会有一定优势。平台支持C、Java、Python等多种语言提交编程题需要自己处理输入输出格式这跟牛客网的风格类似但有几处细节不一样后面我会单独讲。1.2 笔试流程、时间与整体难度评估从流程上说投递简历之后会收到笔试通知邮件邮件里会注明笔试时间、时长和平台链接。蔚来秋招的软件开发岗笔试一般安排在晚上时长是90分钟到120分钟不等。我参加的那场是90分钟题量大概是4道编程题 10道左右的选择题另外还有1道简答/设计题。这套题量的难度我给一个比较客观的评估中等偏上但没到地狱级。编程题不会像某些互联网大厂那样出一道Hard级别的压轴题但中等偏上的题还是有的特别是涉及图论或动态规划的状态设计时很考验基本功。选择题涵盖的范围比较广操作系统、计算机网络、数据库、C语法都可能有个别题目会结合自动驾驶场景出比如“多传感器数据融合中以下哪种同步机制更合适”之类的这种题如果没有准备会比较懵。时间分配上我的建议是选择题控制在25分钟内编程题留至少55分钟简答题10到15分钟。编程题里通常有两道是“只要刷过题就能写出来”的一道是中等的偏难另一道则比较考验临场状态。如果前面选择题磨太久编程题会非常赶后面我会详细说时间分配的踩坑记录。2. 题型分布与考点拆解笔试的核心板块逐个过2.1 编程题算法与数据结构的重头戏蔚来软件开发岗笔试的编程题从我的实际体验来看题型集中在几类数组与双指针、动态规划、图论/搜索、字符串处理与模拟。这和大厂笔试的主流风格一致没有特别偏门的算法也没有那种“脑筋急转弯”式的题目。但需要注意的是有几道题会套一个智能汽车的业务场景壳比如“充电桩调度”“车辆路径规划”之类壳是新的但内核还是经典算法。举一个我印象比较深的例子有一道题大意是“有若干个充电桩每个充电桩有服务范围和当前负载给定一个车辆请求找到满足距离约束且负载最低的充电桩”。第一反应这是模拟排序但如果你把它抽象成“在二维坐标中查找满足条件的节点”其实就是一个带过滤条件的排序/最小堆问题。关键不是算法有多难而是你能不能快速把业务场景还原成数据结构。这种出题思路在车企笔试里很常见因为车联网、智慧能源本身就是他们的核心业务。另外编程题支持多语言提交但我强烈建议用你最熟练的语言而不是现场尝试新语言。C选手就用CJava选手就用JavaPython选手用Python也没问题。蔚来的笔试判题系统对Python的支持是正常的不限制时间库但要注意递归深度问题我有朋友在牛客上遇到过Python递归爆栈赛码网也有类似风险。2.2 选择题专业基础与场景理解的混合考查蔚来笔试的选择题出得比较“正规”基本没有什么脑筋急转弯类的问题考察的都是基础但重要的知识点。我把它们归纳为四类操作系统进程与线程的区别、死锁产生的四个必要条件、虚拟内存与页面置换算法、进程间通信方式。这类题在选择题里占比不低我甚至遇到了一道关于Linux中fork()函数返回值的题。计算机网络TCP三次握手与四次挥手、TCP与UDP区别、HTTP/HTTPS的差异、IP地址与子网划分。有一题是给出一个IP和掩码问网络地址是什么这种题只要背过公式就没问题。数据库SQL基本语法、索引的原理与失效场景、事务的ACID特性、隔离级别与锁机制。考得不算深但很典型。C/Java基础虚函数与多态、智能指针、内存管理、异常处理、Java的JVM内存模型、集合类源码的复杂度。这类题如果你平时写业务代码比较多可能会在一些细节上翻车比如“map的底层实现是红黑树插入复杂度是多少”这种。除了这些常规题确实有一两道题会结合蔚来的业务场景出我当时就遇到了一道关于“智能座舱多屏交互下多个进程如何共享摄像头数据”的题目本质上是在考进程间通信。这种题你不用真的了解智能座舱把操作系统基础的共享内存、消息队列知识吃透就能答出来。所以复习核心还是基础不要被场景壳吓到。2.3 简答/设计题考察工程思维的一道关卡除了选择题和编程题蔚来笔试还有一个让我出乎意料的部分一道简答题/设计题。我当时遇到的是“设计一个车辆远程升级OTA系统的任务调度模块要求支持多车型、多版本、可暂停、可回滚请画出模块设计并说明关键数据结构。”说实话这种题对在校生来说不算简单因为它考的不是某个算法知识点而是工程思维和系统设计能力。我当时的大致思路是把每个升级任务抽象成一个TASK实体包含任务ID、车型ID、目标版本号、当前状态、重试次数等字段用消息队列来解耦任务下发和任务执行用状态机来管理任务生命周期比如“待执行—下载中—校验中—安装中—已完成/失败/已回滚”状态机的转移条件要记录在数据库里方便做审计和异常恢复。这个思路其实和通用的任务调度系统没有本质区别如果之前有做过类似项目或者在实习中接触过消息队列会很有帮助。这道题的分数占比不低建议不要空着哪怕只写清楚状态机的几个状态和转移关系也能拿到一部分分。而且这里可以主动结合蔚来的场景比如提到多车型意味着任务参数不同、车机网络不稳定意味着需要断点续传和失败重试机制等这些细节能体现你在用心思考业务。3. 真题思路解析三道有代表性的编程题3.1 动态规划类状态转移怎么想才能不漏解编程题基本都是LeetCode风格但不会直接出现原题而是换了一层场景。有一道题我印象很深大意是“给定一个数组表示每天的电池成本你可以选择在某天买入电池并在此后的某天卖出但最多完成两笔交易求最大收益”。如果你刷过LeetCode应该马上能反应过来这是“买卖股票的最佳时机 III”的变种只是把股票换成了电池而已。如果你没刷过这道题第一次做可能会有点慌。我当时的做法是确定状态为dp[i][k][0/1]其中i表示天数k表示已经完成的交易次数0表示不持有电池1表示持有电池。状态转移方程如下dp[i][k][0] max(dp[i-1][k][0], dp[i-1][k][1] prices[i]) dp[i][k][1] max(dp[i-1][k][1], dp[i-1][k-1][0] - prices[i])边界条件是dp[0][k][0]0dp[0][k][1]-prices[0]最后答案是dp[n-1][2][0]。时间复杂度和空间复杂度都是O(n*k)因为k2所以就是O(n)。如果不理解状态设计一个常见的思维误区是试图用贪心求解但这道题要求最多两笔交易贪心会漏掉“第一笔和第二笔交易之间存在重叠”的情况。动态规划的优势就在于把所有状态都枚举出来用max保证不漏解。我建议你在笔试前把股票系列至少做一遍包括“只能交易一次、不限制次数、含冷冻期、含手续费”这几个变体做熟之后你面对“换皮”的动态规划题就会从容很多。蔚来这道题的代码量不大核心是状态转移的推导平时不练的话很难在15分钟之内写出来并保证通过。3.2 图论/搜索类BFS 与 Dijkstra 的选择判断另一道让我印象深刻的编程题是关于“充电站最短路径”的变种。大意是在地图上有若干个充电站车辆可以从一个充电站行驶到另一个充电站如果两站之间的距离超过当前电量能够行驶的最大距离就不能直连。每个充电站有充电速度求从起点到终点的最短时间。这道题可以拆成两层先用最短路径或者预处理两两可达性建图再在图上做带权最短路。我当时的思路是如果所有边的权重一样直接用BFS就可以但充电时间作为边权每条边不一样所以要跑Dijkstra。我最后选择的实现是用邻接表建图节点是充电站的编号边权是“从一个充电站到另一个充电站的行驶时间 目的地充电站需要的充电时间”然后用优先队列优化Dijkstra。核心代码大致如下#include bits/stdc.h using namespace std; typedef pairint, int PII; int dijkstra(vectorvectorPII graph, int start, int end) { const int INF INT_MAX; vectorint dist(graph.size(), INF); priority_queuePII, vectorPII, greaterPII pq; dist[start] 0; pq.push({0, start}); while (!pq.empty()) { auto [d, u] pq.top(); pq.pop(); if (d dist[u]) continue; if (u end) return d; for (auto [v, w] : graph[u]) { if (dist[u] w dist[v]) { dist[v] dist[u] w; pq.push({dist[v], v}); } } } return -1; }这里有个容易踩的坑你必须先判断“可达性”。如果两站之间的距离大于车辆充满电后的最大续航里程那么即使Dijkstra能跑出结果这个结果也没有实际意义。所以在建图时就要把“不可达”的边直接过滤掉不要留到搜索阶段再判断。这个细节在笔试里很常见边界条件的遗漏很容易导致样例过了但隐藏用例全挂。3.3 字符串模拟类边界条件的处理是灵魂蔚来笔试的第三类编程题是字符串处理和模拟这类题看着简单但考的是细心。我遇到的一道题是“给定一个车辆VIN码的校验规则判断一组VIN码是否合法”。VIN码由17位字符组成包含数字和大写字母去掉I、O、Q第9位是校验位校验规则是每位字符对应一个权重加权求和后对11取模再映射成校验字符。如果你之前没有接触过VIN码校验第一次做会有点懵但它的本质就是“按规则模拟”。关键在于把映射表和权重表写对然后再做逐字符校验。这种题的难点不在算法而在于边界情况字符串长度不足17位、包含非法字符、第9位是数字但校验位需要映射成0-9或X等都需要你单独处理。我的建议是把校验逻辑写成独立的函数在main里只处理输入输出。具体来说先定义一个std::unordered_mapchar, int保存字符到值的映射再定义权重数组{8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2}注意第9位的权重在计算总和时按0处理然后拿加权和模11得到余数再根据余数映射到校验字符0-9对应0-910对应X。写完核心逻辑后一定要在本地用几个合法/非法的VIN码自测比如用真实车辆VIN的结构去构造一个能满足校验的输入确保不是“看着对但跑起来错”。这道题我在笔试时浪费了不少时间在调试上就是因为一开始没有考虑到校验位可能是X的情况。写模拟类题目时先列全边界条件再编码是最好的习惯。4. 专业课考点速查操作系统、网络与数据库的高频题4.1 操作系统进程、线程与内存管理的经典考法蔚来笔试的操作系统题难度和学校期末考试差不多但有一个特点是它比较偏向Linux环境。比如有一道题问“父进程调用fork()后子进程继承父进程的哪些资源”选项里包含文件描述符、内存空间副本、PID、信号处理函数等。正确答案是子进程获得父进程数据空间、堆、栈的副本并继承文件描述符但PID不同信号处理函数也会被重置为默认。如果你对Linux下fork()的语义不熟很容易在“内存空间副本”和“共享内存空间”之间混淆。另一个高频考点是死锁产生的四个必要条件互斥、持有并等待、不可剥夺、循环等待。我记得笔试题里给了一个场景问“哪个条件被破坏后系统不会死锁”答案是“循环等待”可以在设计阶段通过资源有序分配法破坏。这种题属于记忆性考点只要背熟就能拿分不建议丢分。内存管理方面题目会问虚拟内存的好处、页面置换算法中的LRU和FIFO等。蔚来笔试比较爱问LRU的实现复杂度因为LRU在K-V缓存、车机导航缓存等场景中确实常用到。如果你能写出来“哈希表双向链表”的结构或者至少说出来“哈希表查找O(1)、链表维护访问顺序”这道题基本就稳了。4.2 计算机网络与数据库基础不牢这一块会丢大分网络部分的选择题蔚来喜欢考TCP和UDP的区别、TCP三次握手的状态变化、HTTP与HTTPS的差别。其中有一道题让我印象很深“TCP连接建立过程中第二次握手时服务器发送的报文段中SYN和ACK标志位的值分别是多少”答案是SYN1ACK1。如果你只是背过“三次握手”但没有深入到标志位的细节这道题可能会卡住。还有就是子网划分的题给定一个IP如192.168.10.67/26问它所在的子网地址和广播地址。这道题的做法是把IP的最后一段换算成二进制67对应01000011/26表示前26位是网络位最后6位是主机位所以主机位全0时就是子网地址即192.168.10.64主机位全1时是广播地址即192.168.10.127。这种题一定要自己动手算一遍光看答案是记不住的。数据库部分重点是SQL语法和索引。蔚来笔试考了一条比较基础的SQL“从一个订单表中查询每个用户的最新一笔订单”可以用窗口函数ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY create_time DESC)外层再套一个子查询过滤rn1。如果你不了解窗口函数这道题可能就只能用“先group by取最大时间再join原表”的笨办法也能做但容易出错。至于索引失效的场景比如“对索引列使用了函数操作就不走索引”这是比较经典的知识点笔试中出现频率很高。4.3 场景题里的隐藏考点从智能汽车业务倒推基础知识蔚来笔试中的场景题其实是在变相考察你的基础是否扎实。比如我遇到的“智能座舱多屏交互下多个进程如何共享摄像头数据”本质上考的是进程间通信方式具体可以选“共享内存”或“内存映射文件”。这类题目的特征是给一个看似与八股文无关的业务场景逼你用操作系统、网络、数据结构的知识去填充。如果你平时习惯死记硬背知识点而不关心应用场景遇到这种题会感觉很抓瞎。应对方法其实很简单在复习每个知识点时多问自己一句“这个技术在实际项目中用来解决什么问题”。比如mmap在Linux里经常用于共享内存和高效文件读写我就在一个车载日志采集项目里用过它让多个进程直接读写同一块内存区域避免了频繁IPC拷贝带来的性能问题。有了这种项目经验回答“摄像头数据共享”这类场景题就会很自然。5. 备考策略与时间规划一个月高效冲刺的心路历程5.1 刷题策略哪些题必刷、哪些题可以战略性放弃我大概是在笔试前一个月开始集中备战秋招笔试。方向很明确一天保证3道左右的中等难度编程题一周一次模拟笔试。如果你现在还在“每日一题”的阶段我建议直接调整为“多题计时”的模式因为真正的大厂笔试是在时间压力下进行的只在LeetCode上慢慢刷题是不够的。刷题优先顺序我个人的体会是动态规划背包、股票、House Robber、图论Dijkstra、BFS/DFS连通性、双指针/滑动窗口、字符串模拟。这四个板块是我在蔚来笔试里实际遇到的也是大多数大厂笔试的常客。至于一些特别冷门的算法如后缀数组、KMP的变体如果时间不够可以先放一放性价比不高。另外一定要做“按公司刷题”的针对性训练。市面上有一些资源专门整理了蔚来和其他车企的笔试真题回忆版虽然不保证原题重现但能帮你摸清题型偏好。我的感受是蔚来的出题风格和互联网大厂不太一样它更看重“用基础算法解决实际业务问题”的能力所以刷题时不要只背模板要想想这个算法可以迁移到哪些场景。5.2 赛码网笔试环境与本地编码的差异赛码网和牛客网的一个不同点是赛码网的在线编辑器对代码缩进和编译报错的提示没有那么友好如果你平时依赖IDE的自动补全、代码提示、CLion/IDEA那样的调试工具在赛码网上会很不习惯。我笔试前就在赛码网上做了两次模拟题发现它有几个“反人类”的地方输入输出必须按题目要求的格式严格处理多输出一个空格或换行都可能导致答案错误。本地IDE编译通过不代表在线能通过特别是C代码里如果用了bits/stdc.h赛码网的编译器是支持的但有些环境不支持所以最好提前确认。在线编辑器没有自动保存页面超时可能导致代码丢失。我有个朋友就遇到过这个问题写了一半的代码因为断网不见了。建议分层先在我本地的VSCode里把代码调好再粘贴到赛码网提交不要把平台当成IDE用。赛码网支持自定义测试用例笔试开始后可以先在本地跑几组自测数据再提交。这与在牛客网上做题的习惯相似但需要注意赛码网的“提交”按钮有时会反应迟钝不要重复点击否则可能提交两次导致判题异常。5.3 编程语言选型用你最稳的语言不要冒险蔚来笔试支持C、Java、Python但不要因为“听说大厂更认可C”就在笔试现场临时换语言。我当时用的C原因是我在平时刷题时对STL的熟练度比较高能快速写出容器操作和排序。如果你平时用Python刷题那你就用Python笔试考察的是逻辑与代码能力而不是语言本身。但有一点要注意如果你用Java赛码网默认的Main类结构一定要写对。有些同学在本地用IDEA跑惯了public class Test到赛码网上忘记改成public class Main会导致编译不通过这类错误太可惜了。C选手也要注意有些题目对内存有要求二维数组如果开得太大可能栈溢出建议用vectorvectorint代替数组或者把大数组定义为全局/静态变量。5.4 时间分配的实战记录我如何安排90分钟我参加的那场笔试时长90分钟题量是4道编程题10道选择题1道简答设计题。我的时间安排是这样的0-15分钟完成前8道选择题遇到不确定的先标注不纠结直接选最可能的答案。15-25分钟把剩余选择题和简答题过一遍简答题只写大框架不写细节防止后面没时间。25-70分钟4道编程题。按先易后难的顺序先做字符串模拟和双指针题争取20分钟内再做动态规划题15分钟最后做Dijkstra题20分钟如果卡住就退而求其次写暴力解法。70-85分钟回头检查选择题把标注的题再推敲一遍同时补全简答题的细节。85-90分钟检查编程题的输入输出格式并提交所有代码。这个时间规划的缺点是前25分钟其实非常紧张如果选择题里突然出现一两道需要计算的子网题时间很容易超。所以我的建议是选择题不要超过20分钟实在不会就蒙一个不要恋战。编程题占分最大把时间留给编程题永远是正确的策略。6. 常见问题与笔试避坑心得6.1 平台与环境赛码网的隐藏坑点问题现象解决方案编辑器无自动补全写代码速度明显变慢本地IDE调试好再粘贴进提交框输出格式严格多一个空格被判错提交前用题目给的样例逐字对比页面超时丢代码长时间不操作代码丢失每写一题就手动复制一份到本地备份提交按钮无反馈反复点击导致重复提交点击后等3秒确认页面跳转再操作这些看起来都是小事但在笔试现场每一个小问题都可能打乱你的节奏。我这次的教训是提前一天到赛码网熟悉环境把基本的输入输出模板先写一次比如读取不定长的整数列表、读取一行字符串再split等等。环境熟悉了正式开考时才能把精力全部放在题目上。6.2 编程题本地通过但提交0分的排查思路如果你在笔试中遇到“本地跑得好好的提交却0分或答案错误”先不要慌按下面的顺序排查检查是否有多余的输出。比如本地调试用的cout debug: x endl;忘记注释这是最常见的翻车原因。检查输入读取是否完整尤其是循环读取多组测试用例时是否漏了while(cin n)。检查数组越界问题。本地编译器有时不报错但在线判题时会触发RE运行错误。检查特殊情况比如n0、空字符串、超大数你的代码是否能正确处理。我在做VIN码校验那道题时就因为在输入读取时没有处理末尾的\r换行符导致字符串长度判断出错浪费了五分钟才定位到问题。这种问题在Windows本地写代码、Linux环境判题时特别容易出现所以在字符串处理时建议先做一次trim或先按行读取再处理。6.3 备考时间不充裕时的取舍策略如果你现在离笔试只剩一周甚至更少时间不要试图把所有的知识点都学一遍那是做不到的。我建议按这个优先级来突破第一优先把LeetCode中“动态规划、双指针、图论基础”三个标签下hot 100的题目过一遍确保中等难度的题能在15分钟内写出可提交的代码。第二优先把操作系统中的进程管理、内存管理、死锁知识过一遍把计算机网络中的TCP/UDP、HTTP/HTTPS、子网划分过一遍。第三优先数据库的SQL基础、索引、事务ACID。如果还有时间再看一下进程间通信管道、消息队列、共享内存、信号量等这部分场景题很喜欢出。如果时间实在不够甚至可以放弃冷门的高级算法比如线段树、网络流这些。蔚来笔试里出现高级数据结构的概率不高把基础题做稳比研究偏题怪题更有价值。我当时就是用这个策略压中了VIN码模拟题和充电桩Dijkstra题这两道题都属于“中等偏上且练过就能做”的类型。6.4 笔试题之外整体秋招节奏与心态调整最后聊聊笔试之外的体会。蔚来汽车的秋招流程一般包括网申、笔试、技术一面、技术二面、HR面笔试是筛选的重要关卡但也不是全部。我个人的观察是笔试成绩只要达到一个合格线后续面试更看重的是沟通能力、项目经历和技术深度。所以如果笔试有几道题没有AC也不要太沮丧把能拿的分拿到重点是自己展示出清晰的解题思路。心态方面秋招本来就是一场持久战线上笔试环境又容易因为网络、平台等因素出问题建议在正式笔试前自己模拟1到2次找找考试节奏。我当时就设置了90分钟倒计时在牛客网上做了一套模拟题全程不暂停、不查资料完全模拟真实笔试这对稳定心态帮助很大。笔试过程中如果遇到读不懂的题目先跳过去做完其他题再回来不要在一道题上耗太久。根据我个人经验蔚来的笔试风格更偏向“场景基础”没有太多故意刁难人的部分。只要你把基础算法和专业课核心知识吃透大概率能顺利过关。希望大家都能拿到心仪的面试机会。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门