date
Dec 14, 2025
slug
docs-traning-be-intern-week-3
status
Published
tags
NestJs
Backend
summary
Tổng hợp docs trainning back-end Intern Week 3
type
Post

TUẦN 3 – JAVASCRIPT & NESTJS

Mục tiêu:

  • Hiểu JS chạy thế nào trong backend
  • Không mơ hồ về async/await
  • Hiểu NestJS khác Express ở đâu
  • Tự build được API NestJS có structure chuẩn
  • Trả lời được câu hỏi JS/NestJS khi phỏng vấn

A. JAVASCRIPT NỀN TẢNG (BACKEND)

1. JavaScript trong backend khác frontend ở đâu?

Trả lời:
  • Backend JS chạy trên Node.js
  • Không có DOM, window
  • Tập trung vào:
    • I/O
    • Network
    • File system
    • Concurrency
👉 Backend JS = xử lý bất đồng bộ, không phải UI.

2. Event Loop là gì? (CÂU HỎI CỰC KỲ QUAN TRỌNG)

Trả lời ngắn gọn chuẩn:
Event loop là cơ chế cho phép JS:
  • Chạy non-blocking
  • Xử lý async task trên single thread

Thứ tự cơ bản

  1. Call stack
  1. Microtask queue (Promise)
  1. Macrotask queue (setTimeout, IO)
👉 Promise luôn chạy trước setTimeout.

3. Vì sao Node.js single thread nhưng xử lý nhiều request?

Trả lời:
  • JS chạy single thread
  • I/O chạy async (libuv, thread pool)
  • Không block CPU
👉 Node.js mạnh ở I/O bound, yếu ở CPU bound.

4. Blocking vs Non-blocking

  • Blocking: chặn event loop → toàn server đứng
  • Non-blocking: trả control về event loop
❌ Sai:
while(true) {}
👉 Backend JS phải tránh CPU nặng.

5. Callback hell là gì? Giải quyết thế nào?

  • Callback hell: callback lồng callback
  • Giải pháp:
    • Promise
    • async/await
👉 async/await chỉ là syntax sugar cho Promise.

B. ASYNC / AWAIT & PROMISE

6. Promise là gì?

Promise đại diện cho kết quả trong tương lai:
  • pending
  • fulfilled
  • rejected
👉 Promise chỉ resolve/reject 1 lần.

7. async/await hoạt động thế nào?

Trả lời:
  • async function luôn trả Promise
  • await:
    • pause function
    • không block event loop
👉 await ≠ block thread.

8. Xử lý lỗi async đúng cách?

❌ Sai:
await doSomething()
✅ Đúng:
try {
await doSomething()
} catch (e) {
handleError(e)
}
👉 Không catch = unhandled rejection.

9. Promise.all vs Promise.allSettled

  • Promise.all:
    • fail 1 → fail tất cả
  • Promise.allSettled:
    • chờ hết
👉 Dùng đúng ngữ cảnh.

C. TYPESCRIPT (BẮT BUỘC VỚI NESTJS)

10. Vì sao backend nên dùng TypeScript?

Trả lời:
  • Catch bug sớm
  • Refactor an toàn
  • Code dễ maintain
  • Team scale tốt
👉 TypeScript = đầu tư dài hạn.

11. Interface vs Type

  • Interface:
    • Extend tốt
    • Dùng cho object
  • Type:
    • Union, intersection
👉 Trong NestJS: interface rất phổ biến.

12. Optional vs Nullable khác gì?

  • Optional: có thể không tồn tại
  • Nullable: tồn tại nhưng giá trị null
👉 Nhầm chỗ này = bug logic.

D. NODE.JS RUNTIME

13. Node.js là gì?

Node.js = JS runtime:
  • V8 engine
  • libuv
  • event loop
👉 Node ≠ JS language.

14. process.env là gì?

  • Lưu environment variable
  • Config theo môi trường
👉 Không hard-code secret.

15. Vì sao không dùng console.log trong production?

  • Chậm
  • Không cấu trúc
  • Khó trace
👉 Dùng logger (winston, pino).

E. NESTJS CORE (RẤT QUAN TRỌNG)

16. NestJS là gì?

NestJS là backend framework:
  • Dựa trên Express/Fastify
  • Opinionated
  • Dùng DI (Dependency Injection)
👉 NestJS giống Spring Boot của Java.

17. NestJS khác Express ở đâu?

Express
NestJS
Tự do
Opinionated
Khó scale
Dễ scale
Ít structure
Structure rõ
👉 Project lớn → NestJS.

18. Controller là gì?

  • Nhận request
  • Trả response
  • Không chứa business logic
👉 Controller mỏng.

19. Service là gì?

  • Chứa business logic
  • Reusable
  • Testable
👉 Logic không để trong controller.

20. Module là gì?

  • Gom controller + service
  • Quản lý scope
👉 Module = boundary.

21. Dependency Injection là gì?

DI = không new object trực tiếp:
  • Dễ test
  • Loose coupling
👉 DI là lý do NestJS mạnh.

22. Provider lifecycle

  • Singleton (default)
  • Request-scoped
  • Transient
👉 Dùng sai scope = bug performance.

F. PIPE, GUARD, INTERCEPTOR

23. Pipe dùng để làm gì?

  • Validate
  • Transform data
👉 Validation ở pipe, không ở controller.

24. Guard dùng để làm gì?

  • Authorization
  • Auth check
👉 Guard chạy trước controller.

25. Interceptor dùng để làm gì?

  • Logging
  • Transform response
  • Performance metric
👉 Interceptor = middleware nâng cao.

G. ERROR HANDLING TRONG NESTJS

26. Exception filter là gì?

  • Bắt lỗi toàn cục
  • Chuẩn hóa response
👉 Không throw raw error.

27. Vì sao NestJS throw HttpException?

  • Gắn status code
  • Control response
👉 Backend chuyên nghiệp không throw Error bừa bãi.

H. PHỎNG VẤN & CÂU HỎI BẪY

28. NestJS có chậm hơn Express không?

Trả lời chuẩn:
  • Overhead nhỏ
  • Đổi lại maintainability
👉 Production chọn maintain.

29. Có cần TypeScript không?

❌ “Không cần”
✅ “Cần khi project lớn”

30. Khi nào không nên dùng Node.js?

  • CPU heavy
  • ML training
  • Video encoding
👉 Node không phải silver bullet.

I. BÀI TẬP TUẦN 3 (BẮT BUỘC)

  1. Tạo NestJS project
  1. 1 module users
  1. CRUD API
  1. DTO + validation
  1. Global exception filter

CHECKLIST TUẦN 3

  • Hiểu event loop
  • Không sợ async/await
  • Biết structure NestJS
  • Controller mỏng
  • Logic ở service
  • Dùng DTO + pipe

© Hiếu Trần 2020 - 2025

Tip: Use console.table() for better array logging!