Câu hỏi phỏng vấn Angular cần chuẩn bị

Bởi Aaron Cao · Cập nhật

Câu hỏi phỏng vấn Angular cần chuẩn bị
Trước tiên hãy chuẩn bị cho change detection: điều gì kích hoạt một lần kiểm tra, OnPush thay đổi điều gì, và signals phù hợp ở đâu. Tiếp theo là dependency injection, chọn operator RxJS, và dọn dẹp subscription. Hầu hết các vòng phỏng vấn còn thêm một bài tập trực tiếp, thường là tìm kiếm gợi ý tự động được xây dựng bằng service, debounceTime, và switchMap.

Trước tiên hãy chuẩn bị cho change detection: điều gì kích hoạt một lần kiểm tra, OnPush thay đổi điều gì, và signals phù hợp ở đâu. Tiếp theo là dependency injection, chọn operator RxJS, và dọn dẹp subscription. Hầu hết các vòng phỏng vấn còn thêm một bài tập trực tiếp, thường là tìm kiếm gợi ý tự động được xây dựng bằng service, debounceTime, và switchMap.

Những khái niệm Angular nào hay bị hỏi nhất?

Bề mặt API của Angular rất rộng, và các danh sách câu hỏi được công bố coi mọi decorator có khả năng xuất hiện như nhau. Thực tế không phải vậy. Phần này bao quát những mảng thực sự quyết định phần lớn các vòng phỏng vấn, để việc luyện tập của bạn khớp với phân bố thực tế. Bốn nhóm chiếm ưu thế:

  • Change detection: điều gì kích hoạt kiểm tra, Zone.js vá các API bất đồng bộ như thế nào, OnPush thay đổi điều gì, và signals giúp Angular bỏ qua công việc ra sao.
  • Dependency injection: injector phân cấp, providedIn, injection token, và hàm inject() so với tham số constructor.
  • RxJS: observable so với promise, chọn đúng operator, và dọn dẹp subscription trước khi component bị hủy.
  • Kiến trúc component: standalone component, input và output, content projection, và lifecycle hook.

Ý thức về phiên bản ở đây quan trọng hơn hầu hết các vòng phỏng vấn framework khác, vì Angular đã đổi hướng. Standalone component, các khối control flow tích hợp @if@for, deferrable view, và signals đều xuất hiện trong các phiên bản lớn gần đây, nên người phỏng vấn thường hỏi bạn sẽ viết thế nào ngày nay so với cách một codebase cũ dùng. Biết cả hai, và giải thích được vì sao framework thay đổi, tạo ấn tượng tốt hơn là chọn một phía.

Câu hỏi RxJS và signals đi sâu đến mức nào?

Sâu hơn nhiều so với tên các operator. Câu hỏi RxJS phân biệt trình độ là chọn operator làm phẳng nào phù hợp: switchMap hủy request nội bộ trước đó nên hợp với gợi ý tự động, mergeMap chạy tất cả song song, concatMap giữ nguyên thứ tự, và exhaustMap bỏ qua sự kiện mới khi một sự kiện vẫn đang xử lý, đó là lý do nó hợp với nút submit. Sau đó người phỏng vấn hỏi về rò rỉ: điều gì xảy ra với một subscription thủ công khi component bị hủy, và vì sao async pipe hay takeUntilDestroyed loại bỏ vấn đề này.

Câu hỏi về signals mới hơn và thường bắt đầu từ động lực thay vì API. Hãy chuẩn bị giải thích signal là gì, computed suy ra giá trị từ đó như thế nào, effect dùng để làm gì, và vì sao signals cho Angular một cách biết điều gì đã thay đổi chi tiết hơn so với việc kiểm tra lại cả cây component. Một câu trả lời tốt sẽ kết nối hai chủ đề: signals và OnPush đều giảm khối lượng công việc của change detection, nhưng signals làm điều đó bằng cách theo dõi các lượt đọc thay vì thu hẹp thời điểm chạy kiểm tra.

Người phỏng vấn không mong bạn đã đưa mọi tính năng mới nhất vào sản phẩm thực tế. Họ mong bạn nói rõ mình làm việc gần nhất với phiên bản nào, và lập luận rõ ràng về phần còn lại.

Nên chuẩn bị cho những bài tập lập trình trực tiếp nào?

Hầu hết các vòng phỏng vấn Angular đều có phần xây dựng thứ gì đó nhỏ trong khi người phỏng vấn quan sát. Các bài tập lặp lại khá ổn định giữa các công ty:

  • Gọi một API từ service và hiển thị kết quả bằng async pipe.
  • Xây dựng tìm kiếm gợi ý tự động với debounceTime, distinctUntilChanged, và switchMap.
  • Viết một reactive form với custom validator và trạng thái lỗi hiển thị được.
  • Truyền dữ liệu giữa component cha và con, sau đó đưa nó lên một service.
  • Thêm một route với component tải chậm (lazy loaded) và một guard.

