Bài viết dưới đây là chia sẻ từ bạn Scarlet, hiện đang sinh sống và học tập tại Canada với chuyên ngành lập trình. Scarlet ứng tuyển vào kỳ thực tập tại Google vào năm nhất đại học và may mắn đã mỉm cười với bạn. Phần tự sự bên dưới của tác giả là toàn bộ quá trình từ nộp đơn đến phỏng vấn và những điều thú vị bạn ấy đã rút ra trong hành trình chinh phục công cy công nghệ hàng đầu thế giới này.

Vòng 1: Resume / CV

Google bắt đầu mở đơn tuyển cho internship hằng năm vào giữa tháng 9, với lượng người nộp thường đông khủng khiếp. Theo những gì mình tìm hiểu được thì năm ngoái họ nhận tận hơn 125,000 hồ sơ từ khắp nơi trên thế giới, nhưng chỉ tầm tầm một phần ba trong số đó sẽ được chọn phỏng vấn và cuối cùng chỉ còn lại ~3,000 người nhận được offer thôi. Năm nay con số này còn tăng mạnh hơn vì ngành Computer Science (CS) / Computer Engineering (CE) đang là một trong những ngành hot nhất với vô số công nghệ nổi lên được mọi người thường nhắc tới ở mọi nơi như deep learning, blockchain, quantum computing etc. Ngay cả ở khối năm nhất của mình, khi chưa ai được chọn chuyên ngành cả, thì hầu như đứa nào mình gặp cũng đang chăm chăm nhắm vào vùng đất đầy màu mỡ này. Bạn bè của mình đứa nào cũng hăng hái rải resume ở khắp nơi, trung bình đều nộp chắc phải tầm 50-70 công ty gì đấy, còn mình thì lười nên nộp có mỗi Google.

Càng tìm hiểu, mình càng thấy quá trình thuê tuyển nhân sự trong những công ty lớn thật sự rất kỳ công. Ví dụ, để giải quyết vấn đề nhận được một số lượng lớn hồ sơ như thế hằng năm, họ phải dùng tới một hệ thống tự động hoá quá trình lọc resume/CV với một số keywords nhất định nhằm loại bỏ những resume rác hoặc những người không đủ tiêu chuẩn ngay từ vòng đầu. Ngoài ra, một chương trình internship bên này thường dựa vào rolling-basis - chỉ những ai quan tâm đủ tới internship mới có động lực nộp sớm, được xét trước và có khả năng được nhận sớm hơn. Môi trường cạnh tranh khốc liệt khiến đa số những thành phần đến sau vừa nộp đơn xong, còn chưa kịp nhấc mông đi phỏng vấn thì đã bị báo hết chỗ. Ngoài ra, mặt bất lợi nhất đối với mình có lẽ vẫn là việc hồ sơ của những đứa năm 1 sẽ auto bị đẩy xuống chót của cái danh sách xét tuyển, nhường vị trí cao hơn cho những anh chị năm 2,3 và 4 (những người có nhiều kinh nghiệm hơn hẳn). Google có thông báo thẳng trên job-posting là họ sẽ thậm chí không xét đơn của sinh viên năm nhất cho tới tận tháng 12 cơ mà.

Thế là mình còn mỗi cách cố gắng cải tiến resume bằng cách hỏi thăm một anh bạn lập trình viên bên Toronto góp ý giúp và nộp đơn sớm nhất có thể, tầm 3 ngày sau khi application mở (18/9), với tâm trạng phấn khích xen lẫn hồi hộp.

Đây là cái resume mình dùng để nộp nè

Xem thêm: Tư tưởng sai lầm khi thiết kế CV IT mà hầu hết ứng viên đều mắc phải

Lúc nộp mình nghĩ là resume của mình được ngó qua thôi là đã vinh dự lắm rồi, chắc kiểu sẽ phải chuẩn bị tâm lý đợi tới tháng 12 để nghe thông báo bị từ chối là vừa. Đâu ngờ 3 ngày sau, mình nhận được email từ một cô recruiter (người tuyển dụng) cực kỳ xinh đẹp nhắn nhủ là,

