Khi cố gắng tìm một công việc kỹ sư phần mềm, có thể bạn sẽ phải trải qua một số cuộc phỏng vấn, bao gồm cả thiết kế hành vi và hệ thống. Nhưng vào cuối ngày, tất cả đều phụ thuộc vào một điều: kỹ năng mã hóa của bạn. Trình độ viết mã thành thạo của bạn là yếu tố chính quyết định xem bạn có phải là người hoàn toàn phù hợp với vai trò này hay không.
Bất kể mức độ kinh nghiệm của bạn — cho dù bạn là nhà phát triển dày dạn kinh nghiệm hay mới ra trường — hoàn thành tốt một cuộc phỏng vấn lập trình có thể khó khăn, nhưng sự kiên trì và chăm chỉ sẽ được đền đáp. Là một người đã nhận được lời đề nghị từ Facebook sau cả năm chuẩn bị, tôi biết rõ điều này. Trong bài viết này, tôi muốn chia sẻ với bạn một số mẹo và chiến lược mà tôi đã học được trong quá trình thực hiện.
Hãy đi sâu vào.
Trong công việc hàng ngày của bạn với tư cách là một kỹ sư phần mềm, bạn có thể không sử dụng nhiều thuật toán và dữ liệu. Tuy nhiên, chúng là những điều cơ bản cần thiết mà bạn cần biết. Vì vậy, làm thế nào để bạn có được tốt ở những người? Học các thuật toán và cấu trúc dữ liệu có thể là một thách thức, nhưng đó không phải là khoa học tên lửa hay nghệ thuật bí mật. Vấn đề chính là lượng thời gian cần thiết để học chúng, vì vậy lập kế hoạch và thực hành là chìa khóa.
Hãy coi việc cải thiện kỹ năng mã hóa của bạn giống như xây dựng cơ bắp của bạn. Bạn không thể mong đợi có được thân hình săn chắc chỉ sau vài tuần tập luyện cường độ cao. Tương tự như vậy, bạn sẽ không thành thạo các thuật toán trong vài ngày. Điều quan trọng là phải nỗ lực nhất quán và ổn định trong một thời gian dài để đạt được kết quả như mong muốn.
Trở lại năm 2019, khi tôi bắt đầu chuẩn bị cho các cuộc phỏng vấn viết mã, tôi không biết cách viết ngay cả những thuật toán cơ bản nhất, chẳng hạn như Tìm kiếm nhị phân. Tôi đã mất khoảng sáu tháng luyện tập nhất quán để có được cuộc phỏng vấn tại chỗ đầu tiên với Google. Làm thế nào mà nó đi? Tôi không thành công.
Nhưng tôi đã từ bỏ? Không. Tôi tiếp tục luyện tập thêm một năm nữa cho đến khi cuối cùng tôi nhận được lời đề nghị từ Facebook (mà bây giờ chúng tôi gọi là Meta). Vì vậy, điểm mấu chốt là việc học những kỹ năng này cần có thời gian và công sức, nhưng kết quả đạt được có thể thay đổi cả cuộc đời!
Khi bạn lần đầu tiên bắt đầu giải quyết các vấn đề về mã hóa, việc cảm thấy hơi choáng ngợp là điều hoàn toàn bình thường. Bạn thậm chí có thể tự nghĩ: "Mình bị sao thế này? Tại sao mình không thể giải quyết ngay cả vấn đề đơn giản nhất?" Đó chỉ là một phần tự nhiên của quá trình học tập. Bạn sẽ trở nên tốt hơn theo thời gian.
Một chiến lược hữu ích và đã được thử nghiệm qua thời gian để đối phó với cảm giác choáng ngợp là chia một nhiệm vụ lớn thành các phần có thể quản lý được và đặt ra các mục tiêu có thể đạt được.
Tôi khuyên bạn nên bắt đầu với 1-2 bài toán mức độ Dễ hoặc Trung bình mỗi ngày và dành khoảng 15-30 phút cho mỗi bài. Điều này sẽ giúp bạn xây dựng kỹ năng giải quyết vấn đề dần dần và tránh bị choáng ngợp. Khi bạn bắt đầu cảm thấy tự tin hơn, bạn có thể tăng cường độ bằng cách giải quyết 3-4 vấn đề mỗi ngày.
Để cung cấp cho bạn ý tưởng về những gì có thể thực hiện được bằng cách thực hành nhất quán, cá nhân tôi đã giải quyết khoảng 200 vấn đề (50% Trung bình, 40% Dễ, 10% Khó) hơn một năm trước khi tôi nhận được đề nghị đầu tiên từ một công ty Công nghệ lớn. Hãy nhớ rằng mọi người học theo tốc độ của riêng họ, vì vậy hãy đảm bảo xác định thời lượng thực hành phù hợp nhất với bạn. Điều quan trọng là phải tập trung và duy trì nó.
Nếu bạn muốn tìm các tài nguyên tuyệt vời để thực hành viết mã và nâng cao kỹ năng phỏng vấn của mình, bạn có thể cân nhắc một số tùy chọn. Một số nền tảng tốt nhất là Leetcode , Hackerrank và Codeforces — những nền tảng này đưa ra nhiều bài toán thách thức có thể giúp bạn trau dồi khả năng viết mã của mình.
Nhưng nếu bạn cần thêm cấu trúc hoặc hướng dẫn, thì cũng có các tài nguyên như Interviews.school hoặc các khóa học trả phí như Algoexpert.io. Những điều này có thể đặc biệt hữu ích nếu bạn mới bắt đầu hoặc nếu bạn không chắc nên bắt đầu từ đâu.
Tôi đã sử dụng tất cả các nguồn này trong quá trình chuẩn bị cho cuộc phỏng vấn của riêng mình và có thể đảm bảo chất lượng của chúng.
Điều quan trọng là phải thông thạo ngôn ngữ mà bạn sẽ sử dụng để bạn có thể thể hiện tối đa các kỹ năng kỹ thuật và khả năng giải quyết vấn đề của mình. Thông thường, bạn có thể chọn ngôn ngữ cho mã hóa thuật toán của mình, nhưng đôi khi người phỏng vấn có thể có các yêu cầu cụ thể về ngôn ngữ. Hãy chắc chắn để kiểm tra điều đó trước.
Sử dụng ngôn ngữ mà bạn cảm thấy thoải mái nhất, ngay cả khi đó không phải là ngôn ngữ chính của bạn. Đảm bảo rằng bạn biết cấu trúc dữ liệu phổ biến, phím tắt và quản lý bộ nhớ. Lựa chọn của tôi cho các cuộc phỏng vấn mã hóa là Python, mặc dù tôi làm việc với PHP hàng ngày. Cú pháp đơn giản của Python giúp tôi tạo ra các giải pháp nguyên mẫu một cách nhanh chóng và tôi không phải lo lắng về những thứ như dấu $, dấu ngoặc hoặc dấu chấm phẩy.
Để cải thiện kỹ năng ngôn ngữ lập trình của bạn, hãy dành thời gian học các nguyên tắc cơ bản của nó, thực hành viết mã và nghiên cứu các giải pháp của các lập trình viên khác. Tôi khuyên bạn nên xem Leetcode — trong phần Nhận xét và Thảo luận, bạn có thể tìm thấy một số ví dụ và kỹ thuật tuyệt vời để học hỏi.
Đừng vội giải quyết vấn đề mà không đặt câu hỏi trước. Đây là một sai lầm phổ biến có thể là một lá cờ đỏ cho người phỏng vấn. Đặt một vài câu hỏi làm rõ ngay cả khi bạn cảm thấy tự tin rằng mình hiểu vấn đề một cách chính xác.
Các vấn đề về mã hóa là mơ hồ có chủ ý và người phỏng vấn sẽ không cung cấp trước tất cả các chi tiết cần thiết.
Thay vào đó, những người phỏng vấn muốn bạn làm rõ các chi tiết, vì vậy hãy hỏi một số câu hỏi để chắc chắn rằng bạn và người phỏng vấn có cùng quan điểm.
Bên cạnh đó, theo cách này, bạn sẽ có thể xác định và làm rõ các trường hợp cạnh. Ví dụ: bạn có thể muốn hỏi về định dạng của đầu vào, các loại dữ liệu liên quan hoặc liệu vấn đề có bất kỳ ràng buộc nào không. Biết các chi tiết cụ thể có thể giúp bạn tiết kiệm thời gian và cho phép bạn tập trung vào nhiệm vụ trước mắt.
Khi bạn đang giải quyết một vấn đề trong cuộc phỏng vấn, đừng vội bắt đầu viết mã. Hãy dành một chút thời gian để nói về giải pháp của bạn trước. Điều này sẽ giúp bạn làm rõ vấn đề và đảm bảo rằng bạn có một kế hoạch vững chắc trước khi bắt tay vào việc. Nói ra cũng có thể giúp bạn tiết kiệm thời gian và tránh mắc phải những sai lầm không đáng có.
Bản thân tôi gần như đã rơi vào cái bẫy này. Trong một cuộc phỏng vấn, tôi được yêu cầu triển khai khớp tiền tố chuỗi. Tôi nghĩ ngay đến một giải pháp khá phức tạp liên quan đến Trie. Nhưng khi tôi bắt đầu mô tả thành tiếng ý tưởng của mình, người phỏng vấn đã ngăn tôi lại và yêu cầu một cách đơn giản hơn chỉ liên quan đến việc lặp qua hai chuỗi.
Nếu tôi bắt đầu viết mã ngay lập tức, tôi sẽ lãng phí thời gian cho một giải pháp quá phức tạp mà người phỏng vấn thậm chí không yêu cầu.
Khi bạn đã nói qua về giải pháp và người phỏng vấn hài lòng với nó, chỉ khi đó bạn mới có thể bắt đầu thực hiện nó.
Trong một cuộc phỏng vấn viết mã, người phỏng vấn không quan tâm lắm đến việc bạn có thực sự tìm ra giải pháp hay không.
Họ muốn xem cách bạn tiếp cận quá trình giải quyết vấn đề.
Đảm bảo đánh vần suy nghĩ của bạn và giải thích lý do của bạn khi bạn tiếp tục.
Hãy nhớ rằng người phỏng vấn đứng về phía bạn và ở đó để giúp bạn thành công. Hãy nghĩ về cuộc phỏng vấn như một nỗ lực của nhóm, nơi bạn và người phỏng vấn đang làm việc cùng nhau để tìm ra giải pháp. Tuy nhiên, bạn nên nói hầu hết thời gian (khoảng 70-80% thời gian). Người phỏng vấn đôi khi có thể cung cấp phản hồi hoặc sửa lỗi cho bạn. Hãy cởi mở và sẵn sàng học hỏi từ phản hồi của người phỏng vấn, sử dụng nó để làm lợi thế cho bạn.
Hãy thân thiện và đáp ứng trong suốt cuộc phỏng vấn. Nếu bạn cần một chút thời gian để tập trung, hãy cho người phỏng vấn biết. Hãy tạm dừng một chút để thu thập suy nghĩ của bạn, nhưng đừng để nó kéo dài quá lâu.
Đừng quên kiểm tra nghiêm ngặt mã của bạn sau khi bạn hoàn thành. Việc kiểm tra rất quan trọng để giúp phát hiện bất kỳ lỗi hoặc vấn đề nào mà bạn có thể đã bỏ sót.
Để đảm bảo mã của bạn tạo ra đầu ra như mong đợi, hãy sử dụng các ví dụ đầu vào do người phỏng vấn cung cấp. Cân nhắc kiểm tra các trường hợp cạnh, bao gồm ranh giới đầu vào, định dạng hoặc loại đầu vào, giá trị trống, null hoặc âm và đầu vào quá nhỏ hoặc quá lớn.
Khi bạn đang kiểm tra, hãy xem qua từng dòng mã của bạn và kiểm tra giá trị của các biến và biểu thức. Bằng cách này, bạn sẽ phát hiện ra các lỗi khó phát hiện chỉ bằng cách nhìn lướt qua mã.
Sau khi bạn đã kiểm tra mọi thứ, hãy lùi lại một bước và suy nghĩ về cách bạn có thể làm cho mã của mình tốt hơn nữa. Có thể có một cách hiệu quả hơn để giải quyết vấn đề hoặc bạn có thể làm cho mã dễ đọc và dễ hiểu hơn.
Các cuộc phỏng vấn viết mã là một thách thức nhưng bạn có thể cải thiện đáng kể cơ hội thành công của mình bằng cách chuẩn bị và thực hành kỹ lưỡng.
Hãy tóm tắt lại những điểm chính:
Hãy bình tĩnh và tiếp cận cuộc phỏng vấn như một quá trình hợp tác giải quyết vấn đề.
Chúc may mắn trong các cuộc phỏng vấn mã hóa trong tương lai của bạn!
Hình ảnh khách hàng tiềm năng được tạo bằng cách sử dụng tính năngTrình tạo hình ảnh AI khuếch tán ổn định của HackerNoon, thông qua lời nhắc "một cuộc phỏng vấn mã hóa tại facebook".