Dựa trên feedback của đàn anh và kinh nghiệm phỏng vấn Senior Frontend (Angular), mình tổng hợp thành một framework phỏng vấn hiệu quả. Bài viết này giúp bạn dễ nhớ và áp dụng khi phỏng vấn.


📋 Tổng Quan Quy Trình Phỏng Vấn

┌─────────────────────────────────────────────────────────────┐
│                     INTERVIEW FLOW                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   PREPARATION ──► QUESTION BANK ──► INTERVIEW ──► EVALUATE │
│                                                             │
└─────────────────────────────────────────────────────────────┘

🎯 Phase 1: Chuẩn Bị Trước Phỏng Vấn

┌───────────────────────────────────────┐
│          PREPARATION PHASE            │
├───────────────────────────────────────┤
│                                       │
│  ┌─────────────────────────────────┐  │
│  │     📚 QUESTION BANK            │  │
│  ├─────────────────────────────────┤  │
│  │ 1. Angular (Core focus)    40%  │  │
│  │ 2. JavaScript              15%  │  │
│  │ 3. HTML / CSS               5%  │  │
│  │ 4. Real-world problems     30%  │  │
│  │ 5. Behavioral questions    10%  │  │
│  └─────────────────────────────────┘  │
│                                       │
└───────────────────────────────────────┘

🔄 Phase 2: Cấu Trúc Buổi Phỏng Vấn

┌────────────────────────────────────────────────────────────────┐
│                    INTERVIEW STRUCTURE                          │
│                      (60 phút chuẩn)                           │
└────────────────────────────────────────────────────────────────┘
                              │
        ┌─────────────────────┼─────────────────────┐
        │                     │                     │
        ▼                     ▼                     ▼
┌───────────────┐    ┌───────────────┐    ┌───────────────┐
│  WARM-UP      │    │   TECHNICAL   │    │  BEHAVIORAL   │
│  (5-10 phút)  │    │  (35-40 phút) │    │  (10-15 phút) │
├───────────────┤    ├───────────────┤    ├───────────────┤
│ • Background  │    │ • Angular     │    │ • Team work   │
│ • Experience  │    │ • JavaScript  │    │ • Conflict    │
│ • Project     │    │ • Performance │    │ • Pressure    │
└───────────────┘    │ • Real cases  │    └───────────────┘
                     └───────────────┘

📊 Chi Tiết Từng Giai Đoạn

Stage 1: Warm-up (5-10 phút)

┌─────────────────────────────────────────┐
│            🤝 WARM-UP                   │
├─────────────────────────────────────────┤
│                                         │
│  "Giới thiệu về bản thân và project     │
│   gần đây nhất bạn làm?"                │
│                                         │
│  Mục tiêu:                              │
│  ├── Tạo không khí thoải mái           │
│  ├── Hiểu context ứng viên             │
│  └── Định hướng câu hỏi tiếp theo      │
│                                         │
└─────────────────────────────────────────┘

Stage 2: Core Technical - Angular Focus (20-25 phút)

┌─────────────────────────────────────────────────────────────┐
│                 🔧 ANGULAR DEEP DIVE                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  Change     │  │   RxJS      │  │ Performance │         │
│  │  Detection  │  │   Mastery   │  │   Tuning    │         │
│  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘         │
│         │                │                │                 │
│         └────────────────┼────────────────┘                 │
│                          │                                  │
│                          ▼                                  │
│              ┌───────────────────────┐                      │
│              │    Architecture &     │                      │
│              │   State Management    │                      │
│              └───────────────────────┘                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Câu hỏi mẫu:

Topic Câu hỏi
Change Detection Khi nào bạn dùng OnPush strategy? Project bạn áp dụng thế nào?
RxJS Tại sao chọn switchMap thay vì mergeMap trong case cụ thể?
Performance Angular app bị slow, bạn debug như thế nào?
Architecture Project ~200 components, bạn tổ chức folder structure ra sao?

Stage 3: Fundamental Knowledge (10 phút)