"Chúc mừng em được chọn cho buổi phỏng vấn! Em có 4 ngày nữa cho đến lúc đó. Trước khi phỏng vấn thì ký cho cô tầm 10 trang tài liệu với cả vài cái đơn NDA này trong thời gian sớm nhất nhé. Chúc em may mắn."

Tâm trạng của mình lúc đó rõ hỗn loạn. Vui cũng có, mà thú thật thì khoảng thời gian gấp gáp khiến mình nhanh chóng trở nên hốt hoảng thì đúng hơn. Bình thường người ta chuẩn bị cho một buổi phỏng vấn cũng phải nửa tới 1 tháng, với những công ty lớn thì có người phải dành ra tới vài tháng, thậm chí tính theo năm luôn.

Và mình thì có 4 ngày.

 

Chuyện bên lề: Interview Prep.

Technical interviews là loại interview phổ biến nhất trong giới lập trình, xoay quanh những câu hỏi nhằm đánh giá kiến thức và kỹ năng chuyên môn của bạn qua cách tiếp cận và giải quyết những vấn đề khó. Dựa vào trình độ của bạn, người phỏng vấn (thường là senior developers) sẽ đưa ra các câu hỏi có độ khó khác nhau,

và ứng cử viên sẽ phải code giải pháp lên một cái bảng trắng ngay tại chỗ - hoặc trong trường hợp của mình, vừa giải thích qua điện thoại vừa code trên một cái shared Google Docs.

Thế là có đứa lại lăng xăng chạy đi tìm cái để học...

Cấu trúc dữ liệu

Các thuật toán về sorting

Tự dưng phát hiện ra, cơ bản là mình sẽ phải chạy đi "ôn" những thứ mình sẽ học trong 4 năm tới. Mình còn tìm hiểu được Google còn là một trong những công ty coi trọng nhất về khả năng mở rộng (scalability) và độ tối ưu (efficiency) trong một hệ thống khiến những câu hỏi của họ nổi tiếng khó, đòi hỏi một phản ứng thật nhanh nhẹn với các thuật toán/phương trình được đưa ra và một người phải hiểu rõ độ phức tạp thời gian và không gian (time & space complexity) của đoạn code họ viết thế nào, rồi từ đó tối ưu hoá ra câu trả lời tốt nhất dựa trên bối cảnh.

Nhưng như thế vẫn chưa đủ. Ứng cử viên còn cần phải vừa tư duy vừa truyền đạt suy nghĩ của mình tới người phỏng vấn cùng một lúc, và đây có lẽ là yếu tố quan trọng nhất của một buổi phỏng vấn thành công: giao tiếp (communication). Thường những câu hỏi sẽ bị xáo trộn và thiếu mất nhiều mảnh thông tin quan trọng, và công việc của một ứng cử viên tốt là phải liên tục hỏi người phỏng vấn cho tới khi nào nắm thật rõ đề bài thì thôi. Các bước cơ bản thường sẽ nhìn như sau:

  1. Giải thích câu hỏi lại một lần nữa theo ý bản thân hiểu
  2. Hỏi những câu như "tôi nghĩ là abc xyz... có phải vậy không?"
  3. Đưa ra những ví dụ cho giải pháp của vấn đề, thường thì nên cho một trường hợp bình thường (normal case) và ít nhất 2 trường hợp edge/corner/boundary cases -> hỏi người phỏng vấn lại một lần nữa nếu bạn đang đi đúng hướng
  4. Quyết định cấu trúc dữ liệu (data structure) mà bạn sẽ dùng cho giải pháp
  5. Bắt đầu code, và trong khi code thì nên vừa viết vừa liên tục giải thích cho người phỏng vấn biết bạn đang áp dụng thuật toán nào hay mạch tư duy của bạn ra sao etc.