Ví dụ, một kỹ sư front-end phỏng vấn cho vị trí sản phẩm cấp trung có thể xây dựng phần gợi ý tự động, rồi bị hỏi tiếp điều gì xảy ra khi các phản hồi đến không đúng thứ tự, cách hiển thị trạng thái loading, và điều gì nên xảy ra khi người dùng xóa input. Những câu hỏi mở rộng đó mới là điểm quyết định vòng phỏng vấn, vì vậy hãy luyện các câu hỏi tiếp theo thay vì chỉ luyện con đường suôn sẻ. Các bộ chủ đề liền kề mà vòng phỏng vấn Angular vẫn thường mở đầu, bao gồm nền tảng JavaScript và TypeScript thuần, nằm trong trung tâm ngân hàng câu hỏi.

Luyện tập thế nào để áp dụng được vào vòng phỏng vấn thật?

Đọc một danh sách câu hỏi giúp xây dựng khả năng nhận diện, không phải khả năng nhớ lại, trong khi vòng phỏng vấn kiểm tra khả năng nhớ lại khi có người quan sát. Cách khắc phục là luyện tập lặp lại đúng hình thức của vòng phỏng vấn: xây dựng các bài tập tiêu chuẩn từ một dự án trống, vừa gõ vừa nói to các quyết định về change detection và subscription, và hấp thụ các lần bị ngắt lời mà không mất mạch suy nghĩ. Thực hiện cả bộ câu hỏi như một buổi diễn tập nói, từng câu một kèm câu hỏi tiếp theo, đó chính là mục đích của luyện tập phỏng vấn giả lập.

Có một giới hạn đáng nói rõ: các vòng phỏng vấn trực tiếp của Angular gần như luôn diễn ra trong một trình soạn thảo chia sẻ hoặc với màn hình của bạn hiển thị, và mọi thứ trên màn hình đó đều được người phỏng vấn nhìn thấy. Trợ lý phù hợp trong lúc chuẩn bị và trong các vòng phỏng vấn dựa trên hội thoại, không phải trên màn hình chia sẻ. Định dạng nào cho phép điều gì được nêu trong các loại phỏng vấn.

Câu hỏi thường gặp

Tôi có còn cần biết NgModules không?

Ở mức đọc hiểu thì có. Rất nhiều Angular trong sản xuất vẫn chạy trên NgModules, vì vậy hãy chuẩn bị cho câu hỏi về việc một module khai báo những gì và providedIn thay thế phần lớn mảng provider ra sao. Các câu hỏi về code mới được hỏi theo standalone component, vốn là mặc định ở các phiên bản gần đây.

AngularJS có giống Angular không?

Không, và người phỏng vấn đôi khi kiểm tra điều này. AngularJS là dòng 1.x với scope, chu kỳ digest, và controller. Angular từ phiên bản 2 trở đi là một framework riêng biệt được xây trên TypeScript và component. Nếu mô tả công việc ghi AngularJS, hãy xác nhận họ đang nói đến cái nào trước khi chuẩn bị.

Tôi cần bao nhiêu RxJS nếu nhóm dùng signals?

Vẫn cần rất nhiều. Signals bao quát tốt state của component, nhưng các lệnh gọi HTTP, sự kiện router, và luồng giá trị form vẫn là observable, nên việc chọn operator và dọn dẹp vẫn liên tục xuất hiện. Các nhóm kết hợp cả hai, và giải thích được cái nào phù hợp ở đâu là một câu hỏi senior thường gặp.

Người phỏng vấn có hỏi về testing không?

Thường là hỏi về chiến lược hơn là ghi nhớ API. Hãy chuẩn bị nói về những gì bạn sẽ test ở mức component so với end to end, TestBed thiết lập một component như thế nào, và bạn sẽ giả lập (fake) một service ra sao. Nêu được sự đánh đổi quan trọng hơn là đọc thuộc lòng một matcher.

Tôi nên có khả năng thảo luận về bao nhiêu phiên bản Angular?

Phiên bản bạn từng làm việc, cộng với những gì đã thay đổi từ đó. Người phỏng vấn hỏi về standalone component, các khối control flow, và signals vì những câu trả lời đó cho thấy bạn cập nhật đến đâu. Nói rõ phiên bản gần nhất bạn triển khai và lập luận về phần còn lại là một câu trả lời đầy đủ.

Câu hỏi liên quan

← Thêm về Câu hỏi phỏng vấn theo vai trò & chủ đề