Hướng dẫn phỏng vấn Java (Tổng hợp câu hỏi phỏng vấn backend tổng quát của JavaGuide)

JavaGuide là bộ hướng dẫn phỏng vấn Java và tài liệu ôn tập phỏng vấn backend có hệ thống, nội dung bao phủ các điểm kiến thức cốt lõi như Java Basics, Collection, concurrent programming, JVM, Spring/Spring Boot, MySQL, Redis, distributed, high concurrency, high availability và system design.
Nếu bạn đang chuẩn bị phỏng vấn tuyển dụng sinh viên, tuyển dụng có kinh nghiệm hoặc nhảy việc, hãy bắt đầu từ Kế hoạch vượt qua phỏng vấn Java backend, rồi ôn dần các câu hỏi phỏng vấn Java và backend tần suất cao theo từng module bên dưới.
Toàn bộ nội dung website đã được mã nguồn mở miễn phí, hoan nghênh cùng duy trì và hoàn thiện, nếu thấy hữu ích thì hoan nghênh Star!
- Địa chỉ dự án: https://github.com/Snailclimb/JavaGuide
- Đọc trực tuyến: https://javaguide.cn/
Tài liệu mở rộng
- Dự án mã nguồn mở Java chất lượng: tuyển chọn các dự án Java mã nguồn mở trên Gitee/GitHub phù hợp để học, thực chiến và ghi vào CV.
- Gợi ý sách kỹ thuật chất lượng: bao phủ các hướng computer science cơ bản, database, search engine, distributed system, kiến trúc high availability.
Chuẩn bị phỏng vấn
- ⭐ Kế hoạch vượt qua phỏng vấn Java backend (bao quát hệ thống backend chung) (nhất định phải xem 👍)
- Chuẩn bị phỏng vấn Java hiệu quả thế nào?
- Tổng hợp trọng điểm phỏng vấn Java backend
- Lộ trình học Java (bản mới nhất, hơn 40.000 chữ)
- Hướng dẫn viết CV cho lập trình viên
- Hướng dẫn về kinh nghiệm dự án
- Phỏng vấn quá căng thẳng thì làm sao?
- Không có kinh nghiệm thực tập khi ứng tuyển sinh viên thì phải làm sao? Viết kinh nghiệm thực tập thế nào?
Java
Basics
Tổng hợp điểm kiến thức/câu hỏi phỏng vấn: (bắt buộc xem 👍)
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Java Basics thường gặp (phần 1)
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Java Basics thường gặp (phần 2)
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Java Basics thường gặp (phần 3)
Giải thích chi tiết các điểm kiến thức quan trọng:
- Tại sao Java chỉ có truyền giá trị?
- Giải thích chi tiết Java serialization
- Giải thích chi tiết generic & wildcard
- Giải thích chi tiết cơ chế reflection của Java
- Giải thích chi tiết proxy pattern trong Java
- Giải thích chi tiết BigDecimal
- Giải thích chi tiết class Unsafe đặc biệt của Java
- Giải thích chi tiết cơ chế Java SPI
- Giải thích chi tiết syntactic sugar trong Java
Collection
Tổng hợp điểm kiến thức/câu hỏi phỏng vấn:
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Java Collection thường gặp (phần 1) (bắt buộc xem 👍)
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Java Collection thường gặp (phần 2) (bắt buộc xem 👍)
- Tổng hợp lưu ý khi sử dụng Java Collection
Phân tích source code:
- Source code cốt lõi ArrayList + phân tích cơ chế mở rộng dung lượng
- Phân tích source code cốt lõi LinkedList
- Source code cốt lõi HashMap + phân tích cấu trúc dữ liệu bên trong
- Source code cốt lõi ConcurrentHashMap + phân tích cấu trúc dữ liệu bên trong
- Phân tích source code cốt lõi LinkedHashMap
- Phân tích source code cốt lõi CopyOnWriteArrayList
- Phân tích source code cốt lõi ArrayBlockingQueue
- Phân tích source code cốt lõi PriorityQueue
- Phân tích source code cốt lõi DelayQueue
IO
- Tổng hợp kiến thức cơ bản về IO
- Tổng hợp design pattern trong IO
- Giải thích chi tiết các IO model
- Tổng hợp kiến thức cốt lõi NIO
Concurrency
Tổng hợp điểm kiến thức/câu hỏi phỏng vấn: (bắt buộc xem 👍)
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Java Concurrency thường gặp (phần 1)
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Java Concurrency thường gặp (phần 2)
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Java Concurrency thường gặp (phần 3)
Giải thích chi tiết các điểm kiến thức quan trọng:
- Giải thích chi tiết optimistic lock và pessimistic lock
- Giải thích chi tiết CAS
- Giải thích chi tiết JMM (Java Memory Model)
- Thread pool: Giải thích chi tiết Java thread pool, Best practice cho Java thread pool
- Giải thích chi tiết ThreadLocal
- Tổng hợp các concurrent collection trong Java
- Tổng hợp các Atomic class
- Giải thích chi tiết AQS
- Giải thích chi tiết CompletableFuture
JVM (bắt buộc xem 👍)
Phần JVM này chủ yếu tham khảo JVM Specification - Java 8 và cuốn 《Hiểu sâu về Java Virtual Machine (phiên bản 3)》 của thầy Chu Chí Minh (rất khuyến khích đọc nhiều lần!).
- ⭐ Tổng hợp câu hỏi phỏng vấn JVM thường gặp
- Vùng nhớ Java
- Garbage collection trong JVM
- Cấu trúc file class
- Quá trình class loading
- Class loader
- 【Chưa hoàn thành】Tổng hợp các JVM parameter quan trọng nhất (đã dịch xong một nửa)
- 【Bổ sung】Hiểu JVM bằng ngôn ngữ đời thường
- Công cụ giám sát và xử lý sự cố của JDK
Tính năng mới
- Java 8: Tổng hợp tính năng mới Java 8 (bản dịch), Tổng hợp tính năng mới thường dùng của Java 8
- Tổng quan tính năng mới Java 9
- Tổng quan tính năng mới Java 10
- Tổng quan tính năng mới Java 11
- Tổng quan tính năng mới Java 12 & 13
- Tổng quan tính năng mới Java 14 & 15
- Tổng quan tính năng mới Java 16
- Tổng quan tính năng mới Java 17
- Tổng quan tính năng mới Java 18
- Tổng quan tính năng mới Java 19
- Tổng quan tính năng mới Java 20
- Tổng quan tính năng mới Java 21
- Tổng quan tính năng mới Java 22 & 23
- Tổng quan tính năng mới Java 24
- Tổng quan tính năng mới Java 25
Computer science cơ bản
Phần computer science cơ bản (computer network, operating system, data structure và algorithm) đã tách thành module riêng, xem tại Tổng hợp kiến thức computer science cơ bản.
Database
Cơ bản
- Tổng hợp kiến thức cơ bản về database
- Tổng hợp kiến thức cơ bản về NoSQL
- Giải thích chi tiết character set
- SQL:
MySQL
Tổng hợp điểm kiến thức/câu hỏi phỏng vấn:
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn MySQL thường gặp (bắt buộc xem 👍)
- Tổng hợp khuyến nghị quy chuẩn tối ưu hiệu năng MySQL
Điểm kiến thức quan trọng:
- Giải thích chi tiết index trong MySQL
- Tổng hợp các tình huống index MySQL bị vô hiệu
- Giải thích chi tiết isolation level của transaction MySQL kèm hình minh họa
- Giải thích chi tiết ba loại log của MySQL (binlog, redo log và undo log)
- Cách storage engine InnoDB hiện thực MVCC
- Quá trình thực thi câu lệnh SQL trong MySQL
- Giải thích chi tiết query cache của MySQL
- Phân tích execution plan của MySQL
- Primary key tự tăng của MySQL có chắc chắn liên tục không
- Gợi ý lưu trữ dữ liệu kiểu thời gian trong MySQL
- Implicit conversion trong MySQL khiến index bị vô hiệu
Redis
Tổng hợp điểm kiến thức/câu hỏi phỏng vấn: (bắt buộc xem 👍)
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Redis thường gặp (phần 1)
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Redis thường gặp (phần 2)
Điểm kiến thức quan trọng:
- Giải thích chi tiết 3 chiến lược đọc/ghi cache thường dùng
- Redis có làm được message queue không? Hiện thực thế nào?
- Giải thích chi tiết 5 cấu trúc dữ liệu cơ bản của Redis
- Giải thích chi tiết 3 cấu trúc dữ liệu đặc biệt của Redis
- Giải thích chi tiết cơ chế persistence của Redis
- Giải thích chi tiết memory fragmentation trong Redis
- Tổng hợp các nguyên nhân gây blocking thường gặp trong Redis
- Giải thích chi tiết Redis cluster
MongoDB
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn MongoDB thường gặp (phần 1)
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn MongoDB thường gặp (phần 2)
Search engine
Tổng hợp câu hỏi phỏng vấn Elasticsearch thường gặp (trả phí)

