Mình đã có offer từ Facebook như thế nào

Phong Le
Thằng Em 96
Published in
12 min readJul 14, 2021

--

Bản gốc tiếng anh ở đây https://phong.medium.com/how-i-get-an-offer-from-facebook-eb3a1ce65939

Bản tiếng việt này sẽ thêm phần background và một chút về career. Sau cùng là cách hướng dẫn để chuẩn bị interview cho big tech.

My Background

Đối với nhiều người thì thật ra FAANG cũng không có gì đặc biệt, rất nhiều người đã làm được và làm tốt hơn rất nhiều. Nhưng đối với mình thì đó là điều mình không nghĩ tới cách cách đây 2 năm.

Nguyên nhân là profile của mình cũng làng nhàng, học hành không có gì nổi trội trong suốt quá trình học phổ thông. Học ĐH cũng chẳng được học Bách Khoa hay gì mà chỉ là trường tư với chuyên ngành về Software Engineering, cho nên mình không vững về CS lắm. À điểm ĐH thì vừa đủ điềm sàn nhé, nhớ năm ấy là 15 điểm 3 môn.

Cho nên mình rất không đồng ý với kiến phải giải quốc gia hay học top mới có thể “vượt biên” được, hay thậm chí là đậu big tech. Background rất quan trọng, tuy nhiên nỗ lực hiện tại là quan trọng nhất.

2020

Mọi chuyện bắt đầu từ nửa cuối năm 2020 lúc mình đã làm được 2 năm cho một cty ở Sin (cty Mẽo). Lương cũng khá, chắc tầm > 100K (annual, SGD), rank là staff engineer. Nói chung sống cũng thoải mái, wlb phải nói là quá tốt. Nhà thì thuê đối diện cty, bước qua cái là tới, làm từ 10h tới 6h, 2 tiếng nghỉ ăn trưa. Task thì chắc làm 4h 1 ngày là xong, lâu lâu có bug hay deadline đột ngột thì phải cày, làm biếng thì chỉ cần xin nghỉ phép bệnh (bằng miệng, không cần MC). Thời điểm đó rảnh nên ngoài làm việc thì chỉ hay lên mạng chửi nhau thôi. Vì rảnh rổi sinh nông nổi cho nên mình bắt đầu apply các công ty khác sau 2 năm làm việc, một phần là vì mức tăng lương chỉ tầm 5%, thưởng chỉ tầm 10%, công việc không có gì thay đổi nhiều.

Mình bắt đầu cày leetcode, đọc các sách chuyên sâu về ecmascript, system design, … Apply cũng kha khá công ty. Cũng có một vài offer nhưng chỉ có một số offer đáng chú ý như là từ Binance với mức lương là 126K, chưa kể hứa hẹn cứ 3 tháng là có thưởng, với tổng số thưởng trong năm có thể lên tới 6 tháng lương, hình thức là nhận bằng BNB. Tuy nhiên lúc đấy mình thấy không tin tưởng lắm vào tiền số nói chung và BNB nói riêng, nhưng nghĩ lại lúc đấy mà nhận thì có giờ thành triệu phú rồi (Thời điểm cuối 2020 BNB chỉ tầm 30$, đỉnh vừa rồi là hơn 600$). Anyway, tới giờ mình vẫn thấy thằng Binance nhiều rủi ro về mặt pháp lý.

Kế đó là thằng Carousell, một trung những startup tỉ đô của sin. Ở vn ít người biết thằng này, nhưng nó là thằng mua lại chợ tốt hồi cuối năm 2019, tương lai sẽ mở rộng ra cả ĐNÁ. Thằng này offer mình cũng cao, không nhớ chính xác nhưng đâu đó tầm 135K. Nói chung mức tăng này mình khá hài lòng vì chắc tầm 20% hơn so với lương trước đó, nhưng xui cho nó, lúc đó mình cùng lúc có offer từ Shopee cho vị trí Expert Engineer.

Engineering Titles & FAANG

Nói qua chút về ranking/title cho engineer, một số bạn chỉ hiểu là title tối đa của engineer là senior. Sau đó thì phải chết dí ở vị trí đó hoặc phải làm Project Manager. Cái này là sự hiểu lầm đến từ văn hoá outsource. Nếu bạn join một cty thuần công nghệ, thì bạn không cần phải làm manager mới có thể thăng tiến.

