LÀM SAO ĐỂ VƯỢT QUA VÒNG PHỎNG VẤN BIG TECH KHI KHÔNG CÓ BACKGROUND VỀ THUẬT TOÁN VÀ COMPETITIVE PROGRAMING
Trong hành trình chinh phục các công ty Big Tech, nhiều software engineer thấy “chùn bước” khi đối mặt với vòng phỏng vấn thuật toán đặc biệt là những người không xuất thân từ môi trường đào tạo bài bản về tin học hoặc chưa từng tham gia các kỳ thi như ACM ICPC hay nền tảng thi đấu competitive programming.
Vậy người không có background về thuật toán thì có cơ hội nào không? Có thể đi đường vòng? Có thể học lại từ đầu? Và cần chiến lược ra sao để vẫn vượt qua các vòng tuyển chọn gắt gao?
Engineer Pro đã có buổi trò chuyện với anh Thành – giảng viên tại Engineer Pro, người đã đồng hành cùng nhiều học viên thiếu kiến thức thuật toán nhưng vẫn thành công apply vào Shopee, Tiktok, Amazon, v.v.
Trước tiên, anh có thể chia sẻ một chút về nền tảng học thuật của mình không ạ?
Anh học chính quy tại ĐH Khoa học Tự nhiên – ĐHQG TP.HCM, khóa K13. Ngành học của anh chủ yếu tập trung vào software development phát triển phần mềm, quy trình phát triển và các framework cụ thể. Về thuật toán thì anh chỉ học những môn cơ bản như Cấu trúc dữ liệu và Giải thuật, Hệ điều hành, Mạng máy tính,… Nhưng lúc đó anh học theo kiểu đối phó, không đi sâu.
Vậy với nền tảng như thế, khi đi làm, anh có cảm thấy mất phương hướng hay tự ti so với các bạn có nền tảng thuật toán vững không?
Chắc chắn là có. Khi đi phỏng vấn, anh mới thấy thuật toán rất quan trọng. Anh cảm thấy mình bị FOMO vì bạn bè cùng khóa, cùng môi trường nhưng họ học giỏi thuật toán hơn, chuẩn bị kỹ hơn và pass được nhiều công ty tốt. Anh bắt đầu cảm thấy bị bỏ lại phía sau.
Điển hình là lần đầu anh phỏng vấn Fresher vào Zalo bị loại vì một câu về Stack và Queue do không nắm vững kiến thức. Đó là cú thức tỉnh đầu tiên về tầm quan trọng của thuật toán. Nhưng lúc đó anh vẫn học theo kiểu đối phó, chỉ để trả bài chứ không thật sự đầu tư nghiêm túc.
May mắn là khi phỏng vấn vào công ty SEA Group với vai trò mobile, yêu cầu thuật toán không quá cao. Câu đầu tiên là merge hai sorted linked lists phải code bằng tay trên giấy, mất 40 phút mới xong nhưng vẫn pass được. Vòng hai chủ yếu về kiến thức iOS. Vòng ba là một bài xử lý chuỗi khá khó, anh làm không tốt, nhưng nhờ apply đúng vị trí mobile không yêu cầu thuật toán nhiều nên may mắn anh vẫn vượt qua.
Tuy nhiên, anh hiểu rõ rằng may mắn không thể lặp lại mãi. Khi thử sức với Grab vào năm 2019, anh gặp hai câu về binary search và DFS và bị loại vì không đủ kiến thức. Đó là lúc anh thật sự nghiêm túc học lại từ đầu.
May mắn khi đó anh làm việc cùng một người anh – người đã cho nhiều lời khuyên về cách học và luyện thuật toán hiệu quả. Từ đó, anh bắt đầu luyện LeetCode nghiêm túc hơn, vì hiểu rằng nếu muốn đi xa, đặc biệt là làm việc ở nước ngoài hoặc vào các công ty Big Tech thì không thể né tránh được vòng Data Structures & Algorithms, vốn luôn là cửa ải đầu tiên trong mọi quy trình tuyển dụng.
Vậy động lực nào giúp anh tiếp tục cố gắng để pass những công ty tiếp theo?
Anh tin vào việc cứ thử đi, không thử thì không biết khả năng của mình tới đâu. Có thể bạn chưa giỏi, nhưng vẫn nên apply để biết bản thân đang thiếu gì. Ví dụ như khi anh phỏng vấn vào SEA Group với vị trí mobile, mặc dù thuật toán bản thân chưa giỏi nhưng may mắn anh vẫn vượt qua được và có job offer.
Vậy anh bắt đầu ôn luyện DSA, system design như thế nào?
Trước khi có Engineer Pro thì anh tự ôn với LeetCode. Mỗi ngày đặt mục tiêu làm 2 bài, cuối tuần thì làm contest. Anh đặt ra nguyên tắc: không quan trọng làm nhanh hay chậm, mà quan trọng là bắt đầu.
Sau này anh học khóa của Engineer Pro, thì được hệ thống hóa hơn. Ngoài ra, anh cũng phân chia technical thành 3 mảng cần chuẩn bị: DSA & algorithm, Computer Science, và kiến thức platform (iOS chẳng hạn). Anh còn tạo riêng một note cá nhân để hệ thống lại kiến thức theo từng buổi phỏng vấn.
Làm sao để duy trì việc học mỗi ngày mà không bị nản?
Thật ra, giữ được sự kiên trì là chuyện rất khó – và anh cũng từng nản nhiều lần. Không phải lúc nào anh cũng giữ được nhịp độ học ổn định, nên điều đầu tiên là mình phải biết rõ mình đang theo đuổi điều gì.
Thời điểm anh bắt đầu cày LeetCode nghiêm túc là khi anh đặt mục tiêu apply vào các công ty Big Tech như Meta hay Amazon. Chính mục tiêu đó tạo cho anh một động lực rất lớn. Vậy nên, lời khuyên của anh là: hãy tự tạo cho mình một lý do đủ mạnh để theo đuổi.
Hãy tưởng tượng nếu mình vào được Big Tech:
Lương rất tốt,
Có cơ hội được sponsor sang một quốc gia khác,
Có chính sách đãi ngộ tốt cho cả gia đình,
Và một lộ trình thăng tiến rõ ràng.
Những điều đó sẽ tiếp thêm động lực cho bạn mỗi ngày.
Nếu nền tảng chưa đủ vững, bạn có thể đặt mục tiêu ngắn hạn trước – chẳng hạn vào các công ty yêu câu dễ thở hơn như Grab, Shopee, TikTok, OKX... Những công ty này thường yêu cầu thuật toán ở mức vừa phải. Mỗi lần đạt được một level, bạn sẽ có thêm tự tin để hướng đến những mục tiêu lớn hơn.
System Design ở mobile khá khác với backend. Trong mobile, bạn sẽ thường được yêu cầu tự thiết kế hoặc build lại một số subcomponent quen thuộc, ví dụ như image cache, file downloader,... Những thứ này trong thực tế đều có thư viện có sẵn, nhưng thay vì chỉ biết cách dùng, bạn cần thay đổi mindset:
“Tôi cần hiểu cách thư viện này hoạt động, cách nó được thiết kế. Nếu tôi phải viết lại từ đầu, tôi sẽ làm như thế nào để đảm bảo tính hệ thống và tối ưu nhất?”
Việc hiểu sâu như vậy không chỉ giúp bạn vượt qua vòng phỏng vấn, mà còn nâng cấp tư duy thiết kế trong công việc hằng ngày.
Ngoài ra, một phần quan trọng khác trong mobile system design là modular thiết kế app theo hướng module. Cái này cần trải nghiệm thực tế. Nếu bạn từng làm việc ở những dự án mobile đủ lớn, bạn sẽ hiểu được vì sao cần chia module và kiến trúc nào phù hợp.
Còn nếu chỉ học qua các bài viết hay lý thuyết mà không va chạm thực tế, sẽ rất khó để hiểu được mục đích sâu xa đằng sau các design pattern đó. Vậy nên, hãy cố gắng tìm môi trường có dự án lớn để thực chiến đó là cách học nhanh và hiệu quả nhất.
Ngoài LeetCode, anh còn tài liệu hay cách học nào khác không?
Hiện tại anh có follow một repo GitHub khá nổi tiếng chuyên về mobile design system, được phát triển bởi một anh rất có tiếng trong cộng đồng. Repo đó được rất nhiều người theo dõi và gần như là điểm tụ cho những ai đang học về system design trên mobile.
Bên cạnh đó, anh cũng thường lên Medium để tìm kiếm các bài viết về những câu hỏi hay gặp trong phỏng vấn. Ví dụ như nếu bạn là dev iOS, bạn nên tìm và luyện hết các câu hỏi về iOS được đề cập trên Medium.
Ngoài ra, anh thấy việc tận dụng cộng đồng và network cũng rất quan trọng. Nếu bạn biết một công ty nào đó đang tuyển và bạn muốn apply, bạn nên chủ động hỏi người quen bên trong để nắm được pattern phỏng vấn ở đó – ví dụ họ thường hỏi thuật toán gì, hoặc đi system design thì theo hướng nào. Việc này giúp bạn học tập trung và hiệu quả hơn thay vì ôm đồm mọi thứ.
Khi chuẩn bị cho vòng technical interview, anh thường chuẩn bị những gì?
Về phần technical, anh thường chia thành 3 nhóm chính:
DSA + System + Algorithm: Đây là phần cốt lõi trong các vòng phỏng vấn coding. Bao gồm các kiến thức về cấu trúc dữ liệu, thuật toán và cách giải quyết bài toán tối ưu.
Computer Science: Là những kiến thức về hệ điều hành, mạng máy tính, cơ sở dữ liệu... Các công ty lớn, đặc biệt là Big Tech, rất quan tâm đến phần này. Hiện tại, anh cũng đang dạy một khóa CS tại Engineer Pro.
Platform Knowledge: Tức là kiến thức nền tảng liên quan trực tiếp đến vị trí ứng tuyển. Ví dụ: bạn ứng tuyển vào vị trí iOS Developer thì cần ôn lại toàn bộ kiến thức về iOS (UIKit, SwiftUI, lifecycle, memory management…).
Anh có một lời khuyên rất thực tế: hãy xây dựng cho mình một chiếc “note phỏng vấn” cá nhân, gồm đầy đủ 3 phần trên. Chỉ cần xây dựng một lần, nhưng bạn có thể tái sử dụng cho rất nhiều lần phỏng vấn. Mỗi khi chuẩn bị đi phỏng vấn, mình chỉ cần mở note ra, đọc lại để refresh kiến thức. Nếu trong quá trình phỏng vấn gặp câu hỏi mới, mình lại tiếp tục cập nhật thêm.
Điều quan trọng nhất là cá nhân hóa note đó. Mỗi người sẽ có cách ghi nhớ và trình bày khác nhau, nên note đó cần phù hợp với cách học của riêng bạn. Tất nhiên bạn có thể tham khảo note của người khác, nhưng cuối cùng vẫn nên tự xây dựng cho mình một hệ thống kiến thức riêng, càng chi tiết càng tốt.
Theo anh, ngoài thuật toán ra, yếu tố nào giúp gây ấn tượng với nhà tuyển dụng Big Tech?
Ngoài yếu tố học thuật như toán và thuật toán, kỹ năng communication (giao tiếp) cũng đóng vai trò vô cùng quan trọng trong phỏng vấn.
Bạn viết ra một đoạn code rất tốt, nhưng nếu bạn không thể giải thích được mình đang làm gì, thì interviewer sẽ khó lòng hiểu được bạn đang nghĩ gì và giải bài như thế nào. Vì vậy, khả năng truyền đạt rõ ràng ý tưởng, hướng giải và lý do bạn lựa chọn cách tiếp cận là điều không thể thiếu.
Khi bạn trình bày ý tưởng một cách có hệ thống, rõ ràng, thì ngay cả khi bị stuck tại một bước nào đó, interviewer cũng có thể hiểu bạn đang gặp khó khăn ở đâu và sẵn sàng đưa ra hint giúp bạn tiếp tục. Theo kinh nghiệm của anh, người đã từng phỏng vấn hơn 100 bạn rất nhiều interviewer có xu hướng mở lòng hỗ trợ nếu bạn giao tiếp tốt trong quá trình giải bài.
Ngược lại, nếu bạn chỉ im lặng và cắm cúi code từ đầu đến cuối, kể cả khi bạn giải đúng, thì điểm đánh giá cũng sẽ không cao. Với anh, ứng viên như vậy chỉ ở mức 5/10 vì thiếu kỹ năng giao tiếp, yếu tố rất quan trọng trong môi trường làm việc thực tế.
Tuyển một nhân sự không chỉ để code, mà còn là để làm việc nhóm, trình bày giải pháp, và để người khác có thể đọc hiểu, maintain code về sau. Do đó, kỹ năng giao tiếp, đặc biệt là communication trong technical context là thứ các bạn nên rèn luyện sớm.
Với những bạn có ý định phỏng vấn công ty nước ngoài, thì tiếng Anh lại càng quan trọng hơn. Không chỉ là nói trôi chảy, mà còn là khả năng trình bày logic, giải thích code, và truyền đạt giải pháp một cách súc tích, mạch lạc trong thời gian giới hạn.
Lời khuyên của anh là hãy thực hành mock interview càng nhiều càng tốt, đặc biệt là mock với người nước ngoài thông qua các nền tảng quốc tế. Đây là cách rất hiệu quả để rèn luyện kỹ năng communication và tăng khả năng thành công trong các buổi phỏng vấn thực tế.
Còn phần CV, các project cá nhân, side project thì sao?
Về vòng CV, anh nghĩ Side Project là một bước rất quan trọng nó giống như “tấm vé vào cổng” để bạn có cơ hội bước vào vòng phỏng vấn.
Dĩ nhiên, nếu bạn từng làm một project có tầm ảnh hưởng lớn hoặc rất nổi bật thì không bàn đến, đó là một lợi thế rất rõ ràng. Nhưng với đa số trường hợp thông thường, những project cá nhân, hoạt động ngoại khóa hoặc trải nghiệm thực tế sẽ là điểm cộng giúp CV của bạn nổi bật hơn và tăng khả năng được lọt vào vòng tiếp theo.
Tuy nhiên, khi đã bước vào vòng phỏng vấn, anh cảm thấy các interviewer không đặt quá nhiều trọng tâm vào những gì bạn viết trong CV nữa. Lúc này, điều quan trọng nhất là bạn thể hiện năng lực như thế nào trong buổi phỏng vấn. Dù vậy, CV tốt vẫn là yếu tố khiến bạn khác biệt giữa hàng trăm hồ sơ khác và biết đâu, project bạn từng làm lại liên quan trực tiếp đến vị trí bạn đang apply, trở thành điểm khiến nhà tuyển dụng chú ý.
Ví dụ, với các công ty Big Tech, mỗi công ty đều có tech stack riêng biệt, đôi khi rất khác với những gì bạn từng dùng bên ngoài. Điều đó có nghĩa là khi vào làm, bạn sẽ phải học lại gần như từ đầu. Nhưng để đến được giai đoạn đó, bạn phải vượt qua vòng CV trước đã.
Bản thân anh từng nộp vào Google có cả referral, cover letter viết rất tâm huyết nhưng vẫn không qua được vòng CV. Có thể là vì mình chưa có những side project đủ nổi bật. Từ đó anh hiểu rằng: một chiếc CV chất lượng với các project thực tế là cực kỳ quan trọng.
Vậy nên, nếu bạn muốn vào Big Tech hay bất kỳ công ty nào có quy trình tuyển dụng chặt chẽ, việc đầu tiên là chuẩn bị CV tốt để nắm lấy cơ hội được bước vào vòng trong. Chỉ riêng việc pass được vòng CV đã là một thành công đáng kể rồi.
Có công ty nào làm anh cảm thấy khó khăn nhất trong quá trình phỏng vấn không?
Theo anh, lý do anh trượt Meta có thể đến từ kỹ năng communication, dù đề bài phỏng vấn không hề quá khó.
Trải nghiệm phỏng vấn ở Meta cho anh cảm giác rằng họ không yêu cầu những câu hỏi quá phức tạp, các bài thuật toán thường chỉ ở mức medium hoặc medium-easy. Nhưng điều mà họ đặt kỳ vọng rất cao chính là: độ hoàn chỉnh trong cách giải, thời gian xử lý và đặc biệt là cách bạn trình bày, giải thích.
Lý do anh nhấn mạnh communication là vì cá nhân anh cảm thấy đã code rất ổn bài đó. Tuy nhiên, khi đến phần chạy code bằng tay và giải thích logic, anh lại gặp vấn đề. Có thể lúc đó kỹ năng giải thích bằng tiếng Anh thời điểm đó của mình chưa đủ tốt, nên bị vướng, dẫn đến không truyền đạt được đúng suy nghĩ của mình cho interviewer.
Feedback mà anh nhận được là: “Explanation was messy.” tức là cách trình bày, giải thích của mình chưa rõ ràng, thiếu mạch lạc.
Đó là vòng coding. Sang vòng System Design, anh lại một lần nữa bị vướng lại vì communication. Ngay từ đầu, anh không clarify kỹ requirement, không hỏi rõ mục tiêu bài toán là gì, dẫn đến hiểu sai đề. Sau đó anh bắt đầu vẽ diagram, phân tích, thiết kế rất nhiều chi tiết. Nhưng khi trình bày, interviewer tỏ ra bất ngờ: “Bạn đang làm gì vậy?”
Lúc đó, cả hai bên mới nhận ra là mình đang đi sai hướng. Tuy nhiên, thời gian còn lại quá ít để mình có thể quay lại từ đầu và điều chỉnh. Và thế là anh không thể làm tốt vòng đó.
Cuối cùng, anh có lời khuyên nào cho các bạn không có background thuật toán nhưng vẫn muốn vào Big Tech?
Lời khuyên của anh là: cứ thử đi, đừng sợ.
Ngày trước, anh cũng từng mang tâm lý e ngại khi nghĩ đến việc apply vào các công ty Big Tech. Anh nhìn thấy rất nhiều bạn học chuyên về Competitive Programming, giải thuật rất giỏi, và tự hỏi: “Nếu họ còn gặp khó khăn khi phỏng vấn Big Tech, thì mình liệu có cơ hội không?”
Nhưng thực ra, đó chỉ là nỗi sợ do mình chưa từng thử. Khi chưa thử, mình sẽ không biết khoảng cách giữa mình và mục tiêu là bao xa. Mình sẽ không biết mình đang thiếu gì, chưa tốt chỗ nào.
Chỉ khi bạn dấn thân, bạn mới thực sự hiểu được khả năng của mình. Có thể bạn sẽ thành công. Có thể bạn thất bại. Nhưng kể cả thất bại thì bạn vẫn học được rất nhiều bạn biết mình thiếu kỹ năng gì, cần tập trung cải thiện điểm nào. Đó là lúc bạn nhìn thấy được con đường phát triển bản thân rõ ràng hơn.
Và rồi, bạn có thể quay lại thử sức lần nữa sau một năm. Lúc đó, bạn đã không còn là bạn của một năm trước. Hãy tin rằng: mỗi lần thất bại là một bước tiến gần hơn đến thành công.
Vì vậy, đừng chờ đến khi bạn hoàn hảo mới bắt đầu. Hãy bắt đầu để tiến tới sự hoàn thiện.
_________________________________
Engineer Pro là một trung tâm đào tạo các khóa học chuyên sâu dành cho các software engineer. Với 100% giảng viên đến từ các Big Tech như Google, Amazon, Shopee, TikTok, … Engineer Pro đảm bảo chất lượng giảng dạy và lộ trình học tập rõ ràng, từ cơ bản đến nâng cao, giúp học viên tự tin ứng tuyển vào các vị trí software engineer trong ngành công nghệ này.
Thông tin liên hệ:
Website: https://engineerprogurus.com/
