
2018年秋天我参加了思科校园招聘的软件类笔试拿到的正是A卷。当时的感觉是题量不小选择填空涵盖面很广编程题不算特别难但很考验基本功。更让我意外的是网络协议的分量比普通互联网公司重不少出现了不少交换机和路由相关的场景。如果你正准备投思科或者类似网络设备厂商的软件岗那这篇对A卷的复盘应该能帮上忙。我会把当时的试卷结构、核心考点、典型题目以及备考方法逐一拆开讲。1. 笔试整体情况与试卷结构1.1 考试形式与时间安排思科的笔试采用的是在线考核会给一个链接进入后需要先调试摄像头和环境确认没有问题才能开始答题。整套卷子的时间我记得是120分钟题量方面客观题大概50道左右再加上3道编程题整体节奏比较紧张。和互联网大厂那种纯算法题海不同思科的笔试更偏向“基础知识覆盖面”和“网络场景理解”选择题占的比重明显更大很多题目看一眼就知道有没有好好看书。考试界面分左右栏左边是题干右边是作答区域。客观题有单选、多选和填空填空题会给你输入框填数字或者单词。编程题支持的语言比较常规C、C、Java、Python都行我选了C。需要注意的是编程题的环境是网页编辑器没有本地的智能提示所以平时依赖IDE自动补全的同学会比较吃亏最好提前去牛客网练几套题适应一下。1.2 试卷模块与分值分布从A卷的内容来看可以大致分成四个模块数据结构与算法、操作系统与计算机组成、计算机网络与思科技术、编程题。分值比例我根据考完后的感觉和同学之间的反馈估算了一下不是官方数据但大差不差。模块大致占比具体内容数据结构与算法30%链表、树、排序、动态规划、字符串操作系统与计算机组成20%进程线程、死锁、内存管理、大小端、结构体对齐计算机网络与思科技术25%TCP/IP、VLAN、STP、路由协议、NAT、LACP、VRRP编程题25%拓扑排序、链表操作、字符串处理、简单DP可以看到网络和思科技术的占比相当高这是它区别于很多互联网公司软件岗笔试的地方。很多投软件岗的同学只刷LeetCode对网络协议不重视结果在选择题上失分严重。这一点要特别提醒后来的求职者投思科之前一定把网络基础补扎实不能光靠算法。2. 核心考点逐模块拆解2.1 数据结构与算法笔试的硬骨头这一块是笔试的基础也是选择题里最容易拉开差距的部分。A卷考察了一些很经典的概念题比如快排和归并排序的稳定性比较堆排序建堆过程的时间复杂度以及给定中序和前序遍历结果求后序遍历。这些题目本身不难但需要你把基本功记得很牢固不能靠临场推导否则时间不够用。另外还考了不少链表的指针操作题比如判断链表是否有环以及怎么找到环的入口。虽然编程题里没有直接考链表反转但选择题里出现了对链表和顺序表插入删除操作的复杂度比较。这里建议准备时要把数据结构里面的结构体定义、常见接口实现都自己动手写一遍不是看一遍就行要能默写出来。动态规划在选择题里也有涉及不过考得比较浅比如给定一个简单的递推式问你时间复杂度和空间复杂度。真正动手写DP的是编程题里有道“最长递增子序列”的变体这个我们后面单独讲。总之数据结构和算法部分需要达到LeetCode中等题水平尤其是链表、二叉树和基础DP这几个重点消化掉选择填空基本都能应付。2.2 操作系统与计算机组成基础功底考察操作系统这一块的考察点比较散进程和线程的区别、死锁产生的四个必要条件、虚拟内存和页面置换算法都是高频考点。A卷里有一道题是问“以下哪些情况会导致死锁”选项里设置了资源互斥、请求保持、不可剥夺和循环等待四个条件分别作为选项让你选出全部正确项。这就是纯记忆加理解只要学过一遍都不会丢分。计算机组成里印象最深的是大小端字节序的问题。题目给出了一个int类型变量值是一个十六进制数问在x86小端机器上内存中的字节排列顺序是什么样的。这类题非常经典但很多同学平时写业务代码根本接触不到容易忽略。另外还考了结构体对齐给一个包含char、int、short的结构体问你sizeof是多少。这就需要明白对齐规则以及编译器默认对齐数是多少。我当时的建议是把《深入理解计算机系统》的第二章、第三章和第九章重点看一下不用钻研到汇编层面但数据和指令在机器里的表示、虚拟内存的基本概念这几个点一定要吃透。操作系统方面把经典的进程同步互斥、死锁、内存分页分段、文件系统的目录结构过一遍笔试就完全足够了。2.3 网络协议与思科技术软件岗的特殊加分项这是思科笔试最有特色的一块也是很多同学最容易翻车的地方。普通互联网公司可能只考个TCP三次握手和四次挥手但思科A卷里出现了大量二层、三层网络协议的内容。我印象中有几道题是直接问在VLAN环境下Access端口和Trunk端口的区别是什么LACP协议的主要作用是什么VRRP和HSRP相比有什么不同。这些内容如果你没有专门学习过完全靠猜很难答对。比如LACPLink Aggregation Control Protocol是用来实现链路聚合的它可以把多条物理链路绑定成一条逻辑链路增加带宽和可靠性。而VRRPVirtual Router Redundancy Protocol是用来做网关冗余的让多台路由器共享一个虚拟IP地址实现故障转移。这些概念在“思科网络技术学院”的教材里都有详细讲解。另外还考了TCP的流量控制和拥塞控制比如慢启动算法中拥塞窗口大小怎么变化以及TCP校验和在NAT场景下会不会改变。这类题目已经不仅是网络工程师的专属了软件开发人员同样要理解因为你在写网络应用时需要知道底层的传输机制。我强烈建议用思科模拟器Cisco Packet Tracer或者GNS3自己搭一个简单的拓扑做一做VLAN划分、Trunk配置、LACP链路聚合、VRRP主备切换的实验。不需要敲命令敲得多熟练但一定要看懂配置理解配置背后的转发逻辑。2.4 编程题与代码能力从思路到ACA卷的编程题一共有3道难度从简到繁。第一道基本是送分题类似“给一个字符串统计每个字符出现的次数按字符顺序输出”。第二道是链表相关第三道则是图论或DP的题。很多人看到第三道就慌了但其实前两道拿满分再做对第三道的一部分就能超过很多人。编程题最忌讳的是审题不清。有一道题给了一个二维矩阵要求从左上角走到右下角每次只能向右或向下求路径上数字之和的最小值。这题明明就是最基本的DP但由于题目描述是英文的有些同学没理解“只能在右和下移动”这个限制条件导致完全做错。所以考试时如果看到英文题目一定多读几遍不要急着写代码。另外在线编程平台的输入输出格式也是个坑。题目可能会要求你输入多行每行若干个整数以EOF结束也可能会告诉你第一行是数组长度第二行是数组元素。不同的题目输入格式不一样我考试时就因为没有正确处理整行读取导致一个用例通过不了。平时的练习题建议尽量用“标准输入输出”模式不要用LeetCode那种核心代码模式不然适应不了校招笔试。3. 典型真题回顾与解题思路3.1 一道链表相关的算法题虽然具体的原题我不能完全复述但有一道链表题的大意是这样的给定一个单链表每k个节点一组进行反转最后不足k个的保持原有顺序返回反转后的链表头。这道题在LeetCode上也有原题难度属于中等偏上。笔试时要求实现函数输入是链表头指针和整数k输出是新的链表头。我的做法是首先遍历一遍链表统计长度然后求出需要反转的组数。接着用dummy node指向链表头每次找到当前组的前驱和后继对组内节点进行反转。核心是反转结束后要让前驱的next指向新的组头当前组原来的头反转后变成组尾的next要指向下一组的第一个节点。这个逻辑实现时很容易绕晕建议先画图再写代码。我当时因为一开始没有加dummy节点导致第一组反转后返回值丢了后来花了五分钟改成dummy节点才通过。这道题还有一个小坑如果k大于链表长度直接返回原链表。我估计很多人会在这里翻车。平时刷题时一定要养成处理边界条件的习惯测试用例里往往会有k1或者链长为0的情况。3.2 一道网络协议分析题A卷的选择题里有一道关于NAT和TCP校验和的题目非常有意思。主机A在内网里向公网服务器B发送一个TCP SYN报文经过一台路由器做NAPT网络地址端口转换把源IP地址和源端口都改掉了。问题是服务器B收到这个报文后TCP头部的校验和是否需要重新计算为什么这道题的考点在于TCP校验和计算时会加入一个“伪头部”伪头部里包含了源IP地址、目的IP地址、协议号和TCP长度。如果NAT修改了源IP那么接收方在计算校验和时使用的伪头部就会改变因此路由器必须重新计算TCP校验和否则校验失败报文会被丢弃。这个知识点相信很多人学过计算机网络但未必能联想到NAT场景。我当时能答对是因为考前刚好看了《TCP/IP详解卷一》里关于校验和的内容。建议大家复习时多思考“协议在实际网络中怎么运转”而不只是背诵报文格式。比如TCP握手为什么是三次路由协议之间怎么互相学习路由这些思考对笔试和面试都有帮助。3.3 一道系统设计/方案题客观题之后还有一道方案设计题让你写一段文字描述自己的设计思路。我印象里题目大概是这样的某公司需要开发一个网络设备管理平台有大量交换机、路由器需要纳管要求支持设备自动发现、配置下发和状态监控。请你设计一个后台系统的整体架构并说明关键模块的职责。这类题目没有标准答案但能反映你有没有工程化思维。我的思路是从设备接入层开始设备通过SNMP或NETCONF协议与平台通信接入层负责协议适配将不同厂商的设备模型统一为内部数据结构。然后接入层把采集到的数据写入消息队列由数据处理服务异步消费存入时序数据库用于监控图表展示。配置下发则单独走一个服务因为配置操作需要严格的事务和确认机制每一步执行后要校验结果失败时必须回滚或重试。我在答案里还画了一个分层的结构图来辅助说明文字描述。当时考虑到思科本身做网络设备这样的平台设计题很有“思科风格”所以面试官比较看重你是否理解设备管理的痛点比如海量设备并发、网络不稳定、配置一致性问题。软岗的同学不要只盯着算法题多思考一些实际系统的设计思路会加分不少。4. 备考攻略与时间规划4.1 编程基础怎么打牢如果你决定投思科软件岗我建议把LeetCode高频题刷150到200道。不是盲目地刷而是按专题来:数组、链表、二叉树、回溯、动态规划、图论各刷30道左右。每道题都要做到第一能独立写出代码并运行通过第二能分析时间复杂度和空间复杂度第三能说出为什么这么做边界条件是什么。一定要动手在纸上或者在编辑器里手写代码不要只看别人的题解。我见过很多人“看题解全会自己写全废”这就是因为缺少输出训练。另外针对思科这种偏C/C的公司最好能熟练掌握C的STL常用容器比如vector、map、set、stack、queue、priority_queue。至少要知道它们的底层实现和适用场景因为选择题可能考你map底层是红黑树unordered_map底层是哈希表。刷题的时间安排上我建议保持每天2到3道题的量持续两个月。最后两周每天做一套模拟笔试严格计时。模拟时不要暂停不要查资料逼自己在限定时间内完成。这样到了真正考试的时候对时间节奏才有感觉。4.2 网络知识怎么补网络知识的备考策略首先要过一遍经典的计算机网络教材。我推荐两本一本是《计算机网络自顶向下方法》适合快速建立协议栈的整体认知另一本是《TCP/IP详解卷一》适合深入理解TCP、IP、ICMP等核心协议的实现细节。很多人觉得《TCP/IP详解》太枯燥但你可以只挑重点章节读比如TCP的报文格式、三次握手、状态转换、拥塞控制IP的分片与重组ICMP的常见类型。然后一定要做实验。思科模拟器是不可或缺的学习工具哪怕你只是练习VLAN划分、配置Trunk、设置链路聚合都能加深记忆。我在备考期间用模拟器搭了一个很小的企业网拓扑两台核心交换机之间做了链路聚合下挂两个VLAN每个VLAN里接了若干PC路由方面启用了OSPF另外配了VRRP做网关冗余。这个实验做完很多抽象概念就变成具体的配置了笔试考到相关名词就不再发怵。至于思科的私有协议和公有协议比如HSRP和VRRP的区别HSRP是思科私有VRRP是公有标准还有PortChannel、EtherChannel等概念需要有个基本印象。对于软件岗来说不用背全命令但看到“lacp”、“switchport mode trunk”、“standby ip”这些关键词要能知道它们的作用。这个要求不高花一周时间专注补网络就可以做到。4.3 模拟面试与临场策略笔试前一周我参加了两场同学组织的模拟笔试用的是牛客网的模拟系统模拟时还会开着摄像头营造紧张感。当时发现自己的问题主要集中在时间分配上我在选择题上花了太多时间导致最后编程题只剩20分钟。后来我调整了策略先把三道编程题全部浏览一遍评估难度后先写容易的第一题和第二题然后再回头做选择题。如果选择题里遇到需要长篇计算的先跳过优先做能快速拿分的基础题。考试当天还有一个小技巧提前准备好空白草稿纸和笔。有些题比如拓扑排序、DP状态转移画个图会更容易想清楚。另外一定要提前进入考试页面检查网络是不是正常摄像头能不能识别。不要等到最后一分钟才登录万一系统更新或者浏览器插件有问题心态很容易崩。5. 常见问题与避坑经验5.1 笔试平台与输入输出陷阱在线笔试最常见的问题是输入输出。思科A卷的编程题输入格式挺规整但依然有同学没用对读入方式。比如“输入一行包含若干个整数以空格分隔读到换行结束”很多人用cin x循环读但不知怎么判断结束结果程序阻塞。其实用C可以用while (cin x)的方式一直读到EOF如果题目要求以换行为结束则需要用getline读取整行后按空格分割。还有输出格式的问题要求每个结果占一行有些题目还要求最后不能有多余空格。很多人会把每个数带一个空格输出最后多了一个空格被判错。这个细节平时练习时就要注意笔试平台都是机器判分格式错了就是零分。另外如果笔试平台提供了本地IDE的选项一定要提前测试能否编译运行。如果只能用网页编辑器要习惯没有代码补全的环境。我建议在平时刷题时就使用那个在线平台的编辑器不要一直依赖本地IDE。5.2 时间分配与做题顺序时间分配上我最终采用的是“由易到难编程优先”的策略。先花3到5分钟浏览所有题目把编程题按难度排序。一般第一道编程题是必拿分第二道如果一眼有思路就做第三道如果15分钟内没有思路就先跳过去把客观题做完再回头啃第三道。因为客观题一个空可能只有1到2分但错误率低编程题如果没通过编译一分都拿不到性价比完全不同。我还见过有人在某道选择题上纠结了十分钟最后编程题没写完。选择题实在不会可以先蒙一个记住题目编号最后有剩余时间再回头验证。不要因为一道选择影响了整场考试的节奏。考试结束后我复盘发现选择题里很多不会的其实属于“记忆模糊”第一直觉的正确率反而更高改了反而容易错。5.3 简历与笔试的关联简历上的技能描述在笔试阶段也会影响面试官对你的期待。如果简历上写了“熟悉网络协议”那么你的笔试网络题得分就会成为面试官的重要参考。如果你网络题答得很差面试时肯定会被追问甚至会让人怀疑简历的真实性。所以我建议简历上写到的每一个技能点笔试前都要系统复习一遍别让简历成为自己的“坑”。同时笔试后通常还有性格测评环节这个不计入分数但会影响综合评估。做性格测评时不要刻意装成“企业想要的人”因为题目里有很多重复测谎题前后不一致反而会留下负面印象。我当时就按真实想法填最后也顺利进入面试了。反正做自己就好。6. 从笔试看思科软件岗的能力要求6.1 基础扎实比热门技术更重要从这份A卷可以看出思科软件岗并不太看重你学过什么新潮框架而是更关注计算机基础是否扎实。数据结构、操作系统、网络协议这些“老知识”是核心。这可能和思科的产品特点有关网络设备里的软件系统更注重稳定性、实时性和安全性不像互联网前端那样快速起服务。所以如果你想进思科一定要把根基建牢固而不是盲目追新技术。另一方面思科笔试中出现的编程题难度没有互联网大厂那么高但非常经典都是日常开发中能遇到的问题。这也说明他们招聘的是“能写靠谱代码的工程师”而不是“竞赛选手”。我认识的一个同学LeetCode刷题量不大但基础课学得特别扎实笔试分数反而比我高。所以不要因为刷题少就妄自菲薄。6.2 网络场景理解是加分项除了基础思科对网络场景的理解要求明显高于一般软件公司。即使你投的是软件岗也需要知道VLAN怎么划分、路由协议怎么选路、链路聚合有什么用、网关冗余怎么做。因为在开发网络管理软件、控制器应用或数据分析工具时这些网络概念是领域知识不懂这些就无法理解业务需求。所以备考思科时不要只当一名“通用软件开发”候选人要把自己定位成“懂网络的软件工程师”。这个定位会直接影响你复习的侧重点也会让你在笔试中看到网络题时更从容。6.3 后续面试与笔试的衔接通过笔试后面试很大概率会围绕笔试内容展开。我当时面试官就问了一道笔试题的优化方案还问了如果数据量扩大100倍该怎么处理。这说明笔试不是一个孤立的关卡它同时是面试的“引子”。建议考试结束后把自己没做好的题目记录下来面试前重新做一遍弄清楚正确解法。这样当面试官问起来时你能够展现出“复盘反思”的能力这是很好的加分项。我当年把笔试里所有不会的网络题都整理成了笔记后来面试时果然被问到了VRRP和LACP的区别我直接把笔记里的对比观点讲了出来面试官明显很满意。相信你也能这样做。总结个人体会说实话思科2018校园招聘笔试软件类A卷并没有太多偏题怪题整体难度在同类公司中属于中等但它考察的知识面非常广尤其是网络部分让很多只刷算法题的同学措手不及。我自己的体会是准备这种笔试与其盲目刷一堆难题不如把基础教材读透把网络实验做熟再把常见的编程题模板掌握好。如果你能做到这些通过笔试并拿到面试邀约并不是一件难事。最后再分享一个小技巧笔试前抽半天时间把思科命令手册里和VLAN、LACP、VRRP相关的配置范例过一遍不一定要记住命令但看到相关英文缩写时脑子里能立刻浮现出它的使用场景这种直觉在考场上特别管用。希望这篇复盘能让你少踩一些坑顺利拿到心仪的offer。