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

资讯详情

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

360校招C开发笔试客观题高频考点与备考策略全解析

360校招C开发笔试客观题高频考点与备考策略全解析 360公司2019校招笔试-C 开发工程师客观题合集这个标题对准备过校招的同学来说应该不陌生。我自己当年也经历过几轮大厂的笔试轰炸客观题这块看着是选择题好像蒙一蒙也能过实际上它是筛人最狠的一关。尤其是C开发工程师岗位客观题覆盖的知识面极广从C语言语法细节到操作系统原理从数据结构到网络协议稍不留神就掉坑里。这篇文章我想以过来人的视角把360这类安全/互联网公司C开发岗笔试客观题背后的考察逻辑拆开揉碎讲清楚再结合我实际刷题和带人的经验把高频考点、易错题型的解题思路、以及一套实用的备考和答题策略整理出来。不管你是正在准备秋招的应届生还是打算跳槽的初级C开发这篇文章都能帮你少走弯路把精力花在真正会考的地方。1. 360校招笔试到底在考什么1.1 客观题的结构与题量分布360的校招笔试C开发工程师岗位的客观题部分通常是和编程题一起出现的。时间一般控制在90到120分钟之间客观题数量在40到60道左右具体每年会有浮动。题型以单项选择和多项选择为主偶尔会出现填空题或者判断改错题但核心还是选择题。客观题的分值占比通常在40%到50%之间剩下的是在线编程题。别小看这50%不到的比例客观题往往是决定你能不能进面试的“基本盘”。编程题大家水平参差不齐但客观题是可以通过系统准备拿到高分的。我当时认识的一些拿到360面试机会的同学客观题正确率基本都在80%以上。从科目分布来看可以粗略分成这么几块C语言基础语法和指针相关大概占30%到35%数据结构和算法基础占20%到25%操作系统和Linux相关占15%到20%计算机网络占10%到15%剩下的可能是数据库、设计模式、智力题之类的内容占5%到10%。这个比例不绝对但大体能反映考察重心。1.2 考察能力模型与岗位匹配逻辑为什么360这类公司这么看重客观题因为它能在一场考试里快速筛选出具备扎实基本功的候选人。C开发工程师不是写业务脚本而是要跟内存、进程、网络打交道一个指针用错就是线上事故一个并发没处理好就是性能瓶颈。客观题虽然不能完全反映实操能力但能有效检验你的知识体系是否完整基础是否牢固。说白了客观题考察的是你在大学四年里有没有真正理解计算机科学的核心概念而不是期末考前突击背下来的知识点。我见过不少同学项目经历写得花团锦簇结果连“static关键字在C语言中的作用”都说不全这种在客观题面前是藏不住的。另外360作为安全起家的公司对底层的理解要求比普通互联网公司更高。同样是考指针可能更偏向于指针和内存布局、数组和指针的关系这类偏底层的内容同样是考进程可能更关注进程地址空间划分、上下文切换的细节。所以备考360不能只刷通用题库还要针对安全公司对底层原理的偏好做一些针对性准备。2. 高频考点拆解C语言核心知识点2.1 指针与内存管理笔试的重灾区指针是C语言的灵魂也是笔试客观题里出题人最喜欢做文章的地方。我在整理历年题目时发现指针相关题目几乎每年必考而且往往不是直接问“指针是什么”而是通过一些容易混淆的写法来考察你真正理解了多少。最常见的考点包括指针和数组的关系特别是int a[5]; int *p a;这种场景下p1和a1的区别指针数组和数组指针的区分比如int *p[5]和int (*p)[5]分别是什么意思多级指针的运算int **pp结合*pp、**pp在不同表达式里的取值逻辑函数指针和回调函数比如int (*func)(int, int)的定义和调用方式。还有一个高频中的高频就是sizeof和strlen对指针和数组的处理差异。sizeof(arr)返回整个数组占用的字节数而sizeof(ptr)返回的是指针本身占用的字节数在64位系统下是8字节。很多同学在这里失分不是不知道规则而是没有养成“看类型不看变量名”的做题习惯。内存管理方面堆和栈的区别、内存泄漏的成因、野指针和悬空指针的区别都是常客。特别是悬空指针出题人喜欢构造这样一个场景函数返回一个局部变量的地址然后在主函数里通过这个地址访问数据。很多人知道这样不对但要你解释为什么不对、可能产生什么后果就答不完整了。正确答案是局部变量在函数返回后生命周期结束栈帧被回收这块内存理论上已经不属于当前程序的可控范围但物理内存还在所以可能暂时读到旧值也可能被其他函数调用覆盖成随机值行为未定义。2.2 预处理、关键字与语言细节陷阱除了指针C语言还有一大堆细节知识点是客观题的“送分题”和“送命题”。送分是因为它们只要你背过就能答对送命是因为如果你不知道四个选项看起来都差不多蒙对概率只有25%。预处理指令是必考项。#define宏定义和函数的区别、宏定义的副作用、#include的作用、条件编译#ifdef/#ifndef/#endif的用法这些都要烂熟于心。特别是宏定义出题人最喜欢写一个像函数的宏然后在表达式里考察展开后的运算顺序。比如#define SQUARE(x) x*x然后问SQUARE(31)的结果答案是7而不是16因为展开后是31*31。这就是典型的只背概念不理解本质的失分点。关键字方面static、const、volatile、extern是四大金刚。static修饰局部变量、全局变量、函数时的不同作用const修饰指针时const char *p和char *const p的区别volatile提醒编译器该变量可能被外部修改不要优化掉对它的访问extern用于声明外部变量或函数。这些不能只背结论要通过写小示例去验证。语言细节陷阱还包括运算符优先级、类型转换、整型提升、浮点数比较等。运算符优先级这个老生常谈的问题考了这么多年依然有不少人错。建议把优先级表打印出来贴在电脑前刷题的时候遇到不确定就查查几次就记住了。类型转换要特别注意有符号和无符号之间的隐式转换比如unsigned int和int比较时int会被转换成unsigned int负数会变成一个很大的正数。2.3 数据结构与算法基础客观题里的硬骨头数据结构在客观题里的考察方式主要是给出一个操作序列让你判断时间复杂度、空间复杂度或者让你推断用的是什么数据结构。这块需要你真正理解各种数据结构的特性和适用场景。链表是C开发岗位笔试的常客因为它是C语言里最基础也最灵活的数据结构。单链表的反转、判断链表是否有环、两个链表的交点这些既是客观题的高频选项也经常演变成编程题。客观题里可能不会让你写完整代码而是给你一段插入或删除节点的操作问你哪一步会出错或者问时间复杂度是多少。栈和队列的考察点相对固定入栈出栈顺序的合法性判断、用两个栈实现队列、循环队列的判空判满条件。这些只要理解了数据结构本身答起来不难。树这块二叉树的前中后序遍历、层序遍历、根据遍历序列还原二叉树是重点。AVL树和红黑树的平衡调整过程也可能出现尤其是红黑树虽然不用你手写调整过程但要知道它的性质和主要应用场景比如在C STL的map底层就用红黑树实现。排序算法是客观题里的“大题”。常见排序算法的稳定性、时间复杂度和空间复杂度对比表一定要烂熟于心。快速排序最坏情况什么时候出现、堆排序建堆的时间复杂度、归并排序的空间复杂度为什么是O(n)这些细节都是出题人喜欢设置干扰项的地方。还有一个容易被忽略的点是排序算法的稳定性对实际应用的影响比如按成绩排序时如果两个学生成绩相同希望保持他们原来的先后顺序就必须选择稳定排序。3. 操作系统、网络与LinuxC开发工程师的隐形考场3.1 进程线程与并发模型如果说C语言考点是明面上的战场那么操作系统考点就是决定你是否能拿高分的关键。360这类公司对底层原理的重视程度从操作系统部分的题目难度就能看出来。进程和线程的区别这道题几乎每场笔试都有。但考法不完全一样有的直接问哪些资源是进程独享的哪些是线程独享的有的给一个场景让你判断用多进程还是多线程更合适。要答对这些不能只记住“进程是资源分配的最小单位线程是CPU调度的最小单位”还要理解背后的含义进程地址空间独立一个进程崩溃不会直接影响其他进程线程共享地址空间通信方便但同步问题突出。进程间通信方式IPC是另一个高频考点。管道、消息队列、共享内存、信号量、信号、套接字这六种方式各自的特点和适用场景要能说清楚。特别是共享内存和管道对比的题目共享内存传输效率高是因为不需要内核态和用户态之间的数据拷贝但需要自己处理同步。线程同步这块互斥锁、读写锁、条件变量、信号量的区别是考察重点。死锁产生的四个必要条件互斥、占有并等待、非抢占、循环等待以及如何破坏这些条件来预防死锁也是经常出现的题目。我建议你把银行家算法也看一下虽然考的概率不算特别高但一旦考到不知道的人只能干瞪眼。3.2 网络编程基础考点网络部分的客观题主要围绕TCP/IP协议栈展开。TCP的三次握手和四次挥手是必考中的必考而且考法很多变问状态转换的、问为什么是三次不是两次的、问TIME_WAIT状态的作用的、问第四次挥手后客户端为什么要等待2MSL的。这些细节需要真正理解每一条报文的作用而不是背状态图。TCP和UDP的对比也是常客。面向连接vs无连接、可靠传输vs不可靠传输、字节流vs数据报、首部开销大小这些基本点要熟记。更有区分度的题目会给出一个具体场景比如视频通话、文件传输、DNS查询问你该用TCP还是UDP。DNS查询用UDP是因为它的请求和响应都很短一个数据报就能装下用TCP反而增加了连接建立的开销。HTTP协议在客观题里也会出现虽然C开发岗位不会像前端岗考察得那么深。HTTP和HTTPS的区别、HTTP的请求方法、常见的状态码含义比如200、301、302、404、500分别代表什么这些基础概念要清楚。另外HTTP/1.1的Keep-Alive机制和HTTP/2的多路复用如果你了解在笔试里会是加分项因为能体现你的知识面不止于课本。3.3 Linux与调试工具常识C开发工程师的工作环境基本离不开Linux所以笔试里也会考察Linux相关的常识。这部分题目通常不深但面很广。文件权限是必考的。chmod 755和chmod 644分别代表什么权限组合rwx分别对应什么数值chown和chmod的区别这些要滚瓜烂熟。还有一个容易混淆的点目录的r、w、x权限分别有什么含义。很多人以为目录的x权限无所谓实际上没有x权限你是无法进入目录访问其中的文件的。常用命令的考察也很常见ps查看进程、grep文本搜索、awk和sed文本处理、top监控系统状态、netstat查看网络连接、tcpdump抓包分析。不一定每道题都考但你必须知道这些命令是干什么的因为编程题做完之后有时候需要在Linux环境下编译运行验证。调试工具方面gdb是C开发者的基本功。笔试里可能会考gdb断点相关的命令break设置断点、next单步执行不进入函数、step单步执行进入函数、print打印变量值、backtrace查看函数调用栈。valgrind检测内存泄漏的功能也是C开发岗位笔试的常客。4. 典型真题解析与答题策略4.1 一道典型指针题的多种考法这里我想用一道我印象深刻的真题来展示客观题是怎么出题的以及该怎么应对。题目大致是在32位系统下有定义int a[5] {1, 2, 3, 4, 5}; int *p a;问*(p3)和*(a1)-1分别是多少。第一问比较简单p3指向数组第4个元素所以*(p3)等于4。关键是第二问a是什么类型它是int(*)[5]指向整个数组的指针。a1跳过了整个数组指向数组末尾之后的位置。*(a1)就是这个位置的值但注意此时类型是int[5]所以*(a1)-1是int*类型指向数组最后一个元素即5。这道题考了三个知识点数组名和数组名的区别、指针加减运算的步长取决于指针类型、类型转换在指针运算中的影响。如果你只是背了“数组名是首元素地址”不知道a是数组指针这道题就废了。我的建议是遇到指针相关的题目不要看变量名先写出每个表达式的类型然后根据类型做运算正确率会明显提升。4.2 客观题的实用答题技巧客观题虽然考的是知识积累但答题策略也能帮你多拿几分。先易后难是基本原则。笔试时间有限不要跟一道题死磕。我的习惯是先把所有会做的题做完标记不确定的题目如果有时间再回头分析。这样可以确保基础分拿到手不会因为在一道难题上花太久导致后面会的题没时间做。多选题要特别注意。360笔试里多选题的计分规则通常是全部选对才得分选错或漏选都不得分甚至可能倒扣分。所以多选题的策略是“宁缺毋滥”有把握的选项才选没把握的坚决不选。但要注意有些年份可能改成“漏选得部分分”这个规则不固定进考场前一定要仔细看题目说明。排除法在做选择题时非常有效。尤其是那些“下列说法正确的是”这类题目往往有两个选项明显错误剩下两个需要仔细辨别。这时候如果你能把错误选项排除掉正确率就从25%提升到了50%。为了更高效地运用排除法平时刷题时要养成分析错误选项的习惯知道每个错误选项错在哪里而不是只记住正确答案。时间管理上我的建议是客观题平均每题不超过1分半。如果一道题超过2分钟还没有思路果断跳过。笔试最后的编程题也需要时间而且编程题的分数权重可能比一道客观题高得多不要因小失大。4.3 从笔试到面试的知识衔接这里我想补充一个很多人忽视的点客观题里考的知识很可能在面试里换个形式再次出现。我参加过的大厂面试中面试官经常会问你“笔试时你有个题目选了XX能不能详细说说你的理由”这种追问比重新出题更考验人。如果你的客观题是靠排除法选对的而不是真正理解就会在面试时露馅。所以备考客观题时不要只满足于选对答案要强迫自己把每道题的每个选项都弄懂。做题时用“讲解模式”假装你是老师要把这道题给一个同学讲明白。如果能讲清楚说明你真懂了如果讲不清楚这就是你的知识盲区需要补充。这个习惯还有一个额外好处客观题里的很多知识点是相通的弄懂一道题往往能帮你解决一类题。比如理解了const char *p和char *const p的区别那么由此延伸的“const修饰指针作为函数参数”这类问题也一并解决了。面试官能从你的表述判断出你是刷题背答案还是有系统性的知识结构这决定了你面试的下限。5. 备考资料与刷题方法5.1 高效刷题的正确姿势关于刷题我的核心建议是少而精重复盘。不要漫无目的地一天刷几百道题那是自欺欺人。我自己备考时每天只刷30到50道客观题但每道题都会花时间复盘。复盘的正确姿势是这样的先做一遍对答案然后不看解析自己分析每道题为什么对、为什么错最后再对照解析看自己的理解和出题人意图是否一致。如果一道题做对了但说不清原因我会把它当成错题处理因为考试时换个马甲可能就不会了。错题整理也非常重要。我不建议手抄太费时间。用Excel或者笔记软件建一个表格记录题目类型、错误原因、对应知识点、正确解法。每周抽一天把本周错题重新做一遍正确率达标了才标记为“已掌握”。这种滚动式复习比考前突击效果好得多。5.2 针对性备考资源推荐市面上C语言和校招笔试的资料不少但质量参差不齐。我按优先级给你推荐几类。首先是教材类的经典《C程序设计语言》KR是必读的篇幅短但密度极高每道习题都值得做。《C和指针》是深入理解指针的绝佳补充《深入理解计算机系统》CSAPP则能帮你打通C语言和操作系统之间的壁垒对解答综合性题目帮助很大。题库方面牛客网上有大量校招真题包括360历年的笔试题目可以在线模拟考试环境。LeetCode主要用来刷编程题但它的“面试经典”系列里也有一些概念性选择题可以作为补充。GitHub上有些校招刷题合集仓库搜索“校招笔试”“C语言面试题”能搜到很多但要注意甄别过时的题目跳过即可。视频课方面翁恺老师的C语言课程对基础薄弱的人非常友好。如果操作系统和计算机网络基础不足B站上哈工大和大连理工的公开课口碑不错。安全公司和互联网公司的技术博客也可以当作阅读材料比如360的技术博客经常分享一些底层原理和性能优化文章读多了对理解笔试考点的实际应用场景很有帮助。5.3 备考时间规划建议如果你是提前3个月开始准备时间会比较充裕。我的建议是把时间分成三个阶段打基础、刷真题、模拟冲刺。第一个月是打基础阶段可以逐章回顾C语言、数据结构、操作系统、网络的核心知识点每天保证2到3小时的学习时间。这阶段重点是建立知识框架不用急着做整套真题。第二个月是刷真题阶段每周做2到3套完整笔试套题严格计时做完仔细复盘。第三个阶段是模拟冲刺阶段重点做错题复盘和弱项补强同时调整做题节奏确保笔试时体力、精力都能跟上。如果你是临阵磨枪只有2到4周时间那就要学会取舍。优先复习C语言指针和内存、数据结构高频考点、TCP三次握手和四次挥手这些是性价比最高的内容。不要贪多把一张A4纸能写下的核心考点把握住拿个合格分还是有希望的。时间再紧也要保证每天至少做20道客观题保持手感做题和纯粹看书是两个状态只有做题才能暴露问题。6. 常见问题与避坑实录6.1 客观题备考的五大常见误区第一个误区是只看不练。有人喜欢捧着教材或者别人的笔记看觉得“看懂了就等于会了”。实际上看懂和做对之间有一道鸿沟因为出题人会在你“以为懂了”的地方挖坑。解决方法是每看完一个章节立刻做配套练习题用输出检验输入。第二个误区是忽视多选题。单选题做对了很有成就感多选题错一个就全错容易让人受挫。很多人因此不愿意面对多选题把注意力全放在单选和编程题上。但客观题里多选题的分值往往不低放弃多选题等于直接把优势让给别人。我的建议是多选题当判断题做每个选项独立判断对错再整体校验这样正确率会提高不少。第三个误区是不模拟真实考试。平时用手机刷题和坐在电脑前做整套卷子是两回事。手机刷题碎片化很难模拟考场的时间压力和注意力分配。考前至少做3套完整的模拟笔试用电脑、计时、不开书、不查资料完全按照考试流程来。第四个误区是忽视题目中的“陷阱词”。比如“以下说法错误的是”“不正确的是”“不可能的是”这些词汇一漏看答案就会180度反转。我建议做题时把“不”“错误”“不可能”这类词圈出来提醒自己注意。这是一个很小的习惯但能避免很多低级失分。第五个误区是只看分数不看解题过程。有些在线刷题平台只显示对错不展示解析这会导致你就算蒙对了也无法积累经验。对知识的深度理解需要持续追问为什么而不只是结果正确就万事大吉。6.2 笔试现场的突发情况处理笔试现场和平时刷题很不一样会有一些突发情况需要提前做好心理准备。最常见的是时间不够用。整套试卷拿到手我建议先花30秒快速浏览一遍题目数量和分布大致心里有数。然后严格按照先易后难的策略推进。如果最后真的来不及蒙题也要有技术含量多选题不确定的选项不选单选题在B和C之间蒙的概率略高一点但“看哪个答案长得顺眼”这种玄学不能作为主要策略。另一个情况是遇到完全没见过的知识点。不要慌先跳过等做完其他题有余力再回来分析。客观题的知识点虽然多但出题范围是有限的你没见过的题目绝大多数人也都没见过这不会影响你的相对排名。还有就是在编程题上耽搁太久导致客观题没做完。做题时需要全局观如果一道编程题15分钟还没有任何思路先放下做客观题保住基本分。客观题每道题的分值虽然不高但胜在量大拿分稳定性远高于一道卡住的编程题。很多同学喜欢跟编程题较劲结果客观题草草收场最后的分数反而不如那些果断取舍的人。6.3 笔试后的复盘与进阶路线笔试结束不意味着备考结束。不管考得好与不好都要做一次彻底复盘。我刚考完的24小时内会做一次回忆式的复盘把能记住的题目考查的知识点列出来然后和备考时复习的内容对照找出盲区。这一步越早做越好因为时间一长就忘了。对照完成后我就会针对薄弱点补一轮知识。这轮补的漏洞可能变成面试时的亮点。面试官知道笔试的题如果你能深刻讲解某道题的思路即使当时做错了也足以证明你具备很好的学习能力和技术热情。对于明确拿到面试机会的同学笔试复盘要服务于面试准备。把笔试中暴露出来的薄弱知识点重新学习一遍因为面试里大概率会围绕这些点展开追问。我当时笔试时有一道网络字节序的题拿不准复盘后把大端小端彻底搞懂了结果面试时真被问到了直接照着复盘内容回答面试官明显对我最后一句“这个特性在跨平台网络编程中的影响”很感兴趣这给了我一个展示知识深度的机会。长远来看客观题备考积累的知识会在工作初期发挥巨大的作用。我工作后维护一个老旧的C服务排查线上性能瓶颈时正是靠笔试备考时学到的关于CPU缓存、内存对齐的知识快速定位了问题。所以不论考试结果如何这些知识本身都是你作为C开发者的立身之本。最后再分享一个小技巧笔试备考期间每周写一篇技术总结把你本周学到的零散知识点用一篇短文串联起来不需要多正式给自己看就行。写下来的知识才是真正属于你的知识。很多知识点当时觉得懂了一写才发现言之无物这就是需要重新学习的地方。
返回列表