40+ Câu hỏi phỏng vấn Backend Developer | Đầy đủ - Chi tiết
Mỗi công ty hoặc một dự án sẽ sử dụng những ngôn ngữ lập trình Backend khác nhau, phổ biến trong giới hiện nay là Java, C#, Python, NodeJS và PHP. Hãy chuẩn bị cho cuộc phỏng vấn vị trí Backend với tổng hợp các câu hỏi phỏng vấn Backend chi tiết và đầy đủ dưới đây để thể hiện tốt nhất khả năng của mình.
Trước khi đi đến chi tiết các câu hỏi phỏng vấn Backend, bạn hãy lưu ý danh sách các chủ đề kỹ thuật cần chuẩn bị cho buổi phỏng vấn Backend như sau:
- Ngôn ngữ lập trình Backend: C#, PHP, Python (Numpy, Pandas)
- APIs
- Data Structures
- Servers
- Algorithms
Bây giờ, hãy cùng tập luyện với các câu hỏi phỏng vấn Backend chi tiết cho các level công việc từ intern cho đến junior, senior, fullstack,...
Câu hỏi phỏng vấn Backend intern/fresher
Các câu hỏi phỏng vấn Backend dưới đây phù hợp với các bạn sinh viên đi thực tập hoặc mới tốt nghiệp, chưa có nhiều kinh nghiệm trong các dự án thực tế. Hãy tham khảo các câu hỏi chuyên môn dưới đây để thêm phần tự tin.
1. Vai trò của Backend là gì?
Backend là một phần quan trọng của hệ thống, hỗ trợ hoạt động phần máy chủ của website/app, chịu trách nhiệm lưu trữ, sắp xếp, truy xuất dữ liệu, xử lý các yêu cầu của người dùng, duy trì tính bảo mật và cung cấp nội dung cho front-end.
- Giải thích bản chất của nguyên tắc DRY trong Backend
Nguyên tắc DRY: “Không ai lặp lại code nhiều lần trên một dòng sông”. Chính xác thì là Don’t Repeat Yourself (đừng lặp lại code, method thực hiện chức năng giống nhau). Nguyên tắc DRY trong Java cần đảm bảo:
“Every piece of knowledge must have a single, unambiguous, authoritative representation within a system - Mỗi tính năng, business, thuật toán hay một hàm trong chương trình cần phải là duy nhất, rõ ràng, có thẩm quyền trong hệ thống” (Theo wiki).
2. Web server là gì?
Web server (máy chủ web) là nơi cài đặt các chương trình phục vụ các ứng dụng web, có khả năng tiếp nhận request, phản hồi cho client thông qua giao thức HTTP hoặc một số giao thức khác. Máy chủ cũng là nơi lưu trữ các dữ liệu tải lên của client (văn bản, hình ảnh, video, audio,...).
3. Một số web server phổ biến mà bạn biết là gì?
Tham khảo: Em có biết một vài web server như:
- Apache
- Nginx
- Microsoft-IIS
- LiteSpeed
- Google server
- …
4. Có bao nhiêu Cache eviction policies?
Có 6 cách phổ biến để xóa các dữ liệu không cần thiết trong bộ nhớ đệm:
- First In First Out (FIFO): Xóa các dữ liệu được đưa vào cache theo thứ tự thời gian, không phân biệt tần suất truy cập.
- Last In First Out (LIFO): Xóa những dữ liệu cũ nhất.
- Least Recently Used (LRU): Xóa các dữ liệu ít được truy cập gần đây nhất.
- Most Recently Used (MRU): Xoá dữ liệu được truy cập nhiều nhất.
- Least Frequently Used (LFU): Xóa dữ liệu ít được truy cập nhất.
- RR: Xoá dữ liệu bất kỳ trên cache.
5. Microservice là gì?
Microservice là một kiểu kiến trúc phần mềm hướng dịch vụ, mỗi microservice sẽ được đặt trên một server riêng, giúp dễ dàng nâng cấp và scale ứng dụng, phần mềm.
Top câu hỏi phỏng vấn Backend cấp senior
1. Constructor trong Java là gì? Có bao nhiêu loại constructors?
Constructor trong Java là một phương thức đặc biệt dùng để khởi tạo, trả về đối tượng của class mà nó được định nghĩa. Thông thường constructor trùng tên với class mà nó được định nghĩa.
Có 3 loại constructor chính là: default, no-arg, parameterized.
2. Em hãy phân biệt finally, final và finalize
- Final: Là một từ khoá Java, dùng để áp dụng hạn chế về class, phương thức, biến. Final chỉ ra rằng phương thức final không thể ghi đè, giá trị biến final không thể thay đổi, final class không được kế thừa. Hay nói đơn giản final được dùng trong một vài ngữ cảnh để xác định thực thế chỉ có thể được gán 1 lần.
- Finalize: Là một phương thức, nó đủ điều kiện và được Garbage Collector gọi ngay trước khi xóa hoặc hủy.
- Finally: Là một block, được dùng để thực thi các code quan trọng ví dụ như đóng kết nối, luồng,... Finally luôn được thực thi dù có ngoại lệ hay không.
3. Primitive Data Types và Wrapper Classes khác nhau thế nào?
Điểm khác nhau rõ rệt đó là khi sử dụng Primitive Data Types và Wrapper Classes sẽ khác nhau về việc cấp phát địa chỉ ô nhớ và references vào địa chỉ ô nhớ đó.
- Primitive Data Types: Kiểu dữ liệu nguyên thuỷ được cung cấp sẵn trong các ngôn ngữ lập trình và để lưu trữ các dữ liệu đơn giản, có tính tham trị (sao chép giá trị của một địa chỉ để tạo ra 1 địa chỉ ô nhớ mới có cùng giá trị với địa chỉ sao chép lúc đầu).
- Wrapper Classes: Kiểu dữ liệu đối tượng có tính tham chiếu.
4. Các loại threads trong Java gồm những gì?
Có 2 loại thread trong Java đó là:
- User Thread (hay Non-Daemon Thread): Còn gọi là foreground thread, có độ ưu tiên cao, cần đưa vào CPU để xử lý trước. User thread được tạo ra để thực hiện công việc cụ thể.
- Daemon Thread: Thread có độ ưu tiên thấp, dùng để chạy các dịch vụ nền như Garbage Collection.
5. MySQL và SQL khác nhau thế nào?
MySQL |
SQL |
|
|
Hay hiểu đơn giản, điểm khác nhau nổi bật của MySQL và SQL ở chỗ MySQL là công nghệ cơ sở để lưu trữ dữ liệu. Còn SQL là ngôn ngữ cho phép người dùng đọc, sửa và xóa dữ liệu.
6. RDBMs là gì?
RDBMS (Relational Database Management System) là hệ quản trị cơ sở dữ liệu quan hệ. RDBMS là nền tảng cho SQL và các hệ thống CSDL hiện đại như MS SQL Server, IBM DB2, Oracle, MySQL và Microsoft Access.
7. Các mệnh đề (clauses) phổ biến được sử dụng trong truy vấn SQL SELECT mà bạn biết là gì?
Có 11 mệnh đề trong truy vấn SQL SELECT được sắp xếp theo thứ tự ràng buộc cho câu lệnh SELECT, đó là:
- FROM: Liệt kê các bảng sử dụng trong truy vấn.
- ON: Xác định điều kiện ràng buộc giữa các bảng.
- JOIN: Kết hợp bản ghi từ 2 hoặc nhiều bảng trong một CSDL.
- WHERE: Lọc kết quả bởi các điều kiện.
- GROUP BY: Sắp xếp các dữ liệu giống nhau thành một nhóm, luôn tuân theo WHERE và đứng trước ORDER BY.
- WITH CUBE or WITH ROLLUP: Phát sinh các tổng trung gian giữa các cột trong GROUP BY.
- HAVING: Xác định điều kiện lọc nhóm kết quả sẽ được xuất hiện trong kết quả cuối cùng.
- SELECT: Lấy thông tin (các cột) từ một hoặc nhiều bảng
- DISTINCT: Kết hợp với SELECT để loại bỏ bản ghi trùng lặp.
- ORDER BY: Sắp xếp dữ liệu theo thứ tự tăng hoặc giảm dựa trên 1 hoặc nhiều cột thông tin.
- TOP: Lấy ra số lượng bản ghi theo yêu cầu hoặc phần trăm nhất định bản ghi từ kết quả trả về.
8. Statistic website và dynamic website có gì khác nhau?
Về cơ bản, sự khác nhau của web tĩnh (statistic website) và web động (dynamic website) nằm ở chỗ ngôn ngữ mà các web này sử dụng. Cụ thể:
Statistic website:
- Hệ thống trang web không sử dụng các ngôn ngữ serverside như Java, PHP,...
- Các dữ liệu như văn bản HTML, mã CSS, Javascript mà người dùng nhận được sau khi truy vấn cũng là những văn bản có sẵn ở phía server.
- Ví dụ về statistic website như các blog, web 1.0,...
Dynamic website:
- Được xây dựng trên ngôn ngữ xử lý phía server như Java, PHP, Ruby,...
- Là hệ thống trang web được generate trên máy chủ qua một phần mềm.
- Trải nghiệm người dùng có thể thay đổi theo thời điểm hoặc tùy theo từng yêu cầu người dùng.
- Ví dụ: web thương mại điện tử như Shopee, Lazada,..., MXH như Facebook, Instagram,...
Câu hỏi phỏng vấn fullstack
1. Hãy nói theo ý hiểu của bạn, 4 tính chất trong lập trình hướng đối tượng là gì?
4 tính chất của lập trình hướng đối tượng OOP là:
- Abstraction (Tính trừu tượng)
- Inheritance (Tính kế thừa)
- Polymorphism (Tính đa hình)
- Encapsulation (Tính đóng gói)
Khi trả lời câu hỏi này, các bạn nên kèm theo ví dụ thực tế. Bởi khi hỏi về lý thuyết thì hầu như ai cũng trả lời được. Vậy để tạo điểm khác biệt và thể hiện khả năng chuyên môn của bạn thì các ví dụ thực tế trong quá trình làm với OOP chính là điểm nhấn.
Một số ví dụ về các tính chất trong OOP bạn có thể tham khảo:
- Abstraction (Tính trừu tượng): Ví dụ, con người trong thực tế gồm nhiều đặc điểm như họ tên, tuổi, giới tính, màu da, màu tóc,... Còn khi thể hiện trong môi trường lập trình, thì sẽ cần lược bớt các chi tiết thừa. Có thể lấy phần mềm quản lý nhân viên, chỉ cần các trường thông tin về họ tên, ngày sinh, giới tính, mà lược hết các thông tin không cần thiết như màu tóc, màu da,...
- Inheritance (Tính kế thừa): Có 2 khái niệm rõ rệt đó là class cha và class con. Các hàm được sử dụng ở class cha thì mặc định class con sẽ có.
- Polymorphism (Tính đa hình): có 2 khái niệm cần chú ý là overload và override
- Encapsulation (Tính đóng gói): chúng ta cố gắng ẩn những dữ liệu “nhạy cảm” với người dùng bằng việc set các field là private.
2. Nêu sự khác biệt của biến Global và Local trong Python
- Biến Local: Những biến tạo ra trong thân của một hàm, chỉ được sử dụng bên trong hàm đó.
- Biến Global: Những biến tạo ra ở phạm vi toàn scope, không ở trong thân của bất kỳ hàm nào. Biến Global có thể sử dụng trong toàn bộ chương trình, cả ngoài hàm và trong hàm.
3. Nếu mình không code hàm khởi tạo nào trong code, thì sẽ xảy ra lỗi gì?
Sẽ không có lỗi nào hết bởi các class vẫn có sẵn hàm khởi tạo mặc định (dù không thấy trong code).
Nhưng khi không code hàm khởi tạo, đồng nghĩa với việc không thể set initial value cho các field hoặc property trong class.
4. PHP và HTML tương tác với nhau như thế nào trong quá trình phát triển web?
- HTML dùng để phát triển front-end của website, bao gồm nội dung và cách hiển thị nội dung.
- PHP được dùng để lập trình server-side, nó tương tác với cơ sở dữ liệu để truy xuất, lưu trữ thông tin và cung cấp nội dung cho các trang HTML để hiển thị trên màn hình.
5. Exception là gì? Bạn thường xử lý exception trong code Backend thế nào?
Exception là những lỗi xảy ra khi thực thi code, hoặc một sự kiện nào đó phá vỡ luồng chuẩn của chương trình.
Để handle exception trong code Backend thì dùng try - catch. Có thể mô tả như sau: Nếu exception xảy ra trong khối lệnh try, thì sẽ bị catch (bắt lại) để xử lý ở khối lệnh catch.
6. Ví dụ công ty làm web app trong mảng Marketing, thì trong quá trình xây dựng sản phẩm, theo bạn chúng ta có thể áp dụng Stack và Queue vào việc gì?
Bạn có thể lấy một ví dụ nhỏ hơn trong ngành MKT, ví dụ như là chức năng gửi email chia lead cho nhân viên sale.
- Stack: Áp dụng trong quá trình debug. Cụ thể là sẽ quan sát trong cửa sổ Call Stack để theo dõi các hàm gọi đến nhau như thế nào.
- Queue: Sử dụng vào quá trình khắc phục tình trạng dữ liệu đến quá nhiều trong cùng 1 thời điểm (ví dụ như gửi một loạt email với số lượng lớn trong cùng một thời điểm dẫn đến quá tải server). Queue sẽ đóng vai trò như một leader giao việc. Khi người dùng gửi email, thông tin đó sẽ đi vào Queue. Lúc này, giới hạn số message lấy ra từ Queue sẽ giúp chúng ta có thể kiểm soát số lượng mail gửi đi trong một thời điểm.
Một số câu hỏi tham khảo khác khi phỏng vấn Backend
Một số câu hỏi phỏng vấn Backend theo các ngôn ngữ lập trình, chủ đề cụ thể bạn có thể tham khảo dưới đây:
Các câu hỏi phỏng vấn Backend Nodejs
1. Ưu điểm của Nodejs so với các framework khác
- Tính bất đồng bộ (non-blocking I/O): Nodejs không cần đợi API trả dữ liệu về. Mọi APIs trong thư viện Nodejs đều không blocking. Server sẽ có cơ chế riêng để gửi thông báo, nhận phản hồi về các hoạt động của Nodejs và API đã gọi.
- Nhanh: Nhờ sự hỗ trợ của core code Backend hầu như bằng C++, V8 Javascript Engine.
- Đơn giản nhưng hiệu quả: Ứng dụng Single-thread và các sự kiện lặp lại.
- Có giấy phép: Nền tảng được cấp giấy phép dựa trên MIT License.
2. Callback hell là gì?
Là hiện tượng cố gắng thực thi nhiều hoạt động bất đồng bộ lần lượt, ảnh hưởng đến Javascript Developer.
- Hàm bất đồng bộ yêu cầu một Callback để fix lỗi và xử lý kết quả.
- Cách để tránh Callback hell đó là dùng: Async từ NPM, Promise hoặc Async-await.
Bạn có thể tham khảo thêm một số câu hỏi chi tiết về Nodejs như:
- Module.exports có ý nghĩa gì?
- Nodejs stream là gì?
- Thoát mã trong Nodejs là gì?
- Hãy nói về Event-Loop trong Nodejs
- Bạn có biết đến khái niệm stub trong Nodejs không?
- …
Câu hỏi phỏng vấn Backend Java
1. Bạn biết những loại Collection Java nào?
Một số Collection Java quan trọng nhất:
- ArrayList
- LinkedList
- HashMap
- HashSet
Tip là bạn liệt kê càng nhiều càng tốt, nhưng nhớ là nên có một chút kiến thức về nó đề phòng trường hợp người phỏng vấn đưa ra câu hỏi chi tiết về danh sách bạn đã liệt kê.
2. 5 đặc điểm của Java là gì?
Đó là:
- Hướng đối tượng
- Độc lập nền tảng
- Thông dịch
- Đa luồng (Multi-thread)
- Robust (mạnh mẽ)
- Portable (khả chuyển) - Viết một lần, chạy mọi máy
Bạn có thể tham khảo một số câu hỏi phỏng vấn Backend Java khác phía dưới đây:
- Để làm cho một class không thể thay đổi, bạn sẽ làm thế nào?
- Diamond Problem là gì?
- Tại sao không thể thay đổi String Object trong Java?
- Có những Method nào trong Object Class
- Singleton là gì?
- Bạn biết gì về Dependency Injection?
Backend dùng ngôn ngữ gì?
Hiện nay có khoảng 10 ngôn ngữ lập trình Backend được sử dụng đó là:
1. JavaScript
2. SQL
3. Python
4. Java
5. PHP
6. Golang
7. Kotlin
8. Ruby
9. Rust
10. Node.js
Tìm việc Backend chuẩn gu ở đâu?
Phỏng vấn ở rất nhiều công ty nhưng vẫn chưa ưng ý? Hãy để ITNavi giúp bạn lựa chọn job Backend “chuẩn gu” với JD rõ ràng, danh sách công ty, tập đoàn cực uy tín.
ITNavi chính là điểm đến lý tưởng cho bạn với:
- 1000+ việc làm Backend, Java, PHP, Nodejs, Python, Ruby,... chất lượng từ các công ty công nghệ hàng đầu
- Tạo CV ấn tượng dạng Website với MyCV
- Nhận phản hồi nhanh chóng
Kinh nghiệm phỏng vấn Backend cần chú ý
Thông thường, với buổi tuyển dụng IT, hội đồng phỏng vấn sẽ bao gồm HR và nhân sự chuyên môn như Dev Lead, SA, PM,...
Trong đó, HR sẽ hỏi những câu hỏi liên quan đến cá nhân, tính cách, kỹ năng mềm,... như:
- Giới thiệu về bản thân
- Điểm mạnh, điểm yếu
- Đã tìm hiểu thông tin công ty hay chưa?
- Có kinh nghiệm làm một mảng trong Backend chưa hay mới ra trường?
- Các câu hỏi tình huống về giao tiếp, kỹ năng làm việc nhóm,...
- …
Với những câu hỏi từ HR, bạn cứ thoải mái trình bày và chú ý về câu từ gãy gọn, trọng tâm, thái độ nhiệt huyết, tinh thần tự tin để tạo không khí thoải mái cho đôi bên.
Còn nhân sự chuyên môn sẽ hỏi chuyên sâu về kiến thức liên quan đến vị trí bạn ứng tuyển. Các câu hỏi thường đặt ra theo format: What? When? Why? Tức là họ sẽ đi từ khái niệm, đến bạn đã từng dùng nó trong dự án thực tế chưa. Cuối cùng là tại sao cần dùng, có ưu điểm, nhược điểm gì?
Những câu hỏi như này sẽ là căn cứ để phân loại trình độ ứng viên. Vì vậy, nếu bạn là một trong những trường hợp dưới đây thì có thể tham khảo:
- Đã có kinh nghiệm dùng thực tế: Tip trả lời là vào thẳng vấn đề, có thể lấy ví dụ là một phần trong project đã làm để tăng tính thuyết phục và khẳng định chuyên môn của mình.
- Nếu chưa có kinh nghiệm sử dụng, chỉ biết về thuật ngữ thông qua học trên trường, đọc tài liệu, nghe khóa học trên youtube thì có thể khéo léo thể hiện rằng sẽ tìm hiểu theo những keyword mà người phỏng vấn đã gợi ý và thực hành để nâng cao kiến thức, kỹ năng của bản thân.
Hãy nhớ luôn có trong mình tinh thần ham học hỏi, để mọi thứ trong tầm tay. Và điều dễ dàng nhất và tốt nhất đó là hãy chia sẻ lại kiến thức cho mọi người và nhận ý kiến đóng góp để tốt hơn mỗi ngày.
Bộ câu hỏi phỏng vấn Backend gồm các câu hỏi về Java, Nodejs, C#, PHP, câu hỏi theo level vị trí Backend fresher, senior, manager,... trên đây sẽ được ITNavi cập nhật liên tục để hỗ trợ các bạn chuẩn bị tốt nhất cho buổi phỏng vấn của mình. Chúc các bạn thành công!
ITNavi - Nền tảng kết nối việc làm IT
Nguồn: 40+ Câu hỏi phỏng vấn Backend Developer | Đầy đủ - Chi tiết