Trong bài viết này, 200Lab sẽ đề cập đến mọi thứ bạn cần biết để chuẩn bị cho các cuộc phỏng vấn kỹ sư phần mềm tại Google. Như các bạn biết đấy Google, Facebook, Microsoft, ... đã trở thành biểu tượng trong ngành IT về những đóng góp công nghệ mà họ mang lại, cùng với đó là quy trình tuyển dụng khó nhằn và đầy tính cạnh tranh.
Vì thế 200Lab mong rằng có thể giúp các bạn developer nắm được nội dung và chủ đề trong các buổi phỏng vấn cụ thể ở đây là tại Google, từ đó xác định xem các kỹ năng nào còn thiếu, cần bổ sung thêm, biết đâu trong tương lại chính bạn sẽ trở thành Lập trình viên tại Google.
1. Vai trò và mức lương của Software Engineer
1.1 Kỹ sư phần mềm của Google làm những gì ?
Vị trí kỹ sư phần mềm tại Google khác biệt so với kỹ sư phần mềm tại các công ty FAANG ( FAANG là viết tắt đề cập đến cổ phiếu của 5 công ty công nghệ Mỹ phổ biến và có hiệu suất tốt nhất) khác ở hai điểm quan trọng:
- Đầu tiên, quy trình phát triển phần mềm ở Google cẩn thận hơn so với môi trường "xu hướng nhanh" như Meta. Bạn phải trình bày ý tưởng của mình trong một cuộc đánh giá thiết kế và được phê duyệt trước khi bắt đầu làm việc. Điều này thường làm cho việc hoàn thành công việc mất nhiều thời gian hơn, nhưng đảm bảo sản phẩm có chất lượng cao.
Chất lượng của sản phẩm ở Google tốt hơn so với Meta. Điều này chủ yếu là do quy trình làm việc chậm rãi, buộc các kỹ sư phải tuân thủ các quy định nghiêm ngặt. Với quy trình kiểm thử kĩ càng, feedback liên tục từ các bên tham gia, đầy đủ tài liệu nội bộ, các quy trình phê duyệt cẩn thận, rất khó để gây ra lỗi khi đưa sản phẩm vào vận hành. - Mary Zhang, Kỹ sư phần mềm tại Google
- Thứ hai, các công cụ có sẵn hỗ trợ, những tiêu chuẩn lập trình tại Google có thể nói là không có nơi nào sánh bằng. Sự thành công của Google được thúc đẩy bởi văn hóa kỹ thuật mạnh mẽ, việc trở thành một phần của họ được xem là đỉnh cao sự nghiệp đối với nhiều kỹ sư.Điều đó cũng có nghĩa là Google có thể là công ty FAANG khó nhất để đậu phỏng vấn.
1.2 Mức lương và Phúc lợi của Kỹ sư Phần mềm tại Google
Theo Glassdoor, Kỹ sư Phần mềm tại Google kiếm được cao hơn 44% so với mức lương trung bình của các kỹ sư phần mềm khác tại Hoa Kỳ.
Dưới đây là mức lương và phúc lợi trung bình cho các cấp độ kỹ sư phần mềm khác nhau tại Google. Thông tin này dựa trên dữ liệu được báo cáo từ Levels.fyi.
Kỹ sư phần mềm tại Google kiếm được cao hơn 70.5% so với đồng nghiệp của họ tại Ấn Độ. Điều này dựa trên tính toán từ dữ liệu của Levels.fyi.Mức lương cơ bản và tổng phúc lợi tăng lên với mỗi cấp độ kỹ sư phần mềm.
Mức lương ở vị trí nhập môn (L3) thực sự cao nhất trong các công ty FAANG. Nhưng khi đến cấp độ L8, mức lương hàng năm của Google bị vượt qua bởi Meta và Amazon.
2. Quy trình Phỏng vấn tại Google
Quy trình phỏng vấn một kỹ sư phần mềm của Google như thế nào? Thường mất hơn tám tuần và bao gồm các bước sau đây:
- Resume, cover letter, and referrals
- Online assessment (new graduates and interns only)
- Technical phone screen: one to two interviews
- Onsite interviews: four to six interviews
Quy trình chính xác có thể thay đổi một chút tùy thuộc vào vị trí cụ thể. Tuyển dụng tại Google sẽ gửi tài liệu PDF mô tả những cuộc phỏng vấn bạn sẽ diễn ra.
2.1 Sàn lọc hồ sơ (Resume screening)
Trước hết, các nhà tuyển dụng sẽ xem xét sơ yếu lý lịch của bạn và đánh giá xem kinh nghiệm của bạn có phù hợp với vị trí đang tuyển không. Đây là bước cạnh tranh nhất trong quy trình ~90% ứng viên không vượt qua giai đoạn này. Vì vậy, hãy cẩn thận hơn trong việc viết CV, điều chỉnh nó sao cho thật phù hợp với vị trí cụ thể mà bạn đang ứng tuyển.
2.2 Tham gia đánh giá trực tuyến (90 phút)
Section này chỉ dành cho sinh viên mới tốt nghiệp và thực tập sinh
Nếu bạn đang ứng tuyển cho vị trí sinh viên mới tốt nghiệp hoặc thực tập sinh, bạn thường sẽ được Google cho làm một bài lập trình mẫu. Bài kiểm tra này bao gồm hai câu hỏi phải hoàn thành trong thời gian ít hơn 90 phút.
Các câu hỏi sẽ liên quan rất nhiều đến chủ đề cấu trúc dữ liệu và giải thuật. Lưu ý rằng bạn sẽ phải tự viết test case để kiểm thử chính đoạn code của mình vì Google sẽ không cung cấp sẵn test case. Để đến với vòng tiếp theo, bạn thường cần phải giải đúng cả hai câu hỏi. Để chuẩn bị thật tốt bạn có thể xem qua các câu hỏi của cuộc thi như Code Jam, Leetcode cũng có sẵn một số bài kiểm tra lập trình mẫu của Google.
2.3 Phỏng vấn kỹ thuật qua điện thoại (Technical phone screen)
Nếu bạn là một ứng viên có kinh nghiệm, hoặc nếu bạn là một sinh viên mới tốt nghiệp đã vượt qua bài kiểm tra lập trình mẫu ở trên, bạn sẽ được mời tham dự một hoặc hai cuộc phỏng vấn kỹ thuật qua điện thoại.
Bước này được gọi là Technical phone screen, sẽ diễn ra dưới hình thức trò chuyện video trên Google Hangouts / Google Meet. Mỗi cuộc phỏng vấn sẽ kéo dài từ 30 đến 60 phút. Bạn sẽ trao đổi với một đồng nghiệp hoặc một quản lý tương lai của mình tại Google, họ sẽ yêu cầu bạn giải quyết các câu hỏi về cấu trúc dữ liệu và giải thuật cũng như thiết kế hệ thống.
Bạn sẽ share một Google Doc với người phỏng vấn, viết giải pháp trực tiếp trên đó và sẽ không có IDE nào hỗ trợ gợi ý hàm hay bôi đen các cú pháp bị lỗi giúp bạn cả chúng ta chỉ có Google Doc mà thôi. Vì vậy, hãy luyện viết các đoạn code trong Google Docs trước khi phỏng vấn.
Cuối cùng, ngoài các câu hỏi lập trình, bạn cũng có thể được hỏi một vài câu hỏi bên lề khác như "Hãy kể về bản thân bạn" "Tại sao bạn chọn Google ?" hoặc "Hãy kể về một dự án gần đây bạn đã làm việc."
2.4 Phỏng vấn Onsite tại Google
Phỏng vấn onsite tại văn phòng của Google mới thực sự là những phỏng vấn đầy khó khăn và thách thức . Bạn sẽ phải dành một ngày tại văn phòng của Google và thực hiện bốn đến sáu cuộc phỏng vấn, vâng bạn không nghe nhầm đâu bốn đến sau cuộc phỏng vấn trong một ngày. Mỗi cuộc phỏng vấn sẽ kéo dài khoảng 45 phút, bao gồm những chủ đề sau:
- Coding Interviews : Phỏng vấn lập trình
- System design interviews (Cấp độ 5 trở đi) : Phỏng vấn thiết kế hệ thống
- Leadership interviews (chỉ dành cho các vị trí quản lý): Phỏng vấn khả năng lãnh đạo
Bạn thường sẽ có ba cuộc phỏng vấn lập trình với các câu hỏi về cấu trúc dữ liệu và giải thuật, một hoặc hai cuộc phỏng vấn thiết kế hệ thống nếu bạn ở cấp độ 5 trở lên
Nếu bạn quan tâm đến việc nâng cao kĩ năng thiết kế hệ thống thì đừng bỏ qua khoá học Design System của 200Lab nhé.
Khóa học Design System: Thiết kế hệ thống Microservice
Khoá học Design System & Microservices được thiết kế nhằm mục đích giúp các bạn lập trình backend, hệ thống và phần mềm trang bị các mindset, kiến thức và công cụ cần thiết về phân tích và thiết kế hệ thống Microservices.
Trong hầu hết các cuộc phỏng vấn bạn sẽ viết code của mình lên các bảng trắng có sẵn trong phòng, một số nơi hiện đại hơn thì họ sẽ trang bị cho bạn Chromebook. Các laptop này đi kèm với một ứng dụng phỏng vấn cho phép bạn chọn ngôn ngữ lập trình mà bạn muốn sử dụng.
Ngoài ra, nếu bạn đang ứng tuyển vị trí quản lý (ví dụ: Quản lý Kỹ thuật) thì bạn sẽ có thêm các cuộc phỏng vấn về kĩ năng lãnh đạo, bao gồm các câu hỏi xoay quanh chủ đề lãnh đạo nhóm và dự án.
Cuối cùng, sau khi các phỏng vấn trên kết thúc, bạn cũng sẽ có cơ hội ăn trưa với một kỹ sư đồng nghiệp tại văn phòng, và đương nhiên không chỉ đi ăn thuần tuý nó được gọi là Lunch Interview, được thiết kế với mục đích giúp bạn đặt câu hỏi về công việc tại Google, môi trường cũng như văn hoá tại đây như thế nào dưới góc nhìn của một anh bạn đồng nghiệp.
3. Các câu hỏi phỏng vấn mẫu vị trí Software Engineer
Những chủ đề chính mà bạn có thể sẽ được hỏi trong các cuộc phỏng vấn đã đề cập đến ở bên trên, theo dữ liêu từ Glassdoor bao gồm như sau.
3.1 Coding & Algorithm
Các kỹ sư phần mềm tại Google giải quyết những vấn đề khó khăn nhất mà công ty đối diện bằng mã nguồn. Do đó, việc họ có kỹ năng giải quyết vấn đề mạnh mẽ là rất quan trọng.
Dưới đây là các loại câu hỏi phổ biến nhất được hỏi trong các cuộc phỏng vấn lập trình tại Google và tần suất của chúng:
- Graphs / Trees (39% ) : Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree.
- Arrays / Strings (26%): Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
- Dynamic programming (12%): Given a
matrix
and atarget
, return the number of non-empty submatrices that sum to target. - Recursion (12%): A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside down). Find all strobogrammatic numbers that are of length = n
- Geometry / Maths (11% ): You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
3.2 System Design
Google Search, GMail, Google Docs, Android và YouTube đều có hơn 1 tỷ người dùng hoạt động hàng tháng. Do đó, các kỹ sư Google cần phải có khả năng thiết kế hệ thống có tính mở rộng cao và hiệu suất cao.
Các câu hỏi về lập trình ở trên thường có một giải pháp tối ưu duy nhất. Nhưng các câu hỏi thiết kế hệ thống mà bạn sẽ được hỏi thường phức tạp hơn và cảm giác giống như một cuộc trò chuyện với người đang phỏng vấn hơn.
Đây là cuộc phỏng vấn sẽ giúp bạn thể hiện rằng bạn vừa có khả năng sáng tạo và chuyên môn cao cùng một lúc. Thông thường, người phỏng vấn sẽ điều chỉnh câu hỏi cho phù hợp với nền tảng của bạn. Ví dụ, nếu bạn đã có kinh nghiệm viết API, họ sẽ yêu cầu bạn thiết kế một API. Nhưng điều này không phải lúc nào cũng đúng, bạn nên sẵn sàng thiết kế bất kỳ loại sản phẩm hoặc hệ thống nào ở mức độ khó cao theo yêu cầu của họ.
Đối với một số vị trí đặc biệt (ví dụ: hạ tầng, bảo mật, v.v.) bạn có thể sẽ có nhiều cuộc phỏng vấn thiết kế hệ thống thay vì chỉ một.
Dưới đây là các câu hỏi phổ biến về thiết kế hệ thống trong các báo cáo phỏng vấn của Google có thể tìm thấy trên Glassdoor.
- How would you design Google's database for web indexing
- How would you design Google Docs
- How would you design Google Search?
- How would you design Google Home (voice assistant)
- How would you design Amazon's books preview
- How would you design a social network
- How would you design a task scheduling system
- How would you design a ticketing platform
- How would you design a system that counts the number of clicks on YouTube videos
- How would you design a webpage that can show the status of 10M+ users including: name, photo, badge and points
Và trên đây là những gì sẽ diễn ra trong một cuộc phỏng vấn vị trí Software Engineer tại Google, cá nhân mình đánh giá nó thật sự rất thử thách và không dễ để vượt qua, nhờ vậy mà họ có thể tạo ra những sản phẩm làm thay đổi cả lĩnh vực công nghệ và tác động mạnh mẽ đến xã hội. Nhưng bạn biết đấy ở Google vẫn có nhiều kỹ sư người Việt Nam nên chúng ta hãy không ngừng học tập và nâng cao kiến thức từng ngày.
Các bài viết liên quan:
- Architecture Pattern - Phần 6: Kiến trúc hướng không gian
- Architecture Pattern - Phần 5: Giới thiệu kiến trúc Microservice
- Architecture Pattern - Phần 4: Kiến trúc vi nhân (Microkernel architecture)
- Architecture Pattern - Phần 3: Kiến trúc hướng sự kiện (Event-driven architecture)
Bài viết liên quan
Apple lên tiếng về AI: Chúng ta có đang đánh giá quá cao Trí tuệ của nó?
Nov 21, 2024 • 8 min read
Whisper AI là gì? Công cụ chuyển giọng nói thành văn bản của Open AI
Oct 17, 2024 • 8 min read
Cursor AI là gì? Hướng dẫn Sử dụng Cursor AI cơ bản
Sep 16, 2024 • 13 min read
IDE là gì? Những công cụ IDE phổ biến nhất hiện nay
Aug 22, 2024 • 11 min read
Cookies là gì? Cookies được sử dụng như thế nào?
Aug 12, 2024 • 9 min read
SDLC là gì? Các mô hình Software Development Life Cycle phổ biến
Jul 13, 2024 • 27 min read