news 2026/9/1 22:17:06

360春招笔试复盘:从字符串模拟到贪心二分的工程化考查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
360春招笔试复盘:从字符串模拟到贪心二分的工程化考查

1. 先说说360笔试的题量布局和时间分配

2023年春招笔试(第二批)我实际参加下来,整体感觉和互联网大厂常见的"两道编程题搞定一场笔试"的路子不太一样。360的笔试系统里,编程题占大头但不是全部,前面还有一块在线评测的选择/填空类题目,考查范围涵盖了操作系统、网络、数据结构这些计算机基础,后面才是2到3道完整的编程题。这个结构意味着你没法靠"背题"应付,基础不扎实的人在第一阶段就会开始掉血。

从题目类型来看,第二轮批次的题比第一批更偏向"把算法落到工程场景"的考法。第一批里有一些纯模板题,比如直接给一个数组让你排序、让你写个链表反转,属于热身性质;第二批则明显加了业务背景的包装,题干会故意写得很长,铺陈一个产品场景,然后让你抽象出数学模型。这和360的安全、搜索、IoT硬件这些业务方向是挂钩的——它在考察你"能不能从混乱的需求里提取出清晰的算法问题"。

时间上,整套题给的时间大约是90分钟,选择题和编程题共用。我的建议很直白:前面基础题控制在25分钟以内,不要恋战。基础题分值虽然单题不高,但数量多、覆盖面广,做太快容易粗心,做太慢会挤压后面编程题的时间。编程题里,最简单的第一题要在15分钟内搞定,第二题控制在25到30分钟,最后一道如果思路卡了超过15分钟,别死磕,先把能过的样例拿到手。

这里有一个很多人容易忽略的点:360的笔试系统用的是类LeetCode的提交方式,但它的本地IDE默认不会帮你做语法检查,编译报错直接显示一大段英文日志,心态不好的当场就慌了。我建议在进笔试之前,先熟悉一下你常用语言在命令行里编译运行的报错格式,至少能快速定位是缺头文件、名称写错还是类型不匹配。

再说分值结构。第二批的编程题总分在整张卷子里占比大约60%,剩下40%分散在基础题里,这意味着哪怕编程题全都AC,基础题拿个两三成,总分依然不保险。反过来,如果编程题只写出一道半,基础题好好做,也能稳过简历关。所以我的策略一直是:编程题保证前两道的高正确率,第三道当作冲刺题;基础题不允许空题,不会的也要按常识排除掉明显错误选项。

2. 字符串与模拟题:这批题目里最不能丢的分

360笔试编程题第一题,几乎所有批次都喜欢出字符串处理或者状态模拟类题目,2023年第二批也不例外。这类题的特点是:算法思想不深,但逻辑分支很多,题干里会塞进一堆限制条件,考察的是你"稳不稳"。

我印象里有一道题是给出一段经过规则处理的字符串,要求还原出原始内容。题目给的规则不算复杂,但存在嵌套情况,比如某个标记可以嵌套在另一段标记内部,而且处理顺序是从左到右。第一次读题时很容易主观认为用正则替换就行,仔细想才发现正则处理嵌套是行不通的。

这类题的正解是用栈来维护嵌套层级。具体思路是:遍历字符串,遇到左标记时把当前状态压栈,进入新的层级;遇到右标记时弹出栈顶,恢复上一层状态。这里有一个关键细节:弹出的时机不是遇到右标记的当下,而是要在把当前层级的缓冲区处理完之后再弹栈,否则嵌套内容的顺序会乱掉。

我当时写代码时踩了一个很典型的坑:字符串拼接的性能。第一版实现里,我在每层用一个String对象做累加,测试数据量小的时候看不出问题,但数据量一旦到10万级别,字符串拼接的时间复杂度会退化到O(n²),直接超时。换成StringBuilder或者用数组模拟字符缓冲区之后,时间瞬间降到个位数毫秒。

模拟题的另一个坑在边界条件。题目里往往会出现"空串""只有标记没有内容""标记嵌套深度为1"这类边缘输入,很多人的代码在常规用例上全过,一遇到空串就直接抛异常。我写完后会特意构造几个极端的输入跑一遍,比如全空字符串、只有一对空标记、标记内部只有空格。这些小习惯,考场上是能实实在在救命的。

