腾讯 Java 一面面经

最近参加了腾讯的一面,整体时长大概一个小时左右。面试官主要围绕 Java 基础、JVM、并发以及项目经历展开,还夹杂了一些设计思路和智力题。下面按顺序分享一下被问到的内容。

1. 自我介绍与项目相关

面试官让我简要介绍项目,我说了实习期间做的业务模块优化,以及在校时自己写的一个小型 RPC 框架。出乎意料的是,项目细节并没有深入问太多,而是直接进入了基础考察。

2. Java 基础

  • 问了 Java 的基本数据类型和包装类型的区别,涉及到自动装箱、拆箱。
  • equals 和 == 的区别,为什么重写 equals 时要同时重写 hashCode。
  • 接口和抽象类的区别,什么时候用接口,什么时候用抽象类。

全网最全面的java面试八股文专栏:https://www.nowcoder.com/creation/manager/columnDetail/0n9XOd

3. JVM 相关

  • JVM 内存结构:堆、方法区、虚拟机栈,本地方法栈,程序计数器分别做什么。
  • 类加载过程:加载、验证、准备、解析、初始化,问我能不能解释一下双亲委派模型的好处。
  • 垃圾回收:常见的几种 GC 算法(标记清除、复制、标记整理),还问我 CMS 和 G1 的区别。

4. 并发与多线程

  • synchronized 和 ReentrantLock 的区别
  • volatile 关键字的作用,为什么它能保证可见性但不能保证原子性。
  • 让我写了一个简单的 生产者消费者模型,使用 wait/notify 来实现。

5. 数据结构与集合

  • HashMap 的底层原理:哈希函数、冲突解决、1.7 和 1.8 的差别。
  • ConcurrentHashMap 的分段锁设计,以及 1.8 之后是怎么优化的。
  • ArrayList 和 LinkedList 的区别,以及在什么场景用哪一个更合适。

6. 设计与场景题

  • 让我设计一个 限流系统,要求在高并发场景下保证接口的响应速度。我提到可以用令牌桶算法,结合 Redis 做分布式限流。
  • 还问到如果 内存有限、数据量很大,如何保证查询速度。我说可以用布隆过滤器来减少无效查询,并通过分库分表缓解压力。

7. 手撕代码

  • 手写一个 LRU 缓存,要求用 Java 来实现,可以用 LinkedHashMap 或者双向链表+哈希表。
  • 还让我写了一个类,里面包含 静态内部类和非静态内部类,并演示它们各自的调用方式。

8. 反问环节

我问了面试官两个问题:

  1. 腾讯这边嵌入式/后台结合的项目多不多,有没有 C++ 和 Java 混合的场景?
  2. 对实习生在转正过程中最看重的点是什么?

面试官回答说部门场景比较多样,Java 在业务层面用得多,但和底层系统也会有交互,转正主要还是看解决问题的能力和综合素质。

总结

这次腾讯 Java 一面整体难度不算特别高,但覆盖面很广,从 Java 基础、JVM、并发到设计题、手撕代码几乎都涉及到了。给我的感受是:

  • 基础必须扎实,尤其是 JVM 和集合类的原理。
  • 并发编程 是重点,光会用 synchronized 不够,要能解释底层原理。
  • 场景设计题 是亮点,要结合具体业务思考,而不仅仅背八股。
  • 智力题 更多是考察思维方式,不必死记硬背。

全部评论

相关推荐

评论
1
3
分享

创作者周榜

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