Ở các công ty công nghệ, tech và management là 2 hướng đi khác nhau. Nếu bạn thích làm việc với con người, bạn có thể chọn đi theo hướng managment; còn bạn thích tech, code, khám phá các kiểu thì vẫn có thể đi theo con đường engineer.

Hệ thống ranking cho các công ty mỹ phổ biến hiện nay là : (Junior/Entry) Engineer, Engineer, Senior Engineer, Staff Engineer, Senior Staff Engieer, Principal Engineer, Senior Principal Engineer, Distinguish Engineer. Với mỗi công ty thì hệ thống ranking có thể khác nhau nhưng về cơ bản vẫn bám theo cái sườn này. Về bổng lộc thì 2 hướng đi có thể nói là tương đương nhau đối với công ty công nghệ. Cho nên, bạn nào đam mê tech thì không cần thiết phải rẽ hướng nếu không cần thiết, cái bạn cần là chọn đúng công ty có career path phù hợp.

Theo quan điểm cá nhân của mình, một trong những đỉnh cao sự nghiệp của engineer là làm cho FAANG. Vậy FAANG là gì ?

FAANG là viết tắt cho top các mass consumer tech companies: Facebook, Amazon, Apple, Netflix, Google (alphabet). Thật ra list này không phải chính thức, có rất nhiều tranh cãi, ví dụ như Apple có hay không nên cho vào danh sách này ? Và danh sách này chắc chắn sẽ thay đổi theo thời gian, vì biết đâu 10 năm nữa Facebook sụp đổ cho một công ty khác lên thay thế.

Tuy nhiên thời điểm hiện tại đa số đều cho rằng đây là các công ty top về engineering. Vì những công ty này có những product với độ scale cực lớn, cũng như đãi ngộ khá cao. Khi bạn làm việc cho những công ty này, hoàn toàn yên tâm có thể làm engineer tới hết đời với đãi ngộ cao. Ví dụ cho vị trí Staff Engineer (E6) ở Facebook có thể kiếm được nửa triệu đô một năm (Ví dụ: Techlead — Thằng này coi cho vui thôi, toxic lắm, gần đây còn học đòi lông mút pump coin)

Pi pi pi

Quay lại với Shopee Offer, về rank thì thực chất Expert Engineer tương đương với Staff Engineer, vậy về cơ bản rank không có gì thay đổi, tuy nhiên TC (total compensation) thì hơi bị to bự do Shopee có offer RSUs (stock cho dễ hiểu), tính theo giá thị trường chắc tầm 180K vào thơi điểm đó. Với một offer nặng ký như vậy thì tất nhiên mình chọn Shopee sau khi đàm phán về lương bổng với Carousell không thành công.

Nhân tiện đây mình nhận refer vào Shopee nhé. Môi truờng khá ổn, đãi ngộ tốt, công ty to bự, định hướng sẽ thành công ti nghìn tỉ trong thời gian tới (Hiện tại gần 200 tỏi rồi).

Bạn nào muốn mình review về làm việc ở Shopee Singapore thì comment ở dưới nhé, mình sẽ biên một bài khác.

OK, Tới đây thì thằng Facebook bắt đầu xuất hiện được rồi.

Facebook screening

Đầu tiên mình có referal thì một bạn trên mạng xã hội blind. Đối với các công ty lớn thì được refer sẽ giúp bạn được phỏng vấn nhanh hơn. Vị trí mà mình apply là E5 ở London.

Không lâu sau khi được refer thì mình nhận được screening interview. Hình thức là online thông qua coderpad. Code interview ở facebook không quan trọng code execution mà là cách bạn viết và tự chạy code ở trong đầu cũng như đưa ra các test cases phù hợp. Vòng này mình làm không tốt khi chỉ đưa ra được sub-optimal solution. Tuy nhiên mình communicate rõ với đứa phỏng vấn về cách mình giải quyết vấn đề nên rốt cuộc vẫn được pass vòng này.

Đa số screening round thì tiêu chuẩn tương đối thấp, bạn không cần quá cao siêu về algo/ds để có thể pass vòng này.

Tuy nhiên lúc mình nhận được tin tiếp tục vô vòng trong của facebook thì mình cũng vừa mới accept offer của Shopee rồi. Bỏ thì thương, vương thì tội. Mấy khi có cơ hội được thử sức với các công ty top thế này cho nên mình đề nghị recruiter cho phỏng vấn sau 5 tháng nữa, đó là lúc mà vừa xong probation của Shopee cho nên sẽ thoải mái về đầu óc hơn.

