Top 100 câu hỏi phỏng vấn leetcode năm 2022

Kết thúc phần 1, phần hai mình sẽ tập trung nói tất tần tật về những kinh nghiệm dành cho phần Coding Interview, phần quan trọng nhất khi bạn muốn phỏng vấn cho vị trí Software Engineer.

Xu hướng phỏng vấn đầu vào thuật toán (coding interview) ở các công ty công nghệ Việt Nam ngày càng trở nên phổ biến. Bài viết này mình không chỉ hướng tới cách công ty công nghệ lớn, mà còn dành cho những bạn muốn phỏng vấn các công ty công nghệ ở Việt Nam. Những gì mình chia sẻ sau đây cũng không quá khác những nguồn luyện interview khác. Nhưng mình sẽ tóm tắt những thứ mình cho là rất quan trọng cho một buổi phỏng vấn tốt theo kinh nghiệm của mình.

Câu hỏi phỏng vấn

Những câu hỏi phỏng vấn cũng xoay quanh những thuật toán rất cơ bản, các bạn có thể tìm hiểu những thuật toán đó trong cuốn Cracking the Coding Interview. Khả năng cao bạn sẽ không bị hỏi những thuật toán nằm ngoài đó đâu. Như mình đã đề cập nguồn tài liệu ở bài trước, bạn có thể luyện thêm trên những website như leetcode, hackerrank, hoặc interviewbit.

Bao nhiêu câu hỏi cho một buổi phỏng vấn

Có một vài chia sẻ là một buổi phỏng vấn thường có hai câu hỏi. Nhưng những gì mình trải nghiệm, mình đã từng có buổi phỏng vấn chỉ có 1 câu hỏi và một câu follow up, hoặc chỉ một câu hỏi hơi khoai (khoai với mình), hoặc có tới 3 câu.

Các lỗi sai mà chúng ta thường mắc phải.

  1. Không làm rõ lại đề bài.

Không phải đề bài phỏng vấn nào cũng sẽ rõ ràng. Không rõ ràng ở đây không có nghĩa là khó hiểu hay đánh đố. Đề bài sẽ được đưa ra một cách tổng quát nhất. Công việc của bạn là làm rõ lại đề bài. Những câu hỏi các bạn có thể hỏi để làm rõ đề bài đại loại như:

  • Mảng này có thể rỗng không?
  • Mảng có chứa số âm không?

Đừng tự giả định bất cứ điều gì trong đề bài phỏng vấn. Việc đặt câu hỏi cũng giúp bạn ghi điểm với interviewer, họ sẽ cảm nhận được sự cẩn thận của bạn.

Có thể đưa ra thêm một vài testcase (input/output) để xác định là bạn đang hiểu chính xác câu hỏi.

2. Không phân tích độ phức tạp.

Theo cá nhân mình thì phân tích độ phúc tạp mỗi khi đưa ra một thuật toán rất quan trọng. Giống như nó là thứ duy nhất có thể chứng minh cách làm của bạn tốt hay chưa. Ví dụ một bài bạn có thể nghĩ tới được 2 solution, thì việc bạn chỉ ra độ phức tạp sẽ giúp bạn lựa chọn nên làm cách nào. Bạn nên đưa ra độ phức tạp trước khi bắt tay vào code. Có thể kèm theo câu hỏi kiểu “Đây có phải là cách làm tối ưu mà bạn đang mong muốn không?”. Đây là một trong những điểm khác biệt trong hai lần mình phỏng vấn với Facebook (một đậu một rớt T.T).

3. Lao vào code một cái thuật toán chưa tốt.

Có nhiều bạn cứ một mạch đưa lời giản, độ phức tạp rồi bắt tay code luôn. Không thảo luận với người phỏng vấn là bạn đã làm tốt chưa, bạn có cần cải tiến gì không,… Đôi khi bạn đang hiểu sai đề, đôi khi bạn đang làm sai hướng, hoặc bạn làm chưa tối ưu (gần sắp tới). Nếu bạn thảo luận, người phỏng vấn phần lớn sẽ rất vui vẻ chỉ ra cho bạn lỗi sai.

Nghe có vẻ kì lạ phải không? Ai lại đi chỉ bài cho ứng viên bao giờ. Nhưng mình luôn giữ một quan điểm khi phỏng vấn: “Họ phỏng vấn để tuyển mình, không phải phỏng vấn để loại mình.” Tâm lý mình phần nào cũng sẽ ổn hơn, cái suy nghĩ tích cực cũng sẽ làm cho bạn tự tin hơn, não hoạt động tốt hơn.

