Việc làm

25/09 · Hồ Chí Minh · Tại văn phòng

Middle Backend Developer ( NestJS )

Công ty TNHH SKYDEV · 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 (Cloud (AWS, Azure, GCP), Node.js, C# & .NET). 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. 01IaaS, PaaS và SaaS khác nhau thế nào? Cho ví dụ dịch vụ thuộc từng loại.Cloud (AWS, Azure, GCP) · Junior

    Gợi ý trả lời

    Khác nhau ở chỗ bạn tự quản lý tới tầng nào: IaaS bạn lo từ hệ điều hành trở lên, PaaS bạn chỉ lo code và dữ liệu, SaaS bạn chỉ dùng phần mềm.

    • IaaS: máy ảo EC2, Azure Virtual Machines, Compute Engine.
    • PaaS: Elastic Beanstalk, Azure App Service, Cloud Run, các DB quản lý sẵn như RDS, Cloud SQL.
    • SaaS: email, bộ văn phòng, CRM dùng qua trình duyệt.

    Người phỏng vấn muốn nghe: mô hình trách nhiệm chung (shared responsibility). Nhà cung cấp lo hạ tầng vật lý; cấu hình bảo mật, quyền truy cập và dữ liệu vẫn là việc của bạn ở mọi mô hình.

    Ôn thêm câu hỏi Cloud (AWS, Azure, GCP) →
  2. 02Region và Availability Zone là gì? Thiết kế thế nào để ứng dụng không chết khi một AZ gặp sự cố?Cloud (AWS, Azure, GCP) · Junior

    Gợi ý trả lời

    Region là một vùng địa lý; mỗi region có nhiều Availability Zone, là các trung tâm dữ liệu tách biệt về điện, mạng, làm mát nhưng nối với nhau độ trễ thấp.

    Để chịu được mất một AZ:

    • Chạy ứng dụng ở ít nhất 2 AZ, đứng sau load balancer.
    • Dùng Auto Scaling group/managed instance group trải trên nhiều AZ.
    • Database bật chế độ Multi-AZ (bản standby ở AZ khác, failover tự động).
    • Ứng dụng stateless, session để ở Redis hoặc DB.

    Hay sai: đặt NAT Gateway hoặc một thành phần duy nhất ở một AZ, tạo điểm lỗi đơn mà không để ý.

    Ôn thêm câu hỏi Cloud (AWS, Azure, GCP) →
  3. 03Giải thích VPC, public subnet, private subnet, Internet Gateway và NAT Gateway.Cloud (AWS, Azure, GCP) · Junior

    Gợi ý trả lời

    VPC là mạng riêng ảo của bạn trên cloud; subnet chia nhỏ dải IP; tính "public" hay "private" của subnet do route table quyết định.

    • Public subnet: route 0.0.0.0/0 tới Internet Gateway; đặt load balancer, bastion.
    • Private subnet: không có route trực tiếp ra Internet; đặt app server, database.
    • NAT Gateway: nằm ở public subnet, cho máy trong private subnet đi ra Internet (tải package, gọi API) nhưng không cho kết nối từ ngoài vào.
    • Security group lọc ở mức instance (stateful); Network ACL lọc ở mức subnet (stateless).

    Người phỏng vấn muốn nghe: database không bao giờ đặt ở public subnet, và truy cập quản trị nên đi qua bastion hoặc dịch vụ kiểu Session Manager.

    Ôn thêm câu hỏi Cloud (AWS, Azure, GCP) →
  4. 04CommonJS và ES Modules khác nhau thế nào? Dự án mới nên dùng loại nào?Node.js · Junior

    Gợi ý trả lời

    CommonJS dùng require/module.exports, nạp đồng bộ lúc chạy. ES Modules dùng import/export, là chuẩn của ngôn ngữ, được phân tích tĩnh nên hỗ trợ tree-shaking và top-level await.

    • Bật ESM bằng "type": "module" trong package.json hoặc đuôi .mjs.
    • Trong ESM không có sẵn __dirname; dùng import.meta.dirname (Node mới) hoặc tính từ import.meta.url.
    • ESM import được CommonJS. Chiều ngược lại trước đây phải dùng import() động; các bản Node gần đây đã cho require() module ESM đồng bộ (trừ module có top-level await).

    Dự án mới nên dùng ESM, vì cả hệ sinh thái đang chuyển dần sang đó.

    Hay sai: khi viết ESM thuần, quên ghi đuôi file trong đường dẫn import tương đối (./utils.js), dẫn đến lỗi không tìm thấy module.

    Ôn thêm câu hỏi Node.js →
  5. 05Middleware trong Express là gì? Viết error-handling middleware thế nào?Node.js · Junior

    Gợi ý trả lời

    Middleware là hàm (req, res, next) chạy theo thứ tự đăng ký. Mỗi middleware có thể sửa req/res, trả response luôn, hoặc gọi next() để chuyển tiếp. Ví dụ: parse JSON, log, xác thực, giới hạn tần suất.

    Error-handling middleware có bốn tham số và đặt sau các route:

    app.use((err, req, res, next) => {
      logger.error(err);
      const status = err.status ?? 500;
      res.status(status).json({ message: status < 500 ? err.message : "Internal error" });
    });
    
    • Gọi next(err) để nhảy thẳng tới error handler.
    • Express 5 tự chuyển Promise bị reject trong handler async sang error handler; Express 4 thì phải tự try/catch rồi gọi next(err).

    Hay sai: quên gọi next() và cũng không trả response, khiến request treo đến khi timeout. Hoặc gửi response hai lần, gây lỗi "headers already sent".

    Ôn thêm câu hỏi Node.js →
  6. 06Interface và abstract class khác nhau thế nào? Khi nào dùng cái nào?C# & .NET · Junior

    Gợi ý trả lời

    Interface mô tả khả năng (hợp đồng) mà nhiều kiểu không liên quan có thể cùng thực hiện; abstract class là lớp cha dùng chung code và trạng thái cho một họ lớp gần nhau.

    • Một class implement nhiều interface nhưng chỉ kế thừa một class.
    • Abstract class có field, constructor, method có sẵn thân.
    • Từ C# 8 interface có default implementation, nhưng vẫn không có field trạng thái.

    Dùng interface cho các phụ thuộc cần thay thế hoặc mock trong test (IEmailSender, IOrderRepository). Dùng abstract class khi các lớp con thật sự chia sẻ logic, vd. BaseHandler xử lý log và retry chung.

    Người phỏng vấn muốn nghe: bạn ưu tiên composition và interface, chỉ dùng kế thừa khi có quan hệ "là một" rõ ràng.

    Ôn thêm câu hỏi C# & .NET →
  7. 07Object storage (S3, Blob Storage, Cloud Storage) khác block storage và file storage thế nào?Cloud (AWS, Azure, GCP) · Junior

    Gợi ý trả lời

    Object storage lưu file dạng đối tượng truy cập qua HTTP API, dung lượng gần như không giới hạn và rẻ; block storage là ổ đĩa gắn vào máy ảo; file storage là ổ mạng dùng chung qua NFS/SMB.

    • Object: ảnh, video, backup, data lake, static website. Không sửa một phần file được, phải ghi đè cả object.
    • Block (EBS, Managed Disk, Persistent Disk): ổ hệ điều hành, database tự quản; độ trễ thấp.
    • File (EFS, Azure Files, Filestore): nhiều máy cùng đọc ghi một thư mục.

    Hay sai: để bucket public để tiện chia sẻ. Nên giữ bucket private, chia sẻ bằng presigned URL hoặc CDN có kiểm soát.

    Ôn thêm câu hỏi Cloud (AWS, Azure, GCP) →
  8. 08IAM role khác IAM user thế nào? Vì sao không nên để access key trong code?Cloud (AWS, Azure, GCP)

    Gợi ý trả lời

    User đại diện cho một người hoặc ứng dụng với credential dài hạn; role là tập quyền được "đội" tạm thời và cấp credential ngắn hạn tự hết hạn.

    • Ứng dụng chạy trên cloud nên dùng role gắn vào máy ảo, container, function (instance profile, managed identity, service account).
    • CI/CD ngoài cloud dùng OIDC federation để lấy token ngắn hạn, không cần key cố định.
    • Áp dụng least privilege: chỉ cấp đúng action trên đúng resource.
    • Bật MFA cho người dùng, hạn chế dùng tài khoản root.

    Access key trong code dễ lộ qua Git, log, image; một khi lộ thì dùng được tới khi bị thu hồi.

    Người phỏng vấn muốn nghe: policy cụ thể, tránh "Action": "*".

    Ôn thêm câu hỏi Cloud (AWS, Azure, GCP) →
  9. 09Khi nào bạn chọn serverless (Lambda, Azure Functions, Cloud Run) thay vì container hay VM?Cloud (AWS, Azure, GCP)

    Gợi ý trả lời

    Serverless hợp với tải không đều, xử lý theo sự kiện, đội nhỏ không muốn vận hành server; trả tiền theo lượng dùng.

    Hợp:

    • Xử lý file khi upload, webhook, cron job, API lưu lượng thấp hoặc thất thường.

    Cân nhắc:

    • Cold start làm tăng độ trễ request đầu.
    • Giới hạn thời gian chạy, bộ nhớ, kích thước gói.
    • Tải cao và đều thì container/VM thường rẻ hơn.
    • Kết nối DB: nhiều instance mở nhiều connection, cần connection pooler hoặc proxy.
    • Khó debug và test cục bộ hơn.

    Người phỏng vấn muốn nghe: quyết định dựa trên đặc điểm tải và chi phí, không chọn vì "đang hot".

    Ôn thêm câu hỏi Cloud (AWS, Azure, GCP) →
  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 SKYDEV?

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