Đây là bản dịch của bài viết "Don’t Just LeetCode; Follow the Coding Patterns Instead" của tác giả Arslan Ahmad trên blog Medium. Link gốc mình sẽ để ở phần cuối bài viết này.
Điều gì sẽ xảy ra nếu bạn không muốn thực hiện hàng trăm câu hỏi về code trước cuộc phỏng vấn?
img_0
Phỏng vấn về code ngày càng khó hơn. Để chuẩn bị cho các cuộc phỏng vấn viết code, bạn sẽ cần hàng tuần, nếu không muốn nói là hàng tháng để chuẩn bị.
Không ai thực sự thích dành nhiều thời gian để chuẩn bị cho các cuộc phỏng vấn về code cả. Vậy có giải pháp nào thông minh hơn không?
Đầu tiên, chúng ta hãy nhìn vào vấn đề này.
Bất cứ ai chuẩn bị cho cuộc phỏng vấn về code chắc chắn đều biết LeetCode. Đây có lẽ là kho lưu trữ trực tuyến lớn nhất về phần code cho các câu hỏi phỏng vấn. Hãy cùng xem những vấn đề mà mọi người gặp phải khi sử dụng LeetCode.

Các vấn đề của LeetCode

Có hơn 2000 câu trong LeetCode. Thách thức lớn nhất với LeetCode là sự thiếu tổ chức; nó có rất nhiều vấn đề về code và người ta không biết nên bắt đầu từ đâu hoặc tập trung vào điều gì.
Người ta tự hỏi, liệu có đủ số lượng câu hỏi mà một người nên trải qua để chuẩn bị cho cuộc phỏng vấn viết code không?
Tôi rất muốn thấy một quy trình hợp lý hướng dẫn tôi và dạy tôi đủ các kỹ thuật thuật toán để cảm thấy tự tin khi phỏng vấn. Bản thân là một người lười biếng, tôi không muốn trả lời hơn 500 câu hỏi.

Giải pháp

Một kỹ thuật mà mọi người thường áp dụng là giải các câu hỏi liên quan đến cùng một cấu trúc dữ liệu; ví dụ: tập trung vào các câu hỏi liên quan đến Array, sau đó là LinkedList, HashMap, Heap, Tree hoặc Trie, v.v. Mặc dù điều này có tổ chức nhưng nó vẫn thiếu sự mạch lạc. Ví dụ: nhiều câu hỏi có thể được giải bằng HashMaps nhưng vẫn yêu cầu các kỹ thuật thuật toán khác nhau.
Tôi rất muốn thấy các bộ câu hỏi không chỉ tuân theo cùng cấu trúc dữ liệu mà còn cả các kỹ thuật thuật toán tương tự.
Điều tốt nhất mà tôi gặp phải là các mẫu giải quyết vấn đề như Cửa sổ trượt, Con trỏ nhanh và chậm, Sắp xếp cấu trúc liên kết, v.v. Việc làm theo các mẫu này đã giúp tôi trau dồi khả năng 'vạch ra một vấn đề mới cho một vấn đề đã biết'. Điều này không chỉ làm cho toàn bộ quá trình chuẩn bị phỏng vấn code này trở nên thú vị mà còn có tổ chức hơn rất nhiều.
Các khuôn mẫu code nâng cao “khả năng tìm ra một vấn đề mới tới một vấn đề đã biết”.

Khuôn mẫu code

Tôi đã tập hợp khoảng 20 mẫu bài toán về code mà tôi tin rằng có thể giúp bất kỳ ai tìm hiểu các kỹ thuật thuật toán tuyệt vời này và tạo ra sự khác biệt thực sự trong các cuộc phỏng vấn mã hóa.
Ý tưởng đằng sau những mẫu này là khi bạn đã quen thuộc với một mẫu, bạn sẽ có thể giải quyết hàng tá vấn đề với nó. Để biết thảo luận chi tiết về các mẫu này và các vấn đề liên quan đến giải pháp, hãy xem Grokking the Coding Interview.
Vì vậy, không dài dòng nữa, hãy để tôi liệt kê tất cả các mẫu này:
Sliding Window (Cửa sổ trượt)
img_1
Islands (Matrix Traversal) (Ma trận nghịch đảo)
img_2
Two Pointers (Hai con trỏ)
img_3
Fast & Slow Pointers (Con trỏ nhanh và chậm)
img_4
img_5
Cyclic Sort (Sắp xếp theo chu kì)
img_6
In-place Reversal of a LinkedList (Nghịch đảo một danh sách liên kết)
img_7
Tree Breadth-First Search (Tìm kiếm theo chiều rộng của cây)
img_8
Tree Depth First Search (Tìm kiếm theo chiều sâu của cây)
img_9
img_10
img_11
img_12
img_13
img_14
img_15
img_16
img_17
Fibonacci Numbers
img_18
img_19
img_20

Kết luận

Dù muốn hay không, các câu hỏi kiểu LeetCode là một phần của hầu hết mọi cuộc phỏng vấn lập trình, vì vậy mọi nhà phát triển phần mềm nên thực hành chúng trước khi phỏng vấn. Lựa chọn duy nhất của họ là chuẩn bị một cách thông minh và học cách giải quyết vấn đề bằng cách tập trung vào các dạng vấn đề tiềm ẩn. Tìm hiểu thêm về các mô hình và vấn đề mẫu này trong Grokking the Coding InterviewGrokking Dynamic Programming for Coding Interview.
Hãy xem Design Gurus để biết một số khóa học thú vị về các cuộc phỏng vấn về Code và Thiết kế Hệ thống.
P/s: Ban đầu phần hình ảnh mình định dịch sang tiếng Việt luôn nhưng mà lười quá, mình bê nguyên ảnh gốc sang :)) Btw, mình sẽ cố gắng làm nốt phần đó trong thời gian tới. Cảm ơn mọi người đã đọc bài viết này. Thank you and love you <33