Bài viết được lược dịch từ chia sẻ của Xiaohan Zeng, hiện đang sống ở Chicago. Trước khi trúng tuyển 5 công ty Google, Facebook, Airbnb, LinkedIn và Salesforce Einstein, anh là kỹ sư phát triển phần mềm tại Groupon. Anh sẽ bắt đầu làm việc tại Airbnb với vai trò là kỹ sư phần mềm trong tháng này.
phỏng vấn xin việc

Trong 5 ngày từ 24/07 đến ngày 28/07 năm 2017, tôi đã được mời phỏng vấn tại LinkedIn, Salesforce Einstein, Google, Airbnb và Facebook. Tôi trúng tuyển cả năm công ty. 
Đây là một trải nghiệm rất tuyệt vời và tôi cảm thấy may mắn rằng nỗ lực của mình đã được đền đáp. Do vậy, tôi quyết định viết thứ gì đó về nó. Tôi sẽ chia sẻ với bạn về cách tôi đã chuẩn bị, quá trình phỏng vấn và chia sẻ những ấn tượng của tôi về 5 công ty này.

Mọi chuyện bắt đầu như thế nào?

Tôi làm việc tại Groupon gần 3 năm. Đây là công việc đầu tiên của tôi, được làm việc cùng một team tuyệt vời và những dự án ấn tượng. Chúng tôi xây dựng nên những thứ thú vị, tạo ra ảnh hưởng trong công ty, xuất bản các tài liệu và tất cả những thứ kiểu vậy. Nhưng tôi cảm thấy rằng tốc độ học hỏi của mình đang giảm dần mặc dù tôi muốn học nhiều hơn. Bên cạnh đó, vì cũng là một kỹ sư phần mềm ở Chicago nên có rất nhiều công ty lớn ở vùng vịnh San Francisco khiến tôi bị hấp dẫn.
Cuộc sống ngắn ngủi và sự nghiệp lại còn ngắn hơn. Sau khi thảo luận với vợ tôi và nhận được sự ủng hộ hoàn toàn của cô ấy, tôi đã quyết định hành động và bắt đầu sự thay đổi đầu tiên trong sự nghiệp của mình.

Chuẩn bị

Mặc dù quan tâm tới các vị trí machine learning (học máy) nhưng các vị trí ở 5 công ty đều tôi ứng tuyển đều có chút khác biệt về chức danh và quá trình phỏng vấn. 3 công ty là kỹ sư Machine Learning (LinkedIn, Google, Facebook), 1 công ty là Data Engineer (Salesforce) và một công ty là kỹ sư phần mềm nói chung (Airbnb). Do đó, tôi cần chuẩn bị kiến thức ở 3 lĩnh vực: coding, machine learning, và thiết kế hệ thống. 
Vì làm việc toàn thời gian (full time) nên tôi cần tổng cộng 2 đến 3 tháng để chuẩn bị sẵn sàng. Đây là cách mà tôi đã chuẩn bị. 

Coding

Mặc dù tôi đồng ý rằng các buổi phỏng vấn về coding không phải là cách tốt nhất để đánh giá tất cả các kỹ năng của một Developer, nhưng có thể nói rằng không còn cách nào tốt hơn để nói lên liệu một người có phải là một kỹ sư giỏi chỉ trong một thời gian ngắn. Theo tôi, đây là điều cần thiết để bạn có được công việc. 
Phần lớn tôi sử dụng Leetcode Geeksforgeeks để luyện tập nhưng Hackerrank Lintcode cũng là những lựa chọn tốt. Tôi dành nhiều tuần xem xét các cấu trúc dữ liệu và thuật toán cơ bản, sau đó, tập trung vào những thứ mà tôi chưa biết, và cuối cùng, giải quyết vài vấn đề xuất hiện thường xuyên nhất. Vì giới hạn thời gian nên tôi chọn xử lý 2 vấn đề mỗi ngày. 
Đây là một vài suy nghĩ của tôi:
  1. Luyện tập, thật nhiều. Không có cách nào khác hơn đâu.
  2. Thay vì làm tất cả 600 vấn đề trên Leetcode, bạn nên tìm hiểu tất cả các loại và dành thời gian tìm hiểu từng vấn đề thật kỹ. Tôi làm tất cả khoảng 70 vấn đề và cảm thấy ngần này là đủ với tôi. Suy nghĩ của tôi đó là nếu 70 vấn đề mà không giúp ích thì khi đó, bạn có lẽ chưa làm đúng và có làm 700 vấn đề cũng chẳng hề có lợi gì.
  3. Giải quyết vấn đề khó nhất. Sau đó, phần còn lại sẽ trở nên dễ dàng.
  4. Nếu “bí” ở một vấn đề trong hơn 3 giờ, kiểm tra các giải pháp/đáp án. Dành thời gian mày mò không hẳn là cách hay.
  5. Sau khi giải quyết một vấn đề, kiểm tra đáp án. Tôi thường bị bất ngờ bởi một vài đáp án cực kỳ thông minh và đơn giản, đặc biệt là các dòng Python (Python one-liner - kiểu viết Python 1 dòng).
  6. Sử dụng một ngôn ngữ mà bạn quen thuộc nhất và đủ phổ biến để dễ dàng giải thích với người phỏng vấn bạn.

