Kế hoạch nghiên cứu để giành được các vị trí kỹ sư phần mềm cao cấp tại Meta, Google, v.v.

May 10 2022
Kế hoạch 3 tháng của tôi để chuẩn bị tốt hơn cho các cuộc phỏng vấn Kỹ sư phần mềm Sr.
Đầu tiên, tôi phải đề cập rằng kế hoạch chuẩn bị này dựa trên kinh nghiệm của chính tôi và có thể không nhất thiết phải hiệu quả với những người khác, tuy nhiên, có những khuyến nghị chung có thể có lợi cho bất kỳ ai quan tâm đến quá trình này. TL; DR Đây là một câu chuyện cơ bản nhỏ về bản thân tôi.
Ảnh của Rawpixel trên iStockPhoto

Đầu tiên, tôi phải đề cập rằng kế hoạch chuẩn bị này dựa trên kinh nghiệm của chính tôi và có thể không nhất thiết phải hiệu quả với những người khác, tuy nhiên, có những khuyến nghị chung có thể có lợi cho bất kỳ ai quan tâm đến quá trình này.

TL; DR

Đây là một câu chuyện cơ bản nhỏ về bản thân tôi. Tôi đã làm việc tại Amazon hơn 7,5 năm. Vào thời điểm tôi rời công ty, hơn 97% người Amazonians sau đó đã được tuyển dụng. Quyết định rời đi xuất phát từ việc tôi muốn tìm kiếm cơ hội ở nơi khác, khám phá những thách thức mới và tăng tổng thu nhập của tôi. Tôi là một phỏng vấn viên bán tích cực tại Amazon, nhưng ngoài điều đó, tôi đã không chuẩn bị cho các cuộc phỏng vấn kỹ thuật trong vài năm. Sau vài tháng chuẩn bị và phỏng vấn với một số công ty phần mềm, tôi đã nhận được nhiều lời mời. Sau đó, sau một số cuộc thương lượng, tôi đã ký một lời đề nghị và chấp nhận một vị trí kỹ sư cấp cao tại Meta (trước đây là Facebook).

Xác định xem bạn có thực sự là một kỹ sư cao cấp hay không

Nếu bạn tìm kiếm nhanh trên Google, bạn sẽ tìm thấy nhiều bài báo nói về định nghĩa thâm niên cho các vị trí kỹ sư phần mềm. Tuy nhiên, số năm kinh nghiệm không nhất thiết phải chuyển thành mức thâm niên. Ví dụ: nếu bạn đã làm bất kỳ điều nào sau đây, hãy coi mình là một kỹ sư cấp cao:

  • Chỉ đạo một dự án có phạm vi lớn hơn nhóm trực tiếp của bạn, bao gồm một lượng lớn giao tiếp với các nhóm bên ngoài.
  • Làm quen với các khái niệm Thiết kế hệ thống và thiết kế độc lập một hệ thống bán phức tạp.
  • Mã của bạn sạch sẽ, được ghi chép đầy đủ và có các trường hợp kiểm tra thích hợp.
  • Cố vấn các kỹ sư / thực tập sinh khác. Cố vấn có thể có các hình thức khác nhau và phạm vi từ việc xem xét mã của người khác, tham gia tích cực vào các cuộc họp thiết kế hoặc thiết lập các buổi học tập để cố vấn đầy đủ cho các kỹ sư từ đầu cho đến khi đạt được mục tiêu nâng cao.
  • Chủ động tìm cách giải quyết vấn đề mà không cần được chỉ bảo

Trước khi chuẩn bị

1. Xác định bạn cần chuẩn bị bao nhiêu

Bước đầu tiên tôi thực hiện là giải các câu hỏi dễ phổ biến trên LeetCode mà không tính thời gian mất bao lâu để giải từng bài toán. Tôi đã giải được khoảng 70% số câu hỏi mà không cần chú ý đến thời gian. Điều này cũng cung cấp một khóa học bổ sung tuyệt vời cho một số cấu trúc dữ liệu nhất định như PriorityQueue (Heap) mà tôi chưa bao giờ sử dụng trong công việc hàng ngày của mình. Dựa trên kết quả, tôi nhận thấy rằng tôi cần ít nhất 3 tháng để vượt qua các cuộc phỏng vấn tại chỗ.

