By Quang Hoang

Untitled

The Interview

Lần thử sức đầu tiên với Google của mình là vào 2019, lúc đó nhờ bạn refer, sau vài tuần thì 1 HR contact. Rất tiếc là sau đó headcount của vị trí này bị cắt giảm nên mọi chuyện dừng lại ở đó.

Đến 2021, lần này Google tự liên hệ với mình (do CV đã nằm trong database của họ kể từ đợt apply trước). Mọi chuyện diễn ra như sau:

  1. Recruiter phone interview: 20 phút - Phone. HR gọi điện và discuss về vị trí công việc, quy trình phỏng vấn. Mình xin 5 tuần chuẩn bị cho vòng Tech Phone Interview.
  2. Tech phone interview: 45 phút - Google Meet. Interviewer vào room muộn 20ph do có cuộc họp đột xuất. C’mon ... Mình được hỏi 1 câu liên quan đến Stack. Đây là 1 pattern phổ biến trên Leetcode nên mình đưa ra solution gần như tức thời. Interviewer gật đầu, mình tiến hành code. Interviewer yêu cầu giải bằng 1 cách khác không dùng extra space. Mình mất vài phút để nghĩ ra cách giải, dùng 1 technique khá phổ biến khác (Dutch flag patition). Giải thích solution, code, test, done, interview kết thúc sớm 10 phút. Không rõ có phải do vào muộn nên interviewer ra bài dễ không 😆. Ngày hôm sau, HR thông báo kết quả feedback positive, và họ muốn move forward đến vòng onsite. Bình thường Google sẽ cover chi phí đi lại, khách sạn để ứng viên đến 1 office để phỏng vấn, nhưng do Covid nên lần này các vòng onsite sẽ tiến hành online qua GG Meet. Mình dự là sẽ khó khăn hơn rất nhiều nên xin thêm 4 tuần nữa để chuẩn bị. Kế hoạch tuyển dụng của Google thường theo từng năm hoặc nửa năm nên họ khá thoải mái nếu ứng viên cần thêm thời gian ôn luyện.
  3. Onsite interviews:
    1. ngày 1:

      1. loop 1: 45 phút, có 2 interviewer, 1 người chính, 1 người shadow chỉ ngồi quan sát. Mình khá run vì câu hỏi lạ hoắc. Mình đưa ra cách brute-force trước để kéo dài thời gian và cũng là để tự trấn tĩnh lại. Interviewer nhất trí với cách brute-force và như thường lệ yêu cầu improve. Mình nghĩ ra 1 ý tưởng khác dùng OrderedMap. Interviewer đồng ý và mình bắt đầu code. Sai lầm đầu tiên: khi ý tưởng còn khá mơ hồ nhưng mình đã bắt đầu code dẫn đến lúc code có 1 vài bug và tốn nhiều thời gian debug. Interviewer chỉ ra bug cho mình và có vẻ mất kiên nhẫn, negative signal ... 😔
      2. loop 2: diễn ra 15 phút sau khi loop 1 kết thúc và mình vẫn chưa hết run. Interview lần này là 1 bạn ở Singapore Office, team Google Pay. Mình được yêu cầu implement 1 stock’s price tracking system. Bài toán có thể breakdown xuống thành 1 vài function cần support với low runtime. Ban đầu mình nghĩ đến dùng Heap, nhưng chả dẫn đến đâu cả. Mình lần lượt duyệt qua trong đầu các cấu trúc dữ liệu khác, mix and match các kiểu thì cuối cùng cũng ra được 1 solution O(logn). Interview gật gù có vẻ hài lòng và đồng ý cho mình bắt đầu code. Tiktok, tiktok, còn cỡ 15 phút nên bình gõ với tốc độ bàn thờ, vừa gõ vừa giải thích 10 phút sau thì xong. Interviewer chỉ ra 1 điểm có thể improve trong code của mình. Minor improvement. Pheww ...
      3. loop 3: diễn ra sau bữa trưa, 45 phút. Lúc này thì mình đã bình tĩnh hơn, interviewer nữ, làm Flutter ở Google Pay. Một bài BFS level Hard ở Leetcode, mình nhanh chóng đưa ra cách giải tối ưu, gì chứ dạng này làm hoài. Interviewer gật gù, và mình bắt đầu code. Sau đó interviewer hỏi thêm 1 vài câu follow up, điều chỉnh đề bài 1 chút, chắc là để check xem có phải mình học thuộc solution từ trước không. Mình đưa ra ý tưởng dùng 0-1 BFS. Đến cuối vẫn còn thừa nhiều thời gian nên 2 bên có hỏi han qua lại về công việc, về CV của mình. Thì ra interviewer cũng từng thi ACM. Sau loop 1 khá tệ thì giờ mình thắp lên 1 chút hi vọng mong manh 😆
    2. ngày 2:

      1. loop 4: HR đã phím trước cho mình đây là vòng Googleyness and Leadership (behavior interview). Interviewer không show up vì có production issue. C’mon man.
      2. loop 5: 45 phút sau bữa trưa. 2 interviewers, 1 main, 1 shadow. Mình được hỏi 1 câu khá dễ về Tree, mình đoán đây chỉ là màn dạo đầu cho 1 câu follow up khó hơn nên không vòng vo mà trình bày luôn cách tối ưu. Đúng như dự đoán, interviewer tăng độ khó của bài toán lên. Mình nêu ý tưởng mới, đúng hơn là nói ra thinking flow chứ lúc đó cũng không sure là ý tưởng đó đúng hay không. Interviewer chỉ ra 1 lỗi trong ý tưởng đó, may mà direction đúng nên mình chỉ cần điều chỉnh lại 1 chút. Interviewer gật đầu bật đèn xanh cho implentation. Còn khá nhiều time nên mình hỏi interviewer là hôm nay mày định hỏi tao mấy câu, mục đích để điều chỉnh code speed. Interviewer bảo là chỉ 2 câu này thôi nhưng nến mày code nhanh thì tao sẽ hỏi thêm câu nữa. Ok, deal!. Mình lại code ở God speed, miệng liến thoắng giải thích. Done, vẫn còn 10 phút, interviewer hỏi mày có muốn thử 1 câu khó hơn nữa không. Ok, thế là bà cho thêm 1 câu hard. Lmao, không giải được =)) biêt thế bảo thôi.
    3. ngày 3: redo loop 4, diễn ra 1 tuần sau đó: interviewer người Tàu, nói tiếng Anh không sõi. Cảm tưởng như có 1 list câu hỏi behavior, cứ đọc lần lượt trên xuống dưới rồi note câu trả lời của mình. Easy, đạo đức tốt + lươn nên mình trả lời khá nuột.

    4. Hiring Committee

      • 1 tuần sau, HR contact lại và bảo feedback khá tốt, sẽ gửi package lên Hiring Commitee (HC) để duyệt.
        • Nói thêm 1 chút, Google có 1 Hiring Commitee riêng để review và xét duyệt interview feedback, họ là những người sẽ chốt bạn pass hay fail. Google không tin vào số đông nên yêu cầu tất cả mọi thành viên phải đồng ý Hire thì bạn mới pass, chỉ cần 1 người không đồng ý họ sẽ debate với nhau để thống nhất kết quả. Nếu sau khi cãi lộn, họ vẫn không thuyết phục được người kia cho pass thì rất tiếc, hẹn gặp lại lần sau. Theo Gayle Laakmann McDowell, tác giả cuốn Cracking the Coding Interview thì pass rate của Hiring Commitee là dưới 10% 😭(https://www.quora.com/What-percentage-of-applicants-that-make-it-to-Googles-hiring-committee-get-approved).
        • Để làm strong thêm cho package của mình, HR đã liên hệ với 1 Team Lead có hứng thú với hồ sơ của mình (tức họ sẵn sàng nhận mình vào team trong trường hợp mình pass HC), nhờ họ viết 1 support letter do người này; đồng thời yêu cầu mình nhờ 2 người bạn ở Google viêt referral letter.
      • Kết quả là HC hold package của mình lại, tức là 1 vài người trong HC cho mình pass, 1 vài người đánh trượt, nhưng họ không thể đi đến kết luận cuối cùng nên đã request mình làm thêm 2 interview nữa để có thêm data point. Đến lúc này thì mình đã thấy hết sức mệt mỏi vì sau loop 5 thì mình đã bắt đầu xõa, ăn chơi nhảy múa rồi, mà cái giống Algorithm thì vài tuần không động đến là đầu óc kém sắc bén ngay ... Thôi thì còn nước còn tát.
      • Dựa trên feedback, HR phím cho mình học thêm về binary search, chắc do negative feedback của interviewer ở loop 1 đây mà.
    5. Extra rounds: extra round được setup 10 ngày sau đó.

      • loop 6: Được hỏi 1 bài về matrix, mình nhanh chóng nêu cách brute-force O(n^3). Interviewer gật gù yêu cầu cải tiến runtime. Nhớ đến lời HR về binary search, mình nêu ý tưởng Binary search, cải thiện thành O(n^2logn). Interviewer nhất trí nhưng vẫn mặt lạnh như tiền yêu cầu cải tiến thêm nữa. Surprise Motherf*cker 😨. Thực sự panic, mình lúng túng nêu ra những gì đang nghĩ trong đầu, nghĩ tới nghĩ lui vẫn lấy gì làm sáng sủa. Interviewer đưa hint, vẫn không bắt được sóng, đầu óc mình lúc này cloudy thật sự. Còn 10 phút, interviewer đành bảo mình implement cách Binary search. Implement khá dài nên đợt này mình không giải thích gì nhiều, cố implement phần logic chính, mock 1 vài hàm để đấy nếu còn time sẽ implement sau. Cuối cùng cũng xong. Tốc độ code rất quan trọng.
      • loop 7: Interviewer người Taiwan, mình được hỏi 1 bài Hard Leetcode. Một dạng kinh điển mình đã làm nhiều nên mình nêu luôn cách tối ưu dùng Binary search, không lòng vòng. Giải thích, code, done. Interviewer chỉ ra bug, damn =)) thôi xong, mình ngồi chỉnh chỉnh sửa sửa tới lui. Thấy mình bồn chồn, interviewer động viên: mày là 1 trong những ứng viên nghĩ ra cách giải nhanh nhất, should be fine (it is on Leetcode bro 🤣).
    6. Team matching & Offer

      • Đến lúc này thì mình yolo rồi, bẵng đi 2 tuần, HR inbox trên Linkedin thông báo HR đã approve package. Giờ sẽ đến tiêt mục Team Matching. Nói thêm 1 chút, HC approve package chỉ có nghĩa là bạn pass hiring bar của Google, để thực sự nhận được offer bạn phải tìm được 1 team sẵn sàng nhận bạn.
      • Do có support letter của Hiring Manager (HM) nên team matching diễn ra khá nhanh. HR set up 1 buổi fit talk với HM, trong buổi đó chủ yếu là HM present về team của họ làm gì, culture thế nào, diversity như nào, trả lời các câu hỏi của ứng viên ... HM này là người Thụy Sỹ, vốn thoải mái về giờ giấc làm việc nên mình cũng ưng cái bụng, đồng ý luôn.
      • Vài ngày sau, HR set up meeting để discuss offer và next step.