Thiết kế hệ thống

Lĩnh vực này khá liên quan với kinh nghiệm làm việc hiện tại của tôi. Nhiều câu hỏi được đặt ra trong quá trình phỏng vấn về thiết kế hệ thống, không chỉ giới hạn ở cấu trúc hệ thống, thiết kế hướng đối tượng, thiết kế database schema, thiết kế hệ phân tán, khả năng mở rộng (scalability),...
Có rất nhiều nguồn tài nguyên trực tuyến có thể giúp bạn chuẩn bị. Đa phần tôi đọc các bài báo về các buổi phỏng vấn về thiết kế hệ thống, các kiến trúc của hệ thống lớn (large-scale system) và các nghiên cứu tình huống (case study).
Dưới đây là một số tài nguyên tôi thấy thực sự hữu ích:
Mặc dù các buổi phỏng vấn thiết kế hệ thống bao trùm nhiều chủ đề nhưng vẫn có vài hướng dẫn chung về cách tiếp cận vấn đề:
  1. Hiểu các yêu cầu đầu tiên, sau đó, giải thích thiết kế ở cấp cao, và cuối cùng truy từ trên xuống để tìm hiểu các chi tiết thực thi. Đừng nhảy vào chi tiết ngay mà không làm rõ các yêu cầu là gì.
  2. Không hề có thiết kế hệ thống hoàn hảo nào cả. Hãy đưa ra lựa chọn đúng đắn về cái gì là cần thiết.
Dựa trên tất cả những điều này, cách tốt nhất để luyện tập cho các cuộc phỏng vấn về thiết kế hệ thống thực sự là phải ngồi xuống và thiết kế một hệ thống, chẳng hạn công việc hàng ngày của bạn. Thay vì làm những việc nhỏ nhặt, hãy đi sâu hơn vào các công cụ, framework, và thư viện bạn sử dụng. Chẳng hạn, nếu dùng HBase, thay vì đơn giản là sử dụng client để chạy DDL và làm một vài truy xuất, hãy cố gắng hiểu cấu trúc nói chung như lớp write/read, cách mà HBase đảm bảo tính nhất quán mạnh mẽ, mức nén lớn nhất và nhỏ nhất, nơi mà LRU cache và Bloom Filter được sử dụng trong hệ thống. Thậm chí, bạn có thể so sánh HBase với Cassandra, tìm hiểu những điểm giống và khác nhau trong thiết kế của chúng. Sau đó, khi được yêu cầu thiết kế một key-value store, bạn sẽ không cảm thấy bị ngợp.
Blog cũng là nguồn kiến thức tốt, chẳng hạn như Hacker Noon, blog của một vài công ty cũng như tài liệu chính thống của các dự án mã nguồn mở.
Điều quan trọng nhất đó là giữ vững sự tò mò và khiêm tốn. 

Machine learning

