面灵AI→

CVTE 一面:Agent 项目与 Java 基础八股

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. 介绍一下你的项目和 Agent 相关背景。
  2. 开闭原则你怎么理解?
  3. 有监督、无监督、强化学习分别是以什么作为信号的?
  4. ArrayList 和 LinkedList 的区别是什么?它们操作的时间复杂度是多少?如果我要向 ArrayList 表尾插入一个数据,时间复杂度是多少?
  5. JVM 垃圾回收。
  6. TCP 和 UDP 的区别。
  7. HTTPS。
  8. 算法题:卡片计算得分。

《参考解析》

开闭原则:对扩展开放、对修改关闭:核心不是「不许改代码」,而是新增一类能力时不应该去改动已经稳定的代码。落地手段就那么几样:面向接口编程 + 多态(新需求加一个实现类)、策略模式 + 工厂/注册表按类型分发、把变化点抽成配置或插件。反面例子是一串 if (type == A) ... else if (type == B) ...,每加一种渠道就得回到这个方法里改——这类分支越集中越危险,因为你动的是所有人都在跑的代码。面试里值得补两层:一是开闭原则和单一职责、依赖倒置是配套的,靠抽象隔离变化,抽象错了照样要改;二是不能教条化,业务还没稳定时硬造扩展点属于过度设计,通常等变化真的出现第二次再抽。

三种学习范式的监督信号:监督学习的信号是标签——每个样本都有人给的正确答案,损失函数直接度量预测与标签的差距(交叉熵、MSE)。无监督学习没有标签,信号来自数据自身的结构:聚类靠样本间的距离/密度,降维与自编码器靠重构误差,对比学习靠「同一样本的不同增广应该更近」这类自构造目标。强化学习没有标准答案,只有环境在动作之后返回的标量 reward,模型要最大化折扣累计回报,由此带来三个独有难点:探索与利用的权衡、奖励稀疏且延迟(credit assignment)、样本效率低且分布随策略变化。常被追问的两个衔接点:自监督预训练(掩码语言模型、对比预训练)严格说是「从数据本身构造标签」,习惯上归到无监督一侧;RLHF 属于强化学习,reward 来自人类偏好训出的奖励模型。

ArrayList 与 LinkedList:ArrayList 底层是动态数组,内存连续、缓存友好,按下标随机访问是 O(1);尾部追加均摊 O(1)——容量够就是一次赋值,容量不够要扩容(默认 1.5 倍)并把旧元素整体拷贝,那一次是 O(n),但摊销到 n 次追加上仍是常数。中间按下标插入/删除要搬移后续元素,O(n)。LinkedList 是双向链表,给定节点后头尾插入删除是 O(1),但按下标访问要遍历,O(n),而且每个节点多存前后指针、内存不连续,实际遍历和迭代性能通常还不如 ArrayList。所以工程结论是:绝大多数场景用 ArrayList,只有确实频繁在两端增删(当队列/栈用,这时 ArrayDeque 更合适)才考虑链表;「LinkedList 插入快」这个说法只在「已经持有目标节点」时成立,按索引插入它反而更慢。

JVM 垃圾回收:判活靠可达性分析,从 GC Roots(虚拟机栈里的局部变量、方法区静态变量与常量、JNI 引用、活跃线程)出发标记,引用分强/软/弱/虚,对应不同的回收时机。回收算法按分代假设组织:新对象进 Eden,Minor GC 后存活对象复制到 Survivor(复制算法,代价是浪费一块空间),每熬过一次 GC 年龄 +1,到阈值(默认 15,动态判定)晋升老年代;老年代对象存活率高,用标记-清除或标记-整理。收集器演进要能串成一条线:Serial/Parallel(吞吐优先、会 STW)→ CMS(并发标记清除,低停顿但有浮动垃圾和内存碎片)→ G1(把堆切成 Region,按回收收益优先回收,可设停顿目标)→ ZGC/Shenandoah(染色指针 + 读屏障,停顿基本与堆大小无关)。实战追问通常是「怎么排查 GC 问题」:开 GC 日志看频率与耗时,用 jstat 观察各代变化,堆溢出用 jmap dump 后拿 MAT 找支配树上的大对象,再回头看是缓存没设上限、还是大对象直接进了老年代。

TCP 与 UDP、HTTPS:TCP 面向连接、可靠有序——序号确认、超时重传、滑动窗口做流量控制、拥塞控制(慢启动/拥塞避免/快重传快恢复),代价是建连握手、状态维护和队头阻塞;UDP 无连接、不保证可靠与顺序,但保留报文边界、头部只有 8 字节、没有队头阻塞,适合实时音视频、DNS、游戏,也是 QUIC 的底座(在用户态自己实现可靠传输 + 多路复用)。HTTPS = HTTP + TLS:握手阶段用非对称/密钥交换(ECDHE 提供前向安全)协商出一个对称会话密钥,同时用证书链验证服务端身份,之后的数据用对称加密传输,完整性由 AEAD 或 MAC 保证;TLS 1.3 把握手压到 1-RTT(会话复用可 0-RTT)。面试官常接着问「对称和非对称各用在哪一步、为什么」,答案就是非对称慢所以只用来协商密钥和验身份,真正传数据用对称。