Chuyện phỏng vấn với một công ty ở Mỹ (phần 2)

,

Hôm sau, mình nhận được email của chị nhân sự bày về cách ôn luyện phỏng vấn cho vòng kỹ thuật sắp tới. Mình mở mail ra đọc rất kỹ. Đại loại là gồm những thông tin sau:

  • Những kỹ năng phỏng vấn của tác giả nổi tiếng Gayle Laakmann McDowell:
    • Sách “Cracking the coding interview”. (Cách ôn và vượt qua vòng phỏng vấn giải thuật)
    • Slide “Cracking the soft skills”. (Cách sử dụng kỹ năng mềm trong phỏng vấn)
    • Một vé xem tác giả Galye chia sẻ trực tiếp online. Họ tổ chức những buổi ôn luyện phỏng vấn như này tại trụ sở Facebook cứ 2 lần mỗi tuần.
  • Một vài bài blog và video về các mẹo phỏng vấn từ Google và Facebook.
  • Một số website để tập giải đề:

Ôn luyện phỏng vấn

Mình dành ra nhiều ngày để đọc hết đống tài liệu đó (blog, video, sách). Lúc đầu mình tưởng nội dung của chúng sẽ rất chán, ai ngờ đọc vào thấy vô cùng thú vị. Mình học được rất nhiều về các phong cách phỏng vấn và những điều mình phải làm để thể hiện tốt nhất. Sau khi xem qua hết thì mình nhận thấy nguồn thông tin hữu ích nhất chính là cuốn sách “Cracking the coding interview”. Trong đó viết về tất cả mọi thứ mà mình cần biết khi phỏng vấn ở các công ty công nghệ lớn, đặc biệt là ở Mỹ.

Giờ thì mình cần lên một kế hoạch để luyện giải đề càng nhiều càng tốt.

Ở thời điểm này mình vẫn còn đi làm nên mình chỉ có thể học vào buổi tối và cuối tuần. Mình lên kế hoạch như này:

  • Mình chọn https://leetcode.com/ làm kho đề thi chính.
    • Mình đăng ký tài khoản premium để lọc được câu hỏi theo từng công ty.
    • Mình chỉ chọn giải những câu hỏi từ công ty Facebook.
    • Có 3 kiểu câu hỏi trên Leetcode: Easy, Medium và Hard.
      • Mình chỉ chọn giải những câu “Easy” và “Medium” vì mình tin rằng sẽ không có đủ thời gian để giải một bài “Hard” trong buổi phỏng vấn 1 tiếng đồng hồ ngắn ngủi, chưa kể thời gian giới thiệu bản thân rồi chat chit linh tinh để khởi động nữa.
  • Mỗi buổi tối, mình cố giải cho được 1-2 câu hỏi “Easy”. (dưới đây mình sẽ ghi hơi kỹ thuật 1 tí nên chắc chỉ có mấy bạn học lập trình mới hiểu)
    • Mình không những cố gắng giải đề nhanh nhất có thể, mà còn tập nói to lên suy nghĩ của mình trong từng bước giải bài tập. Điều này cực kỳ quan trọng bởi vì nó giúp cho người phỏng vấn hiểu được mình đang nghĩ gì và muốn làm gì tiếp theo.
    • Sau khi giải xong bài, mình tập kiểm tra đáp án bằng cách cho một ví dụ cụ thể rồi chạy chương trình từng dòng code một để xem nó có cho ra kết quả đúng hay không.
    • Rồi mình nghĩ thêm về các trường hợp ngách, độ phức tạp (Big O) và cách tối ưu giải pháp hơn nữa.
    • Trên Leetcode có một phần họ trình bày về các cách tiếp cận từng câu hỏi và cách giải sao cho tối ưu nhất. Đó là những thông tin rất bổ ích.
    • Mình không tập viết code trên bảng trắng ở thời điểm này bởi vì nó cũng không giúp ích gì mấy cho buổi phỏng vấn qua Skype sắp tới.
  • Cuối tuần, mình giải những bài có độ khó “Medium”.
  • Những lúc rãnh ở ngoài đường thì mình hay dùng điện thoại để đọc các câu hỏi phỏng vấn của Facebook trên Glassdoor (một nền tảng chia sẻ ẩn danh về lương, các câu hỏi phỏng vấn, môi trường làm việc của nhiều công ty). Ở trên đó thì câu hỏi muôn trùng. Mình nhận ra rằng không có gì là bí mật ở cái thế giới này. Chuyện gì người ta cũng chia sẻ lên mạng. Bởi vậy vấn đề không phải là thiếu thông tin, mà vấn đề là bạn có chịu khó bỏ thời gian ra để tìm thông tin và đọc hay không thôi.

