25年12月小红书Java开发工程师 一面

1. Java 8中Lambda表达式底层是如何实现的?

思路

核心讲“动态生成匿名内部类+invokedynamic指令”,区分编译期与运行期逻辑,避免只说“语法糖”的模糊回答。

回答示例

Lambda表达式本质是语法糖,底层通过「动态生成匿名内部类 + JVM的invokedynamic指令」实现,核心流程:

  1. 编译期:编译器不会直接生成匿名内部类的字节码,而是将Lambda表达式转换成invokedynamic指令(动态调用点),记录Lambda的逻辑(如参数、方法体);
  2. 运行期:JVM首次执行invokedynamic时,会通过LambdaMetafactory动态生成一个实现了对应函数式接口的匿名内部类(如Runnable、Consumer),并生成该类的实例;
  3. 执行逻辑:后续调用Lambda时,直接调用该匿名内部类的接口方法(如run()、accept())。

验证方式:通过javap -v反编译class文件,能看到invokedynamic指令;运行时用lambda.getClass().getName(),会得到类似XXX$$Lambda$1/0x0000000800660840的动态类名。

2. 接口中的default方法解决了什么问题?

思路

核心讲“接口升级兼容问题”,结合实际场景(如集合框架升级),说明default方法的设计初衷。

回答示例

default方法(默认方法)是Java 8为接口新增的特性,核心解决接口升级的兼容性问题

  • 问题背景:Java 8前,接口只能定义抽象方法,若给已有接口新增方法,所有实现类都必须重写该方法,否则编译报错(比如给Collection接口加stream()方法,所有自定义Collection实现类都要改);
  • 解决方式:default方法允许在接口中定义带方法体的默认实现,实现类可直接继承该实现,无需强制重写;
  • 典型场景:Java 8给Collection、List等接口新增stream()、forEach()等方法时,通过default方法实现,保证已有几十万实现类无需修改即可兼容。

补充:default方法还能解决“多继承”的部分场景(接口多实现时,若多个接口有同名default方法,实现类必须显式重写,避免冲突)。

3. Error和Exception的根本区别是什么?

思路

从“设计目的、处理方式、严重程度”三个核心维度区分,结合典型例子,避免只说“Error不可捕获”的片面回答。

回答示例

Error和Exception都继承自Throwable,根本区别在于是否属于应用程序可处理的异常

维度

Error(错误)

Exception(异常)

设计目的

表示JVM/系统级别的严重错误,应用程序无法恢复

表示应用程序级别的异常,可捕获并处理

处理方式

无需捕获(捕获也无法解决),属于Unchecked

分为Checked(必须捕获,如IOException)和Unchecked(可选捕获,如NullPointerException)

典型例子

OutOfMemoryError、StackOverflowError、NoClassDefFoundError

IOException(IO异常)、SQLException(数据库异常)、NullPointerException(空指针)

严重程度

致命的,会导致程序崩溃/退出

非致命的,处理后程序可继续运行

核心总结:Error是“系统级故障”,应用管不了;Exception是“应用级问题”,应用可处理。

4. TreeMap插入元素时如何维持红黑树平衡?

思路

先讲红黑树的5条核心规则,再讲插入后的“变色+旋转”调整逻辑,突出关键步骤。

回答示例

TreeMap底层是红黑树(自平衡的二叉查找树),插入元素时,先按Key的比较结果找到插入位置,再通过「变色+旋转」维持红黑树的5条核心规则:

  1. 节点要么红,要么黑;
  2. 根节点是黑;
  3. 叶子节点(NIL)是黑;
  4. 红节点的子节点必须是黑(无连续红节点);
  5. 任意节点到其所有叶子节点的路径,黑节点数量相同。

插入后的调整逻辑(核心步骤):

  1. 默认插入红节点:减少黑节点路径变化的概率,降低调整复杂度;
  2. 判断父节点颜色

最终目标:通过最少的旋转/变色,恢复红黑树的5条规则,保证树的高度平衡(最长路径≤最短路径的2倍)。

5. HashSet判断元素重复时先比较什么?

思路

核心讲“hashCode()优先,equals()兜底”,结合HashSet的底层(HashMap),解释判断逻辑的本质。

回答示例

HashSet底层基于HashMap实现(元素存在HashMap的key中,value是固定的PRESENT对象),判断元素重复的核心逻辑是:

  1. 先比较hashCode():计算两个元素的hashCode值,若不相等,直接判定为不同元素;
  2. hashCode相等时,再比较equals():若equals()返回true,判定为重复元素,插入失败;若返回false,判定为不同元素(哈希冲突),会以链表/红黑树形式存储在同一哈希桶中。

核心规则hashCode()相等是equals()相,即:

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论

相关推荐

