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

资讯详情

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

浩鲸科技校招笔试复盘:计算机基础与编程题备战攻略

浩鲸科技校招笔试复盘:计算机基础与编程题备战攻略 拿到浩鲸科技2019校招普通研发类笔试邀请的时候我正处在秋招海投的疲惫期。浩鲸科技这个名字在当时不算最响但做通信软件出身、又有阿里背景属于那种技术底子扎实、值得认真对待的公司。普通研发类岗位的笔试不像算法岗那么“卷”LeetCode Hard也不像测试岗大量堆概念题它更看重一个计算机专业学生的基础是否扎实、代码能力是否够用。我后来把这份笔试从头到尾复盘了一遍发现它的出题思路和考察重心其实很有代表性对准备通信软件类公司校招笔试的同学参考价值不小。这篇文章不打算贴原题和标准答案毕竟涉及版权而是把这份笔试题背后的考察逻辑、知识点分布、我当时的选择和失误、以及针对这类笔试的备战方法完整拆开来讲。内容会覆盖计算机基础考点、编程题实战策略、逻辑智力题的应对技巧还有时间分配和心态调整。不管是准备校招的应届生还是想跳槽进通信软件行业的开发者都可以对照这份拆解来查漏补缺。1. 浩鲸科技笔试整体风格先搞清这家公司到底想招什么人1.1 公司业务底色决定了出题方向浩鲸科技的前身是中兴软创主要做电信运营商的核心业务系统比如BOSS系统、BSS/OSS这类计费、客户管理、业务开通平台。后来阿里云投资入股之后公司在云计算、大数据、智慧城市这些方向上也铺了不少业务。这就决定了它的研发岗笔试不会走纯粹的“互联网大厂风格”。什么是互联网大厂风格比如字节、腾讯的笔试上来就是三四道算法题难度直奔LeetCode Medium以上重点考察数据结构和算法的熟练度。浩鲸科技这类有传统软件企业血统、又在往互联网化转型的公司笔试风格是“混合体”计算机基础占大头编程题有但更偏工程应用逻辑题也占一定比重。它想招的不是竞赛型选手而是基础扎实、能直接上手做业务系统开发的人。普通研发类岗位尤其如此。这个“普通”不是贬义而是区分于算法岗、大数据岗、测试岗等特定方向。普通研发类对应的是后端开发、系统开发、业务功能开发这类定位所以笔试内容覆盖数据结构、操作系统、网络、数据库、Linux常识再加上编程题基本就是这个岗位的全部考察范围。1.2 试卷结构的大致印象从题型分布来看这份笔试大致可以分成四块单项选择、多项选择、编程题、逻辑智力题。选择题覆盖计算机基础编程题一到两道逻辑智力题两三道。总体题量不算大但时间也不算宽裕大概一个半小时到两个小时。选择题是主体涉及的知识面很广。我印象比较深的几个方向包括数据结构里的二叉树遍历、排序算法的时间复杂度、链表的操作操作系统里的进程与线程、死锁产生的条件、内存管理的基本概念网络里的TCP/IP协议、三次握手、IP地址分类数据库的SQL查询、事务的特性还有Linux的基础命令比如查看进程、修改权限这类。这个知识面跨度说明了一个问题这类公司对普通研发的期望是“什么都要懂一点但不需要你在某个点上钻研太深”。它不像算法岗那样要求你会动态规划和图论的各种高级技巧但如果你连B树索引为什么快、TCP为什么需要三次握手都说不清楚那就说不过去了。1.3 与其他通信软件类公司的笔试比较后来我也参加过其他通信软件公司和中兴、大唐这类企业的笔试对比下来发现浩鲸科技的题目风格整体偏实用。中兴的笔试更偏通信知识会考信令、协议栈这类内容华为的笔试风格更硬核考察深度明显更高。浩鲸科技因为已经有互联网化的趋势反而更接近“传统软件企业互联网公司”的中间地带通信背景知识考得不多更强调计算机通用基础。如果你正在准备这类公司的笔试我不建议花大量时间去背通信协议细节那是通信岗的事。普通研发类的准备重点应该放在数据结构、操作系统、网络、数据库、Linux这些计算机核心基础课上。2. 计算机基础考点盘点这些题不刷白不刷2.1 数据结构与算法基础从概念到计算的完整考察数据结构的选择题在整份试卷里占比最高。这部分考察方式很直接没什么弯弯绕绕但正因为直接很多基础不牢的人反而容易翻车。常见考点有这么几类第一类是时间复杂度计算。比如给一段两层循环嵌套的代码问时间复杂度是O(n)、O(nlogn)还是O(n²)。这道题本身不难但要注意区分最好、最坏和平均情况有些题目会在这个上面挖坑。比如快速排序的最好时间复杂度是O(nlogn)最坏是O(n²)如果题目问的是“快速排序的最坏时间复杂度”答案是O(n²)而不是O(nlogn)很多人在这里丢分就是没看清题目措辞。第二类是二叉树相关的概念题。比如给定前序遍历和中序遍历要求还原二叉树或者求后序遍历序列再比如问完全二叉树的深度计算。这类题只要掌握“前中后序遍历的本质”“递归还原二叉树的方法”就能稳拿分。还有一种考法是给出某种遍历序列问可能是哪种二叉树考察对二叉搜索树、堆、完全二叉树特性的理解。第三类是排序算法的对比。考察点集中在稳定排序有哪几个冒泡、插入、归并、基数、不稳定排序有哪几个快排、堆排、希尔、选择、各种排序算法在最好最坏情况下的时间复杂度和空间复杂度。其实这个知识点是面试笔试超高频考点我备考时专门整理过一个表格强烈建议你也整理一遍考前过一遍比临时翻书效率高得多。第四类是栈和队列的应用。比如栈的入栈序列是1,2,3,4,5问哪个出栈序列是不可能的。这类题考察栈的先进后出特性只要模拟一遍出栈过程就能判断。还有循环队列的判空判满条件front和rear指针的移动方式也是高频考点。2.2 操作系统与计算机网络基础概念和原理是重头戏操作系统部分的题目集中在几个核心概念上。进程和线程的区别是必考内容。要能说清楚进程是资源分配的基本单位、线程是CPU调度的基本单位同一进程内的线程共享地址空间和资源但进程之间相互独立。还有进程间通信的常见方式管道、消息队列、共享内存、信号量、Socket要能区分哪种效率高、哪种适合交换大量数据。死锁也是高频考点。死锁产生的四个必要条件互斥、占有并等待、非抢占、循环等待必须背熟而且要知道对应的预防措施破坏互斥条件不太现实、破坏占有并等待可以一次性分配所有资源、破坏非抢占可以在资源得不到时主动释放、破坏循环等待可以对资源编号按序申请。有时候题目会给出一个具体场景让你判断是否可能产生死锁这时候就需要逐个条件去对照。内存管理部分考分页和分段、虚拟内存、页面置换算法。LRU和FIFO页面置换的缺页次数计算是常考的计算题要会画表模拟。这里有一个容易忽略的细节LRU需要记录页面访问的先后顺序而FIFO只需要记录进入内存的顺序两者在不考虑抖动的情况下结果可能有差异。网络部分的三次握手基本是必考。要清楚三次握手每一步传递的报文标志位SYN、SYNACK、ACK以及为什么不是两次或四次。原因很简单两次握手无法防止失效的连接请求突然到达服务器四次握手没有必要三次已经能确认双方的收发能力都正常。IP地址分类和子网划分也是常见题目。比如给定一个IP地址问它属于哪一类、默认子网掩码是什么或者给定一个子网掩码问能划分多少个子网、每个子网有多少可用主机地址。这类题目的核心在于理解网络位和主机位的划分以及全0和全1地址不能用。判断网络地址、广播地址、可用主机数这些细节考前一定要过一遍。2.3 数据库与Linux细节题最容易拉开差距数据库的考察集中在SQL基础、事务特性和索引原理。SQL题通常会给出两张表要求写查询语句。考题本身不复杂但容易在细节上扣分。比如查询结果去重用DISTINCT、分组后条件过滤用HAVING而不是WHERE、多表连接时注意ON和WHERE的执行顺序。这些细节如果平时只写简单查询不太注意笔试时很容易写错。事务的ACID特性也要熟悉。原子性、一致性、隔离性、持久性各是什么意思分别由什么机制保证。其中隔离性涉及事务隔离级别的问题读未提交、读已提交、可重复读、串行化分别解决脏读、不可重复读、幻读中的哪些问题。这是选择题的常见出题角度。索引部分问的最多的是“为什么用B树而不用B树或哈希表”。这个问题的标准回答逻辑是B树非叶子节点不存储数据一个节点能存放更多关键字树更矮更胖磁盘IO次数更少而且B树的叶子节点通过链表相连适合范围查询和排序。哈希索引适合等值查询不适合范围查询所以InnoDB默认使用B树索引。Linux部分一般就是选择题考命令。查看进程用ps或top、修改文件权限用chmod、查看端口占用用netstat、查找文件用find或grep、查看磁盘空间用df和du。这些命令如果平时写代码用不到考前突击一下就行但要记住一些常见参数比如chmod中权限的数字表示法rwx对应421、ps -ef和ps aux的区别。2.4 选择题里的“判断题陷阱”这类笔试的选择题有个特点选项长度明显不均衡。比如三个选项很短、一个选项特别长长的那个往往是正确答案因为出题人要把限制条件写清楚反过来如果三个选项都长就一两个短那个短的往往才是陷阱。还有一种出题方式是“下列说法错误的是”。这种题目考察的是对知识点的精确记忆如果某个概念的记忆不准确容易选错。比如“虚拟内存的大小受物理内存大小限制”这句话就是错误的虚拟内存受地址位数和外存空间影响。遇到这种题建议用“找绝对化说法”的策略选项里出现“一定”“必须”“所有”“完全”这类绝对化表述大概率是错误的出现“通常”“一般”“可以”这类相对化表述大概率是正确的。3. 编程题的花样在有限时间里稳住基本盘3.1 编程题的风格定位不像LeetCode那么绕浩鲸科技这类公司的笔试编程题通常不会出特别偏难怪的算法题。它更偏向考察基本的编码能力和逻辑思维。以我的经验来看1到2道编程题难度大概在LeetCode Easy到Medium之间。常见的有字符串类型的题目比如反转字符串、判断回文、统计字符出现次数数组类型的题目比如数组去重、找出出现次数最多的元素、合并两个有序数组还有简单的排序和查找题。这种风格和岗位定位是匹配的。普通研发岗日常写得最多的代码是业务逻辑不是算法竞赛题所以笔试编程题的目的不是筛选算法高手而是确认你“能写出干净、正确、能运行的代码”。3.2 一道印象深刻的编程题字符串处理当时有一道题是要求把一个字符串中的单词顺序反转但单词内部的字母顺序不变。比如输入“Hello World”输出“World Hello”。这个题目看起来简单但实际做起来有几层考察第一层考察的是分割字符串的能力。很多语言里split()方法可以直接用但如果你连split的用法都不熟或者不知道分割后要处理多个空格代码写出来就有问题。第二层考察的是对边界条件的处理。比如字符串开头或结尾有空格、中间有连续多个空格、输入的是一整行带换行符的内容。这些情况如果没考虑到测试用例就会挂。第三层考察的是双指针的思路。一个更优的解法是先反转整个字符串再逐个反转每个单词这样空间复杂度是O(1)不需要额外存储单词列表。如果你的代码用了额外的list存储每个单词再反转拼接复杂度是O(n)也能过但写出来没那么漂亮。我在笔试时用的就是split加reverse代码很简单先按空格分割成单词数组倒序遍历拼接。虽然在三层考察上的第二层没有完全处理好连续空格的情况但基本了通过功能测试。这道题我当时十分钟内写完后来复盘觉得笔试编程题最重要的是先写出能跑的版本再考虑优化。3.3 手写代码的现场教训编程题现场有几个坑我要重点说。第一个坑是输入输出格式。在线笔试平台不像IDE里那么好调试输入输出的格式必须严格匹配。比如题目说读一个整数然后输出一行结果如果你多打印了一个提示符“请输入”判题系统就会报错。还有读入多组测试数据时循环读入的方式在不同语言里写法不同C的cin x会返回一个bool值可以用于检测是否读到文件尾Java里是while(scanner.hasNext())Python里是while True配合try和except或者用sys.stdin.read()。这个细节考前一定要练一遍。第二个坑是代码编译环境问题。有的平台默认用Java 8有的用Python 3C的编译器和标准版本也可能不同。如果你的代码用了比较高版本的语法特性比如Java的var关键字、Python 3.10才有的match语句在平台的旧版本环境下可能编译不通过。保守起见笔试时尽量用自己最熟悉的经典写法而不是追求语法新特性。第三个坑是时间和空间复杂度估算不到位。笔试平台通常会给出数据范围这决定了复杂度上限。比如n的取值范围在10⁵量级O(n²)的算法大概率超时必须想O(n)或O(nlogn)的解法n在10³以内O(n²)可以接受。拿到题目先看数据范围再决定用哪种算法这个习惯要从平时练习就养成。3.4 编程题的核心备考方法如果离笔试还有一周以上不建议去啃LeetCode Hard题目性价比太低。正确做法是把LeetCode中Easy到Medium的题目按标签分类刷重点刷数组、字符串、哈希表、链表、二叉树、排序和二分查找这七类。每个分类刷5到10道熟悉常见套路就够了。更重要的是刷题时要有意识地练习“把思路先写出来再写代码”。笔试编程题的评分不只看最终代码有些平台还会保存你的代码提交记录和思路草稿。面试时面试官会翻看你笔试时的代码如果你代码旁边写了清晰的注释和思路过程会留下好印象。4. 逻辑智力题很多研发岗翻车的地方4.1 为什么研发笔试里会出现逻辑题校招笔试里的逻辑智力题本质上不是在考智商而是在考察思维的严谨性和结构化拆解问题的能力。研发岗日常工作中经常要面对需求不清晰的场景你需要把一个大问题拆成若干个小问题逐一推理验证。逻辑题的推理过程和这个思路是同构的。浩鲸科技的笔试题里也有这类题目。我记得有一道题是给出几个人说话的信息有人说真话有人说假话要判断某个结论是否正确。这类题在市面上有大量类似题目很多同学第一眼看到就懵了其实掌握方法后非常机械。4.2 经典命题逻辑题解法真假话问题“房间里三个人A说B在说谎B说C在说谎C说A和B都在说谎。问谁说真话。”这是典型的真假话问题。这类题的解法是假设法先假设某个人说真话再顺着逻辑往下推如果推出矛盾就换一种假设。这类题不需要什么高深逻辑学知识别慌列个表就能解。把三个人分别假设为真话者推演另外两个人的真假状态看是否自洽。我习惯的做法是假设A真那么B在说谎B说“C在说谎”为假所以C没有说谎C说真话但C说“A和B都在说谎”与A真矛盾。因此A不可能说真话。同理往下推最后一定能找到一个自洽的组合。4.3 逻辑题的常考套路除了真假话问题笔试还常见过桥问题、囚犯帽子问题、称球问题、数列找规律题。每种题型都有对应的解题套路。过桥问题的核心是“尽量减少返回时间”通常让速度最快的人多跑几趟或者让最慢的两个人一起过。做题时要记住“过桥必须有人拿手电筒返回”这个约束条件。数列找规律题考的是模式识别能力。常见的模式有前后项做差、做商、平方、立方、间隔组合、奇偶项分别成规律。如果你试了两三种常见规律都没找到不要死磕先跳过做后面的题有时间再回来看。这类题的分值通常不高不值得占用太多时间。4.4 遇到不会的逻辑题怎么办不要空着不写。逻辑题不像编程题有标准判题人工阅卷或者客观题判分时有一定概率的答案猜测分。先用排除法排除明显错误的选项再在剩余选项中选一个最合理的。如果剩余多个选项优先选那种“结论表述更严谨”的比如包含“可能”“在某些条件下”这类措辞的选项。另外一个实用技巧是把题目中的条件用符号或图形画出来。文字描述容易绕晕画成逻辑关系图或列表之后推理路径就直观了很多。这部分在草稿纸上完成即使最终答案不对推导过程留下的痕迹也好过一片空白。5. 备战时间线从拿到笔试通知到考前夜的安排5.1 前期整体准备按模块过知识点不搞题海战术校招笔试备考最忌讳的就是没有章法地刷题。我准备浩鲸科技笔试时采用的策略是分模块推进每个模块集中突击2到3天。第一个模块是数据结构与算法这是笔试的重中之重。用《剑指Offer》当主要参考书也行或者直接在LeetCode上按标签刷题。重点是链表、二叉树、栈与队列、哈希表、排序和二分查找这几个高频板块每天刷5到8道题保持手感和思路的流畅性。第二个模块是操作系统和计算机网络。这两门课不需要刷题而是把教材或笔记过一遍重点关注进程与线程、死锁、内存管理、TCP/IP、HTTP等高频考点。我当时是用思维导图的方式做了知识梳理每个知识点只看结论和关键细节不做大段摘抄效率很高。第三个模块是数据库和Linux。数据库重点练手写SQL尤其是分组、连接、子查询和聚合函数的组合用法。Linux就是刷几道选择题掌握前面提到的常用命令即可。这种分模块推进的方式两周左右可以把高频考点全部覆盖一遍。如果时间紧张至少要保证数据结构和计算机网络这两个模块完整过一遍因为它们考察的题量最大。5.2 笔试前一周如何突击考前一周的复习重心是查漏补缺。把之前刷过的错题和不清楚的知识点重新过一遍尤其是那些模糊记忆的边缘知识点比如TCP的TIME_WAIT状态、进程和线程在不同操作系统上的实现差异、各种排序算法的稳定性等。编程手感要保持。每天至少打卡1到2道题难度控制在Easy到Medium之间。练习的时候用在线笔试平台不只用本地的IDE适应一下没有代码补全的感觉。有的同学在本地IDE写代码有自动补全一到笔试平台就手生这是很正常的多练几次就能适应。另外考前一周值得做的事是模拟笔试。找一套其他公司难度相近的笔试题周末按照笔试时间完整做一遍。模拟时注意控制时间选择题一道题不超过一分半编程题每道不超过二十分钟。模拟的目的不是得高分而是提前感受时间压力找到自己做题节奏。5.3 考前一天和考试中的操作要点考前一天不要再接触新知识点了把整理的错题笔记和常考公式过一遍即可。准备一个草稿纸考前检查好电脑、网络和稳定的浏览器环境每一个在线笔试平台的操作方式都确认一下。考试中我的建议是分轮做题而不是按顺序。第一轮用10到15分钟快速浏览全部题目标记出自己确定会做的题和没思路的题第二轮先把会做的题都做完确保稳拿的分都拿到第三轮再集中攻克不太确定的题。最后留出至少20分钟来检查编程题重点检查输入输出格式、边界条件、数组越界和空值处理这些常见错误点。编程题如果卡住了超过15分钟没有任何思路先跳过。不跳过的话后面会越来越慌而且时间也被占用了。等整份试卷其他部分都做完了再回来想这时候心态会更从容思路反而更容易打开。6. 一些不容易在面经里看到的教训6.1 笔试不只是考试更是面试的“简历”这一点很关键。笔试的代码提交记录和答题结果面试官在技术面之前一定会看。面试时聊到笔试编程题如果你能清晰复述当时的解题思路甚至说出自己当时的不足和复盘结果面试官会刮目相看因为这证明了你的学习能力和自省意识。我当时笔试编程题里第一道题代码写得不太干净面式时被问到了。我没有回避直接说“当时用的split和reverse方法思路简单但没处理好连续多个空格的情况后来复盘时重新写了一个基于双指针的版本”。面试官点了点头这个话题就顺利过去了。所以笔试完不要觉得就结束了一定记得复盘尤其是编程题部分。6.2 知识体系比背题更重要很多人准备校招笔试靠背诵题库碰运气过笔试然后在面试环节被问出真实水平。这类通信软件公司面试节奏并不慢技术面试官会顺着你笔试中的知识点连环深挖如果只是背了答案很容易在追问中露馅。真正的做法是构建知识网络。比如面试官问到TCP三次握手你不仅要背出过程还要知道为什么不是两次、SYN Flood攻击是怎么回事、TIME_WAIT状态出现在客户端还是服务端、大量TIME_WAIT怎么处理。这些知识点在笔试里可能只是两道选择题在面试里却可以展开成十分钟的深度对话。准备笔试时多往深处问自己几个“为什么”相当于同时给笔试和面试做了准备。6.3 保持平稳心态比什么都重要校招笔试的淘汰率通常不低挂了也很正常。我身边很多同学在秋招早期多次笔试被刷后来反而拿到了满意的offer。笔试和面试本质上都存在运气成分状态、心态、题目刚好撞上自己熟悉的领域都会影响结果。如果某场笔试明显表现不好不要立刻陷入自我怀疑。等成绩出来前继续按自己的节奏准备下一家。笔试结束后认真复盘一次把没做出来的题目搞清楚把薄弱的章节补上然后翻篇。这个过程本身就是成长也是校招过程中最锻炼人的地方。最后分享一个我后来用得很顺手的做法专门建一个文档记录自己在不同公司笔试中的失误点积累到一定数量后考前翻一遍比临时刷题有用得多。这种“错题本”模式在校招季能帮你省下大量重复复习的时间减少在同一类坑里反复掉进去的概率。
返回列表