Trải nghiệm Google Foobar - cách tuyển dụng lập trình viên sáng tạo của Google
Google Foobar, một chương trình tuyển dụng bí ẩn của Google, đã thu hút sự chú ý của nhiều lập trình viên trên toàn thế giới. Bài viết này sẽ đưa bạn vào một hành trình khám phá Google Foobar, từ cách thức hoạt động, những thử thách thú vị, cho đến những bài học kinh nghiệm quý báu rút ra được từ quá trình tham gia.
Mở đầu
Bạn có bao giờ tò mò về những cách tuyển dụng sáng tạo của các công ty công nghệ hàng đầu thế giới không? Google Foobar là gì? Tại sao nó lại trở thành một chủ đề nóng trong cộng đồng lập trình?
Google Foobar là gì?
Google Foobar là một nền tảng thử thách lập trình trực tuyến, được Google sử dụng để tìm kiếm những tài năng lập trình xuất sắc. Nó bao gồm các thử thách xảy ra ngay lập tức trên màn hình của nhà phát triển khi họ tìm kiếm một số từ khóa cụ thể liên quan trên google. Bạn có thể thấy ngạc nhiên khi nó chỉ xuất hiện trên Chrome và không ai biết tiêu chí về cách thức và thời điểm nó xuất hiện trên màn hình của bạn. Điểm thú vị là google sẽ tìm đến bạn, chứ bạn không thể chủ động tham gia, trừ khi bạn nhận được lời mời từ 1 người bạn đã tham gia chương trình này.
-
Cách thức hoạt động:
- Người dùng nhận được lời mời ngẫu nhiên khi tìm kiếm một số từ khóa cụ thể trên Google.
- Giao diện thân thiện, các bài toán đa dạng và thử thách.
- Hệ thống chấm điểm tự động và nhận xét chi tiết.
-
Mục đích:
- Tìm kiếm những ứng viên tiềm năng cho các vị trí lập trình viên tại Google.
- Đánh giá khả năng giải quyết vấn đề, tư duy thuật toán và kỹ năng lập trình của ứng viên.
Bạn có thể tìm hiểu thêm về chương trình này tại đây
Trải nghiệm cá nhân với Google Foobar
Một ngày đẹp trời, khi tôi đang google key word dependency injection, chợt thấy google "bị hack". Màn hình hiện ra dòng chữ Curious developers are known to seek interesting problems. Solve one from Google?
Tôi không thoát khỏi cảm xúc phấn khích, Google bị hack ư? Nếu google bị hack thì tôi cũng muốn tham gia vào trò chơi của người có thể hack được Google. Lúc đó tôi còn chả biết Google Foobar là gì, click luôn vào button I want to play
. Và thế là câu chuyện bắt đầu!
Giao diện
Giao diện của foobar là 1 "cửa sổ" terminal trên web. Bạn nhận challenge, viết code, test và submit. Tất cả đều trên giao diện này.
Thử thách đầu tiên
Challenge ngắn gọn và "chất lượng"
Minion Work Assignments
=======================
Commander Lambda's minions are upset! They're given the worst jobs on the whole space station, and some of them are starting to complain that even those worst jobs are being allocated unfairly. If you can fix this problem, it'll prove your chops to Commander Lambda so you can get promoted!
Minions' tasks are assigned by putting their ID numbers into a list, one time for each day they'll work that task. As shifts are planned well in advance, the lists for each task will contain up to 99 integers. When a minion is scheduled for the same task too many times, they'll complain about it until they're taken off the task completely. Some tasks are worse than others, so the number of scheduled assignments before a minion will refuse to do a task varies depending on the task. You figure you can speed things up by automating the removal of the minions who have been assigned a task too many times before they even get a chance to start complaining.
Write a function called solution(data, n) that takes in a list of less than 100 integers and a number n, and returns that same list but with all of the numbers that occur more than n times removed entirely. The returned list should retain the same ordering as the original list - you don't want to mix up those carefully-planned shift rotations! For instance, if data was [5, 10, 15, 10, 7] and n was 1, solution(data, n) would return the list [5, 15, 7] because 10 occurs twice, and thus was removed from the list entirely.
Languages
=========
To provide a Python solution, edit solution.py
To provide a Java solution, edit Solution.java
Test cases
==========
Your code should pass the following test cases.
Note that it may also be run against hidden test cases not shown here.
-- Python cases --
Input:
solution.solution([1, 2, 3], 0)
Output:
Input:
solution.solution([1, 2, 2, 3, 3, 3, 4, 5, 5], 1)
Output:
1,4
-- Java cases --
Input:
Solution.solution({1, 2, 3}, 0)
Output:
Input:
Solution.solution({1, 2, 2, 3, 3, 3, 4, 5, 5}, 1)
Output:
1,4
Use verify [file] to test your solution and see how it does. When you are finished editing your code, use submit [file] to submit your answer. If your solution passes the test cases, it will be removed from your home folder.
Giới hạn thời gian
Tất cả các thử thách của Google Foobar đều có thời gian giới hạn là 1 tuần, tính từ thời điểm bạn lấy đề bài cho đến khi bạn submit solution. Có lẽ vì Google biết những người tham gia đều đang có những công việc khác cần hoàn thành. Nếu trong vòng 1 tuần mà bạn không thể hoàn thành nó, bạn sẽ bị loại.
Bài học rút ra
Với mình, quá trình tham gia thử thách của Google giống như 1 cuộc phiêu lưu thú vị. Mình đã học được khá nhiều điều, không chỉ về thuật toán. Mình sẽ chia sẻ 3 bài học sau đây
Ngoài kia luôn có 1 solution tốt hơn
Viết solution cho các thách thức này của Google thì khá là cuốn hút. Mình nhớ có những hôm mình đã không thể thoát ra khỏi suy nghĩ về thuật toán. Solution của mình chỉ pass 8/10 test case do Google đưa ra, có test case mà code của mình chưa cover được nên vẫn bị fail. Nhưng bạn không biết nó fail ở đâu. Phần kết quả hiển thị ra màn hình chỉ có số thứ tự của test case chứ không có nội dung test case.
Nó vô định như là cuộc sống này vậy, 1 vấn đề bạn gặp phải có thể được giải quyết nhưng bạn không biết được solution của mình còn có thể cải thiện ở điểm nào. Ngoài kia vẫn còn 1 điều gì đấy có thể giúp solution của bạn trở nên tốt hơn.
Điều mình học được là luôn suy nghĩ thêm về các khía cạnh khác của solution, nhìn vấn đề ở nhiều góc độ khác nhau, thử nhiều cách tiếp cận vấn đề khác nhau. Ngoài kia vẫn luôn có 1 solution khác tốt hơn solution hiện tại, vấn đề là bạn có tìm ra nó hay không.
Làm việc sáng tạo
Google foobar là 1 cách thức tuyển dụng đầy sáng tạo của Google. Google biết toàn bộ lịch sử tìm kiếm của bạn, thời gian bạn sử dụng ở từng trang web, các chủ đề mà bạn quan tâm. Như thể, bạn không cần phải tự giới thiệu chính mình, Google biết bạn là ai và chủ động "chạm" đến bạn. Đó là 1 phễu lọc rất hiệu quả, cách tiếp cận rất sáng tạo.
Viết test tốt có thể kiểm tra được mọi khía cạnh của solution
Quá trình kiểm tra solution của Google Foobar đều diễn ra tự động thông qua các test case.
Làm sao để so sánh độ phức tạp thuật toán của 2 solution? "Khuếch đại" input, giới hạn thời gian, giới hạn tài nguyên. Mọi điểm mạnh, yếu khi được khuếch đại lên thì đều trở nên rất rõ ràng.
Chất lượng của solution đều có thể được kiểm tra bằng test case, vấn đề là bạn có đủ khả năng để tạo ra test case đó không mà thôi
Tái phím
Mình đã tham gia đến level 3/5 của Google Foobar. Tại sao ấy hả? Do mình không đủ trình về thuật toán để giải quyết ngay các bài toán đó, cũng có thể do mình không dành đủ thời gian để suy nghĩ về bài toán đó, hoặc mình không thực sự thích đi quá sâu vào các thuật toán...
Tất cả đều là lựa chọn, quan trọng là mình đã thử và đã "lĩnh giáo" được nhiều điều.
Về các challenge và solution liên quan, bạn nào thích thì có thể xem thêm tại repo này: https://github.com/zingfeng/google-foobar
Nói thế thôi, chứ trước khi quyết định dừng chơi thì mình đã gửi lời mời tham gia sang 1 email khác của mình để vẫn có thể tham gia lại challenge này trong tương lai. Hehe (khi bạn qua milestone là level 2 thì bạn có quyền invite 1 người bạn khác qua email)
All rights reserved