Các buổi phỏng vấn về machine learning có thể được chia làm 2 phần, lý thuyết và thiết kế sản phẩm.
Trừ khi bạn có kinh nghiệm về nghiên cứu machine learning hoặc thực sự giỏi trong các khóa học này, còn không thì bạn phải đọc vài cuốn sách. Những cuốn sách cổ điển như Elements of Satistical LearningPattern Recognition Machine Learning là những lựa chọn tốt. Nếu bạn quan tâm tới một vài lĩnh vực cụ thể, bạn có thể đọc nhiều hơn về chúng.
Đảm bảo hiểu các thuật ngữ cơ bản như bias-variance trade-off, overfitting, gradient descent, L1/L2 regularization,Bayes Theorem,bagging/boosting,collaborative filtering,dimension reduction… Làm quen với các công thức như Bayes Theorem và nguồn gốc của các mô hình như logistic regression và SVM. Cố gắng triển khai các mô hình đơn giản như cây quyết định (decision tree) và thuật toán K-means clustering (phân cụm K-means). Nếu đề cập đến một vài mô hình trong hồ sơ xin việc thì hãy chắc chắn là bạn hiểu nó thật kỹ, có thể đưa ra một vài bình luận về ưu và nhược điểm của chúng.
Đối với thiết kế sản phẩm machine learning (ML), tìm hiểu về quá trình nói chung của việc xây dựng một sản phẩm ML. Dưới đây là điều mà tôi đã thử làm:
  1. Làm rõ mục tiêu là gì: dự đoán, đề xuất, phân cụm, tìm kiếm…
  2. Lựa chọn một thuật toán phù hợp: supervised với unsupervised, classification với regression, generalized linear model/decision tree/neural network... Có thể đưa ra lý do vì sao lựa chọn thuật toán đó.
  3. Lựa chọn/vạch ra các đặc điểm liên quan dựa trên dữ liệu có sẵn.
  4. Lựa chọn các chỉ số cho hiệu suất của mô hình.
  5. (Tùy chọn) Đưa ra ý kiến cá nhân về cách tối ưu mô hình cho quá trình sản xuất.
Ở đây tôi muốn nhấn mạnh một lần nữa về tầm quan trọng của việc giữ vững trí tò mò và liên tục học hỏi. Cố gắng đừng chỉ đơn thuần sử dụng API cho Spark MLlib hay XGBoost và kết thúc mọi chuyện mà còn phải hiểu tại sao stochastic gradient descent (SGD) lại phù hợp với đào tạo phân phối hay hiểu cách mà XGBoost khác với GBDT truyền thống, chẳng hạn, điều đặc biệt về hàm mất mát (loss function), tại sao nó cần để tính toán đạo hàm bậc hai...

Quá trình phỏng vấn

Tôi bắt đầu bằng việc trả lời tin nhắn của HR trên LinkedIn, và được yêu cầu người tham chiếu. Sau khi không trúng tuyển một startup nổi tiếng (tôi sẽ đề cập ở sau), tôi đã chuẩn bị rất kỹ trong vài tháng và với sự giúp đỡ của các nhà tuyển dụng, tôi đã lên kế hoạch 1 tuần cho các buổi phỏng vấn onsite ở San Francisco. Tôi  bay vào chủ nhật, có 5 ngày phỏng vấn với khoảng 30 người phỏng vấn tại Google, Facebook, Airbnb, LinkedIn và Salesforce Einstein. Rất may mắn, tôi nhận được lời mời làm việc từ cả 5. 

Phỏng vấn qua điện thoại (Phone screening)

