中科创达 Java 一面面经
面试题目
- 请做一个简单的自我介绍。
- 针对实习经历和项目经历,有没有遇到过一些困难?怎么思考和解决的?
- 实习开发的是 CI/CD 插件,主要用的是什么语言?
- open API 规范里用到了 MCP 和大模型,你对 AI 和 Java 这一块的理解目前是什么样的?
- 说一下面向对象的特点。
- 平时都用到哪些数据结构?
- 说一下 Java 内存模型(JMM)。
- 三个线程同时处理一个数从 1 加到 100,如何保证数据的可见性和有序性?
- 用 synchronized 时,锁是怎么进行升级的?
- 说一下 TCP/IP 四层网络模型架构。
- 传输层有哪些协议?TCP 和 UDP 的特点分别是什么?
- 给你一个链表,如何判断链表有没有环?
- 意向城市是天津吗?
- 对自己的未来技术规划(职业规划)有什么想法?
参考解析
Java内存模型(JMM): JMM定义了线程和主内存之间的抽象关系,规定了线程对变量的操作必须在本地内存中进行,不能直接读写主内存。主要涉及原子性、可见性和有序性三个核心特性。
synchronized锁升级: 锁状态依次为:无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁。锁的升级是单向的,目的是为了减少获得锁和释放锁带来的性能消耗。
多线程可见性与有序性: 使用volatile关键字保证变量在多线程间的可见性与防止指令重排;若要保证累加操作的原子性,需配合AtomicInteger类或使用synchronized/ReentrantLock锁机制。
判断链表环: 使用快慢指针法(Floyd判圈算法)。设置一个慢指针每次走一步,一个快指针每次走两步,若快指针能追上慢指针,则说明链表有环;若快指针走到头,则无环。
TCP与UDP: TCP是面向连接的、可靠的传输协议,通过三次握手建立连接,保证顺序和数据完整;UDP是无连接的,传输速度快,但不保证可靠性,适用于直播、实时音视频等场景。