Việc làm

11/09 · Hồ Chí Minh · Hybrid

Senior Golang Backend Engineer

CÔNG TY TNHH NEXLAB IT SOLUTIONS · Backend Developer

Xem mô tả & ứng tuyển trên ITviecMô tả công việc, lương và ứng tuyển nằm ở ITviec.

10 câu hỏi có thể gặp khi phỏng vấn

Chọn theo kỹ năng và cấp của tin (DevOps & CI/CD, System Design & Kiến trúc, Golang). Gợi ý trả lời do Drama Công Ty biên soạn để bạn ôn nhanh, không phải đề của công ty.

  1. 01So sánh rolling update, blue-green và canary. Bạn chọn chiến lược nào cho hệ thống thanh toán?DevOps & CI/CD · Senior

    Gợi ý trả lời

    Cả ba đều giảm rủi ro khi deploy nhưng khác ở chi phí và tốc độ phát hiện lỗi.

    • Rolling: thay dần từng Pod, rẻ, mặc định của Deployment; hai phiên bản chạy song song một lúc.
    • Blue-green: dựng nguyên bộ mới, chuyển traffic một lần, rollback tức thì; tốn gấp đôi tài nguyên.
    • Canary: đưa một phần nhỏ traffic sang bản mới, theo dõi metric rồi tăng dần; cần công cụ (service mesh, Argo Rollouts) và metric tốt.

    Với thanh toán, canary kèm tự động rollback theo tỷ lệ lỗi và độ trễ là lựa chọn hợp lý.

    Hay sai: quên migration DB. Schema phải tương thích cả bản cũ lẫn mới (expand rồi mới contract).

    Ôn thêm câu hỏi DevOps & CI/CD →
  2. 02Production đang lỗi 5xx tăng vọt sau một lần deploy. Bạn xử lý thế nào?DevOps & CI/CD · Senior

    Gợi ý trả lời

    Ưu tiên khôi phục dịch vụ trước, tìm nguyên nhân gốc sau.

    1. Xác nhận phạm vi qua dashboard: endpoint nào, từ lúc nào, có trùng thời điểm deploy không.
    2. Nếu nghi deploy: rollback ngay (kubectl rollout undo, hoặc revert trong GitOps) thay vì sửa nóng.
    3. Thông báo kênh sự cố, chỉ định người điều phối, ghi lại mốc thời gian.
    4. Sau khi ổn định: so sánh log, trace, diff cấu hình giữa hai phiên bản.
    5. Viết postmortem không đổ lỗi, có hành động phòng ngừa (thêm test, canary, alert).

    Người phỏng vấn muốn nghe: bình tĩnh, có thứ tự, biết giảm thiệt hại trước, và rút kinh nghiệm thành thay đổi quy trình.

    Ôn thêm câu hỏi DevOps & CI/CD →
  3. 03SLI, SLO và error budget là gì? Bạn đặt alert dựa trên chúng thế nào?DevOps & CI/CD · Senior

    Gợi ý trả lời

    SLI là chỉ số đo trải nghiệm người dùng (tỷ lệ request thành công, độ trễ p99); SLO là mục tiêu cho SLI đó trong một khoảng thời gian; error budget là phần được phép hỏng còn lại.

    • Ví dụ: SLO 99.9% request thành công trong 30 ngày, nghĩa là budget 0.1% request lỗi.
    • Alert theo burn rate: budget đang bị tiêu nhanh bất thường (đo trên cửa sổ ngắn và dài) thì báo, thay vì báo mỗi khi CPU cao.
    • Hết budget: ưu tiên việc ổn định, chậm lại tính năng mới.

    Hay sai: đặt alert trên nguyên nhân (CPU, RAM) thay vì triệu chứng người dùng thấy, dẫn đến báo động giả và mệt mỏi vì alert.

    Ôn thêm câu hỏi DevOps & CI/CD →
  4. 04Định lý CAP là gì? Strong consistency và eventual consistency áp dụng thế nào trong thực tế?System Design & Kiến trúc

    Gợi ý trả lời

    CAP nói rằng khi xảy ra phân mảnh mạng (Partition), hệ phân tán phải chọn giữa Consistency (mọi node trả dữ liệu mới nhất hoặc báo lỗi) và Availability (luôn trả lời, có thể bằng dữ liệu cũ). Khi mạng bình thường, trade-off thực tế là giữa độ trễ và tính nhất quán (mô hình PACELC).

    • Strong consistency: cần cho số dư tài khoản, tồn kho, đặt chỗ, nơi đọc dữ liệu cũ gây thiệt hại thật.
    • Eventual consistency: chấp nhận được cho lượt thích, bảng tin, số người xem, kết quả tìm kiếm.

    Một hệ thống thường kết hợp cả hai theo từng loại dữ liệu. Có những mức ở giữa như read-your-writes: người vừa sửa thì phải thấy thay đổi của mình, người khác thấy chậm vài giây cũng không sao.

    Hay sai: nói "chọn 2 trong 3" như thể có thể bỏ P. Với hệ phân tán, phân mảnh mạng là chuyện chắc chắn xảy ra.

    Ôn thêm câu hỏi System Design & Kiến trúc →
  5. 05Thiết kế rate limiter cho API. Bạn chọn thuật toán nào và đặt ở đâu?System Design & Kiến trúc

    Gợi ý trả lời

    Rate limiter bảo vệ hệ thống khỏi lạm dụng và quá tải, thường đặt ở API gateway hoặc middleware, đếm theo user, API key hoặc IP.

    Thuật toán:

    • Fixed window: đơn giản nhưng bị dồn request ở ranh giới hai cửa sổ.
    • Sliding window (log hoặc counter): mượt hơn, tốn bộ nhớ hơn.
    • Token bucket: cho phép burst ngắn trong giới hạn tốc độ trung bình, được dùng phổ biến.

    Khi chạy nhiều instance, bộ đếm phải dùng chung, thường là Redis. Thao tác kiểm tra và tăng phải atomic (INCR kèm EXPIRE, hoặc Lua script).

    Trả về HTTP 429 kèm header Retry-After.

    Người phỏng vấn muốn nghe: bạn quyết định được khi Redis lỗi thì cho qua (fail-open) hay chặn (fail-closed) và giải thích lý do, đồng thời biết giới hạn riêng cho endpoint đắt như đăng nhập, gửi OTP.

    Ôn thêm câu hỏi System Design & Kiến trúc →
  6. 06Một service Go có độ trễ cao và tốn nhiều bộ nhớ. Bạn profile và tối ưu thế nào?Golang · Senior

    Gợi ý trả lời

    Đo bằng pprof trước khi sửa. Import net/http/pprof (đặt ở cổng nội bộ) rồi dùng go tool pprof để xem CPU profile, heap, allocs, goroutine và block/mutex profile.

    Các hướng tối ưu thường gặp:

    • Giảm cấp phát (allocation): cấp phát nhiều làm GC chạy nhiều. Cấp phát trước cap cho slice và map, tránh chuyển đổi []byte/string thừa, dùng strings.Builder.
    • Escape analysis: go build -gcflags=-m cho biết biến nào bị đẩy lên heap.
    • sync.Pool để tái sử dụng buffer ở đường xử lý nóng.
    • Tinh chỉnh GC: GOMEMLIMIT đặt giới hạn bộ nhớ mềm (hữu ích trong container), GOGC đổi tần suất GC.
    • Viết benchmark (go test -bench . -benchmem) để so sánh trước và sau khi sửa.

    Đừng quên ngoài code: truy vấn DB chậm, connection pool quá nhỏ, gọi API ngoài không timeout.

    Người phỏng vấn muốn nghe: bạn đọc được flame graph và dựa vào số liệu, không tối ưu theo cảm giác.

    Ôn thêm câu hỏi Golang →
  7. 07GitOps là gì? Bạn tổ chức repo và quy trình deploy cho nhiều môi trường, nhiều service ra sao?DevOps & CI/CD · Senior

    Gợi ý trả lời

    GitOps coi Git là nguồn sự thật cho trạng thái hệ thống; một agent trong cluster (Argo CD, Flux) liên tục kéo và đồng bộ, thay vì CI đẩy thẳng bằng kubectl.

    • Tách repo code ứng dụng và repo cấu hình deploy; CI build image rồi mở PR cập nhật tag.
    • Cấu hình dùng chung bằng Helm chart hoặc Kustomize, overlay riêng cho dev/staging/prod.
    • Lên prod qua PR có review; rollback bằng git revert.
    • Bật phát hiện drift và tự sửa lệch cấu hình.
    • CI không cần giữ credential admin của cluster.

    Người phỏng vấn muốn nghe: cân nhắc được đánh đổi, ví dụ secret vẫn cần giải pháp riêng và số lượng PR cập nhật tag có thể nhiều.

    Ôn thêm câu hỏi DevOps & CI/CD →
  8. 08Pod bị CrashLoopBackOff, bạn điều tra thế nào?DevOps & CI/CD

    Gợi ý trả lời

    CrashLoopBackOff nghĩa là container khởi động rồi thoát liên tục; cần tìm lý do nó thoát.

    kubectl describe pod <pod>      # events, exit code, OOMKilled?
    kubectl logs <pod> --previous   # log của lần chạy trước khi chết
    kubectl get events --sort-by=.lastTimestamp
    
    • Exit code 137 / OOMKilled: thiếu memory limit hoặc rò rỉ bộ nhớ.
    • Lỗi cấu hình: thiếu biến môi trường, Secret/ConfigMap sai, không kết nối được DB.
    • Liveness probe quá gắt khiến app bị kill khi đang khởi động; cân nhắc startupProbe.
    • Sai lệnh command/args, sai kiến trúc image (arm64 và amd64).

    Người phỏng vấn muốn nghe: quy trình có thứ tự, dựa vào events và log trước khi đoán.

    Ôn thêm câu hỏi DevOps & CI/CD →
  9. 09Liveness, readiness và startup probe khác nhau thế nào? Cấu hình sai thì hậu quả gì?DevOps & CI/CD

    Gợi ý trả lời

    Readiness quyết định Pod có nhận traffic không; liveness quyết định có restart container không; startup probe tạm hoãn hai probe kia cho tới khi app khởi động xong.

    • Readiness fail: Pod bị gỡ khỏi endpoint của Service, không bị restart.
    • Liveness fail: kubelet restart container.
    • Startup probe hợp với app khởi động chậm (JVM, nạp model).

    Lỗi hay gặp:

    • Liveness kiểm tra cả DB bên ngoài: DB chậm là toàn bộ Pod bị restart dây chuyền.
    • Không có readiness: rolling update đẩy traffic vào Pod chưa sẵn sàng, gây lỗi 5xx.

    Người phỏng vấn muốn nghe: liveness chỉ nên kiểm tra chính process còn sống, phần phụ thuộc để cho readiness.

    Ôn thêm câu hỏi DevOps & CI/CD →
  10. 10Bạn phản ứng thế nào khi nhận góp ý tiêu cực về công việc của mình?Câu hỏi hành vi & văn hoá

    Gợi ý trả lời

    Cho thấy bạn tách góp ý khỏi cảm xúc cá nhân và biến nó thành hành động.

    • Lắng nghe hết, hỏi lại để hiểu ví dụ cụ thể và kỳ vọng.
    • Cảm ơn, kể cả khi chưa đồng ý hoàn toàn; nếu có góc nhìn khác, trao đổi bằng thông tin, không phòng thủ.
    • Lên kế hoạch cải thiện và chủ động xin phản hồi lại sau một thời gian.

    Câu mẫu: "Có lần lead góp ý code review của em quá dài, khó review. Lúc đầu em hơi chột dạ, nhưng em hỏi anh muốn chia thế nào cho dễ. Từ đó em tách pull request nhỏ theo từng thay đổi, thời gian review của team giảm hẳn và em cũng ít bị yêu cầu sửa lại hơn."

    Hay sai: nói "em luôn vui vẻ đón nhận mọi góp ý" mà không có ví dụ.

    Ôn thêm câu hỏi Câu hỏi hành vi & văn hoá →

Bạn đã phỏng vấn ở CÔNG TY TNHH NEXLAB IT SOLUTIONS?

Kể lại các vòng và câu hỏi đã gặp (ẩn danh) để người sau ôn đúng trọng tâm.

Chia sẻ kinh nghiệm phỏng vấn