Preparation

  1. Hiểu rõ luật chơi: hỏi rõ HR xem vị tri mình đang apply là level nào. Ở Google, cho level 3, level 4; sẽ chỉ hỏi Algorithm và Googleyness nên mình phần lớn thời gian để luyện phần này.

  2. Algorithm:

    1. Googleyness

      • Khác với Amazon nơi các expectation của behavioural interview được ghi rõ ra thành các Leadership Principles, Google không đưa ra một tiêu chuẩn cụ thể nào cho các câu trả lời. Tất cả được gói gọn trong khẩu hiệu: “Do the right thing” hay “Don’t be evil”.
      • Phần này mình chỉ dành ra 2-3 ngày để chuẩn bị, chủ yếu là đọc 1 vài chương trong cuốn Software Engineering at Google: Lessons Learned from Programming Over Time để hiểu xem Googleyness là cái gì, các behavior nào là Googleyness. Việc đọc mấy chương này cực kỳ hữu ích vì trong loop 4 interview, mình biết trước được interviewer đang expect cái gì và trả lời gọn ghẽ.
      • Với các câu hỏi hành vi phổ biến, mình gõ xuống thành các gạch đầu dòng và đọc thuộc. Cấu trúc 1 câu trả lời theo mô hình S.T.A.R: Situation (bối cảnh), Task (mục tiêu, nhiệm vụ), Action (Hành động), Result (Kết quả và bài học).
    2. Mock Interview

      • Pramp.com: mình chủ yếu luyện mock interview ở trang pramp. Đây là 1 platform ghép cặp mock interview, nơi những người đang luyện phỏng vấn sẽ mock interview lẫn nhau, đưa ra đánh giá, giúp nhau cải thiện. Ưu điểm là hàng free, nhược điểm là những người mock cho bạn thường không có nhiều kinh nghiệm phỏng vấn, trình độ thì thượng vàng hạ cám nên đôi lúc cũng thấy phí thời gian. Mình mock ở pramp tổng cộng 5 lần.

        Untitled

      • https://expertmitra.com/: nền tảng paid mock interview; 70$ 1 session. Mình thấy mắc nên chỉ làm 1 shot với 1 thanh niên làm Facebook nhưng đáng đồng tiền bát gạo. Interviewer đưa ra 1 vài lời khuyên rất hữu ích.

      • nhờ người quen (hoặc người lạ) mock: tận dụng network mình đã nhờ nhiều anh, chị, bạn mock interview giúp:

        • Cường @GG London.
        • anh Huân @Shopee Sing.
        • anh Tín @Grab Sing.
        • anh Bình @GG Switzerlands.
        • chị Trang @GG Sydney.
        • anh Brian @GG Munich, cảm ơn vợ chồng Cindy&Brian, những người xa lạ mình biết được qua Youtube nhưng đã rất nhiệt tình giúp đỡ.
        • anh Đạt @GG Sing, một người mình biết thông qua nhóm BCNV.

      <aside> 🔥 When you want something, all the universe conspires in helping you to achieve it.

      </aside>

    Resource