Sau vài tuần, mình cảm thấy rất sẵn sàng.

Phỏng vấn kỹ thuật

Rồi ngày phỏng vấn cũng đến, lần này thì nó diễn ra vào buổi sáng, lúc 6 giờ Việt Nam. Mình dậy sớm và ngồi vào bàn làm việc. Mình vẫn cảm thấy hơi hồi hộp, nhưng không nhiều như vòng trước.

Rồi đồng hồ vẫn tiếp tục đếm ngược, mình nhận được một lời mời kết bạn trên Skype. Sau đó cuộc gọi bắt đầu.

Lần này, mình phỏng vấn với một kỹ sư. Anh ta có bật webcam nên mình có thể nhìn thấy mặt. Ảnh là người Mỹ, đeo kính và có râu quai nón, tầm hơn 30 tuổi. Ảnh đang là quản lý của một team kỹ sư iOS ở Facebook. Hai anh em giới thiệu bản thân xong thì bắt đầu phỏng vấn thực sự.

Ảnh gửi cho mình một link tới một trang web hỗ trợ viết code online có tên là Coderpad. Sau đó ảnh gửi câu hỏi đầu tiên, đó là “làm sao để xoá các phần tử trùng lặp trong một mảng”.

Câu hỏi này thì tương đối dễ. Tuy nhiên, bởi vì đây là lần đầu tiên mình viết code trước mặt người khác trong một buổi phỏng vấn cho nên mình rất là run. Nói năng cũng không được trôi chảy lắm. Nhưng mình không quên các buổi tập trước đây. Mình bắt đầu nói to về các bước mà mình tính làm, vừa nói vừa gõ code. Mình có bị khựng và rối ở một số chỗ nhưng rồi sau đó mình cũng vượt qua được và hoàn thành trong vòng 10-15 phút. Sau đó mình cho một ví dụ cụ thể rồi kiểm tra lại code. Ảnh có vẻ okay với câu trả lời này và nhanh chóng gửi câu hỏi tiếp theo.

Lần này là câu hỏi về việc “di chuyển trong cây” (tree traversal), nhưng không phức tạp lắm. Mình vẫn làm theo các bước đã tập và đến được với đáp án khá nhanh. Sau đó ảnh nhìn code của mình vài phút rồi xác nhận là nó chính xác. Ảnh cười và khen mình về cách mà mình nói lên suy nghĩ trong lúc làm cũng như cách mà mình kiểm tra code khúc cuối. Nói chung là ảnh khá ấn tượng.

“Vòng phỏng vấn đến đây là kết thúc rồi. Em có câu hỏi gì không?, ảnh nói.

Có chứ, lúc nào cũng có hết. lần này mình chủ yếu hỏi về kỹ thuật như: cách deploy của một ứng dụng iOS lớn như Facebook, cách viết test tự động, cách phát hiện rò rỉ bộ nhớ, v.v.

Chỉ có một câu là không liên quan tới kỹ thuật.


Hỏi: Anh thấy cuộc sống ở Facebook như nào?

Đáp: Anh thích làm việc ở Facebook. Anh có nhiều cơ hội để chuyển team và thử thách bản thân chứ không bị cố định một chỗ mãi. Ở đây thì ai cũng thông minh cả, không chỉ kỹ sư mà cả những người thiết kế (designer) hay quản lý sản phẩm (product manager). Ai ai cũng tràn đầy nhiệt huyết với công việc và tầm ảnh hưởng mà họ có thể tạo ra. Đôi khi bọn anh cũng có cãi nhau về việc nên dùng kiến trúc hệ thống nào cho phù hợp, nhưng anh nghĩ những cuộc thảo luận đó là cần thiết và rất lành mạnh. Uh thì đó, nói chung là anh thích cuộc sống ở đây.


Cuộc gọi kết thúc.

“Yes, I did it”, mình la lớn lên.

Mặc dù vẫn còn phải chờ kết quả chính thức nhưng mình biết là ảnh thích buổi phỏng vấn đó. Mình có cơ hội rất cao để đi phỏng vấn trực tiếp (onsite) ở Mỹ. Mình không tả được là mình đã vui như thế nào, chỉ biết là mình cười suốt ngày hôm đó.

Kết quả vòng phỏng vấn kỹ thuật

Một tuần sau, mình vẫn không nhận được thông tin gì mới. Mình gửi mail hỏi chị nhân sự. Chị bảo bữa giờ chị hơi bận nên có gì để bây giờ chị sắp xếp gọi cho mình để báo kết quả luôn.

