ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

后端校招笔试核心考点全解析:从Java基础到数据库与系统设计

后端校招笔试核心考点全解析:从Java基础到数据库与系统设计 又到一年校招季后台收到的私信里“后端笔试怎么准备”“58同城这类大厂校招后端考什么”占了快一半。我翻出自己当年参加58同城2020校园招聘后端岗笔试时记的笔记结合这几年来做面试官、带新人的经验把那次笔试的完整复盘写出来。这篇东西不打算写成“真题答案速查”而是想告诉你面对一场正统的后端校招笔试考官到底在筛选什么能力哪些分是白送的哪些分要靠平时积累以及最关键的——从这场笔试倒推回去你的后端学习路线该怎么规划。先说结论58同城2020校招后端笔试的考察范围基本可以概括为“三大块、一条线”。三大块分别是计算机基础网络、操作系统、数据结构、Java技术栈集合、并发、JVM、Spring生态和数据库与中间件MySQL、Redis一条线则是贯穿始终的编程题。难度中等偏上不算刁钻但覆盖面很广专门背八股文的人容易在编程题上翻车而只刷LeetCode的人又容易在基础题上丢分。这场笔试本身就是一个很好的风向标——它代表了一类典型的中大型互联网公司后端校招笔试的出题思路搞懂它你再去面其他公司的后端岗底气会足很多。1. 笔试整体风格与考察逻辑1.1 题型构成与时间分配策略先还原一下当时笔试的题型构成。总时长大概120分钟题目分为三个部分单选题/多选题约20道覆盖计算机网络、操作系统、Java基础、数据库理论编程题2到3道难度梯度明显第一道属于“热身题”第二道是“中等偏上”第三道基本是“区分度题”另外还有1到2道简答/设计题会结合58同城的业务场景出题比如“设计一个帖子的关键词检索功能”之类。这个结构在当年的校招笔试里相当主流。时间分配是很多人忽略的隐形考点。我的建议是选择题每道控制在1分半以内总体不超过35分钟。编程题第一道10分钟第二道25分钟第三道留足30分钟以上。千万别在第一道简单题上反复纠结最优解先把暴力解写出来拿分比憋一个完美解但没时间提交要划算得多。简答题放到最后用15分钟左右把思路和架构图画清楚即可。1.2 从业务反推考点58同城想要什么样的后端58同城的业务形态是典型的分类信息平台——招聘、房产、二手车、本地生活服务信息量大、类目杂、用户并发高、数据实时性要求高。这种业务形态决定了对后端开发的要求首先是扎实的Java基础因为他们主站后端技术栈以Java为主其次是数据库功底海量信息分类存储和检索离不开MySQL的索引优化和分库分表设计再次是缓存和消息中间件的应用能力58同城的信息流和搜索场景对Redis、Kafka这类组件的使用非常普遍。搞懂公司业务再去准备笔试比盲目刷题高效得多。我当时把58同城的App打开逐个看它的功能模块——帖子发布、信息检索、IM聊天、订单系统、支付流程——然后反推每个模块后端会用到哪些技术点再回去对照复习。事实证明这个思路很赚因为笔试里那道设计题出的正是信息检索方向。2. 高频考点拆解Java基础与并发编程2.1 集合框架不只是背HashMap原理选择题里Java集合考察的比例很高而且出题很细。HashMap的底层数据结构、put流程、扩容时机、为什么线程不安全这属于必考。但58同城那场笔试把题出得更深了一层它问的是“HashMap在多线程环境下putJDK1.7和JDK1.8分别可能出什么问题”。前者是并发插入导致环形链表、死循环后者是数据覆盖丢失。这就不是靠背能答好的你得真理解两种版本resize()的实现差异。ConcurrentHashMap的考点同样不能只停在“分段锁”这种过时答案上。JDK1.8的ConcurrentHashMap已经改用CAS synchronized锁头节点的方式放弃分段锁。笔试如果考到你得能说清楚为什么放弃Segment、CAS在什么场景下会退化成锁、size()方法是怎么通过baseCount和CounterCell数组来统计的。另外ArrayList和LinkedList的区别、ArrayList扩容机制、CopyOnWriteArrayList的适用场景这些都是高频题但我在面试候选人时发现能讲清楚“写时复制”底层数组被volatile修饰的原因的人不到三成。2.2 JVM内存模型与垃圾回收JVM这块笔试喜欢考内存区域划分和GC算法。我当时遇到的题目是“Java对象在内存中的分配过程”选项涉及栈上分配、TLAB、Eden区、老年代的升迁条件。这道题如果你只看过《深入理解Java虚拟机》的目录而没细啃大概率会选错。要拿稳分你得把“对象优先在Eden分配 → Minor GC后存活且年龄达标 → 进入Survivor → 年龄达到15进入老年代”这条链路画得清清楚楚还要知道大对象直接进老年代、动态年龄判定这两个特殊情况。GC算法的考点集中在CMS和G1的区别上。笔试试卷里有一道多选题问“哪些垃圾收集器可以做到低停顿”当时很多人只选了CMS漏了G1。这里提醒一下回答问题前看清楚题目问的是“收集器”还是“收集器组合”很多陷阱都藏在措辞里。类加载机制这边双亲委派模型是必考但更进阶的题目会问“为什么Tomcat要打破双亲委派”这就要你理解WEB容器需要隔离不同应用的类库。2.3 并发编程从synchronized到AQS并发是后端笔试的重灾区也是区分度最大的部分。基础题会考synchronized和ReentrantLock的区别、volatile的可见性和禁止重排序原理、ThreadLocal的内存泄漏问题。进阶题会直接上AQS——我当时就被问了一道“基于AQS实现的ReentrantLock非公平锁的加锁过程是怎样的”。回答这类题脑子里得有清晰的调用链nonfairTryAcquire → CAS设置state → 成功则获取锁 → 失败则加入CLH队列 → 线程park。你还要能解释为什么非公平锁性能通常优于公平锁因为非公平锁减少了线程上下文切换。线程池的考察频率更高基本属于必考核心线程数、最大线程数、工作队列满了之后怎么办、四种拒绝策略分别是什么场景。那道选择题我记得很清楚给了一个场景“核心线程5、最大线程10、队列容量100同时来了20个任务”问有多少任务会立即执行很多人想当然选了20正确的是5个核心线程先跑剩下15个进队列队列没满不会触发拒绝策略。3. 数据库与缓存后端存储的硬核考点3.1 MySQL索引、事务与锁数据库是58同城这类信息平台后端笔试的绝对重点因为他们的业务本质就是海量信息的存储和检索。MySQL索引考点里B树和B树的区别、聚簇索引和非聚簇索引的区别、最左前缀原则这三连问几乎是标配。但让我印象最深的是一道实操题“有一个user表查询条件是where age 18 and name like 张%联合索引应该怎么建”。答案是(age, name)因为等值查询的字段放前面like在范围查询时如果符合最左前缀可以用到索引。这种题考的不是记忆而是你有没有真正建过索引、explain看没看过执行计划。事务这块ACID四个特性的理解只是基础真正拉分的是隔离级别和MVCC。笔试题里给了四个隔离级别对应的现象要你匹配“脏读、不可重复读、幻读分别在哪个级别下不会出现”。MVCC的原理一定要吃透undo log版本链 ReadView生成时机RC级别每条语句生成新的ReadViewRR级别只在第一次快照时生成ReadView。这也是RR能解决部分幻读的根本原因。锁方面行锁、间隙锁、next-key lock的加锁范围属于高级考点我当时复习时用“当前读和快照读”的角度去理解效果很好。3.2 Redis核心考点穿透、击穿与雪崩Redis在后端笔试里出现的频率极高58同城那场也考了。最经典的三连问缓存穿透、缓存击穿、缓存雪崩的区别与解决方案。穿透是查一个不存在的key解决方案是布隆过滤器或缓存空值击穿是热点key过期瞬间大量请求打到DB解决方案是互斥锁或逻辑过期雪崩是大批量key同时失效解决方案是过期时间加随机值、多级缓存、熔断降级。除了这三连问Redis的数据结构底层实现也是高频考察点。我当时遇到一题问“zset的底层实现是什么”答案是“压缩列表ziplist或跳表哈希表”。你要能解释跳表为什么替代平衡树——实现简单、范围查询方便、支持O(logN)的查找。Redis持久化RDB和AOF的区别、混合持久化机制主从复制和哨兵机制的原理这些也建议系统过一遍。另外分布式锁的考点很务实千万别说“用setnx加锁就行了”要答出Redisson的看门狗续期机制、加锁的原子性SET key value NX PX、以及为什么不能随便用setnx expire两条命令。3.3 消息队列与分布式基础虽然58同城2020那场笔试对消息队列的直接考察不多但简答题里提到了“帖子发布后如何通知关注者”这种场景实际上就是在考察MQ的应用。Kafka和RocketMQ的消息可靠性、幂等消费、顺序消费这三个问题是后端面试的常客笔试简答里也会以场景题形式出现。你可以这样理解消息队列解决的是“削峰填谷”和“异步解耦”可靠性靠生产者ACK broker持久化 消费者手动提交位移来保证幂等靠业务侧的唯一ID去重顺序消费在Kafka里靠单分区 同步发送实现。4. 网络与操作系统容易被忽略的送分题4.1 TCP三次握手与四次挥手这些细节别丢分网络协议的基础题尤其是TCP三次握手和四次挥手属于“绝对不能丢的分”。但很多人只背了“三次握手、四次挥手”这八个字细节一问就懵。58同城笔试考的是TIME_WAIT为什么主动关闭方要进入TIME_WAIT并等待2MSL。原因有两个——保证最后的ACK能让对方收到如果丢失可以重传以及让本连接的所有报文在网络中消失避免影响新连接。光能说出这两点你就已经赢过大部分人。HTTP相关的考点同样高频。HTTP/1.1、HTTP/2、HTTPS的区别尤其HTTP/2的多路复用解决队头阻塞的原理。HTTPS握手过程中证书验证、密钥协商的流程也是出题热点。我记得有道人题给了四个关于HTTPS的描述让选错误的四个选项里有一个是“HTTPS使用对称加密传输数据用非对称加密交换密钥”看起来对但表述不够准确因为实际场景中还有证书签名验证的环节。这种题考的是你有没有真正追过细节。4.2 操作系统进程线程、死锁与IO模型操作系统校招题考察范围其实比较固定。进程和线程的区别、进程间通信方式管道、消息队列、共享内存、信号量、socket、上下文切换开销的来源这些属于送分题。死锁的四个必要条件互斥、占有且等待、不可剥夺、循环等待要背熟还得知道对应的预防策略。生产者消费者模型的面经答案要能默写出来。IO模型这块阻塞IO、非阻塞IO、IO多路复用、异步IO的区别以及select、poll、epoll的对比是后端笔试的进阶考点。零拷贝、mmap这些概念我在笔试里没遇到但在后续的技术面里被问了。这块如果没时间深挖至少把epoll的LT和ET模式搞清楚因为很多公司的后端笔试把这道题当作区分度题目来出。5. 算法与编程题实战复盘5.1 高频算法题型数组、链表、树与动态规划58同城2020校招后端笔试的编程题整体难度在LeetCode Medium上下第三题接近Hard的思维难度但代码量不大。三道题的题型分布大概是第一道类似“字符串中的第一个唯一字符”用哈希表统计频率就能过第二道是链表操作我记得是“每K个一组反转链表”这类链表题的核心是“先写反转子函数再处理边界”第三道是动态规划类似“编辑距离”的变形题考的是状态转移方程能不能写对。对于算法题我的建议是一定要按题型系统刷题切忌随机刷。数组双指针、滑动窗口、链表操作、二叉树遍历前中后序 层序、DFS/BFS、动态规划入门背包、子序列、编辑距离、TopK问题堆排序/快排思想这七类题型覆盖了后端笔试80%以上的编程题。TopK问题尤其推荐用快排的partition思想实现因为时间复杂度O(n)优于堆的O(nlogk)而且代码量不大。我当时笔试前一周集中刷了50道高频题策略很简单每道题先自己写半小时写不出来就看题解看完题解必须自己独立重写一遍。5.2 笔试环境与编程实战技巧在线笔试和平时本地IDE刷题完全是两回事。首先你要提前熟悉线上编辑器很多平台不做代码补全和语法高亮你要能白板写代码。其次笔试平台输入输出格式的坑非常多常见的有字符串输入包含空格、要一次性读取多行、结果要求保留指定小数位。我的经验是开考后先花2分钟把输入输出模板写好再去做题能省掉大量调试时间。还有几个实战技巧值得分享一是先写暴力解再优化你拿到的分永远比“没提交”多二是JAVA选手务必掌握Scanner和BufferedReader的区别数据量大的场景用后者性能更好三是如果一道题卡了20分钟没思路果断放弃跳到下一题回头有时间再看。第三点在编程题三连做的时候尤其重要别因小失大。6. 系统设计与项目经验题6.1 场景设计题的答题框架简答/设计题是58同城校招笔试的特色基本会结合他们自己的业务出。我遇到的那个印象深刻设计一个帖子关键词检索功能要求给出数据存储方案、检索流程、以及如何优化检索速度。这类题不要求你写出完整可运行的代码而是考察你有没有架构思维能不能把一个大问题拆解成几个模块。我的答题思路分四步第一步划清功能边界明确检索范围本地生活服务信息、招聘职位、房产帖子等第二步设计数据存储核心索引表用MySQL 倒排索引Elasticsearch的混合方案热度高的类目实时索引长期数据走批量索引第三步描述检索链路用户输入关键词 → 分词 → 查询ES → 过滤/排序 → 返回结果第四步谈优化方向缓存热词结果、多副本负载均衡、索引分片策略。即使你的方案不够完美只要逻辑自洽、每个环节都说清楚了都能拿到不错的分数。6.2 如何把项目经历讲出亮点笔试虽然不直接考项目但设计题的底层逻辑和项目经验的积累是相通的。这里多说一句面试时让你讲项目千万别只说“我做了一个前后端分离的xx管理平台”要给项目找“记忆点”。比如你用Spring Boot Vue做了一个前后端分离的订单管理系统那么亮点可以是手动实现了接口幂等性方案解决了重复下单问题或者用Redis缓存热点商品信息把接口响应从800ms降到了80ms。有数据、有对比、有思考才算一个有说服力的项目。从备考角度来看一个“能打的”后端项目应当至少包含这些技术要素Spring Boot/Spring Cloud搭建服务、MySQL表结构设计和索引优化、Redis做缓存和分布式锁、消息队列做异步解耦最好还有登录鉴权JWT或Spring Security和统一的异常处理。不需要多高大上但每一个模块你都要能讲出“为什么这么做”。7. 备考路线与资源清单7.1 后端学习路线从Java基础到工程实践结合58同城这场笔试的考察范围我给一条可执行的后端学习路线按优先级排序第一阶段是Java基础语法和集合框架配合《Java核心技术卷I》食用重点把HashMap、ArrayList、LinkedList的源码过一遍。第二阶段是并发编程和JVM推荐《Java并发编程的艺术》和《深入理解Java虚拟机》的JMM、GC章节配合JMC或JVisualVM实操。第三阶段是数据库MySQL看《高性能MySQL》的前三章就够笔试用了重点练索引设计和SQL调优Redis看《Redis设计与实现》。第四阶段是框架和中间件Spring Boot在官网过一遍quickstart理解自动配置原理、Bean生命周期然后自己搭项目练手。第五阶段才是刷题和做项目算法题每天保证3到5道保持手感项目不必贪多一两个能深挖的就行。7.2 那些年我们追过的“后端笔记”和面试题很多人喜欢囤资料GitHub上点了star就再也没打开过。我的建议是资料在精不在多一份《Java后端面试200问》从头啃到尾的效果远好于收藏10份资料每份都看两页。这块提几个实用的Java后端面试题型的200问类笔记适合第一轮系统过知识点面经网站上的最新笔试合集用于考前突击体验题型自己整理的错题本这个最有用——每做错一道选择题就把相关知识点写进笔记考前只看错题本。网上现在还流行“后端八股文”的说法我的态度是八股文是拿来查漏补缺的不是拿来背的。同一个知识点你能用自己的话向别人讲清楚才算是真会了。我当时准备了一个“费曼学习法”的变种每天睡前挑白天复习的一个知识点发一条微博讲清楚几十个字到几百字不等。坚持一个月后面试官问什么我都心里不慌因为我已经用最朴素的语言给别人讲过一遍了。8. 常见问题与踩坑实录8.1 笔试现场最容易犯的错这几年帮学弟学妹复盘笔试发现大家在考场上最爱犯的错高度一致。第一是没有提前调试环境笔试开始时才发现在线IDE不适配、本机网络有问题白白浪费了20分钟。第二是审题不清比如题目要求“输出排序后的下标”结果写成“输出排序后的数组”这类错误在紧张状态下尤其容易发生。第三是时间分配失衡前面选择填空抠细节耗时太久最后编程题没时间做。针对这三类问题我的建议是笔试前一周一定要用目标平台的模拟功能至少做一次全真模拟拿到题目先花1分钟把题目里的“输出要求”画出来任何一道选择题如果超过2分钟还没有确定的答案先标记出来选一个全部做完之后再回头仔细想。记住一个原则校招笔试的及格线不是满分而是过线战略性地放弃某些分是为了保全更大的分。8.2 备考期间的几个认知误区把时间拉长来看很多人在备考阶段就输了。一个常见误区是“只刷题不看书”结果选择题里稍微偏一点的知识点全靠蒙。另一个误区正相反——“只背书不刷题”理论背得滚瓜烂熟上机写链表反转都调试半天。正确的做法是两者并行每天2小时刷题1小时过知识点。还有一个容易被忽视的误区低估基础题的威力。很多人把精力集中在动态规划、系统设计这些“大块头”上结果笔试卷子发下来发现考得最多的反而是进程线程区别、TCP握手、HashMap原理这些基础题。基础题的特点是覆盖面广、分值不大但数量多积少成多之后非常可观。把基础题的正确率从70%提到90%比死磕一道偏难怪编程题划算得多。最后说点实在的。58同城2020校招后端笔试过去这么多年了题目细节我可能记不全但那次备考的过程和思路后来反复用在我带新人、做面试官的经验里。你会发现无论是校园招聘还是社会招聘优秀的后端工程师都具备三个共同特质基础扎实、思路清晰、能把手里的技术工具用出业务价值。笔试只是检验这些特质的第一步。如果你正在准备校招别把眼光局限在某一家公司上——以这场笔试为坐标系把技术的宽度打出来再在项目里挖出深度你的校招之路会顺畅很多。
返回列表