Mình đã đâm đầu vào học gần như là ngày đêm cho sự kiện này với sự giúp đỡ của các platform quen thuộc về lập trình như LeetCode và HackerRank. Thậm chí mình còn nhờ vài người bạn giúp mình mô phỏng lại buổi phỏng vấn để mình quen hơn với kiểu vừa nói vừa động não liên tục. Nhớ những buổi ban đầu mình còn lắp bắp mãi không biết nói gì cơ, mặt mình lúc đấy nhìn ngu ngơ không chịu được làm đám bạn cứ trêu mãi sau này thôi.

Ngày phỏng vấn, mình có 2 buổi phỏng vấn trên điện thoại kéo dài 2 tiếng liên tục, mỗi buổi sẽ có một anh lập trình viên Google được chọn ngẫu nhiên từ khắp nơi trên nước Mỹ để phỏng vấn mình. Lúc đó đã có con bé lo lắng đến nỗi phải dành ra tận 30 phút trước khi phỏng vấn để tự hít thở sâu trấn an bản thân, tạm bỏ lại những cảm xúc vụn vặt sau lưng và tập trung hết sức vào những gì sẽ xảy ra sắp tới.

Cố lên, rồi mọi thứ rồi sẽ ổn thôi Scarlet. 

 

Vòng 2: Interview

May là hai anh lập trình viên phỏng vấn mình ai cũng dễ thương thân thiện hết làm tâm lý của mình được giải toả hơn siêu nhiều luôn.

Ở buổi phỏng vấn đầu tiên, mình được hỏi về công nghệ mà mình đang yêu thích nhất là gì nhằm mục đích "làm nóng người" và ngay sau đó là đi thẳng vào câu hỏi lập trình, không một chút câu nệ tiểu tiết. Đây là một câu hỏi mẫu được đăng trên sẵn trên Youtube.

 

Khi nhận được đề bài, việc mình làm đầu tiên là làm sáng tỏ đề bài bằng cách đặt thật nhiều câu hỏi và suy nghĩ thấu đáo những trường hợp cá biệt, để rồi tiếp cận vấn đề bằng cách giải nguyên thuỷ nhất (brute force approach) để thiết lập một điểm bắt đầu. Việc phải liên tục nói ra suy nghĩ của mình khiến 1 tiếng trôi qua nhanh chóng. Một yếu tố chiếm kha khá thời gian nữa là mình phải liên tục nghĩ cách nâng cấp code ở phiên bản hiện tại chạy nhanh hơn / tốn ít dữ liệu hơn. Đặc biệt là, mỗi khi mình gần hoàn thành đến nơi, anh phỏng vấn lại thêm vào "một vài vấn đề nhỏ" để tăng độ "thú vị" nên mình chỉ đành cười (khổ) và cố gắng giải tiếp. Tầm 5 phút cuổi buổi, mình đã được hỏi anh đủ thứ về Google và nghe anh kể vài câu chuyện thật hay ho khiến mình vui đến nỗi cười toe toét, đâu phải lúc nào cũng có vinh dự được nói chuyện với kỹ sư Google đâu chớ.

Buổi phỏng vấn thứ 2 cũng gần giống vậy, chỉ là lần này thay vì được luyên thuyên chém gió về công nghệ, anh phỏng vấn đưa ngay một đoạn code dài nhìn phát hoảng và hỏi mình,

"Đây là phần code reading. Em có biết khái niệm Promise trong lập trình không? Nếu không thoải mái thì anh có thể đổi câu hỏi."

"Dạ em không biết, mặt dù có nghe qua nhưng chưa dùng bao giờ. Nhưng mà em không ngại học cái mới, anh có thể giải thích sơ qua cho em khái niệm được không ạ? Em muốn thử sức."

Khái niệm về Promise và Async trong JavaScript

