尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

360校招笔试题深度解析:考点框架与答题套路

360校招笔试题深度解析:考点框架与答题套路 1. 一张校招笔试卷背后的考察逻辑先说个可能让很多人意外的事实校招笔试从来不是单纯考你会不会写代码它更像一张筛网在极短时间内帮公司过滤掉大量简历看着不错、实际动手和思维不过关的候选人。360公司在2014年做校招笔试时整个互联网行业正处于移动互联网爆发期安全领域又恰好因为各种病毒木马、漏洞攻击事件受到空前关注。所以那年的笔试卷有一个很典型的特点既考察通用计算机基础数据结构和算法、操作系统、网络又带着明显的安全业务色彩。这套卷子放在今天看很多题目依然有参考价值原因很简单——不管行业怎么变校招笔试的基础考点框架没有根本性变化。那几年我正好深度参与过几家公司校招笔试的命题和阅卷工作对这类卷子的逻辑比较熟。360这套卷子给我的整体印象是难度不算极端但覆盖面很广而且陷阱多。卷面大致分为四个板块单选题计算机基础为主约20道多选题概念辨析为主约10道编程题2道考察算法与代码能力综合题含安全场景分析和方案设计题约3道四个板块的分数占比大概在30%、20%、30%、20%左右。这个结构其实反映了公司筛选候选人的三个层次第一层是你有没有扎实的专业底子第二层是你能不能把知识转化成代码第三层是遇到实际问题时有没有系统性的解决思路。针对这套卷子我不打算把答案逐题贴出来——那样只能帮你应付一张卷子。我更想带你复盘的是每一类题背后的出题意图是什么正确且高效的解题路径是什么以及最容易被忽略的失分点在哪里。2. 选择题的高频考点与陷阱分析选择题占比最大也是第一次刷人的地方。很多同学觉得选择题是送分题其实恰恰相反校招选择题往往不考你知道什么而考你是否真的理解了你以为你知道的东西。2.1 数据结构与算法选择题别只看结论数据结构的选择题通常围绕数组、链表、栈、队列、二叉树、哈希表、图这些基础结构展开但360这类公司喜欢把题目包装成看似简单、实则容易踩坑的形式。举个例子考链表的时候经常会问在单链表中删除一个节点已知该节点的指针时间复杂度是多少如果只知道背结论的同学会直接选O(1)。但如果你认真思考过就会发现删除一个节点理论上只需要修改前驱节点的next指针可是单链表并没有直接访问前驱指针的能力。所以如果是已知头节点和待删除节点你只能先遍历找到前驱时间复杂度是O(n)如果你用把后继节点的值复制到当前节点再删除后继节点这个技巧才能做到O(1)。题目里有没有说明已知头节点答案完全不同。这种题目考察的根本不是记忆力而是你是否真正理解数据结构的物理存储和指针操作。我当时和负责出题的朋友聊过他们说这类题就是故意用来区分背过书和学懂了的两类候选人。另一位常见陷阱是栈和队列的组合结构题比如用两个栈实现一个队列入队和出队的平均时间复杂度是多少。入队操作就是压栈O(1)出队操作分两种情况——如果辅助栈非空直接弹栈O(1)如果辅助栈为空需要把主栈全部倒入辅助栈摊还下来依然是O(1)。但如果题目问的是最坏情况下单次出队的时间复杂度那就是O(n)。这里考的是摊还分析的思想不懂的话很容易栽。关于二叉树我从阅卷统计里发现一个规律只要考到二叉树的前序、中序、后序遍历的递归与非递归转换错误率就会明显上升。很多同学能写出递归版本但非递归版本一到中序就卡壳。非递归中序遍历需要借助栈来模拟递归的调用过程核心逻辑是一直往左走并把沿途节点入栈直到左子树为空然后弹出栈顶节点访问再转向右子树。这个过程中最容易犯的错是忘记在转向右子树时清空继续向左走的状态导致节点被重复访问或者访问顺序变乱。2.2 操作系统与内存管理选择题概念辨析要精确操作系统部分360特别喜欢考进程与线程的区别、死锁产生的四个必要条件、虚拟内存与页面置换算法、进程调度策略等内容。有一道我印象很深的题目多线程程序相比多进程程序以下描述错误的是哪个选项有A. 线程间切换开销更小B. 同一进程内线程共享地址空间C. 一个线程崩溃会导致整个进程退出D. 线程是资源分配的基本单位。正确答案是D因为资源分配的基本单位是进程而线程是CPU调度的基本单位。乍一看这题很简单但实际正确率不到一半。原因在于很多同学把线程间通信更方便推导成了线程是资源分配单位这两个概念不是一回事。线程确实共享进程的资源但资源的所有权归属进程。另一个高频点是页面置换算法。LRU、FIFO、Clock算法之间的区别几乎每年必考。我建议你做题时不要只看置换结果一定要把缺页中断次数和缺页率计算完整。比如在一个3帧物理内存中访问序列为7、0、1、2、0、3、0、4、2、3、0、3、2、1、2、0、1、7、0、1用FIFO算法会产生多少次缺页中断这个计算过程很考验耐心但阅卷时最看重的是你有没有写清楚步骤而不是只给一个数字。我在实际批改中发现很多同学在操作系统选择题上失分不是因为知识面不够而是因为选项之间的细微差别没有抠清楚比如进程同步与进程互斥、临界资源与临界区。这些概念相差一个字含义完全不同。备考的时候强烈建议把这类成对的概念专门整理出来对比记忆效果远好于刷十套题。2.3 计算机网络选择题分层模型是万能钥匙计算机网络部分的题目无论怎么包装最终都在考察你对TCP/IP分层模型的理解深度。360笔试试卷里出现过这样一道题一个HTTP请求从浏览器发出后经过哪些协议的封装才能到达服务器这个题本身不难但它串联了应用层、传输层、网络层、链路层的所有关键协议DNS解析域名、TCP建立连接、IP负责路由寻址、ARP解析MAC地址。如果你能把这条链路完整讲清楚网络部分基本就稳了。更有区分度的是TCP与UDP的对比题。比如问以下哪些应用适合使用UDP协议选项有视频直播、文件传输、DNS查询、网页浏览。视频直播和DNS查询选UDP文件传输和网页浏览选TCP。但很多同学会纠结DNS为什么用UDP因为DNS也支持TCP主用UDP是出于效率考虑。这类题目考的其实是默认场景下的最佳选择而不是极端情况下能不能用。网络部分还有一类题很隐蔽就是给一个IP地址和子网掩码问网络地址、广播地址、可用主机数范围。计算题没有太多技巧但一定要小心全0和全1的地址不可用这个细节。比如192.168.1.0/26这个子网可用主机地址是192.168.1.1到192.168.1.62而不是到192.168.1.63因为最后一个地址是广播地址。类似这种边界问题不实际算一遍很容易忽略。2.4 安全类选择题360的特色考点既然考的是360安全相关题目肯定会出现。但你不要把它想得太复杂校招阶段的网络安全题考的是基础概念和常识而不是让你去挖漏洞。比如会问到对称加密与非对称加密的典型算法和区别AES、DES是对称加密RSA、ECC是非对称加密。对称加密加解密速度快但密钥分发困难非对称加密安全性高但性能开销大。实际系统中通常用非对称加密协商密钥再用对称加密传输数据比如HTTPS的TLS握手流程就是这个思路。还有一道我印象深刻的题以下哪种方式可以有效防止SQL注入A. 对用户输入进行严格的类型校验B. 使用预编译语句PreparedStatementC. 过滤用户输入中的单引号D. 在数据库前加一个WAF防火墙。答案是B预编译语句是最根本的解决方案因为参数是分开传输的数据库只把它们当作数据不当作SQL语句执行。而C选项的过滤方式虽然在某些场景下有效但很容易被绕过比如编码绕过、宽字节注入等。安全类选择题给我的最大感触是出题人看重的不是你会不会某个具体漏洞的利用方式而是有没有安全意识——知道哪些写法有风险哪些方案是从根上解决问题。3. 编程题的思路拆解与代码实现编程题是整个笔试中区分度最高的部分。选择题可以通过短期刷题快速突击编程题就完全看平时积累了。360这类公司的编程题通常不会出特别偏怪的算法题但会考察你对常见算法模型的灵活运用。3.1 典型编程题一单链表的反转链表反转几乎是互联网公司校招笔试的保留曲目。题目描述很简单输入一个单链表的头节点反转链表返回反转后的新头节点。这题看似简单但我在阅卷时见过太多写错的情况。最常见的错误是在遍历过程中修改了当前节点的next指针但事先没有保存下一个节点的地址结果链表断掉了。正确的迭代写法如下class ListNode: def __init__(self, val0, nextNone): self.val val self.next next def reverse_list(head): prev None curr head while curr: next_node curr.next curr.next prev prev curr curr next_node return prev这个写法为什么是对的因为每次循环都要先保存curr.next否则一旦执行curr.next prev原来的后继节点就找不到了。这就像你要把一列火车掉头先把车厢之间的连接断开之前一定要记录好下一节车厢的位置。这道题还有两个值得一提的考点一是递归写法二是边界条件。递归版本的核心思路是反转以head.next为头节点的子链表然后把head放到末尾def reverse_list_recursive(head): if not head or not head.next: return head new_head reverse_list_recursive(head.next) head.next.next head head.next None return new_head边界条件就是空链表和只有一个节点的链表这两种情况直接返回原链表即可。很多同学代码主逻辑写对了但忘记了空链表判断结果测试用例挂了。在笔试中这些边界条件的分值占比相当高。3.2 典型编程题二合并两个有序数组这道题的经典版本有两种一种是合并两个有序数组到一个新数组另一种是原地合并到第一个数组假设第一个数组空间足够。360笔试更倾向于考第二种因为它对空间复杂度有要求。原地合并的思路是从后往前填充。为什么从后往前而不是从前往后因为从前往后填充会覆盖掉第一个数组中还没比较过的元素从后往前则没有任何这个问题。先把两个数组的末尾元素进行比较较大的那个放到最终位置指针前移重复这个过程直到其中一个数组被处理完再把另一个数组的剩余元素依次放进去。def merge(nums1, m, nums2, n): i m - 1 j n - 1 k m n - 1 while j 0: if i 0 and nums1[i] nums2[j]: nums1[k] nums1[i] i - 1 else: nums1[k] nums2[j] j - 1 k - 1这个代码有一个很关键的细节循环条件只需要判断j 0因为当nums2处理完了nums1剩余的部分本身就在正确位置上不需要额外处理。但很多同学会写成while i 0 and j 0然后还要单独写一个处理nums2剩余元素的循环逻辑上也能做但代码不够简洁容易出错。这道题考察的其实是一个动态规划里常见的思维方式既然正着来会覆盖未处理数据那就倒着来。这个思维在以后做很多算法题时都会用到比如字符串匹配、数组拼接等场景。3.3 典型编程题三最长不重复子串字符串处理是笔试中的常客最长不重复子串问题考察的是滑动窗口技巧。题目给定一个字符串找出其中不含有重复字符的最长子串的长度。滑动窗口的思路是维护一个窗口用哈希集合记录窗口内出现过的字符当遇到重复字符时不断收缩窗口左边界直到重复字符被移出窗口然后继续扩展窗口右边界。每次更新窗口大小的时候记录最大值。def length_of_longest_substring(s): char_set set() left 0 max_len 0 for right in range(len(s)): while s[right] in char_set: char_set.remove(s[left]) left 1 char_set.add(s[right]) max_len max(max_len, right - left 1) return max_len这道题有几个容易出错的点。第一个是while循环内部要先remove左边字符再移动left顺序不能反。第二个是max_len的更新时机必须在窗口扩展完成、确认无重复之后才更新。第三个是边界情况空字符串返回0全部字符都不同返回字符串长度。我建议你把这题再拓展一下如果要求返回最长子串本身而不是长度怎么做维护一个start指针记录最长子串的起始位置即可。这种多问一步的追问在校招笔试和面试中很常见平时准备时多做一步变式思考考试时比临时想要强得多。4. 综合题与安全场景分析的答题套路综合题是360笔试试卷比较有特色的一部分它一般会给你一个实际业务场景让你分析问题、设计方案。很多纯技术型选手在这部分翻车因为不知道如何组织答案结构。4.1 方案设计题的答题框架我见过一个典型的题目给定一个用户登录认证系统要求你设计一个安全的登录方案防止密码泄露、暴力破解、会话劫持等问题。这题看着没边界实际上考察的是系统设计能力和安全基础知识的结合。这类题目切忌直接堆砌技术名词一定要按照威胁建模→分层防御→具体实现的结构来答威胁建模分析登录系统面临哪些攻击。常见的有密码被截获、暴力破解、撞库、会话固定/劫持、SQL注入等。分层防御在网络层使用HTTPS加密传输在应用层对密码进行加盐哈希存储而不是明文或MD5直接存储在业务逻辑层引入验证码、登录失败次数限制、账号锁定机制。具体实现讲清楚每一步采用什么技术方案。比如密码存储选择bcrypt或scrypt算法原因在于它们引入了计算复杂度参数能显著提高暴力破解的成本验证码可以选择图形验证码或短信验证码会话管理使用随机且不可预测的session ID并设置合理过期时间。答题时还要注意一个细节明确说明在什么阶段防御什么攻击。比如HTTPS解决的是传输过程中被嗅探的问题加盐哈希解决的是数据库泄露后密码被还原的问题。如果你只是泛泛地说用HTTPS、加盐哈希、加验证码分数不会高因为你没有展示出为什么这些方案能应对对应的威胁。4.2 安全事件分析题的作答技巧还有一类综合题是给一个安全事件描述让你分析攻击路径和修复建议。比如某公司的网站被挂马访问者访问后会被重定向到恶意页面请问如何排查这道题考察的是思路是否清晰有序。我建议按现象确认→源头定位→根源分析→修复加固→事后复盘五个步骤来答现象确认确认被挂马的具体表现是仅首页被篡改还是全站页面都被插入恶意代码是不同的网络环境都会出现还是只在特定地区出现。源头定位查看Web服务器日志重点搜索异常的上传请求、后台登录记录、命令执行参数检查网站文件完整性找出被修改或新增的可疑文件。根源分析确定攻击者是通过什么漏洞进入的常见的有上传组件未做类型校验、后台弱口令、框架反序列化漏洞等。修复加固清除恶意代码、修补漏洞、重置所有后台密码、更新系统补丁、部署WAF等。事后复盘完善日志审计、建立文件监控机制、定期进行安全扫描。这么答的好处是阅卷人可以很清晰地看到你的分析逻辑哪怕其中某个环节的技术细节不够深入整体思路依然是完整且专业的。这部分考察的其实就是你有没有解决实际问题的框架感。5. 那些年我们一起踩过的失分坑这部分才是这篇文章真正的干货区。我和不少参加过当年360笔试的同学聊过也改过不少试卷总结出了几个高频失分点希望你能避开。5.1 时间分配不合理整套卷子满分100分选择题占了50分编程题30分综合题20分。很多同学拿到卷子后非要在选择题上反复纠结遇到一道不确定的题就花5分钟去验算最后编程题只剩20分钟草草写了几行代码就交卷了白白丢了最容易拿分的大题。我的建议是选择题控制在30分钟以内留出40分钟给编程题20分钟给综合题最后10分钟检查。具体执行时遇到不确定的选择题先标记跳过不要卡住不动。理由很简单选择题的性价比远低于编程题。一道选择题只有2分但一道编程题往往有15分以上少做一道编程题等于错了7道选择题。你稍微想一下这个账就知道该怎么分配时间了。5.2 编程题只写思路不跑测试笔试编程题有两种场景在线OJ判题和纸质卷子手写代码。360笔试采用的是在线OJ方式代码要真正编译运行。很多同学写完代码肉眼觉得应该对就直接提交结果因为边界条件、语法错误、没导包等问题一分没拿。正确的做法是写完代码后自己构造几个测试用例跑一遍。特别是边界情况空输入、只有一个元素、完全逆序、完全有序、包含重复元素等。比如上面说的链表反转你就应该测试空链表、单节点链表、两个节点链表、多个节点链表这四种情况。这些测试用例不需要多复杂但能帮你发现绝大多数低级错误。5.3 安全题答得太泛安全相关的题目很多同学答得跟宣传手册一样我们要加强安全意识建立完善的安全体系采用多层防护。这种话听起来正确但没有任何实际内容。阅卷人想看到的是具体的方案比如对上传接口增加扩展名白名单校验禁止上传.php、.jsp等可执行文件并且将上传目录的脚本执行权限关闭。这才是能落地的答案。我建议你准备安全类题目的时候多积累一些具体场景具体对策的对应关系。比如SQL注入对应的对策是预编译语句XSS对应的对策是输入过滤和输出编码CSRF对应的对策是Token校验和SameSite Cookie属性。有了这些具体的对应关系你答题时才能言之有物而不是泛泛而谈。5.4 忽略卷面印象分在线笔试当然不存在卷面分但如果是线下纸质笔试2014年很多公司还是线下笔试你的字迹、排版、答题逻辑顺序都会影响阅卷体验。阅卷人一天要看几十份试卷如果你的答案挤成一团逻辑东一句西一句即便内容是对的也容易漏看或者印象不好。我的实操经验是每道大题在动笔前花30秒在草稿纸上列一个答题提纲然后在正式卷面上按照结论先行、分点展开、必要时配图的方式组织答案。用数字序号标清楚每一个要点让阅卷人一眼就能看到你的得分点。这不是投机取巧而是为阅卷人节省时间属于双赢。5.5 编程环境不熟悉在线笔试通常会用特定的OJ系统有的同学平时在本地IDE里跑得好好的一到线上系统就傻眼不知道怎么提交代码、不知道输入输出格式怎么处理。2014年那会儿还有一些公司的笔试系统只支持纯文本输入输出没有自动补全连括号匹配提示都没有很多人直接被环境打懵了。我的建议是备考时一定去各大在线评测网站提前适应一下熟悉至少一种竞赛用的输入输出格式比如牛客网风格的输入循环处理并练习在没有任何IDE辅助的情况下手写代码。尤其是Java很多人面试时离了IDE连import都写不出来这类人显然还没准备好。6. 从2014到今天校招笔试的变与不变回头看2014年360这套笔试卷有些东西变了有些东西始终没变。变了的是技术栈的范围。当时Java和C是校招笔试的绝对主流近些年的考察范围已经扩展到Python、Go甚至前端方向的JavaScript。安全领域的题目也从传统的Web安全扩展到云安全、移动安全、IoT安全等方向知识的宽度和深度都比当年大不少。没变的是底层思维能力的考察。不管是数据结构还是算法不管是操作系统还是网络考的都是你在面对复杂问题时的分析能力和拆解能力。编程题的本质从来不在于你会不会背某个特定解法而在于你能否把问题转化成计算机可以高效运行的程序。另外想多说一句不要把重心全押在刷题数量上。以我阅卷的真实感受来看很多刷了大量题的同学遇到没见过的题目就完全不会了因为他们的思维方式已经被训练成匹配题目模板而不是分析问题本质。这类同学去面试考验时特别容易暴露短板。正确的方法是刷一道题吃透一类题做完一道题之后多问自己几个为什么为什么这个解法是对的有没有更优的方案如果约束条件变了解法还成立吗如果你能把这篇文章里讲到的几类典型题目和答题思路真正弄明白再针对性地去拓展练习我相信不管是360的笔试还是其他一线互联网公司的校招笔试你都能有一个稳定的发挥。最后再分享一个通用的小技巧笔试前一天不要刷难题把基础数据结构的时间复杂度、常见算法的模板、网络分层的核心协议过一遍就够了保持手感和信心比临时抱佛脚有用得多。
返回列表