2. Tìm hiểu các công ty mục tiêu

Điều quan trọng là phải nghiên cứu và lập danh sách các công ty mà bạn muốn ứng tuyển. Đối với mỗi công ty, tôi đọc mô tả cho các vị trí hiện có để xác định xem chúng có phù hợp với sở thích của tôi hay không và kiểm tra xem tôi có đáp ứng các yêu cầu hay không. Bước này cũng có thể được thực hiện hàng tuần trước khi bạn chuẩn bị và cho bạn ý tưởng tốt hơn về những gì mong đợi từ các công ty và vị trí nhất định.

Tuần 1–4, Trước khi phỏng vấn qua điện thoại

1. Tập trung vào thuật toán / mã hóa

Ở vị trí cũ của tôi, tôi đã thiết kế các hệ thống quy mô lớn. Phần thử thách là các câu hỏi mã hóa đòi hỏi nhiều thời gian hơn để thực hành. Về độ khó của các câu hỏi, tôi dành 20% thời gian cho câu dễ, 70% cho trung bình và 10% cho các câu hỏi phổ biến, khó (ví dụ: Word Ladder 2 , Alien Dictionary , Minimum Window Substring và Word Break 2 ) . Một lần nữa, tôi không dành thời gian cho bản thân nhưng đảm bảo rằng tôi đã cố gắng hết sức để giải quyết các vấn đề trước khi chuyển sang các giải pháp. Để tận dụng nhiều hơn thời gian chuẩn bị có hạn, tôi đã tạo một danh sách 10 Việc Không Cần Làm khi giải quyết các câu hỏi trên LeetCode.

Một chiến lược khác là đặt các buổi phỏng vấn giả trên TechMockInterview để hiểu rõ hơn những lĩnh vực tôi cần cải thiện theo quan điểm của một chuyên gia. Tôi đã đặt các buổi viết mã với những người phỏng vấn Google và Meta, kết quả là khá có lợi.

2. Ứng tuyển các vị trí

Tôi đã nộp đơn vào các vị trí được nhắm mục tiêu của mình trong 2 tuần đầu tiên. Thời gian phản hồi thay đổi với một số công ty trả lời trong vài ngày, một số trong 1-2 tuần, một số không bao giờ phản hồi và những công ty khác gửi từ chối trong giai đoạn đánh giá sơ yếu lý lịch.

Trong khoảng thời gian này, tôi chủ động đặt lịch sàng lọc qua điện thoại vào khoảng thứ 6 hàng tuần với các nhà tuyển dụng. Sau khi ngày kiểm tra điện thoại được hoàn tất, tôi đã tạo một tài liệu cho từng công ty và thu thập tất cả các câu hỏi về mã hóa, thiết kế hệ thống và hành vi mà tôi có thể tìm kiếm trên Glassdoor, phần thảo luận LeetCode và các tài liệu chuẩn bị mà các công ty đó đã cung cấp.

Tuần 5–6: Chuẩn bị cuối cùng cho màn hình điện thoại

Màn hình điện thoại tập trung nhiều vào mã hóa và có lẽ là một số câu hỏi về hành vi. Một thông lệ tốt là nên có khoảng cách ít nhất 2-3 ngày giữa mỗi cuộc phỏng vấn và sử dụng nó để đọc các tài liệu dành riêng cho công ty được đề cập trong phần trước. Lần này, tôi đã tự hẹn giờ trong quá trình chuẩn bị viết mã.

Một phần quan trọng nhưng thường bị bỏ qua là các câu hỏi về hành vi. Một công ty như Snap đề cập rằng một trong những câu hỏi phải biết sẽ là “Tại sao lại sử dụng Snap?” và công bằng, đây là câu hỏi đầu tiên được hỏi. Tôi cũng đã thu thập một danh sách các câu hỏi về hành vi và cố gắng trả lời chính xác từng câu hỏi theo cách SAO .