Tất cả các cuộc phỏng vấn qua điện thoại đều giống nhau. Sự khác biệt duy nhất đó là thời gian phỏng vấn: Một vài công ty như LinkedIn phỏng vấn 1 tiếng, trong khi Facebook và Airbnb là 45 phút.
Sự thành thạo là chìa khóa, bởi vì bạn chịu áp lực thời gian và thường chỉ có duy nhất 1 cơ hội. Bạn sẽ phải rất nhanh chóng nhận ra loại vấn đề và đưa ra một giải pháp tốt nhất. Hãy nói với nhà tuyển dụng về cách bạn tư duy và các ý định. Điều này có thể khiến bạn hơi chậm một chút lúc mới bắt đầu nhưng kết nối quan trọng hơn bất cứ điều gì và nó sẽ có lợi cho bạn. Đừng liệt kê các giải pháp vì nhà phỏng vấn gần như chắc chắn sẽ tìm ra.
Đối với các vị trí machine learning, một vài công ty sẽ đặt câu hỏi về ML. Thế nên, đừng quên trau dồi kiến thức về nó.
Để tận dụng tốt thời gian, tôi lên kế hoạch trả lời phỏng vấn điện thoại trong cùng một buổi chiều, cách nhau một giờ. Lựa chọn này sẽ giúp bạn có lợi từ lần thành công trước nhưng cũng sẽ bất lợi nếu như cuộc phỏng vấn đầu không diễn ra suôn sẻ. Do vậy, tôi không nghĩ ai cũng nên làm như vậy.
Một điểm lợi của việc phỏng vấn với nhiều công ty đồng thời đó là nó cho bạn những lợi thế nhất định. Tôi có thể bỏ qua cuộc gọi với Airbnb và Salesforce bởi vì tôi đã nhận được lời mời phỏng vấn onsite ở LinkedIn và Facebook chỉ sau duy nhất một cuộc phỏng vấn qua điện thoại.
Bất ngờ hơn. Google thậm chí còn lên kế hoạch phỏng vấn onsite cho tôi (không cần phone screening nữa) sau khi biết rằng tôi đã nhận được 4 buổi phỏng vấn onsite vào tuần tới. Tôi biết sẽ là thử thách nhưng không một ai có thể từ chối lời mời phỏng vấn onsite từ Google cả!

Phỏng vấn Onsite

LinkedIn

phỏng vấn xin việc

Đây là cuộc phỏng vấn onsite đầu tiên của tôi và tôi phỏng vấn tại Sunnyvale. Văn phòng rất gọn gàng và mọi người ai cũng rất chuyên nghiệp, lúc nào cũng vậy.
Mỗi phần kéo dài 1 giờ. Các câu hỏi về coding khá cơ bản nhưng các câu hỏi về ML có chút thử thách. Tuy nhiên, tôi nhận được 1 email từ HR đính kèm các tài liệu chuẩn bị rất hữu ích nên cuối cùng, tôi không quá bất ngờ với mọi thứ. 
Được mua lại bởi Microsoft dường như đã giảm bớt gánh nặng tài chính cho LinkedIn, và giúp họ có cơ hội làm được những thứ thực sự thú vị. Các tính năng mới như quảng cáo chuyên nghiệp và video rất lôi cuốn. Là một công ty tập trung vào phát triển nghề nghiệp, LinkedIn ưu tiên sự phát triển nhân viên của họ. Nhiều team như ads relevance và feed ranking đang mở rộng, thế nên hãy hành động nhanh nếu bạn muốn tham gia. 

Salesforce Einstein

phỏng vấn xin việc

Dự án xuất sắc bởi một team xuất sắc. Team này khá mới và có vẻ giống như một startup vậy. Sản phẩm được xây dựng trên Scala stack nên type safety là điều có thực ở đây! 
Tôi phỏng vấn tại văn phòng Palo Alto. Team có văn hóa đoàn kết và cân bằng cuộc sống - công việc tuyệt vời. Mọi người đều đam mê về điều họ đang làm và thực sự thích thú nó. Với 4 phần, nó ngắn hơn trong so sánh với các cuộc phỏng vấn onsite khác nhưng tôi ước là mình đã có thể được ở đây lâu hơn. Sau đó, người phỏng vấn (anh Mathew) thậm chí còn đưa tôi đi bộ tới bảo tàng HP Garage.

Google

phỏng vấn xin việc

Đúng là leader của ngành và chẳng có gì để nói về nó mà mọi người chưa biết. Nó lớn lắm. Giống như, thực sự, thực sự LỚN. Tôi mất 20 phút đi xe đạp để gặp bạn bè của tôi ở đây. Đồng thời, các lối dành cho ăn uống quá dài. Mãi mãi là một nơi tuyệt vời cho các Developer. 
Tôi phỏng vấn tại một trong nhiều tòa nhà trên khuôn viên Mountain View, và tôi không biết đó là cái nào bởi vì nó quá LỚN.
Những người phỏng vấn tôi rất thông minh, và một khi bắt đầu nói chuyện, họ thậm chí còn thông minh hơn. Sẽ cực kỳ phấn khích khi được làm việc với những người này.
Điều mà tôi cảm thấy đặc biệt về các cuộc phỏng vấn của Google đó là phân tích sự phức tạp của thuật toán là điều thực sự quan trọng. Hãy chắc chắn là bạn hiểu rõ ký hiệu Big O có nghĩa là gì!

