尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

理想汽车软件岗笔试复盘:从算法到车载系统的全面攻略

理想汽车软件岗笔试复盘:从算法到车载系统的全面攻略 1. 笔试全流程回顾从投递到开考的关键节点1.1 投递时间线与笔试通知节奏先说背景我是2024年8月底投的简历走的是秋招正式批。理想汽车今年的秋招启动得不算晚8月中旬官网就放出了大量软件岗的岗位包括智能座舱、自动驾驶算法、整车操作系统、云计算平台等等。我投的是智能座舱方向的应用软件开发岗和我的技术栈比较匹配。投完简历大概过了一周多9月初收到了笔试通知。这里有个细节值得注意理想的笔试通知不是统一发的而是分批放出的和你投递的时间、岗位所在部门都有关系。我身边有同学8月底投的算法岗9月2号就收到了笔试邮件我投的软件岗9月5号才收到。所以如果你投完简历一两周没消息不用太焦虑很可能只是批次靠后。笔试采用的是第三方在线测评平台邮件里会给出考试链接、考试时长和注意事项。考试时长我记得是2小时但这2小时不是整个流程的全部——登录进去之后还有人脸识别、环境检测等一系列操作。我的建议是提前15到20分钟进入系统把环境和设备调试好别卡着开考时间才登录否则一旦人脸识别不通过或者摄像头有问题会非常慌。1.2 作答平台与监考方式在线笔试平台是现在秋招主流的牛客或赛码理想今年用的是赛码系统。这个平台有几个特点需要提前适应第一代码题不支持本地IDE自动补全只有简易的在线编辑器代码补全、语法高亮都很弱第二不限编程语言但切换语言需要手动选择Java、C、Python、Go都支持第三代码题提交后会有一个编译运行的过程但不会给通过率反馈只显示编译是否通过和样例是否通过这一点和LeetCode的实时判题体验差别很大。监考方面整个答题过程会开启摄像头并且会不定期抓拍。第二机位倒是没有强制要求但系统会监控屏幕切换行为如果你切出浏览器去百度搜索会被记录异常行为。有些同学习惯开个小窗查API文档这个习惯在笔试时一定要忍住宁可代码写得朴素一点也别冒被判定作弊的风险。另外提醒一句赛码平台的代码编辑器对C的模板代码生成比较友好如果你用Python要注意核心代码模式的处理方式。我这次全程用的C因为题目涉及比较多的数据结构操作C的STL在实现上更顺手。如果你主语言是Java或者Python建议提前一周在牛客、赛码的模拟环境里练一练适应在线编辑器的操作手感。1.3 题型分布与分值比例这次笔试的题型分为三大块模块题量大致分值限时单选/多选专业基础30题约40分40分钟简答/情景题2题约20分20分钟算法编程题2题约40分60分钟从分值分布能看出来算法题是绝对的决定性因素两道题各占20分一题之差可能就是过与不过的分水岭。我的习惯是做题顺序先扫一遍全部题目然后按“算法题 → 简答题 → 选择题”的顺序做。为什么这么排因为算法题需要完整的大块时间和清醒的脑子放到后面做容易因为前面消耗太大导致思路卡壳。选择题虽然量大但很多是瞬时记忆型问题即使后面时间紧凭经验和直觉也能快速作答。有一点需要特别提醒多选题是倒扣分还是不得分答题前一定看清规则。这次笔试平台的多选题少选不得分、多选倒扣分所以拿不准的选项宁可不选。我有个同学就是因为多选题拿不准全选了最后倒扣了不少分。2. 算法机考部分考察点分析、解题思路与复杂度取舍2.1 第一道编程题字符串处理与双指针的变体今年第一道题核心场景是处理一批输入数据做某种规则匹配大致是给出一组字符串数组要求统计符合特定条件的组合数量。题目本身不算难属于LeetCode Medium偏下的难度但和平时刷题有个区别输入数据规模给得非常大字符串长度可达10的5次方量级这意味着如果你写一个O(n^2)的暴力解法必然超时。我看到这题的第一反应是双指针 哈希表。因为字符串匹配类的题目如果涉及判断某个区间内字符的出现次数是否符合条件滑动窗口基本是标准解。实际操作时需要注意的点有三个一是哈希表统计字符频率时要注意重置开销不要每个窗口都重新构造一遍map否则复杂度会退化二是双指针的右移条件要理清楚最好是保持一个计数变量在移动左指针时同步更新三是边界条件——空字符串、全相同字符等情况要提前测一遍。这里说一下我对这题的时间分配读题30秒确定思路2分钟写代码10分钟调试3分钟。整体比较顺利。但我的一个教训是写完代码后不要急着提交先在草稿纸上手动跑两个极端用例一个是全部满足条件的大数据量用例一个是只有一个元素的最小用例。这一步能帮你避免很多低级错误。2.2 第二道编程题动态规划与状态压缩的进阶考查第二题明显比第一题高一个档次。题目背景是给出一组任务每个任务有开始时间、结束时间和收益要求选择一组互不重叠的任务使总收益最大。这其实就是带权区间调度问题经典解法是动态规划先用结束时间排序然后二分查找不冲突的前驱任务。但这道题做了一个变形任务数量到达了10的5次方级别而且时间范围是离散的、可以很大。直接开一维DP数组按时间轴递推会内存爆炸必须改用状态压缩或者按区间端点离散化。我当时用的是“排序 二分 DP数组”的方案把区间端点收集起来排序去重然后用map离散化映射到索引再做区间最值查询。虽然写起来啰嗦但能保证O(n log n)的复杂度实测跑大数据集没有问题。这题我要特别分享一个踩坑经历。我一开始想用贪心——按结束时间排序后逐个加入认为只要每次选择不冲突且收益最大的任务就行。这个思路对“任务权重相同”的情况有效但在加权场景下会漏掉最优解。我浪费了大概8分钟在贪心方案上写了一半才发现合不上果断删掉重来。这里也给大家一个建议如果一道题你觉得可以用贪心先花30秒想一个反例。想不出反例再动手写如果第一反应想到反例立刻切DP。2.3 做题顺序与时间管理策略上面说过我建议先做算法题。这里再补充一个更细的策略拿到题目不要立刻动手先把两道题都看一遍。我这次就遇到一个典型场景——第一题看着很长第二题看着很短结果第二题反而更难。如果我先做第一题耗了20多分钟再去看第二题心态和体力都会受影响。做完题目后如果还剩时间我建议回头检查选择题尤其是那些你标了“不确定”的题目。在线笔试平台一般有标记功能做选择时遇到拿不准的题目顺手标记等算法题搞定后再回来集中思考。我这次回去补出了3道选择题都改对了这几分很可能就是面试通知的敲门砖。3. 专业课客观题部分操作系统、网络、数据库与Linux3.1 操作系统进程、内存、死锁是绝对主力客观题30题里操作系统大概占了8到10题是我印象中最重的模块。考察的知识点非常集中核心就是三块进程与线程、内存管理、死锁。进程与线程的考察重点是并发与并行的区别、线程共享哪些资源、进程间通信的几种方式及其适用场景。有一道题是问“多线程环境下哪些操作需要加锁”涉及到共享全局变量、静态局部变量、堆上分配的对象等场景。这种题其实不难关键在于理解线程的栈空间是私有的而堆空间、全局区是共享的。内存管理部分考了分页与分段的区别、虚拟内存的作用、缺页中断的过程。有一道题问“虚拟内存的主要作用”选项里有“扩展物理内存容量”“提高内存访问速度”“隔离进程地址空间”“简化内存管理”。我选了“隔离进程地址空间”和“简化内存管理”结果因为是多选题少选了一个选项被扣了分。这里也提醒大家操作系统的多选题往往不会只给你一个明显正确的选项要从机制的本质出发理解每个选项的合理性。死锁部分考了死锁的四个必要条件以及银行家算法的基本思想。这类题属于典型的记忆型题目但要注意它不会直接问你四个条件是哪些而是给你一个具体场景让你判断当前系统是否处于死锁状态。我的建议是把“互斥”“持有并等待”“不可剥夺”“循环等待”四个条件理解成一段逻辑链条做题时按顺序验证即可。3.2 计算机网络TCP、HTTP、IP的考察深度网络部分大概考了5到6题集中在传输层和应用层。TCP题是重点中的重点考察了三次握手的状态迁移、四次挥手时的TIME_WAIT状态、滑动窗口与拥塞控制的关系。有一道题很有意思问“TCP在四次挥手中主动关闭方进入TIME_WAIT状态的主要目的是什么”。正确答案是“确保最后一个ACK报文能够到达以及让旧报文在网络中消失”。这个知识点如果只是背过可能只能选出第一个目的后一个隐藏考量是很多人不知道的。TIME_WAIT持续的时间是2MSL这个数字也偶尔会考建议记牢。HTTP部分考了HTTP/1.1和HTTP/2的区别以及HTTPS的握手过程。问的是“HTTP/2相比HTTP/1.1的主要改进有哪些”选项包括多路复用、头部压缩、二进制分帧、服务端推送。这个属于记忆型题目我全部选上了没问题。IP部分考了一道IPv4地址分类和子网划分的题。题目给出一个IP地址和子网掩码让计算网络号和可用主机数。这种题动手算一下就行关键是别在计算时走神笔算和心算结合先在草稿纸上写出二进制再转换比盯着屏幕心算安全得多。3.3 数据库与Linux命令容易忽视但高频出现数据库大概考了3到4题主要考察索引相关知识。有一道题问“覆盖索引的作用”我印象很深因为它是从“避免了回表查询”这个角度来考的。如果大家只背了索引的基本概念可能不太清楚回表是什么但只要理解了InnoDB的主键索引和二级索引结构这个题就不难。另外还考了事务的隔离级别问的是“脏读、不可重复读、幻读分别在哪一隔离级别下被解决”。这个题属于标准的八股文记住下面的表就能搞定隔离级别脏读不可重复读幻读读未提交可能可能可能读已提交不会可能可能可重复读不会不会可能InnoDB下不会串行化不会不会不会Linux命令考了2题都不难一个是问哪些命令可以查看端口占用情况答案是lsof和netstat另一个是问查看磁盘空间用哪个命令答案是df。Linux命令虽然只占一点点分值但复习成本极低建议把高频命令统一过一遍。我整理过一个清单常考的就这些top、ps、netstat、lsof、df、du、grep、awk、sed、chmod、tar。说实话如果不是笔试我日常也天天在用这些属于软件岗的基本功。4. 汽车软件特色考察整车智能化背后的岗位要求4.1 为什么软件岗笔试会掺入汽车业务题这一点我非常想单独拿出来聊。和互联网大厂的笔试不同理想汽车的笔试明显带有汽车行业属性简答题直接结合了整车业务场景。今年简答题一共2道一道是情景设计题一道是开放论述题。情景设计题的大意是你在开发智能座舱的音乐应用用户反馈在车辆行驶过程中切歌操作偶尔会出现明显的卡顿。请给出你的排查思路。这题其实不是考具体代码而是考察你怎么系统性地定位问题。我当时的回答分成了五步第一步确认问题复现路径是特定歌曲格式才出现还是所有歌曲都会卡顿是在高速行驶时更明显还是静止时也有第二步排查播放链路从应用层请求到音频解码、缓冲、播放器输出每一步打点统计耗时定位耗时集中在哪一段。第三步分析系统资源状态车机当时的CPU占用率、内存占用、IO负载、网络状态看看是不是车辆其他系统抢占资源导致播放线程饥饿。第四步分析缓存策略切歌时是否重新拉取网络数据是否没有预加载缓存淘汰策略是否合理第五步针对性地做优化预加载下一首歌、调整解码线程优先级、优化缓存策略等。这道题答起来非常有成就感因为它不是死板的知识点而是把操作系统、网络、应用开发的知识串起来放在一个真实场景里。坦白说这种题没有标准答案考官看的是思路是否严谨、是否能站在整车系统的高度思考问题。第二道开放论述题是谈谈你对智能汽车软件架构发展趋势的理解。这题非常开放可以从SOA面向服务的架构、多域融合、车路云协同、AI大模型上车的角度去回答。我当时从软件定义汽车与SOA架构切入讲了传统面向信号的软件开发模式和面向服务的开发模式的核心差异然后延伸了一下智能座舱和智能驾驶对算力和通信的新需求。4.2 智能座舱与车载OS相关方向为什么车企笔试会考察Android/Linux系统知识因为智能座舱本质上就是一台车载电脑目前主流方案是基于Android Automotive或Linux/QNX构建的。我自己是Android开发背景对这块比较熟。笔试里虽然没有直接考Android四大组件之类的内容但在简答题里已经体现了对系统资源的理解和排查能力的要求。如果要为这类笔试做准备我建议关注下面几个点Android Automotive OS与普通Android的区别多了Vehicle HAL层由整车提供车辆信号的接口比如车速、电量、车门状态等。CAN总线与信号通信虽然软件开发可能不会直接和CAN打交道但要知道整车电子电气架构中存在这样的总线应用层拿到的数据很多是从CAN信号转换而来。不同安全等级的任务隔离车机系统可能需要同时运行仪表和娱乐信息两者对安全性和实时性的要求不同所以会有hypervisor、多域隔离等概念。这些内容说实话如果之前没有汽车行业背景很容易忽略。但网申时看到“理想汽车软件岗”就应该想到它考察的一定不是单纯的互联网后端而是车载场景下的软件工程能力。按这个方向去准备笔试会从容很多。4.3 嵌入式与软硬结合C内存模型、调试技能从编程题的难度和选择题的倾向来看理想对C的重视程度高于我预期。算法题我直接用STL写没问题但选择题里考了一道关于C智能指针的题问的是shared_ptr和unique_ptr在所有权语义上的区别以及weak_ptr的作用。这类题目在互联网公司笔试中也常见但在车企背景下多了一层含义车机系统里大量使用C进行开发内存安全直接关系到系统稳定性。车内一个应用内存泄漏可能不会造成严重安全事故但如果是底层系统服务出现内存问题可能影响整车功能的正常运行。所以笔试考察C内存模型、智能指针、RAII机制不是单纯考语言特性而是在筛选具备“写出长期稳定运行代码”能力的候选人。还有一个让我意外的地方选择题里有一道关于gdb调试命令的题问的是断点设置用什么命令、查看调用栈用什么命令。这个在互联网后端笔试里都不多见但在嵌入式/车载开发中非常重要。我当时看到题还挺开心因为日常写代码时就经常用gdb调试。这里也提醒大家复习的时候不要只盯着算法和八股gdb、core dump、崩溃日志分析这些调试技能也值得花时间过一遍。5. 复盘与经验从笔试反推车企软件岗的筛选逻辑5.1 笔试当场的心态与节奏把控考完复盘我最大的感受是这场笔试考察的不只是知识储备更是压力下的分配能力。2小时内完成30道选择题、2道简答、2道算法平均到每道题的时间都很紧张。如果按部就班从头做到尾很可能在选择题上消耗过多时间导致算法题只剩30分钟。我的做法是先花2分钟整体阅读所有题目从算法题开始做。这个方法我推荐给所有投递软件岗的同学不管是什么公司。因为算法题需要的认知资源最高趁头脑清醒时解决最划算。选择题就算后面时间不够靠快速直觉作答也能拿到60%以上的正确率。考场上还有一个经验是遇到卡壳超过5分钟的题果断标记并跳过。这次我在第二道算法题开头贪心方案上浪费了大约8分钟要不是及时回头可能整道题都来不及写。在线笔试本质上是在有限时间内拿到尽可能多的分而不是每道题都要完美解出。学会止损是一道隐性考题。5.2 复盘时我列出的知识点清单笔试结束当天晚上趁记忆清晰我把考到的知识点全部列了出来并且对照标出了我的薄弱项数据结构与算法滑动窗口、动态规划、二分答案、区间调度薄弱需加练操作系统进程线程模型、虚拟内存、死锁、调度算法基础扎实计算机网络TCP连接管理、HTTP协议演进、子网划分基础扎实数据库索引结构、事务隔离级别、SQL执行计划隔离级别需补充理解Linux常用命令、gdb调试OKC智能指针、内存管理、RAII、移动语义需要加强这部分与其说这个清单是给笔试用的不如说是给后续面试准备的。因为笔试暴露的薄弱点大概率会成为之后面试官追问的方向。比如我动态规划不扎实那面试前就专门刷了30多道区间DP和背包类题目。后来在面试中果然又被问到了相关的算法题因为提前准备过回答起来就顺畅很多。大家一定要养成考后复盘的惯例考完就算了是最亏的因为秋招的笔试是持续滚动发生的每一场都非常适合拿来校准自己的知识短板。5.3 给后续投递者的准备建议如果你明年准备投理想或者同类新势力车企的软件岗我有几条实用的建议第一算法题按LeetCode Medium偏难准备重点放在双指针、滑动窗口、动态规划尤其是区间型、图的最短路、排序的变体。这些是车企软件岗笔试的高频题型。不要把精力花在太冷门的题目上比如线段树、后缀数组除非你准备的是算法岗。第二计算机基础复习不能偏科。操作系统、网络、数据库、Linux都要过一遍。车企笔试的客观题覆盖面比互联网更广因为它们想看到的是一个全面的工程师而不只是一个刷题机器。第三预留时间看看汽车软件行业的知识。至少要知道智能座舱是什么、自动驾驶的感知-决策-执行链路有哪些环节、SOA架构在整车上的应用。不需要很深入但简答题一旦考到不能一句都答不出来。我当时在牛客上整理了不少智能座舱的行业资料包括车机系统架构、Android Automotive的层次关系、车企软件开发流程V模型笔试时确实用上了。第四提前在牛客、赛码的模拟系统里做一套题感受一下在线编辑器的手感。这个我前面提过但值得再强调一次因为很多人第一次用完赛码编辑器都会在缩进和括号匹配上浪费额外时间。最后把自己的项目经历好好梳理一遍。笔试只是第一步面试时项目经验才是重头戏。笔试考察的是“你会不会”面试考察的是“你做过什么、怎么做、为什么这么做”。如果能提前把简历上的项目从一个完整的技术链路角度整理成故事线会比临时抱佛脚从容得多。
返回列表