还有一点值得单独说:输出格式。360的判题系统对输出要求非常严格,多一个空格、少一个换行都会判错。字符串还原类的题,如果结果本身包含前后空格,直接Trim掉会导致答案错误。我通常的做法是,严格按照题目给的输出示例来检查,不确定时宁可不做额外处理,只做最保守的格式化。

3. 贪心和二分:春招笔试里的高频核心

第二批编程题的第二题,风格上明显比第一题"有算法含量",但也没有直接出动态规划这种重型题目,而是集中在贪心和二分这两个方向上。这其实反映了笔试出题的一个潜规则:校招笔试不是ACM,它不指望你45分钟手撕一个网络流,而是考察你在常见算法模型里能不能快速找到正确的切入路径。

贪心题在这一批里出现了一道让我印象很深的:一系列任务,每个任务有开始时间和结束时间,同一个资源只能同时处理一个任务,问最多能完成多少个任务。这个题目本质是经典的活动选择问题,解法是按结束时间排序,然后贪心地选择结束时间最早且与前一个已选任务不冲突的任务。

难点不在于排序本身,而在于题目套了一个"资源预热时间"的壳。每个任务结束之后,资源需要一段冷却时间才能处理下一个任务,冷却时间可能是固定的,也可能随任务不同而变化。如果是固定冷却时间,只需要在判断冲突时把"下一个任务的开始时间大于等于当前任务结束时间"改成"大于等于当前任务结束时间加冷却时间";如果冷却时间不固定,就需要对每个任务额外维护一个属性,排序时按"结束时间加自身冷却时间"来排。

二分题则更典型,几乎可以确定是"二分答案"类。题目大致是给一组工位和一组员工,要求分配员工到工位,希望最大化"所有工位里员工数量最多的那个值",但这里的特殊之处在于某些工位有容量上限,某些员工有位置依赖,求最小化最大负载。这类题的套路非常固定:判断函数里,用贪心或者模拟验证"如果最大负载限制为x,是否能分配完成",然后对x做二分查找。

写二分的时候,我推荐一个几乎不会出错的写法:左边界取可能的最小值,右边界取一个绝对足够大的值,循环条件是"左边界小于右边界",每次取中值mid=left+(right-left)/2。判断函数返回"可行"时,把右边界收缩到mid;否则把左边界移到mid+1。最后循环结束时,左边界就是答案。有人在二分查找里纠结用mid还是mid+1,其实只要记住"可行就收右边,不可行就收左边"这个原则,就不会死循环。

贪心和二分结合起来还有一个隐藏考点:证明贪心策略的正确性。虽然笔试不要求写证明文本,但如果你在写代码之前想清楚了"为什么按结束时间排序是最优的",代码写起来会顺畅很多。想不清楚的时候,可以先写个暴力回溯跑小规模数据,和贪心结果对拍一下,确认无误再提交。我私底下刷题时经常这么做,考场虽然没时间写完整对拍,但这个习惯会逼着你想清楚边界条件。

4. 安全与系统向题目:结合360业务背景的考查方向

360的笔试比起其他互联网公司,有一个非常鲜明的特点:会出少量和安全、系统底层相关的题,哪怕是编程题,也偶尔会披着"日志分析""数据校验"的外衣。2023年第二批的编程题里,至少有一道题在题意上涉及了数据完整性校验,如果你完全没接触过校验和、哈希这类概念,读题就会卡住。

这道题的场景是:系统产生了一串日志记录,每条记录包含时间戳、级别、内容三部分,要求把满足特定条件的记录抽取出来并按时间排序输出。表面上是字符串处理加排序,排序的key是时间戳。但题目里埋了一个小陷阱:时间戳的单位是毫秒级,而且是字符串形式,直接用字典序排序在位数不一致时会出错。比如"20230210120001"和"2023021012001",前者是13位,后者是12位,字典序排序会把后者排到前面,但实际时间顺序应该是前者靠前。

