Ngoài lề: Tụi mình có 1 group discord về IT tên là "Code club Vietnam" với 1k thành viên, có các anh tech lead, senior, junior ở các công ty lớn cùng các bạn sinh viên trong ngành IT. Nếu yêu thích, hãy tham gia thảo luận với tụi mình.
Trong quá trình phỏng vấn và nằm vùng trong các group thì mình có tổng hợp được một số câu hỏi phỏng vấn cho Back-end. Mình học golang nên 1/4 câu hỏi sẽ liên quan đến go, 3/4 còn lại là câu hỏi mà back-end nào cũng có thể bị hỏi.
Để trả lời một câu hỏi không chỉ là đọc được vài khái niệm trên mạng mà chém với nhà tuyển dụng. Khi bạn hiểu được một vấn đề là khi bạn có thể trả lời được các câu hỏi:
- 4W + 1H (What, Why, When, Where, How)
- Có dễ maintain, dễ training không, chi phí như nào?
- Điểm mạnh, điểm yếu là gì, rồi đem so sánh nó với một cái tương tự (dẫn chứng thực tế, từ sách hay các ông lớn).
Dưới đây là 100+ câu hỏi phỏng vấn. Hiện tại chỉ có câu hỏi, câu trả lời mình sẽ update ở các phần sau. Ngoài ra nhiều câu mình cũng không biết, nên nếu bạn biết hãy comment để mọi người cùng học hỏi nhé.
I. Golang
- Tại sao dùng golang?
- Concurrency trong golang
- Channel là gì?
- Sự khác nhau giữa channel buffer và unbuffer
- Giải thích method & interface
- Slice là gì?
- Pointer trong go
- Làm sao để dừng một chương trình go routine
- Giải thích sự khác nhau giữa map và struct
- Race condition là gì?
- Deadlock là gì?
- GRPC là gì?
- Generics trong golang là gì?
- Defer trong go để làm gì?
- Select trong golang
- Khi nào sử dụng panic?
- Viết unit testing như nào
- Các trường hợp memory leak
- Thiết kế chức năng graceful shutdown golang
- garbage collection
- Giải thích go runtime, go schedule
- Tại sao dùng gin framework (hoặc framework mà bạn sử dụng)
- Làm sao để monitor được RAM
- Manual management heap như nào cho đỡ lâu
- Golang có OOP không
- Phiên bản mới nhất của golang là gì?
- Sự khác nhau giữa nil và empty slice
- Tại sao dùng channel truyền data trong khi có thể implement truyền thẳng trên go func
- Làm sao để nối chuỗi
- Sự khác nhau giữa data race và race condition
- Nil channel để làm gì?
- Làm sao để xử lý dữ liệu bị sai khi ở múi giờ khác nhau
II. Database
- ORM là gì?
- Tối ưu hiệu suất của một API bằng cách nào?
- Cách remote debug trên môi trường production mà không dùng log hay chọc vào database
- Phân biệt SQL và NoSQL
- Tại sao chọn PostgreSQL (hoặc database mà bạn sử dụng)
- Xử lý race condition trong database
- Làm sao để tối ưu performance của slow query
- SQL injection là gì?
- Sự khác nhau giữa cluster INDEX và non-cluster INDEX
- Sự khác nhau giữa WHERE và HAVING
- Giải thích ACID
- Sự khác nhau giữa UNION và UNION ALL?
- Xử lý câu lệnh tìm kiếm trong elasticSearch như thế nào?
- Chia partition trong database như thế nào?
- Setup replication database như thế nào?
- Giải thích về grapQL
- Tại sao sử dụng elasticSearch
- master | slave | sharding trong noSQL
- Phân quyền cho developer trong database như thế nào?
- Làm sao để INSERT nhiều sản phẩm vào database
- Cách phân trang trong dữ liệu
- CDC là gì?
- Sự khác nhau giữa INNER JOIN và LEFT OUTER JOIN
III. Design & Architecture
- Giải thích SOLID
- Nguyên tắc DI và IOC
- Định lý CAP? Các use-case khi sử dụng
- Sự khác nhau giữa Domain Driven Design vs Event Driven Design
- Sự khác nhau giữa Clean architecture vs Layered architecture
- Object Oriented Design
- Giải thích repository pattern
- DTO và DAO
- Giải thích về TCP và UDP
- Sự khác nhau giữa proxy và reverse proxy
- Khi làm thường sử dụng pattern nào?
- Giải thích về connection pool
- Giải thích Websocket
- CPU cache
- LRU cache
- Gossip protocol là gì
- Hệ thống linux phân quyền như thế nào?
IV. Câu hỏi tình huống (trình bày ý tưởng, sơ đồ cụ thể)
- Thiết kế hệ thống chơi game
- Làm sao để build 1 hệ thống crawl data
- Dựng một reverse proxy như thế nào
- Giải thích cách bạn làm CI/CD
- Mô tả bức tranh sau
- Làm sao để xử lý hàng triệu notification
- Mô tả cách tích hợp thư viện thứ 3 như payment hay delivery
- Điều gì xảy ra khi user nhập 1 URL
- Xây dựng chức năng gửi mail
- Một số phương pháp bảo mật client-server | server -server
- Thiết kế chức năng livestream
- Password được lưu như thế nào trong database
- Làm sao để tự tạo sub-domain
- Có sử dụng log bao giờ chưa?
- Bạn đã dùng monitor bao giờ chưa?
- Làm sao để scale up một hệ thống chat
- Giữa connection pool max và message queue thì chọn cái nào?
- Xử lý caching như thế nào?
- Làm sao để hạn chế user request nhiều lần
- Phân quyền cho người dùng như thế nào?
- Giải thích login social với oauth2
- Kể về cách deploy một sản phẩm lên cloud?
- Xây dựng chức năng bình luận như thế nào?
- Xây dựng chức năng undo | redo như nào?
- Giải thích về SSO
- Làm sao để kiểm tra sức khỏe của các nodes (check heatbeat)
- Thiết kế chức năng lưu ảnh, caching ảnh
- Xử lý automation test như thế nào?
V. Others
- Phân biệt giữa git rebase | merge | squash
- Sự khác nhau giữa pull | git fetch
- Lamda trong AWS để làm gì?
- Giải thích lệnh sudo chmod - R 777 /var/www/html/
- K8S là gì?
- Làm sao để build source code thành docker image
- Sự khác nhau giữa docker kill và docker desktop
- Sự khác biệt giữa Docker và Docker compose
- Docker network để làm gì, nếu không dùng thì có cách nào khác không?
- Gateway là gì?
- CDN là gì?
- Sự khác nhau giữa gói snap và apt
- Với việc sử dụng JWT, làm sao để đăng xuất toàn bộ thiết bị
- So sánh giữa Rabbitmq và kafka
- Use-case sử dụng redis