Dev Tooling & DevOps cơ bản: Git + Docker + CI/CD + Maven/Gradle + Kubernetes (Fresher Backend — VPBank)

Mảng này KHÔNG đòi hỏi fresher biết vận hành thực tế Jenkins/K8s. Interviewer ngân hàng chỉ cần thấy: (1) bạn dùng Git thành thạo ở mức làm việc nhóm, (2) hiểu đúng khái niệm Docker/CI/CD/Maven, (3) có ý thức về quy trình kiểm soát thay đổi và bảo mật — thứ ngân hàng coi trọng hơn cả kỹ năng tool.


1. Danh sách chủ đề con theo độ ưu tiên

Ưu tiên CAO (phải trả lời trôi chảy)

Ưu tiên TRUNG BÌNH

Ưu tiên THẤP (biết khái niệm 1–2 câu là đủ, đừng đầu tư sâu)


2. Câu hỏi phỏng vấn khả năng cao + hướng trả lời

Câu 1. Em dùng Git thế nào trong project nhóm? Gặp conflict thì xử lý ra sao?

Hướng trả lời:

Ý ăn điểm: kể một conflict CỤ THỂ từng gặp trong đồ án (ví dụ hai người cùng sửa một service). Góc ngân hàng: nhấn mạnh "vì vậy em hiểu tại sao ngân hàng bắt buộc mọi thay đổi qua PR + review — code chạm đến tiền và dữ liệu khách hàng thì không ai được tự ý sửa trực tiếp trên nhánh chính".

Lỗi cần tránh: trả lời "nhóm em push thẳng lên main" (báo động đỏ); giải conflict bằng cách "chọn Accept All Current Changes" máy móc; không test lại sau khi resolve.


Câu 2. git merge khác git rebase như thế nào?

Hướng trả lời:

Ý ăn điểm: nói được "golden rule of rebase". Góc ngân hàng: lịch sử Git là một phần audit trail — ngân hàng cần truy vết ai sửa gì, khi nào; nên môi trường ngân hàng thường ưu tiên merge (giữ nguyên lịch sử) trên nhánh chung.

Lỗi cần tránh: nói "rebase tốt hơn merge" chung chung; không biết rebase viết lại lịch sử; lẫn rebase với revert.


Câu 3. git fetch khác git pull chỗ nào?

Hướng trả lời:

Ý ăn điểm: công thức "pull = fetch + merge" + nói được vì sao fetch an toàn hơn. Lỗi cần tránh: trả lời "giống nhau"; nói fetch làm thay đổi working directory.


Câu 4. Pull Request là gì? Vì sao phải code review, tự merge không được à?

Hướng trả lời:

Ý ăn điểm — góc ngân hàng: đây là yêu cầu tuân thủ (compliance), không chỉ là thói quen tốt. Với hệ thống xử lý giao dịch tiền, một dòng code sai có thể gây sai lệch số dư; ngân hàng cần chứng minh với kiểm toán rằng không một thay đổi nào vào production mà không qua ít nhất một người duyệt (nguyên tắc four-eyes / maker-checker — giống như giao dịch viên nhập lệnh phải có kiểm soát viên duyệt).

Lỗi cần tránh: coi review là "hình thức, mất thời gian"; không biết branch protection tồn tại.


Câu 5. Docker là gì? Khác máy ảo (VM) chỗ nào? Image khác container chỗ nào?

Hướng trả lời:

FROM eclipse-temurin:17-jre
WORKDIR /app
COPY target/myapp.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

Ý ăn điểm: phép so sánh class/object cho image/container; nói "cùng một image được test ở UAT chính là thứ chạy ở prod". Góc ngân hàng: ngân hàng có nhiều môi trường (dev → SIT → UAT → prod); Docker đảm bảo thứ đã kiểm thử là thứ được deploy, loại bỏ rủi ro "prod cấu hình khác UAT" — rủi ro vận hành lớn với hệ thống giao dịch.

Lỗi cần tránh: nói "Docker là máy ảo nhẹ" rồi dừng lại (phải nói được điểm khác cốt lõi: chung kernel); lẫn lộn image và container; nói Docker "tự động scale" (đó là việc của Kubernetes).


