Phỏng vấn để tìm việc ngành Máy tính ở Silicon Valley

Như bạn một bạn đọc blog có đề xuất, mình viết về quá trình phỏng vấn của mình.
Trước tiên, đây là kinh nghiệm riêng của mình, và trường hợp của mình có lẽ là trường hợp ít gặp hơn. Nếu thật sự bạn muốn làm việc ở một công ty công nghệ Mỹ, xin đọc post "Kinh nghiệm tìm việc làm ở Silicon Valley" của kỹ sư Dương Ngọc Thái. Mình nghĩ đó là bài viết chân thực và bổ ích hơn cả với người muốn tìm việc làm ở Silicon Valley.
Như đã nói ở post trước, việc phỏng vấn ở Tesla hoàn toàn là một sự tình cờ. Mình nhận được một lời mời nói nên làm việc với họ từ một người mình cũng không biết là ai. Ông ấy có tình cờ đọc bài mình viết (cũng là về phỏng vấn xin việc) trên Hacker News và viết một email ngắn động viên mình nên phỏng vấn với họ. Mãi sau này vào mới biết ông ta là sếp quản lý một đội kỹ sư cả trăm người trong đó có mình.

Tesla không khác gì các công ty công nghệ khác khi phỏng vấn với họ và các điểm anh Thái viết trong bài viết mình dẫn ở phía trên đều đúng (một lần nữa, nếu bạn chưa đọc thì nên đọc). Các công ty công nghệ lớn đến nhỏ đều đã thuộc lòng và đều phỏng vấn cùng một bài, không có công ty nào chạy ra ngoài những giai đoạn đó. Bạn sẽ phải gửi resume. Sau khi gửi resume và bạn sẽ phải nói chuyện với người tuyển dụng. Sau đó bạn sẽ phải phỏng vấn qua phone với một vài kỹ sư đang làm việc với họ. Họ có thể sẽ giao "bài tập về nhà" cho bạn làm. Bài tập về nhà này có thể kéo dài khoảng 5 tiếng đồng hồ nhưng không nên hơn.
Ngoài những điều ở blog post của anh Thái, nên nhớ với bất cứ công ty nào, bạn cũng tuyển họ chứ không chỉ họ tuyển bạn. Người phỏng vấn trong công ty lớn và có uy tín thì không phải lo về vấn đề "bài thử việc," nhưng người phỏng vấn cho các công ty nhỏ hơn thì bạn nên dùng một bài thử trước khi quyết định có mất thời gian làm bài thử việc này không. Phép thử này để xem họ có muốn tuyển bạn để làm việc hay lợi dụng cơ hội tuyển bạn đó để lợi dụng bạn làm việc không công cho họ. Bạn nên tự hỏi xem họ có bắt bạn làm một bài toán tương đối vô nghĩa với công việc hiện tại của họ không. Nếu câu trả lời là "bài toán này hoàn toàn vô nghĩa" thì nên làm bài tập này và tiếp tục phỏng vấn. Nếu như họ bắt bạn làm một việc mà có thể họ đang cần làm thật và họ bắt bạn làm hoàn chỉnh mất một vài ngày thì đừng làm và bỏ qua công ty hay cá nhân đó. Tuyệt đối bạn không bao giờ nên nhận những lời đề nghị "thử việc" không công hoặc lương thấp trong vòng một vài tháng. Vấn đề của bài toán thử việc là để sàng lọc những người nói dối về khả năng của mình, chứ không phải là để không trả tiền cho người làm được việc. Công ty nào nghiêm túc sẽ không bao giờ làm những việc "thử việc" trá hình như thế. Không bao giờ bạn nên đi mất thời gian với những người nhận thực tập hay thử việc không công, đặc biệt với ngành công nghệ thông tin -- làm như vậy là bạn đang xúc phạm danh dự của mình (với thực tập sinh, mình nghĩ việc trả lương thấp không có vấn đề gì, nhưng chỉ đừng nhận việc mà ai đó không trả lương). Hãy dành thời gian và công sức của mình cho những nơi nghiêm túc hơn thay vì tìm cách vắt nước ra từ một cái chày. Mặt khác, đừng nên cảm thấy bị xúc phạm khi họ hỏi hay yêu cầu bạn làm một vấn đề mà bạn biết rõ và họ biết rõ dưới khả năng của bạn, vì có rất nhiều người nói dối khi viết resume.
Sau khi bạn qua được tất cả những vòng phỏng vấn này rồi thì bạn thường sẽ được bay đến đại bản doanh của họ để phỏng vấn "on-site." Bạn sẽ dành một ngày để phỏng vấn với dăm bảy người, và chuẩn bị trả lời bất cứ một câu hỏi nào.
Một trong những huyền thoại người ta hay thêu dệt là các công ty này sẽ hỏi câu "lỗ rốn con gà nằm ở đâu?" hoặc "một cái xe buýt thì chứa được bao quả bóng bàn?" hoặc "làm cách nào để thả một quả trứng từ tầng 31 mà không vỡ?". Với kinh nghiệm của mình đã phỏng vấn ở một vài chỗ thì không nơi nào họ hỏi những câu như thế.
Tesla có một điểm tương đối khác với các công ty lớn khác là họ sẽ bắt thuyết trình trong 30 phút một dự án người phỏng vấn đã làm, về bất cứ đề tài trên trời dưới biển gì đều được, rồi sẽ để 5-6 kỹ sư phỏng vấn tiếp, mỗi người 45-50 phút. Đề tài mình chọn là một dự án phần mềm tự do mình đã làm. Trình diễn của mình làm bằng Powerpoint và rất không chuyên nghiệp. Điều này làm cho mọi người cảm thấy hứng khởi về công việc mình làm và thoải mái hơn. 
Trước khi phỏng vấn onsite, mình có luyện tập leetcode một chút nhưng không dành quá nhiều thời gian để "luyện đề," nhưng có dành thời gian để trình diễn thử và xem xét từ ngữ và hình ảnh trong slide với một vài người bạn của mình. Từ slide 20 trở đi là các slide back-up tức là mình đoán các câu hỏi họ có thể sẽ hỏi rồi chuẩn bị trước, nếu họ hỏi thì tốt, không hỏi thì thôi không nói gì cả.
Trong trường hợp của mình, các kỹ sư thường rất hào hứng với dự án mình đã làm nên họ thường bỏ tới 15-20 phút hỏi về dự án của mình (khi mình biết rất rõ câu trả lời) và chỉ còn 20-25 phút để hỏi một câu hỏi về chuyên môn và lập trình. Điều đó là lợi thế lớn nhất của mình so với khi phỏng vấn ở Google là mình "quảng cáo" mình ở một công việc ít có liên quan tới những gì họ biết, nên họ dành cả 45 phút để hỏi các bài kiểu leetcode rất mệt. Với kinh nghiệm phỏng vấn của mình tại Google, mình phải làm 2 bài tập với từng kỹ sư, thường có một bài tập khó và một bài tập rất khó. Ở Tesla, mình phải trả lời một vài câu hỏi mình biết rất rõ, và một vài câu hỏi mình biết không rõ bằng, như vậy là đỡ mệt hơn hẳn.
Sau đó thì một vài ngày sau họ sẽ nói mình có được nhận vào làm hay không và nếu như qua, đi thương lượng lương bổng. 

