40 câu hỏi và câu trả lời phỏng vấn hàng đầu dành cho lập trình viên Front-end (2026)

Chuẩn bị cho buổi phỏng vấn vị trí lập trình viên front-end nghĩa là dự đoán những thách thức và thể hiện các kỹ năng thực tế. Các câu hỏi phỏng vấn lập trình viên front-end tập trung vào khả năng đánh giá kỹ thuật, tư duy thiết kế và sự trưởng thành trong giải quyết vấn đề, điều cần thiết cho các nhóm làm việc hiện đại.
Chương trình mở ra những con đường phát triển trong các hệ sinh thái web đang ngày càng mở rộng, nơi kinh nghiệm thực tiễn, kiến thức chuyên môn và khả năng phân tích được chuyển hóa thành tác động thực tế. Từ những người mới ra trường đến các chuyên gia cấp cao, các dự án thực tế giúp mài giũa kỹ năng, hỗ trợ các nhóm, hướng dẫn các nhà quản lý và giúp các ứng viên tự tin vượt qua các buổi phỏng vấn cơ bản, nâng cao và kỹ thuật nhờ kinh nghiệm làm việc nhiều năm trong lĩnh vực này trên toàn cầu. Đọc thêm ...
👉 Tải xuống PDF miễn phí: Câu hỏi và câu trả lời phỏng vấn vị trí Lập trình viên Front-end
Những câu hỏi và câu trả lời phỏng vấn hàng đầu dành cho lập trình viên Front-end
1) Vai trò và trách nhiệm chính của một lập trình viên Front-End là gì?
Lập trình viên giao diện người dùng (front-end developer) chịu trách nhiệm về... triển khai các phần trực quan và tương tác Họ là người thiết kế trang web hoặc ứng dụng web mà người dùng tương tác trực tiếp. Họ đóng vai trò cầu nối giữa thiết kế và chức năng thực thi bằng cách viết mã sạch, hiệu quả bằng HTML, CSS và các ngôn ngữ lập trình khác. JavaHọ đảm bảo các trang web có khả năng thích ứng, dễ truy cập, tương thích với nhiều trình duyệt và được tối ưu hóa hiệu năng. Họ cũng hợp tác với các nhà thiết kế, lập trình viên backend và nhóm UX để mang đến trải nghiệm người dùng liền mạch.
Các trách nhiệm chính bao gồm:
- Xây dựng giao diện người dùng tương thích.
- Triển khai các tính năng tương tác bằng cách sử dụng JavaKịch bản.
- Tối ưu hóa tốc độ tải và hiệu suất.
- Đảm bảo khả năng tương thích đa trình duyệt.
- Viết mã nguồn có thể kiểm thử và dễ bảo trì.
Ví dụ: Việc xây dựng một biểu mẫu xác thực dữ liệu người dùng nhập vào theo thời gian thực và hiển thị lỗi mà không cần làm mới trang thể hiện cả hai khía cạnh trên. JavaKỹ năng viết kịch bản và tập trung vào trải nghiệm người dùng (UX).
2) Giải thích sự khác biệt giữa HTML, CSS và... JavaKịch bản.
HTML, CSS và JavaKịch bản là các khối xây dựng của phát triển giao diện người dùngMỗi thành phần phục vụ các mục đích riêng biệt trong việc tạo trang web.
- HTML (Ngôn ngữ đánh dấu siêu văn bản): Nó xác định cấu trúc và nội dung của một trang web. Các thẻ như
<header>,<p>,<ul>Sắp xếp văn bản, hình ảnh, liên kết và các phần. - CSS (Bảng kiểu xếp tầng): Nó mô tả trình bày và bố cục — Cách các yếu tố nên trông như thế nào, bao gồm màu sắc, phông chữ, khoảng cách và vị trí.
- JavaKịch bản: Nó là một ngôn ngữ lập trình Nó bổ sung thêm hành vi và tính tương tác cho các trang web — xử lý các cập nhật động, sự kiện và các hoạt động bất đồng bộ.
Ví dụ về sự khác biệt trong thực tiễn:
| Công nghệ | Mục đích | Sử dụng điển hình |
|---|---|---|
| HTML | Structure | Tiêu đề trang, văn bản, danh sách |
| CSS | Phong cách | Bố cục, màu sắc, khoảng cách |
| JavaScript | Hành vi | Thanh trượt, xác thực biểu mẫu |
3) CSS là gì? Box Mô hình và tại sao nó lại quan trọng?
CSS Box Mẫu Mô tả cách các phần tử được định kích thước và phân bố khoảng cách trong một trang web. Đây là yếu tố cơ bản trong thiết kế bố cục và bao gồm bốn thành phần: nội dung, đệm, biên giớivà tỷ suất lợi nhuận.
- Nội dung: Khu vực chính nơi văn bản và hình ảnh xuất hiện.
- Đệm: Khoảng cách giữa nội dung và đường viền.
- Biên giới: Viền xung quanh phần đệm và nội dung.
- Margin: Lớp ngoài cùng, ngăn cách các nguyên tố với nhau.
Mô hình này rất quan trọng vì nó ảnh hưởng đến cách các phần tử chiếm không gian và tương tác với nhau. Hiểu rõ mô hình này giúp xây dựng bố cục chính xác và tránh các vấn đề về bố cục như nội dung tràn ra ngoài hoặc khoảng cách giữa các phần tử không chính xác.
4) Thiết kế web đáp ứng (responsive web design) hoạt động như thế nào? Hãy cung cấp các ví dụ về kỹ thuật.
Thiết kế web đáp ứng đảm bảo trang web tự động điều chỉnh mượt mà trên các kích thước màn hình khác nhau — từ điện thoại di động đến máy tính để bàn — bằng cách sử dụng bố cục linh hoạt, hình ảnh linh hoạt và truy vấn phương tiện.
Các kỹ thuật bao gồm:
- Truy vấn phương tiện CSS: Áp dụng kiểu dáng dựa trên chiều rộng khung nhìn.
- Đơn vị linh hoạt: Sử dụng
em,rem,%thay vì các điểm ảnh cố định. - Hình ảnh phản hồi: Sử dụng
<picture>vàsrcsetcho các độ phân giải khác nhau.
Ví dụ: Thanh điều hướng thu gọn thành menu hamburger trên màn hình nhỏ sử dụng các truy vấn phương tiện để thay đổi bố cục và ẩn/hiện các phần tử.
5) Phân biệt giữa các phần tử khối, nội tuyến và nội tuyến-khối trong HTML/CSS.
Các hành vi hiển thị này kiểm soát luồng bố cục phần tử.
| Kiểu | Bắt đầu dòng mới | Chiều rộng / Chiều cao | Các ví dụ chung |
|---|---|---|---|
| Chặn | Có | Chấp nhận chiều rộng/chiều cao | <div>, <p> |
| Nội tuyến | Không | Chiều rộng/chiều cao bị bỏ qua | <span>, <a> |
| Khối nội tuyến | Không | Chiều rộng/chiều cao được chấp nhận | <img>, <input> |
Giải thích: Các phần tử khối được xếp chồng lên nhau theo chiều dọc; các phần tử nội tuyến được sắp xếp theo chiều ngang; các phần tử nội tuyến-khối vẫn giữ nguyên bố cục nội tuyến nhưng cho phép kiểm soát khoảng cách.
6) HTML ngữ nghĩa là gì và tại sao nó lại quan trọng?
HTML ngữ nghĩa sử dụng các phần tử HTML mà truyền đạt ý nghĩa và cấu trúc, giúp nội dung dễ hiểu hơn đối với người dùng, công cụ tìm kiếm và các công nghệ hỗ trợ. Ví dụ bao gồm: <header>, <article>, <nav>và <footer>.
Lợi ích:
- Cải thiện khả năng tiếp cận và hỗ trợ trình đọc màn hình.
- Tăng SEO bằng cách làm rõ cấu trúc trang.
- Tăng cường khả năng bảo trì và tính rõ ràng cho các nhà phát triển.
Ví dụ: Sử dụng <nav> Việc sử dụng các liên kết điều hướng có ý nghĩa hơn so với việc sử dụng các liên kết chung chung. <div> Các thẻ. Trình đọc màn hình diễn giải chúng một cách chính xác.
7) Sự khác biệt giữa == và === là gì trong JavaKịch bản?
In JavaKịch bản, == thực hiện kiểu ép buộc, chuyển đổi giá trị trước khi so sánh, trong khi === kiểm tra bình đẳng nghiêm ngặt không bị ép buộc.
==Ví dụ:"5" == 5Trả vềtruebởi vì JavaĐoạn mã này chuyển đổi chuỗi ký tự thành số.===Ví dụ:"5" === 5Trả vềfalseVì các loại khác nhau.
bình đẳng nghiêm ngặt Phương pháp này thường được ưa chuộng trong các cuộc phỏng vấn và trong mã lập trình chuyên nghiệp vì nó tránh được các chuyển đổi kiểu dữ liệu không thể đoán trước.
8) Bộ tiền xử lý CSS là gì và tại sao chúng ta lại sử dụng chúng?
Các bộ tiền xử lý CSS như SASS or ÍT HƠN Mở rộng CSS thuần túy với các tính năng như các biến, lồng nhau, mixin và hàm, cho phép tạo ra các bảng định kiểu có tính mô-đun cao hơn và dễ bảo trì hơn.
Lợi ích bao gồm:
- Các thành phần tạo kiểu có thể tái sử dụng (mixins).
- Viết mã sạch hơn thông qua các biến (ví dụ: bảng màu).
- Dễ dàng bảo trì hơn đối với các bảng định kiểu lớn.
Ví dụ: Việc sử dụng biến SASS giúp giảm sự trùng lặp — nếu màu sắc chủ đạo của thương hiệu thay đổi, chỉ cần cập nhật một biến duy nhất.
9) Giải thích độ ưu tiên của CSS và thứ tự ưu tiên.
Độ ưu tiên của CSS xác định quy tắc nào được áp dụng Khi nhiều quy tắc nhắm mục tiêu vào cùng một phần tử. Độ ưu tiên được chấm điểm dựa trên các bộ chọn:
- bộ chọn ID (
#idcó trọng lượng cao hơn. - Bộ chọn lớp (
.class) sẽ đến tiếp theo. - Bộ chọn phần tử (
div,h1) mang ít nhất. Các kiểu nội tuyến sẽ ghi đè lên những kiểu này trừ khi!importantđược sử dụng (sử dụng tiết kiệm).
Ví dụ: Một quy tắc với #header .nav a sẽ ghi đè nav a vì ID làm tăng tính đặc hiệu.
10) Sự khác biệt giữa localStorage, sessionStorage và cookies là gì?
Đây là các cơ chế lưu trữ của trình duyệt với phạm vi và thời gian tồn tại khác nhau.
| Loại lưu trữ | Lifetime | Giới hạn kích thước | Có thể truy cập bởi |
|---|---|---|---|
| Cookies | Thời hạn có thể cấu hình | ~4KB | Máy chủ & máy khách |
| lưu trữ cục bộ | Khăng khăng | ~5MB+ | Chỉ dành cho khách hàng |
| phiênStorage | Chỉ phiên tab | ~ 5 MB | Chỉ dành cho khách hàng |
Ví dụ về trường hợp sử dụng:
- Cookies: Mã thông báo xác thực phiên.
- localStorage: Lưu cài đặt người dùng.
- sessionStorage: Dữ liệu chỉ có ý nghĩa khi tab đang mở.
11) Mô hình đối tượng tài liệu (DOM) là gì và nó hoạt động như thế nào?
Mô hình đối tượng tài liệu (DOM) là một giao diện lập trình biểu diễn một trang web dưới dạng cấu trúc cây trong đó mỗi nút tương ứng với một phần tử, thuộc tính hoặc nút văn bản. JavaĐoạn mã này tương tác với DOM để cập nhật động nội dung, kiểu dáng và cấu trúc mà không cần tải lại trang.
Ví dụ, khi người dùng nhấp vào một nút, JavaScript có thể sửa đổi DOM để hiển thị cửa sổ bật lên hoặc thay đổi văn bản. DOM cho phép các nhà phát triển tạo, xóa hoặc sửa đổi các phần tử trong thời gian thực.
Ví dụ:
document.getElementById("title").textContent = "Hello, World!";
Thao tác này thay thế nội dung của một phần tử có ID là “title”.
Bài học chính: Thao tác DOM tạo nên sức mạnh tương tác trong các ứng dụng web hiện đại.
12) Giải thích hiện tượng nổi sự kiện và hiện tượng bắt sự kiện trong JavaKịch bản.
JavaTập lệnh xử lý các hành động của người dùng bằng cách sử dụng... Mô hình lan truyền sự kiện, định nghĩa cách các sự kiện di chuyển trong DOM. Có hai giai đoạn:
- Giai đoạn bắt giữ: Sự kiện này diễn ra ở nhiều nơi. Từ gốc rễ xuống đến phần tử đích.
- Bubblgiai đoạn ing: Sự kiện này gây ra sự cố. Từ mục tiêu đi lên trở lại gốc.
Theo mặc định, các sự kiện sẽ lan truyền trừ khi capture: true được sử dụng. Các nhà phát triển có thể kiểm soát sự lan truyền bằng event.stopPropagation() or event.stopImmediatePropagation().
Ví dụ:
document.querySelector("button").addEventListener("click", handleClick, true);
Điều này sẽ lắng nghe trong suốt quá trình... giai đoạn bắt giữ.
Mẹo: Hiểu rõ luồng sự kiện là điều vô cùng quan trọng để gỡ lỗi các trình xử lý sự kiện lồng nhau và tối ưu hóa tương tác giao diện người dùng.
13) Đóng là gì trong JavaKịch bản? Hãy giải thích bằng một ví dụ.
A đóng cửa Closure là một hàm duy trì quyền truy cập vào các biến trong phạm vi bên ngoài của nó, ngay cả sau khi phạm vi đó đã kết thúc thực thi. Closure cho phép bảo mật dữ liệu và các hàm có trạng thái.
Ví dụ:
function counter() {
let count = 0;
return function() {
count++;
return count;
};
}
const increment = counter();
console.log(increment()); // 1
console.log(increment()); // 2
Ở đây, increment duy trì quyền truy cập vào count ngay cả sau khi counter() đã trở lại.
Các loại nắp đậy được sử dụng rộng rãi trong các mô-đun, trình xử lý sự kiện và React hooks (useState) Để bảo toàn trạng thái giữa các lần thực thi.
14) Phân biệt giữa var, let và const trong JavaKịch bản.
| Tính năng | var |
let |
const |
|---|---|---|---|
| Phạm vi | Chức năng | Chặn | Chặn |
| Tuyên bố lại | Được phép | Không được phép | Không được phép |
| Điều chuyển | Được phép | Được phép | Không được phép |
| tời kéo | Có (không xác định) | Có (TDZ) | Có (TDZ) |
var có phạm vi hàm và được nâng lên với giá trị không xác định, trong khi đó let và const đang phạm vi khối và cư trú tại Vùng chết tạm thời (TDZ) cho đến khi khởi tạo.
Sử dụng let và const Phương pháp này được ưa chuộng vì giúp mã nguồn sạch hơn và an toàn hơn, đặc biệt là trong cú pháp ES6+ hiện đại.
15) Promises là gì và chúng khác với callbacks như thế nào?
A Promise Nó thể hiện một giá trị có thể có sẵn ngay bây giờ, sau này hoặc không bao giờ. Nó đơn giản hóa các hoạt động bất đồng bộ và giúp tránh "vòng xoáy gọi lại".
Các tiểu bang hứa hẹn:
Pending→ Thao tác chưa hoàn tất.Fulfilled→ Thao tác thành công.Rejected→ Thao tác thất bại.
Ví dụ:
fetch('/data.json')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
Khác với các hàm gọi lại (callback), Promises cung cấp cú pháp gọn gàng hơn và khả năng xử lý lỗi tốt hơn thông qua... .catch()Chúng cũng tích hợp với async/await, giúp đơn giản hóa hơn nữa quy trình làm việc bất đồng bộ.
16) Async/await cải thiện lập trình bất đồng bộ như thế nào?
async/await Đây là cú pháp rút gọn được xây dựng trên Promises, cho phép mã bất đồng bộ trông và hoạt động giống như mã đồng bộ. Nó cải thiện khả năng đọc hiểu và xử lý lỗi.
Ví dụ:
async function getUser() {
try {
const response = await fetch('/api/user');
const user = await response.json();
console.log(user);
} catch (error) {
console.error(error);
}
}
Ưu điểm:
- Trình tự mạch lạc, dễ đọc.
- Xử lý lỗi đơn giản hóa bằng cách sử dụng
try...catch. - Giảm thiểu lồng nhau
.then()chuỗi.
Trong các cuộc phỏng vấn, đề cập đến Cách async/await cải thiện việc gỡ lỗi và giảm sự lồng ghép các hàm gọi lại thể hiện sự hiểu biết sâu sắc về hiện đại JavaKịch bản.
17) Giải thích sự khác biệt giữa đồng bộ và không đồng bộ. JavaKịch bản.
| Kiểu | Mô tả Chi tiết | Ví dụ |
|---|---|---|
| Syncto lớn | Mã lệnh được thực thi từng dòng một; tác vụ tiếp theo sẽ chờ tác vụ trước đó hoàn thành. | Lặp qua dữ liệu |
| không đồng bộ | Mã lệnh chạy độc lập; không gây tắc nghẽn. | Lấy API, đặt thời gian chờ |
Giải thích: JavaScript này chạy trên một luồng duy nhất, do đó các thao tác bất đồng bộ (như gọi API) được xử lý bằng cách sử dụng... Vòng lặp sự kiện và Hàng đợi gọi lại để tránh làm tắc nghẽn luồng chính.
Ví dụ, trong khi chờ dữ liệu từ API, các tác vụ giao diện người dùng khác (như hoạt ảnh) vẫn tiếp tục chạy mượt mà.
18) Ứng dụng một trang (SPA) là gì? Hãy giải thích những lợi ích và hạn chế của chúng.
SPA tải một trang HTML đơn và tự động cập nhật nội dung khi người dùng tương tác, mà không cần tải lại trang. Các framework như React, Angular và Vue Chúng thường được sử dụng để xây dựng các ứng dụng SPA.
Ưu điểm:
- Điều hướng nhanh hơn và trải nghiệm người dùng được cải thiện.
- Giảm tải cho máy chủ.
- Chuyển đổi và định tuyến liền mạch.
Nhược điểm:
- SEO kém (nếu không phải là SSR).
- Thời gian tải ban đầu có thể khá lâu.
- Xử lý lịch sử duyệt web phức tạp.
| Yếu tố | Lợi ích | Hạn chế |
|---|---|---|
| SEO | Yêu cầu SSR | Lập chỉ mục khó hơn |
| HIỆU QUẢ | Nhanh chóng sau khi tải | Tốc độ tải ban đầu chậm hơn |
| phức tạp | Modular | Khó gỡ lỗi hơn |
19) Web Components là gì và tại sao chúng lại quan trọng?
Web Components là các phần tử được đóng gói, có thể tái sử dụng và dùng được trong nhiều dự án và framework khác nhau. Chúng dựa trên... bốn thông số kỹ thuật cốt lõi:
- Yếu tố tùy chỉnh – Định nghĩa các phần tử HTML mới.
- Bóng DOM – Tách biệt kiểu dáng và mã đánh dấu của các thành phần.
- Mẫu HTML – Các đoạn nội dung có thể tái sử dụng.
- Mô-đun ES – Nhập khẩu/xuất khẩu JavaLogic kịch bản.
Ví dụ:
class MyButton extends HTMLElement {
connectedCallback() {
this.innerHTML = `<button>Click Me</button>`;
}
}
customElements.define('my-button', MyButton);
Web Components thúc đẩy tính mô đun và giảm sự phụ thuộc vào các thành phần dành riêng cho từng framework, mang lại khả năng mở rộng lâu dài.
20) Làm thế nào bạn có thể tối ưu hóa hiệu suất của một ứng dụng giao diện người dùng?
Tối ưu hóa hiệu năng đảm bảo thời gian tải nhanh, khả năng phản hồi và trải nghiệm người dùng mượt mà. Điều này bao gồm việc giảm thiểu các tài nguyên gây cản trở hiển thị, tối ưu hóa mã và tận dụng bộ nhớ đệm.
Thực hành tốt nhất:
- Giảm bớt CSS và JavaCác tập tin kịch bản.
- Tải chậm hình ảnh và tài sản.
- Sử dụng tách mã và cây rung.
- Thực hiện bộ nhớ đệm của trình duyệt và phân phối CDN.
- Tối ưu hóa DOM reflows và sơn lại.
Ví dụ: Trong React, sử dụng React.memo or useCallback Ngăn chặn việc render lại không cần thiết, giúp cải thiện hiệu suất đáng kể.
21) React là gì và tại sao nó được sử dụng rộng rãi trong phát triển giao diện người dùng?
Phản ứng là một ngôn ngữ khai báo, dựa trên thành phần. JavaThư viện mã nguồn mở được Facebook phát triển để xây dựng giao diện người dùng, đặc biệt là các ứng dụng một trang (SPA). Sự phổ biến của nó đến từ tính đơn giản, hiệu quả và khả năng tái sử dụng.
Ưu điểm chính:
- DOM ảo: Chỉ cập nhật hiệu quả những phần giao diện người dùng thay đổi.
- Kiến trúc dựa trên thành phần: Khuyến khích việc sử dụng lại mã nguồn và lập trình theo mô-đun.
- Liên kết dữ liệu một chiều: Đảm bảo luồng dữ liệu có thể dự đoán được.
- Hệ sinh thái: Sự hỗ trợ mạnh mẽ từ cộng đồng và các thư viện (ví dụ: Redux, React Router).
Ví dụ: Một biểu mẫu đăng nhập trong React có thể được chia nhỏ thành các thành phần như sau: <InputField>, <Button>và <Form>, cho phép bảo trì và tái sử dụng trên nhiều trang.
22) Sự khác biệt giữa DOM ảo và DOM thực là gì?
| Tính năng | DOM ảo | DOM thực tế |
|---|---|---|
| Thiên nhiên | Trọng lượng nhẹ JavaBiểu diễn kịch bản | DOM thực tế của trình duyệt |
| Cập nhật tốc độ | Nhanh (tái hiển thị có chọn lọc) | Chậm hơn (vẽ lại toàn bộ cây) |
| Hiệu quả | Sử dụng thuật toán so sánh khác biệt | Thao tác trực tiếp |
| Ví dụ | React, Vue | HTML thuần túy, JavaScript |
Giải thích: Virtual DOM giúp tăng hiệu năng bằng cách giảm thiểu việc thao tác trực tiếp với DOM thực. Khi trạng thái thay đổi, React tạo một bản sao ảo, so sánh nó (diffing), và chỉ cập nhật các phần tử đã thay đổi trong DOM thực.
Ví dụ: Việc cập nhật một ô nhập liệu duy nhất trong một biểu mẫu lớn chỉ làm mới ô nhập liệu đó, chứ không phải toàn bộ trang — điều này mang lại lợi ích đáng kể về hiệu suất.
23) Giải thích các phương thức vòng đời trong các thành phần React.
Các thành phần React (đặc biệt là các thành phần dựa trên lớp) có những đặc điểm riêng biệt. các giai đoạn vòng đời:
- Mount: Thành phần được tạo (
constructor,componentDidMount). - Đang cập nhật: Được kích hoạt bởi sự thay đổi trạng thái/thuộc tính (
componentDidUpdate). - Ngắt kết nối: Dọn dẹp trước khi tháo dỡ (
componentWillUnmount).
Trong các thành phần chức năng, useEffect Hook mô phỏng các vòng đời này:
useEffect(() => {
console.log('Mounted');
return () => console.log('Unmounted');
}, []);
Hiểu rõ những điều này giúp các nhà phát triển xử lý các cuộc gọi API, dọn dẹp và tối ưu hóa hiệu năng một cách hiệu quả.
24) Sự khác biệt giữa state và props trong React là gì?
| Tính năng | Tiểu bang | đạo cụ |
|---|---|---|
| TINH THẦN TRÁCH NHIỆM | Được quản lý nội bộ bởi thành phần | Được truyền từ thành phần cha |
| Tính đột biến | Có thể thay đổi | bất biến |
| Mục đích | Xử lý dữ liệu thay đổi | Cấu hình các thành phần con |
| Ví dụ | useState() |
<Button label="Submit" /> |
Giải thích: Props (viết tắt của “properties”) là các thuộc tính chỉ đọc được sử dụng để truyền dữ liệu xuống cây thành phần, trong khi state quản lý dữ liệu động nội bộ. Ví dụ: <Counter> Thành phần sử dụng trạng thái để theo dõi số lượng nhưng nhận được initialValue như một đạo cụ.
Hiểu rõ sự khác biệt này là điều cần thiết để quản lý luồng dữ liệu và khả năng phản hồi.
25) React Hooks là gì và tại sao chúng được giới thiệu?
Hooks là các hàm đặc biệt cho phép các nhà phát triển sử dụng các tính năng trạng thái và vòng đời trong thành phần chức năngĐược giới thiệu trong React 16.8, chúng giúp đơn giản hóa mã và giảm sự phụ thuộc vào các thành phần lớp.
Các kiểu móc câu phổ biến:
useState→ quản lý trạng thái của thành phần.useEffect→ tác dụng phụ (cuộc gọi API, đăng ký).useContext→ Chia sẻ trạng thái toàn cầu.useMemo/useCallback→ Tối ưu hóa hiệu năng.
Ví dụ:
const [count, setCount] = useState(0);
useEffect(() => console.log('Count changed:', count), [count]);
Hooks giúp tạo ra mã nguồn sạch hơn, bố cục tốt hơn và khả năng bảo trì được cải thiện.
26) Thành phần được kiểm soát và không được kiểm soát trong React là gì?
Trong React, các thành phần được kiểm soát Dữ liệu biểu mẫu của họ được xử lý bởi tiểu bang, trong khi các thành phần không kiểm soát được dựa trực tiếp vào DOM.
| Kiểu | Nguồn dữ liệu | Ví dụ |
|---|---|---|
| Kiểm soát | Trạng thái phản ứng | value={inputValue} với onChange |
| Không kiểm soát được | DOM | ref để truy cập các giá trị đầu vào |
Ví dụ:
const [name, setName] = useState('');
<input value={name} onChange={e => setName(e.target.value)} />
Các thành phần được điều khiển thích hợp cho việc quản lý trạng thái có thể dự đoán được, trong khi các thành phần không được điều khiển phù hợp với các hình thức đơn giản, không năng động.
27) Bạn xử lý biểu mẫu và xác thực trong React như thế nào?
Xử lý biểu mẫu bao gồm việc thu thập dữ liệu do người dùng nhập, xác thực dữ liệu và quản lý lỗi. Việc này có thể được thực hiện thủ công hoặc sử dụng các thư viện như... hình thức, Biểu mẫu React Hook, hoặc là Yup.
Ví dụ (Kiểm tra thủ công):
if (!email.includes('@')) setError('Invalid email');
Bước sau:
- Tạo các trường biểu mẫu được kiểm soát bằng cách sử dụng trạng thái.
- Kiểm tra tính hợp lệ của dữ liệu nhập khi thay đổi hoặc gửi.
- Hiển thị lỗi có điều kiện.
- Đặt lại biểu mẫu sau khi gửi thành công.
Mẹo: Hãy sử dụng phương pháp xác thực dựa trên độ trễ (debounced validation) hoặc xác thực dựa trên lược đồ (schema-based validation) để cải thiện hiệu suất và khả năng bảo trì.
28) Khung CSS là gì và chúng cải thiện quá trình phát triển giao diện người dùng như thế nào?
Các framework CSS cung cấp các kiểu dáng, bố cục và thành phần được xác định trước giúp tăng tốc quá trình phát triển giao diện người dùng. Các framework phổ biến bao gồm: Bootstrap, Tailwind CSSvà UI vật liệu.
| Khung | Các tính năng chính | Trường hợp sử dụng |
|---|---|---|
| Bootstrap | Hệ thống lưới điện | Tạo mẫu nhanh |
| Tailwind CSS | các lớp ưu tiên tiện ích | Giao diện người dùng tùy chỉnh |
| UI vật liệu | thành phần phản ứng | Giao diện người dùng hiện đại, dễ truy cập |
Ưu điểm:
- Ngôn ngữ thiết kế nhất quán.
- Giảm thời gian phát triển.
- Mặc định là giao diện đáp ứng.
Việc sử dụng các framework giúp các nhà phát triển tập trung vào chức năng trong khi vẫn duy trì tính nhất quán về thiết kế giữa các dự án.
29) Làm thế nào để gỡ lỗi ứng dụng giao diện người dùng một cách hiệu quả?
Gỡ lỗi bao gồm việc xác định và khắc phục các vấn đề trong mã nguồn thông qua việc kiểm tra có hệ thống.
Các kỹ thuật gỡ lỗi phổ biến:
- Sử dụng Công cụ dành cho nhà phát triển trình duyệt (Các tab Elements, Network, Console).
- Thêm
console.log()Về mặt chiến lược, hãy theo dõi các biến số. - Thuê điểm dừng và quan sát biểu cảm.
- Phân tích yêu cầu mạng Đối với các API bị lỗi.
- Validate Bộ chọn CSS và bố cục bằng công cụ “Kiểm tra”.
Ví dụ: Trong Chrome DevTools, việc chọn “Tạm dừng khi có ngoại lệ” giúp phát hiện lỗi thời gian chạy sớm hơn.
Công cụ như Công cụ phát triển React và Công cụ phát triển Redux Đồng thời, nó cũng trực quan hóa các thay đổi trạng thái một cách hiệu quả.
30) Khả năng tiếp cận (a11y) trong phát triển web là gì và tại sao nó lại quan trọng?
Khả năng tiếp cận (a11y) Đảm bảo các trang web có thể sử dụng được bởi người khuyết tật — bao gồm cả những người sử dụng trình đọc màn hình hoặc thiết bị nhập liệu thay thế.
Thực hành tốt nhất:
- Sử dụng HTML ngữ nghĩa (
<nav>,<main>,<header>). - Cho
altVăn bản dành cho hình ảnh. - Đảm bảo điều hướng bằng bàn phím với
tabindex. - Sử dụng các thuộc tính ARIA (
role,aria-label). - Duy trì độ tương phản màu sắc ở mức thích hợp.
Ví dụ: Sử dụng <button aria-label="Submit Form"> Đảm bảo trình đọc màn hình hiểu được chức năng của nút.
Khả năng truy cập giúp cải thiện tính dễ sử dụng, SEO và tính toàn diện — điều vô cùng quan trọng đối với các ứng dụng web doanh nghiệp hiện đại.
31) Đường dẫn kết xuất quan trọng là gì và làm thế nào để tối ưu hóa chúng?
đường dẫn kết xuất quan trọng (CRP) là chuỗi các bước mà trình duyệt thực hiện để chuyển đổi HTML, CSS và JavaChuyển đổi mã lệnh thành các pixel trên màn hình. Tối ưu hóa nó sẽ giảm thiểu... thời gian để hiển thị lần đầu và cải thiện hiệu suất cảm nhận.
Các kỹ thuật tối ưu hóa:
- Giảm thiểu các nguồn lực quan trọng — CSS nội tuyến cho phần nội dung hiển thị đầu tiên.
- Hoãn lại hoặc bất đồng bộ JavaScript để tránh tình trạng tắc nghẽn hiển thị.
- Sử dụng gợi ý tài nguyên (
<link rel="preload">,<link rel="dns-prefetch">). - Nén tài sản (Gzip/Brotli).
- Tải ảnh và video theo yêu cầu (lazy-load).
Ví dụ: Đặt <script src="app.js" defer> Đảm bảo DOM được tải trước khi JavaScript thực thi, cải thiện các chỉ số tương tác trang như FCP (First Contentful Paint).
32) Các chỉ số hiệu suất web như LCP, FID và CLS là gì?
Việc đo lường hiệu suất hiện đại tập trung vào... Các trang web cốt lõi — Các chỉ số quan trọng dựa trên trải nghiệm người dùng do Google định nghĩa:
| metric | Hình thức đầy đủ | Ngưỡng mục tiêu | Nó đo lường những gì |
|---|---|---|---|
| LCP | Sơn nội dung lớn nhất | ≤ 2.5 giây | Đang tải hiệu suất |
| FID | Độ trễ đầu vào đầu tiên | ≤ 100 mili giây | Tương tác |
| CLS | Bố cục tích lũy Shift | ≤ 0.1 | Ổn định thị giác |
Ví dụ: Nút "Mua ngay" di chuyển liên tục làm tăng CLS (Customer Live Service) và gây khó chịu cho người dùng.
Việc cải thiện LCP thông qua tối ưu hóa hình ảnh hoặc tải ảnh chậm sẽ trực tiếp nâng cao SEO và khả năng giữ chân người dùng.
33) Làm thế nào để đảm bảo an ninh trong quá trình phát triển giao diện người dùng?
Bảo mật là yếu tố tối quan trọng vì mã giao diện người dùng (front-end) hiển thị trực tiếp cho người dùng. Các nhà phát triển phải áp dụng các biện pháp bảo mật tốt nhất để đảm bảo an toàn. ngăn chặn các cuộc tấn công tiêm mã độc, tấn công xuyên trang web và tấn công làm lộ dữ liệu..
Các hoạt động chính:
- Lọc và xác thực dữ liệu đầu vào của người dùng (ngăn ngừa tấn công XSS).
- Sử dụng Chính sách bảo mật nội dung (CSP) tiêu đề.
- Tránh lưu trữ các mã thông báo nhạy cảm trong localStorage.
- Triển khai HTTPS và bảo mật cookie.
- Tránh việc hiển thị HTML động.
Ví dụ:
element.textContent = userInput; // Safe element.innerHTML = userInput; // Unsafe (may run scripts)
Mẹo: Việc thảo luận về các ví dụ thực tế về cách giảm thiểu lỗi (ví dụ: React tự động thoát JSX) sẽ gây ấn tượng với người phỏng vấn.
34) Nhân viên dịch vụ là gì và họ cải thiện các ứng dụng web như thế nào?
Công nhân dịch vụ là các tập lệnh chạy ngầm chặn các yêu cầu mạng, cho phép khả năng ngoại tuyến, bộ nhớ đệmvà thông báo đẩy — thiết yếu cho Ứng dụng web lũy tiến (PWA).
Vòng đời:
- Đăng ký – Trình duyệt tải xuống trình xử lý dịch vụ.
- đặt – Lưu trữ các tài nguyên tĩnh vào bộ nhớ đệm.
- Kích hoạt – Kiểm soát các sự kiện tìm nạp.
Ví dụ:
self.addEventListener('fetch', e => {
e.respondWith(caches.match(e.request) || fetch(e.request));
});
Các lợi ích bao gồm tốc độ tải nhanh hơn và khả năng truy cập ngoại tuyến, trong khi tính năng quản lý phiên bản đảm bảo việc cập nhật được kiểm soát.
35) Các framework kiểm thử nào được sử dụng trong phát triển giao diện người dùng (front-end)?
Kiểm thử đảm bảo tính ổn định và ngăn ngừa sự thoái triển lỗi. Các cấp độ khác nhau nhắm đến các nhu cầu cụ thể:
| Kiểu | Mục đích | CÔNG CỤ |
|---|---|---|
| đơn vị | Kiểm tra từng chức năng/thành phần riêng lẻ | Đùa thôi, Mocha |
| Tích hợp | Tương tác mô-đun kiểm thử | Thư viện thử nghiệm phản ứng |
| Từ đầu đến cuối (E2E) | Mô phỏng quy trình làm việc của người dùng | CypressNhà viết kịch |
| Giao diện người dùng/Hình ảnh | Nắm bắt xu hướng thiết kế | Percy, Chromatic |
Ví dụ: Sử dụng Jest với thư viện kiểm thử React:
test('renders heading', () => {
render(<Header />); expect(screen.getByText(/welcome/i)).toBeInTheDocument();
});
Các cuộc phỏng vấn hiện đại thường nhấn mạnh đến phạm vi kiểm thử và tích hợp CI.
36) Bạn sử dụng Git như thế nào trong quy trình làm việc của lập trình viên giao diện người dùng?
đi Đây là một hệ thống kiểm soát phiên bản phân tán được sử dụng để cộng tác và theo dõi thay đổi.
Các lệnh cốt lõi:
git clone→ Sao chép kho lưu trữ.git branch/checkout -b→ Tạo nhánh tính năng mới.git commit/push→ Lưu và chia sẻ các thay đổi.git merge/rebase→ Tích hợp các tính năng.git pull request→ Cộng tác và xem xét.
Ví dụ: Sau Dòng Git (develop, feature/*, release/*, hotfix/*) đảm bảo việc quản lý phiên bản có cấu trúc trong các dự án có nhiều nhà phát triển tham gia.
Kiến thức về Tác vụ GitHub or Đường ống CI / CD cộng thêm điểm thưởng.
37) Vai trò của các công cụ xây dựng như Webpack, Vite và Babel là gì?
Các công cụ xây dựng tự động hóa việc đóng gói, chuyển đổi mã và tối ưu hóa mã nguồn.
| Công cụ | Chức năng |
|---|---|
| Gói web | Đóng gói các tập tin JS/CSS/hình ảnh kèm theo trình tải và plugin. |
| Babel | Chuyển đổi mã ES6+ sang ES5 cho các trình duyệt cũ hơn |
| Sống | Công cụ xây dựng hiện đại với máy chủ phát triển cực nhanh |
| Tiếng Anh | Kiểm tra cú pháp để đảm bảo chất lượng mã. |
Ví dụ: Webpack đóng gói nhiều mô-đun thành một tệp duy nhất được tối ưu hóa.
Vite tận dụng các mô-đun ES gốc để tải lại gần như tức thì, lý tưởng cho các ứng dụng React và Vue hiện đại.
Những công cụ này đảm bảo việc triển khai hiệu quả và sẵn sàng cho môi trường sản xuất.
38) Bạn xử lý các vấn đề về khả năng tương thích trình duyệt như thế nào?
Sự không nhất quán giữa các trình duyệt phát sinh từ các cách triển khai khác nhau của các tiêu chuẩn web.
Thực hành tốt nhất:
- Sử dụng Trình sửa lỗi tự động dành cho tiền tố của nhà cung cấp.
- Kiểm thử trên các trình duyệt chính thông qua BrowserStack or SauceLabs.
- Theo tăng cường tiến bộChức năng cốt lõi được ưu tiên trước, các tính năng nâng cao được sử dụng có điều kiện.
- Sử dụng phát hiện tính năng (
Modernizr) thay vì dò tìm trình duyệt. - Rắc bột polyfill chất độn Đối với các API bị thiếu.
Ví dụ: fetch() Không được hỗ trợ trong IE11 — hãy sử dụng polyfill hoặc phương án dự phòng. XMLHttpRequest.
Khả năng hoạt động nhất quán trên nhiều trình duyệt khác nhau thể hiện sự trưởng thành trong kỹ thuật phát triển giao diện người dùng.
39) Hãy mô tả một tình huống mà bạn đã cải thiện hiệu suất hoặc khả năng sử dụng của một ứng dụng web.
Ví dụ về câu trả lời mang tính hành vi:
Trong dự án trước đây, giao diện người dùng của chúng tôi hoạt động kém hiệu quả trên thiết bị di động. Sau khi kiểm tra bằng Chrome Lighthouse, tôi phát hiện ra các hình ảnh chưa được tối ưu hóa và hiện tượng render lại quá mức trong React. Tôi đã giới thiệu... tải lười biếng, sự ghi nhớvà tách mãThời gian tải trang đã được cải thiện từ 6 giây xuống còn 1.8 giây, và điểm hiệu suất Lighthouse của chúng tôi đã tăng từ 52 lên 92.
Ngoài ra, việc triển khai nhãn ARIA đã nâng cao khả năng tuân thủ tiêu chuẩn về khả năng truy cập (WCAG 2.1). Việc tối ưu hóa toàn diện này đã cải thiện trải nghiệm người dùng và giảm tỷ lệ thoát trang xuống 25%.
Nhà tuyển dụng đánh giá cao các số liệu cụ thể và khả năng chứng minh cách giải quyết vấn đề.
40) Những kỹ năng mềm nào quan trọng đối với một lập trình viên giao diện người dùng (front-end developer)?
Mặc dù kỹ năng chuyên môn rất quan trọng, nhưng nhà tuyển dụng cũng đánh giá cao khả năng giao tiếp và tổ chức.
Kỹ năng mềm thiết yếu:
- Cộng tác: Làm việc với các nhóm thiết kế, kiểm thử phần mềm và nhóm phát triển hệ thống.
- Truyền thông: Dịch thuật ngôn ngữ chuyên ngành cho các bên liên quan không chuyên về kỹ thuật.
- Sự chú ý đến chi tiết: Triển khai chính xác đến từng pixel và chú trọng đến khả năng tiếp cận.
- Khả năng thích ứng: Học hỏi và phát triển các framework mới (React → Next.js → Solid).
- Quản lý thời gian: Cân bằng giữa việc tạo mẫu nhanh và sự ổn định sản xuất.
- Tư duy giải quyết vấn đề: Gỡ lỗi hiệu quả các sự cố phức tạp về giao diện người dùng hoặc API.
Ví dụ: Một lập trình viên front-end biết cách cân nhắc giữa thiết kế UX và tính khả thi về mặt kỹ thuật sẽ giúp tăng hiệu quả làm việc nhóm và củng cố niềm tin của các bên liên quan.
🔍 Những câu hỏi phỏng vấn lập trình viên Front-end hàng đầu kèm theo các tình huống thực tế và câu trả lời chiến lược
1) Làm thế nào để bạn đảm bảo các ứng dụng web của mình hiển thị tốt trên các thiết bị và kích thước màn hình khác nhau?
Mong đợi từ ứng viên: Người phỏng vấn muốn đánh giá sự hiểu biết của bạn về các nguyên tắc thiết kế đáp ứng và khả năng mang lại trải nghiệm người dùng nhất quán trên các thiết bị khác nhau.
Câu trả lời ví dụ: “Ở vị trí trước đây, tôi đảm bảo khả năng tương thích trên nhiều thiết bị bằng cách sử dụng phương pháp ưu tiên thiết bị di động, các truy vấn phương tiện CSS và hệ thống lưới linh hoạt. Tôi thường xuyên kiểm tra bố cục trên nhiều thiết bị và công cụ dành cho nhà phát triển trình duyệt để xác nhận hành vi và khả năng sử dụng nhất quán.”
2) Bạn có thể giải thích sự khác biệt giữa HTML ngữ nghĩa và HTML phi ngữ nghĩa, và tại sao điều đó lại quan trọng không?
Mong đợi từ ứng viên: Người phỏng vấn đang đánh giá kiến thức nền tảng của bạn về các tiêu chuẩn web và các thực tiễn tốt nhất về khả năng truy cập.
Câu trả lời ví dụ: “HTML ngữ nghĩa sử dụng các thẻ có ý nghĩa như header, article và footer để mô tả cấu trúc nội dung, trong khi HTML phi ngữ nghĩa dựa vào các thẻ chung chung như div và span. HTML ngữ nghĩa cải thiện khả năng truy cập, SEO và khả năng bảo trì, giúp người dùng và nhà phát triển dễ dàng hiểu ứng dụng hơn.”
3) Hãy mô tả một lần bạn phải cộng tác chặt chẽ với các nhà thiết kế hoặc lập trình viên back-end.
Mong đợi từ ứng viên: Người phỏng vấn muốn hiểu về kỹ năng giao tiếp và khả năng làm việc nhóm của bạn.
Câu trả lời ví dụ: “Ở vị trí trước đây, tôi đã làm việc chặt chẽ với các nhà thiết kế và lập trình viên back-end trong quá trình lập kế hoạch sprint và các cuộc họp giao ban hàng ngày. Tôi đã làm rõ ý đồ thiết kế ngay từ đầu và đưa ra phản hồi về tính khả thi, điều này giúp chúng tôi giảm thiểu việc làm lại và cung cấp các tính năng hiệu quả hơn.”
4) Làm thế nào để tối ưu hóa hiệu năng giao diện người dùng trong một ứng dụng đang hoạt động?
Mong đợi từ ứng viên: Người phỏng vấn đang kiểm tra kiến thức của bạn về tối ưu hóa hiệu năng và tác động đến trải nghiệm người dùng.
Câu trả lời ví dụ: “Tôi tập trung vào việc giảm thiểu kích thước tài nguyên thông qua việc chia nhỏ mã, tối ưu hóa hình ảnh và tải chậm. Tôi cũng giảm thiểu việc hiển thị lại không cần thiết và tận dụng bộ nhớ đệm của trình duyệt để đảm bảo thời gian tải nhanh hơn và tương tác mượt mà hơn.”
5) Hãy kể cho tôi về một lỗi khó khăn mà bạn gặp phải ở giao diện người dùng và cách bạn đã giải quyết nó.
Mong đợi từ ứng viên: Người phỏng vấn muốn đánh giá phương pháp giải quyết vấn đề và sự kiên trì của bạn.
Câu trả lời ví dụ: “Ở công việc trước đây, tôi gặp phải sự cố bố cục không ổn định do xung đột về độ ưu tiên của CSS. Tôi đã khoanh vùng vấn đề bằng các công cụ kiểm tra trình duyệt, chỉnh sửa lại kiểu dáng cho rõ ràng hơn và bổ sung tài liệu để ngăn ngừa các sự cố tương tự trong tương lai.”
6) Làm thế nào để bạn đảm bảo tính khả dụng trong các ứng dụng mà bạn xây dựng?
Mong đợi từ ứng viên: Người phỏng vấn đang tìm kiếm sự hiểu biết về thiết kế toàn diện và tuân thủ các tiêu chuẩn về khả năng tiếp cận.
Câu trả lời ví dụ: “Tôi đảm bảo khả năng truy cập bằng cách sử dụng HTML ngữ nghĩa, thuộc tính ARIA phù hợp và độ tương phản màu sắc đầy đủ. Tôi cũng kiểm tra với điều hướng bằng bàn phím và trình đọc màn hình để xác nhận rằng tất cả người dùng đều có thể tương tác với ứng dụng một cách hiệu quả.”
7) Bạn xử lý như thế nào khi nhận được phản hồi mang tính xây dựng về mã nguồn của mình?
Mong đợi từ ứng viên: Người phỏng vấn muốn hiểu bạn có sẵn sàng tiếp nhận phản hồi và có tư duy cầu tiến như thế nào.
Câu trả lời ví dụ: “Tôi xem những phản hồi mang tính xây dựng là cơ hội để cải thiện. Tôi lắng nghe cẩn thận, đặt câu hỏi làm rõ nếu cần thiết và áp dụng các đề xuất một cách chu đáo để nâng cao chất lượng mã nguồn và phù hợp với tiêu chuẩn của nhóm.”
8) Hãy mô tả một tình huống mà bạn phải hoàn thành công việc trong thời hạn gấp rút mà không được ảnh hưởng đến chất lượng.
Mong đợi từ ứng viên: Người phỏng vấn đang đánh giá kỹ năng quản lý thời gian và ưu tiên công việc của bạn.
Câu trả lời ví dụ: “Ở vị trí trước đây, tôi ưu tiên các chức năng cốt lõi trước và trì hoãn các cải tiến không thiết yếu. Tôi thông báo tiến độ một cách minh bạch với các bên liên quan và tập trung vào việc viết mã sạch, dễ bảo trì để đáp ứng thời hạn mà không làm giảm chất lượng.”
9) Làm thế nào để bạn luôn cập nhật các xu hướng và phương pháp tốt nhất trong phát triển giao diện người dùng?
Mong đợi từ ứng viên: Người phỏng vấn muốn đánh giá sự cam kết của bạn đối với việc học hỏi liên tục.
Câu trả lời ví dụ: “Tôi luôn cập nhật kiến thức bằng cách đọc các blog kỹ thuật, theo dõi các chuyên gia hàng đầu trong ngành và thử nghiệm các công cụ mới trong các dự án cá nhân. Việc học hỏi liên tục này giúp tôi mang đến những giải pháp hiện đại và hiệu quả cho công việc của mình.”
10) Bạn sẽ tiếp cận việc xây dựng một tính năng mới như thế nào khi các yêu cầu chưa rõ ràng hoặc đang thay đổi?
Mong đợi từ ứng viên: Người phỏng vấn đang kiểm tra khả năng thích ứng và đưa ra quyết định của bạn trong những tình huống không rõ ràng.
Câu trả lời ví dụ: “Tôi bắt đầu bằng cách làm rõ các giả định với các bên liên quan và chia nhỏ tính năng thành các thành phần nhỏ hơn, linh hoạt hơn. Tôi điều chỉnh dựa trên phản hồi và luôn thích ứng, đảm bảo giải pháp phát triển song song với các yêu cầu thay đổi.”