May mắn là recruiter chấp nhận đề nghị đấy.

Preparation for the final round

Algorithm and data structure

Thời gian thử việc cũng xong, việc không có quá nhiều như mình nghĩ. Vậy là còn một tháng tới vòng cuối phỏng vấn. Thật ra lúc này mình cũng nản, vì DSA vốn khó đối với mình + áp lực công việc. Và một phần là nghĩ lần này pv cho vui, cho biết cảm giác thế nào là PV Facebook (Trước mình cũng có PV Amazon ở Vancouver rồi mà tạch, cái này đáng là một bài review khác). Vì vậy nghĩ chuẩn bị hay không thì cũng vậy cho nên thôi.Đừng ai nghĩ như vậy nhé, phải chiếnđấu tới giây phút cuối chứ thời điểm đó, mình chỉ mới có giải tầm 80 bài LCs, một con số phải nói là quá thấp. Đa số các case trên blind lầ 200–300 LCs thì mới ổn.

Nhưng may mắn sao sau 2 tuần thì có chút cảm hứng bắt tay vào việc chuẩn bị, vậy là còn 2 tuần để chuẩn bị.

Đây là Leetcode activity của mình, các bạn có thể thấy mình ko phải là một tay giải LC chuyên nghiệp.

Và đây là các tài liệu mình đã dùng để chuẩn bị

Code (DSA)
1. “Cracking the coding interview” Quyển này giống như là kinh thánh trong việc chuẩn bị PV vậy, tất nhiên làđối với các cty PV kiểu FAANG. Quyển này bán chạy tới mức mà không có bản digital chính thức. Các bạn có thể mua trên amazon theo link trên.

Ngoại trừ các siêu nhân thì bạn không thể nào cày hết tất cả các câu hỏi, cho nên cần phải tối ưu hóa thời gian bằng cách ôn các loại câu hỏi trước, để không bị bỡ ngỡ khi gặp câu chưa làm. Rồi từ đó mở rộng ra các thể loại không phải là thể loại. Nói chung là ôn tập cũng cần có hệ thống một chút.

2. “Blind Curated 75” — Bộ 75 LCs cover hầu hết các thể loại DSA
3. Khóa “Grokking the Coding Interview: Patterns for Coding Questions” trên educative.io

Khi ôn theo kiểu này các bạn sẽ có cái nhìn tổng quan rồi từ đó khi gặp câu hỏi sẽ hiểu nó thuộc dạng nào rồi áp dụng kĩ thuật tương ứng. Tất nhiên có những câu hỏi không thuộc thể loại nào cả. Đời mà, lúc nào chả có exception

4. Giải bộ câu hỏi “Top Facebook Question” trên LC, cái này cần LC Premium subscription thì phải.

Ngoài ra mình có từng tham khảo một số tài liệu khác như:

Nếu bạn quá bí trước problem nào đó thì có thể kiếm solution, nhưng ráng mà nhớ cái key points rồi tự giải lại. Đừng bao giờ cố gắng học thuộc solution, sẽ không có tác dụng đâu.

System design

Thật sự thì trước giờ đây là điểm yếu nhất của mình.
Một phần là do trước giờ không chú ý tới interview dạng này lẫn trong quá trình làm cũng không gặp phải vấn đề scaling gì nhiều vì toàn dev app cho internal là chính.

Trong quá trình phỏng vấn trước giờ, đôi lúc cũng có cty hỏi về system design. Lần nào cũng ngớ người ra mặc dù có đọc một vài bài về system design rồi. Nhiều lúc nghĩ system design interview có vẻ quá sức đối với mình.

Cho nên lần này quyết tâm phải có cách tiếp cận khác vì Facebook cũng như các cty top tier khác khá là serious về mảng này. Thậm chí ở một số level có hẳn 2 system design interviews.

Và đây là cách mình đã làm:

  • Search và đọc các post/comment trên blind (hoăc forum tương tự như leetcode) về system design. Đặc biệt là về system design interview cho facebook. Mình ưng nhất là post này https://www.teamblind.com/post/My-Approach-to-System-Design-V4SJARdx
  • tryexponent — Thấy rất hữu dụng, rất là sát với system design interview của facebook. Đặc biệt là cái series mock interview. Các bạn sẽ học được cách dẫn dắt một system design interview thế nào và các kiến thức về system design nói chung. Các bạn lưu ý là trong cái interview này, inteviewer expects các bạn phải dẫn dắt toàn bộ trong buổi phỏng vấn. Các bạn để interviewer chủ động hỏi càng nhiều thì khả năng tạch càng cao.
  • Xem các video về system design trên youtube, các bạn nên làm việc này sau khi đã làm 2 bước trên để lựa xem video nào phù hợp nhất cho interview, vì khá nhiều nội dung sida.