正确做法是先把时间戳字符串解析成整数或者标准时间对象,再排序。这里我推荐转成整数,因为标准时间对象的解析在部分语言里会牵扯时区问题,而纯数字解析是最稳妥的。解析过程里要注意前导零,时间戳虽然是数字,但可能以0开头,转成int的时候不要丢掉前导零——虽然排序用int没问题,但输出时如果需要原样输出,就得保留原始字符串。

另一道和系统底层沾边的题,涉及二进制位的操作。题目给出一组分片数据和一个校验值,要求判断哪些分片损坏了。实际解法是把每个分片转成一个整数,用异或运算逐片累积,最后和校验值比较。异或在这里的价值很直观:如果有某一片的数据被篡改,累积结果和校验值必然不一致,而且可以通过分组的方式定位到具体是哪一块。

这类题目背后其实映射了360业务里真实在用的技术:数据完整性校验、日志结构化、异常检测。你能感觉到出题人不是单纯想考你算法套路,而是希望招进来的工程师在写业务代码时,能对数据流有一种"敏感度"——知道数据从哪来、经过什么处理、到哪里去、中间可能发生什么异常。

给准备这类题的同学一个建议:不必专门去啃安全工程的书,但要把位运算、字符串编码、哈希这些基础概念理解透。笔试考的永远是概念和代码的映射,不会考"如何破解某个加密算法"。把异或、与、或、位移运算的优先级和结合性背清楚,考场上能少掉很多头发。

5. 边界条件、复杂度与代码风格的考场实战细节

编程题真正拉开差距的,往往不是算法思路本身,而是边界条件和复杂度控制。360的判题系统比较严格,有几个数据点专门卡边界,我身边不少人看到"通过率90%"后卡在那里半天,就是因为循环变量差了一个等号。

先说说复杂度估算的实战方法。笔试时你没法写代码验证超时不超时,只能在写之前心里算一笔账。常规的经验值是:1秒大概能跑10的8次方次简单操作,2秒能跑2到3倍的量。如果题目给的数据范围是n≤10^5,那么O(n²)的算法就是10^10次操作,必然超时;O(n log n)是大约1.7×10^6次,稳定没问题。所以拿到题先看数据范围,再定算法,这是铁律。

具体到实现层面,有几种常见的低效写法要警觉:字符串拼接(前面已经说过)、数组的无序删除、频繁的容器拷贝、在循环里重复计算长度属性。以数组删除为例,如果你在一个长度10^5的数组里反复删除元素,每次删除都是O(n)的,总体就是O(n²)。正确做法是改用标记数组延迟删除,或者用双指针从后往前覆盖。

边界条件的检查,我有一套固定的自查流程,每次提交前都会过一遍:

  • 数组或字符串为空的情况
  • 数组或字符串长度为1的情况
  • 所有元素相同时的表现
  • 数值达到题目给定上限时是否有溢出
  • 输入中有重复值时是否影响结果
  • 排序后第一个和最后一个元素的特殊逻辑

这套流程在实际笔试里帮我排查出过不少bug。比如有一道题需要求"子数组的最大平均值",我最初写的代码在数组长度恰好等于子数组长度时,循环条件少判断了一次,导致结果差了一截。后来养成了这个自查习惯,这类问题基本能在提交前发现。

另外,代码风格在笔试里看起来不重要,其实很影响发挥。变量命名要有意义,函数拆成小块,关键步骤写注释,不是为了给判题系统看,而是为了让自己在40分钟之后还能看懂自己的代码。我见过很多人在最后一道题上写了一大坨逻辑,结果跑出错误后找不到bug位置,就是因为变量名全是a、b、c,函数没有拆分,改一处崩三处。

我自己的习惯是:主函数只做输入解析和调用,每个算法步骤单独抽成一个函数,函数名直接说明它的用途,比如findMinLoad、canDistribute。这样即使最后时间不够,打个日志也能很快定位问题。还有一个考场小技巧:对输入规模较大的题目,别用Scanner逐行读,用缓冲流按块读入,速度能提升好几倍,数据量上百万时体验尤其明显。

