腾讯 AI应用开发 一面
1. 你最近在学哪些课程或技术方向?
2. 你有没有使用过 AI 相关工具?
有,用过 Cursor 和 ChatGPT。主要是辅助写一些重复性代码、补测试用例、解释报错、查 API 用法,也会用来做知识点对比,比如 synchronized 和 ReentrantLock 的区别,或者分析 SQL 为什么慢。一般我会把它当辅助工具,不会直接照搬结果。
3. 你用 Cursor 的时候遇到过什么问题?
最大的问题是上下文理解不一定完整,尤其是跨文件和跨模块的时候,生成的代码可能能跑,但不一定适合当前项目。还有就是它有时会忽略边界条件,比如空值、并发安全、事务失效这些问题,所以关键逻辑我还是会自己过一遍。
4. 如果 AI 工具理解不清你的需求,你会怎么处理?
我会先把需求拆清楚,再重新描述输入、输出、约束条件和异常场景,让它按步骤生成。比如先让它写实体和接口定义,再生成业务逻辑,最后补异常处理和单测。这样结果会比一句话直接让它生成完整功能更稳定。
5. Java 常见的数据结构有哪些?
常见的有数组、链表、栈、队列、哈希表、树、堆和图。放到 Java 里对应得比较多的是 ArrayList、LinkedList、HashMap、TreeMap、PriorityQueue 这些。实际开发里最常用的还是数组结构和哈希结构,因为查找和遍历效率更高。
6. ArrayList 和 LinkedList 有什么区别?
ArrayList 底层是动态数组,查询快,随机访问效率高,适合读多写少的场景。LinkedList 底层是双向链表,插入和删除在已知位置时更方便,但查找效率低。实际开发里 ArrayList 用得更多,因为大部分业务场景还是以查询和遍历为主。
List<Integer> list1 = new ArrayList<>(); list1.add(1); list1.add(2); List<Integer> list2 = new LinkedList<>(); list2.add(1); list2.add(2);
7. HashMap 的底层实现是什么?
JDK 1.8 里 HashMap 底层是数组加链表加红黑树。元素通过 key 的 hash 定位到桶里,如果发生冲突就挂链表,链表长度达到一定阈值后会转成红黑树,减少极端情况下的查找时间。扩容时通常是容量翻倍,然后重新分配元素位置。
8. ConcurrentHashMap 和 Hashtable 的区别是什么?
Hashtable 基本是整张表加锁,锁粒度比较粗,并发性能差。ConcurrentHashMap 在 JDK 1.8 里主要用了 CAS 和 synchronized,只在局部冲突时加锁,读操作大部分情况下也不需要加锁,所以性能更好,更适合高并发场景。
9. synchronized 和 ReentrantLock 有什么区别?
synchronized 是 Java 关键字,用起来简单,适合大多数同步场景。ReentrantLock 是显示锁,功能更丰富,支持可中断、公平锁、超时尝试加锁和多个条件队列。如果只是普通加锁,我一般优先用 synchronized;如果要更细粒度控制,就用 ReentrantLock。
private final ReentrantLock lock = new ReentrantLock();
public void test() {
lock.lock();
try {
System.out.println("lock");
} finally {
lock.unlock();
}
}
10. 线程池核心参数有哪些?
核心参数有 corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory 和 rejectedExecutionHandler。线程池的核心作用是复用线程、控制资源、提高响应速度。线上一般不会直接用 Executors 创建线程池,而是手动指定参数,避免无界队列或者线程数无限增长带来的风险。
ExecutorService executor = new Threa
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.
