Tổng hợp những câu hỏi phỏng vấn phổ biến dành riêng cho Back-end Developer và gợi ý câu trả lời

Trong bài viết này, VietnamWorks inTECH sẽ mang đến bộ câu hỏi phỏng vấn phổ biến dành riêng cho các bạn Back-end Developer, giúp các bạn Back-end tự tin hơn trước khi bước vào vòng phỏng vấn Technical.
Trước khi đi vào nội dung chính, hãy cùng tìm hiểu Back-end Developer là gì nhé!
I. Back-end Developer là gì?
Các lập trình viên Back-end chịu trách nhiệm về phía máy chủ của Web Application. Họ hợp tác chặt chẽ với các lập trình viên Front-end để đảm bảo rằng dữ liệu được truyền tải một cách thích hợp giữa máy khách và máy chủ. Để thành công trong vai trò này, các developer phải có hiểu biết sâu sắc về công nghệ phía máy chủ, cơ sở dữ liệu và bộ nhớ đệm.
Các ngôn ngữ lập trình back-end phổ biến nhất là Java, Python và PHP. Tuy nhiên, nhiều ngôn ngữ khác, chẳng hạn như Ruby và Node.js , cũng được sử dụng để phát triển back-end.
II. Bộ câu hỏi phỏng vấn dành riêng cho Back-end Developer
Những câu hỏi chung
1. Nhiệm vụ của backend là gì?
Backend hay còn gọi là server-side, là phần mềm hỗ trợ trang web hoặc ứng dụng. Chịu trách nhiệm lưu trữ và sắp xếp dữ liệu, xử lý các yêu cầu của người dùng và cung cấp nội dung cho front-end.
2. Web server là gì?
Web server hay máy chủ web là một máy tính được kết nối và liên kết mạng máy tính mở rộng. Máy chủ web được cài đặt các chương trình để phục vụ ứng dụng web, chứa toàn bộ dữ liệu và nắm quyền quản lý. Web server có thể lấy thông tin request từ phía trình duyệt web và gửi phần hồi tới máy khách thông qua HTTP hoặc giao thức khác.
Apache và NGINX là một số web server phổ biến nhất.
Web server cũng có thể lưu trữ các tài nguyên khác, như hình ảnh hoặc video.
3. Sự khác biệt giữa phương thức GET và POST là gì?
GET truy xuất dữ liệu từ máy chủ, trong khi POST gửi dữ liệu đến máy chủ. Với phương thức GET, các tham số được chuyển vào URL. Với phương thức POST, các tham số được chuyển vào phần body của request.
4. Bạn sẽ chọn chiến lược caching như thế nào (ví dụ: LRU, FIFO)?
Việc chọn chiến lược bộ nhớ cache phụ thuộc vào nhu cầu cụ thể của ứng dụng. Ví dụ: LRU (Least Recently Used) là một lựa chọn tốt cho các ứng dụng mà dữ liệu được truy cập thường xuyên. FIFO (First In, First Out) là một lựa chọn tốt cho ứng dụng mà dữ liệu hết hạn sau một thời gian cụ thể.
5. Một số vấn đề thường gặp với ORM là gì?
Một số vấn đề phổ biến với ORM bao gồm giảm hiệu suất, data maping không chính xác và khó xử lý các truy vấn phức tạp.
6. Khi nào thì sử dụng phương pháp lập trình bất đồng bộ (asynchronous programming)?
Lập trình bất đồng bộ thường được sử dụng khi có nhu cầu cải thiện hiệu suất của ứng dụng. Ví dụ: nếu một ứng dụng cần thực hiện nhiều truy vấn cơ sở dữ liệu, có thể sử dụng lập trình không đồng bộ để tránh chặn luồng chính.
7. Sự khác biệt giữa promise và callback là gì?
Promise là một object đại diện cho kết quả của một hoạt động không đồng bộ. Callback là một function được call khi một thao tác không đồng bộ hoàn tất.
8. Tích hợp liên tục (CI) là gì?
Tích hợp liên tục (CI) là một phương pháp phát triển phần mềm trong đó các lập trình viên thường xuyên hợp nhất các code change của họ vào một kho lưu trữ dùng chung. CI giúp đảm bảo codebase luôn ổn định và không xảy ra xung đột giữa các nhánh code khác nhau.
9. Bộ công cụ phát triển phần mềm (SDK) là gì?
SDK là một bộ công cụ giúp các developer xây dựng các ứng dụng phần mềm. Thường bao gồm một trình biên dịch, trình debug và các tiện ích khác. Một số SDK phổ biến được sử dụng để phát triển backend bao gồm Java Development Kit (JDK) và Python Software Development Kit (SDK).
10. Higher-order function là gì? Tại sao chúng hữu ích?
Higher-order function là các hàm lấy các hàm khác làm đối số. Các chức năng này giúp trừu tượng hóa các mẫu code phổ biến. Ví dụ: một hàm higher-order có thể tạo một hàm ghi nhật ký các đối số mà nó được gọi, điều này rất hữu ích trong việc debug.
11. Microservice là gì?
Theo cách hiểu đơn giản thì microservices là một kiến trúc phần mềm, thường được xây dựng thành các ứng dụng lớn, phức tạp, dễ bảo trì và mở rộng quy mô. Một trong những lợi ích của việc sử dụng microservice là chúng có thể được viết bằng các ngôn ngữ lập trình khác nhau và được triển khai trên các máy chủ khác nhau.
Các ví dụ phổ biến về microservice bao gồm xác thực người dùng, xử lý thanh toán và thao tác hình ảnh.
Câu hỏi về API
12. Bạn sẽ thiết kế một API như thế nào?
Khi thiết kế, API phải dễ sử dụng và được ghi chép đầy đủ. Điều quan trọng nữa là phải xem xét tính bảo mật của API và đảm bảo rằng chỉ những người dùng được ủy quyền mới có thể truy cập dữ liệu. Ngoài ra, API sẽ có thể xử lý một số lượng lớn request mà không làm quá tải máy chủ.
13. Sự khác biệt giữa API RESTful và SOAP là gì?
API RESTful được thiết kế để dễ sử dụng và được ghi chép đầy đủ. Chúng sử dụng một bộ quy tắc tiêu chuẩn, giúp dễ học và sử dụng. Mặt khác, API SOAP được thiết kế để tăng độ bảo mật và có thể xử lý số lượng lớn request. Tuy nhiên, chúng khá phức tạp khi tìm hiểu và sử dụng.
14. Khi thực hiện lệnh gọi API bị lỗi, bạn sẽ xử lý như thế nào?
Khi thực hiện lệnh gọi API, theo nguyên tắc là xử lý lỗi theo cách nhất quán với phần còn lại của ứng dụng. Ví dụ: nếu API trả về lỗi 404, ta có thể hiển thị thông báo cho người dùng nói rằng không thể tìm thấy dữ liệu.
Câu hỏi về cơ sở dữ liệu
15. Bạn sẽ xử lý như thế nào để tối ưu hóa cơ sở dữ liệu hiện có?
Quá trình này có thể được thực hiện bằng cách chạy các tác vụ bảo trì định kỳ, chẳng hạn như lập index dữ liệu hoặc xóa dữ liệu cũ không còn cần thiết. Ngoài ra, việc giám sát hiệu suất của cơ sở dữ liệu và đảm bảo nó có thể xử lý độ load của ứng dụng là rất quan trọng.
16. Sự khác biệt giữa cơ sở dữ liệu quan hệ và cơ sở dữ liệu phi quan hệ là gì?
Cơ sở dữ liệu quan hệ lưu trữ dữ liệu trong bảng và sử dụng primary key để xác định từng hàng. Mặt khác, cơ sở dữ liệu phi quan hệ lưu trữ dữ liệu trong tài liệu và sử dụng ID đối tượng để xác định từng bản ghi.
17. Bạn sẽ truy vấn dữ liệu từ cơ sở dữ liệu MongoDB như thế nào?
MongoDB sử dụng ngôn ngữ truy vấn có tên là MongoDB Query Language (MQL). Chúng ta sẽ sử dụng phương thức find() để truy vấn dữ liệu từ cơ sở dữ liệu MongoDB. Phương thức này lấy một tập hợp các tham số chỉ định làm tiêu chí cho truy vấn. Ví dụ: để tìm tất cả tài liệu trong bộ sưu tập "users" có "firstName" là "Minh", ta sẽ sử dụng truy vấn sau:
db.users.find({"firstName": “Minh"})
18. Một số lợi ích của việc sử dụng cơ sở dữ liệu NoSQL là gì?
Cơ sở dữ liệu NoSQL có một vài lợi thế so với cơ sở dữ liệu quan hệ. Chúng thường có khả năng mở rộng hơn và dễ quản lý hơn. Ngoài ra, chúng có thể linh hoạt hơn vì chúng không yêu cầu lược đồ. Tuy nhiên, cơ sở dữ liệu NoSQL có thể khó truy vấn và chúng thường không cung cấp mức độ nhất quán dữ liệu so với cơ sở dữ liệu quan hệ.
19. Bạn chuẩn hóa dữ liệu trong cơ sở dữ liệu quan hệ như thế nào?
Để chuẩn hóa dữ liệu trong cơ sở dữ liệu quan hệ, ta sẽ tạo các bảng riêng biệt cho từng loại thực thể (entity) và sử dụng foreign key để liên kết dữ liệu. Ví dụ: nếu ta có bảng "người dùng" và bảng "đơn đặt hàng", ta sẽ sử dụng foreign key để liên kết dữ liệu trong hai bảng.
Câu hỏi về Khả năng mở rộng (Scalability)
20. Bạn sẽ thiết kế một hệ thống phần mềm có khả năng mở rộng như thế nào?
Khi thiết kế một hệ thống phần mềm có khả năng mở rộng, điều cần thiết là phải xem xét nhu cầu của ứng dụng. Ví dụ: nếu ứng dụng cần xử lý nhiều người dùng đồng thời, ta có thể thiết kế hệ thống bằng kiến trúc microservices. Kiến trúc này cho phép mỗi thành phần của hệ thống được mở rộng quy mô một cách độc lập.
Ngoài ra, ta có thể sử dụng message queue để tách các thành phần của hệ thống. Điều này sẽ cho phép mỗi thành phần mở rộng quy mô một cách độc lập mà không ảnh hưởng đến hiệu suất của các thành phần khác.
21. Một số vấn đề phổ biến về khả năng mở rộng là gì? Làm thế nào để có thể giải quyết được vấn đề đó?
Một số vấn đề phổ biến về khả năng mở rộng bao gồm giảm hiệu suất, mất dữ liệu và downtime. Ta có thể giải quyết các sự cố này bằng nhiều kỹ thuật khác nhau, chẳng hạn như caching, phân đoạn và sao chép. Ngoài ra, điều quan trọng là phải có một kiến trúc được thiết kế tốt có thể xử lý tải trọng nặng.
22. Sự khác biệt giữa scale-out và scale-up là gì?
Scale out và scale up là hai cách tiếp cận khác nhau để tăng công suất hoặc hiệu suất của hệ thống. Scale-out liên quan đến việc thêm các thành phần bổ sung vào hệ thống, trong khi scale up liên quan đến việc làm cho các tính năng hiện có trở nên mạnh mẽ hơn.
Scale out được dùng nhiều trong việc xử lý các ứng dụng web hoặc các hệ thống khác có khả năng parallelizable cao vì nó cho phép tăng công suất. Scale-up có thể phù hợp hơn khi làm việc với các hệ thống cũ hoặc những hệ thống không thể parallelizable một cách hiệu quả.
Câu hỏi về bảo mật
23. Một số rủi ro bảo mật phổ biến khi xây dựng web application là gì?
Một số rủi ro bảo mật phổ biến khi xây dựng web application bao gồm:
-
SQL injection: một kiểu tấn công trong đó mã độc được chèn vào câu lệnh SQL, dẫn đến việc thực thi các hành động ngoài ý muốn.
-
Cross-site scripting (XSS): Các cuộc tấn công XSS xảy ra khi mã độc được đưa vào một trang web, dẫn đến việc thực hiện các hành động không chủ ý.
-
Cross-site request forgery (CSRF): các cuộc tấn công CSRF xảy ra khi một kẻ xấu lừa nạn nhân gửi yêu cầu thực hiện một hành động không mong muốn, chẳng hạn như thay đổi mật khẩu hoặc chuyển tiền.
24. Bạn sẽ triển khai xác thực và ủy quyền trên một dự án mới như thế nào?
Có nhiều cách để triển khai xác thực và ủy quyền trên một dự án mới. Đầu tiên là sử dụng dịch vụ hiện có của bên thứ ba, chẳng hạn như Auth0 hoặc Okta. Một cách khác là triển khai giải pháp bằng cách sử dụng JSON Web Tokens (JWT) hoặc công nghệ tương tự.
Dù thế, ta cần tạo một trang đăng nhập nơi người dùng có thể nhập thông tin đăng nhập của họ. Khi thông tin xác thực của người dùng đã được xác minh, ta sẽ tạo JWT và gửi lại cho người dùng. Sau đó, người dùng sẽ cần gửi JWT với mỗi yêu cầu xác thực.
Ta cũng cần triển khai hệ thống ủy quyền để kiểm tra xem người dùng có quyền chính xác để truy cập vào một tài nguyên cụ thể hay không. Một cách để làm điều này là tạo vai trò và gán người dùng cho những vai trò đó. Sau đó, ta sẽ sử dụng thông tin đó để kiểm tra quyền của người dùng khi xử lý từng yêu cầu.
25. Sự khác biệt giữa cookie và session là gì?
Cookie là một phần dữ liệu nhỏ được lưu trữ trên trình duyệt của người dùng. Session là cấu trúc dữ liệu phía máy chủ chứa thông tin về session hiện tại của người dùng.
Cookie lưu trữ thông tin như ID người dùng, tùy chọn ngôn ngữ hoặc bất kỳ tùy chọn nào khác. Session lưu trữ thông tin từ một loạt request, chẳng hạn như giỏ hàng của người dùng hoặc thông tin khác cần được duy trì trong nhiều request.
Câu hỏi về testing
26. Bạn sẽ thử nghiệm một tính năng mới bằng cách nào?
Khi thử nghiệm một tính năng mới, trước tiên ta cần viết một bài test về chức năng của tính năng mới. Cần phải tách biệt các thử nghiệm này khỏi bất kỳ code nào khác trong hệ thống.
Nếu test không thành công, ta cần debug và tìm nguyên nhân gây ra lỗi. Sau khi tìm ra nguyên nhân, ta sẽ sửa và chạy lại kiểm tra. Nếu pass được test, thì có thể commit code và chuyển sang thử nghiệm các tính năng khác.
27. Bạn sẽ tích hợp các bài test vào quy trình làm việc của mình như thế nào?
Khi tích hợp các test vào quy trình làm việc, ta cần tạo một môi trường thử nghiệm phản ánh môi trường production càng sát càng tốt. Môi trường này cần phải thiết lập với tất cả các dữ liệu và dependency cần thiết.
Khi đã thiết lập môi trường thử nghiệm, ta cần viết các bài test về chức năng của hệ thống. Các thử nghiệm này sẽ được chạy tự động bất cứ khi nào code mới được đẩy vào kho lưu trữ. Nếu bất kỳ thử nghiệm nào không thành công, bản dựng sẽ được đánh dấu là không thành công và trả về thông báo.
Hơn thế nữa ta nên chạy thử nghiệm theo cách thủ công trước mỗi lần phát hành. Điều này sẽ đảm bảo rằng tất cả các chức năng đang hoạt động như mong đợi và không có hồi quy.
28. Một số bước kiểm tra hiệu suất là gì?
Bước 1. Xác định các khu vực quan trọng của ứng dụng cần kiểm tra.
Bước 2. Tạo các trường hợp kiểm tra trong các khu vực đó của ứng dụng.
Bước 3. Chạy các trường hợp kiểm tra và thu thập dữ liệu về hiệu suất của ứng dụng.
Bước 4. Phân tích dữ liệu và xác định bất kỳ khu vực nào đã được cải tiến.
29. Tại sao các bài test TDD được viết trước khi code?
TDD (Phát triển dựa trên thử nghiệm) là một phương pháp lập trình trong đó phải viết test trước khi code. Bằng cách viết các bài test trước, các lập trình viên có thể đảm bảo rằng code của họ đáp ứng các yêu cầu. Ngoài ra, TDD có thể giúp tìm lỗi sớm và ngăn không cho chúng được đưa vào code. Tuy nhiên, TDD có thể tốn nhiều thời gian và yêu cầu hiểu rõ về các nguyên tắc test.
Câu hỏi về deploy
30. Bạn sẽ deploy phiên bản mới của ứng dụng như thế nào?
Có nhiều cách để triển khai phiên bản mới của ứng dụng. Đầu tiên là sử dụng một công cụ như Ansible hoặc Chef để tự động hóa quy trình. Một cách khác là chạy các tập lệnh cần thiết trên mỗi máy chủ theo cách thủ công.
Nếu sử dụng một công cụ như Ansible hoặc Chef, ta cần cập nhật các tệp cấu hình và chạy công cụ. Quá trình này triển khai code mới cho tất cả các máy chủ trong môi trường.
Nếu deploy code theo cách thủ công, ta phải đăng nhập vào từng máy chủ và chạy các tập lệnh cần thiết. Phương thức này sẽ cập nhật code trên từng máy chủ riêng lẻ.
Sau khi code mới được triển khai, ta cần chạy thử nghiệm để đảm bảo mọi thứ hoạt động như mong đợi. Nếu có bất kỳ sự cố nào, ta cần phải khôi phục các thay đổi và khắc phục sự cố, sau đó triển khai lại code.
31. Làm cách nào để khôi phục deploy không thành công?
Để khôi phục quá trình deploy không thành công, ta cần hoàn tác mọi thay đổi được thực hiện trong quá trình deploy. Quá trình này có thể bao gồm revert các code change, khởi động lại dịch vụ hoặc khôi phục các thay đổi cơ sở dữ liệu. Khi các thay đổi đã quay trở lại, ta có thể deploy lại code.
Lời kết
Trên đây là tổng hợp những câu hỏi phỏng vấn technical mà Back-end Developer thường gặp. Để chuẩn bị đầy đủ, hãy nghiên cứu các thuật toán, cấu trúc dữ liệu và nguyên tắc thiết kế phần mềm. Chỉ cần nỗ lực thêm một chút, bạn sẽ có thể để lại ấn tượng với nhà tuyển dụng.
TẠO TÀI KHOẢN MỚI: XEM FULL “1 TÁCH CODEFEE” - NHẬN SLOT TƯ VẤN CV TỪ CHUYÊN GIA - CƠ HỘI RINH VỀ VOUCHER 200K