一、AI 基础知识(核心入门层级)1. 大模型基础核心概念- 核心概念:LLM(大语言模型)、Token、上下文窗口、Embedding、微调(Fine-tuning)、提示工程(Prompt Engineering)2. 大模型关键能力- 核心能力:文本生成、代码生成、多模态理解(文生图/文生视频)、知识问答3. 前端视角核心应用(入门落地)- 模型调用:API 调用大模型方法- 流式处理:SSE/WebSocket 流式输出处理技巧,可结合缓冲区+分段解析机制优化体验- 成本优化:Token 消耗优化方法二、AI 进阶技术(能力提升层级)1. Agent 核心技术- 定义:可自主规划、调用工具、完成复杂任务的 AI 实体(代表:Coze 扣子、TRAE)- 前端视角:Agent 交互界面设计、多轮对话管理,可借助 A2UI 协议实现 AI 驱动的界面动态渲染2. RAG(检索增强生成)- 核心:结合私有知识库,提升大模型回答精准度与可控性,本质是“检索-增强-生成”的闭环流程- 前端视角:RAG 检索过程可视化展示、检索结果与模型输出的联动呈现3. 多模态 AI 技术- 核心定义:文本、图像、音频、视频的融合生成与理解(代表场景:剪映 AI 生成、实时交互)- 前端视角核心技术:Canvas/WebGL 渲染、WebGPU 加速(提升渲染性能);WebRTC 实时流处理(支撑实时交互);多模态内容预览、编辑功能实现(适配前端交互场景)三、AI 工具链及应用场景(落地实践层级)1. AI IDE 开发(TRAE、Cursor 方向)- 核心定位:端到端生成真实软件的智能协作平台- 前端职责:AI 功能交互(代码生成/理解/问答)、IDE 内核开发、插件生态搭建- 核心技术栈:React/TypeScript、WebAssembly、Monaco Editor、WebSocket/SSE2. Agent 平台开发(Coze、HiAgent 方向)- 核心定位:新一代 AI Agent 协同办公与应用开发平台- 前端职责:LLM 驱动的 Agent 框架实现、多 Agent 协同界面、可视化编排工具开发- 核心技术栈:React/Vue、状态管理、可视化编辑器、实时通信3. 多模态创作与交互(剪映、抖音方向)- 核心定位:生成模型优化、多模态内容合成、实时交互体验提升- 前端职责:AI 生成内容预览、实时滤镜/特效、多模态编辑界面开发- 核心技术栈:WebGL/WebGPU、WebRTC、Canvas、性能优化(FPS、内存)4. AI + 全栈开发(小红书、美团方向)- 核心定位:AI Coding 工具辅助,完成前后端开发、测试、部署全流程- 前端职责:全栈开发、AI 辅助需求分析与方案设计、提升开发效率- 核心技术栈:Node.js/Python、前后端协作、CI/CD、AI 工具深度使用5. 可视化与 AI 交互(同顺方向)- 核心定位:大模型应用可视化交互、RAG/Agent 工作流演示- 前端职责:可视化 Prompt 编排、多轮对话可视化、模型输出调试界面开发- 核心技术栈:ECharts/D3.js、流程图库、实时数据渲染、响应式设计
从事AI岗需要掌握哪些技...
点赞 评论 收藏
分享
04-01 15:36
已编辑
鹤岗师范高等专科学校 Java
3.16  一面     两个小时后约二面3.20 二面    等了一周约的三面,手撕hot100没写出来,可能是看一面面评还可以才给过的3.30 三面   一个小时后oc  晚上offer要求4.8到岗,没法调整时间。已经接了offer了后续会补一下具体的面经三面一、开场与基础信息先请你简单做个自我介绍吧。咱们这个岗位偏数据库、基建方向,和你之前偏业务的经历不同,对这块领域你有什么了解吗?数据库及数据库中间件方向,你大概知道日常需要做哪些工作、需要了解哪些知识吗?有什么自己的理解?二、分库分表相关你用过 ShardingSphere 吗?自己在项目中有用过分库分表吗?当时为什么要去做分表?做了分库分表以后,除了解决数据量过大的问题,对你的使用带来了什么影响?分库分表场景下主键唯一性的问题,有什么解决办法?仍然使用数据库自身主键的情况下,分库分表场景下可能会有什么问题?你有做过分库分表扩容吗?扩容的时候分表数量有变化过吗?假设让你实现分库分表的扩容逻辑,你觉得方案大概是怎样的?数据在不同表之间搬迁的时候,主键有没有可能冲突?三、分布式事务相关项目中遇到过分库分表带来的分布式事务问题吗?你是怎么解决的?分布式事务解决方案里你哪些比较了解,可以深入展开?实际项目当中你用的是哪一种分布式事务方案?两阶段事务提交的 TC 是业务侧自己的服务吗?在京东实习的时候遇到过分布式事务相关问题吗?四、GC 问题与线上排查你之前遇到过频繁 Full GC 的问题,当时是怎么排查的?这个 SQL 一开始就写错了,测试阶段没验证出来吗?一个查询返回 1000 多条数据,应该不至于造成频繁 Full GC 吧?当时只看了服务应用的监控,能看到数据库的监控吗?平时开发当中会看数据库的监控吗?数据库有哪些比较关键的监控指标?结合你这个 GC 案例,如果看数据库监控,哪些指标可能会异常?当时有看过这条 SQL 确实很慢吗?除了慢日志,还能想到什么其他异常指标?应用机器的系统指标(CPU、内存、网络带宽)当时会看吗?当时网络带宽有变化吗?五、编程语言与技术栈你主要用 Java,也提到用过 Go,其他语言比如 Python、前端有接触过吗?项目开发中你会去写前端的东西吗?你自己的练手项目有前端部分吗?六、AI 辅助开发相关开发过程中你一般会怎么使用 AI(Web Coding)?有具体用 AI 辅助完成项目的案例吗?AI 写的代码不符合预期、有 bug 时,你怎么跟 AI 交互修正?有用 AI 做过问题定位的工作吗?现在再遇到当时 Full GC 宕机的问题,想借助 AI 排查的话会怎么做?非公式化的特定场景问题,AI 怎么帮助定位问题?人怎么去干预、配合 AI 完成问题定位?
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务