唯品会校招笔试B卷复盘:五大技术岗考点与复习指南

发布时间:2026/8/31 19:01:09
唯品会校招笔试B卷复盘:五大技术岗考点与复习指南 1. 整体思路校招笔试B卷到底在考什么先聊两句怎么看这份卷子。唯品会2018校招的笔试题名义上是前端、Java、运维、测试、数据库五个岗位共用一套B卷但拆开看它其实不是五个方向各出各的题而是把所有技术岗的候选人统一放在一张卷子里通过不同类型的题目来筛“基础扎实不扎实、思维清不清楚”的人。这种设计在校招里很常见尤其电商大厂因为校招生进来之后都要经历一段轮岗或团队调配所以笔试阶段更看重通用基本功而不是你背了多少框架API。这套卷子覆盖的五个方向看起来跨度大但本质上围绕一条主线一个请求从浏览器出发经过前端页面、应用服务器、数据库再到监控、测试、运维保障整条链路涉及的技术点都要有所了解。前端考的是页面怎么渲染、数据怎么交互Java考的是后端逻辑怎么组织、JVM和并发怎么处理运维考的是服务怎么部署、网络怎么排查测试考的是质量怎么保障、用例怎么设计数据库考的是数据怎么存储、查询怎么优化。所以这篇复盘我不打算一道题一道题地列答案而是把这五个方向拆开把每类题背后的考点、常见题型、答题思路、容易踩的坑还有对应的复习方法都过一遍。毕竟笔试只是第一关后面还有面试你从笔试题里悟出来的东西面试时照样用得上。适合谁看准备校招或跳槽的应届生、想转行做技术的朋友还有想快速了解互联网公司技术面试套路的在职开发。不管你考的是哪个岗位读完之后至少能明确一件事刷题不是背题而是把每个知识点背后的“为什么”想清楚。2. 前端方向不是只会调页面就够了2.1 前端笔试题的真实考点分布唯品会这套B卷的前端题核心考点可以归纳成四块基础语言HTML/CSS/JavaScript、浏览器与网络、框架与工程化、手写代码。校招阶段不会太为难你不会要求你手写一个Vue3响应式系统但一定会考你对基础概念的理解深度。基础语言部分高频出现的题型包括CSS盒模型的理解标准模型和怪异模型的区别、块级元素和行内元素的区别、JavaScript闭包和作用域链、事件冒泡与事件委托、this指向问题、原型链继承。这些题目看着基础但很多候选人栽跟头就栽在“好像知道一说就乱”上面。浏览与网络部分常见考题有从输入URL到页面显示发生了什么、HTTP和HTTPS的区别、浏览器缓存机制强缓存和协商缓存、跨域问题及解决方案、Cookie和Web Storage的区别。这些属于前端面试的“必考题”笔试出现概率极高。框架与工程化部分2018年的笔试题更多围绕Vue或React的基础生命周期、组件通信方式、双向绑定原理、虚拟DOM概念。现在看可能觉得简单但当年这些题已经能筛掉不少只会用脚手架的选手。手写代码部分一般会有防抖节流、深拷贝、数组去重、实现一个简单的Promise、手动实现call/apply/bind。这类题考的是“你到底是会用还是真懂”。2.2 那些容易答错的JS基础题我拿几个当年高频出现的题目展开说一下因为这些题到现在依然出现在各种前端面试中。第一个是闭包经典题for (var i 0; i 5; i) { setTimeout(function() { console.log(i); }, 1000); }输出结果是什么答案不是0、1、2、3、4而是5个5。原因很简单var声明的i是函数级作用域setTimeout的回调函数在1秒后才执行那时候循环已经结束i已经变成了5。改成let声明后每次循环都会创建一个新的块级作用域setTimeout闭包捕获的是每次循环的i副本输出就是0到4。再到面试官如果追问怎么用var实现同样效果就得答出立即执行函数或者bind传参的写法。第二个是this指向问题var obj { name: test, getName: function() { console.log(this.name); } }; var fn obj.getName; fn();这里的输出是undefined原因在于this是在函数执行时确定的fn()在全局环境执行this指向window而window上没有name属性或者实际环境中可能有其他值所以输出undefined或全局变量值。这个知识点必须理解透彻因为它直接关系到事件绑定、Vue methods中this的处理、React事件处理函数的bind操作。第三个是事件委托。笔试题常问ul下面有1000个li如何给每个li绑定点击事件如果直接循环绑定1000个事件监听器性能差且动态添加的li没有事件处理函数。事件委托的做法是只在ul上绑定一次事件通过event.target判断点击的是不是li再执行对应逻辑。这个方案的好处是内存占用低、动态元素自动生效。2.3 框架题在当年和现在的差异2018年那会儿Vue已经比较火了React也稳定。笔试题里常见的是Vue的computed和watch有什么区别、父子组件通信有哪几种方式、v-if和v-show的区别、简述Vue的响应式原理。这些题现在依然是面试常客但考察深度明显提升了。当年回答“computed有缓存watch没有缓存”基本就能拿分现在面试官会追问“computed底层是怎么实现的缓存”“watch是深监听还是浅监听”“Vue3的Proxy相比Vue2的Object.defineProperty解决了什么问题”。我建议复习时不要只看结论而是要看源码的实现思路。比如v-if和v-show的区别结论是v-if直接销毁重建DOMv-show通过display:none控制显隐。但真正的加分回答要补充初始渲染条件为false时v-if不会渲染元素v-show会渲染但隐藏频繁切换用v-show条件很少改变用v-ifv-if有更高的切换开销v-show有更高的初始渲染开销。对校招笔试来说能答到这个深度基本就超过大部分候选人了。2.4 前端方向笔试复习建议先列一个优先级JavaScript基础 浏览器与网络 CSS基础 框架原理 工程化工具。JS基础是重中之重闭包、原型、作用域、this、异步回调/Promise/async await这些必须滚瓜烂熟它们占了前端笔试题的一半以上。CSS方面重点看盒模型、定位、Flex布局、Grid布局。2018年那会儿Grid还不太普及但现在考的概率明显上升。移动端适配rem、vw、媒体查询也是高频考点建议花时间整理一下。推荐的练习资源力扣上简单的算法题保持手感JavaScript高级程序设计红宝书过一遍基础章节Vue或React官方文档重新精读刷题平台可以用牛客网和力扣。笔试前一定要自己动手把常见的手写题防抖、节流、深拷贝、Promise默写一遍不要只停留在看懂的水平。3. Java方向八股文只是敲门砖拼的是底层理解3.1 Java笔试的核心知识板块Java岗在校招笔试中的地位是“题量最大、深度最广”的。唯品会B卷里的Java题涵盖面大致包括Java基础语法集合、异常、泛型、反射、JVM内存区域、垃圾回收、类加载、并发编程线程安全、锁、线程池、Spring框架、MySQL这个后面单独说、计算机网络、数据结构与算法。你去看那些“Java面试八股文”的总结基本就是围绕这些板块整理的。笔试阶段可能不会直接考八股文式的概念题但会通过选择题、填空题、代码阅读题来间接考察。比如给你一段多线程代码问最后输出什么、有没有线程安全问题给你一个类加载过程的描述判断哪一步有问题给你一个HashMap插入和扩容的代码问底层数组怎么变化。这里我要多说一句Java方向笔试算法题也是跑不掉的。一般1到2道中等难度的算法题常见考点包括数组、字符串、链表、二叉树、动态规划。时间有限的情况下优先刷高频题不用追求题海战术。3.2 JVM和并发拉开分差的关键在校招笔试里JVM和并发是区分度和含金量最高的两个板块因为这两块内容靠死记硬背很难拿分必须真正理解运行机制。JVM方面必考的点有五个内存区域划分程序计数器、虚拟机栈、本地方法栈、堆、方法区/元空间、对象创建过程、垃圾回收算法标记清除、标记复制、标记整理、垃圾收集器CMS、G1、ZGC在不同年代的选择、类加载机制加载、验证、准备、解析、初始化五阶段以及双亲委派模型。笔试题常出的一种问法是一个对象从创建到被回收经历了什么答题思路是从new开始类加载检查、分配内存指针碰撞或空闲列表、内存空间初始化、设置对象头、执行构造方法GC时先判断对象是否可达可达性分析不可达则第一次标记并筛选是否执行finalize方法然后回收回收时涉及对象什么时候进入老年代、大对象直接进入老年代、动态年龄判定等细节。并发方面必考的点包括synchronized和ReentrantLock的区别与底层实现、volatile的可见性和有序性、CAS与ABA问题、AQS机制、线程池的核心参数核心线程数、最大线程数、阻塞队列、拒绝策略和execute流程。手写代码题一般围绕生产者消费者、多线程交替打印、死锁的模拟与避免。这里给一个实际考过的例子也是很多候选人答错的线程池提交一个任务后处理流程是什么答案是检查核心线程数是否已满没满则创建核心线程执行任务满了则判断阻塞队列是否已满没满则入队等待队列满了判断线程数是否达到最大线程数没达到则创建非核心线程执行达到最大线程数则执行拒绝策略。这个顺序不能记混。还有一个高频点为什么wait和notify必须放在同步代码块里因为wait和notify是基于monitor锁实现的而monitor锁的本质是对象监视器只有持有锁的线程才能操作对象的监视器状态。如果不放在同步块里执行时会抛出IllegalMonitorStateException。这个设计是为了防止线程在wait之前失去对共享资源的互斥访问避免出现lost wakeup问题。3.3 集合框架HashMap是永远的主角Java集合在笔试题里出现频率最高的就是HashMap。面试官和出题人都喜欢围绕HashMap展开因为一个HashMap能延伸出太多知识点底层数据结构数组链表红黑树、默认容量16和负载因子0.75、扩容时机size超过容量乘以负载因子、put流程先hash定位再判断是否冲突冲突则链尾插入或转为红黑树、为什么Java 7头插法在并发扩容时会形成环。选择题常考的坑有这些HashMap允许key和value为nullHashtable不允许。ConcurrentHashMap在Java 7和Java 8的实现完全不同Java 7用分段锁Java 8改用CASsynchronized锁头节点。HashMap的初始容量为什么是16扩容为什么是2的幂次方因为要保证hash值对数组长度取模运算时可以用位运算 hash (length - 1)来替代取模前提是length必须是2的幂这样才能保证低位掩码完整减少哈希碰撞。3.4 Spring和微服务从Bean生命周期到容器原理2018年校招那会儿Spring Boot已经普及微服务也开始大热。Java笔试题里Spring相关的内容占比不小常见考点包括Spring IoC和AOP、Bean的生命周期、BeanFactory和ApplicationContext的区别、SpringBoot自动配置原理、SpringMVC的处理流程。Bean生命周期是一个经典的记忆型考点建议按下面这条线理解实例化Bean通过构造器或工厂方法属性填充依赖注入调用BeanNameAware、BeanFactoryAware等Aware接口方法调用BeanPostProcessor的postProcessBeforeInitialization调用初始化方法PostConstruct、InitializingBean、自定义init-method调用BeanPostProcessor的postProcessAfterInitializationBean就绪可以被使用了容器关闭时调用销毁方法PreDestroy、DisposableBean、自定义destroy-method记忆口诀就是实例化、属性填充、Aware、前置处理、初始化、后置处理、使用、销毁。其中BeanPostProcessor是最核心的扩展点AOP的代理对象就是在postProcessAfterInitialization这一步生成的。SpringBoot自动配置原理也是高频考点一句话概括SpringBoot通过EnableAutoConfiguration引入AutoConfigurationImportSelector该类会扫描所有jar包里的META-INF/spring.factories文件读取其中的自动配置类然后通过ConditionalOnClass、ConditionalOnMissingBean等条件注解按需加载配置。笔试如果出简答题能把这个流程描述完整就是高分。3.5 Java方向笔试复习建议Java方向的知识体量很大建议按模块复习时间分配上JVM和并发各占20%集合和Spring各占15%算法占15%计算机网络和操作系统占10%其他如设计模式、Linux占5%。学习资料方面JavaGuide和“Java八股文”的总结可以作为速查手册但切记不能只看总结不看原理解析。JVM的内存模型和垃圾回收推荐看《深入理解Java虚拟机》的前七章把关键概念用自己的话梳理一遍。并发方面《Java并发编程的艺术》是经典读物重点看锁、AQS、并发工具类这几章。Spring原理可以看Spring官方文档的Core部分加上SpringBoot自动配置的源码解析文章。刷题方面力扣的Hot 100题是用来保持算法手感最有效的方式笔试前两周开始每天刷2到3题重点复习高频类型。牛客网有专门的Java专项练习里面有很多公司笔试真题值得刷一轮。4. 运维方向笔试考的是“真出事了你会怎么处理”4.1 运维笔试题的独特调性运维方向和开发岗不一样笔试题目更贴近真实的生产环境问题。唯品会B卷的运维题大概率会覆盖Linux基础操作、常用命令、网络排查、Shell脚本、服务部署、监控告警、故障处理流程这些内容。很多人觉得运维笔试就是考背命令比如“查看端口的命令是什么”“查看进程的命令是什么”。这些当然会考但真正拉分的是场景题给你一个生产环境故障描述问你排查思路、诊断步骤和解决方案。这种题目没有标准答案考察的是你面对系统异常时的分析能力和操作落地能力。举几个典型的场景题服务器CPU使用率飙到100%你如何排查线上接口响应变慢你如何从运维角度定位瓶颈Nginx返回502 Bad Gateway你会怎么处理磁盘空间满了但du和df显示的结果不一致为什么负载均衡后端有一台机器频繁掉线你怎么定位问题这些问题现在依然是运维面试的高频题。4.2 Linux命令和网络排查一个都不能少Linux命令是运维的基础功笔试里必定会考一批“默写级别”的命令。我按功能分类梳理一下必须掌握的命令这些无论哪家公司的运维笔试都逃不掉。系统状态类top看CPU/内存/负载、free -h看内存、df -h看磁盘、iostat看IO、vmstat看系统整体状态、uptime看负载。进程管理类ps -ef、ps aux看进程详情、kill -9强制杀进程但注意先kill普通信号再考虑强杀、pstree看进程树、htop交互式进程管理很多机器没装笔试如果提到就说会用top和ps的组合方案。网络排查类netstat -tlnp查端口监听、ss -tlnpnetstat的替代品性能更好、ping测连通性、telnet测端口通不通、curl测HTTP接口、traceroute看路由路径、tcpdump抓包分析。文件操作类ls、cd、cp、mv、rm、find、grep、awk、sed。其中find、grep、awk、sed这四个是运维笔试的重头戏经常结合起来考文本处理和日志分析。看一个实际考过的点日志文件有上百万行怎么找出其中包含“ERROR”并且按出现次数排序答案是grep ERROR app.log | sort | uniq -c | sort -rngrep过滤出包含ERROR的行sort排序让相同内容相邻uniq -c统计每类错误出现的次数再做一次sort -rn按次数倒序排列。这个组合命令体现了“过滤-统计-排序”的基本思路值得熟练掌握。再补充一个高频命令面试题如何查看某个端口被哪个进程占用lsof -i :8080 netstat -tlnp | grep 8080如果lsof未安装用netstat也能达到同样效果。实际工作中lsof的信息更详细能看到进程名和进程ID推荐优先使用。4.3 Shell脚本笔试必考别只会echoShell脚本几乎是运维笔试的送分题也是失分题。送分是因为脚本逻辑普遍简单失分是因为很多候选人写完不考虑边界情况、不处理异常、不写注释。常见的笔试题目类型包括批量创建用户并设置密码、定时清理超过N天的日志文件、监控磁盘使用率超过阈值就告警、批量检查多台服务器的存活状态并输出结果。我之前整理过一个实际可用的磁盘告警脚本思路值得参考#!/bin/bash # 功能检查磁盘使用率超过80%则输出告警并发送通知 THRESHOLD80 MAIL_TOadminexample.com df -h | grep ^/dev/ | awk {print $5, $6} | while read usage mountpoint; do # 去掉百分号 usage_num${usage%\%} if [ $usage_num -ge $THRESHOLD ]; then echo $(date %Y-%m-%d %H:%M:%S) 磁盘分区 $mountpoint 使用率 $usage请及时处理 | mail -s 磁盘告警 $MAIL_TO fi done这个脚本的核心思路是先用df -h拿到所有分区信息再过滤出真实磁盘设备避免tmpfs、overlay这类虚拟文件系统干扰然后循环判断使用率。笔试答题时不要求你写出生产级别完整的脚本但至少要逻辑清晰、有注释、考虑到阈值和循环。4.4 网络运维工具箱日常排障的武器库2018年的笔试可能不会直接问“你用什么工具箱”但会通过场景题考察你对网络排查工具链的熟悉程度。这里说的工具链不是某个图形化软件而是一个个命令行工具的串联使用。我总结了一套网络排查三板斧先ping看通不通再telnet看端口通不通最后curl看服务返回什么。如果都正常再用tcpdump抓包看具体请求和响应。这套方法面试时用大白话讲出来直接体现你平时的排障手感。举个例子用户反馈某接口偶发超时。第一反应不是去看代码而是先确认网络链路ping目标服务器IP看丢包率和延迟ping域名看DNS解析和大包情况telnet目标IP端口确认TCP握手正常如果TCP正常再让开发配合查看应用层日志同时tcpdump抓包看是否存在TCP重传。我个人在排查类似问题时踩过一个坑ping通不代表端口没问题端口通不代表服务没问题。这三个标准必须分开验证一个环节一个环节排除不能想当然。4.5 运维方向笔试复习建议运维笔试的准备和其他岗位不太一样光看八股文不够必须动手去操作。我建议你在自己的电脑上装一个Linux虚拟机或者用云服务器把系统状态类、进程管理类、网络排查类的命令都亲手敲一遍理解每个命令的输出含义。Shell脚本练习可以从最简单的开始写一个脚本打印当前时间、写一个脚本批量为文件重命名、写一个脚本检查Nginx进程是否存在不存在则自动拉起。然后逐渐增加复杂度加入判断、循环、日志、告警。练习的目的不是把脚本背下来而是培养面对问题时的拆解思路。常用命令大全类的资料可以当字典查但要把高频命令的用法和输出格式了然于胸。尤其是grep、awk、sed这三个几乎每天都用值得反复练。5. 测试方向用例设计能力比手工点按钮重要得多5.1 测试笔试题到底考什么测试岗位的笔试题目风格和开发、运维完全不同。核心考点集中在三个方面测试基础知识、测试用例设计、常见测试工具和自动化框架。2018年那会儿移动端测试也开始流行Appium这类工具也跟着进了笔试题库。先说测试基础知识。这块经常考的内容包括软件测试的流程需求分析、测试计划、用例设计、执行、缺陷跟踪、测试报告、测试分类单元测试、集成测试、系统测试、验收测试以及按测试目的划分的冒烟测试、回归测试、性能测试、安全测试等、bug的生命周期新建、打开、修复、验证、关闭以及每个环节的状态流转。再一个必考题就是边界值分析和等价类划分。这两个是最基础的黑盒测试用例设计方法笔试里经常给一个输入框比如年龄要求0到150之间的整数让你设计测试用例。这类题的答题要点是覆盖正常值、边界值0、150、负数、151、异常值非数字、空值、特殊字符、小数和特殊值超大数、溢出。5.2 测试用例设计题别忽略边界值和异常流我举一个实际考过的原型题设计一个登录功能的测试用例。很多人看到这个题第一反应是“用户名正确密码正确就能登录”然后写几个用例就交卷了。但真正专业的作答应该覆盖足够多的维度。功能测试方面要考虑正确的用户名和密码验证登录成功正确的用户名、错误的密码提示密码错误错误的用户名、正确的密码提示用户名不存在用户名和密码都为空提示必填用户名密码前后有空格是否自动去空格密码错误次数超过阈值是否锁定账户用户被禁用或删除登录是否被拦截同一账号在不同设备同时登录是否允许界面和体验测试方面要考虑密码输入框是否掩码显示Tab键是否能正常切换输入框回车键是否能提交表单登录成功后跳转页面是否正确停留时间过长会话是否过期安全测试方面要考虑密码是否明文传输请求是否可被抓包重放是否存在SQL注入风险验证码是否有时效性和防刷机制性能测试方面要考虑并发100个用户同时登录系统响应时间连续登录失败后系统资源占用情况这个思路不仅适用于笔试也适用于真实工作。测试用例设计能力的核心是“穷举各种可能性但要能排优先级”笔试时把上述几个维度写清楚基本就能拿高分。5.3 接口测试和自动化从手工走向工具接口测试在笔试中的占比逐年上升。常见考点包括HTTP协议基础GET和POST的区别、常见的状态码含义、请求头和响应头、接口测试工具的使用Postman或JMeter、接口测试用例设计方法参数校验、返回值校验、异常场景覆盖。笔试里经常会给你一个接口文档然后让你设计接口测试用例。比如一个获取用户信息的接口注意点包括token为空时返回什么、token过期时返回什么、用户ID不存在时返回什么、接口是否做了参数校验、响应时间是否符合预期、并发请求是否安全。自动化测试方面Appium是移动端测试的高频考点。笔试题可能会问Appium的工作原理是什么答案核心是三段式Appium客户端通过WebDriver协议发送JSON格式的HTTP请求Appium Server接收请求后转发给对应的驱动驱动再通过底层框架iOS的XCUITest或Android的UiAutomator操作设备。理解了这条链路后面的面试题就都好聊了。UI自动化测试中一个经典的坑是元素定位不稳定。笔试里可能给你几个定位表达式让你判断哪个更稳定。正确答案是优先使用id或resource-id其次才是xpath。因为xpath依赖页面层级结构UI稍微调整脚本就挂了。5.4 测试方向笔试复习建议测试笔记的复习重点要放在建用例的设计思维上。拿一个常见的业务场景电商下单、订单退款、会员注册自己动手写一遍测试用例覆盖功能、兼容性、性能、安全和易用性五个维度。Postman和JMeter至少要会一个。Postman的常见用法创建集合、设置环境变量、测试断言pm.test、数据驱动Runner。JMeter的重点是线程组、取样器、监听器、断言这四个核心组件的组合使用以及压测时怎么设置并发数和循环次数。Appium建议实际搭建一次环境跑通一个自动化脚本。搭建过程虽然有点繁琐涉及Java环境、Android SDK、Appium Server、模拟器但走一遍之后对工具的理解完全不一样。6. 数据库方向SQL只是基础索引和事务决定上限6.1 数据库笔试题的常见题型分布数据库方向在笔试中通常是单独一个板块但开发、测试、运维岗位的候选人都会遇到。唯品会B卷里的数据库题覆盖面大概是SQL语句编写、MySQL索引原理、事务特性和隔离级别、锁机制、SQL优化思路、数据库设计ER图、三大范式。对于开发和测试岗位SQL语句编写题是门槛级别的存在。常见的题目包括多表联查inner join、left join、子查询、分组排序、聚合函数count、sum、avg、max、min、去重distinct、分页limit offset、插入更新insert、update、delete。对于运维岗位则更偏向备份恢复、主从同步、慢查询分析、参数调优。6.2 手写SQL能把复杂查询写对是一种能力笔试里的SQL题不会太复杂但经常有坑。我总结几个高频且容易出错的场景。第一个是多表联查时用join还是子查询。实际考试中经常给一个“学生表、课程表、成绩表”的经典三表结构让你查“选修了所有课程的学生”。这个题的正解是用having count等于课程总数来过滤SELECT student_id FROM score GROUP BY student_id HAVING COUNT(DISTINCT course_id) (SELECT COUNT(*) FROM course);这个SQL的核心思路是按学生分组统计选修课程数再和总课程数对比相等说明选修了所有课。很多人一上来就想用not exists或者嵌套子查询方向偏了。第二个是分组求topN。比如查每个部门工资最高的员工正确写法是用窗口函数SELECT department_id, employee_name, salary FROM ( SELECT department_id, employee_name, salary, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rn FROM employee ) t WHERE rn 1;窗口函数在MySQL 8.0之后才支持所以如果笔试题特别说明MySQL 5.7环境就得用变量或者自连接的方式实现。这类题目比较能看出候选人到底有没有在真实环境里写过SQL。第三个是SQL注入相关的基础理解。笔试选择题可能会问下面哪个写法存在SQL注入风险答案是把用户输入直接拼接进SQL字符串的做法。防护方案是使用PreparedStatement预编译或者使用MyBatis的#{}占位符。6.3 索引原理为什么查询快为什么有时候会失效索引是数据库方向的必考核心而且命题角度非常多。面试官和出题人喜欢通过索引来考察你对MySQL底层存储结构的理解程度。最基础的问题是InnoDB为什么用B树做索引答案是三句话B树的高度低三层就能存储千万级别数据以默认16KB一页估算三层可以存约2000万行B树叶子节点通过指针相连方便范围查询和排序非叶子节点只存键值和指针不存数据所以单页能容纳更多键值减少磁盘IO。索引失效的场景是笔试选择题的常客常见的有对索引列使用了函数或表达式计算如where YEAR(create_time) 2024、隐式类型转换字符串索引列和数字比较、like以通配符开头%xxx、联合索引不满足最左前缀原则、在索引列上使用or如果or条件里有一个非索引列。但要注意优化器在某些情况下会做优化比如索引覆盖时也能避免回表。还有一个高频问法唯一索引和普通索引怎么选答案是查询性能差异不大主要区别在更新性能。唯一索引在插入、更新时多了一步唯一性校验会消耗额外的CPU普通索引则没有这个开销。所以在更新频率高、且业务上不需要唯一约束的列上用普通索引更合适。6.4 事务隔离级别和锁别背概念要理解为什么事务这块笔试的经典问题是事务的四大特性ACID分别是什么隔离级别有哪些每种隔离级别解决了什么问题InnoDB默认隔离级别是什么。这些概念背下来就能拿基础分但想拿高分要理解隔离级别的实现机制。MVCC多版本并发控制是必须理解的一个点。MVCC通过Undo Log保存数据的历史版本让读操作可以读取到事务开始前的快照从而实现不同隔离级别下的非锁定读。RR可重复读和RC读已提交的区别在于快照的生成时机RR是事务第一次读取时生成快照整个事务期间使用同一份快照RC是每次读取都生成新的快照所以能看到其他事务已提交的数据变更。锁机制方面高频考点是共享锁和排他锁、表锁和行锁、间隙锁、死锁的产生条件。笔试选择题可能会问InnoDB的RR隔离级别下使用唯一索引等值查询时如果记录不存在会加什么锁答案是在查询条件命中的间隙上加间隙锁防止其他事务插入数据造成幻读。6.5 数据库方向笔试复习建议SQL的SQL、索引、事务是三个最高优先级。SQL题每天写十道从简单的单表查询到多表联查、子查询、窗口函数把常用语法都过一遍。索引原理可以配合执行计划explain来学习用explain看SQL的type、key、rows字段能直观理解索引对查询的影响。事务和锁这块建议结合实际案例来理解。分别试一下开启两个会话手动模拟脏读、不可重复读、幻读再用隔离级别解决这些问题。自己动手跑一遍之后概念就变成肌肉记忆了。对于“数据库课程设计”类的项目实践可以在本地用Docker装一个MySQL建几张关联表写一些增删改查和查询统计的SQL再通过数据库同步工具定期备份数据。这类实操对笔试和面试都有直接帮助。7. 常见问题排查与笔试避坑技巧7.1 面试和笔试的区别笔试更看踩坑经验笔试是面试的前置筛选它的核心逻辑是用有限的时间筛掉基础不牢的候选人。所以笔试题往往不会出偏题怪题而是知识点密集、覆盖面广的基础题。理解了这一点备考策略就很清晰与其纠结极端冷门的问题不如把高频考点的基础原理吃透。我在不同阶段参加过的校招笔试和社招笔试中总结了几个通用的避坑技巧这里分享给大家。一要看清题目要求。校招笔试经常出现“本题填代码”“本题请选择所有正确项”的提示但每年都有人因为漏看要求丢分。特别是前端题里“写出下列代码的输出结果”和“以下哪些说法正确”是完全不同的答题方式。选择题是多选还是单选务必看清。二要控制时间分配。笔试题量通常较大如果一道题卡住超过5分钟果断跳过优先把会做的题做完。整张卷子的分数分布通常是前面的选择题、判断题占大头后面的开放题和编程题虽然分值高但耗时多要从性价比角度做好取舍。三要注重答题格式。手写代码题即使不能完整写出来也要把思路和关键步骤写清楚让阅卷人看到你的分析过程。尤其是运维和测试的开放题答案没有唯一标准考察的是你面对问题时有没有一套合理、完整的排查思路。就算结论不对有逻辑的解决过程也可能拿到一半以上的分数。7.2 做题时的常见致命失误先列一个高频失误清单这份清单同样适合准备笔试的候选人代码题只看会写不检查边界比如数组越界、空指针、除零、并发变量状态问题。很多候选人笔试题能写对主逻辑但边界条件没处理好直接被扣一半分。Java题混淆重载和重写重载是编译期多态方法名相同但参数列表不同与返回值无关重写是运行期多态子类方法签名和父类完全一致或者比父类更宽泛的访问权限方法体不同。笔试选择题经常在这两个概念上埋雷。SQL题没注意分组字段写了group by但SELECT后面出现了非分组字段、非聚合函数字段在严格模式only_full_group_by下会直接报错。测试题只写正常流不写异常流测试用例设计最少覆盖正常、边界、异常三类场景这是笔试阅卷时的核心判断标准。7.3 实操过程中容易踩的环境坑笔试环节本身可能不涉及环境搭建但准备过程中踩过的环境问题值得记录下来因为面试时这些问题往往会被单独拿出来问。比如前面提到过的Java启动报错OutOfMemoryError: insufficient memory这类问题在真实环境中极其常见校招笔试不一定直接考但面试官大概率会问“线上服务内存不够了怎么办”。回答思路很简单先去服务器查看进程内存占用jmap -heap看堆内存配置jstack看线程状态再结合gc日志分析是堆内存不足、栈内存溢出还是直接内存不足。如果是堆内存不足考虑调大-Xmx参数或优化业务逻辑减少对象创建如果是代码问题导致内存泄漏需要用MAT分析dump文件定位泄漏点。类似的还有MySQL磁盘满了导致写入失败、Nginx返回502 Bad Gateway、Tomcat连接数打满这些高频故障。建议备考时把每个场景的排查思路整理成模板先看日志再看系统状态最后定位代码或配置。这套排查模板在笔试开放题和面试中都能直接用。7.4 给即将笔试的人最后几点忠告笔试复习最后阶段我不建议再刷海量新题而是做三件更有效的事情第一把高频题型的答题思路重新过一遍尤其是手写SQL、用例设计、Shell脚本这三类开放题第二把之前做错过的题整理成错题本搞清楚每一道错题背后的知识点盲区第三限时模拟一套真题适应考试节奏避免因为时间分配不合理而丢分。考场上还有一个容易忽略的细节审题。校招笔试的选择题和判断题经常会设置一些语言陷阱比如“以下说法错误的是”“边界值包括”“不会引起索引失效的是”千万别因为读题马虎选反了。8. 最后想说的话笔试题只是起点不是终点这份唯品会2018校招B卷虽然时间过去几年但里面对基础能力的考察方向到现在依然是互联网公司校招的主流。前端、Java、运维、测试、数据库五个方向每个方向的高频考点都指向一个共同目标——考察候选人是否真正理解技术背后的原理而不是停留在会用的层面。从我个人的亲身经历来看准备笔试最忌讳的就是临时抱佛脚背八股文。背下来几道题侥幸过了笔试面试一问原理照样露馅。真正有效的准备方式是花时间把一个知识点从现象追溯到原理从原理再落实到动手实践。比如你理解了HTTPS的握手过程就更容易理解证书、加密套件、性能优化你理解了B树的结构就更容易理解索引为什么能加速查询为什么会有覆盖索引和回表的概念你理解了JVM的内存模型就更容易理解线上OOM时该从哪个角度去排查。最后再分享一个实际工作中反复验证过的经验很多面试官问的问题并不期望你答得一字不差而是想听你的分析思路和推导过程。所以笔试和面试时遇到不会的题不要慌把你已经掌握的部分写出来把可能的思路列出来这在阅卷和面试中都会给你加分。技术和考试都不是一蹴而就的事。希望这份复盘能帮你在准备笔试的路上少走一些弯路基础打牢了后面的路自然就顺了。