[System design interview] CHƯƠNG 3: SYSTEM DESIGN INTERVIEW FRAMEWOR
Đây là bản dịch tiếng Việt của "System design interview" (Tác giả: Unknown Author). Bài được dịch tự động bởi Aha! Mind Interpreter — pipeline dịch sách kỹ thuật sử dụng Gemini Flash.
⚠️ Bản dịch tự động — có thể có lỗi. Vui lòng đối chiếu với bản gốc tiếng Anh khi cần độ chính xác cao.
CHƯƠNG 3: SYSTEM DESIGN INTERVIEW FRAMEWORK
Bạn vừa nhận được một buổi phỏng vấn trực tiếp (on-site interview) đáng mơ ước tại công ty trong mơ của mình. Điều phối viên tuyển dụng gửi cho bạn lịch trình trong ngày hôm đó. Khi lướt qua danh sách, bạn cảm thấy khá tự tin cho đến khi mắt bạn dừng lại ở buổi phỏng vấn này - System Design Interview.
Các buổi phỏng vấn System Design thường rất đáng sợ. Câu hỏi có thể mơ hồ như “thiết kế sản phẩm X nổi tiếng?”. Các câu hỏi thường không rõ ràng và có vẻ quá rộng. Sự lo lắng của bạn là điều dễ hiểu. Suy cho cùng, làm sao một ngư ời có thể thiết kế một sản phẩm phổ biến chỉ trong một giờ, trong khi sản phẩm đó đã cần hàng trăm, thậm chí hàng nghìn kỹ sư để xây dựng?
Tin tốt là không ai mong đợi bạn làm được điều đó. Thiết kế hệ thống (System Design) trong thế giới thực cực kỳ phức tạp. Ví dụ, tìm kiếm của Google có vẻ đơn giản một cách đánh lừa; tuy nhiên, lượng công nghệ làm nền tảng cho sự đơn giản đó thực sự đáng kinh ngạc. Nếu không ai mong đợi bạn thiết kế một hệ thống thực tế trong một giờ, vậy lợi ích của một buổi phỏng vấn System Design là gì?
Buổi phỏng vấn System Design mô phỏng quá trình giải quyết vấn đề trong đời thực, nơi hai đồng nghiệp cộng tác để giải quyết một vấn đề mơ hồ và đưa ra một giải pháp đáp ứng mục tiêu của họ. Vấn đề là mở (open-ended), và không có câu trả lời hoàn hảo. Thiết kế cuối cùng ít quan trọng hơn so với công sức bạn bỏ ra trong quá trình thiết kế. Điều này cho phép bạn thể hiện kỹ năng thiết kế của mình, bảo vệ các lựa chọn thiết kế và phản hồi các góp ý một cách xây dựng.
Hãy cùng thay đổi góc nhìn và xem xét những gì diễn ra trong đầu người phỏng vấn khi cô ấy bước vào phòng họp để gặp bạn. Mục tiêu chính của người phỏng vấn là đánh giá chính xác năng lực của bạn. Điều cuối cùng cô ấy muốn là đưa ra một đánh giá không rõ ràng vì buổi phỏng vấn diễn ra không tốt và không có đủ tín hiệu. Vậy người phỏng vấn tìm kiếm điều gì trong một buổi phỏng vấn System Design?
Nhiều người nghĩ rằng phỏng vấn System Design chỉ xoay quanh kỹ năng thiết kế kỹ thuật của một người. Nó còn hơn thế rất nhiều. Một buổi phỏng vấn System Design hiệu quả sẽ đưa ra những tín hiệu mạnh mẽ về khả năng cộng tác, làm việc dưới áp lực và giải quyết sự mơ hồ một cách xây dựng của một người. Khả năng đặt câu hỏi tốt cũng là một kỹ năng thiết yếu, và nhiều người phỏng vấn đặc biệt tìm kiếm kỹ năng này.
Một người phỏng vấn giỏi cũng tìm kiếm các dấu hiệu cảnh báo (red flags). Thiết kế quá mức cần thiết (Over-engineering) là một căn bệnh thực sự của nhiều kỹ sư khi họ quá chú trọng vào sự tinh khiết trong thiết kế và bỏ qua các đánh đổi (tradeoffs). Họ thường không nhận thức được chi phí tích lũy của các hệ thống được thiết kế quá mức, và nhiều công ty phải trả giá đắt cho sự thiếu hiểu biết đó. Bạn chắc chắn không muốn thể hiện xu hướng này trong một buổi phỏng vấn System Design. Các dấu hiệu cảnh báo khác bao gồm tư duy hạn hẹp, bướng bỉnh, v.v.
Trong chương này, chúng ta sẽ cùng tìm hiểu một số mẹo hữu ích và giới thiệu một khung làm việc đơn giản, hiệu quả để giải quyết các vấn đề trong phỏng vấn System Design.
QUY TRÌNH 4 BƯỚC CHO BUỔI PHỎNG VẤN SYSTEM DESIGN HIỆU QUẢ
Mỗi buổi phỏng vấn System Design đều khác nhau. Một buổi phỏng vấn System Design tốt là mở (open-ended) và không có giải pháp nào phù hợp cho tất cả (one-size-fits-all). Tuy nhiên, có những bước và điểm chung cần được đề cập trong mọi buổi phỏng vấn System Design.
BƯỚC 1 - HIỂU RÕ VẤN ĐỀ VÀ XÁC ĐỊNH PHẠM VI THIẾT KẾ
"Tại sao con hổ lại gầm?"
Một cánh tay giơ lên ở cuối lớp.
"Vâng, Jimmy?", cô giáo đáp.
"Vì nó ĐÓI."
"Rất tốt, Jimmy."
Trong suốt thời thơ ấu của mình, Jimmy luôn là người đầu tiên trả lời các câu hỏi trong lớp. Bất cứ khi nào cô giáo đặt câu hỏi, luôn có một đứa trẻ trong lớp thích thử trả lời câu hỏi đó, bất kể cậu bé có biết câu trả lời hay không. Đó chính là Jimmy.
Jimmy là một học sinh xuất sắc. Cậu bé tự hào vì biết tất cả các câu trả lời một cách nhanh chóng. Trong các kỳ thi, cậu bé thường là người đầu tiên hoàn thành các câu hỏi. Cậu bé là lựa chọn hàng đầu của giáo viên cho bất kỳ cuộc thi học thuật nào.
ĐỪNG giống như Jimmy.
Trong một buổi phỏng vấn System Design, việc đưa ra câu trả lời nhanh chóng mà không suy nghĩ sẽ không mang lại cho bạn điểm cộng nào. Trả lời mà không hiểu rõ các yêu cầu là một dấu hiệu cảnh báo lớn (red flag) vì buổi phỏng vấn không phải là một cuộc thi đố vui. Không có câu trả lời đúng.
Vì vậy, đừng vội vàng đưa ra giải pháp ngay lập tức. Hãy chậm lại. Suy nghĩ kỹ lưỡng và đặt câu hỏi để làm rõ các yêu cầu và giả định. Điều này cực kỳ quan trọng.
Với tư cách là một kỹ sư, chúng ta thích giải quyết các vấn đề khó và đi thẳng vào thiết kế cuối cùng; tuy nhiên, cách tiếp cận này có khả năng khiến bạn thiết kế sai hệ thống. Một trong những kỹ năng quan trọng nhất của một kỹ sư là đặt đúng câu hỏi, đưa ra các giả định phù hợp và thu thập tất cả thông tin cần thiết để xây dựng một hệ thống. Vì vậy, đừng ngại đặt câu hỏi.
Khi bạn đặt câu hỏi, người phỏng vấn sẽ trực tiếp trả lời hoặc yêu cầu bạn đưa ra các giả định của mình. Nếu trường hợp sau xảy ra, hãy ghi lại các giả định của bạn lên bảng trắng hoặc giấy. Bạn có thể cần đến chúng sau này.
Nên hỏi những loại câu hỏi nào? Hãy đặt câu hỏi để hiểu rõ các yêu cầu chính xác. Dưới đây là danh sách các câu hỏi giúp bạn bắt đầu:
-
Chúng ta sẽ xây dựng những tính năng cụ thể nào?
-
Sản phẩm có bao nhiêu người dùng?
-
Công ty dự kiến mở rộng quy mô (scale up) nhanh đến mức nào? Quy mô dự kiến trong 3 tháng, 6 tháng và một năm là bao nhiêu?
-
Ngăn xếp công nghệ (technology stack) của công ty là gì? Chúng ta có thể tận dụng những dịch vụ hiện có nào để đơn giản hóa thiết kế?
Ví dụ Nếu bạn được yêu cầu thiết kế một hệ thống news feed, bạn sẽ muốn đặt những câu hỏi giúp làm rõ các yêu cầu. Cuộc trò chuyện giữa bạn và người phỏng vấn có thể trông như sau:
Candidate : Đây là một ứng dụng di động (mobile app)? Hay một ứng dụng web (web app)? Hay cả hai?
Interviewer : Cả hai.
Candidate : Những tính năng quan trọng nhất cho sản phẩm là gì? Interviewer : Khả năng tạo bài đăng và xem news feed của bạn bè.
Candidate : News feed được sắp xếp theo thứ tự thời gian đảo ngược (reverse chronological order) hay một thứ tự cụ thể? Thứ tự cụ thể có nghĩa là mỗi bài đăng được gán một trọng số khác nhau. Ví dụ, các bài đăng từ bạn bè thân thiết của bạn quan trọng hơn các bài đăng từ một nhóm. Interviewer : Để đơn giản, chúng ta hãy giả định news feed được sắp xếp theo thứ tự thời gian đảo ngược.
Candidate : Một người dùng có thể có bao nhiêu bạn bè? Interviewer : 5000
Candidate : Lưu lượng truy cập là bao nhiêu? Interviewer : 10 triệu người dùng hoạt động hàng ngày (DAU).
Candidate : Feed có thể chứa hình ảnh, video hay chỉ văn bản? Interviewer : Nó có thể chứa các tệp đa phương tiện (media files), bao gồm cả hình ảnh và video.