Hi các bạn, với giai đoạn kinh tế khó khăn hiện nay thì việc xin vào các công ty big tech rất là khó khăn, thật ra là các công ty nhỏ cũng khó chứ nói gì big tech 😢. Một điều khá buồn là các bạn sinh viên bây giờ hầu hết chạy theo framework, kể đến frontend thì react vue, backend thì các framework của nodejs, spring boot,... Hỏi về framework thì các bạn sinh viên chém gió ghê lắm, nhưng hỏi đến các kiến thức cơ bản trên trường thì ú ớ không biết gì. Phải nắm chắn nền tảng thì mới vô được công ty big tech, mới thành anh IT lương ngàn đô, và bài này chính là bài gối đầu cho các bạn có mục tiêu ngàn đô giống mình khi xưa. Mình không lòng vòng nữa, bắt đầu nội dung chính thôi.
1. Cấu trúc dữ liệu và giải thuật
Đây là phần cơ bản nhất nhưng cũng là phần phân loại ứng viên. Mình từng xin vào vài công ty big tech ở Việt Nam thì những câu đầu tiên đều là phần này. Bạn nào không nắm chắc phần này thì gác lại ước mơ mới ra trường lương ngàn đô nha. Mình sẽ liệt kê những kiến thức quan trọng trong phần này, các bạn có thời gian thì học hết tất cả kiến thức liên quan nhé.
1.1. Các khái niệm cơ bản của cấu trúc dữ liệu và giải thuật
Phần này thì các bạn sẽ phải học về mảng, danh sách liên kết (linked list), ngăn xếp (stack), hàng đợi (queue), cây (tree), đồ thị (graph). Những kiến thức này bạn đều phải học hết, tuy nhiên cần nắm sâu nhất về hàng đợi và ngăn xếp, tiếp theo là đến mảng, danh sách liên kết, cây và cuối cùng là đồ thị. Vậy cụ thể nên ôn trọng tâm từng phần như thế nào?
1.1.1. Stack và queue
Trong phần này, các bạn cần phải nắm rõ push(), pop(), enqueue(), dequeue(). Tốt nhất nên tự code lại một chương trình mô phỏng stack và queue và phải hiểu rõ nó. Tiếp theo là phần kinh điển của stack : tiền - trung - hậu tố
1.1.2. Danh sách liên kết
Phần này thì chủ yếu về danh sách liên kết đơn, cần phải nắm rõ các lý thuyết cơ bản về nó, đồng thời học các giải thuật liên quan đến dslk ( tìm kiếm, sắp xếp, reverse linked list , ... ) Về danh sách liên kết thì khá khó cho các bạn, tuy nhiên dành một khoản thời gian ra tự code thuần bằng c++ thì các bạn sẽ thấy nó rất dễ hiểu thôi. À các bạn còn phải nắm rõ** độ phức tạp của từng giải thuật** nữa nhé.
1.1.3. Cây
Sau khi ôn danh sách liên kết xong thì các bạn đừng vội mừng, vì tiếp theo sẽ là cây với một đống giải thuật khiến bao anh em IT lú hết cả đầu. Về cây thì trọng tâm là cây nhị phân, các bạn sẽ phải học một số bí kíp võ công như duyệt trước/giữa/sau và duyệt theo mức (level) thần công. Môn thần công này bên trong có rất nhiều tầng khác nhau bắt buộc các bạn phải luyện nhuần nhuyễn ( coi chừng tẩu hoả nhập ma lấy râu ông nọ cắm cằm bà kia ). Ngoài ra thì phải ôn thật kĩ các lý thuyết về cây, các lý thuyết về cây rất dễ nhầm lẫn giống như các giải thuật liên quan đến nó vậy, vì nó kha khá giống nhau, nhưng chỉ cần nhầm 1 tí thoi là kéo theo sai hết kiến thức về cây
1.1.4. Đồ thị
Trải qua 2 cơn ác mộng danh sách liên kết và cây thì tới phần này các bạn cũng đã dần quen với các giải thuật rồi. Phần này cũng khá tương tự với 2 phần trên thôi, các bạn cũng học kĩ lý thuyết, và học các giải thuật tìm kiếm theo chiều rộng (BFS), tìm kiếm theo chiều sâu (DFS), thuật toán đường đi ngắn nhất (Dijkstra, Bellman-Ford), thuật toán cây khung nhỏ nhất (Kruskal, Prim).
1.2. Các thuật toán sắp xếp và tìm kiếm
Khác với phần cơ bản bên trên, phần này là phần được hỏi nhiều nhất trong các bài test của các công ty lớn. Về cơ bản thì các bạn cần phải ôn :
- Bubble Sort
- Insertion Sort
- Selection Sort
- Merge Sort
- Quick Sort
- Heap sort
- Tìm kiếm tuyến tính
- Tìm kiếm nhị phân
Phải ôn kỹ cách cài đặt thuật toán, khi nào thuật toán xảy ra trường hợp xấu nhất/ tốt nhất, độ phức tạp là O bao nhiêu. Rất nhiều bạn bị sai phần này vì không ôn kĩ. Hầu hết các công ty big tech đều sẽ cho bạn bài test trắc nghiệm, phải qua được bài test này mới vô được vòng phỏng vấn, và phần này là phần được ra khá nhiều.
1.3. Kỹ thuật đệ quy
Phần này thì khá rộng, chủ yếu các bạn phải học kĩ và hiểu rõ khi nào thì dùng đệ quy. Rồi học các bài toán gắn liền với đệ quy như bài tháp HN chẳng hạn. Khi test thì phần này chủ yếu ra một đoạn code rồi bạn phải chọn code đúng hoặc tìm đoạn code còn thiếu. Phần này khá hack não, yêu cầu bạn phải luyện nhiều quen tay thôi chứ ôn vài buổi thì không có hi vọng gì
Vậy là coi như xong các phần trọng tâm của môn cấu trúc dữ liệu và giải thuật rồi. Ngoài các kiến thức trọng tâm bên trên thì các bạn nên ôn sơ lại tất cả kiến thức liên quan nhé. À ngoài ra thì các bạn tìm đề CTDL của các trường bách khoa, uet để ôn và làm. Nào các bạn tự tin nói dăm ba cái môn này, nhắm mắt cũng 10 điểm là các bạn thành công =)))))))
2. Thuật toán
Chắc ai đọc tới đây thì cũng đều có ước mơ vào các công ty big tech hoặc các công ty lớn rồi nhỉ. Nếu các bạn tìm hiểu thì ngoài kiến thức cơ bản nêu bên trên thì thuật toán chính là vũ khí mạnh nhất của một lập trình viên, không chỉ mỗi intern/fresher mà các vị trí càng cao thì vũ khí này càng phải được mài dũa nhiều hơn, như trong tiên hiệp thì gọi là bản mệnh pháp khí đấy😁
Về phần này thì mình không thể liệt kê kĩ như phần bên trên được, vì là thuật toán mà, vô số bài vô số dạng, mình chỉ có thể đưa hướng để các bạn có thể dễ dàng luyện tập được thôi. Có rất nhiều trang để luyện thuật toán như là leetcode, hackerRank, codeforces, ... Nhưng tốt nhất để ôn luyện phỏng vấn thì chỉ có leetcode, hầu như các công ty đều lấy bài từ leetcode, và nó cũng rất dễ tiếp cận và sử dụng. Các trang kia thì mình nghĩ các bạn có một số kiến thức thuật toán nhất định đã rồi dùng, vì các trang kia chủ yếu dùng để thi đấu.
Về roadmap để ôn thì mình rất khuyến khích các bạn ôn theo neetcode. Những người luyện thuật toán không ai không biết đến neetcode. Chiến thần này sở hữu kênh youtube rất lớn với vô số video giải thích chi tiết các bài trên leetcode, đồng thời chiến thần này cũng có một trang web cùng tên ( vô trang này là các bạn sẽ thấy lộ trình cho người mới cực kì chi tiết )
3. Các kiến thức quan trọng khác
Tới đây chắc các bạn biết nên ôn gì rồi đúng không, hay lục lại chương trình học trên trường xem các bạn đã trả lại thầy cô các kiến thức nào. Các bạn phải ôn kĩ lại SQL, kĩ về ngôn ngữ các bạn định sẽ chọn, các kiến thức cơ bản về network, .... ngoài những môn học ra thì phải nhớ lại cả quá trình teamwork, các bạn đã xử lý như nào, bài học kinh nghiệm gì, vô phỏng vấn mà trả lời em toàn làm taowork chứ e không biết teamwork là xác định lun.
4. Tổng kết
Bên trên là tổng hợp hết những kiến thức quan trọng rồi. Các bạn thấy không, cái đưa các bạn vô big tech là kiến thức căn bản trên trường, những kiến thức mà bạn học cho qua môn rồi trả lại thầy cô chứ chẳng phải là nhưng cái framework, những kiến thức cao siêu nhưng hỏi về bản chất thì chả biết cái gì. Một người nắm chắc căn bản, giỏi thuật toán thì chắc chắn là một người cực kì giỏi. Còn một người chém gió framework/ thư viện giỏi thì có thể cũng là một người giỏi hoặc chỉ là thùng rỗng 😁