Phỏng vấn dev truyền kỳ #1: Câu hỏi Sắp xếp mảng – ‘Điểm Liệt’ Của Nhiều Fresher/Junior?
Chào mừng các bạn đến với loạt bài “Phỏng vấn truyền kỳ” về phỏng vấn lập trình trên blog của Lucas!
Hôm nay, chúng ta sẽ “mổ xẻ” một câu hỏi phỏng vấn mà mình tin rằng, nó đơn giản đến mức… khó tin, nhưng lại là “gáo nước lạnh” đối với không ít bạn phỏng vấn dev mới vào nghề:
Cho bạn một mảng dữ liệu số, bạn viết mã thế nào để sắp xếp dữ liệu theo thứ tự tăng dần?
Lucas chắc chắn rằng rất nhiều bạn đang cười rất sảng khoái, cảm thấy khó tin rằng đây là một câu hỏi phỏng vấn IT vị trí dev bởi vì nó thật sự là vô cùng “ngây ngô” và “hài hước” đúng không? Nhưng tin mình đi, kinh nghiệm hai mươi năm “chinh chiến” trong ngành và ngồi ở vị trí phỏng vấn đã cho mình thấy một sự thật hơi “phũ”: rất nhiều bạn Fresher và Junior vẫn loay hoay, thậm chí không thể trả lời một cách hoàn chỉnh câu hỏi này.
Mục lục
Vì Sao Câu Hỏi Này Lại Quan Trọng Đến Thế?
Đây là một câu hỏi cực kỳ, cực kỳ cơ bản. Nó giống như việc hỏi một người học bơi xem họ có biết đạp chân, quạt tay không vậy. Nếu bạn không thể trả lời được một cách mạch lạc, thật khó để người phỏng vấn tin rằng bạn là một lập trình viên, một người đã từng thực sự viết mã.
Mục đích chính của câu hỏi phỏng vấn này, đặc biệt trong các buổi phỏng vấn IT vị trí Fresher & Junior, là để lọc ứng viên. Nó giúp nhà tuyển dụng nhanh chóng đánh giá nền tảng kiến thức cơ bản của bạn. Nếu bạn “vấp” ngay ở câu này, cơ hội để bạn đi tiếp vào các vòng sau gần như là không có. Thẳng thắn mà nói, đây chính là một dạng câu hỏi “điểm liệt” trong phỏng vấn dev.
Các Mức Độ Trả Lời – Bạn Đang Ở Vị Trí Nào?
Câu hỏi đơn giản, nhưng cách trả lời lại thể hiện rất nhiều về kiến thức và tư duy của bạn. Mình tạm chia thành các mức độ sau:
Mức Cao cấp
Bạn không chỉ biết rằng có các giải thuật sắp xếp (như Bubble Sort, Selection Sort, Insertion Sort, Merge Sort, Quick Sort…), mà còn hiểu rõ cơ chế hoạt động của chúng và có thể trình bày cách cài đặt (hoặc thậm chí viết code) cho một vài giải thuật sắp xếp cơ bản. Điều này cho thấy bạn có nền tảng về Cấu trúc dữ liệu và Giải thuật (DSA) khá vững.
Mức Chấp nhận được #1
Nhiều bạn không học chuyên sâu về DSA, hoặc xuất phát từ ngành khác. Ở mức này, bạn cần ít nhất trình bày được ý tưởng sắp xếp mảng bằng cách sử dụng hai vòng lặp lồng nhau. Dù không gọi tên thuật toán, nhưng bạn hiểu logic so sánh và hoán đổi vị trí các phần tử để đưa mảng về trạng thái có thứ tự.
Mức Chấp nhận được #2
Một cách tiếp cận khác dùng hai vòng lặp là tìm phần tử nhỏ nhất (hoặc lớn nhất) trong mảng gốc và “đẩy” nó vào một mảng mới cho đến khi mảng gốc rỗng. Cách này tuy không tối ưu về bộ nhớ nhưng cũng thể hiện được khả năng tư duy logic cơ bản để giải quyết vấn đề sắp xếp mảng.
Nếu bạn chưa đạt được ít nhất mức “Chấp nhận được #1”, thì có lẽ chúng ta cần xem xét lại nhé.
Lý Giải Cho Việc “Trượt Vỏ Chuối”: Nguyên Nhân Từ Đâu?
Vì sao một câu hỏi phỏng vấn cơ bản như vậy lại có thể làm khó nhiều bạn? Theo quan sát của mình, có vài nguyên nhân phổ biến:
- Học trái ngành hoặc học theo kiểu “cưỡi ngựa xem hoa”: Nhiều bạn đến với lập trình từ các ngành khác, hoặc chỉ học các khóa ngắn hạn, tập trung vào công nghệ, framework mà bỏ qua những kiến thức nền tảng cốt lõi.
- Không được định hướng cơ bản: Thiếu người hướng dẫn, không biết bắt đầu từ đâu, hoặc chỉ học những gì “hot” trên thị trường mà không hiểu tầm quan trọng của kiến thức gốc rễ.
- Học “lướt phớt”, thiếu sự đầu tư nghiêm túc: Một số bạn sinh viên, dù học đúng ngành, nhưng chưa thực sự tập trung vào việc học, còn dành nhiều thời gian cho các hoạt động khác mà bỏ bê việc củng cố kiến thức chuyên môn cơ bản. Nên các bạn sinh viên, học sinh đang học ngành CNTT mà muốn làm vị trí lập trình ở các công ty tư nhân về sau, thì hãy chú ý bước qua bước đầu tiên này nha.
Lời Kết: Không Cần Cao Siêu, Chỉ Cần Hiểu Bản Chất
Mình hoàn toàn không có ý bài xích hay đánh giá thấp những bạn chưa trả lời tốt câu hỏi phỏng vấn này. Thực tế, ngành Công nghệ thông tin rất rộng lớn và có nhiều mảng công việc không đòi hỏi kiến thức sâu về DSA hay các giải thuật sắp xếp phức tạp. Tuy nhiên, để tự tin “vỗ ngực” là một lập trình viên, một người có khả năng tư duy và viết mã để giải quyết vấn đề, thì việc có thể tự mình “lập trình” một cách sắp xếp mảng dữ liệu cơ bản (dù không phải là thuật toán tối ưu nhất) là điều nên làm được. Nó thể hiện khả năng tư duy logic và giải quyết vấn đề của bạn.Mình hoàn toàn không có ý bài xích hay đánh giá thấp những bạn chưa trả lời tốt câu hỏi phỏng vấn này. Thực tế, ngành Công nghệ thông tin rất rộng lớn và có nhiều mảng công việc không đòi hỏi kiến thức sâu về DSA hay các giải thuật sắp xếp phức tạp. Tuy nhiên, để tự tin “vỗ ngực” là một lập trình viên, một người có khả năng tư duy và viết mã để giải quyết vấn đề, thì việc có thể tự mình “lập trình” một cách sắp xếp mảng dữ liệu cơ bản (dù không phải là thuật toán tối ưu nhất) là điều nên làm được. Nó thể hiện khả năng tư duy logic và giải quyết vấn đề của bạn.
Hãy coi đây là một lời nhắc nhở nhẹ nhàng để chúng ta cùng nhìn lại và củng cố những kiến thức nền tảng nhé. Đừng ngại ngần bắt đầu từ những điều cơ bản nhất trong phỏng vấn IT!
Hẹn gặp lại các bạn trong bài “Phỏng vấn dev truyền kỳ #2”!