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

资讯详情

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

思科校招笔试复盘:计算机网络与C语言基础为王

思科校招笔试复盘:计算机网络与C语言基础为王 1. 这场笔试的“第一印象”从我收到的邮件说起2020年秋招季我投了思科的软件开发工程师岗位。说实话当时对这家公司的笔试预期是“偏网络方向”毕竟思科是网络设备的头部厂商软件类岗位也大概率会涉及很多网络底层的知识。等真正收到笔试通知邮件的时候看到笔试时长90分钟、题量约50道客观题加2道编程题心里反而踏实了一些——至少不是那种动辄3小时、5道大编程题的硬核算法场更偏向基础功底和知识面的筛选。但“踏实”只持续到了我打开笔试系统的前十分钟。因为这套笔试题给我的最大感受是它不怎么按常理出牌但又处处在考察计算机专业的基本盘。很多同学在准备大厂笔试的时候习惯性去刷LeetCode、刷剑指Offer把精力全压在算法题上。如果你用这种思路去面对思科软件类的笔试大概率会在前面那50道客观题上吃不小的亏。因为它的客观题覆盖面非常广从我下面要拆解的维度来看几乎把计算机专业大学四年的核心课程都扫了一遍。这一篇我不打算只给你回忆题面我更想帮你建立一个“为什么思科要这么考”的认知框架然后配合我实际踩过的坑、试出来的应对策略让你在复习时有方向感而不是盲目刷题。先给一个整体评价思科2020校招软件类笔试是典型的“基础为王、知识面驱动、编程题为辅”的考察逻辑。它不需要你在算法上有特别惊艳的发挥但对计算机网络、操作系统、C/C底层机制这些基础知识的考察比很多互联网大厂要深入得多。这背后其实和思科的业务基因高度相关——软件岗位虽然写的是上层业务逻辑但很多时候要跟网络协议栈、嵌入式系统、设备驱动打交道所以基础不扎实的人即便算法再强也很难在后续的技术面和实际工作中站稳脚跟。2. 考试结构与时间分配90分钟的真实节奏2.1 题量分布和我实际经历的时间轴先还原一下整体考试结构。整套题分为三个部分部分题型题量建议用时实际我用的时间第一部分单选题约30题25分钟约20分钟第二部分多选题/不定项约20题25分钟约30分钟第三部分编程题2题40分钟约38分钟这里我必须提醒一个很重要的点前面的客观题并没有你想象的那么快就能做完。尤其是不定项选择题它的得分规则我推测是多选、少选、错选都不得分至少在我这次考试的规则说明里没有提到“少选给部分分”这就意味着你必须对每个选项都有把握才敢选。很多题目的选项是从不同教材、不同角度出发来设置的干扰项如果复习的时候只是囫囵吞枣看到哪个选项“眼熟”就选上很容易翻车。我在做第一部分单选题的时候节奏相对轻快因为这些题大多是对基础概念的直球考察。比如常量的存储位置、指针自增的运算结果、TCP和UDP的区别这类基本属于看一遍就能锁定答案的。但做到第二部分的题目时明显感觉到难度上一个台阶。它开始出现“以下关于XX的说法正确的有”“关于XX协议下列说法正确的是”这种组合式判断每个选项单独拿出来都像一道判断题四个选项拼在一起就把整个知识点横切竖切了一遍。2.2 编程题在整套题中的真实权重编程题虽然只有两道但在整个笔试的最终评价里往往起着“一票通过或一票否决”的作用。我个人的感受是客观题决定你能不能进入下一轮编程题决定你能不能排在一个靠前的名次。因为客观题大家差距不会特别大——基础扎实的人可能错5道基础一般的人可能错10道分差不至于拉开到不可逾越但编程题如果一道AC一道暴力过部分用例和两道都AC的差距在简历筛选和技术面排序的时候是非常明显的。两道编程题我印象里都不是特别复杂的算法题没有那种需要上线段树、树状数组或者复杂动态规划的题目。但第二道题有个细节让我印象深刻它对输入格式的要求比较严格如果没注意换行符和空格处理很容易出现本地测试通过、提交后0分的尴尬。这个细节我当时就专门拍了照记下来后面在备考和实战中总结了一套输入输出处理的检查清单我会在第五部分专门展开。3. 客观题考点深度拆解思科到底在考什么3.1 计算机网络不只是OSI七层模型这部分是思科笔试的重头戏比例粗略估计占了客观题的30%到35%。很多人复习网络只背OSI七层模型、TCP三次握手、HTTP状态码这些“面试八股”但思科笔试题恰恰在往更深一层走。举个例子它不会只问你“TCP和UDP的区别是什么”而会给你一段关于拥塞控制机制的描述让你判断“慢启动阈值在发生超时后的行为”是否正确。这种题如果没有真正读过TCP拥塞控制的细节只靠“TCP可靠、UDP不可靠”的印象去做题大概率会在选项之间犹豫。我在复习时发现有几个知识点的考察频率特别高TCP拥塞控制机制慢启动、拥塞避免、快速重传、快速恢复的具体流程和状态切换条件IP地址划分与子网掩码计算尤其是给定IP和掩码计算网络地址、广播地址、可用主机数路由协议的基本原理RIP、OSPF之间的核心区别关注距离向量和链路状态的根本差异HTTP与HTTPS的交互细节连接建立的差异、CA证书校验的基本流程VLAN、ARP、DNS这些常见协议的工作机制而且和思科的产品基因相关有些题会带着设备配置的语境比如问你“VLAN间通信需要什么设备”“交换机转发决策的依据是什么”。这类题不是直接考思科命令行而是把网络概念摆在设备场景里对后来要接触真实网络环境的软件工程师来说很有针对性。3.2 操作系统与Linux基础校招笔试里被低估的大头操作系统在思科软件类笔试中的占比也很可观大概在20%到25%。这一部分我最开始是轻视了——因为平时刷LeetCode、做项目操作系统知识很少直接用得上。但考完之后我才意识到思科作为网络设备厂商软件岗位很多工作会涉及到嵌入式Linux环境对操作系统原理的考察深度自然比一般互联网公司要高。具体的考点集中在以下几个方面进程与线程的核心区别尤其是共享资源、地址空间、上下文切换开销的具体表现进程间通信方式管道、消息队列、共享内存、信号量各自的特点和适用场景死锁产生的四个必要条件互斥、持有并等待、不可剥夺、循环等待以及对应的预防策略虚拟内存与页面置换算法LRU、FIFO的优缺点、缺页率的影响因素Linux文件系统的inode、硬链接和软链接的区别这里有个值得说的细节它考进程间通信时不是让你列出有哪几种方式而是会给出一个具体场景比如“两个进程需要频繁传输大量数据要求实时性高最合适的IPC方式是什么”然后混入“信号”“管道”“共享内存”“消息队列”四个选项。这种场景化出题比直球式的概念考察更能筛出真正理解原理的人。3.3 C/C指针与内存绕不开的底层功底整张试卷让我觉得最“思科风格”的部分是它对C/C底层机制的细致考察。作为一个网络设备和嵌入式系统起家的公司思科对C语言的看重程度远高于对Java、Go等现代语言的看重。如果你C语言功底不扎实做这套题会非常痛苦。我遇到的一些典型题目包括指针自增自减运算与括号结合顺序的优先级判断const修饰指针的几种形式const int p、int const p、int const * const p的含义辨析结构体字节对齐与内存占用计算静态变量、全局变量、局部变量的生命周期和存储位置野指针、内存泄漏的成因与避免手段字节对齐那道题我印象很深。它给出了一个结构体里面有几个char、int、short类型的成员让计算sizeof的值。表面上考的是结构体字节对齐实际上在考你是否真的理解内存对齐的规则以及是否知道编译器的默认对齐方式。如果平时写C语言不关心内存布局这道题大概率会算错。3.4 数据结构和算法基本概念不考偏题但考易错点这部分反而让我觉得比较轻松。它没有出什么红黑树、B树的复杂细节也没有要求手写快排的变体更多是围绕经典数据结构的“边界情况”和“实现特征”来出题。比如它问链表和数组在“中间位置插入元素时的时间复杂度”那个经典问题这个大多数人都能答对。但有一道题问的是“在已知某个节点指针的情况下单向链表删除该节点的时间复杂度是多少”这就让不少人纠结了——因为只知道当前节点指针而没有前驱节点指针常规做法是O(n)遍历找到前驱。但如果你知道“伪装删除法”把后继节点的值复制到当前节点然后删除后继节点这种技巧就能做到O(1)。这道题出得相当巧妙它表面的数据结构题实际考察的是一种“工程性思维”——在限制条件下寻找替代方案。3.5 数据库与设计模式软性考察但不能丢分数据库的题量不算大大概在5到8道但都要保证正确率。考察的都是一些很标准的SQL语句书写、事务ACID特性的辨析、索引使用场景判断。比如给你一条慢查询SQL让你判断是否能通过加索引优化本质上考的是索引的最左前缀原则。这部分只要你系统学过数据库原理基本送分。设计模式考察得更轻一些但偶尔会冒出一道“以下哪个选项不属于创建型模式”这种抽象工厂、工厂方法、单例、观察者排列在一起的题。观察者属于行为型模式这个如果平时不留意很容易在考场上被唬住。4. 编程题复盘考的不是算法是“工程习惯”4.1 第一道题字符串处理类任务第一道编程题我印象里是典型的生产环境题目给定一个输入的字符串序列要求按照某种规则转换输出涉及字符串分割和重组逻辑上更像“给一堆日志按规则解析关键字段”的任务。不涉及高级算法重点考察基础编程能力遍历字符串、根据分隔符划分字段、按指定规则拼接结果。这道题对熟练掌握主流编程语言的同学来说难度不大。我建议用C的getline配合split思路或者用Python的字符串函数都很容易解决。关键是注意边界条件空字符串、重复分隔符、字符串首尾的分隔符。因为笔试评测系统对这类情况通常不会仁慈边界不对可能就是0分。4.2 第二道题输入输出格式里的陷阱第二道题是一个偏模拟类的问题逻辑上比第一道复杂一些需要维护几个状态变量做循环判断很像那种“根据规则模拟游戏进程”的题目。如果使用多重嵌套循环硬解只要状态转移写对了也能通过但需要特别注意执行效率如果状态转移写得不够干净循环次数多的情况下可能会吃TLE。但更值得分享的是输入输出的坑。这道题输入是若干组数据每组数据占一行行内字段之间既有空格又有逗号输出要求是每行一个结果。我在本地测试时直接用了最简单的读入方式结果提交后第一次只有部分通过后来发现是同一行里混合了两种分隔符而我一开始只按空格切分。这个坑对于经常做算法题的人来说可能有点低级但它确实真实存在于思科的笔试平台里。建议大家不管做哪家的笔试题都先花15秒确认输入样例里有没有逗号、分号、制表符这类容易被忽略的分隔符。4.3 编程题备考策略不要只刷难题如果你是为了通过思科软件类的笔试去做编程题我建议把重心放在“中等偏下”难度的题目上尤其是那些偏模拟和字符串处理的题。LeetCode上标记为Easy到Medium的题目刷熟100道左右就足够覆盖思科笔试题的编程部分了。当然“刷熟”不是指背答案而是指你在看到一道题后能迅速判断它的输入规模、选择合适的数据结构、写出可直接运行的代码并自己构造几个边界用例来验证。因为思科笔试的编程题给我的感觉是它不是为了刁难你而是为了确认你能不能写代码、写完之后能不能跑对。一个能稳定写出无Bug代码的工程师比一个只会背题解、但不一定能处理输入异常的人更适合做实际工作。5. 这份笔试暴露出的复习盲区与实战应对5.1 盲区一网络协议细节停留在“背诵”层面没有真正理解状态机我在第四部分反复提到了拥塞控制、路由协议这些考点这里想展开说说为什么它们会成为很多人的丢分点。核心原因在于大学课程里学网络协议通常只要求能画出三次握手和四次挥手的状态迁移图、能说出TCP包头有哪些字段但对“什么条件下触发状态变化”这种细节很多人是不求甚解的。以TCP拥塞控制为例慢启动阶段每收到一个ACK拥塞窗口增加一个MSS到达慢启动阈值后进入拥塞避免阶段每个RTT只增加一个MSS发生超时后阈值变为当前窗口的一半窗口重置为一个MSS发生快速重传时窗口减半但不回到慢启动。这四个过程的区分是笔试特别爱出的点。你要是只背“TCP有拥塞控制”到了考场上就是看着选项眼熟但不确定。应对方式其实很简单不光背结论而是去把TCP状态迁移图画一遍把“慢启动阈值如何变化”这个数值过程推演几遍。推演一遍比背诵十遍印象都深。5.2 盲区二操作系统只背进程线程区别没有关注调度和资源分配很多人在复习操作系统时最爱背的就是“进程是资源分配的最小单位线程是CPU调度的最小单位”然后就觉得自己会了。但思科笔试让我意识到它还特别看重你对“调度策略”和“资源分配流程”的理解。比如它可能给你几个进程每个进程有到达时间、执行时间让你判断在不同调度算法先来先服务、短作业优先、时间片轮转下的完成顺序。这种题纯粹靠背诵答案是应付不了的你必须真的会画甘特图会计算每个进程的等待时间和周转时间。我在笔试前曾经觉得这种题比较“低级”但真到了考场上遇到一个需要比较FCFS和SJF在特定进程序列下平均等待时间的题目时还是需要静下心认真算。5.3 盲区三C语言指针题陷入“看了就会做了就错”的循环指针类的题目是典型的“眼高手低”失分区。很多同学平时写业务代码都是C或者Java对指针的使用频率不高做指针题时容易靠语感去猜。但思科笔试里的指针题往往设计得很细致它会结合自增运算符的前置和后置形式、指针加减运算的字节倍数、强制类型转换带来的步长变化综合到一道题里。应对这类题我的经验是在复习最后的冲刺阶段集中花两个小时把《C Primer Plus》里关于指针运算的章节从头到尾刷一遍并且亲手把每个示例代码敲一遍、打印结果验证。很多看起来绕的指针题本质上就是“类型运算符优先级步长”的组合你把三种要素分开来看逻辑就会清晰很多。5.4 实战应对如何利用好考前48小时校招季大家普遍时间紧、科目多到考前48小时的时候不太可能再系统性地翻书。这个阶段我的做法是“带着考点清单做减法”列出思科软件类笔试最重要的六个考点网络协议、操作系统、C语言指针、数据结构、基础算法、数据库。每个考点只复习最核心的20%内容把80%的时间留给真题、模拟题和错题重做。从第三天开始每天限定时间做一整套模拟题训练答题节奏和心态。这个办法非常实用。因为你如果试图在最后两天把所有知识点都过一遍结果往往是什么都没记住但如果只攻高频考点并且用模拟题来检验往往能保证基础分拿到手而这恰恰是笔试通过的关键。6. 答题过程中的几个关键决策点我踩过的坑和应对经验6.1 不定项选择“没把握就不选”还是“尽量多选”第二部分的题目是不定项选择我采取的原则是“宁缺毋滥”。理由很简单如果规则是错选和多选都不得分那么你选一个确定正确的选项至少能拿一部分分你如果硬凑四个选项错一个就等于全丢。这个策略在规则不允许“少选给部分分”的时候尤其重要。当然这要求你在做题时必须能对每个选项做出确定的判断。如果你的第一反应是“这个选项好像哪里见过但我不确定对不对”那大概率是不确定的建议不要选。6.2 客观题和编程题的顺序先做编程还是先做客观很多人的习惯是按照试卷顺序一路做下去但我建议在思科这种整套题里先把编程题放到最前面或者最后面集中做不要被中间的客观题打断思路。我这次的策略是拿到试卷后先浏览了一遍编程题发现都不算难于是决定先分配40分钟把编程题做完再回头做客观题。这样做的原因是编程题需要完整的思考链路如果你先做30道单选题再做编程题心智已经被各种概念判断题消耗得差不多了容易在写代码时犯低级错误。不过这个策略也有一个前提你平时做题速度比较快能在30分钟内搞定单选题。如果单选题本身就让你抓耳挠腮那还是老老实实按顺序来先把稳定得分拿在手里。6.3 遇到完全不会的题先标记不硬扛一套题里不可能每道题都会遇到卡壳的题我建议先标记跳过把会做的都做完再回来看。尤其是客观题部分一道卡住的题可能只需要你发散几秒钟就能出答案但在考试状态下人的注意力很容易被一道不会的题吸走导致后面十几道题都受到影响。我在这次笔试中有一道关于IP协议选项字段的题完全没把握当时果断标记跳过等所有题做完再回头推导靠着排除法勉强选了一个合理答案。这种决策的价值不在于多拿几分而在于把时间留给更有可能做对的题。7. 从笔试反推面试准备如何让这份经历变成后续优势7.1 笔试考了什么面试大概率还会问什么思科这类公司的面试流程往往和笔试考点高度关联。我后来在技术面时发现面试官问的问题和笔试考察的内容有大量重叠——网络协议栈的细节、C语言指针和内存管理、Linux下的多线程编程、进程间通信机制。这说明笔试其实是在预先帮你划定面试的复习范围。如果你还在准备阶段一个聪明的做法是把笔试中暴露出来的弱项整理成一个“待补清单”然后在面试前一两周集中攻克。比如说我之前对TCP拥塞控制的阈值变化不够熟悉笔试题丢分了回来之后专门花了一个晚上把拥塞控制的每个阶段的窗口变化数值推演了一遍。后来面试官果然问到了“出现快速重传后拥塞窗口和慢启动阈值分别是多少”我直接给出了准确回答顺利通过。7.2 思科软件类岗位的笔试经验可以平移到哪些公司这套笔试题的考察风格其实在不少老牌外企和网络通信企业里都能看到影子。像华为、中兴、爱立信这些通信设备厂商软件类笔试也普遍重视网络协议、操作系统、C语言底层机制算法题反而考察得相对温和。如果你准备过思科笔试再去参加这些公司的笔试会发现很多知识点是通用的。我的建议是把思科这套笔试当作一次“网络通信行业软件岗通识考试”来准备而不仅仅是为了一家公司的笔试。这样你的复习投入性价比会更高后续能覆盖更多目标公司。7.3 时间管理上的经验总结最后再说一个常被忽略的点校招季笔试往往集中在同一时间段每周可能有好几场笔试要打。很多同学会在每场笔试前临时抱佛脚结果每场都准备不充分。我自己的做法是把目标公司按照考试内容的相似性分组每一组统一准备一次。比如思科、华为、中兴分到“网络通信组”用一周时间集中复习网络协议、操作系统、C语言再比如阿里、腾讯分到“互联网组”重点刷算法题和数据库。这样分类准备比跟着每一家公司的笔试节奏走要高效得多。8. 写在最后笔试结束后的复盘心态与实操建议笔试结束当天我没有急着对答案而是第一时间把自己能记住的题目和考察点全部记下来标注出哪些是确定的、哪些是蒙的。这个方法我强烈推荐给每个准备校招笔试的人——因为人的记忆衰减非常快过24小时之后你大概率只能记住四五道题而考后第一时间记录的“考点分布图”和“失分点清单”是后续面试复习最宝贵的资料。我记得当时做完这套题之后内心有一点沮丧因为有大概三四道不定项选择题完全没把握感觉大概率进不了下一轮。但后来的实际结果是顺利进入了面试环节。这说明一个道理思科这类公司的笔试通常不是以“考满分”为标准而是以“达到基准线”为准。你不需要每道题都会但你需要把你熟悉的知识点稳稳拿到分不要在会做的题上丢分。这个看起来简单的目标其实很考验考前的准备是否扎实、考中的心态是否稳定。如果你正在准备思科或者其他通信大厂的软件类笔试我的最终建议可以浓缩成三句话打好C语言底子指针和内存管理的题一分都不能丢得太冤枉。把网络协议和操作系统复习到“可以推演细节”的深度而不只是“能说出概念”的广度。编程题重视输入输出边界多练习中等偏下难度的模拟和字符串处理题目性价比最高。校招笔试是一场漫长的马拉松一场失利不代表全盘皆输一套笔试题也不足以定义你整个人的能力。但它确实是一个最直接的试金石能让你在看简历和项目经验之外看到一个应届生在基础功底上的成色。愿这份经验能帮你少走一些弯路在考场上把自己的真实水平稳稳发挥出来。
返回列表