FEATURED · 精选文章

贝壳找房Java春招笔试题复盘:核心考点与避坑指南

发布时间 / 2026/9/1 17:48:16
来源 / 创域科博编辑部
栏目 / 资讯中心
贝壳找房Java春招笔试题复盘:核心考点与避坑指南 又到一年春招季后台很多准备春招的朋友都在问同一件事贝壳找房的Java笔试题到底怎么准备说实话贝壳作为国内房产科技赛道的头部玩家它的春招笔试卷在互联网大厂里很有代表性——技术栈覆盖全面、业务场景贴近真实生产、难度梯度拉得很开。这张卷子虽然标着“2023”但里面的考点放到今天依然不过时尤其是Java基础、集合、并发、JVM、Spring、MySQL、Redis这些核心模块几乎是每一场Java笔试的“必考套餐”。这篇复盘我打算换个方式聊不贴原题、不抄答案而是从出题人的视角把这张卷子拆开揉碎讲清楚每一类题背后的考察意图、常见的坑、以及怎么答才能拿高分。无论你是正在冲刺春招的应届生还是想检验自己Java底子的在职工程师这篇文章都值得你花半小时慢慢看。1. 试卷整体观察与出题逻辑拆解1.1 题型分布与分值节奏贝壳春招的Java笔试卷一般通过牛客网或者赛码网在线完成限时90到120分钟题量大概在30到40题之间。我根据往年参加过的同学反馈和网上流传的笔经大致梳理出这类试卷的常见结构题型大致题量单题分值考察重点单选题15~20题2~3分Java基础、集合、并发、JVM基础概念多选题5~8题3~4分易混淆知识点、边界条件编程题2~3题15~25分数据结构与算法、字符串处理问答/设计题1~2题10~15分Spring、MySQL、Redis、系统设计这个分值分布很有讲究。选择题占了相当大的比重说明出题方并不指望靠一两道算法题就判断你的水平而是想通过大量“八股文”式的题目快速筛选出基础扎实的候选人。编程题虽然分值高但基本都是LeetCode中等偏下难度不会故意为难你。真正拉开差距的反而是那些看似简单的概念题和多选题——它们往往埋着不少陷阱。1.2 出题人想考察的三种能力我把这张卷子的出题逻辑总结成三个关键词基础扎实度、生产思维、边界敏感度。基础扎实度好理解就是Java语法、集合框架、JVM这些基本功。为什么贝壳这类公司这么看重基础因为房产交易系统里房源数据的检索、排序、缓存、并发写入都是家常便饭基础不牢的人写出来的代码在线上分分钟出事故。生产思维这一点容易被忽略。很多选择题会包装成“线上环境遇到了XX问题以下哪种方案合理”这就不是单纯背概念能答对的。比如缓存穿透和缓存雪崩的区别、数据库索引失效的场景、消息队列削峰填谷的用法这些都属于“生产环境常识”。边界敏感度主要体现在多选和编程题里。数组越界、空指针、整数溢出、集合并发修改异常、HashMap的JDK版本差异……这些细节恰恰是平时写代码最容易踩的坑。出题人很清楚一个候选人能不能注意到这些边界条件很大程度上反映了他真实写代码的水平。2. Java基础与集合看似送分实则暗藏杀机2.1 面向对象、String与基本类型的经典陷阱贝壳这张卷子的选择题里面向对象部分是稳稳的“送分题”但送分不代表你可以大意。重载和重写的区别、接口和抽象类的选择、静态方法和实例方法的调用规则这些概念几乎是每年必考。我记得有同学跟我吐槽一道“以下哪个选项能正确创建一个线程”的题目四个选项分别对应继承Thread、实现Runnable、实现Callable、使用线程池看起来都是对的但题目特别标注了“JDK8环境下”这就把使用var关键字创建线程匿名类的选项排除了——考的就是你对版本特性的敏感度。String相关的题也是重灾区。字符串常量池、String不可变性、StringBuilder和StringBuffer的区别这些是基础中的基础。但贝壳的题喜欢“套娃”给你一段代码让你判断创建了几个对象。比如String s new String(abc)到底创建了几个对象答案是1个或2个——如果常量池里已经有“abc”就是1个没有就是2个。这种题考察的不是记忆而是你对JVM运行时数据区的理解是否到位。基本类型的包装类也是高频考点。Integer a 127; Integer b 127; a b的结果是什么Integer c 128; Integer d 128; c d又是什么前者是true后者是false原因是IntegerCache默认缓存了-128到127的Integer对象。这类题看着简单但一旦换成new Integer(127)或者Integer.valueOf(128)答案又会变。建议复习的时候把和equals的对比、自动装箱的缓存机制、基本类型和引用类型的默认值都放在一起整理成表格避免混淆。2.2 HashMap、ConcurrentHashMap的底层演进集合框架里HashMap是永远的主角。2023年这套卷子考到了HashMap的几个关键细节底层数据结构数组链表红黑树、扩容机制、负载因子为什么是0.75、链表转红黑树的阈值为什么是8。这里我多说一句很多人背得住“阈值是8”但不知道这个数字怎么来的。理论上负载因子0.75的情况下链表长度达到8的概率已经极低泊松分布下约为千万分之六所以用8作为链表转红黑树的阈值是为了在时间和空间上取得平衡。面试官一问到这个“为什么”很多人就哑火了——这也是八股文背得熟但拿不到分的原因。ConcurrentHashMap也是必考。1.7和1.8的底层实现差别很大1.7用Segment分段锁1.8改用CAS synchronized锁住链表头节点或红黑树根节点。为什么要改因为Segment粒度太大锁竞争依然存在而1.8的锁粒度更细并发度更高同时CAS在无竞争场景下开销更小。另外putVal方法里的helpTransfer、treeifyBin这些细节也值得你花时间看一遍源码哪怕记不住全部逻辑至少要知道它们存在的意义。2.3 异常体系与常见运行时异常的排查还有一类题考察异常体系尤其是受检异常和非受检异常的区别以及常见的运行时异常。数组越界ArrayIndexOutOfBoundsException、空指针NullPointerException、类型转换异常ClassCastException、算术异常ArithmeticException这些都属于RuntimeException的子类编译器不会强制你捕获但运行时一旦发生就直接挂掉。这类题本身不难难的是它经常和多选题结合。比如给你一段代码让你选出“哪些代码会抛出异常”或者“哪些异常是受检异常”很多人会把IOException、SQLException和RuntimeException搞混。我的建议是把异常体系画成一张树状图重点记住Error比如OutOfMemoryError和Exception的区别、RuntimeException有哪些常见子类、受检异常体现在编译期还是运行期。3. 并发与JVM春招卷子的“重灾区”3.1 JVM内存区域与OOM的典型场景贝壳的卷子里JVM部分的题量通常不小而且难度偏高。内存区域划分是基础程序计数器、虚拟机栈、本地方法栈、堆、方法区在JDK8之后演变为元空间、直接内存堆外内存。每个区域都可能发生OOM但表现不一样——堆内存不足抛java.lang.OutOfMemoryError: Java heap space元空间不足抛java.lang.OutOfMemoryError: Metaspace创建线程过多抛java.lang.OutOfMemoryError: unable to create new native thread还有直接内存不足的Insufficient memory。这里要提醒一句很多人在准备JVM的时候只背“堆、栈、方法区”三个名字这远远不够。我建议至少搞清楚每个区域存什么、谁负责回收、什么时候会OOM最好能结合线上事故来记忆。比如一个典型场景接口每次请求都把大对象放进一个静态List里时间长了堆内存缓慢上涨最终导致Full GC频繁、接口响应变慢——这种“内存泄漏导致OOM”的排查思路比单纯背概念有用得多。3.2 垃圾回收算法与垃圾收集器选择GC相关的题也是重头戏。标记-清除、标记-复制、标记-整理这三种算法的优缺点要能脱口而出三色标记法和漏标问题增量更新、原始快照最好也能讲清楚因为这是CMS和G1底层的重要机制。收集器方面CMS和G1是考察重点。CMS的并发标记、并发清除、浮动垃圾、内存碎片问题G1的Region划分、可预测停顿时间模型、Mixed GC。特别是“为什么G1要取代CMS”这个问题值得深入想想——CMS的并发清除会产生内存碎片最终可能触发Serial Old进行Full GC而G1通过复制算法天然解决了碎片问题。另外ZGC在2023年的卷子里也开始出现至少要知道它基于染色指针和读屏障停顿时间能控制在10毫秒以内。类加载机制里的双亲委派模型也是常见题。为什么要双亲委派核心是为了避免类被重复加载同时保证核心类库的安全性。破坏双亲委派的场景比如Tomcat的WebAppClassLoader也是高频考点。3.3 并发编程synchronized、volatile、AQS、线程池并发编程部分贝壳这张卷子考察得相当全面。synchronized的锁升级过程无锁→偏向锁→轻量级锁→重量级锁几乎是必考volatile的可见性和有序性禁止指令重排也是常客。这两者的区别——volatile不能保证原子性synchronized可以——是基础中的基础。AQSAbstractQueuedSynchronizer是理解JUC包的关键。ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier都基于AQS实现。笔试题一般不会让你手写AQS但会考核心属性state状态位、CLH队列、独占锁和共享锁的区别、可重入的实现方式。我之前写过一篇AQS源码分析核心就一句话AQS通过一个volatile int类型的state值和一个FIFO线程等待队列实现了线程的阻塞与唤醒。线程池也是必考而且贝壳喜欢考“实际场景选参数”。核心线程数怎么定一般有CPU密集型和IO密集型两种口径阻塞队列选有界还是无界拒绝策略用AbortPolicy还是CallerRunsPolicy。这些不是背完就行的而是要能根据业务场景给出取舍理由。我的建议是遇到这类题先说明你选择的默认值再补充一句“实际线上需要通过压测逐步调整”这会让答题显得更有工程经验。4. Spring、MySQL、Redis综合题背后的工程考量4.1 Spring核心Bean生命周期、循环依赖、事务失效Spring部分贝壳的笔试题不会只考IOC和AOP的定义而是会深入到底层原理。Bean的生命周期是高频题实例化、属性填充、初始化包括BeanPostProcessor的before和after、销毁。循环依赖的解决方式是Spring三级缓存的经典问题——一级缓存存成品Bean、二级缓存存早期暴露的Bean、三级缓存存ObjectFactory。事务这块我特别提醒大家注意“事务失效场景”。很多人觉得Transactional一加就万事大吉但实际上方法内部自调用、方法不是public、异常被try-catch吞掉、抛出的是受检异常但没配rollbackFor、数据库引擎不支持事务——这些都是事务失效的典型场景。贝壳的卷子大概率会出这么一道多选题把以上场景做排列组合非常容易选错。好消息是Spring题目的答案往往“非黑即白”不像系统设计那样开放。只要你把Bean生命周期、AOP动态代理JDK代理和CGLIB的差异、循环依赖三级缓存、事务传播行为的七种级别这些知识点背扎实再结合一点源码理解拿分并不难。4.2 MySQL索引结构、事务隔离级别、MVCC与锁MySQL在Java笔试题里出现的频率极高贝壳也不例外。索引部分B树为什么比B树更适合做数据库索引因为B树的所有数据都存在叶子节点且叶子节点之间通过双向链表连接范围查询效率极高同时树的高度更低IO次数更少。最左前缀原则、覆盖索引、索引下推Index Condition Pushdown这些都是值得展开写一写的。事务隔离级别和MVCC是另一大热点。读未提交、读已提交、可重复读、串行化这四种隔离级别要能说清楚各自解决的问题和遗留的问题。MVCC通过隐藏列DB_TRX_ID、DB_ROLL_PTR和ReadView机制实现了快照读在可重复读级别下事务启动时创建的ReadView能一直复用从而避免了幻读至少在快照读的情况下。锁机制也不能忽视。全局锁、表级锁、行级锁、间隙锁Gap Lock、临键锁Next-Key Lock这些概念在并发写入场景下尤其重要。贝壳的业务里有大量的房源状态更新、经纪人带看记录写入这类场景很容易考到“如何避免并发更新导致的数据覆盖”问题——答案往往就是行锁、乐观锁版本号、或者唯一索引约束。4.3 Redis缓存穿透、击穿、雪崩与分布式锁Redis相关的题贝壳的卷子喜欢结合业务场景出题。缓存穿透、缓存击穿、缓存雪崩这三兄弟一定要分清楚问题原因解决方案缓存穿透查询不存在的数据缓存和DB都没有缓存空值、布隆过滤器缓存击穿热点key过期大量请求打到DB互斥锁、逻辑过期缓存雪崩大量key同时过期或Redis宕机过期时间加随机值、集群高可用分布式锁也是必考内容。基于Redis的SETNX命令 过期时间 Lua脚本释放锁是目前最主流的方案。但要注意分布式锁不是银弹——主从切换可能导致锁丢失所以Redis官方后来推出了RedLock算法不过业界对RedLock的争议也挺大。答题的时候能提到这种“争议性”反而显得你有深度。数据一致性也是个值得聊的话题。缓存和数据库的双写一致性怎么做先更新数据库再删缓存还是先删缓存再更新数据库延迟双删策略有没有必要这些问题没有标准答案但你要能说清各种方案的优缺点并且给出一个“在绝大多数场景下够用”的推荐方案。5. 系统设计题笔试卷里的“附加题”5.1 经典场景题秒杀、短链、附近搜索贝壳的笔试卷不一定每次都有系统设计题但只要出现分值就很高往往是拉开差距的关键。我总结了几类高频场景题你们在准备时可以重点看高并发秒杀如何防止超卖核心思路包括Redis预减库存、MQ异步扣减、数据库乐观锁兜底。答题时按“前端限流→网关限流→Redis缓存库存→MQ异步处理→数据库最终扣减”的顺序来组织基本就是一套标准答案。短链生成如何生成短码用发号器雪花算法、Leaf生成唯一ID再转62进制如何存储映射关系直接存Redis配合DB持久化重定向用301还是302一般用302方便统计和管理。附近房源搜索结合贝壳业务如何实现按经纬度搜索附近房源GeoHash编码、Redis GEO、Elasticsearch的geo_distance查询都是可选方案。这道题非常贴合贝壳的业务建议重点准备。5.2 答题框架容量估算、接口设计、存储选型、缓存策略我见过不少同学做系统设计题的时候上来就写架构图、画流程图却忽略了基础的分析过程。其实这类题不管场景怎么变一套标准的答题框架走下来至少能保证你不跑偏明确需求和约束先讲清楚系统的核心功能预估QPS、数据量、存储容量。比如秒杀系统QPS可能上万DB每秒只能承受几千所以必须加缓存和队列。接口设计列出关键接口的请求参数和返回结果。不用写完整代码但要把核心字段说清楚。存储选型根据读写比例、数据量、一致性要求选择MySQL还是Redis还是ES并给出理由。缓存与异步缓存哪些数据、缓存失效策略、是否需要MQ解耦。高可用与拓展单点故障怎么办水平扩展怎么做这套框架不需要你背而是要通过多练几道题形成肌肉记忆。我当年准备的时候是把LeetCode的“设计题”标签下的题目全刷了一遍然后配合《大型网站技术架构》这本书补充了一下场景知识效果还不错。5.3 做题节奏编程题先易后难设计题留足时间整套试卷的时间分配也需要策略。如果编程题有3道我建议按“Easy→Medium→Medium”的顺序做先把能拿的分拿稳不要在最后一道题上死磕太久。选择题和问答题控制在每题1分钟以内遇到拿不准的选项先标记最后再回头检查。系统设计题一般放在最后分值高但耗时也长。我的建议是至少留出20分钟给它宁可少做一道选择题也要把设计题的结构写完整。因为设计题是按点给分你写出的每一个“考虑到了某个问题”的要点都是得分点。6. 高频失分点与避坑指南6.1 代码题里的“隐藏坑”边界条件、空指针、大数溢出编程题是很多人丢分的重灾区但丢分原因往往不是不会写而是没考虑到边界。我复盘了贝壳这套卷子以及同类笔试卷的常见代码题总结出这几个高频坑位整数溢出int类型相乘、相加超过Integer.MAX_VALUE会溢出变成负数。如果题目没说明数据范围建议直接使用long。空指针对可能为空的集合或对象没有判空直接调用方法。尤其是从HashMap里get出来的值很可能为null。数组越界遍历数组时边界判断出错典型场景是滑动窗口、双指针的while循环条件。集合并发修改在遍历List时直接remove抛出ConcurrentModificationException。应该使用迭代器的remove方法或者先收集再批量删除。字符串比较用比较字符串内容而不是equals。这个错误在笔试卷里出现频率极高。6.2 概念题答非所问把“背诵”变成“输出”我见过太多人复习八股文的时候背得滚瓜烂熟一到笔试就卡壳。原因很简单你背的是别人的语言不是自己的理解。面试题和笔试题有一个很大的区别——笔试题是没法互动的你必须用文字把逻辑写清楚。我的建议是复习每个知识点时先自己默写一遍再对照资料查漏补缺。比如你复习“HashMap的put流程”能不能不看书就写出这几步计算hash、定位桶、判断是否为空、遍历链表/红黑树、找到相同key就替换、否则插入新节点、判断是否达到树化阈值、判断是否扩容。如果你能轻松写出这个流程那笔试时遇到类似的题基本不会丢分。6.3 环境与工程细节JDK版本、编译器、Lombok最后一个容易被忽略的失分点是环境问题。在线笔试系统虽然统一了JDK版本但本地练习时环境不一致很容易踩坑。比如本地用的是JDK8笔试系统是JDK17代码里用了var或者switch表达式编译直接报错。还有Lombok相关的问题——如果在笔试环境里没有配置Lombok插件使用了Data注解的类直接编译失败。平时练习的时候尽量把本地的JDK版本和牛客网、赛码网保持一致至少要知道哪些语法特性在高版本才支持。在线编译器对中文注释的支持有时也不稳定遇到乱码先检查编码设置。这不算技术问题但真要碰到了特别影响心态。7. 三个月备考路线与我的个人体会7.1 一个可执行的冲刺规划如果你现在离春招还有三个月我建议把时间分成三个阶段第1个月夯实基础。复习Java基础、集合框架、并发编程、JVM内存模型配合《Java核心技术卷I》《深入理解Java虚拟机》二选一每天至少写一道LeetCode简单题保持手感。第2个月框架与数据库。主攻Spring原理Bean生命周期、AOP、事务、MySQL索引和事务隔离级别、Redis缓存策略。同时开始刷LeetCode的Hot 100题以数组、链表、二叉树、动态规划为主。第3个月刷题与模拟。集中做牛客网/赛码网的Java笔试题每天一套重点总结错题。同时整理一个自己的“八股文笔记”把每个知识点的核心逻辑用自己的话写清楚。7.2 踩过几次坑之后我想说我在复盘贝壳这套卷子的过程中最大的体会是笔试考的不是你会多少而是你在有限时间内能稳定输出多少。很多知识点你觉得自己会了但放到一张限时两个小时的卷子里在紧张状态下很容易大脑空白。所以冲刺阶段一定要多做整套的模拟题严格控制时间训练自己在压力下输出知识的能力。另外还有一个小技巧每道选择题不管做对做错都把每个选项为什么对、为什么错写在笔记里。一道题吃透四个选项比盲目刷十道题更有用。我当时备考的时候就是靠这个办法把那些“看起来都对”的题全部收入囊中。最后我想说春招笔试只是第一关后面的面试更重要。但笔试成绩好不仅能让你顺利进入面试还能在面试官心里留下“基础扎实”的第一印象。希望这篇复盘能帮你少走一些弯路在接下来的春招里顺利拿下心仪的offer。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