Công cụ phát triển
Maven
Gradle
Tổng hợp khái niệm cốt lõi của Gradle (tùy chọn, hiện tại ở Trung Quốc Maven vẫn phổ biến hơn)
Docker
Git
System design
- ⭐ Tổng hợp câu hỏi phỏng vấn system design thường gặp
- ⭐ Tổng hợp câu hỏi phỏng vấn design pattern thường gặp
Cơ bản
- Hướng dẫn ngắn gọn về RESTful API
- Giáo trình ngắn gọn về software engineering
- Hướng dẫn đặt tên trong code
- Hướng dẫn refactor code
- Hướng dẫn unit test
Framework thường dùng
Spring/SpringBoot (bắt buộc xem 👍)
Tổng hợp điểm kiến thức/câu hỏi phỏng vấn:
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Spring thường gặp
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn SpringBoot thường gặp
- Tổng hợp các annotation thường dùng của Spring/Spring Boot
- Hướng dẫn nhập môn SpringBoot
Giải thích chi tiết các điểm kiến thức quan trọng:
- Giải thích chi tiết IoC & AOP (hiểu nhanh)
- Giải thích chi tiết transaction trong Spring
- Giải thích chi tiết các design pattern trong Spring
- Giải thích chi tiết nguyên lý auto configuration của SpringBoot
MyBatis
Tổng hợp câu hỏi phỏng vấn MyBatis thường gặp
Security
Authentication & authorization
- Giải thích chi tiết khái niệm cơ bản về authentication và authorization
- Giải thích chi tiết khái niệm cơ bản về JWT
- Phân tích ưu/nhược điểm của JWT và giải pháp cho các vấn đề thường gặp
- Giải thích chi tiết SSO (Single Sign-On)
- Giải thích chi tiết thiết kế hệ thống phân quyền
An toàn dữ liệu
- Tổng hợp các thuật toán mã hóa thường gặp
- Tổng hợp giải pháp lọc từ nhạy cảm
- Tổng hợp giải pháp che giấu dữ liệu (data desensitization)
- Tại sao cả frontend và backend đều phải validate dữ liệu
- Tại sao khi quên mật khẩu chỉ có thể reset chứ không cho biết mật khẩu cũ?
Tác vụ định kỳ
Giải thích chi tiết tác vụ định kỳ trong Java
Đẩy tin nhắn real-time trên Web
Giải thích chi tiết việc đẩy tin nhắn real-time trên Web
Distributed
- ⭐ Câu hỏi phỏng vấn distributed thường gặp
- Chuẩn bị phỏng vấn distributed system
- Chuẩn bị phỏng vấn microservice
- Nhập môn distributed system
Lý thuyết & thuật toán & giao thức
- Phân tích lý thuyết CAP và lý thuyết BASE
- Giải thích chi tiết về distributed coordination
- Giải thích chi tiết bài toán Byzantine Generals
- Phân tích thuật toán Paxos
- Phân tích thuật toán Raft
- Phân tích giao thức ZAB
- Giải thích chi tiết giao thức Gossip
- Giải thích chi tiết thuật toán consistent hashing
RPC
ZooKeeper
Hai bài này có thể trùng lặp nội dung một phần, khuyến khích đọc cả hai.
- Tổng hợp khái niệm liên quan đến ZooKeeper (nhập môn)
- Tổng hợp khái niệm liên quan đến ZooKeeper (nâng cao)
API Gateway
- Tổng hợp kiến thức cơ bản về API gateway
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Spring Cloud Gateway thường gặp
Distributed ID
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn distributed ID thường gặp
- Hướng dẫn thiết kế distributed ID
Distributed lock
Distributed transaction
Tổng hợp điểm kiến thức & câu hỏi phỏng vấn distributed transaction thường gặp
Distributed configuration center
Tổng hợp điểm kiến thức & câu hỏi phỏng vấn distributed configuration center thường gặp
High performance
Tối ưu database
- Read/write splitting và sharding trong database
- Tách dữ liệu nóng/lạnh
- Tổng hợp các cách tối ưu SQL thường gặp
- Giới thiệu deep pagination và gợi ý tối ưu
Load balancing
Tổng hợp điểm kiến thức & câu hỏi phỏng vấn load balancing thường gặp
CDN
Tổng hợp điểm kiến thức & câu hỏi phỏng vấn CDN (Content Delivery Network) thường gặp
Message queue
- Chuẩn bị phỏng vấn message queue
- Tổng hợp kiến thức cơ bản về message queue
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Disruptor thường gặp
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn RabbitMQ thường gặp
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn RocketMQ thường gặp
- Tổng hợp điểm kiến thức & câu hỏi phỏng vấn Kafka thường gặp
High availability
Hướng dẫn thiết kế hệ thống high availability
Thiết kế dự phòng
Giải thích chi tiết thiết kế dự phòng (redundancy)
Rate limiting
Giải thích chi tiết rate limiting cho service
Degradation & circuit breaker
Giải thích chi tiết degradation & circuit breaker
Timeout & retry
Giải thích chi tiết timeout & retry
Cluster
Triển khai nhiều bản của cùng một service, tránh single point of failure.
Thiết kế disaster recovery và multi-active đa vùng
Disaster recovery = khắc phục thảm họa + backup.
- Backup: sao lưu thêm nhiều bản cho toàn bộ dữ liệu quan trọng mà hệ thống sinh ra.
- Khắc phục thảm họa: xây dựng hai hệ thống hoàn toàn giống nhau ở hai vùng địa lý khác nhau. Khi hệ thống ở một nơi đột ngột dừng hoạt động, toàn bộ ứng dụng có thể chuyển sang nơi còn lại, nhờ đó hệ thống vẫn cung cấp dịch vụ bình thường.
Multi-active đa vùng mô tả việc triển khai service ở nhiều vùng địa lý và tất cả đều đồng thời cung cấp dịch vụ cho bên ngoài. Khác biệt chính so với thiết kế disaster recovery truyền thống nằm ở chữ "multi-active", tức mọi site đều đang phục vụ cùng lúc. Multi-active đa vùng nhằm ứng phó với tình huống bất ngờ như hỏa hoạn, động đất và các thảm họa tự nhiên hoặc do con người gây ra.
Xu hướng Star
Tài khoản công khai
Nếu mọi người muốn theo dõi real-time các bài viết tôi cập nhật và nội dung giá trị tôi chia sẻ, có thể theo dõi tài khoản công khai "JavaGuide" của tôi.