Thế là tầm 3 phút tiếp theo mình phải học một kiến thức mới ngay tại chỗ và dùng nó để áp dụng cho đoạn code bên trên để viết ra kết quả là gì. Lần đầu tiên nhìn câu hỏi mình hoang mang kinh khủng, không biết đoạn code đang cố gắng làm gì cả nên thấy khó khăn vô cùng. May mà bình tĩnh lại được sau đó, ngẫm nghĩ tầm vài phút sau thì mình nhìn ra được cốt lõi vấn đề và viết ra đáp án đúng luôn. Anh phỏng vấn chắc bất ngờ nên thốt lên "Bingo!" và bật cười vui vẻ bảo không ngờ mình học nhanh thế :) Sau đó thì quá trình giải câu hỏi xảy ra tương tự như buổi phỏng vấn đầu, chỉ khác là ở mức độ khó hơn nhiều nhưng may mắn là mình vẫn ra kết quả trong thời gian cho phép.

Kết thúc 2 cuộc phỏng vấn mình liền gục xuống bàn, còn tay chân thì bủn rủn hết cả lên. Trải nghiệm kiểu này vui và căng hơn nhiều so với dự đoán ban đầu, nhưng chung quy lại thì nó vẫn vô cùng quý báu và có thể nói mình cảm thấy cực kỳ biết ơn khi một cơ hội hiếm hoi có thể đưa mình xa được đến mức này.

 

Vòng 3: Hiring Committee

Thật lòng mà nói, đây là khoảng thời gian dàaaaaaiiiiiiiiii nhấtttttttt trong đời mà mình từng trải qua. Tỉ lệ được chọn quá thấp khiến mình suốt ngày thấp thỏm không yên, càng không đành lòng nếu lỡ nhìn thấy thư từ chối mặc dù chưa bao giờ dám nghĩ bản thân có thể được nhận được offer. Thế là tự làm bản thân lâm vào tình trạng thường xuyên giữ điện thoại bên người nhưng lại chẳng dám kiểm tra email.

Theo những gì mình tìm hiểu được thì sau buổi phỏng vấn, người phỏng vấn sẽ phải điền vào một cái đơn feedback dài hơi và cực kỳ chi tiết về ứng cử viên và gửi lại cho recruiter sớm nhất có thể. Thường quá trình này sẽ mất từ 2-3 ngày, và một khi nhận được recruiter sẽ bắt đầu soạn thảo, sắp xếp lại tất cả thông tin của ứng cử viên vào một packet, bao gồm:

  • Resume
  • Câu hỏi dùng trong phỏng vấn và câu trả lời của ứng cử viên
  • Thư giới thiệu (nếu có)
  • Một vài ghi chú nhỏ của recruiter về ứng cử viên

và đưa nó xuống dưới cùng của danh sách ứng cử viên đang cần được duyệt. Ở Google, có nhiều hội đồng chuyên đưa ra quyết định thuê tuyển cho internship được gọi là Hiring Committee (HC), thường là những người nắm giữ chức vị cấp cao (senior roles) và đã có kinh nghiệm lâu năm trong việc tuyển chọn một bộ phận nhất định trong công ty. Mỗi tuần họ sẽ có một buổi họp (theo như mình stalk được thì thường vào buổi sáng thứ 3 hoặc 5) để xét duyệt một lô tầm 7-10 ứng cử viên cho tuần đó và quyết định có đi tới offer hay không.

Quá trình từ recruiter đến HC thường sẽ xảy ra như sau:

  • Trước cuộc họp 1-2 ngày, HR sẽ đăng tất cả tài liệu về lô ứng cử viên của tuần đó lên hệ thống và gửi email kèm link về hồ sơ của từng người tới mọi thành viên trong HC
  • Một khi nhận được email, mỗi thành viên HC sẽ phải cho một đánh giá chung chung (thuê / không thuê), mặc định một điểm số họ cho là phù hợp từ 1 đến 4 và viết một nhận xét chi tiết về mỗi ứng cử viên.
    1 = Không nên thuê
    2 = Tôi nghĩ là không nên thuê, nhưng chúng ta vẫn nên xem xét kỹ hơn
    3= Tôi nghĩ đây là người phù hợp, nhưng chúng ta vẫn nên xem xét kỹ hơn
    4 = Nên thuê
    (để được nhận, ứng cử viên phải cần số điểm trung bình từ 3 trở lên)