Tuần 7–12: Chuẩn bị tại chỗ

Tôi đã vượt qua tất cả các màn hình điện thoại ngoại trừ một màn hình. Trớ trêu thay, đó lại là cuộc phỏng vấn mà tôi cảm thấy tự tin nhất. Điều quan trọng cần lưu ý là bạn sẽ gặp phải những thất vọng trong quá trình này. Tuy nhiên, thay vì cố gắng phân tích lý do đằng sau bất kỳ lời từ chối nào, sẽ khả thi hơn nếu bạn chuyển sự tập trung sang phần còn lại của các cuộc phỏng vấn mà bạn đã xếp hàng.

Ảnh của LinkedIn Sales Solutions trên Unsplash

1. Thiết kế hệ thống

Đối với các cuộc phỏng vấn vị trí cấp cao, bạn nên mong đợi ít nhất một vòng thiết kế hệ thống. Điều này đóng một vai trò quan trọng trong việc xác định mức độ thâm niên của bạn trong đề nghị cuối cùng. Lưu ý rằng

Nếu bạn làm một công việc đáng khen ngợi trong lĩnh vực viết mã nhưng lại thực hiện tầm thường trong vòng thiết kế hệ thống, họ có thể từ chối bạn hoặc đề nghị một vị trí trung gian.

Nếu bạn coi mình là một kỹ sư cao cấp dựa trên các yêu cầu tối thiểu đã đề cập trước đó, thì bạn nên làm quen với các khái niệm thiết kế hệ thống cơ bản và đã có các phiên thiết kế dẫn đầu ở vị trí hiện tại của bạn. Để thiết kế hệ thống, tôi đã nghiên cứu các tài liệu sau:

Kênh Youtube Tech Dummies : Các video của anh ấy dựa trên nghiên cứu của anh ấy trên nhiều blog kỹ thuật. Các thiết kế mà ông giải thích rất gần với kiến ​​trúc của các dịch vụ trong thế giới thực. Một số video có thể dài dòng nhưng có nhiều khái niệm cần học (ví dụ như bản phác thảo Đếm-phút) khi xem video.

Kênh Youtube Gaurav Sen : Phong cách giải thích của kênh cụ thể này rất gần với những gì được mong đợi trong một cuộc phỏng vấn thiết kế hệ thống. Tuy nhiên, một nhược điểm đối với tôi là anh ấy tăng tốc độ lồng tiếng trong một số video, điều này có thể khiến một số người xem hơi bực bội.

Tìm hiểu các cuộc phỏng vấn về thiết kế hệ thống : Sở thích cá nhân của tôi là video hơn là văn bản nên các bài hướng dẫn là một nhiệm vụ đối với tôi. Ngoài ra, họ tập trung cao độ vào việc thu thập nhiều con số và phép tính không thực sự cần thiết. Trừ khi bạn được hỏi cụ thể về điều gì đó như số lượng máy chủ cần thiết, bạn chỉ cần biết sơ bộ về quy mô của hệ thống từ những con số thu thập được. Ví dụ, bạn nên biết liệu lưu trữ dữ liệu trong bộ nhớ có phải là một lựa chọn khả thi khi xem xét yêu cầu hoặc liệu bạn có cần một cách khác hoặc thậm chí là một phương pháp kết hợp để lưu trữ dữ liệu của mình hay không. Nó hoàn toàn phụ thuộc vào câu hỏi và sở thích của người phỏng vấn.

Tôi đã tuân theo một cấu trúc rất đơn giản trong các cuộc phỏng vấn về thiết kế hệ thống của mình trừ khi người phỏng vấn muốn dẫn tôi đi theo một hướng khác. Tóm lại, đây là những phương pháp phù hợp với tôi:

  • Làm rõ các câu hỏi, thu thập chức năng và phi chức năng (ví dụ: tính khả dụng, tính nhất quán, độ trễ, độ bền, các con số liên quan đến việc sử dụng hệ thống, v.v.): 10 phút
  • Thiết kế API: 5 phút
  • Thiết kế cấp cao (hầu hết các trường hợp tuân theo kiến ​​trúc dịch vụ vi mô): 10 phút
  • Mô hình dữ liệu (ví dụ như thiết kế bảng): 5 phút
  • Trả lời các câu hỏi tiếp theo hoặc đi vào chi tiết của một thành phần: 10–15 phút

