Chào các bạn, hiện tại mình đang hoàn thiện hồ sơ visa để có thể gia nhập Facebook vào tháng 11 này tại US. Bản thân mình chỉ là một dev ao làng, khá làng nhàng, già và lười, đã từng trượt Facebook UK một lần trong quá khứ. Bài viết này mình xin chia sẻ kinh nghiệm phỏng vấn của bản thân, trên góc nhìn của một người thuần mobile development (như mình, mình đã làm mobile dev được gần 10 năm).

Lý do chủ yếu là trong quá trình phỏng vấn và ôn luyện, mình tìm hiểu và thấy có rất bài viết chia sẻ về những kinh nghiệm phỏng vấn với Facebook (hay là những công ty big firms khác như Google, Amazon…). Nhưng mình thấy đa phần họ đều đứng trên góc nhìn của một SE (Software Engineer). Các nội dung họ có thể phần nào đó làm các bạn thuần mobile (như mình) cảm thấy hơi bối rối và tự hỏi liệu khi mình apply vào vị trí mobile nó có giống như vậy hay không.

Về cơ bản, khi bạn apply (hoặc bạn được HR của Facebook contact bằng một cách thần thánh nào đó) vào Facebook ở vị trí mobile dev, bạn cũng sẽ là một Software Engineer. Bằng chứng rõ ràng nhất là hiện tại title ở Facebook của mình cũng là Software Engineer ở trong trang nội bộ của công ty (và cả mức lương cũng như SE ahihi). Vì thế nên các bạn cũng sẽ trải qua những thứ y chang như khi bạn apply vào SE ở Facebook, và phần lớn đó là chính là thuật toán.

Nếu bạn chưa rõ về quy trình tuyển dụng của Facebook gồm bao nhiêu vòng, thì mình có thể liệt kê một cách ngắn gọn lại như sau.

  1. Đầu tiên, HR phone call với các bạn, chủ yếu để discuss về background của bạn, định hướng, và cũng có thể để test luôn tiếng Anh của bạn như thế nào (mình đoán thế). Nói chung vòng này chỉ ngồi chém gió 😗.

  2. Sau đó, bạn sẽ có từ 1-2 video call, người phỏng vấn bạn theo mình được biết có thể từ bất cứ team nào, không nhất thiết phải là từ mobile team (vì chúng ta đang nói dưới góc nhìn là bạn apply vào làm mobile). Vòng này chỉ 45 phút, thường sẽ chit-chat một ít tầm 5-10 phút, sau đó bạn sẽ được code một hoặc hai câu thuật toán, tùy vào interviewer. Độ khó trải dài từ easy đến hard (yes, hard). Bản thân mình từng gặp một câu hard ở vòng này (nhưng đây cũng là một câu nổi tiếng trên leetcode 😅).

  3. Tiếp, bạn sẽ được đưa vào vòng onsite. Theo mình được biết, chỉ có 2 văn phòng là có team mobile. Một ở UK, và một ở US. Nếu bạn phỏng vấn ở văn phòng UK, rất có khả năng là bạn sẽ được cho bay qua UK để làm vòng onsite này (yeah yeah 😎✈️). Nếu bạn phỏng vấn ở US, thường đây sẽ là 1 patch phỏng vấn (Facebook mở đợt tuyển dụng và phỏng vấn nhiều nguời/vị trí cùng một thời điểm), họ sẽ cho team từ US bay qua Singapore và bạn sẽ được onsite tại văn phòng ở Singapore. Bản thân mình thì đã được trải nghiệm cả hai. Tất nhiên toàn bộ chi phi cho chuyến đi sẽ được tài trợ bởi Facebook 👏.

Tại vòng onsite, dựa trên kinh nghiệm cá nhân mình, bạn sẽ dễ dàng nhận biết được họ (Facebook) đang target bạn ở level nào dựa trên số round mà bạn sẽ phải interview ở đây. Sẽ có

  • 2 vòng phỏng vấn thuật toán
  • 1 vòng phỏng vấn behavior
  • Nếu bạn có 1 vòng system design, bạn thường sẽ là E4; nếu bạn có 2 vòng system design, chúc mừng bạn đang được target ở E5

HR thường sẽ không nói rõ là bạn đang được apply ở level nào và mọi thứ hoàn toàn phụ thuộc vào performance của bạn trong lúc phỏng vấn. Mình thì cũng một phần tin vào điều đó vì nếu bạn có 2 vòng system design mà làm không tốt thì cũng không có nghĩa là bạn rớt, họ vẫn có thể cho bạn đậu ở E4 nếu bạn thật sự qualify cho mức đó.

Về phần thuật toán, không có gì khác biệt so với các vị trí SE, bạn sẽ code trên whiteboard, câu hỏi thì trải dài từ medium đến hard trên leetcode. Tuy nhiên, vấn đề là lúc tìm hiểu về phần system design để chuẩn bị cho phỏng vấn, mình đã gặp khá nhiều khó khăn vì các tài liệu chủ yếu là dành cho dân fullstack với những thứ mà một mobile dev như mình khá là mù mờ (SQL hay noSQL, load balancing, distributed system…).

