十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

58同城后端校招笔试题复盘:核心考点与实战思路

58同城后端校招笔试题复盘:核心考点与实战思路 每年的八九月份校招笔试就像潮水一样涌过来。我前几天刚陪一个学弟复盘完他的秋招流程翻到58同城2023校招后端岗的笔试题时觉得这套题放在今天看依然有很强的参考价值。它不偏不怪题型覆盖很典型从数据结构、算法到JVM、MySQL、网络再到项目问答基本把后端校招笔试该踩的点都踩了一遍。这篇文章就把我当时整理的高频考点、实战思路和复盘过程写出来给正在准备后端点岗位的同学做一份参考地图。1. 笔试形态与考点布局这套题在考什么先说结论58同城这套后端校招笔试整体难度属于中等偏上但不会故意卡人。它更看重基础是否扎实、算法能不能一遍写对、遇到问题有没有清晰的排查思路而不是追求偏题怪题。1.1 题型构成与时间分配我拿到的这套试卷题型大致分成三块题型题量建议用时考查方向单选/多选20道左右25分钟计算机基础、Java基础、数据库、网络编程题2道50分钟数据结构与算法、编码能力问答/设计题1~2道25分钟项目经验、系统设计思路整体时间一般是90分钟到100分钟。这个分配很关键我见过不少同学在选择题上纠结太久导致编程题没写完。我的建议是选择题严格控制时间一道题超过一分半还没思路就先标记跳过去先把后面的大头分数拿稳。1.2 考点分布与优先级判断从真题反馈和我自己刷题的经验来看考点能分成几个梯队第一梯队是数据结构与算法占比最高也最拉分。链表反转、二叉树遍历、TopK问题、字符串处理、DFS/BFS、动态规划都是高频出现的老朋友。第二梯队是Java基础和数据库。Java这边集合类源码、HashMap底层、并发编程、JVM内存模型是必考重点。数据库就是索引、事务、锁还有SQL手写。第三梯队是计算机网络、操作系统和Spring框架。网络重点在TCP三次握手四次挥手、HTTP状态码、HTTPS流程操作系统重点在进程线程、死锁、内存管理。这里提一句复习的时候别平均用力。算法和Java基础如果不够熟性价比最高的是先死磕这两块。网络和操作系统可以放到后面用刷题的方式快速过框架类只要准备几个高频问题就够了笔试一般不会深挖Spring源码。2. 算法编程题实战复盘从题意到AC的完整链路算法题是整套卷子的得分大头也是很多人的心理阴影。我复盘了当时遇到的题目和后来整理的高频题选两道最典型的来拆解。2.1 链表题反转链表的变体思路有一道题是“反转链表中第m到n个节点之间的部分”这道题是力扣92题的变体。它比全链表反转多了一个边界条件处理很能考出基本功。解题思路分三步走建一个哑节点dummy指向头节点避免头节点被反转时需要特殊处理。找到第m个节点的前驱节点pre这一步需要先走m-1步。进行m到n区间的局部反转反转方法和普通反转链表一样只是要控制反转次数为n-m次。代码核心段大概是这样的思路ListNode dummy new ListNode(0); dummy.next head; ListNode pre dummy; for (int i 0; i m - 1; i) { pre pre.next; } ListNode cur pre.next; for (int i 0; i n - m; i) { ListNode next cur.next; cur.next next.next; next.next pre.next; pre.next next; } return dummy.next;这里的核心技巧是用pre.next作为每次插入位置的指针不需要记录太多临时节点。我一开始写链表题喜欢维护一堆临时变量后来发现越简洁的写法越不容易出错。2.2 TopK问题堆排与快选怎么选另一道高频题是“求数组中第K大的元素”。这道题有两个主流解法很多人在笔试时纠结选哪个。用堆排序的思路维护一个大小为K的小顶堆遍历数组堆顶就是第K大的元素。时间复杂度O(nlogK)。笔试时用Java的话直接PriorityQueue就能实现代码量不大建议优先选这个方案。PriorityQueueInteger heap new PriorityQueue(k); for (int num : nums) { if (heap.size() k) { heap.offer(num); } else if (num heap.peek()) { heap.poll(); heap.offer(num); } } return heap.peek();如果用快速选择算法平均时间复杂度是O(n)但最坏情况会退化到O(n²)。笔试现场如果对快排的partition过程不够熟我不建议冒险用快选因为边界条件一旦写错调试起来很浪费时间。堆排虽然复杂度常数大一点但胜在稳定可靠。2.3 编码环节的提分细节代码能AC是一回事代码能不能让面试官“觉得你行”是另一回事。笔试系统虽然不会直接看代码风格但很多公司的笔试题会和后面的面试官共享你写的代码面试官是能看到的。这里有几个细节值得注意变量命名别用a、b、c这种用meaningful的名称比如pre、cur、visited、count一眼能看懂作用。循环边界条件写清楚不管是i n还是i n - 1保持全篇一致。能加注释的关键逻辑加一行注释表明你确实理解这段代码在做什么。写完自查一遍边界条件空数组、只有一个元素、K超过数组长度这些情况代码能不能正确处理。3. 计算机基础选择题考点拆解八股文的正确打开方式选择题部分看起来知识点很散实际上还是有规律可循的。我按Java、数据库、计网、操作系统四个方向来梳理。3.1 Java基础集合类源码与并发JUCJava基础里最常考的还是HashMap和ConcurrentHashMap。HashMap的底层数据结构、put流程、扩容机制、红黑树转换阈值这些是每年校招的保留曲目。可以结合源码去记不要死背结论。比如HashMap在JDK8的put流程我会这样给自己讲一遍先算key的hash通过扰动函数让高位也参与寻址然后看table数组对应位置是不是空。如果是空就直接插入如果有值就拉链链表长度超过8且数组长度到达64就转红黑树。扩容时JDK8的优化是元素要么留在原位要么移动旧容量大小到新的位置不需要重新计算hash。并发这块synchronized和ReentrantLock的区别、volatile的可见性和有序性、ThreadLocal的内存泄漏问题、线程池的核心参数和拒绝策略都是高频考点。线程池的参数一定要记清楚corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory、handler缺一不可。还有线程池的提交流程先判断核心线程、再往队列里塞、再判断最大线程数、最后走拒绝策略。3.2 数据库索引、事务与锁机制数据库这块索引是绝对重点。聚簇索引和非聚簇索引的区别、联合索引的最左前缀原则、回表、覆盖索引、索引失效的场景每个都值得花时间整理成自己的笔记。我复习索引时习惯用一套自己的话术去理解聚簇索引就是数据本身按索引顺序存储叶子节点直接存整行数据非聚簇索引叶子节点存的是主键值。回表就是先查非聚簇索引拿到主键再用主键查聚簇索引拿数据。覆盖索引就是查询的字段本身就在索引里不用回表性能好。索引失效的常见场景包括对索引列用了函数或计算、隐式类型转换、like以通配符开头、联合索引不满足最左前缀。事务隔离级别和MVCC也是一定要掌握的。四个隔离级别——读未提交、读已提交、可重复读、串行化对应的脏读、不可重复读、幻读问题MySQL默认是可重复读但InnoDB通过间隙锁和MVCC解决了部分幻读问题。这些内容最好能在理解的基础上自己讲一遍而不是背概念。锁机制方面全局锁、表级锁、行级锁、间隙锁、临键锁的区别和应用场景要能分清楚。尤其是临键锁它是行锁和间隙锁的结合InnoDB默认的隔离级别下范围查询会用临键锁来防止幻读。3.3 计算机网络TCP与HTTP高频点网络这块最常考的还是TCP。三次握手和四次挥手的状态变化要像背电话号码一样熟SYN_SENT、SYN_RCVD、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、LAST_ACK、TIME_WAIT、CLOSED。TIME_WAIT这个状态值得多说一句因为它经常被追问。主动关闭连接的一方会进入TIME_WAIT状态等待2MSL后才彻底关闭。为什么要等2MSL两个原因第一要保证最后一个ACK能到达对端如果对端没收到会重发FIN这个时间段内还能响应第二让本连接产生的所有报文段都能从网络中消失避免污染后续的连接。HTTP这边状态码的语义要记清楚尤其是301和302的区别401和403的区别。301是永久重定向302是临时重定向401是未认证403是服务器理解了请求但拒绝执行。HTTPS的握手过程重点是SSL/TLS握手客户端和服务端怎么交换证书、怎么协商对称密钥也要能画出来讲一遍。3.4 操作系统与Linux并发三板斧操作系统选择题常考的是进程和线程的区别、进程间通信方式、死锁的四个必要条件、页面置换算法、虚拟内存。进程间通信方式总结下来就是八种管道、FIFO、消息队列、信号量、共享内存、信号、socket、eventfd。面试秋招问到最多的是管道和共享内存的区别。管道是内核缓冲区单向流动适合父子进程或兄弟进程共享内存是最快的IPC方式但需要同步机制配合。死锁四个条件——互斥、持有并等待、不可剥夺、循环等待。破坏任意一个都能避免死锁比如资源一次性分配破坏持有并等待允许抢占破坏不可剥夺。Linux命令这块常考的有查看端口占用netstat -tlnp、查看进程ps -ef、查看内存free -m、磁盘df -h、日志查看tail -f。还有grep、awk、sed这三个文本处理三剑客笔试不一定现场让你写但后面的面试大概率会问。4. 项目问答与系统设计题让开放题变成送分题58同城的笔试后面还附带简答或设计类题目通常是让你聊一聊自己做过的项目或者给一个场景让你设计方案。这类题目看起来开放其实有固定的回答框架。4.1 项目介绍STAR法则的实战应用项目介绍题推荐用STAR法则来组织回答情境、任务、行动、结果。但更要提醒一个常见误区很多同学介绍项目时只讲功能不讲技术难点和思考过程。面试官想听的不是“我实现了登录注册”而是“我在实现登录注册时遇到了什么问题是怎么排查和解决的”。举个例子假如项目里有用户登录模块别只说用了JWT。你要能讲清楚token过期了怎么处理、用户退出登录怎么让token失效、多端登录怎么控制、密码加密用的什么方案、为什么不用MD5而用BCrypt、接口被刷了怎么防。这一层一层追问下去才是项目经验真正的含金量。还有一个经验是准备项目时可以提前列出“面试官可能会追问的10个问题”清单。比如这个项目的并发量大概多少你做过压测吗数据库表怎么设计的索引怎么建的为什么如果某个接口响应很慢你会怎么排查如果数据库数据量翻十倍你的方案还能撑住吗 把这些问题提前准备好回答的时候就不会慌。4.2 设计题先定边界再谈方案开放设计题通常是类似“设计一个短链接系统”或者“设计一个秒杀系统”的题目。这种情况下最重要的是展现你有结构化的思考而不是一上来就堆技术名词。我的回答框架是四步走第一步明确需求边界。先问清楚是面向C端还是B端预估的QPS是多少数据量多大是否需要强一致。这些信息不同方案可以完全不一样。第二步定义核心接口。短链系统就是两个接口生成短链和跳转长链。秒杀系统就是预减库存、创建订单、支付回调。第三步画数据模型。短链系统的核心表就是短链映射表字段包括短码、长链接、创建时间、过期时间。要考虑短码生成算法比如发号器或者哈希截断。第四步考虑性能与扩展性。加缓存、削峰、限流、异步化把这些关键词落到具体的实现方案里。这套框架的好处是即使你对某个技术方案不熟悉也能让面试官看到你思考问题的完整性。毕竟设计题考察的核心能力不是“背过多少方案”而是“面对模糊问题你能不能一步步拆解”。5. 笔试现场时间管理与应急策略这一节聊聊现场发挥。很多同学笔试翻车不是因为不会做而是因为节奏乱了。5.1 不同题型的抢分顺序我的实战建议是先做编程题再做选择题最后做问答设计题。理由很简单编程题要用的时间最长而且代码写完之后可能会有编译错误、边界条件要调这些都是不可控因素越早面对越好。如果你一到考场先慢慢做选择题等到编程题的时候只剩20分钟大脑很容易进入“急急忙忙写代码”的状态明明能AC的题也可能因为粗心丢分。我有一场笔试就是这样选择题用掉了40分钟编程题差点没写完从那之后每次都调整成先编程后选择的策略。5.2 遇到不会的题怎么处理遇到不会的选择题先凭第一感觉选然后打个标记。等所有题做完还有剩余时间再回来仔细想。不要在不确定的题上耗太久时间成本太高了。编程题如果卡住了先写伪代码把思路理出来再慢慢补全实现。有些笔试系统会按测试用例给分如果只能过一部分用例至少把你想到的正确部分的代码写上去能拿一分是一分。空着肯定零分写了可能还有部分分。另外笔试系统一般会提供本地编辑器和在线编辑器两种模式这个要提前适应。在线编辑器没有代码提示、没有自动补全平时如果只依赖IDE写代码笔试时会非常别扭。我建议平时刷题就尽量在“不帮写代码”的环境里练至少每周有一两天用纯文本编辑器写题别惯着自己。5.3 环境测试不能跳过有个特别容易被忽视的坑笔试前的环境测试。非技术岗可能无所谓技术岗笔试如果摄像头、浏览器、网络出了问题就直接废了。我习惯提前至少半小时坐到电脑前先测一遍摄像头进笔试链接加载页面测试编译器能不能正常跑通一个Hello World。这个操作能帮你过滤掉至少一半的意外状况。6. 考后复盘与后续衔接笔试不是终点笔试结束只是第一步后面还有面试。很多人考完就撒手不管其实笔试后的复盘价值和刷题价值一样高。6.1 怎么记录和整理笔试题我建议每场笔试一结束趁记忆还热乎立刻把题目回忆出来记到自己的题库里。不用写得很完整能还原题目大意、你的解题思路、正确答案就行。关键是一周以后重新做一遍检验自己是不是真的掌握了。比如你发现自己笔试时有一道动态规划的题没做出来那就说明DP这块是你的薄弱环节。接下来两天不要干别的就集中刷DP从背包问题、子序列问题、股票买卖问题一路刷到区间DP和状态压缩。带着问题去刷题效果比漫无目的地一天刷十道强得多。6.2 笔试与面试的知识复用笔试里考的基础题就是你面试时会被追问的题。我把笔试中反复出现的知识点和面试中反复被问到的知识点做了一个汇总表你会发现两者高度重合。知识点笔试考法面试追问方向HashMap底层结构、put流程的选择题ConcurrentHashMap分段锁还是CAS扩容机制线程池参数选择、执行流程选择题线程池大小怎么定CPU密集和IO密集分别怎么设MySQL索引索引失效场景、最左前缀选择题覆盖索引和回表在项目里怎么用慢查询怎么优化Redis缓存数据类型、过期策略选择题缓存穿透、击穿、雪崩怎么解决分布式锁实现方案TCP状态流转、字段含义选择题TIME_WAIT为什么是2MSLTCP粘包怎么解决笔试暴露出来的薄弱点不用等到面试通知下来再补当场复盘出来就当场补掉后面找实习、冲大厂都省力很多。6.3 心态建设笔试的随机性远大于实力最后说点掏心窝子的。早几年我准备校招时把每一场笔试都当成生死战结果崩了好几场。后来才想明白笔试是一个概率事件有的场次题目刚好是你的舒适区有的场次全是你的盲区。同样水平的两个人不同场次的笔试分数可以差出50%以上。所以别因为一场笔试没考好就开始否定自己。正确做法是把每一场笔试当成一次免费的模拟测试考完看自己哪块弱补齐就好了。校招季这么长机会多的是真正决定你能不能拿到offer的是你能不能在一场又一场的考试中保持“发现问题→补弱点→再战斗”这个循环不中断。准备后端笔试这条路没有捷径但每一步都算数。把这篇文章里提到的考点吃透再用三五场笔试练手你会发现自己面对题目时越来越从容。祝刷题顺利Offer到手。
返回列表