Lần đầu tiên phỏng vấn FB, mình cũng làm một mạch hết hai bài. Excellent. Và rớt. Mình đã giải thích không quá nhiều. Mình cũng không thảo luận với người phỏng vấn là idea mình như thế nào. Vì lúc đó mình rất tự tin là mình biết làm bài này. :))

Vì thế, thậm chí khi bạn có chắc chắn là thuật toán mình đã tốt rồi (vì bạn đã từng làm bài này rồi), thì cũng nên thảo luận với người phỏng vấn. Như thế bạn cũng đã thể hiện được cái team work ability rồi.

4. Tạo test để kiểm tra lại code.

Sau khi làm, nếu còn thời gian bạn nên kiểm tra lại code một lần nữa. Hoàn hảo hơn nữa, bạn có thể tự tạo một vài testcase và coi thuật toán mình làm việc đã đúng chưa. Theo mình, bạn có phát hiện ra lỗi sai mà hết giờ vẫn được đánh giá cao hơn là bạn không kiểm tra lại code.

Thông thường mình sẽ tạo hết testcase ví dụ như chuỗi rỗng, mảng rỗng, toàn số âm, có số 0, … một vài trường hợp đặt biệt như vậy thôi thì người phỏng vấn cũng cảm giác được bạn cẩn thận rồi.

5. Đừng ngại hỏi hint

Không có bất kì vấn đề gì nếu bạn hỏi người phỏng vấn một cái hint khi bạn đang bí. Đừng ngại hỏi. Như mình đã đề cập phía trên, hầu hết các bạn phỏng vấn sẽ đều vui vẻ giúp bạn. Nhưng nên nhớ rằng, hỏi hint ở đây là một vài cái hint, tránh hỏi hint cả bài nhé.

Trong các buổi phỏng vấn thì mình thích phỏng vấn với Google nhất. Vì 80% các câu mình được hỏi mình chưa gặp bao giờ. Mình đã ‘phải’ hỏi hint vài bài. Nhưng hỏi hint như thế nào cho trí tuệ :)) Là một khi bạn đã đưa hint, bạn nên bám sát vào cái hint đó để phát triển ra, không nên nhận được một cái hint rồi lại tiếp tục với hướng đi của mình. Đợt đó mình còn pass phỏng vấn với positive feedback nữa.

ME AT GOOGLE SINGAPORE

6. Bối rối khi quên syntax lúc phỏng vấn

“Nên chọn một ngôn ngữ mà mình thông thạo nhất, không nên quên syntax trong phỏng vấn” không có nghĩa là không được quên. Chuyện quên là chuyện hết sức bình thường nếu bạn đã không sử dụng nó một thời gian. Điều này hoàn toàn có thể xảy ra với bất cứ lập trình viên nào.

Có lần mình đi phỏng vấn onsite ở một big tech ở Việt Nam. Mình “run code” mãi không được, thế là mình xin phép bạn phỏng vấn cho mình lên Google kiểm tra syntax. Bạn đó ok luôn. Và mình vẫn đậu lần phỏng vấn đó.

Một vài câu chuyện “bựa”

Lần thứ hai mình phỏng vấn Facebook, bài đầu tiên mình đã hiểu sai đề rồi. Mình đưa ra một O(n) solution. Nhưng bạn phỏng vấn bảo là bạn đó muốn O(logn). Hoang mang khủng khiếp. Rồi mình lấy hết bình tĩnh ngồi chứng minh là “Với bài toán này mình không thể nào nghĩ được O(logn)” (thật dũng cảm). Xong bạn nói là mình hiểu sai đề rồi. Lại vẫn đậu.

Một vòng phỏng vấn onsite ở Google, mình đã tự kiếm ra cái solution vớ vẩn nào đó dùng KMP. Mà 2 năm rồi không đụng tới KMP làm sao mình nhớ nó code như nào. Mình thẳng thắn luôn với người phỏng vấn. “Em quên cách code rồi, cho em chừa lại tí code tiếp hàm này nhé.” Bạn ấy đồng ý. Còn 15 phút cuối mình quay lại chứng minh lại nguyên cái KMP. Trông ảnh thích thú lắm. Rồi mình bay vô code nhăng code cuội. Chả biết code đúng hay không nhưng vẫn đậu.

Mình chưa làm người phỏng vấn bao giờ hết nên không thể nào nói được là nguời phỏng vấn nghĩ gì (giờ mà đi làm người phỏng vấn chắc cũng không được ngồi đây chém gió). Nhưng theo cá nhân mình cảm nhận sẽ là như vậy. Nghĩa là dù bạn có không đi tới lời giải cuối cùng, nhưng cách suy luận của bạn hay, bạn cũng sẽ có khả năng không rớt. Bạn có đi tới lời giải cuối cùng mà không có một tí logic nào trong suy luận bạn vẫn có thể rớt. Đó là lí do vì sao ở tập 1 mình bảo bạn không nên học thuật lời giải. Học thuật 500 bài leetcode chưa chắc bạn sẽ đậu phỏng vấn.