6. 复盘这套题之后,我对春招笔试的几点观察

整套题做下来,我最大的感受是360笔试的出题风格在"工程化"和"基础扎实"之间找平衡。它不是那种纯考智力的题,也不是纯考背书的题,更像是一个信号:我们希望候选人既能快速建模,也能写出健壮的代码,还能对业务场景有基本认知。

观察之一,字符串和模拟题几乎必然出现在第一道编程题。这类题不区分竞赛选手和普通科班生,所有人处在同一起跑线,拼的就是细心和代码基本功。在准备春招时,不要只刷动态规划和图论,把字符串处理、栈、队列、哈希表的经典题型每种刷上20道,基础分就能稳稳抓住。

观察之二,贪心和二分是"性价比最高"的复习方向。它们不像动态规划那样需要大量思路训练,核心套路就那么多,掌握判断函数的写法、边界调整的逻辑,就能应对大多数变体。我建议把"二分答案"的通用模板背下来,现场会省下大量思考时间。这个模板在360笔试里反复出现,我甚至怀疑它的题库里有多道同源变形题。

观察之三,笔试前一定要做一次全真模拟。完整空出90分钟,打开牛客或者360自己的在线练习系统,按真实考试的时间压缩来做题,卡着表不延时不暂停。我在第一次模拟时发现,前25分钟做基础题时贪了几道,导致编程题时间紧张,第二题草草提交只过了一半测试用例。后来调整了时间分配,第二题压到25分钟内完成,正确率明显提升。考场上最大的敌人不是题目难,而是节奏乱。

还有一点对2023届的同学尤其适用:春招第二批的竞争比第一批更激烈,因为很多人的简历还在流程里,池子越滚越大。笔试分数成了筛人的硬指标,这就更要保证简单题不丢分、中档题多拿分、难题尽力写。我在这一轮笔试之后进入面试,面试官其实没有太抠笔试细节,更多是问项目经历和基础八股,但笔试通过是这一切的前提。

回顾整场笔试,我觉得最值得带走的不是哪道题的解法,而是一个认知:校招笔试不是竞赛,它在考核的是"在有限时间内稳定交付可用代码"的能力。三道编程题,你能完整做出两道,剩下那道写出一半的暴力解法并注释清楚思路,再加上基础题拿个中等偏上的分数,就已经赢过多数人了。剩下的,就让平时的积累去回答。

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

高校自助打印系统哪家稳定耐用:【印萌】硬核抗耗

导读:随着国内高等教育数字化建设持续推进,校园文印服务的数字化转型已经成为众多高校后勤升级的重点方向。根据行业调研数据显示,全国超七成本科院校已经部署或者计划部署高校自助打印系统,传统人工打印门店的运营模式&#xff0…

作者头像 李华
网站建设 2026/9/1 22:11:18

基于卡尔曼滤波的视频目标跟踪实战:运动小球轨迹平滑

简介:本资源是一套面向计算机视觉初学者与图像处理实践者的卡尔曼滤波视频跟踪教学实践包,聚焦运动小球这一典型目标,解决噪声干扰下目标位置估计不稳、轨迹跳变等实际跟踪难题,适用于课程设计、毕业设计及算法入门项目。压缩包共…

作者头像 李华
网站建设 2026/9/1 22:10:57

【OFDM通信】高速铁路场景下的OTFS与 OFDM性能对比Matlab仿真

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

作者头像 李华
网站建设 2026/9/1 22:09:59

【单片机毕设案例分享】基于单片机的环境参数采集与智能加湿报警系统设计 基于 STM32 或 51 单片机的语音声光双重提示加湿控制系统开发(024905)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于单片机,STM32单片机,51单片机,J…

作者头像 李华
网站建设 2026/9/1 22:09:58

open62541 V1.1编译与Server/Client联调实战笔记

简介:本资源是面向工业自动化与物联网领域C/C开发者的OPC UA开源实现open62541-V1.1完整分发包,专为构建跨平台、安全可靠的OPC UA服务器与客户端提供开箱即用支持。压缩包共11个文件,涵盖源码(.c/.h)、多平台二进制发…

作者头像 李华