Software Architect, chức vụ chỉ nghe thôi đã thấy to, vậy phỏng vấn Software Architect có gì đặc biệt? Những câu hỏi và nội dung kiến thức nào thường được đề cập khi phỏng vấn Software Architect?


Là một người chịu trách nhiệm lớn cho sự thành công hay thất bại của dự án phần mềm. SA là công việc stress. Nhưng trách nhiệm lớn đồng nghĩa với lương cao. Tất nhiên lượng kiến thức nằm trong đầu cũng thuộc dạng khủng khiếp. Thử lướt xem mấy câu hỏi phỏng vấn SA thì có gì nào?
Rồi, bắt đầu thôi anh em! Dạo qua vài ba câu định nghĩa chưa có gì khó. Phần sau sẽ là những câu hỏi khó hơn.
1. Software Architect là gì?
Câu hỏi đầu tiên phỏng vấn Software Architect chưa đi ngay vào các khái niệm kiến thức mà đi vào định nghĩa. Vậy Sofware Architect là gì?


Định nghĩa rất chi là dài dòng nhưng có thể tóm gọn lại như sau:
- Là người phát triển phần mềm chuyên nghiệp
- Đưa ra quyết định cho kiến trúc của phần mềm (tất nhiên phải đáp ứng yêu cầu)
- Giám sát quá trình phát triển phần mềm (đảm bảo đúng như thiết kế)
- Hệ thống thiết kế ra phải đảm bảo dễ bảo trì và mở rộng về sau
Hiểu được trách nhiệm và yêu cầu của vị trí Solution Architect giúp anh em hiểu rõ hơn những việc mình cần làm, những kiến thức cần show ra cho nhà tuyển dụng khi apply vị trí này. Anh em cũng có thể tham khảo thêm bài viết này.
Một số câu hỏi anh em có thể xem qua:
- Trách nhiệm của Solution Architect?
- Những skills nào cần có nếu bạn là Solution Architect?
Tiếp tới với câu hỏi số hai
Tham khảo việc làm Solution Architect hấp dẫn trên TopDev
2. Load Balancing là gì?
Câu hỏi số hai phỏng vấn Software Architect liên quan tới các khái niệm thường được sử dụng trong thiết kế kiến trúc phần mềm (high level design).


Các câu hỏi liên quan tới khái niệm yêu cầu anh em cần trả lời chính xác ở mức tuyệt đối, bởi chỉ cần hiểu sai hoặc không chắc chắn mà đã đem vào cho anh em làm thì khả năng cao là bể. Vừa mất thời gian làm vừa gây stress cho team nếu không đáp ứng được yêu cầu về business.
Một số câu hỏi anh em có thể tham khảo:
- CAP Theorem là gì?
- Bốn loại system test là những loại nào?
- Tại sao chúng ta cần sử dụng WebSocket?
3. SOLID là gì?
Câu hỏi thứ ba phỏng vấn Software Architect vẫn là câu hỏi liên quan tới khái niệm, nhưng không còn là các khái niệm đơn lẻ như Load Balancing hay CAP Theorem. Câu hỏi này tập trung vào một trong những khái niệm quan trọng nhất khi thiết kế phần mềm.
SOLID là viết tắt của 5 nguyên tắc đóng vai trò cực quan trọng trong phát triển kiến trúc phần mềm.
- Single responsibility: nguyên tắc này chỉ ra rằng mỗi class chỉ nên thực hiện một việc duy nhất. Một phần cụ thể trong ứng dụng.
- Open/closed: nguyên tắc này chỉ ra rằng một module hoặc một class đóng cho việc sử đổi, nhưng lại mở cho việc kế thừa và mở rộng.
- Liskov substitution: nguyên tắc này cho phép thay thế các đối tượng của lớp cha bằng các đối tượng của lớp con mà không gây ảnh hưởng cho ứng dụng.
- Interface segregation: nguyên tắc này đảm bảo interface tốt nhất nên được chia nhỏ hết sức có thể
- Dependency inversion: nguyên tắc này đảm bảo rằng một lớp ở cấp cao (high level class) không nên dựa vào một lớp cấp thấp (low level class), mặc dù cả hai lớp đều có thể phụ thuộc vào một lớp cấp cao khác.


Một số khái niệm khác anh em có thể xem lại:
- ACID là gì?
- Nguyên tắc DRY (don’t repeat yourself – lặp lại ít thôi)
- Nguyên tắc DIE (duplicate is evil – lặp lại thì toang)
Tới với câu số 4 thôi anh em
4. Sự khác biệt giữa vertical scaling và horizontal scaling
Câu hỏi thứ 4 phỏng vấn Software Architect tập trung vào khả năng mở rộng (scaling). Bản thân SA phải chịu trách nhiệm cho bảo trì và mở rộng hệ thống. Ý ở câu hỏi đầu tiên định nghĩa SA anh em còn nhớ không?
Vậy để mở rộng được thì anh em cần biết khái niệm của mở rộng.


Chi tiết sâu hơn về cách thức anh em có thể tham khảo bài viết này. Các câu hỏi có thể đọc qua luôn:
- Microserice Architecture
- Fault tolerance là gì?
5. Database Sharing trong kiến trúc phần mềm
Câu hỏi cuối cùng trong bộ câu hỏi phỏng vấn Software Architect lần này liên quan tới Sharding, cụ thể hơn là khái niệm Database Sharding.
Cụ thể hơn có thể hiểu Sharding sẽ tách các hàng của một bảng dữ liệu lớn thành nhiều hàng khác nhau, được gọi là các partitions (vùng). Dữ liệu ở trong mỗi vùng, mỗi chunks sẽ hoàn toàn độc lập với dữ liệu trong mỗi vùng hoặc các chunks khác.




Chi tiết hơn về Database Sharding anh em có thể tham khảo bài viết này.
6. Tham khảo thêm để chuẩn bị phỏng vấn Solution Architect
- Understanding Database Sharding
- Load Balancers II – Determine which servers processes a request
- Scaling Horizontally vs. Scaling Vertically
Cảm ơn anh em đã đọc bài – Thank you so much for your time – Happy coding!
Tác giả: Kiên Nguyễn
- Software Architecture – Tìm hiểu Layers Pattern
- Các nhóm ngành công nghệ thông tin, liệu có phù hợp với bạn?
- SAGA Pattern trong Microservices
Xem thêm Việc làm Developer hấp dẫn trên TopDev