Ngoài những điều mình chia sẻ dưới đây, nếu bạn nào có thêm câu hỏi thì cứ bình luận phía dưới nhé 👇👇👇!!!

tiền boa

Kể từ tháng 4 năm 2022, tôi đã phát triển một kế hoạch học tập 12 tuần bao gồm một chương trình giảng dạy để sửa đổi và thực hành các câu hỏi.Nếu bạn muốn tùy chỉnh các câu hỏi thực hành của riêng mình, tôi cũng đã phát triển Grind 75, đây là phiên bản hiện đại của Blind 75 mà bạn có thể tùy chỉnh.

Này, tác giả của Blind 75 ở đây!

Thực hành là cách tốt nhất để chuẩn bị cho các cuộc phỏng vấn mã hóa.Leetcode có hơn một ngàn câu hỏi.Bạn nên thực hành cái nào?Do đó, nhiều năm trước, tôi đã quản lý một danh sách 75 câu hỏi quan trọng nhất trên LeetCode.Nhiều câu hỏi leetcode khác là một bản mash của các kỹ thuật từ các câu hỏi cá nhân này.Tôi đã sử dụng danh sách này trong cuộc săn công việc cuối cùng của tôi để chỉ làm những câu hỏi quan trọng.

Tôi đã chia sẻ danh sách này trên Blind bằng cách trích xuất các câu hỏi từ bài viết Freecodecamp của tôi để tiết kiệm thời gian của mọi người khi sửa đổi và ai đó đã đăng lại danh sách này trên Diễn đàn LeetCode.Bằng cách nào đó, nó đã nổ tung và trở nên siêu nổi tiếng trong bối cảnh phỏng vấn mã hóa, mọi người thậm chí còn đặt cho nó một cái tên - mù 75. Những câu hỏi mù 75 người mù có thể được tìm thấy ở đây.Blind 75. The Blind 75 questions as a LeetCode list can be found here.

Nhiều năm sau, tôi đã chưng cất thêm danh sách thành chỉ 50 câu hỏi và truyền bá chúng qua lịch trình 5 tuần.Dưới đây là lịch trình đề xuất để sửa đổi và thực hành các câu hỏi thuật toán trên LeetCode.Đăng ký tài khoản nếu bạn chưa có, điều quan trọng đối với thành công của bạn trong việc phỏng vấn!

Khi luyện tập, bạn nên coi nó như một cuộc phỏng vấn mã hóa thực sự và kiểm tra kỹ trước khi gửi.Xem xét thậm chí thủ công đến với một số trường hợp thử nghiệm và chạy qua chúng để xác minh tính chính xác!

Tôi đã tạo một danh sách LeetCode cho các câu hỏi sau (ngoại trừ các câu hỏi cao cấp).Hãy sử dụng nó để theo dõi tiến trình thực hành của bạn.

Mẹo chuyên môn

Nếu bạn đang hết thời gian, Algomonster nhằm mục đích giúp bạn thực hiện cuộc phỏng vấn kỹ thuật trong thời gian ngắn nhất có thể.Theo Google Engineers, Algomonster sử dụng cách tiếp cận dựa trên dữ liệu để dạy cho bạn các mẫu câu hỏi chính hữu ích nhất và có nội dung để giúp bạn nhanh chóng sửa đổi các cấu trúc và thuật toán dữ liệu cơ bản.Tìm hiểu và hiểu các mẫu, không ghi nhớ câu trả lời!in the shortest time possible. By Google engineers, AlgoMonster uses a data-driven approach to teach you most useful key question patterns and has contents to help you quickly revise basic data structures and algorithms. Learn and understand patterns, not memorize answers!

Trong tuần 1, chúng tôi sẽ làm nóng bằng cách kết hợp các câu hỏi dễ dàng và trung bình về mảng và chuỗi.Mảng và chuỗi là loại câu hỏi phổ biến nhất được tìm thấy trong các cuộc phỏng vấn;Đạt được sự quen thuộc với họ sẽ giúp xây dựng các nguyên tắc cơ bản mạnh mẽ để xử lý tốt hơn các câu hỏi khó hơn.

Câu hỏiSự khó khănLeetCode
Hai tổngDễLiên kết
Chứa trùng lặpDễLiên kết
Chứa trùng lặpDễLiên kết
Chứa trùng lặpDễLiên kết
Chứa trùng lặpDễLiên kết
Chứa trùng lặpDễLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết

Chứa trùng lặp

Câu hỏiSự khó khănLeetCode
Hai tổngThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết

