美丽联合2017校招笔试题复盘:算法、Java与电商场景设计 📅 发布时间:2026/8/30 15:35:47 👁 浏览次数: 如果你在2017年前后投过电商公司的技术岗大概率对“美丽联合”这个名字不陌生。它是蘑菇街、美丽说、淘世界合并后的统称主打女性时尚电商当时算是社交电商和直播带货的早期玩家。今天不聊公司发展史单说这套2017校园招聘笔试题。我之所以专门翻出来复盘是因为这套题放到今天看依然能代表电商公司技术校招的典型考察思路算法是基本功Java基础和数据库是重头戏系统设计题则直接拿业务场景说话。它不像某些公司那样上来就考脑筋急转弯而是每一道题都能看出来“这个人是来写电商业务的不是来刷题应付面试的”。对准备校招或者刚转行做后端的人来说这套题的复盘价值很高你不仅能知道考什么还能琢磨明白“为什么这么考”。1. 拆解之前先搞清楚“美丽联合”究竟在考什么1.1 从业务基因推导考察方向美丽联合的核心业务是女性时尚电商围绕“逛”和“买”展开内容社区加上电商交易。这种业务形态对技术栈的要求有三个特点高并发访问、复杂的商品交易链路、个性化推荐。你刷单页、看直播、加购物车、下单支付每一步背后都有对应的技术挑战。所以它的笔试题不是随便从题库里抽的而是围绕这几个业务场景倒推出来的。算法题考察的是你对数据结构与基本算法的熟练度因为商品排序、搜索、推荐都需要这些底子Java题集中在集合、并发、JVM因为交易系统对稳定性和并发处理要求极高数据库题则直接盯着索引优化和SQL编写毕竟电商系统最不缺的就是数据。这套题最值得做的地方就在这里它把你平时学的东西和真实业务场景挂上了钩。你如果只是机械刷题不理解电商业务在做什么很容易在后面的系统设计题上露馅。1.2 2017年的技术环境和面试倾向2017年这个时间点很有意思。那时候微服务已经在国内大厂普及Spring Cloud和Dubbo是主流容器化刚冒头但还没完全铺开直播电商也刚刚起步。美丽联合彼时正在发力直播和社区内容技术团队面临的问题是怎么支撑大量用户同时刷内容、发弹幕、看直播、下单交易。这套题的笔试环节明显偏向基础功底的筛选因为校招候选人没有实际工作经验公司只能通过算法题和基础题判断你的潜力。但和纯做社交或工具类公司不同电商公司对数据库和事务的考察特别执着。我甚至记得有一道题是直接让你设计订单表的不是简单建张表而是要你把拆单、状态流转、超时关单这些细节都考虑到。所以如果你拿这套题当练习不要只盯着算法题刷要把Java和数据库部分当作重点研究对象那些才是电商业务开发每天的日常。2. 算法题不是最难的但最容易被细节拖死2.1 链表和数组笔试中的高频送分题美丽联合这套笔试题里链表和数组相关的题占比不小但难度都不算高属于你平时练过就能写出来的范畴。比如有一道链表反转题表面上是考指针操作实际上考的是你有没有形成“链表题先画图”的习惯。很多人在笔试时直接上手写代码写着写着指针就乱了其实只要在草稿纸上画出每一步的指针变化这类题基本不会出错。数组相关的题也是一样核心考点是“双指针”思维。比如有序数组合并、去重、寻找两个数组的交集都可以用双指针在线性时间内解决。这类题目在电商场景里对应的是商品列表合并排序、标签筛选后的结果集处理虽然业务上不会让你手写但笔试考察的就是你有没有这种优化意识。我的建议是准备这类题时别只求出答案要练到能边写边解释每一步在做什么因为有些公司会在笔试后面加一轮面试让你讲自己的解题思路。2.2 动态规划和字符串处理拉开差距的地方如果这套题只有链表反转和双指针那就太没区分度了。真正拉开差距的是动态规划和字符串处理相关的题目。有一道典型的DP题是“最长公共子序列”它在电商场景里有一个实际映射商品标题的相似度计算、搜索关键词的纠错提示看起来不直接但底层逻辑一脉相承。DP题的难点在于状态转移方程的推导很多人在笔试时卡住不是因为不知道DP是什么而是不知道从哪下手。这里分享一个我后来带人时常用的思路先确定dp数组的含义再确定初始值最后写转移方程。顺序不能乱很多人一上来就写转移方程结果边界条件一团糟。以“最长公共子序列”为例def longest_common_subsequence(text1: str, text2: str) - int: m, n len(text1), len(text2) dp [[0] * (n 1) for _ in range(m 1)] for i in range(1, m 1): for j in range(1, n 1): if text1[i - 1] text2[j - 1]: dp[i][j] dp[i - 1][j - 1] 1 else: dp[i][j] max(dp[i - 1][j], dp[i][j - 1]) return dp[m][n]字符串处理类的题则更偏实际应用比如判断括号是否匹配、最长回文子串。这些题我建议你用栈或者中心扩展法去做而且要格外注意边界条件。一个空字符串、一个单字符、一个全是相同字符的字符串都是容易出错的地方笔试时不要嫌麻烦把这些case在脑子里过一遍再提交。2.3 笔试时的一个小技巧先规划再动手很多人在笔试时犯的最大错误是看到题目就疯狂敲代码。我自己的习惯是拿到题目先花两分钟在草稿纸上列输入输出、边界情况、算法复杂度确认思路没问题了再动手写。这套笔试题的算法部分总共时长不算宽裕但也不是紧到没时间思考关键看你愿不愿意花那两分钟。遇到不会的题也不要空着写出暴力解甚至只是思路都比白卷强。笔试系统的判分通常按测试用例通过率来算暴力解至少能过一部分简单用例这些分白白丢掉太可惜了。3. Java基础与并发考的是“踩坑经验”而不是八股3.1 集合类与线程安全每次必考的送分题Java基础部分集合类是绝对的重点美丽联合的笔试题也不意外。HashMap的底层实现原理、ArrayList和LinkedList的区别、HashSet怎么保证元素不重复这几道题几乎是标配。表面上是考记忆实际上考你有没有真正用过。以HashMap为例很多人能背出“数组加链表JDK1.8之后转红黑树”但问到“为什么链表长度超过8才转红黑树”就懵了。这其实是概率论和工程经验的结合hash函数设计得足够好的情况下链表长度达到8的概率极低转红黑树是为了防御极端情况下的hash碰撞攻击而不是常态优化。这种题不是死记硬背能答好的需要你真的看过源码、思考过设计者的意图。集合类相关的线程安全也是考察重点。CopyOnWriteArrayList适合读多写少的场景ConcurrentHashMap用分段锁JDK1.7或CAS加synchronizedJDK1.8来保证并发安全。笔试题不会直接让你写代码但会给你一个业务场景问你选哪个集合类最合适。我在实际业务里就踩过一个类似的坑早期做购物车合并功能时直接用了一个普通的HashMap存用户购物车数据上线后发现高并发下偶尔丢数据查了半天才意识到是HashMap扩容时多线程put导致的问题。换用ConcurrentHashMap之后问题立刻消失了。这种用真金白银换来的经验笔试时体现在你对集合类线程安全的敏感度上。3.2 并发编程从synchronized到锁的升级并发编程是Java考的另一个大头。volatile的可见性和禁止指令重排、synchronized锁升级的完整过程偏向锁、轻量级锁、重量级锁、AQS的基本原理都是高频考点。其中synchronized锁升级这个知识点我个人觉得是能看出来候选人有没有真正研究过并发的分水岭。很多人只背了“锁升级”三个字但说不清楚为什么要有偏向锁为什么升级成轻量级锁之后还要自旋以及什么情况下会直接升级成重量级锁。简单来说锁升级是JVM为了减少线程上下文切换的开销做的优化大多数时候锁不存在竞争偏向锁让同一个线程重入时不加锁竞争出现后用CAS尝试获取轻量级锁竞争再激烈时自旋一段时间还失败就升级成重量级锁让线程真正阻塞。笔试中可能会出现这样的场景题电商秒杀场景下你怎么控制库存扣减的并发安全这时候如果你能提到“synchronized在低竞争下性能还不错但高并发下应该考虑用Redis分布式锁或者乐观锁CAS”就已经比大多数候选人高一档了。这不是考你会不会背API而是考你有没有真的处理过类似的问题。3.3 JVM不考背诵考排查思路JVM相关题目占比不大但经常出现。内存区域划分、垃圾回收算法、类加载机制这是三个老生常谈的考点。但美丽联合的笔试题和别家不太一样的地方在于它更喜欢让你“根据现象推断问题”。比如给你一个线上OOM的异常日志问你最可能的原因是什么以及怎么排查。这时候你光背“堆内存不足”就不够用了你得能区分是堆内存溢出还是栈溢出是GC overhead limit exceeded还是Direct buffer memory不同情况对应的排查手段完全不同。经验是遇到这类题先看异常类型再看堆栈信息最后结合业务场景判断。如果是电商系统的OOM优先怀疑是不是一次性加载了太多商品数据到内存或者缓存没有设置过期策略导致对象无法回收。只要你能把“知识点”和“业务场景”联系起来这道题其实不难。4. 数据库与电商场景设计题拉开差距的主战场4.1 SQL题会写是基础会优化才是加分项数据库题在这套笔试题里占的比重很大这完全符合电商公司的业务特点。SQL题目大概分两类一类是纯考察语法和逻辑的查询题另一类是考察索引优化和慢查询分析的题。第一类题很常规基本就是多表联查、分组统计、子查询这些。这没有什么捷径你把SQL语法练熟多写几个复杂的查询语句自然就掌握了。但值得注意的是笔试时SQL题的关键在于想到“最快实现”的写法而不是密密麻麻写一大坨。能用JOIN就不要用子查询能用聚合函数就不要先查出来再在代码里算这些都是写SQL的基本直觉。第二类题才是真正拉开差距的地方。我记得有一道题是给你一段慢查询日志让你分析为什么这么慢并且给出优化方案。这种题考察的点很集中有没有命中索引是不是产生了回表有没有filesort。这些知识点不是靠背出来的需要你真正理解B树索引的结构和存储引擎的执行逻辑。一个常见的优化场景查询某用户最近一个月的订单如果直接在订单表上按用户ID和创建时间建立联合索引就能避免MySQL先查出全部订单再排序而是直接走索引拿到有序结果。这个思路我当时在笔试时用到了也建议你现在重点研究一下联合索引的最左前缀原则。4.2 电商三件套秒杀、购物车、优惠券如果你去翻美丽联合的笔试题或者面试题会发现出题人特别偏爱三个业务场景秒杀、购物车、优惠券。这三个场景每个都能单独拎出来做成一道系统设计问答题但笔试一般会降低难度把它变成一道填空题或者简答题。秒杀场景的核心问题是“高并发下的库存扣减”。如果你只会说“加锁”那基本没有分数。正确的思路是用Redis预扣库存异步通过消息队列同步到数据库数据库层面用乐观锁UPDATE ... WHERE stock 0保证不超卖。这种题目考的其实就是你有没有高并发系统的整体认知而不是某一项具体的API。购物车场景则更偏向数据结构设计。购物车里的商品要区分选中和不选中要支持合并同款商品的数量还要在用户重新登录后同步。用Map来存是最直接的做法key是商品IDvalue是商品数量加选中状态。如果是分布式场景还需要考虑用Redis保存购物车数据key设计成用户ID加购物车标识。优惠券场景考的是状态机的设计。一张优惠券有哪些状态可用、已使用、已过期、已锁定这些状态之间哪些可以互相转换一个用户最多能持有多少张优惠券下单时怎么选择最优优惠组合你能把这些场景想清楚说明你对电商业务有基本了解而这种了解恰恰是校招候选人最稀缺的东西。4.3 系统设计题不要求完整方案要求思路清晰笔试题里会有一到两道简化版的系统设计题不要求你写出完整方案但要求你给出基本架构和关键数据结构设计。一道典型的题是“设计一个短链接系统”。这题在2017年出现频率很高现在依然经典。核心需要回答的点包括短链接的生成方式发号器还是随机字符串、存储选型关系型数据库还是Redis、重定向方式301还是302以及如何统计点击量。美丽联合这套题里的系统设计题也是类似风格结合电商业务让你设计一个功能模块。比如设计一个商品评论系统或者设计一个关注功能的数据表。这类题的关键不是说得天花乱坠而是把核心模块讲清楚数据表怎么设计、用什么字段、如何保证主键唯一、读写压力分别怎么处理、用不用缓存、用不用消息队列。我见过太多候选人在系统设计题上栽跟头原因不是不会而是废话太多。一上来就画一个大而全的架构图结果连最基本的“评论表需要哪些字段”都说不清楚。正确的策略是先给最小可行方案再考虑扩展。先满足功能需求再考虑性能和扩展性一层一层往上叠加这样无论是笔试还是面试都会给人留下“思路清晰”的印象。5. 备考复盘从这套题反推校招准备的重点5.1 踩过的坑为什么刷了三遍题还是挂了我自己当年也参加过类似的电商公司笔试回过头看栽跟头的原因基本可以归结为三个。第一是因为只刷算法题忽视了Java基础。很多人的复习计划是“LeetCode刷三百题”把算法题练得滚瓜烂熟结果一到Java基础题就发懵。HashMap源码看过没有synchronized锁升级过程能不能讲清楚JVM垃圾回收器有哪些各自适用于什么场景这几个问题才是校招笔试里真正决定你能不能进面试的环节。第二是因为不会做场景题背了很多概念但不知道用在哪儿。比如你能背出Redis的几种数据结构但遇到“如何用Redis实现购物车”这种问题就毫无思路。这其实不是知识储备不够而是缺乏把知识映射到业务场景的训练。建议平时刷题时多问自己一句“这个知识点在真实的电商系统里会出现在哪个环节”想多了场景题自然就通了。第三个坑特别隐蔽笔试环境不适应。很多校招笔试用的在线编辑器没有代码补全也不能本地运行调试很多人平时在IDE里写得飞起一上笔试系统就废了。这个问题的解决方案只有一个提前在牛客网或者公司自己的笔试平台上做几套模拟题适应那个环境。5.2 平时怎么积累一个可以照做的复习路径如果你现在正在准备校招个人建议把复习拆成四个阶段。第一阶段是算法基础花一到两周集中刷高频题型链表、二叉树、双指针、DP、字符串处理。不需要追求难题把中等难度的题刷到熟练即可重点是把常见套路刻进肌肉记忆。第二阶段是Java基础重点突破集合类源码、并发编程、JVM内存模型。这个阶段不要只看博客一定要自己打开源码跟着代码走一遍。博客是人家的理解源码才是自己的理解。第三阶段是数据库和业务场景你要学会SQL优化的基本思路索引的工作原理要能讲清楚还要准备几个电商场景题的标准答案比如秒杀、购物车、订单状态机不用多但每一个都要能讲得透彻。第四阶段是模拟笔试。找一套难度适中的笔试题严格按照考试时间来不查资料不分心把自己代入真实的笔试环境中。做完之后认真复盘看哪些知识点是不会的哪些是会但写慢了的然后针对性地补齐短板。5.3 这套题放到现在还能不能刷有人可能会问2017年的笔试题放到现在还有参考价值吗我的答案是非常有但要有选择地刷。像HashMap源码、synchronized锁升级、JVM内存模型、SQL索引优化这些基础知识没过时甚至在今天依然是面试高频考点。而一些具体的框架内容则不建议深究比如Spring Cloud版本相关的题技术迭代太快放到现在已经没有太大意义。更重要的是这套题所反映的电商业务场景依然是当下的主流业务模式。秒杀、购物车、优惠券、订单这些模块在今天依然是电商公司的核心功能理解这些场景背后的技术方案对参加校招或者社招面试都有帮助。至于直播带货、个性化推荐这些新场景思路也是从基础场景延伸出来的基础打好了新场景自然能触类旁通。6. 写在最后的一点个人建议题目本身是死的但备考思路是活的。我见过有人刷题刷了五百道笔试依然挂也见过有人只刷了一百道却因为每道题都深入理解了底层原理轻松拿到面试机会。差别不在于数量而在于你刷题时脑袋里装的是“这段代码能过”还是“这个知识点为什么这么设计”。如果非要说准备这类电商公司笔试最重要的一件事那我会选“业务思维”。技术知识点是常青树但怎么用这些知识点解决真实业务问题才是公司筛选人才时真正看重的能力。你可以在博客上写“秒杀系统架构设计”这种文章让自己看起来很专业但如果连一个秒杀接口该怎么在代码层面保证不超卖都说不清楚那迟早会露馅。最后分享一个小技巧每次做完一整套笔试题别急着对完答案就扔把错题和不会的知识点整理成一个文档隔三天再拿出来做一遍。这一步看起来笨但对巩固记忆的效果比刷新题好太多。希望这篇复盘能帮你在准备校招的路上少走一些弯路。