暑期实习被问的多的六个ai概念
·
这几个问题跨度很大,从 AI 架构设计到 Java 底层原理都有。别慌,我帮你把这些概念拆解成面试中容易得分的“逻辑块”。
特别是前三个关于 AI 的问题(Function Calling、MCP、Skill 等),是目前大模型应用开发中最热门的概念,搞清楚它们的层级关系是回答的关键。
🤖 24. Function Calling、MCP、Skill:概念、场景与解决的问题
这三个概念其实代表了 AI 智能体(Agent)与工具交互的三个不同层级:底层协议、通信标准、业务封装。
1. Function Calling (函数调用)
- 概念:这是大模型的一种底层能力。它让模型不仅能输出文本,还能输出结构化的数据(如 JSON),告诉程序“我要调用哪个函数,参数是什么”。
- 解决的问题:解决了**“模型说不清楚,程序读不懂”**的问题。它打破了模型只能聊天的限制,让模型有了“手”,能触发外部动作。
- 场景:
- 简单的工具调用:查天气、计算器、查询数据库。
- 提取结构化信息:把用户的一段话转换成 JSON 对象。
2. MCP (Model Context Protocol,模型上下文协议)
- 概念:由 Anthropic 提出的标准化通信协议。你可以把它理解为 AI 界的 USB-C 接口。它定义了一套标准,让 AI 应用(Client)能统一地连接到各种数据源和工具(Server)。
- 解决的问题:解决了**“连接碎片化”和“上下文孤岛”**的问题。以前每接一个工具都要写一套适配代码,现在只要工具支持 MCP 协议,AI 就能直接连,不用重复造轮子。
- 场景:
- 企业级应用集成:统一连接本地文件、Google Drive、Slack、GitHub 等。
- 跨平台工具共享:开发者开发一个 MCP Server,所有支持 MCP 的 AI 客户端都能用。
3. Skill (技能)
- 概念:这是面向业务的能力封装。它通常是一个包含指令、脚本、资源和提示词的“文件夹”或集合。Skill 往往基于 Function Calling 构建,但更复杂。
- 解决的问题:解决了**“工具零散,无法完成复杂业务”**的问题。它把一个个原子化的函数(如“查航班”、“查酒店”)组合成一个有意义的业务能力(如“订机酒套餐”)。
- 场景:
- 复杂任务处理:比如“帮我策划一次旅行”,Skill 会自动规划步骤,依次调用查天气、订机票、订酒店的函数。
- 垂直领域专家:比如“法律助手 Skill”,里面封装了查法条、写文书的特定流程和提示词。
📌 总结对比表
| 概念 | 本质定位 | 核心解决问题 | 形象比喻 |
|---|---|---|---|
| Function Calling | 底层交互协议 | 模型输出结构化指令 | 神经信号(告诉手要动) |
| MCP | 通信与调度层 | 统一连接标准,避免重复开发 | USB 接口(通用插头) |
| Skill | 业务能力层 | 复杂任务编排与封装 | 操作手册(怎么做菜) |
🧠 25. Prompt Engineering、Context Engineering、Harness Engineering
这三个概念代表了 AI 应用开发从“手工作坊”到“系统工程”的进化过程。
1. Prompt Engineering (提示词工程)
- 解释:这是最早期的阶段。核心是**“写咒语”**。通过精心设计自然语言指令(如“你是一个专家,请一步步思考...”),引导模型输出更好的结果。
- 局限:它是一次性的、静态的。如果任务太复杂,光靠一段话很难控制模型。
2. Context Engineering (上下文工程)
- 解释:这是目前的主流趋势。核心是**“构建信息流水线”**。
- 它不再只关注那一句提示词,而是关注如何把最有效的信息(知识、历史、工具描述)在恰当的时机喂给模型。
- 它包括 RAG(检索增强)、记忆管理、摘要压缩等技术。
- 解决问题:解决了模型“记性差”、“知识过时”和“幻觉”问题。它把模型从一个“聊天机器人”变成了一个“拥有外部知识库的专家”。
3. Harness Engineering (编排工程/智能体工程)
- 注:Harness 在这里通常指“智具编排”或“系统 harness”,类似于 LangChain 或 AutoGen 这类框架所做的工作。
- 解释:这是最高阶的阶段。核心是**“系统级管控”**。
- 它不仅仅是给信息,而是设计一个工作流。比如:先让模型 A 写代码,再让模型 B 审查代码,如果报错再让模型 A 修改。
- 它涉及多智能体协作、循环反馈、工具调用的逻辑编排。
- 解决问题:解决了复杂任务的自动化执行和可靠性问题。
📌 一句话总结进化史
- Prompt Engineering:教模型“怎么说话”。
- Context Engineering:给模型“参考资料和记忆”。
- Harness Engineering:给模型“ teammates(队友)和工作流程”。
☕ 26. 抽象类和接口的区别
这是 Java 面试的经典题,回答时要从设计层面和底层实现两个角度切入。
设计层面的区别(核心)
- 抽象类 (Abstract Class):是对**“本质”**的抽象。它代表“是什么 (Is-a)”的关系。
- 例子:
Cat和Dog都是Animal。Animal就是一个抽象类,它定义了大家都有“吃”和“睡”的能力。
- 例子:
- 接口 (Interface):是对**“行为”**的抽象。它代表“能做什么 (Can-do)”的关系。
- 例子:
Cat和Airplane都可以Fly。Fly就是一个接口。猫不是飞机,但它们都能飞。
- 例子:
技术层面的区别(Java 8+)
| 特性 | 抽象类 | 接口 |
|---|---|---|
| 继承/实现 | 单继承 (一个类只能有一个父类) | 多实现 (一个类可以实现多个接口) |
| 成员变量 | 可以有各种类型的变量 (static, final, 普通) | 只能是 public static final 常量 |
| 构造方法 | 有构造方法 (供子类调用) | 没有构造方法 |
| 方法实现 | 可以有抽象方法,也可以有具体实现的方法 | Java 8 之前只能有抽象方法;Java 8+ 可以有 default 和 static 方法 |
✅ 什么时候用哪个?
- 如果你想复用代码(比如几个子类有共同的代码逻辑),用抽象类。
- 如果你想定义一种规范,让不相关的类都能具备某种能力,用接口。
♻️ 27. JVM 内存回收:标记清除 vs 标记整理
这两个算法主要用在老年代(因为新生代通常是复制算法)。
1. 标记-清除 (Mark-Sweep)
- 原理:
- 标记:遍历对象图,标记出所有还活着的对象。
- 清除:直接回收掉没被标记的对象。
- 适合场景:
- 对象存活率较高,且不需要频繁分配大对象的场景。
- CMS 收集器(虽然已废弃,但经典)的并发清理阶段用的就是这个变种。
- 缺点:会产生内存碎片。碎片太多会导致无法分配大对象,不得不提前触发 Full GC。
2. 标记-整理 (Mark-Compact)
- 原理:
- 标记:同上,标记存活对象。
- 整理:让所有存活的对象向一端移动,然后直接清理掉边界以外的内存。
- 适合场景:
- 对象存活率高的场景(老年代典型特征)。
- 需要分配大对象的场景(因为没有碎片)。
- Serial Old 和 Parallel Old 收集器使用的算法。
- 缺点:移动对象需要暂停用户线程 (Stop-The-World),且成本较高(需要更新引用地址),所以比“标记-清除”慢。
✅ 总结回答
“标记-清除适合对停顿敏感、且内存碎片问题不严重的场景(或者作为 CMS 的并发清理阶段);而标记-整理适合老年代这种对象存活率高、且为了避免碎片化导致无法分配大对象的场景。G1 收集器在 Region 级别上其实也借鉴了整理的思想。”
⏳ 28. 存活时间怎么定义?
这个问题通常指 JVM 中**对象的年龄(Age)**是如何定义的,以及它如何影响 GC。
1. 年龄计数器
在 HotSpot 虚拟机中,每个对象头(Object Header)里都有一个 Age 字段。
2. 年龄增长规则
- 初始年龄:对象在 Eden 区诞生时,年龄为 0。
- 熬过 Minor GC:如果对象在 Minor GC 后存活下来,并被移动到 Survivor 区,它的年龄就 +1。
- 动态年龄判断:在 Survivor 区中,如果同年龄的所有对象大小总和,超过了 Survivor 空间的一半,那么大于等于该年龄的对象就可以直接进入老年代,而不需要等到年龄达到 15。
3. 进入老年代的阈值
- 默认阈值:年龄达到 15(可以通过
-XX:MaxTenuringThreshold参数调整)。 - 一旦达到这个年龄,下一次 GC 时,对象就会被晋升到老年代。
✅ 回答要点
“存活时间是通过对象头里的年龄计数器定义的。对象每熬过一次 Minor GC 并在 Survivor 区存活,年龄就加 1。默认情况下,年龄达到 15 就会进入老年代。另外,JVM 还有一个动态机制:如果 Survivor 区里同年龄的对象总大小超过空间的一半,那么该年龄及以上的对象会提前晋升到老年代。”
更多推荐

所有评论(0)