Chứa trùng lặp

Câu hỏiSự khó khănLeetCode
Hai tổngDễLiên kết
Chứa trùng lặpDễLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết

Chứa trùng lặp

Câu hỏiSự khó khănLeetCode
Hai tổngDễLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết

Chứa trùng lặp

Câu hỏiSự khó khănLeetCode
Hai tổngDễLiên kết
Chứa trùng lặpDễLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuLiên kết
Chứa trùng lặpThời gian tốt nhất để mua và bán cổ phiếuAnagram hợp lệ

Dấu ngoặc đơn hợp lệ

Câu hỏiSự khó khănLeetCode
Subtree của một cây khácDễLiên kết
Tổ tiên chung thấp nhất của BSTDễLiên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết

Tổ tiên chung thấp nhất của BST

Câu hỏiSự khó khănLeetCode
Thực hiện Trie (cây tiền tố)DễLiên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết

Tổ tiên chung thấp nhất của BST

Thực hiện Trie (cây tiền tố)

Vừa phải

Câu hỏiSự khó khănLeetCode
Thêm và tìm kiếm từDễLiên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Tổ tiên chung thấp nhất của BSTThực hiện Trie (cây tiền tố)Liên kết
Vừa phảiThực hiện Trie (cây tiền tố)Liên kết
Vừa phảiThực hiện Trie (cây tiền tố)Liên kết
Vừa phảiThực hiện Trie (cây tiền tố)Liên kết
Vừa phảiThực hiện Trie (cây tiền tố)Liên kết
Vừa phảiThực hiện Trie (cây tiền tố)Liên kết

Vừa phải

  • Thêm và tìm kiếm từ

Yếu tố nhỏ nhất kth trong một BST

Hợp nhất K Danh sách được sắp xếp

Cứngin the shortest time possible. By Google engineers, AlgoMonster uses a data-driven approach to teach you the most useful key question patterns and has contents to help you quickly revise basic data structures and algorithms. Best of all, AlgoMonster is not subscription-based - pay a one-time fee and get lifetime access. Join today for a 70% discount →

Tìm trung bình từ luồng dữ liệu

Khoảng thời gian chènLearn and understand patterns, not memorize answers! Get lifetime access now →

Trình tự liên tiếp dài nhất

Tìm kiếm từ ii19 hours worth of contents into it. Like Tech Interview Handbook, it goes beyond coding interviews and covers resume, non-technical interviews, negotiations. It's an all-in-one package! Note that JavaScript is being used for the coding demos. Check it out →

Các câu hỏi leetcode quan trọng nhất là gì?

Hai tổng.49,1% dễ dàng ..
Thêm hai số.39,9% trung bình ..
Chất nền dài nhất mà không lặp lại các ký tự.33,8% trung bình ..
Trung bình của hai mảng sắp xếp.Độ cứng 35,4% ..
Chất nền dài nhất palindromic.32,4% trung bình ..
Số nguyên ngược.27,3% trung bình ..
Chuỗi đến số nguyên (ATOI) 16,6% Medium ..
Phù hợp với biểu thức thường xuyên.28,2% cứng ..

Leetcode có phải là vấn đề khó được hỏi trong các cuộc phỏng vấn không?

Những câu hỏi khó thường không xuất hiện trong các cuộc phỏng vấn.Hỏi bất cứ ai có kinh nghiệm thực hiện các cuộc phỏng vấn công nghệ.Họ sẽ nói rằng LeetCode Hards không bao giờ được hỏi.Leetcode Hards are never asked.

Tôi nên làm bao nhiêu vấn đề LeetCode trước khi phỏng vấn?

Nếu bạn đang bắt đầu từ đầu.Mục tiêu 100 vấn đề LeetCode dưới dạng một số và chia nó trên các chủ đề và độ khó khác nhau.Nếu bạn đã thực hành một số chủ đề (như DP, biểu đồ), bạn có thể giảm số lượng cho chủ đề đó.100 leetcode problems as a number and divide it well across different topics and difficulty levels. If you have already practiced some topics (like DP, graph) you can reduce the number for that topic.

Leetcode có khó không?

Leetcode rất khó vì nó không phản ánh những gì mà hầu hết các nhà phát triển sẽ gặp phải ngày.Trên thực tế, nếu ai đó cần phải viết một đoạn mã yêu cầu lập trình động, một đệ quy hoặc truyền cây, họ sẽ ẩn cái này đằng sau một số phần mềm cho các nhà phát triển khác.Chúng tôi hư hỏng.. In fact, if someone did need to write a piece of code that required dynamic programming, a recursion or tree traversal, they're going to hide this behind some layer of software for other devs. We're spoiled.