Nhưng đây chính xác là những gì mà các bạn phải biết (hoặc học), vì Facebook thực sự hỏi và mong bạn biết được những khía cạnh này ở vòng system design (có thể không cần quá chi tiết, vì chúng ta chỉ là mobile dev 😢). Điểm khác biệt duy nhất là interviewer sẽ đưa ra những chức năng của mobile và yêu cầu bạn thiết kế nó cho mobile. Mình xin không nói về cách bạn ôn luyện thế nào cho mục này, vì mỗi người một phương pháp và quan điểm, mình cũng có liệt kê một số link hữu ích để các bạn có thể tự học ở cuối mục này. Chỉ xin liệt kê một số tip mà mình đúc kết được:

  • Đa phần đề bài sẽ là về product design
  • Đừng qua cố gắng để làm chi tiết hóa chức năng đó càng nhiều càng tốt, ví dụ đề bài yêu cầu bạn thiết kế Feed, bạn đừng có gắng để liệt kê hết tất cả những thứ mà Feed của bạn có thể làm được, hãy chỉ chú ý vào những thứ căn bản (có thể post bài, có thể hiện nội dung theo sở thích user, etc) rồi move qua phần tiếp theo, vì chắc chắn bạn sẽ không đủ giờ để nói hết tất cả.
  • Facebook luôn đề cao cách bạn thiết kế chức năng có thể scale lớn được (at Facebook scale), hãy đưa ra những con số (ước chừng cũng được) cho dữ liệu cần thiết cho chức năng của bạn, bạn sẽ dùng các gì để giao tiếp với API, tốn bao nhiêu kb/mb/gb, datebase structure ra sao, nếu cả ngàn/triệu người cùng sử dụng thì server của bạn phải chịu tải được bao nhiêu và như thế nào. Thực lòng mà nói, đối với mobile dev, đây không phải là thứ chúng ta hay quan tâm. Nhưng hãy tiềm hiểu, có thể giờ nó chỉ giúp bạn ở việc phỏng vấn, nhưng biết được một hệ thống vận hành và chịu tải như thế nào là một điều rất hữu ích cho kiến thúc của bạn. Và đây cũng là để thể hiện bạn thực sự quan tâm đến cả hệ thống và hiểu được những gì mình đang làm. Bạn chỉ có thể scale được nó khi bạn thực sự hiểu nó.
  • Interviewer sẽ đưa ra một số vấn đề, hoặc họ sẽ cố gắng extend một chức năng mà bạn đã liệt kê ở đầu. Mục đích của việc này là để xem cách bạn suy nghĩ và thiết kế liệu có đáp ứng được như cầu extensible hay không. Ví dụ như ở Feed trên, bạn liệt kê chức năng cho phép user comment vào bài viết, thì có thể interviewer sẽ hỏi làm sao để mình có thể cho phép user comment vào comment của người khác, bạn sẽ phải thay đổi database như thế nào để đáp ứng điều đó, liệu API bạn dùng để get comment data ở ban đầu có phải thay đổi (dùng 1 API mới) cho việc này hay không, vân vân và mây mây.
  • Bạn luôn có 1 tờ giấy được cung cấp để làm nháp, trước khi bắt đầu trình bày, hãy xin 1 vài phút để note ra layout của những thứ bạn cần nói. Hãy liếc nhìn nó thường xuyên, nhằm bảo đảm rằng bạn sẽ không quá lê la ở một mục nào đó và present hết được toàn bộ nội dung của mình.
  • Diagram, number, data flow… hãy dùng các thủ thuật hình ảnh để làm nổi bật nó (khoang tròn, gạch dưới, tô đậm…). Vừa để nhắc nhở chính bản thân bạn, và cũng để interviewer thấy được chúng ta thực sự biết tính toán cho hệ thống này.
  • Hãy luyện tập (mock interview) với những người bạn của bạn, cả phần coding lẫn system design. Việc tập thói quen nói khi trình bày ý tuởng đôi khi khá khó khăn với dev chúng ta, và việc này chỉ khác phục được khi mình có sự luyện tập.

Một số tài liệu mình tìm được trên mạng khá hữu ích cho phần này

Sau vòng onsite, HR thường sẽ thông báo kết quả trong khoảng từ 1 tuần đến 1 tháng. Và nếu đậu, thì sau đó lại là những câu chuyện khác nữa cho tới lúc bạn thực sự join đuợc Facebook (ở đây mình đề cập đến việc join Facebook US/UK).

Cuối cùng, chính mình cũng không thể ngờ là mình có thể đậu được. Mình đã khá già (30+), không quá giỏi về thuật toán, không được nhanh nhạy như các bạn trẻ ngày nay, có thể mình đã có cả một phần (nhiều) may mắn hỗ trợ.

Chúc các bạn thành công. Peace.