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

资讯详情

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

浩鲸科技2019校招算法笔试题复盘:高频考点与答题技巧

浩鲸科技2019校招算法笔试题复盘:高频考点与答题技巧 2019年秋招那阵我身边好几个同学都在投通信和互联网交叉背景的公司浩鲸科技就是其中被反复提到的名字。它前身是中兴软创后来有阿里等资本进来改名浩鲸科技主要做运营商BSS/OSS、政企数字化、大数据和人工智能应用。对于算法岗的同学来说这家公司的笔试题有个很明显的特点——杂。它不是只考LeetCode那种纯算法题而是会混着数据结构、机器学习、深度学习、信号处理甚至安全算法一起考。我整理了一份针对“浩鲸科技2019校招算法类笔试题”的复盘结合我当年备考时收集到的笔试回忆和社区讨论把高频考点、容易踩的坑、以及备考思路都梳理了一遍。这篇内容适合两类人看一是准备投通信/数字化服务商算法岗的应届生二是想了解校招算法笔试到底考什么、怎么准备的求职者。下面我按题型类别逐个拆。1. 为什么浩鲸科技的算法题会让人觉得“杂”很多人拿到这套笔试题的第一反应是“没有复习方向”。这不能怪你因为这类公司的算法岗本来就不是单一方向。要理解它为什么这么考得先搞清楚这家公司到底在做什么业务。1.1 从公司业务倒推考点范围浩鲸科技的业务核心在电信行业。运营商手里的数据量大、维度多用户通话记录、上网行为、位置信息、故障工单、网络告警这些都等着被处理。所以算法岗的需求大致分几类数据挖掘/机器学习方向做用户画像、精准营销、流失预警、异常检测、智能客服。这类岗位考察聚类、分类、回归、模型评估。平台/工程方向做推荐系统、搜索排序、规则引擎、实时计算。这类岗位考察数据结构、基础算法、工程设计能力。图像/信号方向做OCR、图像识别、语音处理、网络质量分析。这类岗位考察图像处理、信号处理、模式识别基础。笔试命题人通常会把这几类岗位的需求混在一张卷子里因为他们要筛的是“基础扎实、覆盖面广”的人而不是只会单一方向的。于是就有了你看到的那种“前面考KMP后面考K-Means最后还来一道PID控制”的混合卷。1.2 笔试结构的普遍形态与答题节奏根据我当时翻到的多份笔试回忆浩鲸科技2019届的算法笔试题型大致可以归纳为三块题型占比考察内容选择题/填空题30%数据结构、算法复杂度、机器学习概念、概率统计手写代码/编程题40%排序、DP、字符串匹配、图算法、数组处理问答题/综合题30%机器学习原理、业务场景方案设计整个考试时长一般在60到90分钟。我见过不少同学死在时间分配上——前面选择题纠结太久编程题没时间写完。我的建议是选择题如果超过2分钟还没思路先标记跳过编程题优先做自己最有把握的那道把基础分拿到问答题留15分钟以上因为这类题考察的是思路完整性写完框架就能拿一半分。2. 基础算法题盘点从KMP到堆排序的必拿分项无论是哪家公司的算法笔试数据结构与基础算法永远是大头。浩鲸科技这张卷子也不例外而且它的考法相对传统重点集中在字符串匹配、排序、贪心、图论最短路和快速幂这几个方向。2.1 KMP的next数组字符串题的绝对高频网上关于“浩鲸科技算法笔试题”的讨论里KMP算法是被提得最多的一个。特别是模式串next数组的计算几乎是标配题目。热词里那个例子就很有代表性模式串 p abacaba要你求next数组。这里我先提醒一个坑next数组的定义在不同教材里并不完全一样。有的教材用的是“最长公共前后缀长度”有的教材用的是“失配时模式串跳转的位置”还有的会约定next[0] -1还是next[1] 0。做题前一定先看题目给出的定义再按它的规则算否则你算出来的结果和答案对不上会白白丢分。按“最长公共前后缀长度”这个定义来计算vectorint getNext(string p) { int n p.size(); vectorint next(n, 0); for (int i 1, j 0; i n; i) { while (j 0 p[i] ! p[j]) j next[j - 1]; if (p[i] p[j]) j; next[i] j; } return next; }对 p abacaba逐位计算i 0: next[0] 0i 1子串 ab最长公共前后缀长度为0next[1] 0i 2子串 aba前缀a等于后缀a长度1next[2] 1i 3子串 abac无公共前后缀next[3] 0i 4子串 abaca前缀a等于后缀a长度1next[4] 1i 5子串 abacab前缀ab等于后缀ab长度2next[5] 2i 6子串 abacaba前缀aba等于后缀aba长度3next[6] 3结果就是 {0, 0, 1, 0, 1, 2, 3}。这道题的关键不是背代码而是理解“回退”的逻辑当字符不匹配时利用已经匹配的部分信息让模式串尽量多往后滑动而不是从头再来。2.2 排序与TopK堆排序为什么会反复出现排序算法在笔试里是“不可能不考”的内容。浩鲸科技的选择题喜欢考各种排序算法的复杂度、稳定性、适用场景比如排序算法平均时间复杂度空间复杂度稳定性冒泡排序O(n^2)O(1)稳定快速排序O(n log n)O(log n)不稳定堆排序O(n log n)O(1)不稳定归并排序O(n log n)O(n)稳定编程题里最喜欢考的是堆排序但它大部分时候不直接问“请实现堆排序”而是包装成TopK问题在一个长度为n的数组里找最大的K个数。标准解法就是用大小为K的最小堆堆顶是当前K个数里的最小值遍历到比堆顶大的元素就替换并调整堆。C里直接可以用priority_queuevectorint topK(vectorint nums, int k) { priority_queueint, vectorint, greaterint pq; for (int num : nums) { if (pq.size() k) { pq.push(num); } else if (num pq.top()) { pq.pop(); pq.push(num); } } vectorint res; while (!pq.empty()) { res.push_back(pq.top()); pq.pop(); } return res; }为什么强调堆排序因为它在海量数据场景下不需要把所有数据都加载进内存只需要维护K个元素的堆。这在电信行业的日志分析、用户行为统计里非常实用所以笔试爱考它不是没有原因的。2.3 贪心、Dijkstra与快速幂经典题的常见变形这几类题在浩鲸科技笔试里出现的频率也相当高。贪心算法考的是区间调度、任务安排、跳跃游戏这一类。核心就是证明“局部最优能推出全局最优”但笔试通常不要求严格证明你只要写出贪心策略并解释为什么合理就行。Dijkstra算法考得最多的是堆优化的版本。你要能写出来vectorint dijkstra(vectorvectorpairint, int graph, int src) { int n graph.size(); vectorint dist(n, INT_MAX); dist[src] 0; priority_queuepairint, int, vectorpairint, int, greaterpairint, int pq; pq.push({0, src}); while (!pq.empty()) { auto [d, u] pq.top(); pq.pop(); if (d dist[u]) continue; for (auto [v, w] : graph[u]) { if (dist[u] w dist[v]) { dist[v] dist[u] w; pq.push({dist[v], v}); } } } return dist; }快速幂也是高频题它考的其实是“怎么用O(log n)的复杂度计算a^b mod m”。迭代写法很经典long long fastPow(long long a, long long b, long long mod) { long long res 1; while (b 0) { if (b 1) res res * a % mod; a a * a % mod; b 1; } return res; }这里有一个笔试很容易踩的坑很多人忘了取模导致大数溢出。题目如果用C写long long都不一定够必须边乘边取模。这类题目拿分不难但就是考你有没有在细节上吃过亏。3. 机器学习与深度学习题型算法岗的第二战场浩鲸科技毕竟不是纯粹的互联网大厂它的算法岗更看重“算法在业务里能不能落地”。所以机器学习相关的题目占比不低而且考法比基础算法更灵活。3.1 聚类、KNN与XGBoost基础模型题怎么考K-Means是选择题常客考的通常是K-Means的流程初始化中心点、分配样本、更新中心点、重复、如何选K肘部法则、K-Means的缺点对初始中心敏感、只能发现球形簇、受离群点影响大。KNN也是高频考点。我记得网上有人讨论过“KNN算法的应用能力包括哪三个方面”这种题其实就是考KNN能做什么分类、回归、异常检测/推荐。同时还会问K值怎么选交叉验证、距离度量方式欧氏距离、曼哈顿距离、为什么要归一化因为距离计算受量纲影响很大。XGBoost在问答题里出现的概率很高。它的核心改进点要能说出来在损失函数里加入正则项控制模型复杂度对损失函数做二阶泰勒展开比GBDT只用一阶信息更精确支持列抽样、并行化训练能自动处理缺失值不需要你把整个公式推导一遍但至少要知道它比GBDT强在哪里、正则项怎么起作用、分裂增益怎么计算。这些都是面试官考察“你是真懂还是只会调库”的关键点。3.2 深度学习与强化学习的考点边界深度学习在笔试里不会考特别深但基础概念一定绕不开过拟合的解决方法正则化、Dropout、数据增强、早停、Batch Normalization的作用加速收敛、缓解梯度消失/爆炸、常见激活函数ReLU、sigmoid、tanh的区别、常见损失函数交叉熵、MSE的适用场景。强化学习的考法更偏概念比如MDP五元组状态、动作、转移概率、奖励、折扣因子、Q-Learning的更新公式、探索与利用的权衡epsilon-greedy。如果你投的不是强化学习方向的岗位能把概念讲清楚就够用了。3.3 异常检测工业场景的数据题热词里有“工业异常检测算法”这类题在浩鲸科技的考卷里通常以问答题或方案设计题出现场景一般是对电信设备的告警数据做异常检测或是对用户行为识别异常。常见的解法思路要能铺开说统计方法Z-score、3σ原则距离方法KNN、LOF局部离群因子树模型孤立森林随机划分特征异常点更容易被单独切出来深度方法AutoEncoder用正常数据训练异常样本的重构误差大答这种题的关键不是把算法名罗列出来而是要说清楚“为什么选这个方法”——数据量多大、特征是什么、异常的定义是什么、对实时性要求多高。这些因素直接决定算法选型。4. 信号处理与控制类算法题容易被忽视的加分项这一块是很多科班CS出身的同学会忽略的。但浩鲸科技有很强的通信基因所以卷子里偶尔会冒出几个信号处理或控制类的算法题难度不高但你不了解就会无从下手。4.1 PID、卡尔曼滤波与FOC的适用场景PID控制是选择题或填空题的高频词。你要知道P比例、I积分、D微分各自的作用比例项加快响应积分项消除稳态误差微分项抑制超调。热词里提到的“增量式PID”也会考它输出的是控制量的增量适合执行机构带记忆的场景比位置式PID更平滑。卡尔曼滤波考的是概念框架状态预测 观测更新最优估计 预测值 卡尔曼增益 ×观测值 - 预测值。它解决的是传感器有噪声的情况下怎么估计真实状态的问题在定位、导航、目标跟踪里非常常用。答题时画不出流程图没关系把两个核心公式阶段说清楚就行。FOC是电机控制的磁场定向控制这类题如果出现通常是定位在“嵌入式/硬件方向”的选择题里比如问FOC的坐标变换Clark变换、Park变换的作用。如果你投的是机器学习和数据挖掘方向这个可以战略性放弃不用花太多时间。4.2 图像与音频算法Sobel、拉普拉斯与重采样图像算法在浩鲸科技笔试里出现频率不算高但如果你报了图像算法岗就得掌握Sobel算子和拉普拉斯算子。Sobel是一阶梯度算子用于边缘检测它通过两个方向的卷积核水平、垂直计算梯度幅值。拉普拉斯算子是二阶导数算子零交叉点对应边缘常用于图像锐化。音频重采样也是热词里的一个方向。它的本质是采样率转换比如把44.1kHz的音频转为48kHz。实现思路有线性插值、多项式插值、抽取和插值组合。笔试一般不考具体代码而是考概念比如“重采样后信号频谱会发生什么变化”“如何避免混叠”。4.3 国密算法与安全类题目的基本盘热词里出现的“SM2、SM3、SM4和ZUC算法”是国密算法家族的四个核心算法也可能出现在安全相关岗位的题目里。SM2是非对称加密算法类似RSA/ECCSM3是密码杂凑算法输出256位哈希值SM4是对称分组密码算法分组长度128位ZUC是序列密码算法流密码主要用在移动通信的加密中。如果你投的是平台开发或安全方向这几个算法的基本定位、在什么场景用哪个要能说清楚。比如在运营商系统里业务数据加密用SM4身份认证和签名用SM2完整性校验用SM3。答这个不需要背底层实现但要知道选型逻辑。5. 一道实战题的完整答题复盘前面讲的是题型分类但光分类不够我拿一道我当年复习时反复琢磨的题目来演示一下完整的答题思路。这道题不是原题但非常贴近浩鲸科技可能出的综合题风格。5.1 题目原型与解题思路假设题目是这样给定电信运营商某小区一周内每天24小时的基站负载数据每小时一个点共168个点要求找出负载异常的时间段并输出异常原因的可能性排序。拿到这种题第一步不是立刻写代码而是拆解需求判断“异常”用什么标准是超过历史均值±2倍标准差还是与前一天同一时刻对比波动超阈值数据粒度是小时级要不要先做平滑处理异常检测之后怎么定位原因需要关联哪些维度的数据我的答题框架会分成四步数据预处理缺失值填充线性插值、去除离群点、按天/时段做归一化。异常检测采用滑动窗口 Z-score方法窗口大小取24小时计算每个点的Z值大于阈值则标记为异常。根因分析统计异常时段在不同维度小区、业务类型、天气、活动上的分布用卡方检验或信息增益找相关性最高的维度。结果解释不只输出“哪些时段异常”还要输出“为什么异常”用可解释的规则给运营人员提供参考。这道题考的不是某个高深算法而是你有没有完整的分析思维。当时我一个师兄告诉我一句话我至今记得笔试里的业务题宁可把方案写得朴素但完整也不要去堆一堆自己都说不清楚的高级模型。5.2 我踩过的边界条件坑这类实战题在编写代码部分时有几个坑我当年都踩过输入数组长度为0时直接访问下标会崩溃。计算Z-score时如果窗口内标准差为0比如数据全部相同分母为0会得到inf。用全局均值判断异常忽略了周期性凌晨低峰和白天高峰的“正常”范围完全不同。时间序列的排序问题原始数据按时间排好序没如果题目没说要先排序再处理。在笔试有限的90分钟里能把边界条件想全并写出来已经能超过大半竞争者。因为很多人笔试挂掉不是不会做而是没把“输入可能为空”“数据可能全相等”这种测试点考虑进去导致提交的代码过不了隐藏用例。6. 备考反思刷题之外的准备工作最后聊一点我在多次校招笔试后复盘出来的体会。技术实力肯定是基础但这类通信互联网混合背景的公司笔试筛人还有几个隐藏维度。6.1 对业务流程的理解比偏题更重要我见过有同学在准备浩鲸科技笔试时把大量时间花在刷竞赛难度的线段树、平衡树上结果基础题翻车。这类公司的算法笔试题虽然杂但难度都控制在校招常规范围内基本不会考偏难怪。它真正的筛选点是“你能不能把算法和业务场景连起来”。比如前面讲的异常检测题如果你能先提到“电信数据的周期性”——忙时和闲时差异很大——再用滑动窗口的思路去设计分数会比那些直接套孤立森林的同学高很多。6.2 给下一届考生的建议总结下来针对这类“科技公司校招算法类笔试”我觉得最高效的备考策略是把KMP、堆排序、快速幂、Dijkstra这几类高频基础题做熟手写代码要流畅到10分钟以内。机器学习重点复习K-Means、KNN、XGBoost、过拟合与正则化概念要能用自己的话说出来。找几道异常检测、用户画像类的业务方案题练手提前准备一套通用的答题框架。做题顺序永远是先做会的再啃不会的选择题卡住就跳过别恋战。我个人在整理这份复盘的时候最大的感受是这种笔试题的信息量远大于算法本身。它其实是在用一张卷子告诉你这家公司希望你是一个“什么都知道一点、并且能把知识用到业务里”的人。想明白这一点你就能知道时间该花在哪了。
返回列表