Câu 6. Vì sao dự án của em (hoặc ngân hàng) nên dùng Docker thay vì cài trực tiếp lên server?

Hướng trả lời:

Ý ăn điểm — góc ngân hàng: rollback nhanh bằng image cũ chính là một phần của rollback plan mà quy trình change management ngân hàng bắt buộc phải có trước mỗi lần release. Lỗi cần tránh: chỉ nói "Docker phổ biến nên dùng"; không nêu được lợi ích cụ thể nào.


Câu 7. CI/CD là gì? Vì sao ngân hàng cần pipeline tự động nhưng lại kiểm soát release rất chặt?

Hướng trả lời:

Ý ăn điểm: phân biệt Delivery/Deployment + nói được vì sao ngân hàng thường dừng ở Delivery (con người approve bước cuối). Nhắc "mọi lần deploy đều được log lại phục vụ audit". Lỗi cần tránh: nói CI/CD chỉ là "deploy tự động" (bỏ quên phần test); nói "tự động thì bỏ luôn approval cho nhanh" — ngược triết lý ngân hàng.


Câu 8. Trong pipeline, nếu unit test fail thì chuyện gì xảy ra? Vì sao?

Hướng trả lời:

Ý ăn điểm: cụm "fail fast" và "quality gate". Góc ngân hàng: một bug tính lãi sai lọt qua vì "skip test cho nhanh" là ví dụ tốt để nói về chi phí của lỗi. Lỗi cần tránh: trả lời "thì skip test đi ạ".


Câu 9. Maven dùng để làm gì? mvn package thực hiện những bước nào?

Hướng trả lời:

<project>
  <groupId>com.example</groupId>
  <artifactId>banking-demo</artifactId>
  <version>1.0.0</version>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>
</project>

Ý ăn điểm: nói rõ "package tự chạy compile và test trước" — nhiều fresher không biết lifecycle là chuỗi tích luỹ. Góc ngân hàng: dependency được khai báo tường minh trong pom.xml giúp kiểm soát phiên bản thư viện và lỗ hổng bảo mật (ví dụ sự cố Log4j — ngân hàng phải rà soát mọi pom.xml để biết hệ thống nào dính). Lỗi cần tránh: nói Maven chỉ là "chỗ tải thư viện"; không biết JAR nằm ở target/; lẫn phase với plugin/goal (không cần sa đà — nắm phase là đủ).


Câu 10. Em deploy đồ án của em như thế nào? (gần như chắc chắn bị hỏi khi khai thác project trong CV)

Tình huống A — đã từng dùng Docker/cloud (kể trung thực theo mức đã làm):

Tình huống B — chưa từng deploy thật (trả lời trung thực + chứng minh hiểu khái niệm):

Ý ăn điểm: trung thực + cho thấy hiểu bức tranh (build → đóng gói → cấu hình → chạy) dù chưa làm hết; câu chốt về quy trình ngân hàng ở cả hai tình huống. Lỗi cần tránh: nói dối đã dùng Kubernetes/AWS rồi bị hỏi sâu và vỡ trận (interviewer ngân hàng rất hay đào tiếp); trả lời cụt lủn "em chưa deploy bao giờ" mà không thể hiện đã tìm hiểu.


Câu 11. Em quản lý cấu hình và mật khẩu DB trong project thế nào? Có commit vào Git không?

Hướng trả lời:

Ý ăn điểm — góc ngân hàng: đây là lỗi bảo mật kinh điển của fresher và là câu interviewer ngân hàng dùng để lọc ý thức bảo mật. Nói thêm: ở ngân hàng, dev thậm chí không được biết mật khẩu DB production — secret do team vận hành quản lý qua vault/secret manager, app nhận lúc runtime. Lỗi cần tránh: "em để trong application.properties và push lên GitHub luôn ạ" — trả lời thật thà kiểu này mà không kèm "giờ em biết đó là sai và cách sửa là..." sẽ mất điểm nặng.


Câu 12. Jenkins là gì? Em đã dùng bao giờ chưa?

Hướng trả lời:

Ý ăn điểm: câu "khái niệm giống GitHub Actions, khác cú pháp" + lý do self-hosted. Lỗi cần tránh: chém đã cấu hình Jenkins master/agent; hoặc hoảng loạn "em không biết gì về Jenkins" rồi im lặng.


Câu 13. Kubernetes/OpenShift là gì? (chỉ cần mức khái niệm)

Hướng trả lời:

Ý ăn điểm: liên kết chuỗi Docker → nhiều container → cần orchestration; biết OpenShift là "K8s phiên bản doanh nghiệp". Góc ngân hàng: giờ cao điểm chuyển tiền (lễ Tết, ngày trả lương) hệ thống cần scale nhanh rồi thu lại — đó chính là bài toán K8s giải. Lỗi cần tránh: cố trình bày Pod/Deployment/Service khi không nắm chắc — sa lầy đúng vùng mình yếu nhất.


Câu 14. git revert khác git reset? Lỡ commit sai lên nhánh chung thì làm gì?

Hướng trả lời:

Ý ăn điểm — góc ngân hàng: revert giữ nguyên dấu vết "đã có lỗi và đã sửa" — đúng tinh thần audit trail: ngân hàng không xoá lịch sử, kể cả lịch sử sai (giống bút toán kế toán: sai thì ghi bút toán điều chỉnh, không tẩy sổ). Lỗi cần tránh: đề xuất force push lên nhánh chung.


3. Ghi chú chiến thuật trước phỏng vấn

Định vị đúng kỳ vọng. VPBank không kỳ vọng fresher vận hành Jenkins/Kubernetes/OpenShift thực tế — các JD liệt kê chúng là "hiểu biết là lợi thế". Chiến thuật đúng: trả lời khái niệm chính xác, thành thật về giới hạn, và luôn kèm một câu thể hiện tinh thần học ("em đã tự tìm hiểu X, chưa có cơ hội dùng thật, em muốn được học ở môi trường có quy trình chuẩn như ngân hàng"). Interviewer ngân hàng đánh giá cao thành thật + ý thức quy trình hơn là danh sách buzzword.

Sợi chỉ đỏ để lồng vào mọi câu trả lời: ngân hàng = kiểm soát thay đổi (change management) + phân quyền (dev không tự deploy prod) + audit trail (mọi thứ truy vết được) + bảo mật (secret không vào Git). Cứ mỗi câu tooling, gắn được một trong bốn ý này là bạn nổi bật hẳn so với fresher chỉ thuộc định nghĩa.

2–3 việc làm nhanh trước phỏng vấn (1–2 buổi tối):

  1. Đưa đồ án lên GitHub cho tử tế: README mô tả cách chạy, commit message rõ nghĩa (feat: add transfer API validation thay vì update, fix bug), tạo ít nhất 1 branch + 1 PR tự merge để có cái mà kể. Kiểm tra kỹ không có password/API key nào trong repo và trong history.
  2. Viết 1 Dockerfile cho đồ án Spring Boot (dùng mẫu 5 dòng ở Câu 5), chạy được docker build + docker run -p 8080:8080 trên máy mình. Chỉ 30 phút nhưng biến câu trả lời "em có biết Docker" thành "em đã docker hoá đồ án của em".
  3. Nếu từng đụng GitHub Actions: mở lại file workflow YAML, nhớ được flow on: push → jobs: build → steps: checkout, setup-java, mvn package để khi bị hỏi Jenkins có cái quy chiếu; nếu chưa từng, đọc lướt một Jenkinsfile mẫu 15 dòng trên mạng để quen mặt chữ stage('Build'), stage('Test'), stage('Deploy').

Câu thoát hiểm vạn năng khi bị hỏi vượt tầm (K8s networking, Jenkins agent, Helm...): "Phần này em mới dừng ở mức khái niệm là [nói đúng 1–2 câu khái niệm]; em chưa làm thực tế nên không dám nói sâu, nhưng em đã quen cách tự học qua việc [Docker hoá đồ án / dùng Actions], em tin sẽ bắt nhịp nhanh." — vừa trung thực, vừa không để khoảng lặng, vừa chốt bằng điểm mạnh.