Review phỏng vấn Google mùa Covid (2021) - Phần 2 Onsite

Phần 1: Quy trình phỏng vấn và phone screening

1. Chuẩn bị cho Onsite

Còn 10 ngày nữa là đến Onsite. Sherry-giọng-hay rất tốt bụng khi cho mình một vài phản hồi nho nhỏ, một tài liệu chuẩn bị dài gấp đôi lần trước kèm theo 1 câu chúc may mắn.

Chắc là giống nhau cả ấy mà bạn ấy gửi cho …vui.

Sơ qua thì mình sẽ có 5 vòng liên tiếp:

  1. System Design (60 phút)
  2. Googleyness & Leadership (45 phút)
  3. Coding (45 phút)
  4. Coding (45 phút)
  5. Domain Knowledge (45 phút)

Mỗi vòng cách nhau 15 phút. Riêng giữa vòng 2 và 3 sẽ có 1 tiếng nghỉ ngơi. Mình book lịch từ 2h chiều đến gần 8h tối kết thúc. Lịch ngày hôm đấy như này:

Ảnh 1: Onsite Calendar

Theo tài liệu thì vòng 2 là đàm đạo về tính cách. Vòng 5 là cà khịa về kiến thức iOS và Mobile. 2 vòng này hỏi sao nói nấy thôi chứ cũng không có thời gian mài dũa gì. Vòng 3 và 4 sẽ giống phone interview nhưng nâng cao độ khó, là lý do chính để luyện LeetCode.

Vòng 1 có vẻ lại là 1 vấn đề nan giải khác.

Mình không có nhiều thông tin và cũng chưa làm System Design bao giờ. Video hướng dẫn nói rằng sẽ không code, dùng bảng trắng thiết kế một hệ thống/ứng dụng, vẽ ra module, kiến trúc phân tầng, triển khai các phương hướng dưới dạng 1 câu hỏi mở, etc. Vì phỏng vấn online nên có thể sẽ dùng tính năng Google Jamboard trên Hangout.

Như vậy mình vạch ra kế hoạch luyện tập trong 10 ngày như sau:

1.1 ÔN DESIGN:

Mình design thử kiến trúc cho một vài app nổi tiếng như Twitter, Facebook hay Google Maps. Nếu bạn ứng tuyển vị trí BackEnd thì System Design sẽ rất khác, hãy tham khảo system design primer ở đây

https://github.com/donnemartin/system-design-primer

1.2 ÔN CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN.

LeetCode, LeetCode, và LeetCode.

Mình đã:

  • Nâng tổng lượng bài nâng lên gần 70 bài Medium và gần 10 bài Hard. Cộng với khoảng 20 bài chỉ đọc lời giải để cover cách làm.
  • Mua tài khoản Premium, lấy gói câu hỏi của Google để luyện.
  • Đọc hết quyển Elements of Programming Interviews (ngắn hơn quyển Cracking The Code Interview, do ít thời gian).
Ảnh 2: LeetCode Premium

Mình chia sẻ nội dung ôn cụ thể của 10 ngày nhé:

  1. Elements of Programming Interviews, Big-O notations.
  2. Array, String, LinkedList
  3. Stack, Queue, Tree
  4. Search, Hash, Sort
  5. Recursion, Dynamic Programming, Graph
  6. DFS, BFS, BackTrack
  7. 1 số chủ đề nâng cao (Trie, Disjoint Sets, Segment Tree)
  8. Reflection (tự review những bài đã làm)
  9. Ôn Design
  10. Luyện random theo tất cả các chủ đề.

Đi làm mình có bao giờ động đến mấy cái của nợ này đâu nên học lại ong hết cả thủ. Mỗi ngày mình làm khoảng 5 bài (trong 10 ngày tăng 5×10 = 50 bài). Mấy chủ đề nâng cao thật sự là rất vô vọng, nếu gặp mình xác định sẽ hỏi gợi ý.

2. Onsite day

Cuối cùng thì cũng lên thớt. Mình xin phép review 2 phần quan trọng nhất.

2.1. PHỎNG VẤN CODING

Thực sự là vào onsite thì Coding khó hơn mình nghĩ, khó hơn vòng phỏng vấn qua Phone khá nhiều. Cụ thể là:

Coding:
  • Ở vòng Phone bạn có 45 phút cho 1 câu hỏi cỡ Medium. Ở Onsite bạn có 40 phút cho 2-3 câu hỏi, cầu đầu Easy, câu sau Medium đến Hard. Tại sao lại chỉ có 40 phút? Bởi vì 5 phút cuối phải dùng để ứng viên và người phỏng vấn hỏi chuyện về cuộc sống công việc ở Google, v..v Cá nhân mình thấy nói chuyện cũng vui, cơ mà mất 5 phút thì chẳng vui tí nào.
  • Với 40 phút cho 2 câu, bạn tốt nhất nên làm xong câu Easy trong 10-15 phút. Bạn sẽ còn lại tối đa 30 phút cho câu Medium hoặc Hard.
  • Tỉ lệ câu 2 ra Hard là có. Cái này hoàn toàn là may rủi. Mình đụng trúng câu Hard 1 lần, và 3 lần ra Medium. Để dễ hình dung thì bạn lên LeetCode làm thử câu Hard sẽ biết, mất khoảng 1 tiếng là bình thường. (Chia buồn với mình đi, thật đấy)
  • Bạn phải tự nghĩ ra tập test mẫu để test bằng mắt, và nếu sai thì phải debug bằng mắt.
  • Nếu ngồi 5 phút không nghĩ ra thuật toán tối ưu, cứ bắt tay vào viết theo cách làm thô sơ bỉ ổi nhất mình nghĩ ra, miễn là nó chạy đúng.
  • Vòng Domain (vòng 5 mà mình nghĩ hiểu là hỏi nội dung iOS ấy), thực tế cũng là 2 câu code với câu 1 liên quan 1 chút đến iOS. Google đúng là Google, tất cả là Code.