┌─────────────────────────────────────────┐
│       📖 FUNDAMENTALS                   │
│       (Hỏi vừa phải - không đào sâu)   │
├─────────────────────────────────────────┤
│                                         │
│  JavaScript                             │
│  ├── Closure, Hoisting                 │
│  ├── Event Loop                        │
│  └── Async/Await                       │
│                                         │
│  HTML/CSS                               │
│  ├── Semantic HTML                     │
│  ├── CSS Specificity                   │
│  └── Responsive Design                 │
│                                         │
│  Browser                                │
│  ├── DOM manipulation                  │
│  └── Performance metrics               │
│                                         │
└─────────────────────────────────────────┘

Stage 4: Scenario Questions (10-15 phút)

┌─────────────────────────────────────────────────────────────┐
│              🎭 REAL-WORLD SCENARIOS                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Scenario 1: Production Bug                                 │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ "Production bị bug nhưng không reproduce được       │   │
│  │  trên local. Bạn xử lý như thế nào?"               │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  Scenario 2: Performance Crisis                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ "App load mất 8 giây, khách hàng complain.          │   │
│  │  Bạn approach như thế nào?"                        │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  Scenario 3: Legacy Code                                    │
│  ┌─────────────────────────────────────────────────────┐   │
│  │ "Join project có codebase 5 năm tuổi, không docs.  │   │
│  │  Bạn bắt đầu từ đâu?"                              │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Stage 5: Behavioral Questions (10-15 phút)

┌─────────────────────────────────────────────────────────────┐
│              💬 BEHAVIORAL ASSESSMENT                       │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Team Conflict                                              │
│  ├── "Review code thấy code teammate rất tệ,               │
│  │    bạn xử lý thế nào?"                                  │
│  │                                                          │
│  Client Conflict                                            │
│  ├── "Client đòi feature impossible trong deadline,        │
│  │    bạn communicate ra sao?"                             │
│  │                                                          │
│  Deadline Pressure                                          │
│  └── "2 ngày nữa release nhưng còn bug critical,           │
│       bạn làm gì?"                                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

🧠 Mindset Khi Phỏng Vấn Senior

┌─────────────────────────────────────────────────────────────┐
│                    SENIOR INTERVIEW MINDSET                 │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│         ❌ DON'T                    ✅ DO                   │
│         ──────────                  ─────                   │
│                                                             │
│    ┌─────────────────┐         ┌─────────────────┐         │
│    │  TEST MEMORY    │   ──►   │ TEST EXPERIENCE │         │
│    └─────────────────┘         └─────────────────┘         │
│                                                             │
│    ┌─────────────────┐         ┌─────────────────┐         │
│    │ ASK DEFINITIONS │   ──►   │ ASK "WHY/HOW"   │         │
│    └─────────────────┘         └─────────────────┘         │
│                                                             │
│    ┌─────────────────┐         ┌─────────────────┐         │
│    │ THEORETICAL     │   ──►   │ REAL SITUATIONS │         │
│    └─────────────────┘         └─────────────────┘         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Ví dụ So Sánh:

❌ CÂU HỎI TỆ:
┌─────────────────────────────────────────┐
│ "Angular lifecycle có bao nhiêu hook?"  │
└─────────────────────────────────────────┘
         │
         │  Chỉ test trí nhớ, Google 2 giây là có
         │
         ▼
✅ CÂU HỎI TỐT:
┌─────────────────────────────────────────────────────────┐
│ "Khi nào bạn dùng ngOnChanges thay vì ngOnInit?        │
│  Trong project bạn từng gặp case nào phải dùng nó?"   │
└─────────────────────────────────────────────────────────┘
         │
         │  Test kinh nghiệm thực tế, khó fake
         │
         ▼

📈 Công Thức Phân Bổ Câu Hỏi

┌─────────────────────────────────────────────────────────────┐
│              QUESTION DISTRIBUTION                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ████████████████████████████████████████  40%  Angular    │
│  ██████████████████████████████            30%  Real-world │
│  ████████████████                          20%  Fundamentals│
│  ████████                                  10%  Behavioral  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

🔍 Evaluation Framework

Các Tín Hiệu Cần Quan Sát

