ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

360校招C/C++开发笔试真题解析:考点拆解与备考路线

2026/8/31 20:47:49 拓冰建站 浏览量
360校招C/C++开发笔试真题解析:考点拆解与备考路线 360公司历年校招笔试的C开发工程师客观题我前后刷了三遍第一遍裸考摸底第二遍逐题查漏第三遍按知识点归类整理。最近又把2019年的这套真题翻出来重新过了一遍发现很多题放在现在依然有很强的参考价值。这篇文章就把我对这套客观题合集的完整拆解、考点分析、易错点总结以及备考路线全部整理出来给正在准备360或类似公司C/C开发岗笔试的学弟学妹一个可复用的复习框架。1. 从真题看360校招C开发笔试的实际考察面先看这套真题覆盖的范围我大致梳理一下高频考点分布C/C语言基础指针与内存、结构体与联合体、预处理指令、类型转换、运算符优先级操作系统进程与线程、内存管理、死锁、进程间通信网络基础TCP/IP协议栈、HTTP协议、socket编程数据结构与算法链表、栈、队列、树、排序算法、复杂度分析计算机组成原理字节序、位运算、数据表示这套题最大的特点是基础但深入不考偏题怪题但会把基础概念挖得很深。比如同样考指针不会问你指针是什么而是给你一段代码让你分析输出结果考察的是指针运算、const修饰、多级指针这些细节。我特意分析了近三年360校招笔试的题目变化趋势。2017年以前偏重C语言细节2018年开始增加Linux操作系统的比重2019年这套题里网络和操作系统的分值明显上升到近两年又开始加入少量系统设计和场景题。这说明360的笔试命题一直在动态调整但底层考察逻辑没变基础扎不扎实能不能用底层知识解释上层现象。顺便提一句360笔试用的是牛客网平台题目类型包括单选题、多选题和编程题。客观题部分通常40道左右考试时间90分钟。每道题的平均用时只有2分多钟所以对熟练度的要求很高很多题看到就要能秒答。2. 三大高频考点拆解指针、内存与C语法陷阱2.1 指针与内存笔试的重灾区指针题在360笔试里几乎从不缺席而且特别喜欢用代码输出题的形式来考。这类题表面考输出结果实际考的是指针运算、类型大小、内存布局三个知识点的交叉理解。举个例子一道典型的真题是这样的int a[5] {1, 2, 3, 4, 5}; int *p a 2; printf(%d, *(p 1));答案是4考点是a 2指向数组第三个元素*(p1)取第四个元素。看起来简单但实际考试里会不断变形把int换成struct、把1换成、把数组换成二维数组难度立刻就上来了。我在实际刷题中总结了一个规律指针题必须三步走。第一步确定指针的基类型第二步确定指针当前指向的位置第三步才计算偏移和取值。很多同学喜欢直接心算省略第一步遇到基础类型还能应付一旦遇到结构体指针或二维数组就翻车了。二维数组指针是另一个高频考点。比如int a[3][4]a、a[0]、a[0]这三个表达式看上去差不多但类型完全不同。a的类型是int (*)[4]a[0]也是int (*)[4]而a[0]的类型是int *。如果不清楚这个区别遇到*(a1)和*(a[0]1)就会懵。前者偏移一行后者偏移一个元素。2.2 C语法陷阱运算符、const和类型转换C语法题是这套卷子的另一个重头戏但考的不是语法本身而是你在实际写代码时会不会踩坑。我总结了三类最常考、也最容易错的语法陷阱。运算符优先级陷阱。*p和(*p)的区别是万年老题但360的考法会更隐蔽比如*p *q这样的表达式考察的是先取值后自增的执行顺序。再比如i i这种未定义行为笔试里也偶尔出现这类题的正确应对方式是直接记住不要在实际代码里这么写而不是纠结于具体输出。const的各种位置。const int *p、int * const p、const int * const p这三个声明的区别几乎每年必考。我的记忆口诀是const修饰的是它左边最近的那个类型如果const左边没有类型就修饰右边。按照这个规则const int *p修饰的是int说明p指向的内容不可变但p本身可以变int * const p修饰的是*说明p本身不可变但p指向的内容可以变。类型转换的隐性坑。有符号和无符号数比较、整数提升、隐式截断这些在笔试里也是常客。比如unsigned int a 10; int b -1; a b ?答案是true因为b会被转换成无符号数变成一个很大的正数。这类题考察的不是C标准里生僻的知识而是你在真实项目中会不会写出这类bug。2.3 结构体与联合体考的是内存布局结构体对齐、联合体的大小计算、位域的使用这些知识点在360笔试里出现的频率非常高而且一旦出现往往是一整道大题。结构体对齐规则我不展开说细节只讲一个实战技巧遇到结构体大小题先找出对齐系数最大的成员然后按顺序排列每个成员计算时注意每个成员都要对齐到自己的对齐系数的整数倍。#pragma pack可能改变对齐系数笔试里也考过但频率不高。联合体的大小计算相对简单等于最大成员的大小但要注意数组成员的情况。比如union { char c[9]; int n; }的大小是12而不是9因为要满足int的4字节对齐。这类题目只要掌握取最大成员再整体对齐的口诀就不会错。我把这两类题目的常见陷阱整理成一个对照表刷题前可以过一眼考点常见陷阱正确做法结构体大小忽略对齐系数先找最大对齐系数逐个成员对齐嵌套结构体忘记内部结构体的对齐先算内部结构体大小再按外部规则对齐联合体大小只取最大成员不带对齐取最大成员后再按整体对齐规则取整位域存储位域跨字节边界按编译器规则逐字节分析指针偏移忘记基类型大小偏移字节数 指针位移量 × 基类型大小3. Linux与操作系统从命令到原理的贯通考查如果你只看C开发工程师这个岗位名可能会忽略操作系统和Linux的考点。但这部分在360笔试里约占20%-25%的分值而且难度逐年上升。我分析过真题变化2017年还只是考哪个命令能查看端口占用2019年已经开始考进程上下文切换时内核做了什么这种原理题了。3.1 必背的命令与工具客观题直接考命令的题目其实不难但范围很广。我整理了一份高频命令清单笔试前过一遍基本够用进程管理ps、top、kill、pstree文件操作ls、find、grep、tar、chmod网络工具netstat、ping、tcpdump、curl性能排查vmstat、free、df、iostat文本处理awk、sed、sort、uniq这些命令不会单独考你参数是干什么的而是放在一个场景里考。比如线上服务CPU占用过高需要查看哪个进程占用最多资源应该用什么命令答案就是top。或者想查看某个端口是否被监听用什么命令答案是netstat -tlnp | grep 8080。3.2 进程、线程与并发送分题还是送命题进程和线程的区别属于送分题但360的考法会让很多人丢分因为它不只考进程是资源分配的基本单位线程是调度的基本单位这种口诀还会让你判断具体场景下应该选进程还是线程。比如多个任务需要共享大量内存数据且要求低延迟通信选什么答案是线程因为线程共享进程地址空间通信开销小。死锁的四个必要条件也是高频考点答题时直接按互斥、占有且等待、不可剥夺、循环等待四条来核对。但近两年题目开始考如何预防死锁和如何避免死锁的区别前者是破坏四个必要条件之一后者是银行家算法这种动态分配策略两者不能混淆。Linux下的进程状态也偶尔出现TASK_RUNNING、TASK_INTERRUPTIBLE、TASK_UNINTERRUPTIBLE、TASK_ZOMBIE这几个状态的含义和转换关系要搞清楚。特别是僵尸进程笔试常考父进程没有调用wait()导致子进程变成僵尸进程如何解决答案是让父进程调用wait/waitpid或者直接杀掉父进程让子进程被init进程收养。3.3 内存管理与进程间通信的常见考点内存管理方面虚拟内存、页表、缺页中断、页面置换算法是主要考点。常见的考察方式是给你一个场景让你判断会发生缺页中断还是直接命中或者是LRU、FIFO页面置换算法的缺页次数计算。这类计算题只要掌握算法模拟的步骤就能做对但有个细节容易忽略LRU算法需要记录页面最近的使用时间而FIFO只需要记录进入内存的顺序。进程间通信IPC的方式在笔试里也经常出现管道、消息队列、共享内存、信号量、socket。常考题是哪种IPC方式效率最高为什么答案是共享内存因为它不需要数据在内核态和用户态之间拷贝。这个知识点联系到网络编程里的零拷贝技术就能理解得更透。4. 计算机网络不背八股理解分层模型与协议的协同网络部分的题目在这套真题里占比稳定大约在15%-20%。很多人复习网络喜欢死背OSI七层模型和TCP三次握手但360的题考得比这灵活更看重你对协议之间层次关系的理解。4.1 TCP/UDP从握手到拥塞控制的完整链路TCP的可靠性机制是必考内容但考法很多变。三次握手的过程要背但更重要的是理解为什么是三次而不是两次。简单说第三次握手是为了确认服务端的接收能力和客户端的发送能力都正常避免服务端因为一个失效的请求连接请求而白白分配资源这就是为什么两次握手会导致资源浪费和错误建连的原因。TCP的拥塞控制也是高频考点慢启动、拥塞避免、快重传、快恢复这四个阶段要能画出状态转换过程。笔试常考的是慢启动的指数增长拥塞窗口从1开始每轮次翻倍直到达到慢启动阈值。这个计算题出现的频率相当高。UDP相对简单但UDP是否可靠不能一概而论这种观点题偶尔出现。答案要明确UDP本身不提供可靠性但可以在应用层实现可靠传输比如QUIC就是基于UDP的可靠传输协议这个知识点能体现出你对网络协议栈的深入理解。4.2 HTTP与Socket编程C开发工程师的必考环节HTTP协议的状态码、请求方法、请求头在笔试里经常以代码或报文的形式出现。200 OK、301 Moved Permanently、302 Found、403 Forbidden、404 Not Found、500 Internal Server Error这六个状态码属于必背内容其中302和301的区别是经典考点301表示资源永久迁移302表示临时迁移爬虫和浏览器对两者的处理方式完全不同。Socket编程虽然很少让你手写完整代码但bind、listen、accept的调用顺序和各自的参数含义都是常考选择题。另一个容易踩坑的知识点是accept返回的fd和监听fd的区别前者用于收发数据后者只负责接收新的连接请求。服务端关闭连接时刚close的fd会进入TIME_WAIT状态端口不能被立即复用这也是客观题的常见素材。4.3 从一道真题看网络题的答题思路我记得这套真题里有一道比较有代表性的题目客户端与服务端建立TCP连接后客户端突然断电服务端如何感知连接已经断开A. 立即收到RST报文 B. 一段时间后收到FIN报文 C. 通过TCP的保活机制发现 D. 无法感知正确答案是C。这个题的坑在于很多人会选A但实际场景中客户端断电不是正常关闭不会发出FIN或RST服务端需要通过保活定时器或者应用层心跳来发现连接已死。这种题考的是对TCP连接生命周期和异常处理机制的综合理解如果你只是背了三次握手和四次挥手遇到这类题就很难答对。5. 数据结构与算法复杂度、链表和经典思想数据结构与算法在笔试客观题中的分值通常在20%左右。这些题目不会太难但特别考验你对常用数据结构特性的熟悉程度。5.1 复杂度分析所有算法题的底层通用技能复杂度分析是客观题的必考项几乎每套卷子都会有两三道。考的不仅是时间复杂度的估算还包括空间复杂度。常见算法的时间复杂度表必须烂熟于心冒泡、选择、插入排序是O(n^2)归并、快排、堆排序是O(nlogn)二分查找是O(logn)哈希表的平均查找是O(1)但最坏是O(n)。排序算法的稳定性也常考。口诀快选希堆不稳定就够了剩下的都是稳定排序。快排最坏情况的复杂度退化为O(n^2)也是高频题原因是每次划分都极端不平衡例如对已经有序的数组按固定基准值快排。有些题目会结合递归来考复杂度比如T(n) 2T(n/2) O(n)的时间复杂度是多少用主定理或者递归树展开都能得到O(nlogn)。这类题出现频率不低最好掌握主定理的一般形式考场上能快速判断。5.2 线性表的实现与应用C语言笔试的主场链表、栈、队列在笔试里出现的方式很固定选择题考操作的时间复杂度或者给你一段代码考输出结果。链表的插入和删除是O(1)但前提是已经定位到目标节点查找是O(n)。栈的特点是后进先出常用于括号匹配、表达式求值队列的特点是先进先出常用于BFS和缓冲区。数组和链表的对比是一个经典考点需要考虑两个维度访问效率和插入删除效率。数组支持O(1)随机访问但插入删除是O(n)链表随机访问是O(n)但插入删除是O(1)如果在头部或尾部。这类题其实是在考察你对不同存储结构适用不同场景的理解。5.3 经典算法思想二分、递归、贪心与动态规划的识别题客观题里一般不会让你完整推导动态规划的转移方程但会考你以下哪个问题适合用贪心算法求解这类识别题。哈夫曼编码、最小生成树的Prim和Kruskal算法、单源最短路径的Dijkstra算法注意要求边权非负都属于贪心。而0-1背包、最长公共子序列这类问题适合动态规划。二分查找的细节题出现频率也很高。比如在有序数组中查找第一个不小于目标值的位置应该怎么写核心就是判断条件用还是以及收缩区间时要不要mid1或mid-1。笔试选择题里常给出几个变形代码让你选哪个能正确运行这种题只能靠平时写熟练临时靠推断很容易出错。5.4 哈希表和二叉树的细节往往容易被忽略哈希表的考题集中在冲突处理方法上开放定址法和链地址法要分清。开放定址法又分线性探测、二次探测和双重散列笔试常考线性探测的寻址序列计算。牢记一个关键点就好开地址法的删除是惰性删除否则会破坏探测链。二叉树部分前中后序遍历和层序遍历的序列互相推导是经典题型。已知前序和中序求后序或者已知中序和后序求前序基本每年都有。层序遍历则对应队列的应用。另外完全二叉树的节点编号性质和二叉搜索树的中序有序性也是常客。6. 实战刷题路线与备考节奏建议前面拆了这么多考点最后落到怎么复习。我的建议是不要临考前一两个月才开始刷题如果时间充裕最好提前三个月准备。整体可以分为三个阶段。6.1 第一个月打地基建立知识地图不要一上来就刷真题先把基础补上。我的做法是先用一周时间过一遍C语言核心语法和指针再用一周过C的类、继承、多态、STL第三周主攻数据结构和算法第四周集中复习操作系统和网络。这个阶段推荐的资源《C程序设计语言》KR经典但偏枯燥适合当字典查《C Primer》重点看第2-6章和第12-13章其他可以略读《数据结构与算法分析》练习里面的课后算法题牛客网的C专项练习每天刷50题按知识点分类练习6.2 第二个月刷真题总结错题规律第二个月开始集中刷近三年的360真题和同类公司的笔试题目。刷题时不要只看正确率更重要的是把每道错题背后的知识点记录下来。我用一个表格来管理错题错题知识点错因分析正确解法类似题指针运算忘记基类型三步走定类型、定位、计算二维数组指针结构体对齐对齐系数算错先找最大对齐系数逐个对齐pragma pack死锁条件与饥饿混淆四条件逐一核对资源分配图这个表格的价值在于冲刺阶段复习时你不需要把整套卷子重刷一遍只需看错题表就能快速定位薄弱点。6.3 第三阶段仿真模拟与查漏补缺考试前两周开始做整卷仿真严格控制时间。设置一个和真实考试一致的90分钟倒计时模拟考场紧张感。重点是训练做题节奏先做会做的不会的先标记跳过最后再回来思考避免在一道题上卡太久。模拟完仔细复盘时间分配我自己的经验是选择题平均每题不超过2分钟超过就先跳过编程题最后留40分钟左右。当然这个时间分配因人而异但对C开发岗的笔试来说基础客观题的正确率是决定能否进入面试的硬门槛所以客观题的时间投入要保证。注意笔试刚结束面试很快就会开始面试环节通常也有一轮技术面会深挖项目经验和编程能力。所以笔试后的复习不要立刻停下应该立即准备项目复盘和C的核心知识面。关于360面试的具体考题和准备思路我后面会单独写一篇分享。7. 笔试中的时间管理技巧与心态调整时间管理在客观题部分的重要性被很多人低估。我见过不少同学前面选择题做得太慢导致后面的编程题来不及写。虽然编程题的分值不一定高于多选题但一道空白编程题的丢分远比几道选择题严重。我自己的做题顺序是快速扫描整套卷子标记出会做的和需要思考的优先做完会做的保证基础分拿到再回头解决标记的题目每道题最多再花2-3分钟最后留10分钟检查重点检查填涂和计算细节心态上遇到完全没有思路的题果断放弃不要恋战。360的客观题里通常会有两三道超纲或偏难的题这是出题人故意设置的区分度题做不出来不影响大局。从真题风格来看360的客观题属于稳中带变的类型。语言基础、操作系统、网络、数据结构这些主干知识点每年都考但命题角度和场景包装会不断变化。所以备考的核心策略是主干知识点不能有盲点常见变式要熟练这样才能在考场上有余力应对那些偏应用的场景题。8. 这套真题对真实开发工作的映射价值说点题外话。很多人觉得笔试题就是八股文考完就忘跟实际开发没关系。但我刷完这套真题后有一个很明显的感受360出的这些题大部分都能在你的日常开发里找到对应场景。指针运算和内存管理对应的是你写代码时的内存操作比如链表的插入删除、缓冲区的读写结构体对齐和字节序对应的是你解析网络协议、处理二进制文件格式时的基础死锁和进程同步对应的是你写多线程程序时的锁管理Socket编程和TCP状态对应的是你排查线上网络问题时的分析思路。换句话说这套笔试的客观题本质上是在考察一个C开发工程师是否具备扎实的底层知识体系。你如果能在准备笔试的过程中把每个考点都落到真实场景里去理解收获的不只是一张面试入场券而是一套能在以后工作中持续发挥作用的底层思维框架。最后再分享一个我踩过的坑刷题初期我只看正确答案不分析错误选项。后来发现这是一个大问题因为笔试多选题的干扰项设计得非常精巧每个错误选项背后都有一个典型的知识误区。只看答案的话你根本不知道自己是不是真的理解了只是碰巧记住了而已。从第二轮刷题开始我要求自己把每道题的四个选项都分析一遍搞清楚每一个选项为什么对或为什么错正确率才有了质的提升。希望这篇文章对正在准备360或同类公司C/C开发岗笔试的你有所帮助。如果你也在刷题阶段或者已经拿到了面试通知欢迎在评论区聊聊你的复习进度和遇到的困惑我看到都会回复。