【面经合集】当 deepseek 遇上阿里的面试|Java后端|01

🌟【友情提示】本篇面经来自粉丝投稿+智能润色,点击进入 -> 🔗互联网面经大全 围观25届校招修罗场!!每个技术细节都经过脱敏处理,请勿对号入座~

🌈 面试官

咱们先从数据结构开始吧,B树、B+树的优劣和适用场景能聊聊吗?听说B-树不太常见?

💬 小基

好嘞!B树和B+树都是多路平衡树,但设计目标不同。
B树优势是查询可能在非叶子节点就命中(比如范围查询时找到中间值),不用每次都下探到叶子节点,适合频繁随机读写的场景,比如文件系统索引。但它的缺点是范围查询效率低,因为需要中序遍历,而且节点同时存数据和索引,导致单个节点存储的键值更少,树的高度可能更高

B+树的叶子节点用链表串联,范围查询直接扫链表就行(比如查5-10,找到头尾直接遍历),而且非叶子节点只存索引,能容纳更多键,树更矮,减少磁盘IO次数。所以数据库(比如MySQL)和大型存储系统基本都用B+树。至于B-树,其实就是B树的另一种称呼,没有特殊区别~

🌈 面试官

Redis的优缺点呢?听说大Key会阻塞?

💬 小基

Redis优点很突出:内存读写速度极快(10万+/秒),支持丰富数据结构(String、Hash、List等),还有持久化(RDB快照/AOF日志)和集群高可用。但缺点也很明显:

  1. 内存贵,数据量大了成本高;
  2. 持久化有风险——RDB可能丢最后一次快照后的数据,AOF文件大了恢复慢;
  3. 大Key(比如一个Hash存了百万字段)会阻塞线程,甚至拖垮集群,得拆分成小Key或用分片

🌈 面试官

缓存不一致怎么解决?比如数据库更新了但缓存还是旧数据。

💬 小基

常见方案是双删延迟

  1. 先删缓存 → 2. 更新数据库 → 3. 延迟几百毫秒再删一次缓存(防其他线程脏读)。
    或者用订阅数据库Binlog的工具(比如Canal),数据库一改就自动删缓存。极端场景可以加分布式锁,保证更新时强制查库,但会影响并发性能

🌈 面试官

消息队列如何避免消息丢失?

💬 小基

得分环节保障:

  1. 生产者开Confirm模式,等Broker确认收到消息;
  2. Broker持久化消息到磁盘(比如Kafka的副本机制);
  3. 消费者手动ACK,处理完再通知Broker,避免自动提交导致数据丢失。
    如果Broker没收到ACK重发消息,消费者要做幂等——比如用唯一ID(雪花算法、Redis自增ID)去重。

🌈 面试官

手撕一个线程安全的阻塞队列?

💬 小基

用Python的threading.Condition实现:

import threading

class BlockingQueue:
    def __init__(self, capacity):
        self.capacity = capacity
        self.queue = []
        self.lock = threading.Lock()
        self.not_full = threading.Condition(self.lock)
        self.not_empty = threading.Condition(self.lock)
    
    def put(self, item):
        with self.not_full:
            while len(self.queue) >= self.capacity:
                self.not_full.wait()  # 队列满时等待
            self.queue.append(item)
            self.not_empty.notify()  # 通知消费者有数据了
    
    def take(self):
        with self.not_empty:
            while len(self.queue) == 0:
                self.not_empty.wait()  # 队列空时等待
            item = self.queue.pop(0)
            self.not_full.notify()  # 通知生产者有空位了
            return item

注释

  • Condition锁保证线程安全;
  • wait()notify()控制阻塞和唤醒;
  • 队列满时put阻塞,空时take阻塞。

🌈 面试官

最后聊聊Docker的优缺点?

💬 小基

优点

  • 环境隔离:开发、测试、生产环境一致;
  • 轻量:秒级启动,资源占用小;
  • 易扩展:配合K8s快速扩容。

缺点

  • 网络配置复杂(比如跨主机通信);
  • 数据持久化需要挂载卷;
  • 安全性问题(容器逃逸漏洞)

总结:面试官全程点头,尤其夸代码注释清晰~ 问题虽然广但没深挖特别偏的,关键是逻辑清晰+结合实际场景!

#面经##java##deepseek#
互联网面经合集 文章被收录于专栏

本专栏收集了互联网上的面试经验贴

全部评论

相关推荐

【蚂蚁成都】-大安全技术部-Java实习#牛客AI配图神器#希望你:1.酷爱着计算机以及互联网技术,热衷于解决挑战性的问题,追求极致的用户体验;2.痴迷于数据结构和算法,热衷于ACM,常常为看到“accept”而兴奋不已;3.熟悉Unix/Linux/Win32环境下编程,并有相关开发经验;4.熟练使用调试工具,并熟悉Perl,Python,shell等脚本语言;5.你熟悉网络编程和多线程编程,对TCP/IP,HTTP等网络协议有很深的理解;6.热衷于数据库技术,能够熟练编写SQL脚本,有MySql或Oracle应用开发经验;7.或许你熟悉Java,C,C++,PHP,.NET等编程语言中的一种或几种;8.学习能力强,对新事物保有好奇心,并能快速适应新环境;9.良好的沟通能力和团队协同能力,能与他人合作,共同完成目标;10.对所在领域有热情,相信方法总比困难多,善于独立思考并反思总结。【职位要求】1、扎实的Java编程基础,良好的编程素养,研发质量意识好,对系统质量有高要求;2、熟悉主流技术框架和中间件,熟悉SpringBoot、消息/缓存等中间件、分布式系统架构、MySQL等,了解相关原理机制;3、具备良好的识别和设计通用框架及模块的能力;有强烈的稳定性意识,有很强的问题分析和排查定位能力;4、具备很强的自我驱动与结果导向意识,具备创新能力和团队协作能力,具备良好的沟通与表达能力;5、工作认真、严谨、敬业,有强烈的技术热情、工作责任感、目标感,抗压且乐观;对新技术有好奇心,乐于技术学习和钻研。#内推##成都##蚂蚁#作者:别骂了,我菜链接:https://www.nowcoder.com/feed/main/detail/a862668039804b2ba6fa265402e22f4c?sourceSSR=users来源:牛客网
投递蚂蚁集团等公司10个岗位
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
牛客网
牛客企业服务