┌─────────────────────────────────────────────────────────────┐
│                 CANDIDATE SIGNALS                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   Signal          │  Observe                                │
│   ────────────────┼───────────────────────────────────────  │
│   Knowledge       │  Hiểu sâu hay chỉ bề mặt?              │
│   Thinking        │  Logic có clear không?                  │
│   Communication   │  Giải thích có rõ ràng không?          │
│   Confidence      │  Tự tin hay lúng túng?                  │
│   Attitude        │  Có toxic signals không?                │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Scorecard Mẫu

┌─────────────────────────────────────────────────────────────┐
│                    EVALUATION SCORECARD                     │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Criteria              │ 1 │ 2 │ 3 │ 4 │ 5 │  Weight       │
│  ──────────────────────┼───┼───┼───┼───┼───┼────────────── │
│  Angular Knowledge     │   │   │   │   │   │    30%        │
│  Problem Solving       │   │   │   │   │   │    25%        │
│  Communication         │   │   │   │   │   │    20%        │
│  Real Experience       │   │   │   │   │   │    15%        │
│  Cultural Fit          │   │   │   │   │   │    10%        │
│  ──────────────────────┼───┼───┼───┼───┼───┼────────────── │
│  TOTAL                 │               │   │   100%        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

🤖 Mẹo Phát Hiện AI-Assisted Interview

┌─────────────────────────────────────────────────────────────┐
│              DETECT AI-ASSISTED CANDIDATES                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  AI trả lời tốt:          Experience khó fake:             │
│  ┌───────────────┐        ┌───────────────────────────┐    │
│  │ WHAT is X?    │        │ WHY did you choose X?     │    │
│  │ DEFINITION    │        │ HOW did you debug it?     │    │
│  │ LIST features │        │ WHAT HAPPENED when...?    │    │
│  └───────────────┘        └───────────────────────────┘    │
│         │                            │                      │
│         ▼                            ▼                      │
│   Dễ Google/AI             Cần kinh nghiệm thực tế         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Ví dụ câu hỏi anti-AI:

Standard Question:
┌─────────────────────────────────────────┐
│ "switchMap và mergeMap khác nhau gì?"   │
└─────────────────────────────────────────┘
         │
         │  AI answer perfectly ✓
         │
         ▼
Follow-up Question:
┌─────────────────────────────────────────────────────────────┐
│ "Tại sao trong project ABC bạn chọn switchMap?             │
│  Có case nào switchMap gây bug không?                      │
│  Bạn xử lý thế nào?"                                       │
└─────────────────────────────────────────────────────────────┘
         │
         │  Cần real experience ✗ (khó fake)
         │
         ▼

📝 Sample Questions Bank

Angular Deep Knowledge

# Question Purpose
1 Giải thích Change Detection trong Angular hoạt động thế nào? Core understanding
2 Khi nào dùng OnPush? Trade-offs là gì? Performance awareness
3 Subject vs BehaviorSubject vs ReplaySubject - khi nào dùng gì? RxJS mastery
4 Lazy loading modules có ảnh hưởng gì đến bundle size? Optimization
5 NgZone là gì? Khi nào cần runOutsideAngular? Advanced concept

Real Situation Questions

# Scenario Đánh giá
1 Production bug không reproduce được local Debug methodology
2 Memory leak trong SPA Performance debugging
3 API response 5s, UX bị ảnh hưởng UX problem solving
4 Team member push code không qua review Process handling
5 Client thay đổi requirement liên tục Stakeholder management

🎯 Kết Luận

┌─────────────────────────────────────────────────────────────┐
│                    KEY TAKEAWAYS                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. Test EXPERIENCE, không test MEMORY                      │
│                                                             │
│  2. Hỏi WHY/HOW, không hỏi WHAT                            │
│                                                             │
│  3. Real scenarios > Theoretical questions                  │
│                                                             │
│  4. Observe signals: thinking, communication, attitude      │
│                                                             │
│  5. Follow-up questions để detect fake/AI answers          │
│                                                             │
└─────────────────────────────────────────────────────────────┘