Bạn có muốn trở thành một lập trình viên thành công và được làm việc tại các công ty công nghệ lớn?
Bạn là người đang làm việc với tư cách là một lập trình viên nhưng đang tìm kiếm một bước tiến lớn hơn trong sự nghiệp của mình?
Nếu bạn là một người như thế thì chắc là bạn cũng đã thử nghiệm bắt đầu tìm hiểu về lập trình.
Bạn đã có một kế hoạch, bạn cố gắng thực hiện theo kế hoạch của mình và bạn bắt đầu chuẩn bị thông qua nhiều tài nguyên, hướng dẫn và video khác nhau.
Bạn bắt đầu học nó nhưng sau đó, bạn nhận ra rằng mình không tiến bộ được nhiều. Bạn cảm thấy dường như là việc học đang quá sức đối với bạn.
May mắn cho bạn là:
"Không phải chỉ mình bạn ở tình trạng như vậy!"
Bạn không đơn độc.
Điều bạn đang gặp phải, nó đang xảy ra với rất nhiều lập trình viên mới và cả những lập trình viên có kinh nghiệm.
Họ cố gắng học viết mã và tìm hiểu nhiều chủ đề khác nhau nhưng do không có lộ trình và hướng dẫn tốt nên mọi thứ trở nên lộn xộn và khó hiểu đối với họ.
Trong quá trình học, họ đã bỏ lỡ rất nhiều thứ quan trọng cần phải học mà không ai nói cho họ biết.
Để giúp bạn điều này, mình đã tạo ra một lộ trình thực tế "100 ngày học code" dựa trên rất nhiều nghiên cứu và kinh nghiệm của các lập trình viên làm việc trong các công ty công nghệ lớn.
Thử thách này sẽ cung cấp cho bạn một hướng dẫn đầy đủ để xây dựng một thói quen học code chắc chắn và đạt được mục tiêu cụ thể trong vòng 100 ngày.
Tất cả những gì bạn cần là một chiếc máy tính xách tay, có kết nối internet, quyết tâm cao độ trong vòng 100 ngày liên tục, và sau đó hình thành nên thói quen học code.
Sau đó, mình dám cá bạn hoàn toàn có thể đi phỏng vấn ở bất kỳ công ty phần mềm nào, thậm chí là Big Tech.
100 NGÀY HỌC CODE LÀ GÌ?
Để phỏng vấn tại các công ty công nghệ lớn bạn cần phải chuẩn bị kỹ càng.
Kể cả người mới và người có kinh nghiệm đều sẽ thắc mắc là liệu học tập bao lâu là hợp lý?
Học đến khi nào thì đủ để đi phỏng vấn?
Có rất nhiều chủ đề và nội dung cần đề cập nếu bạn đang nhắm mục tiêu đến một số công ty công nghệ lớn.
Thách thức là khung thời gian có hạn và dựa trên nghiên cứu của mình, mình cần nói rằng có thể mất gần 14 tuần hoặc 100 ngày.
Chúng tôi đã chia các chủ đề hoàn chỉnh thành 100 ngày và tất cả những gì bạn chỉ cần làm là tuân theo chủ đề đó và cam kết viết mã trong 100 ngày.
Nếu bạn làm theo cách tiếp cận này và cam kết học code trong 100 ngày liên tục thì không chỉ bạn sẽ phát triển một thói quen học code tốt mà còn có thể vượt qua đến 60-70% các cuộc phỏng vấn của các công ty công nghệ lớn.
Mình sẽ bao gồm 5-6 chủ đề chính trong 100 ngày học code và sẽ nhắm mục tiêu đến các cuộc phỏng vấn của các công ty công nghệ lớn như Facebook, Google, Microsoft, Amazon, v.v. Các chủ đề này được đưa ra bên dưới…
-
Cấu trúc dữ liệu và thuật toán (phần mã hóa và giải quyết vấn đề)
-
Hệ điều hành và DBMS (hệ quản trị cơ sở dữ liệu)
Một số điều cần ghi nhớ trước khi chúng ta tiếp tục lộ trình…
-
Nếu bạn là người mới bắt đầu thì hãy đặt mục tiêu để giải gần 450 - 500 câu hỏi về lập trình.
-
Nếu bạn là một người có kinh nghiệm thì hãy đặt mục tiêu giải quyết gần 300 đến 350 câu hỏi.
-
Vòng thiết kế hệ thống chủ yếu được hỏi từ những người có kinh nghiệm nên người mới bắt đầu phải tập trung vào phần này ít hơn. Người đã có kinh nghiệm thì nên tập trung vào phần này nhiều hơn.
-
Nếu bạn là người mới bắt đầu, hãy cố gắng dành thời gian ít nhất 4-6 giờ mỗi ngày để học code.
-
Nếu bạn là người có kinh nghiệm thì bạn cần cam kết 2-3 giờ mỗi ngày.
-
Tốt nhất, bạn không nên mất hơn 20-30 phút để giải quyết bất kỳ vấn đề nào đã cho nhưng hãy nhớ rằng quy tắc này không áp dụng cho tất cả các câu hỏi.
Điều kiện tiên quyết: Mình giả định rằng nếu bạn là người mới bắt đầu thì bạn đã hoàn thành một số dự án ở trường đại học của mình và nếu bạn là một lập trình viên có kinh nghiệm thì chắc chắn bạn có thể đang làm việc trên một số dự án.
100 Ngày học code cho người mới bắt đầu
Trước khi bạn tiếp tục, hãy nhớ rằng là một lập trình viên mới, bạn sẽ bị choáng ngợp với rất nhiều câu hỏi và bạn sẽ gặp rất nhiều khó khăn trong việc giải quyết các vấn đề.
Nếu bạn mất nhiều thời gian hơn để giải quyết các câu hỏi thì cũng không sao, nhưng đừng nản lòng.
Trước tiên, hãy cố gắng giải quyết vấn đề một mình ngay cả khi phải mất thêm vài giờ.
Sau nhiều giờ nếu bạn không tìm được giải pháp thì bạn có thể tự kéo dài một vài ngày hoặc hỏi ai đó (hoặc Google)
Khi bạn dần dần giải được nhiều vấn đề, bạn sẽ thấy bản thân bạn tiến bộ và bạn cũng sẽ mất ít thời gian hơn để giải quyết các câu hỏi sau đó.
Ngày 01 - 10: Chọn một ngôn ngữ lập trình và tìm hiểu các nguyên tắc cơ bản của nó
Để bắt đầu, việc đầu tiên bạn phải làm để theo đuổi thử thách 100 ngày học code là:
Bạn cần chọn một ngôn ngữ lập trình mà bạn sẽ sử dụng nó trong thử thách 100 Ngày học code này.
Bạn hãy thử, khám phá một vài ngôn ngữ lập trình khác nhau, đọc giới thiệu về chúng, dùng thử trong trình soạn thảo của bạn và kiểm tra xem bạn có hài lòng với nó hay không.
Rất nhiều câu hỏi sẽ nảy sinh khi bạn chọn ngôn ngữ.
Python có tốt hơn Java không?
C ++ là ngôn ngữ nhanh hơn, vì vậy tôi nên chọn ngôn ngữ này?
PHP làm web tốt mà lại dễ hơn nên tôi chọn HỌC PHP.
Cú pháp Java phức tạp hơn nhưng các công ty lớn đang nghiên cứu nó, vậy tôi nên HỌC JAVA?
Suy nghĩ quá nhiều về những câu hỏi này sẽ tạo ra sự nhầm lẫn.
Bạn hãy thử chuyển sang một số ngôn ngữ khác nhau khi bạn thử các ngôn ngữ trong trình soạn thảo mã của mình. Khám phá các ngôn ngữ và chọn một ngôn ngữ phù hợp nhất với bạn.
Đừng chọn một ngôn ngữ chỉ vì ngôn ngữ đó rất phổ biến trong ngành công nghệ. Bạn cần chọn một ngôn ngữ mà bạn cảm thấy thoải mái nhất, phù hợp với mục đích ban đầu của bạn.
Hầu như sẽ mất 4-5 ngày để chọn một ngôn ngữ, không dễ đâu.
> Đọc thêm: Nên học ngôn ngữ lập trình nào?
Một khi bạn chọn một ngôn ngữ, hãy tìm hiểu các nguyên tắc cơ bản của nó nhưng nếu bạn đã biết các nguyên tắc cơ bản (bạn có thể đã tạo dự án của mình bằng ngôn ngữ đó) thì hãy bắt đầu thực hiện nó.
Rất nhiều người khi HỌC LẬP TRÌNH được một thời gian, họ lại quên những điều cơ bản của ngôn ngữ họ đã chọn.
Vì vậy, bạn cần đảm bảo rằng bạn có khả năng sử dụng tốt ngôn ngữ đã chọn. Học cú pháp cơ bản thật vững, làm một số bài kiểm tra trực tuyến và ghi nhớ những điều cơ bản của ngôn ngữ bạn đã chọn.
Có thể mất khoảng một tuần hoặc 7 ngày để học các kiến thức cơ bản về ngôn ngữ của bạn.
Một vài điều bạn nên nhớ là…
-
Thao tác với chuỗi (String)
-
Triển khai mảng 2 chiều và cách sử dụng nó
-
Những điều rất cơ bản của ngôn ngữ (Chẳng hạn như trong C / C ++ xử lý các chuỗi kết thúc bằng null)
Rất nhiều công ty như Lyft và Salesforce có một chút khác biệt trong quy trình tuyển dụng của họ.
Họ muốn ứng viên lập trình và giải quyết các vấn đề trên máy tính xách tay. Bạn sẽ phải viết chương trình hoàn chỉnh và code của bạn phải vượt qua các testcase đã cho.
Bạn có thể phải làm việc trên các command line hoặc bạn có thể phải phân tích cú pháp tệp CSV hoặc tệp text.
Các công ty khác như Google, Amazon hoặc Microsoft họ còn dụng bảng trắng. Vì thế, tốt nhất là bạn nên biết những kiến thức cơ bản về ngôn ngữ của mình để xử lý cả hai tình huống lập trình trong cuộc phỏng vấn.
Vì thế, hầu như sẽ mất 10 ngày để đưa ra quyết định ngôn ngữ nào phù hợp nhất với bạn và bạn cảm thấy thoải mái.
> Tham khảo: Tự học lập trình Java
Ngày 11 - 20: Học Cấu trúc dữ liệu và Thuật toán
Khi đã chọn được một ngôn ngữ lập trình mà bạn cảm thấy ưng ý. Bây giờ hãy bắt đầu với những thứ cơ bản nhưng cực kỳ quan trọng.
Đó chính là Cấu trúc dữ liệu và Thuật toán.
Môn học này chủ yếu được dạy ở bậc đại học và hầu hết mọi người đều bỏ qua tầm quan trọng của nó.
Nhưng kiến thức trong chủ đề này là điều quan trọng nhất và...
"Chắc chắn được hỏi trong các cuộc phỏng vấn lập trình"
Tìm hiểu kiến thức cơ bản về các cấu trúc dữ liệu và thuật toán khác nhau bao gồm cả phần phức tạp. Các chủ đề được đưa ra bên dưới…
-
Độ phức tạp của thuật toán
Hãy tìm hiểu về tất cả các nguyên tắc cơ bản của ngôn ngữ. Sau đó trực tiếp viết code để triển khai nhiều loại cấu trúc dữ liệu & thuật toán khác nhau trong trình soạn thảo.
> Tham khảo: Một số thuật toán cơ bản
Bạn cũng cần phải chú ý đến phần Chuỗi (String), bởi nó được hỏi nhiều nhất trong các cuộc phỏng vấn.
Nếu bạn nghĩ rằng bạn đã biết tất cả các chủ đề trong phần cấu trúc dữ liệu và thuật toán thì chỉ cần mò lên một số trang luyện thuật toán, vượt qua các thử thách ở trên đó.
Bạn chắc chắn sẽ thấy rằng bạn vẫn cần phải ngâm cứu lại các khái niệm cơ bản.
Học cách triển khai mảng, linked list, stack, queue, tree, ... Đay là nền tảng cơ bản giúp ích rất nhiều trong việc giải quyết các vấn đề trong lập trình, vì vậy phải nắm thật chắc.
Ngày 21 - 40: Giải quyết những vấn đề cơ bản của Lập trình
Khi bạn đã hiểu về cấu trúc dữ liệu và thuật toán, đây là những công cụ thô sơ nhất để giúp bạn giải quyết các vấn đề.
Thực hành giải quyết các bài toán lập trình ở mức độ cơ bản sẽ giúp bạn mở rộng tâm trí và nó sẽ chuẩn bị cho bạn để giải quyết các vấn đề ở mức trung bình.
Đừng bỏ qua cấp độ cơ bản.
Nếu không, bạn sẽ gặp khó khăn khi giải các bài toán khó hơn và khi đó bạn sẽ phải quay lại cấp độ cơ bản một lần nữa.
Cố gắng giải ít nhất 200 vấn đề của lập trình ở cấp độ cơ bản trong vòng 10 ngày. Tùy thuộc vào thời gian và tốc độ mà bạn có thể tăng số lượng câu hỏi.
Hầu hết 8-12 câu hỏi mỗi ngày trong khung thời gian 4-6 giờ sẽ giúp bạn xây dựng một nền tảng tốt.
Một số vấn đề về mảng:
-
Hợp nhất hai mảng đã sắp xếp
-
Tìm mảng con với tổng cho trước
-
Tìm các bản sao trong một mảng
-
Tìm số bị thiếu trong mảng
Các vấn đề về Linked List:
-
Phát hiện vòng lặp trong Linked List
-
Hợp nhất hai Linked List được sắp xếp
-
Tìm kiếm trong Linked List
-
Tìm phần tử ở giữa trong Linked List
Các vấn đề về Stack và Queue:
-
Sắp xếp các giá trị trong Stack
-
Triển khai 2 Stack bằng một Mảng
Các vấn đề về Tree:
-
Giá trị tối thiểu trong Cây tìm kiếm nhị phân
-
Chiều cao của cây nhị phân
-
Giá trị lớn nhất thứ k trong Cây tìm kiếm nhị phân
Các vấn đề về Graph:
-
Triển khai Tìm kiếm đầu tiên theo chiều rộng và Tìm kiếm đầu tiên theo chiều sâu
Vấn đề Heap:
-
Tìm k phần tử nhỏ nhất và lớn nhất trong danh sách
Ngày 41 - 60: Giải quyết những vấn đề ở mức độ trung bình của Lập trình
Bây giờ, sau khi bạn đã làm quen với việc giải quyết vấn đề ở mức độ cơ bản. Đã đến lúc luyện tập cho một số bài toán lập trình ở mức độ trung bình.
Những vấn đề ở mức độ trung bình sẽ giúp bạn chuẩn bị để giải quyết những vấn đề khó hơn và những câu hỏi này rất có thể được hỏi trong các cuộc phỏng vấn ở các công ty Big Tech.
Cố gắng giải quyết gần 150-170 câu hỏi ở mức độ trung bình trong vòng 20 ngày. Tùy thuộc vào thời gian và tốc độ mà bạn có thể tăng số lượng câu hỏi. Hầu hết 7-8 câu hỏi một ngày trong khung thời gian 4-6 giờ là đủ tốt.
Vấn đề về Mảng:
-
Tối đa của tất cả các mảng con có kích thước k
-
Tính lượng nước có thể đọng lại sau mưa
Các vấn đề về Linked List:
-
Ký tự không lặp lại đầu tiên trong một luồng
-
Xóa vòng lặp trong Linked List
-
Tìm điểm giao nhau của hai Linked List
Các vấn đề về Stack và Queue:
-
Lấy phần tử nhỏ nhất từ Stack
Các vấn đề về Tree:
-
Duyệt dọc của cây nhị phân
-
Đường biên của cây nhị phân
Các vấn đề về Graph:
-
Phát hiện chu kỳ trong một đồ thị có hướng và vô hướng
Ngày 61 - 75: Giải quyết một số vấn đề khó trong Lập trình
Khi bạn đã giải quyết được hòm hòm những bài toán cơ bản và mức độ trung bình, cuối cùng hãy chuyển sang giải quyết những bài toán khó.
Cố gắng giải gần 80-90 câu hỏi mức độ khó trong vòng 15 ngày. Tùy thuộc vào thời gian và tốc độ mà bạn có thể tăng số lượng câu hỏi.
-
Tìm điểm trung bình trong luồng
-
Vấn đề nhân viên bán hàng đi du lịch
-
Bài toàn về Dấu ngoặc đơn Boolean
Ngày 76 - 85: Học thiết kế hệ thống
Đối với người mới bắt đầu học lập trình, phần này không quan trọng lắm nhưng đôi khi người phỏng vấn cũng sẽ hỏi các ứng viên chưa có kinh nghiệm về thiết kế hệ thống.
Vì vậy, tốt nhất thì bạn cũng nên biết về phần thiết kế hệ thống.
Trước hết hãy tìm hiểu khái niệm cơ bản về thiết kế hệ thống như Cân bằng tải (Load Balancing), Bộ nhớ đệm (Caching), Proxy, Định lý CAP (CAP Theorem), Tính nhất quán (Consistency), Độ sắc nét (Sharding) hoặc phân vùng dữ liệu (Data Partitioning), v.v.
Bạn có thể sẽ được yêu cầu thiết kế một webservice có thể mở rộng. Vì vậy, khi bạn đã hoàn thành các khái niệm cơ bản, hãy chuẩn bị cho mình một số câu hỏi vòng thiết kế hệ thống rất có thể như…
-
Dịch vụ rút ngắn URL (TinyURL)
-
Thiết kế nguồn cấp tin tức Facebook
Chuẩn bị trước những câu hỏi này sẽ giúp bạn xử lý vòng này và bạn sẽ biết chính xác mình phải làm gì trong vòng này. Bạn sẽ nắm quyền sở hữu vòng này và bạn sẽ mô tả các thành phần khác nhau của hệ thống.
Người phỏng vấn ở "Big tech" sẽ muốn kiểm tra xem ứng viên có khả năng xây dựng một hệ thống lớn (Big) và phức tạp hay không.
Như mình đã đề cập, vòng này không dành cho người mới bắt đầu, vì vậy bạn không cần phải đi sâu vào phần này.
Tuy nhiên, bạn nên có biết chính xác những gì sẽ xảy ra trong vòng này để trong trường hợp nếu nó được hỏi trong cuộc phỏng vấn, bạn có thể xử lý nó.
Ngày 86 - 92: Tìm hiểu về Hệ điều hành và Hệ quản trị CSDL
Bây giờ đã đến lúc học hai môn khoa học máy tính quan trọng nhất, Hệ điều hành (OS) và Hệ quản trị cơ sở dữ liệu (DBMS).
Hầu hết thời gian các Lập trình viên Junior đã bỏ qua các vấn đề liên quan đến OS (đặc biệt là Linux) và DBMS. Nhưng việc chuẩn bị hai môn này cũng rất quan trọng cho các cuộc phỏng vấn.
Xem qua các khái niệm cơ bản về hệ điều hành như:
-
Quy trình và Quản lý Quy trình
-
Synchronization và Deadlock
Ngoài ra, hãy chuẩn bị cho mình một số câu hỏi liên quan đến cơ sở dữ liệu như cơ sở dữ liệu quan hệ và không quan hệ, phân cấp, chia tỷ lệ, thuộc tính ACID, lập chỉ mục, v.v.
Ngày 93 - 99: Học thiết kế Hướng đối tượng
Những ngày cuối cùng của thử thách 100 ngày học Code, bạn nên chuẩn bị cho mình phần kiến thức về thiết kế hướng đối tượng (Object-Oriented Design).
Bạn nên hiểu rõ về các Design Pattern phổ biến, nguyên tắc SOLID / DRY và các khái niệm OOPs khác nhau. Một số câu hỏi ví dụ về thiết kế hướng đối tượng được đưa ra bên dưới…
-
Thiết kế máy bán hàng tự động
-
Thiết kế hệ thống đặt vé xem phim
Mục tiêu chính của bạn là thu thập tất cả các yêu cầu và chuyển chúng thành các class dễ hiểu. Bạn cần xác định các đối tượng và thực thể khác nhau để giúp tạo ra một giải pháp hướng đối tượng.
Trong các cuộc phỏng vấn, bạn sẽ phải giải thích các thành phần khác nhau và interface của chúng. Ngoài ra, bạn sẽ giải thích cách các thành phần khác nhau tương tác với nhau bằng cách sử dụng các interface.
Nên nhớ, hãy chuẩn bị cho mình một sơ đồ use case, sơ đồ hoạt động và sơ đồ class.
Ngày 100: Chuẩn bị cho vòng thi văn hóa
Ngày cuối cùng của thử thách 100 ngày học Code đó chính là chuẩn bị tinh thần cho phần thi văn hóa.
Các công ty không thuê những người có xu hướng phá vỡ tổ chức và họ cũng không thuê những ứng viên không yêu thích sản phẩm của họ.
Điều đó, bắt buộc bạn phải hiểu văn hóa của công ty mà bạn đang nhắm tới. Các mục tiêu, tầm nhìn và giá trị cốt lõi của công ty có phù hợp với định hướng của bạn hay không?
Ví dụ, ở Amazon, họ tiến hành nhiều vòng phỏng vấn để tìm hiểu xem bạn có phù hợp với văn hóa của họ. Họ quan tâm rất nhiều đến nguyên tắc lãnh đạo.
Trong các cuộc phỏng vấn, bạn sẽ phải thể hiện sự quan tâm đến sản phẩm của họ.
Và bạn sẽ phải trung thực bởi nói dối rất dễ nhận ra.
Những người phỏng vấn bạn họ đã phỏng vấn hàng trăm, hàng ngàn người.
Họ có hàng trăm CV khác tốt hơn đang chờ để được giải quyết.
Vì vậy, hãy chắc chắn rằng bạn luôn ghi nhớ tất cả những điều này và bạn chuẩn bị cho mình một thái độ đúng đắn khi đi phỏng vấn ở các công ty, đặc biệt là Big Tech.
TÓM TẮT 100 NGÀY HỌC CODE!!!
Như vậy, mình đã giới thiệu cho bạn lộ trình học tập lập trình cho người mới bắt đầu đến khi đủ khả năng để đi phỏng vấn qua Kế hoạch 100 Ngày học Code.
-
Ngày 01 - 10: Chọn ngôn ngữ và học cơ bản về ngôn ngữ
-
Ngày 11 - 20: Học Cấu trúc dữ liệu và Thuật toán
-
Ngày 21 - 40: Giải quyết những vấn đề cơ bản
-
Ngày 41 - 60: Giải quyết những vấn đề trung bình
-
Ngày 61 - 75: Giải quyết những vấn đề khó
-
Ngày 76 - 85: Học thiết kế hệ thống
-
Ngày 86 - 92: Tìm hiểu về Hệ điều hành và Hệ quản trị CSDL
-
Ngày 93 - 99: Thiết kế hướng đối tượng
-
Ngày 100: Chuẩn bị vòng thi văn hóa
Chúc bạn sớm đạt được mục tiêu của mình.
> Có thể bạn sẽ thích: HỌC CODE Ở ĐÂU TỐT?
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #python #java #php