=> Mọi thứ sẽ được thực hiện trên hệ thống một cách độc lập và ẩn danh trong khoảng thời gian này nhằm giảm thiểu thiên kiến từ đám đông lên một cá nhân

  • Tới ngày họp, recruiter sẽ chiếu packet của từng ứng cử viên lên một màn hình lớn, và lúc này tất cả các đánh giá/điểm/nhận xét độc lập của từng thành viên trong HC tự làm trước đó sẽ được công khai cùng với hồ sơ nguyên bản của ứng cử viên

=> Thường 2/3 trong số ứng cử viên sẽ nhận được số điểm tương đối gần nhau từ các thành viên HC (khi xem xét độc lập) nên trong buổi họp, HC sẽ có quyết định nhanh chóng (khi xem xét tập thể) nếu họ muốn nhận ứng cử viên này hay không. Nếu một ứng cử viên nhận được nhiều ý kiến trái chiều, HC sẽ dành nhiều thời gian hơn để phân tích và lắng nghe ý kiến từ mọi phía.

Có 4 mảng chính cần được đánh giá cho một ứng cử viên:

  1. Khả năng phân tích và giải quyết vấn đề (qua buổi phỏng vấn)
  2. Kinh nghiệm làm việc: Viết code sạch và đẹp, hiệu quả cao, không quá chậm, etc. (code sample từ buổi phỏng vấn); Kinh nghiệm trong quá khứ (resume).
  3. Khả năng lãnh đạo: tự biết phải làm gì khi không có nhiều chỉ dẫn từ cấp trên
  4. Googliness: tính cách có phù hợp với văn hoá của Google hay không (qua cách nói chuyện trong lúc phỏng vấn và trao đổi email với HR)

Trong trường hợp HC vẫn không quyết định được sau khi họp, sẽ có 2 hướng xảy ra:

  1. Xếp thêm một buổi phỏng vấn thứ 3 để có cái nhìn toàn diện hơn về ứng cử viên
  2. Từ chối thẳng

Trường hợp 2 sẽ phổ biến hơn vì Google có một văn hoá nặng về "false positive" - có nghĩa là thà lỡ người giỏi còn hơn thuê nhầm người tệ. Điều đó khiến HC quan niệm việc đang phân vân đồng nghĩ với "không nên thuê". Thêm vào đó, việc đặt lịch interview thường khá mất thời gian của mọi người nên trường hợp đầu thường được tránh nhất có thể.

Sau buổi họp sẽ có kết quả ngay lập tức, và lúc đó recruiter sẽ bắt đầu gọi/email thông báo cho ứng cử viên về quyết định của HC

=> Dù được nhận hay từ chối thì ứng cử viên vẫn sẽ nhận được một cuộc gọi

 

Kết quả

Với sự chuẩn bị kỹ lưỡng, tinh thần học hỏi cao, thái độ tích cực và một chút may mắn. Cô bạn lập trình viên trẻ tuổi Scarlet đã trở thành thực tập sinh tại Google - công ty công nghệ hàng đầu thế giới khi chỉ mới là sinh viên năm nhất. 

Văn phòng Google

 

Bạn thấy đó, cơ hội chẳng bao giờ thiếu đối với những ai luôn biết nỗ lực, không ngần ngại nắm bắt và quan trọng là, biết tìm chúng ở đúng chỗ! (Tìm trên vietnamworks.com nhé!)

 

Chỗ ngồi code cực xịn dành cho fresher / junior
VietnamWorks InTECH