Airbnb

phỏng vấn xin việc

“Con kỳ lân” này đang mở rộng rất nhanh với văn hóa doanh nghiệp độc đáo. Người ta có thể cho rằng văn phòng đẹp nhất của Airbnb là ở thung lũng Silicon. Những sản phẩm mới như Experiences và đặt trước nhà hàng, thị trường ngách dành cho phân khúc khách hàng giàu có và mở rộng tới Trung Quốc, tất cả đều đóng góp cho một triển vọng đầy tích cực. Lựa chọn hoàn hảo nếu bạn là người thích thử thách và muốn một trải nghiệm làm việc tại một công ty tăng trưởng nhanh, tiền IPO.
Buổi phỏng vấn coding ở Airbnb có chút độc đáo bởi vì bạn sẽ phải code trong IDE thay vì whiteboard. Thế nên, bạn cần biên soạn code và đưa ra câu trả lời đúng. Một vài vấn đề thực sự khó.
Buổi phỏng vấn có sự tham gia của những người làm việc ở nhiều bộ phận khác nhau. Đây là cách mà Airbnb xem trọng văn hóa. Xuất sắc trong công việc không đảm bảo bạn trúng tuyển.
Nói chung, tôi nghĩ phỏng vấn onsite ở Airbnb khó nhất bởi vì độ khó của vấn đề, thời gian lâu hơn và phỏng vấn có sự tham gia của những người thuộc phòng ban khác. Nếu bạn muốn ứng tuyển vào đây, hãy chắc chắn hiểu văn hóa và các giá trị cốt lõi của họ.

Facebook


Một “gã” khổng lồ khác vẫn đang tăng trưởng rất nhanh, nhỏ hơn nhưng tốc độ nhanh hơn trong so sánh với Google. Với dòng sản phẩm hướng tới mạng xã hội và đầu tư mạnh vào AI và VR, tôi chỉ có thể nhìn thấy tiềm năng tăng trưởng mạnh hơn của Facebook trong tương lai. Với những ngôi sao như Yann LeCun và Yangqing Jia, đây là nơi hoàn hảo nếu bạn hứng thú với machine learning.
Tôi phỏng vấn tại tòa nhà 20, một tòa nhà với vườn hoa ở trên nóc nhà, nhìn ra đại dương và cũng là nơi đặt văn phòng của Zuckerberg. Tôi không nhận thấy bất cứ dấu hiệu rõ ràng nào về việc giải pháp tôi đưa ra là đúng, mặc dù tôi tin là như vậy.
Buổi chiều hôm đó, tôi bị đau đầu. Tôi kiên nhẫn vượt qua các phần phỏng vấn buổi chiều nhưng tôi thấy tôi không hoàn thành tốt. Thế nên, tôi hơi bất ngờ khi biết rằng tôi cũng nhận được lời mời làm việc từ họ.
Nói chung tôi cảm thấy mọi người ở đó tin vào tầm nhìn của công ty và tự hào vào điều họ đang xây dựng. Là một công ty với nửa tỷ giá trị vốn hóa thị trường và đang tăng trưởng, Facebook là nơi hoàn hảo để phát triển sự nghiệp của bạn.

Đàm phán

Đây là chủ đề lớn mà tôi sẽ không đề cập trong bài viết này nhưng bạn có thể click vào đây để tham khảo một bài viết mà tôi thấy chúng rất có ích.
Một vài thứ mà tôi nghĩ là quan trọng:
  1. Hãy chuyên nghiệp.
  2. Hiểu được lợi thế của bạn.
  3. Thành thật hứng thú với các dự án và team.
  4. Kiên nhẫn và tự tin.
  5. Quyết đoán nhưng lịch sự.
  6. Đừng bao giờ nói dối.

Thất bại của tôi trong buổi phỏng vấn với Databricks

phỏng vấn xin việc