Những điều cần chú ý khác:
- Đúng như anh Thái đã đề cập, nếu bạn có người có uy tín ở trong công ty giới thiệu với đội của họ vì họ ấn tượng với bạn trước thì cơ hội của bạn tăng lên rất nhiều lần. Các sản phẩm, dự án có tiếng, bài báo khoa học, blog, hay đóng góp cho phần mềm tự do nguồn mở đều là những điều được những người làm ở đó rất có cảm tình. Khi còn ở trường học, bạn nên dành thời gian để làm những việc đó, vì nó cho thấy ngoài khả năng chuyên môn bạn còn là người thích làm việc với máy tính nữa. Với kinh nghiệm của mình, cách dễ nhất để tạo được mối quan hệ với những người làm máy tính hay bất cứ ngành nghề nào khác là chọn người cùng cùng tính tình sở thích và nói chuyện với họ. Việc sẽ rất có thể làm người khác khó chịu là email tâm tình vu vơ không chủ đích với họ hay muốn hỏi họ làm "sư phụ." Không ai muốn làm "sư phụ" cho người khác, mà họ muốn kết nối với những người cũng làm người đó phấn khởi khi nói chuyện. Việc hai người ở hai nấc thang khác nhau trong cuộc sống hay chênh lệch tuổi tác rất ít quan trọng, điều quan trọng là việc cái nhìn đến cuộc sống giống nhau.
- Mặt khác, đừng ngại khi hỏi một người bạn biết nhưng không quá thân đang làm ở các công ty như Google giới thiệu để xin việc. Họ thường tốn tương đối ít thời gian để giới thiệu và thường sẽ được nhận thêm tiền thưởng nếu người họ giới thiệu được tuyển nên họ cũng không mất gì lắm. Nhưng với kiểu giới thiệu này thì cơ hội của bạn không tăng lên, mà may mắn thì chỉ làm cho công việc nhanh lên một vài ngày và có người chắc chắn sẽ đọc resume của bạn thay vì có thể bị chất đống và không ai đọc thôi.
- Một trong những tài nguyên mình cảm thấy tuyệt vời nhất cho việc chuẩn bị phỏng vấn là trang web codility và leetcode. Bạn nên hoàn thành ít ra là 50% số câu trả lời trong đó trước khi nghĩ mình có cơ hội nào thật sự.
- Một trong những lý do bạn nên đi du học đại học hoặc sau đại học là để "mua" những cơ hội như thế này vì sẽ rất ít người muốn tuyển thẳng người từ Việt Nam.
- Nếu bạn đang du học đại học hoặc master, điều tốt nhất bạn có thể làm cho mình là apply trước vào internship vì phỏng vấn internship dễ hơn và cơ hội tốt hơn nhiều so với sau khi đã ra trường. Sau khi vào được internship rồi thì cơ hội được nhận trở lại tăng lên rất nhiều. Đừng về Việt Nam chơi hè. Để có việc mùa hè thì thường bạn cần phỏng vấn muộn nhất là vào tháng 2. Thường các công ty bắt đầu xem xét các đơn xin internship vào tháng 10 của năm trước.
- Nếu bạn phỏng vấn không được thì bạn sẽ được thử lại trong 1 năm tới.
- Đừng đi phỏng vấn với công ty bạn thích nhất ngay trừ khi bạn đang apply internship. Có vài lý do: Một là bạn chưa có kinh nghiệm phỏng vấn, thứ hai là khi bạn được nhận ở đâu đó rồi thì bạn sẽ tự tin và thoải mái tinh thần hơn rất nhiều. Thứ ba nữa là khi có lời mời cạnh tranh nữa thì chắc chắn bạn sẽ có rất nhiều lợi thế trong việc thỏa thuận lương.
Tóm lại: Nếu bạn là sinh viên, bây giờ vẫn chưa quá muộn để apply intership cho mùa hè tới.