Bất kể vị trí của bạn là gì, các cuộc phỏng vấn kỹ sư phần mềm đều tập trung rất nhiều vào việc viết mã. Bạn nên mong đợi các câu hỏi trên trang web sẽ có phần khó hơn so với màn hình điện thoại. Ở giai đoạn này, cần tập trung nhiều hơn vào thời gian.

Trong quá trình chuẩn bị của mình, tôi nhận thấy 6 chủ đề thực sự phổ biến trong các câu hỏi của người phỏng vấn. Tôi đã dành thêm thời gian để theo đuổi các câu hỏi liên quan đến những chủ đề này.

Ngoài ra còn có các thuật toán / khái niệm được khuyến khích xem xét trong trường hợp chúng xuất hiện trong các câu hỏi khó, chúng bao gồm khoảng cách ngắn nhất Dijkstra, Bellman-Ford, thuật toán Prim trên MSP, Fisher-Yates Shuffle, Quick Select, Graph Coloring, Interval Tree, và Cây phân đoạn.

3. Hành vi

Đừng bao giờ đánh giá thấp tầm quan trọng của những câu hỏi về hành vi. Không đạt ở phần này là thất bại trong buổi phỏng vấn bất kể bạn thể hiện ở phần kỹ thuật như thế nào. Tại Amazon, tôi thấy nhiều ứng viên (mặc dù họ thể hiện tốt trong phần kỹ thuật) bị từ chối chỉ vì họ không đưa ra các kịch bản có thể chấp nhận được trong phần hành vi.

4. Phỏng vấn giả mạo

Có một số nền tảng phỏng vấn giả trực tuyến. Như đã đề cập trước đây tôi đã sử dụng TechMockInterview.com và khá hài lòng với nó. Trước vòng thi tại chỗ, tôi đã đặt thêm một vài buổi với những người phỏng vấn Google / Meta và nhận được phản hồi có giá trị về hiệu suất của mình. Cần lưu ý rằng các câu hỏi của họ thú vị hơn và thách thức hơn những gì diễn ra trong các cuộc phỏng vấn ngoài đời thực của tôi. Chúng hiệu quả đến mức tôi cảm thấy căng thẳng hơn trong các cuộc phỏng vấn so với các cuộc phỏng vấn thực sự! Đây là lý do tại sao có các cuộc phỏng vấn giả với bạn bè hoặc các buổi với các dịch vụ chuyên nghiệp là điều cần thiết để đánh giá hiệu suất của bạn trong các tình huống phỏng vấn thực tế.

Đàm phán và đề nghị cuối cùng

Ảnh của Razvan Chisu trên Unsplash

Mục tiêu cá nhân của tôi là nhận được nhiều lời mời từ các công ty mà tôi ngưỡng mộ và muốn làm việc. Tình huống nhiều lời đề nghị giúp bạn có thêm sức mạnh để thương lượng và tự tin lựa chọn con đường hạnh phúc của mình. Cuối cùng, có được một vị trí tốt không phải là tất cả về tiền bạc. Đó là về điều gì khiến bạn cảm thấy hài lòng trong vai trò mới. Nếu bạn từ chối một lời đề nghị chỉ vì một công ty khác đề nghị mức lương cao hơn cho bạn, bạn có thể sẽ phải làm việc ở một vị trí mà bạn không thích. Điều này có thể dẫn đến việc bạn phải làm việc trong một môi trường khó chịu và lệch hướng với mục tiêu nghề nghiệp của mình. Suy nghĩ sâu sắc về những gì bạn muốn (cơ hội phát triển, cân bằng giữa công việc và cuộc sống, tìm hiểu các công nghệ mới, v.v.) và thương lượng cho đến khi bạn đi đến quyết định cuối cùng thể hiện gần nhất với kỳ vọng của bạn.

© Copyright 2021 - 2022 | vngogo.com | All Rights Reserved