Tất cả thành công đều bắt đầu với thất bại, bao gồm cả các cuộc phỏng vấn. Trước khi bắt đầu phỏng vấn những công ty này, tôi cũng thất bại trong buổi phỏng vấn với Databricks vào tháng 5.
Hồi tháng 4, Xiangrui (nhân viên HR tại Databricks) liên lạc với tôi qua LinkedIn hỏi tôi liệu có hứng thú với một vị trí trong team Spark MLlin. Tôi cực kỳ giật mình bởi vì 1) tôi sử dụng Spark và thích thú Scala, 2) các kỹ sư ở Databricks cực kỳ giỏi, và 3) Spark đang cách mạng hóa toàn bộ thế giới dữ liệu lớn. Đây là cơ hội tôi không thể bỏ lỡ, do vậy tôi đồng ý luôn và được mời phỏng vấn một vài ngày sau đó.
Chướng ngại vật rất gian nan và quá trình phỏng vấn cũng khá lâu, bao gồm một bảng câu hỏi phỏng vấn, một cuộc phỏng vấn qua điện thoại, một bài code, và một buổi phỏng vấn onsite đầy đủ.
Người phỏng vấn tôi cực kỳ thông minh nhưng cũng rất khiêm tốn. Trong buổi phỏng vấn, tôi liên tục bị đẩy tới giới hạn. Mọi chuyện đều ổn cho tới khi tới một phần, tôi bị rối vì thiếu kỹ năng, sự chuẩn bị và kết thúc với thất bại hoàn toàn. 
Tôi nhận được thư từ chối vài ngày sau đó. Dù là kỳ vọng thôi nhưng tôi cũng có chút thất vọng trong mấy ngày. Tuy vậy, tôi chân thành mong họ sẽ tiếp tục tạo ra những ảnh hưởng và thành tựu lớn hơn nữa.
Suy nghĩ muộn màng:
  1. Cuộc đời ngắn ngủi. Sự nghiệp càng ngắn hơn. Nên hãy có bước đi đúng đắn ở đúng thời điểm.
  2. Các buổi phỏng vấn không chỉ là phỏng vấn. Chúng là thời điểm hoàn hảo để mở rộng mối quan hệ và kết bạn.
  3. Luôn luôn tò mò và học hỏi.
  4. Đàm phán là điều quan trọng để có sự hài lòng trong công việc.
  5. Nhận được lời mời làm việc chỉ có nghĩa là bạn đã đáp ứng các yêu cầu tối thiểu. Không hề có yêu cầu tối đa. Hãy cố gắng phát triển mình hơn.
Từ buổi phỏng vấn đầu tiên vào tháng 5 cho tới khi được trúng tuyển vào cuối tháng 9, lần thay đổi sự nghiệp đầu tiên của tôi là hành trình rất dài và không hề dễ dàng.
Thật khó cho tôi để chuẩn bị bởi vì trong khoảng thời gian này, tôi vẫn đi làm ở Groupon. Trong nhiều tuần, tôi làm việc theo một kế hoạch đều đặn tới 1 giờ sáng để chuẩn bị cho buổi phỏng vấn, dậy lúc 8.30 sáng vào ngày hôm sau và lại tiếp tục dành toàn bộ năng lượng cho công việc.
Phỏng vấn tại 5 công ty trong 5 ngày cũng cực kỳ căng thẳng và mạo hiểm. Tôi không khuyến khích bất cứ ai làm điều này trừ khi có một kế hoạch rất chặt chẽ. Tuy nhiên, cơ hội nhận được nhiều lời mời làm việc sẽ lớn hơn.
Tôi cảm ơn tất cả các nhà tuyển dụng - những người đã kiên nhẫn giúp tôi vượt qua các buổi phỏng vấn - những người đã dành thời gian quý giá của họ để nói chuyện với tôi, và tất cả các công ty đã cho tôi cơ hội để được tham gia phỏng vấn và mở rộng các cơ hội làm việc của mình.
Điều cuối cùng nhưng quan trọng nhất đó là tôi muốn cảm ơn gia đình của tôi vì tình yêu và sự ủng hộ - bố mẹ của tôi vì đã theo dõi tôi từ bước đi đầu tiên và trong từng bước đi trên chuyến hành trình, người vợ đáng quý của tôi vì tất cả mọi thứ và con gái của tôi vì nụ cười ấm áp.