尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

互联网开发岗笔试核心:从唯品会秋招B卷看算法与基础四大件

互联网开发岗笔试核心:从唯品会秋招B卷看算法与基础四大件 考过互联网公司开发岗笔试的人看到唯品会2019秋招开发B类试卷这个标题应该都不陌生。当年我准备校招的时候把这套题翻来覆去研究了好几遍后来又经历了不少家公司的实际笔试回头再看这套试卷发现它的命题思路特别有代表性不刻意刁难人也不放水正好卡在基础扎实的人能过、临时抱佛脚的人会挂这条线上。这篇文章就围绕这套B类卷把开发岗笔试真正会考的东西、复习重点和考场上的实操策略一次说清楚。1. 先看清楚这套试卷到底在考什么1.1 开发类试卷的通用考察框架先说个基本判断像唯品会这种体量的电商公司秋招笔试的核心目的不是选拔天才而是海选过滤。一个岗位收到几千份简历笔试要在有限时间内把技术底子不行的人筛掉所以题目设计一定是以基础为主、以广度为主不会在某个犄角旮旯的知识点上死磕你到底。开发B类卷面向的是开发岗对应的就是最通用的那套知识框架业界俗称四大件加一门语言数据结构与算法、操作系统、计算机网络、数据库再配上你熟悉的编程语言特性题。这套框架不是某一家公司发明的而是整个校招市场用多年时间沉淀出来的共识。数据结构与算法是区分度最高的部分因为它既考察逻辑思维又考察编码基本功没法靠死记硬背混过去。操作系统、网络、数据库这三门课决定了一个人能不能理解真实的生产环境——你做开发总要跟进程线程打交道、总要调接口、总要写SQL这些基础不牢后面做项目一定会踩坑。开发岗的通用性决定了它不会像算法岗那样深挖数学推导也不会像测开岗那样偏重测试理论更不会像前端岗那样围绕浏览器渲染大做文章它的题目分布相对平均但算法永远是分值大头。1.2 B类试卷在招聘流程中的位置唯品会2019秋招的笔试分成不同类型B类卷具体对应哪个岗位方向不同年份略有差异但从行业惯例来看开发B类通常是面向后台开发、业务开发这类通用开发岗位的试卷和偏向底层、偏向算法的A类卷做区分。A类卷更看重算法和系统设计能力B类卷则更看重能不能踏踏实实写业务代码的综合素养。这意味着什么意味着你在准备这类试卷时不要一门心思钻难题。把基础模块学扎实把常见题型的套路吃透比死磕一道冷门难题划算得多。我当时备考时犯过一个错误天天刷困难级别的算法题结果上了考场发现真正决定我能不能进面试的是那些看起来太基础的选择题和中等难度的代码题。B类卷的难度曲线通常是一条缓坡前面的送分题你得全拿中间的常规题尽量别丢分最后的大题要能写出一个能跑通核心逻辑的版本这套组合拳打下来成绩就不会差。2. 数据结构与算法最值得投入时间的主战场2.1 高频考点线性表、树与常见算法套路数据结构与算法在开发笔试里通常占30%到40%的分值而且往往是拉开差距的关键。参考同类电商公司的命题习惯以下几个方向在B类卷里出现的概率极高。线性表是必考的基础。链表反转、链表中环的检测、两个链表的交点、合并两个有序链表这些题目几乎是校招笔试题库里的钉子户。它们看似简单却非常考验你对指针或者引用操作的理解。以链表反转为例迭代法需要维护prev、cur、next三个指针很多人在考场上一紧张就把next指针的保存顺序写反了导致死循环或者链表断裂。这种题目拿到手第一件事不是动笔写代码而是在脑子里把指针移动的过程过一遍。栈和队列经常以用两个栈实现队列用队列实现栈单调栈解决下一个更大元素等形式出现。单调栈这类题目有个特点看不出来的时候觉得无从下手一旦你理解它的思路——维护一个栈内元素单调递增或递减的结构每个元素最多入栈出栈一次——就会发现它能统一解决一大类问题比如柱状图中最大的矩形、接雨水这些经典题。二叉树更是重灾区。前中后序遍历的递归与迭代两种写法、层序遍历、二叉树的最大深度、最近公共祖先、判断一棵树是否为二叉搜索树这些题目在笔试中反复出现。需要特别提醒的是很多同学递归写得很顺但一到迭代写法就卡壳因为迭代需要显式维护栈或队列还要考虑入栈顺序。笔试环境里万一遇上面试题要求你手写非递归版本平时就要把两种写法都练熟。排序和查找也不能忽视。快排、归并排序、堆排序的实现细节要烂熟于心尤其是快排的partition函数、归并排序的合并过程、堆排序的建堆与调整。这些排序算法不只是为了应付手写排序这种直白题目更重要的是它们的思想会渗透到其他题目里比如找第K大的数就用了快排的partition思想归并排序还能顺带解决逆序对问题。2.2 动态规划与贪心的判断思路动态规划是很多人笔试时的噩梦但它的考察范围其实非常固定。背包问题01背包、完全背包、最长递增子序列、最长公共子序列、编辑距离、不同路径棋盘走法、爬楼梯变种这些是校招笔试里出现频率最高的几个DP模型。把这些模型吃透考场上碰到的DP题大概率是它们的变形。做题时判断能不能用动态规划核心看两点第一问题是否有最优子结构也就是大问题的最优解能否由子问题的最优解推导出来第二是否有重叠子问题也就是递归求解时会不会反复计算同一个子问题。以爬楼梯为例爬到第n阶的方法数等于爬到第n-1阶的方法数加上爬到第n-2阶的方法数这就是典型的最优子结构和重叠子问题。判断出模型之后下一步就是定义状态、写状态转移方程、确定初始化和遍历顺序。贪心算法在笔试里通常只考最经典的那几个场景比如区间调度选最多的不重叠区间、跳跃游戏、分发饼干、找零钱问题。和动态规划相比贪心考察的更多是你对问题本质的洞察力。我自己的判断方法是先想想局部最优的选择能不能推导出全局最优如果直觉上可以再尝试举反例验证。举不出反例时贪心大概率是对的但为了稳妥笔试环境里如果时间充裕可以用暴力法在小数据量下验证一下思路。关于刷题量我个人的经验是按题型分类刷比按题目难度刷更高效。链表、树、DP、字符串、搜索各刷几十道经典题把每道题的思路理清楚比盲目刷几百道却每道都只过一遍效果要好得多。3. 语言基础与专业功底笔试里的基本功题3.1 面向对象与语言细节题怎么准备开发B类卷里通常有十几道单选题考察编程语言基础。这类题分两种一种是纯粹的语言语法题比如Java里final、finally、finalize的区别重载和重写的区别HashMap的底层实现原理另一种是代码输出题给你一段代码让你判断运行结果考察的是你对变量作用域、静态变量、继承时初始化顺序、异常处理流程这些细节的掌握程度。以Java为例我觉得最值得重点准备的几个点包括String、StringBuilder、StringBuffer的区别和底层实现HashMap在JDK 1.7和1.8中的不同实现数组链表 vs 数组链表红黑树、扩容机制ArrayList和LinkedList的底层结构与增删改查的时间复杂度synchronized和volatile的区别线程池的核心参数和拒绝策略JVM内存区域划分和垃圾回收的基本策略。这些知识在笔试题里反复出现而且面试时也经常追问属于性价比极高的复习内容。如果你选的语言是C重点就要放在指针和内存管理上指针和引用的区别、深拷贝与浅拷贝、构造函数和析构函数的调用时机、虚函数和多态的底层原理、vector和list的区别。如果公司用的技术栈偏PHP唯品会早年Web层有不少PHP还可能考到PHP的数组底层实现哈希表、变量作用域、面向对象的魔术方法等。这里有个技巧临近笔试前把你常用语言的基础概念整理成一页纸的清单每天晚上快速过一遍。这种看似简单的题丢分最可惜因为它的答案是确定的只要你复习过就一定能答对。3.2 数据库、网络、操作系统三大件数据库这块SQL编写题几乎是开发岗笔试的标配。多表连接查询、子查询、分组聚合、排序分页这些基础SQL要写得又快又准。除了写SQL还有一类必考的理论题索引的底层数据结构为什么用B树而不是红黑树事务的ACID特性事务隔离级别以及每种隔离级别对应的并发问题脏读、不可重复读、幻读InnoDB和MyISAM两种存储引擎的区别最左前缀原则。以B树为例你要能从减少磁盘IO次数这个角度回答B树的高度低、非叶子节点不存数据所以存储的键多、叶子节点用链表串联方便范围查询这三点是它成为数据库索引首选结构的关键原因。计算机网络的重点也相当集中。TCP三次握手和四次挥手的过程以及为什么要三次而不是两次TCP和UDP的区别HTTP常见状态码的含义200、301、302、403、404、500、502HTTP和HTTPS的区别TCP的流量控制和拥塞控制。每年校招笔试都有一堆人栽在三次挥手还是四次挥手这种细节记忆上我建议画图记忆把每次握手时客户端和服务端的状态变化、传输的报文标志位写清楚比死记文字更牢固。操作系统的高频考点是进程和线程的区别进程间通信方式管道、消息队列、共享内存、信号量等死锁产生的四个必要条件互斥、持有并等待、不可剥夺、循环等待以及怎么避免虚拟内存和页面置换算法FIFO、LRU等进程调度算法。这些知识看似零散但都可以用一条主线串起来操作系统是管理计算机硬件资源、为进程提供运行环境的软件所有的机制设计都是为了更高效地利用资源、更公平地调度任务。3.3 选择题之外的简答题B类卷里偶尔会出现一两道简答题比如从浏览器输入URL到页面展示发生了什么或者如何设计一个短链接系统。遇到这种题最重要的不是给出标准答案而是展示你的思维框架。第一类题按层次展开DNS解析、TCP连接、HTTP请求、服务器处理、响应返回、浏览器渲染每一层说清楚发生了什么。第二类题按系统设计的基本思路展开需求分析QPS、存储量、核心流程、存储方案设计、可能的瓶颈和优化手段。无论会不会做都要把能想到的步骤写上去。这类题没有标准答案踩点给分多写一步就多一分希望。我见过不少同学遇到简答题直接空着这非常可惜哪怕只写出关键步骤也能体现出你的思考过程。4. 考场实战手写代码与做题顺序的细节4.1 先扫全卷再动手笔试一开始先别急着做题用两三分钟把整张试卷从头到尾扫一遍。这一步有两个作用一是了解题量判断后面有没有大代码题据此调整时间分配二是先看一眼最后一道算法题的类型因为人的大脑有酝酿效应你先有了印象做前面题目的时候潜意识会帮你思考等做到最后一道题时说不定思路已经自动成形了。我自己的习惯是把试卷按题型分成三类来排优先级第一优先级送分题比如简单的语法题、概念判断题快速做完确保全对。第二优先级常规算法题和SQL题这些题分数多、思路固定值得花时间仔细做。第三优先级难题和简答题最后集中攻关能做多少做多少。这个顺序的核心逻辑是先把确定性高的分数拿到手再处理不确定的部分。如果一开始就卡在难题上容易导致后面会做的题来不及写最后分数反而更低。4.2 手写代码题的几个实操注意点在线笔试的手写代码和本地IDE写代码完全是两种体验没有自动补全、不能编译调试部分平台支持但不稳定、还要注意缩进和语法。有几个坑是高频出现的。第一个坑是在代码里用了不存在的库函数。比如在Java里写了一个Arrays.sort就完事了但平台可能不允许导入额外的包或者你记不清某个方法的准确签名。解决办法用最基础的语言特性写能用for循环和临时变量搞定就不要依赖冷门API。排序就用自己手写的快排反转字符串就自己遍历虽然代码长一点但至少能保证逻辑正确。第二个坑是边界条件没考虑清楚。数组为空、链表只有一个节点、二叉树是空树、目标值在数组的第一个或最后一个位置这些边界情况往往是隐藏的测试用例。写代码前先明确如果输入是空应该返回什么。养成这个习惯能帮你避免大量因为数组越界或者空指针导致的失败用例。第三个坑是死循环和超时。笔试平台的用例通常有时间限制如果你的解法复杂度过高即使逻辑对了也可能被判超时。所以动手前一定要先估算一下时间复杂度如果数据量是10的5次方O(n²)的解法大概率过不了需要想O(n)或者O(nlogn)的解法。同时要注意循环的退出条件尤其是while循环里修改循环变量的位置写错很容易死循环在笔试环境里死循环会直接拖垮整份试卷的运行。4.3 大题时间分配的参考方案假设一场笔试120分钟题量大概在20到25道选择题加2到3道编程题。我常用的时间分配方案是选择题控制在40到50分钟每道题不超过2分钟拿不准的先标记跳过回头再战剩下的时间全部留给编程题每道题至少预留20分钟。如果编程题有两道先做自己更有把握的那道把稳定的分拿到手再去啃难题。写代码题时我的习惯是先在草稿纸上写下核心思路和关键的数据结构再开始写代码。有时候看起来复杂的题目把思路理清楚后代码量其实很少。写上关键注释也能帮助自己理清逻辑。如果做到一半发现思路错了果断放弃重来别在错误方向上浪费太多时间。5. 备考复盘从这套题延伸出的复习路线5.1 按优先级划分四轮复习结合这套B类卷的考察范围我建议有充分备考时间的同学按四轮路线走。第一轮基础扫盲把数据结构与算法、操作系统、计算机网络、数据库四门课的核心知识点过一遍。目标是提到一个概念能说清楚是什么不追求深入。这一轮可以用教材配套的习题和历年真题来检验掌握程度。第二轮专项刷题集中刷算法题按链表、栈队列、树、图、字符串、动态规划、贪心分类逐个击破。每类题型刷到看到题目能快速定位到对应解法的程度。同时整理语言基础常见选择题比如Java的集合框架、异常机制、并发相关把易错点记到笔记里。第三轮模拟实战找几套同类公司电商、互联网大厂的历年真题严格按考试时间模拟。这一轮的重点不是做题本身而是适应考试节奏、练习时间分配、发现自己的薄弱环节。模拟完之后一定要认真复盘把做错的题和蒙对的题都重新理解一遍。第四轮考前冲刺只看笔记和错题本不再做新题。把重要的结论、代码模板比如链表反转的代码、快排的代码、二分查找的模板再过一遍保持手感和信心。四轮复习的总时长因人而异科班基础好的同学可能两个月就够跨专业的同学建议至少预留三个月。关键是每一轮的目标要清晰不要在第一轮就陷进某个难懂的知识点出不来那样反而耽误了整体的复习进度。5.2 我后来才想明白的几个道理复盘这套笔试备考经历有几个道理是我踩过坑之后才真正理解的。第一个道理是基础知识的优先级永远高于偏难怪题。秋招笔试是海选命题人的第一目标是筛人而不是难倒所有人所以试卷里大部分题目都是常规题。你花三个小时研究一道冷门的竞赛题不如花三个小时把B树索引、TCP的连接管理、HashMap的扩容机制这些常用知识彻底吃透。后者在笔试和面试中的回报率要高得多。第二个道理是代码题不必追求完美但一定要有产出。很多同学看到一道难题觉得自己的解法不够优雅就一直不肯动手写。但在笔试环境里能跑通的暴力解法也远好于空白一片。先把朴素解法写出来拿到基础分如果时间充裕再优化这个策略在代码题上几乎总是最优的。第三个道理是复盘比刷题重要。同一道题第一次做错了如果不复盘第二次遇到大概率还会错。我备考时会准备一个错题本记录每道错题的错误原因知识点不熟、思路错误、边界漏考虑和正确解法每隔几天翻一遍。错题本上的内容才是你真正的薄弱环节针对性地补弱效率远高于盲目刷新题。第四个道理是身体状态和心态也是考试的一部分。笔试通常持续一到两个小时长时间盯着屏幕、高强度思考非常消耗精力。考前保证充足的睡眠比熬夜多刷一套题更有用。遇到不会的题深呼吸先跳过去做后面的别让一道题影响整场考试的心态。这套唯品会2019秋招开发B类试卷只是校招路上无数套卷子中的一套但它的考察结构和命题逻辑在互联网公司开发岗笔试中非常有代表性。认真研究一套这样的卷子吃透它背后的知识体系你的收获绝对不止是这一场笔试的分数。把这个框架内化成自己的知识网络后续无论遇到哪家公司的开发岗笔试你都会发现考来考去核心永远都是那些最扎实的东西。
返回列表