Vấn đề giao tiếp
  • Khả năng giao tiếp của người phỏng vấn hên xui toàn tập. Gặp những nước native như Anh, Mỹ, Úc, hay những nước phát âm tương đối giống VN như TQ là may mắn. Mình gặp 1 anh ở London, 1 anh ở Tokyo và 1 bạn ở Thượng Hải giao tiếp rất mượt mà. Tuy vậy với những nước như Nga, Pháp hay Đức thì vô cùng nhọ. Mình gặp 1 anh ở Zurich (Thụy Sỹ) và nói rất giống tiếng Đức, thật sự là giao tiếp rất khó khăn.
  • Trên LeetCode bạn nhìn thấy đề bài và 1 số tập test mẫu để làm ngay. Ở phỏng vấn thật, người ta vừa có thể nói khó nghe, vừa có thể không paste cái đề bài luôn vào Google Docs cho mình đọc. Mình mất 5 phút vì anh ở Thụy Sỹ đọc đề bài xong mình vẫn không hiểu hết, và lại phải nhờ ảnh paste vào để đọc lại từ đầu. 5 phút là vô cùng quý giá.
  • Đừng tin mấy cái video là cần giao tiếp nhiều thật nhiều với người phỏng vấn. Bạn chỉ nên xác nhận lại những điểm chưa rõ rồi nên bắt tay vào làm luôn. Khi làm xong phải tự debug bằng mắt, tự nghĩ ra các edge case, trick case để sửa. Cuối cùng bạn mới nên thảo luận về độ phức tạp và cách cải thiện thuật toán.
2.2 SYSTEM DESIGN

Chân ướt chân ráo đi vào, một anh kỹ sư người Châu Âu nói tiếng Anh hơi khó… Và ảnh đưa cho mình 1 câu hỏi khá dễ.

Câu hỏi này làm mình hơi bối rối vì nó có vẻ đúng là 1 câu hỏi design, nhưng lại yêu cầu code vào Google Docs!? Ok Google, mình triển bốn phương tám hướng, xác nhận yêu cầu, lập luận giả định, và code ra chức năng đơn giản.

30 phút trôi qua, ảnh đưa cho mình 1 câu hỏi thứ 2 không liên quan gì đến câu 1. Câu này hiển nhiên là 1 câu code, và nó rất khó.

Mình khá bối rối, song trấn tĩnh lại vì với tổng thời gian 60 phút thì mình hẳn là còn 30 phút nữa cho câu này. Ok Google, triển phương hướng, giả định lập luận, etc.. Và khi hết 5 phút sau thì anh ấy tỏ vẻ sốt ruột và nói

Có lẽ bạn nên nhanh lên và code ra 1 cái gì đó, sẽ tốt hơn là không code gì”

Dị nhỉ, mình còn tận 25 phút nữa cơ mà. Nhưng khi người phỏng vấn đã giục thì mình quyết định làm theo lời anh ấy. Trong 5-10 phút nữa mình không code ra được, đơn giản vì kể cả lời giải đúng mình còn chưa nghĩ ra được luôn.

Vòng đầu tiên kết thúc sau khoảng 50 phút khi anh ấy phải dành 5 phút sau cùng để nói chuyện kể về cuộc sống kỹ sư ở Google mùa Covid, WFH, etc.

GOOGLER NHẦM NỘI DUNG PHỎNG VẤN !?

Sau Onsite mình viết mail cho Sherry:

  • Mình được đưa cho 2 câu hỏi yêu cầu code không mấy liên quan đến nhau
  • Anh kỹ sư khá sốt ruột khi thời gian mới là 35-40 phút.

Và bạn biết kết quả thế nào không? Đã có sai sót ở phía Google, và anh phỏng vấn đã nghĩ rằng đấy là 1 vòng Coding!

Ảnh 3: Sherry confirm

Sao mình có thể ngu ngốc khi nhận ra muộn thế cơ nhỉ? Lẽ ra mình phải từ chối làm bài từ khi thấy bất thường? Đã thế câu 2 lại là 1 câu rất khó (Vâng chính là câu Hard nói ở bên trên đấy ạ). Câu đấy khó đến mức xong xuôi rồi đi hỏi bạn bè vẫn nghĩ không ra. Tìm trên Wikipedia thì ra 1 cái công thức toán dài ngoằng ngoằng như con lươn. Thôi gọi là nhọ đi.

Cuối cùng Sherry đã nói chuyện với Hiring Manager, họ quyết định sẽ xem tổng thể kết quả ra sao rồi mới quyết cho mình làm lại vòng System Design hay không. Nghĩa là vòng Coding Round kia vẫn tính.

Nói thật là mình không vui vẻ chút nào. Mặc dù giao tiếp của mình có vấn đề khi không hỏi lại chính anh phỏng vấn, nhưng như thế này quả thật không công bằng với ứng viên và ảnh hưởng tâm lý khá nhiều.

Kỳ cuối: Feedback từ Sherry, suy nghĩ của bản thân, góp ý của các kỹ sư Silicon Valley khác và kinh nghiệm rút ra.

Mọi đóng góp, trao đổi, ý kiến xây dựng về bài viết này xin được gửi về địa chỉ email: dilamtainhat.vpj@gmail.com.

Để lại bình luận

Địa chỉ email của bạn sẽ không được công khai