Sau tất cả, mình đã hiểu cách design tầm vài system phổ biến như facebook, instagram, messenger, parking lot, …

Mình đúc kết các bước trong một system design interview như sau (mình để tiếng anh vì thật ra mình thấy ko nên dịch ra lắm vì khá technical):

  • Taking the problem into specific features — Định nghĩa rõ ràng các tính năng cụ thể
  • Estimate the non-functional requirements — Ước lượng các yêu cầu phi tính năng.
  • Design the APIs, from this point, go all the way to the backend as drawing the system components. — Thiết kế API, bắt đầu vẽ các system component từ đây cho xuống tới backend
  • Should mention about “interface” for API-Client Layer (GraphQL, Restful) — Đề cập về các chuẩn API như GraphQL, Restful, … pros and cons và nêu ra lý do tại sao lựa chọn nó.
  • Design the Entities, Data Models => Database design — Thiết kế database
  • Discuss choices about the database (SQL, NoSQL) — Thảo luận về các loại database và chọn loại phù hợp, nêu lý do.
  • Early verify the design by test all the features from API to the database with the simple case. — Test sớm các tính năng từ api xuống datase với các use case đơn giản.
  • Then the fun part: scaling, go from top to bottom again to identify bottlenecks and add sufficient scaling ability to the design (LB, Cache, Message Queue, Replication,…) — Phần này quan trọng, tìm các bottlenecks và tìm cách scale chúng ra.
  • Handle special cases — Xử lý các trường hợp đặc biệt, edge cases
  • Walkthrough all the feature from top to bottom again with all cases and failures — Test các tính năng lần nữa, lần này với toàn bộ trường hợp cũng như sự cố.

Với cách này mình đạt điểm E5 trong system design interview. Trong toàn bộ quá trình, interviewer không hỏi mình gì nhiều ngoại trừ special case. Cũng không ngờ phần mình yếu nhất lại làm tốt nhất.

Một số tài liệu về system design mình cũng dùng tới:

Behavioral interview preparation

Phần này mình ko tập trung lắm vì tập trung cho 2 thằng kia rồi, một phần là mình đã có sự chuẩn bị nhất định hồi mấy năm trước lúc pv cho amazon rồi. Cái này cũng là sai lầm.

Để chuẩn bị cho phần này các bạn nên liệt kê các tình huống trong quá khứ có liên quan đến các tố chất cần thiết của kĩ sư phần mềm nhé, cũng như các câu hỏi phổ biến “Kể về lần mày cãi nhau với sếp”, … Nói chung theo mình phần này thì cứ chuẩn bị như là chuẩn bị cho Leadership Principals cho Amazon là chuẩn bài.

Cái này cũng chả có tip trick gì nhiều, chủ yếu là phải nêu được những kinh nghiệm trong quá khứ và tốt nhất là phải tự luyện tập trước gương.

Result

Sau khi chờ 2 tuần thì recruiter liên hệ và báo mình tạch E5 nhưng kết quả có thể đuợc offer E4. E4 thì chỉ có vị trí ở sin chứ london thì hết chỗ rồi. Mình bảo mình cũng muốn thử E4 ở sin. Để xem cái offer nó ra thế nào, có cái còn khoe với bà con làng xóm.

Phần system design mình làm tốt nhất như đã nói ở trên. Đủ đậu E5
Phần coding thì có 2 vòng, mỗi vòng mình đều làm ổn câu đầu vì tầm medium, câu thứ 2 thì thuộc dạng hard chỉ làm được sub optimal. Tất nhiên tạch E5. Phần behavioral interview thì hơi ngắc ngứ một chút, nói chung cũng ko đủ E5.

Vòng kế tiếp là chọn team bằng cách discuss với 4 hiring manager để tìm hiểu về các team hiện tại ở sin. Sau khi chọn được team mình nghĩ phù hợp thì báo với recruiter và mình có được offer.

Hết.

--

--