Rồi 2 chị em gọi cho nhau, chị nói là anh kia rất thích buổi phỏng vấn của mình và ảnh nghĩ mình sẽ là một ứng viên tiềm năng. Chị chúc mừng mình đã vượt qua vòng 2 và giờ sẽ tiến hành tới vòng phỏng vấn trực tiếp (onsite).

Rồi chị giới thiệu mình cho một chị nhân sự khác ở Menlo Park (trụ sở chính của Facebook). Chị đó sẽ hướng dẫn mình thực hiện các thủ tục giấy tờ cho vòng phỏng vấn onsite tiếp theo.

“Nếu em có thắc mắc gì thì cứ hỏi chị nha, lúc nào cũng được. Nhưng mà từ giờ thì em sẽ làm việc với chị nhân sự bên Menlo Park. Chúc em may mắn trong buổi phỏng vấn tới”, chị nói.

Hai chị em chào tạm biệt nhau rồi kết thúc cuộc gọi.

“Giờ thì mình sẽ được làm việc với một chị nhân sự khác ở trụ sở chính. Cũng có vẻ thú vị đây.”, mình nghĩ.

Địa điểm phỏng vấn on-site

Hôm sau, mình nhận được một cuộc gọi Skype từ chị nhân sự bên Menlo Park. Chị giới thiệu bản thân rồi bắt đầu giải thích về quy trình phỏng vấn onsite.

“Thường thì Facebook sẽ mời ứng viên bay sang trụ sở chính ở Mỹ để phỏng vấn. Tuy nhiên, theo chị thấy thì có nhiều bạn thể hiện không tốt lắm trong buổi phỏng vấn ở Mỹ do bị ảnh hưởng của jet lag (rối loạn giờ giấc khi bay qua một nước có chênh lệch múi giờ lớn, khi người ta ngủ thì mình thức, khi người ta thức thì mình ngủ). Chị muốn tránh trường hợp này bởi bọn chị muốn ứng viên phải ở trong trạng thái tinh thần tốt nhất để buổi phỏng vấn trở nên hiệu quả hơn.

Cũng may là trong năm nay, bên chị có tổ chức phỏng vấn onsite ở Hồng-công và Singapore nữa, và chỉ dành cho ứng viên người châu Á. Em có quyền chọn phỏng vấn ở Hồng-công, hoặc Singapore, hoặc thậm chí là Mỹ (nếu em thấy okay với jet lag). Bọn chị sẽ lo vé máy bay và khách sạn cho em. À chị quên nói, nếu em chọn Hồng-công hoặc Singapore thì em sẽ phỏng vấn vào tháng 2. Còn nếu em chọn phỏng vấn ở Mỹ, thì bọn chị có thể mời em bay qua bất cứ lúc nào.”, chị cố tình nói thật chậm để mình nghe cho rõ.

Mặc dù mình luôn muốn ghé thăm trụ sở chính của Facebook một lần trong đời cho biết, nhưng mình nghĩ nó cũng không đáng bởi vì mình chưa bị jet lag bao giờ nên mình không tự tin là sẽ kiểm soát được nó. Ngoài ra thì mình cũng cần thêm thời gian để ôn luyện cho buổi phỏng vấn onsite, tầm 2 tháng tính từ thời điểm đó cho tới tháng 2.

Bởi vậy, mình quyết định chọn phỏng vấn ở Singapore.

“Được rồi, vậy chị sẽ lên lịch phỏng vấn cho em ở văn phòng Facebook Singapore vào tháng 2. Còn về vé máy bay và khách sạn thì có người bên chị sẽ liên lạc với em vào tháng 1 và sắp xếp ổn thoả mọi thứ. Ngoài ra, chị cũng sẽ gửi cho em một email nói về cách chuẩn bị cho vòng phỏng vấn onsite sắp tới.”, chị nói.

Mình cám ơn rồi 2 chị em cúp máy.

Cấu trúc phỏng vấn on-site

Vài tiếng sau, chị gửi cho mình một email với một file pdf đính kèm, có tên là “iOS Onsite Prep” (tài liệu ôn phỏng vấn onsite về iOS). Mình mở ra đọc kỹ từng chữ rồi tóm tắt lại như sau:

