Top 5 câu hỏi phỏng vấn Software Architect hàng đầu
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ì?
A software architect is a software development professional who makes high-level design choices and oversees the overall software structure. A software architect is responsible for creating a software system that meets all the technical and operational requirements while also being easy to maintain and extend.
Sofware Architect là người phát triển phần mềm chuyên nghiệp, đưa ra quyết định lựa chọn high-level design và giám sát kiến trúc phần mềm tổng thể. Software Architect chịu trách nhiệm tạo ra một hệ thống phần mềm đáp ứng tất cả các yêu cầu kỹ thuật và vận hành đồng thời đảm bảo cho hệ thống dễ bảo trì và mở rộng.
Đị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).
Load balancing is a simple way to spread work across multiple machines or groups of devices. In this type of load balancing, requests are split up and sent to different machines in a circle. This ensures that all machines get the same number of requests and that none are overloaded or underloaded. Cân bằng tải cách đơn giản để dàn trải công việc trên nhiều máy hoặc nhiều thiết bị. Khi có một lượng lớn yêu cầu gửi tới, load balancing sẽ chia đều tất cả cho các máy, đảm bảo không có máy thì load quá nhiều, máy thì load quá ít.
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.
Horizontal scaling means scaling by adding more machines to your pool of resources (also described as “scaling out”), whereas vertical scaling refers to scaling by adding more power (e.g. CPU, RAM) to an existing machine (also described as “scaling up”). Mở rộng theo chiều ngang là cách thêm máy móc vào tài nguyên xử lý (còn được hiểu là mở rộng quy mô), trong khi đó vertical scaling, mở rộng theo chiều dọc đề cập đến việc tăng RAM, tăng CPU vào 1 máy hiện tại.
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.
Sharding refers to the breaking up of our data into chunks (shards). The benefit of sharding is that it allows us to scale our database for large-scale systems. Sharding đề cập đến việc chia nhỏ dữ liệu thành các khối nhỏ (gọi là chunks). Lợi ích của sharding là cho phép mở ộng cơ sở dữ liệu cho những hệ thống lớn hoặc cực lớn.
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
- L Làm thêm giờ là tốt hay xấu? Tips OT hiệu quả hơn
- 7 7 vị trí CNTT không cần code giỏi mà vẫn thành công
- B Bức tranh toàn cảnh hệ sinh thái khởi nghiệp công nghệ Việt Nam 2024
- R Reskill là gì? Sự khác nhau giữa Reskill và Upskill
- U Upskill là gì? 5 cách Upskilling bản thân hiệu quả
- 5 5 điều bạn cần phải biết khi bắt đầu một công việc mới
- 3 3 tips để “marketing” CV đến nhà tuyển dụng hiệu quả
- T Tìm hiểu ngành kỹ thuật máy tính: Học gì? Học ở đâu? Cơ hội nghề nghiệp
- 4 4 cách giúp bạn thoát khỏi nhàm chán trong công việc
- M Mẹo nâng cao kỹ năng xã hội để thành công trong công việc