公司动态
58同城2025后端校招笔试复盘:考点、题型与复习策略
每年秋招季后端岗位的笔试总能让不少人半夜睡不着觉。我也经历过那段刷题刷到头皮发麻的日子前前后后投了不少公司58同城的笔试给我留下的印象还挺深——它的题目不偏不怪但覆盖面很广对“工程基础扎实程度”的考察特别直接。这篇文章不打算去回忆具体原题网上其实也找不到什么靠谱的真题合集而是把“58同城2025校园招聘笔试-后端”这类笔试背后真正想考的东西拆开讲清楚包括考点布局、复习优先级、典型题型怎么答以及我踩过的那些坑。如果你正在准备后端校招不管是投58同城还是其他互联网公司这份复盘应该都能帮你少走点弯路。先说明一下这里的“后端”指的是服务端开发方向和芯片设计里的“数字后端”完全是两码事。58同城这类本地生活服务平台业务场景集中在招聘、房产、二手车、本地服务这些板块每天要处理大量的信息流、搜索、推荐和交易请求所以它的后端工程师笔试基本就是围绕“能不能写好业务代码、能不能处理高并发场景、能不能快速定位性能瓶颈”这几个核心能力来出题的。1. 笔试整体思路拆解这块后端笔试到底在筛选什么样的人1.1 从业务形态反推考察方向58同城的后端技术栈业内公开资料和招聘JD里能看出个大概以Java为主Spring Boot/Spring Cloud是主流框架体系数据库用MySQL居多缓存和消息队列基本标配Redis和Kafka/RabbitMQ那一套。为什么笔试要强调这些因为58同城的业务是典型的“流量大、数据量大、请求模式复杂”——用户搜职位、看房源、刷二手车信息每一个动作背后都是一连串的数据库查询、缓存读写和接口调用。所以笔试题目里的编程题、SQL题和场景题表面上是在考具体知识点实际上是在模拟真实业务里的性能瓶颈和架构决策。比如一道“统计某个时间段的用户活跃数”的SQL题本质是在问你会不会建索引、会不会避免全表扫描这直接对应线上慢查询的排查能力。现在很多公司校招后端笔试已经从“刷LeetCode硬题”转向“基础题场景题编程题”三合一的模式。58同城这套卷子也是如此——编程题不会到竞赛难度但会在基础细节上卡人场景题不会让你真去画架构图但会让你描述方案取舍。整体感受是它想筛掉的是“只能背八股但写不出干净代码”的候选人想留下的是“计算机基础扎实、能动手、能落地”的人。1.2 试卷结构与大致的分数权重我不掌握官方评分细则下面只是根据参加过笔试后的复盘和圈子里交流的普遍结论来推断仅供参考。题型常见考察内容大致占比推断选择题计算机网络、操作系统、数据库、Java基础30%编程题数组/链表、二叉树、动态规划、模拟题30%SQL题多表关联查询、分组统计、窗口函数、索引优化15%场景/简答题缓存设计、接口设计、限流/幂等、高并发处理思路25%这个分布说得很直白编程题决定你能不能进下一轮而选择题和场景题决定你在同分段的排名。别小看选择题很多候选人能写好编程题却栽在“TCP第三次握手失败时会做什么”“MySQL默认隔离级别下会不会出现幻读”这种细节上。“经验之谈如果你想投的是58同城这类以业务驱动为主的平台型公司复习重心应该往数据库、缓存、分布式基础倾斜纯算法的边际收益没有想象中那么高。反而是一些大厂喜欢出硬核算法题备考前最好先查清楚目标公司的技术氛围和笔试风格再决定准备策略。”2. 核心考点拆解与实操要点2.1 算法与数据结构编程题不是竞赛题先说编程题。这类笔试的编程题一般控制在两道到三道难度梯度大概是“一道简单偏中等 一到两道中等”。常见考点集中在数组、链表、字符串、哈希表、二叉树、栈与队列、排序、二分、简单DP这几类。我建议复习时抓几个重点方向一是数组和双指针的配合比如快慢指针找链表环、左右指针逼近两数之和二是二叉树的遍历和递归改写层序遍历、前中后序的递归与迭代版本都要能闭着眼写三是动态规划的入门题最大子序和、爬楼梯、打家劫舍这类基础DP状态转移方程要能自己推出来四是模拟题这类题没有固定套路考的是“按照题目要求一步一步实现”的能力代码写干净、逻辑闭环就行。不要把所有精力都放在难题偏题上。58同城这套笔试的编程题更接近业务开发里的“工具函数”——给你一个明确输入输出要求让你写一个逻辑完整的函数。它要考察的是代码规范、边界处理、时间空间复杂度意识而这类能力恰恰是校招生最容易被面试官挑毛病的地方。实操心得做题时先把题目里“输入范围”看清楚。比如数组长度是不是可能为0数值范围会不会超过int上限排序要求稳定还是不稳定这些点决定了你要不要写特判、选什么排序算法。我见过太多人在笔试里因为漏了边界case导致大面积超时或报错。2.2 数据库SQL题考察的是“能不能写对索引”后端笔试里SQL题通常是必考的而且58同城这种业务公司很重视这块。看似在考SQL语法其实真正考的是对索引、执行计划、事务隔离级别的理解。高频考点有三块。第一块是聚合统计类SQLGROUP BY COUNT/SUM/MAX配合HAVING还有日期函数DATE_FORMAT、DATE_SUB的使用。第二块是多表关联INNER JOIN和LEFT JOIN的区别、ON和WHERE的执行顺序这些必须真正理解而不是背结论。第三块是窗口函数ROW_NUMBER()、RANK()、SUM() OVER(PARTITION BY ...)这类在“求每类物品销量前三”这种题里很常用复习时必须掌握。除了语法还要能把“索引命中的原理”讲明白。比如最左前缀原则到底什么情况下索引失效覆盖索引为什么能减少回表次数一个慢查询给你EXPLAIN结果你要能看出它是走了全表扫描还是索引扫描。2.3 计算机网络选择题的重灾区网络基础是选择题里占比最高的模块之一重点是TCP/IP和HTTP。TCP三次握手和四次挥手几乎是必考的而且会抠细节SYN泛洪攻击属于三次握手的哪个环节、TIME_WAIT为什么要等待2MSL、第四次挥手的ACK丢失会怎样。HTTP部分要掌握的是状态码的语义和缓存机制比如301和302的区别、304缓存的触发条件、Cookie和Session的区别。这两年还经常考HTTPS建立连接的完整流程——客户端是怎么拿到证书的、对称加密和非对称加密分别用在哪一步。这些内容看起来基础但真到选择题里换几个干扰选项很多人还是容易懵。2.4 操作系统与并发Java后端逃不掉的那座山后端岗位对操作系统的要求主要集中在进程与线程、调度算法、死锁、内存管理这几个主题。为什么后端逃不掉这些因为写的服务本质上就是一堆进程/线程在抢CPU、抢内存、抢磁盘IO。线上遇到CPU飙高第一反应就得想到是死循环、GC频繁还是线程过多这些都是操作系统层面的知识。并发相关的内容推荐结合Java来复习synchronized和ReentrantLock的实现原理与区别、volatile的内存语义、CAS和ABA问题、线程池的核心参数与拒绝策略。这些既是笔试选择题的高频考点也是后面面试必问的内容。准备时别只看结论要能说清楚“为什么”比如“为什么volatile不能保证原子性”这种问题。2.5 框架与中间件不写代码但考你能不能聊明白Spring、Spring Boot、Redis、消息队列是后端日常开发的支柱笔试里一般不会让你写配置但会通过选择题和简答题考察理解深度。Spring和Spring Boot方面常考的是IoC和AOP的基本概念、Spring Boot自动配置原理、Bean的生命周期、Spring MVC的请求处理流程。Redis方面必考的是缓存穿透、缓存击穿、缓存雪崩的区别与应对方案以及String、Hash、List、Set、ZSet这五种数据类型的底层结构和使用场景。消息队列方面Kafka和RabbitMQ至少了解一个的模型——生产者、消费者、Topic、分区、消费组——以及“为什么需要削峰填谷”这种业务动机。3. 实操过程与核心环节实现三道有代表性的模拟题目这一节我选了笔试题里最常出现的三种类型分别对应编程题、SQL题和场景设计题。每道题都给出我的完整思考过程和解题思路方便你体会“拿到题该往哪个方向想”。3.1 编程题模拟找出数组中出现次数超过一半的数字题目描述给定一个长度为n的数组其中有一个数字出现的次数超过数组长度的一半找出这个数字。要求时间复杂度O(n)空间复杂度O(1)。拿到这道题第一反应是哈希表计数遍历一遍统计每个数字出现的次数再去找答案时间复杂度O(n)空间复杂度O(n)。但题目明确限制了空间复杂度O(1)这时候就要想到一个很经典的做法——摩尔投票法。核心思想是“同减异消”。维护一个候选数字candidate和一个计数器count初始count为0。遍历数组时如果count为0就把当前数字设为candidatecount置为1否则如果当前数字等于candidatecount加一如果不等于count减一。最后留下的candidate就是众数。为什么成立因为众数的数量比其他所有数字之和还要多所以在“同减异消”的过程中众数最终一定能留下来。这是整个算法正确性的核心面试或笔试复盘时要把这个理由写清楚。public int majorityElement(int[] nums) { int candidate 0; int count 0; for (int num : nums) { if (count 0) { candidate num; count 1; } else if (num candidate) { count; } else { count--; } } return candidate; }这类题目考的是“已知常见解法后能否在限制条件下想到更优方案”。哈希表人人会用但会写摩尔投票法的人说明对算法原理本身有理解。笔试时如果时间紧张先用HashMap的版本做出来拿到基本分再优化成O(1)空间也不迟但前提是笔试系统允许你提交多次。3.2 SQL题模拟统计每个城市的月活用户数题目描述有一张用户登录记录表login_log字段包括user_id、login_date、city。统计每个城市在2024年的月活用户数一个用户同一个月内多次登录算一次按城市和月份排序输出。先拆解需求需要按“城市”和“月份”两个维度分组用户去重。月份可以从login_date中用DATE_FORMAT函数提取。核心SQL长这样SELECT city, DATE_FORMAT(login_date, %Y-%m) AS month, COUNT(DISTINCT user_id) AS active_users FROM login_log WHERE login_date 2024-01-01 AND login_date 2025-01-01 GROUP BY city, DATE_FORMAT(login_date, %Y-%m) ORDER BY city, month;这道题有几个容易踩的坑。第一COUNT(DISTINCT user_id)不能写成COUNT(user_id)后者会把同一用户的多次登录都算进去。第二WHERE条件过滤日期范围时如果用login_date 2024-01-01 AND login_date 2025-01-01可以让索引在范围查询条件下正常生效如果写成BETWEEN 2024-01-01 AND 2024-12-31落在12月31日当天但不在23:59:59时间点的数据可能被漏掉。第三GROUP BY后面的表达式必须和SELECT里的别名保持一致否则很多数据库会直接报错。如果还想进一步考察执行效率可以追问如果表数据量是亿级这条SQL怎么优化常规答案是建立一个(city, login_date, user_id)的联合索引让GROUP BY和WHERE条件都能利用索引。要是再深一层可以考虑按年度分表或按城市分表但笔试里答到索引这个层面已经足够了。3.3 场景设计题模拟如何设计一个短链接服务这类题是后端笔试里的“综合大题”它不考单一知识点而是考整体设计思路。题目通常很短就一句“请设计一个短链接服务”但留给你的发挥空间很大。我的思考框架是先明确需求再拆模块。一个短链接服务的核心链路是用户提交长链接系统生成一个短码用户访问短链接时重定向到长链接。围绕这个链路有几个核心问题要回答第一短码怎么生成可以用发号器方案用一个全局自增ID如数据库自增或雪花算法和一个62进制转换将数字转为大小写字母加数字的组合来生成唯一短码。也可以在发号后做哈希取模再拼接随机串来防猜测。要说明方案的安全性和扩展性差异。第二短码和长链接的映射关系存哪答案是“存储层缓存层”两层结构。存储层用MySQL的短码映射表缓存层用Redis做热点数据的加速缓存减轻数据库压力。这部分要补充过期策略比如热门短链接常驻缓存、冷数据淘汰。第三访问短链接为什么会快需要引入“301还是302”的选择。301表示永久重定向浏览器会缓存结果下次直接走本地服务端压力小但没法统计点击量302临时重定向则相反每次都会请求服务端便于做点击统计和分析。业务上如果重数据统计一般选302。第四如何支撑高并发可以从CDN、缓存预热、限流、降级几个层面来答。比如在Redis里加缓存、为短码生成接口做限流、对单个API设置流量阈值等。这些不用展开太细但要让面试官或评分人知道你有“系统化考虑问题”的习惯。这类题没有标准答案关键是展示你的思考链路清晰、有主次、能落地的部分优先讲。东扯西扯聊分布式和微服务反而会让别人觉得你还停留在概念层面。4. 常见问题与排查技巧实录4.1 编程题提交总是不通过问题出在哪笔试过程中最崩溃的事情就是本地跑的好好的提交上去就是错的。根据我的观察问题多半出在边界条件和输入输出格式上。第一个坑是数组或字符串为空时没有处理。比如排序算法里如果输入长度为0很多写法会直接越界。第二个坑是整数溢出题目给的数字范围可能超过int上限所以遇到数组求和、乘法运算优先考虑long。第三个坑是循环里的死循环或停不下来比如链表题忘了判空导致指针越界。第四个坑是输出格式要求换行的没换行要求保留两位小数的没用对格式化方法这种低级失误在紧张状态下特别容易犯。这里给一个自查清单输入范围看开没看边界、循环变量有没有可能越界、递归有没有出口、类型够不够大、题目输出是原样打印还是需要额外处理。4.2 时间不够用题目又多又杂怎么分配我在真实笔试里见过很多人的状态选择题每一道都纠结编程题写到一半发现时间不够SQL题完全没来得及写。所以提前想好时间分配是必要的。我的原则是“先拿稳分再啃难题”。编程题分值高优先做选择题控制节奏平均一道题不超过1分钟SQL题如果卡住了就先写主体框架能得一分是一分。具体时间比例可以按“编程题45%、SQL题20%、选择与简答35%”来分配当然还是得根据实际题量和难度调整。实操心得开考后先用两三分钟快速掃一遍所有题目判断题型分布和自己最有把握的部分。从最容易拿分的题开始写确保手热后再去碰难题。这个策略帮我在多次笔试里保住了基本盘也推荐你试试。4.3 笔试系统的手感问题考前一定要练很多公司的笔试系统都有自己的代码编辑器有的支持代码补全有的不支持有的甚至要自己去处理标准输入输出格式还有的只给核心函数让你补全实现。这点特别重要。如果你平时写代码完全依赖IDE的自动提示、格式化快捷键到了笔试系统里可能疯狂打错字。建议考前用牛客网或者一些在线编辑器多练几次特别是读“标准输入”和“按行输出”这类逻辑。还有一点多数笔试平台是有“本地IDE可以用但代码必须复制回网页提交”的机制提交前一定要反复检查复制进去的代码和本地一致最好把代码格式整理干净再复制。4.4 简答题怎么答才能拿高分后端笔试里的简答题与其说是“考察知识点”不如说是“考察表达逻辑”。如果一个知识点你懂但答得东一句西一句评分人很难给你高分。我建议采用“结论先行、分层展开、首尾呼应”的思路。比如被问到“缓存穿透如何解决”第一句先回答缓存穿透是指查询一个不存在的数据导致请求直接打到数据库解决思路包括缓存空值、布隆过滤器、接口参数校验三类。然后每一类展开一两句说明实现方式和适用场景。这样答既清晰又专业。这里特别提醒能画出流程线上图或写个简短的伪代码会比纯文字描述更有说服力。虽然笔试系统可能不支持画图但用文字“输入层 - 缓存层 - 存储层 - 响应层”来描述流程同样能把层次感体现出来。5. 我的备考时间线与复盘建议如果你的笔试时间还没到建议按“抓基础 - 刷真题 - 模拟实战”三个阶段来准备。抓基础阶段大约4-6周把计算机网络、操作系统、数据库、Java基础的系统性知识点过一遍重点理解原理而不是背结论。刷真题阶段2-3周集中刷LeetCode热题100、牛客网的后端真题以及SQL专项练习。模拟实战阶段考前1周每天进行一次完整的限时笔试模拟控制好时间节奏。至于要不要背面试八股我的观点是八股可以看但不能只背。后端技术更新快同一个问题在不同语境下答案可能不一样。比如“Spring Boot自动配置原理”如果你不真正打开spring-boot-autoconfigure源码看过光背答案是很难在追问中站住脚的。笔试虽然不追问但下一轮面试很可能追问。另外强烈推荐养成“复盘错题”的习惯。每次笔试或练习后把做错的题按知识点分类整理找出自己的薄弱环节有针对性地补强。比如我发现自己在TCP状态转换和窗口函数上经常错就会专门找这两个模块的题目连续练几天直到错题率降下来。6. 笔试不是终点是读懂公司的第一块拼图准备58同城后端笔试的过程本身也是一次对“后端工程师到底要会什么”的系统梳理。从算法到数据库再到分布式基础你会发现这些考点之间是有逻辑联系的它们共同拼出了一张“后端技术地图”。考完笔试后无论结果如何我建议你把这套知识框架继续往深处扩展——因为你会发现面试官第二轮问的问题往往就是笔试选择题的知识点翻了个面。最后再说个我自己的体会笔试和面试不太一样笔试更看“稳定发挥”面试更看“临场反应”。所谓稳定发挥就是把会做的题尽量不丢分把能想到的思路都写出来别因为一道题卡住就慌了神。遇到不会的题先跳过最后哪怕写一个暴力解也比空着强。这就是我反复说“保基本盘”的原因。祝你的秋招季顺利后端笔试一次通过。