Bonus: Các câu hỏi mình đã được hỏi ở các kỳ phỏng vấn mà mình nhớ (viết bằng ngôn ngữ nào cũng được):
- Khoảng 20 phút: Cho 4 điểm trong không gian 2 chiều, viết một hàm để trả lời xem 4 điểm đó có làm thành hình vuông không.
- Khoảng 30 phút: Viết một chương trình để vẽ ra hai cái kim giờ và kim phút trong một cái đồng hồ, cho biết trước thời gian.
- Khoảng 15 phút: Viết một hàm để khi ta vẽ một đường chạy qua từng ký tự của chuỗi ký tự, thì nó thành hình trôn ốc. Ví dụ, biến chuỗi "123456" thành "162534." (Mình nhớ đây là câu hỏi "dễ hơn," phải làm xong trong 15 phút ở Google.)

- Phone, 45 phút - 1 tiếng: Viết một hàm để dóng hàng và trả lời hai xâu ký tự bất kỳ khác nhau bao nhiêu ký tự (tức là tính Hamming distance).
- 5-10 phút: Viết một hàm để đảo ngược một xâu ký tự.
- 20-30 phút: Viết một hàm để thực hiện memmove. Câu hỏi thêm (sau khi bạn đã trả lời được xong câu hỏi chính: Thế nếu hai phần bộ nhớ có phần đè lên nhau thì sao?)
- Bài tập về nhà (3 tiếng hoặc hơn): Viết một chương trình để parse file CSV.
- Bài tập về nhà(3 tiếng hoặc hơn): Viết một chương trình làm SMS server và có các API để mỗi người nhận tin, gửi tin đến số khác, vân vân.
- 30 phút: Thiết kế hệ thống có 3 chiếc thang máy trong một khu dân cư đông người. Mỗi thang máy có hai nút ở bên ngoài (lên/xuống) và các nút ở bên trong.
- 10-20 phút: Khi bạn bật máy tính (Linux hoặc hệ điều hành bạn chọn) lên thì chiếc máy tính làm những gì cho đến khi nó hiện màn hình login? Máy Raspberry Pi làm gì? Nói càng rõ càng tốt.
- 5 phút: Sự khác biệt giữa một chương trình viết bằng C và một chương trình viết bằng Go (hay Python, hay Java) là như thế nào? Tại sao người ta không viết hệ điều hành bằng Python hay Java?
- 20-25 phút: Một chiếc điện thoại thông minh cần phải biết làm cách nào để nó tắt màn hình đi. Giả sử bạn cần phải viết một chương trình để điều khiển "tắt màn hình" ở điện thoại. Bạn thiết kế nó thế nào?
94
3088 lượt xem
94
2
2 bình luận