Buổi phỏng vấn onsite bao gồm 4 vòng phỏng vấn, mỗi vòng kéo dài 45 phút, sẽ phỏng vấn với kỹ sư iOS hoặc manager.

  • Phỏng vấn giải thuật (Coding/Algorithms interview):
    • Số vòng phỏng vấn: 2.
    • Thời lượng: 45 phút.
    • Cũng giống vòng phỏng vấn kỹ thuật từ xa, chỉ có điều hỏi thêm vài câu về kiến thức lập trình iOS cơ bản và nâng cao.
    • Yêu cầu bạn phải viết code trên bảng trắng (viết bằng bút lông).
  • Phỏng vấn thiết kế hệ thống (Architecture design interview):
    • Số vòng phỏng vấn: 1.
    • Thời lượng: 45 phút.
    • Bạn sẽ được cho một câu hỏi và nó sẽ chiếm trọn thời gian của buổi phỏng vấn. Câu hỏi tập trung về cách thiết kế các hệ thống hoặc thư viện phức tạp. Ví dụ: Hãy thiết kế một ứng dụng chia sẻ ảnh với hơn 1 tỷ người dùng.
    • Yêu cầu bạn phải viết trên bảng trắng. Bạn có thể vẽ biểu đồ, khai báo một số interface cơ bản, hoặc là viết bất cứ thứ gì, miễn sao là trình bày được thiết kế của mình cho người ta hiểu.
    • Giao tiếp chính là chìa khoá thành công trong vòng này.
      • Bạn sẽ là người dẫn dắt buổi phỏng vấn.
      • Bạn phải chủ động hỏi kỹ yêu cầu để chắc là mình hiểu đề.
      • Bạn phải thảo luận được về các ràng buộc (constraints) của hệ thống và cách đánh đổi (tradeoffs) sao cho phù hợp.
    • Vòng này thì không có câu trả lời nào là đúng tuyệt đối cả, cho nên hãy sáng tạo và nhớ là phải nói to suy nghĩ của mình trong lúc làm.
    • Một vài chủ đề: (dành cho những bạn làm iOS, mình sẽ ghi nguyên gốc tiếng Anh chứ không dịch)
      • iOS SDK.
      • Views, Layout, and Animation.
      • Concurrency (GCD, threads, deadlock, starvation, consistency, coherence).
      • Networking.
      • Coupling, Software Design, and Handling Complexity.
      • Abstraction (including how OS, filesystem, and database work).
      • Real-world performance (Graphics, Interaction, RAM, Disk, Network).
      • Durability and Reliability (Understanding how things can fail).
      • Data storage (Memory vs. Persisted, State management).
  • Phỏng vấn văn hoá và sự nghiệp (Career & Culture), có cả code nữa:
    • Số vòng phỏng vấn: 1.
    • Thời lượng: 1 tiếng.
    • Phỏng vấn với một manager.
    • Có 2 phần: nói chuyện và code.
    • Chủ yếu nói về kinh nghiệm làm việc của bạn, định hướng sự nghiệp, bạn muốn đạt được gì ở Facebook, và lý do bạn sẽ hoà nhập vào Facebook tốt hơn so với các công ty khác.
    • Hãy đặt câu hỏi cho người phỏng vấn. Đây cũng là dịp để bạn tìm hiểu về công ty chứ không chỉ là công ty tìm hiểu bạn.
    • Một vài chủ đề:
      • Hãy kể về những dự án mà bạn đã làm trong vài năm trở lại đây.
      • Bạn thích dự án nào nhất? Hãy kể về một dự án mà bạn đã thể hiện tốt nhất.
      • Hãy nói về một khó khăn mà bạn gặp phải gần đây. Bạn vượt qua nó như thế nào? Bạn học được gì từ trải nghiệm đó?
      • Tại sao bạn muốn làm việc ở Facebook? Bạn nghĩ mình sẽ đạt được thành tựu gì ở đây?
    • Phần code thì cũng giống như các vòng giải thuật khác.

Và một loạt link:

“Wow, quá trời thứ để học luôn. Hấp dẫn đây.”, mình nghĩ.

Rồi mình điều chỉnh kế hoạch học tập lại 1 chút.

  • Dành thời gian đọc hết đống dữ liệu ở trên.
  • Thay vì lập trình trên máy tính, mình mua một cái bảng trắng về treo ở nhà và thực hành viết code lên bảng, vừa viết vừa nói to lên suy nghĩ của mình.
  • Đôi khi, mình cũng thử giải một bài “Hard” trên Leetcode, thường sẽ mất từ 1-2 ngày để giải cho đúng.
  • Mình tập giải một số bài về thiết kế hệ thống (architecture design), nhưng mà cũng không nhiều lắm vì mình không biết đáp án như thế nào mới là tốt.
  • Mình xem lại kinh nghiệm làm việc trước đây và chuẩn bị sẵn câu trả lời cho các câu hỏi tình huống.

Hai tháng trôi qua nhanh chóng, mình bay qua Singapore và sẵn sàng đón nhận thử thách cuối cùng.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *