fbpx
Khóa Học Java Core & OOP Thumbnail

Khóa Học Java (1 Kèm 1 Online) – Làm Chủ Java Core & Lập Trình Hướng Đối Tượng

Khóa học giúp bạn tự tin viết chương trình Java từ con số 0, nắm vững lập trình hướng đối tượng và có nền tảng vững chắc để học tiếp Spring Boot.

  • Ngày cập nhật 10/2026
  • Học viên 1647

Tại sao bạn học lập trình mãi không tiến bộ?

Học lập trình hơn 1 năm nhưng bạn vẫn không thể tự viết nổi 10 dòng code. Nguyên nhân thật sự do đâu?

Hoàn tiền 100% nếu không hài lòng 2 buổi đầu tiên

Bạn sẽ học được gì?

Khóa học này bao gồm

Nội dung khóa học

Tổng quan về Java
  • Lập trình và ngôn ngữ Java: Hiểu lập trình là gì và Java được dùng ở đâu để hình dung những việc có thể làm sau khóa học.
  • Lộ trình học Java: Nắm lộ trình bắt đầu từ cú pháp cơ bản, sau đó đến lập trình hướng đối tượng và thư viện chuẩn, cuối cùng là công cụ làm việc để sẵn sàng học các công nghệ tiếp theo.
  • JDK, JRE và JVM: Phân biệt JDK, JRE và JVM để biết mỗi thành phần đóng vai trò gì khi viết và chạy chương trình.
  • Cơ chế biên dịch: Hiểu cách mã nguồn được biên dịch thành bytecode và chạy trên JVM để giải thích vì sao Java chạy được trên nhiều hệ điều hành.
  • Cài đặt môi trường: Biết cách cài JDK bản LTS và IntelliJ IDEA để có môi trường lập trình sẵn sàng cho cả khóa học.
  • Chương trình đầu tiên: Viết và chạy chương trình in ra màn hình để làm quen với quy trình viết code, chạy và xem kết quả.
  • Cấu trúc chương trình: Nhận biết vai trò của class, phương thức main và câu lệnh để đọc hiểu được một chương trình Java đơn giản.
  • In dữ liệu và chú thích: Dùng System.out.println để hiển thị kết quả và thêm chú thích để giải thích code cho người đọc sau.
  • Đọc lỗi biên dịch: Nhận biết các lỗi cú pháp thường gặp để tự sửa dựa trên thông báo của IntelliJ.
Biến, kiểu dữ liệu và toán tử
  • Biến: Biết cách khai báo và gán giá trị cho biến để lưu dữ liệu và dùng lại trong chương trình.
  • Quy tắc đặt tên: Đặt tên biến theo quy ước camelCase để code dễ đọc và đúng chuẩn của cộng đồng Java.
  • Kiểu dữ liệu nguyên thủy: Phân biệt các kiểu số, ký tự và logic để chọn đúng kiểu cho từng loại dữ liệu.
  • Giới hạn của kiểu số: Nhận biết hiện tượng tràn số và sai số của số thực để tránh kết quả tính toán sai.
  • Ép kiểu: Biết cách chuyển đổi giữa các kiểu số để tính toán đúng và không vô tình làm mất dữ liệu.
  • Toán tử số học và gán: Dùng các toán tử số học, chia lấy dư và gán kết hợp để viết các phép tính trong chương trình.
  • Toán tử so sánh và logic: Dùng toán tử so sánh và logic để tạo các biểu thức đúng sai, chuẩn bị cho việc rẽ nhánh ở bài sau.
  • Thứ tự ưu tiên: Hiểu thứ tự thực hiện của các toán tử để biểu thức cho ra đúng kết quả mong muốn.
  • Chuỗi cơ bản: Biết cách tạo chuỗi và nối chuỗi với giá trị khác để hiển thị thông tin rõ ràng.
  • Nhập dữ liệu: Dùng Scanner để đọc dữ liệu từ bàn phím và viết được chương trình có tương tác với người dùng.
  • Lớp Math: Dùng các phương thức của lớp Math để thực hiện nhanh các phép tính như làm tròn, lũy thừa và căn bậc hai.
Câu lệnh điều kiện
  • If, else if và else: Dùng câu lệnh rẽ nhánh để chương trình xử lý khác nhau theo từng điều kiện.
  • Điều kiện lồng nhau: Biết cách viết và rút gọn điều kiện lồng nhau để giữ cho logic dễ đọc.
  • Toán tử ba ngôi: Dùng toán tử ba ngôi để viết ngắn gọn các lựa chọn đơn giản giữa hai giá trị.
  • Switch: Dùng switch để xử lý gọn các trường hợp theo từng giá trị cụ thể và tránh lỗi quên break.
  • Switch expression: Dùng cú pháp switch mũi tên để trả về giá trị trực tiếp và viết code hiện đại hơn.
  • Phạm vi của biến: Hiểu phạm vi của biến trong khối lệnh để tránh lỗi dùng biến ở ngoài nơi khai báo.
  • Phân tích bài toán: Biết cách xác định đầu vào, đầu ra và các trường hợp cần xử lý trước khi viết code.
Vòng lặp
  • Vòng lặp for: Dùng for để lặp lại công việc khi biết trước số lần thực hiện.
  • While và do-while: Dùng while và do-while để lặp theo điều kiện khi chưa biết trước số lần thực hiện.
  • Chọn loại vòng lặp: So sánh các loại vòng lặp để chọn cách viết phù hợp và dễ đọc nhất cho từng bài toán.
  • Break và continue: Dùng break và continue để chủ động dừng vòng lặp hoặc bỏ qua một lượt không cần xử lý.
  • Vòng lặp lồng nhau: Biết cách lồng vòng lặp để xử lý các bài toán nhiều chiều như in hình hoặc bảng cửu chương.
  • Bài toán kinh điển: Xây dựng lời giải cho các bài tính tổng, giai thừa, số nguyên tố và đảo số để rèn tư duy thuật toán.
  • Debugger: Dùng breakpoint và chạy từng bước trong IntelliJ để quan sát giá trị biến và tự tìm ra lỗi logic.
Phương thức
  • Khai báo và gọi phương thức: Biết cách tách code thành các phương thức để tránh lặp lại và làm chương trình dễ đọc hơn.
  • Tham số và giá trị trả về: Dùng tham số để truyền dữ liệu vào và return để nhận kết quả từ phương thức.
  • Truyền tham số theo giá trị: Hiểu cách Java sao chép giá trị khi gọi phương thức để dự đoán đúng sự thay đổi của biến.
  • Nạp chồng phương thức: Dùng nạp chồng để một tên phương thức xử lý được nhiều kiểu hoặc nhiều số lượng tham số.
  • Tham số biến đổi: Dùng varargs để gọi phương thức với số lượng đối số linh hoạt.
  • Ngăn xếp lời gọi: Hiểu cách các lời gọi phương thức được xếp chồng khi chạy để đọc được luồng thực thi trong debugger.
  • Đệ quy: Hiểu cách phương thức tự gọi chính nó và điều kiện dừng để giải các bài toán có thể chia nhỏ.
  • Viết phương thức tốt: Biết cách đặt tên rõ nghĩa và giữ mỗi phương thức chỉ làm một việc để code dễ đọc và dễ sửa.
Mảng
  • Mảng một chiều: Biết cách khai báo, khởi tạo và truy cập phần tử để lưu nhiều giá trị cùng kiểu trong một biến.
  • Duyệt mảng: Dùng for và for-each để đọc và xử lý từng phần tử trong mảng.
  • Bài toán trên mảng: Xây dựng lời giải cho các bài tìm giá trị lớn nhất, tính tổng, đảo ngược và tìm kiếm để rèn kỹ năng xử lý dữ liệu.
  • Lớp Arrays: Dùng Arrays để sắp xếp, sao chép, so sánh và in mảng mà không cần tự viết lại.
  • Mảng hai chiều: Dùng mảng hai chiều và vòng lặp lồng nhau để biểu diễn dữ liệu dạng bảng như ma trận.
  • Kiểu tham chiếu: Phân biệt kiểu nguyên thủy với kiểu tham chiếu để hiểu vì sao hai biến có thể cùng trỏ đến một mảng.
  • Stack và Heap: Hiểu dữ liệu được lưu ở Stack và Heap như thế nào để giải thích sự thay đổi của mảng khi truyền vào phương thức.
  • Giới hạn của mảng: Nhận biết lỗi vượt chỉ số và hạn chế về kích thước cố định để hiểu lý do cần đến Collections về sau.
Chuỗi
  • Các phương thức của String: Dùng các phương thức tìm kiếm, cắt, thay thế, tách và đổi chữ hoa thường để xử lý văn bản.
  • So sánh chuỗi: Phân biệt == với equals để tránh lỗi so sánh chuỗi rất phổ biến ở người mới.
  • Tính bất biến và String Pool: Hiểu vì sao String không thể thay đổi và cách Java dùng String Pool để tiết kiệm bộ nhớ.
  • StringBuilder: Dùng StringBuilder để nối chuỗi nhiều lần trong vòng lặp mà không tạo ra quá nhiều đối tượng thừa.
  • Định dạng chuỗi: Dùng printf và String.format để hiển thị số và văn bản đúng định dạng mong muốn.
  • Text Block: Dùng Text Block để viết chuỗi nhiều dòng mà không cần nối chuỗi thủ công.
  • Chuyển đổi giữa chuỗi và số: Biết cách chuyển chuỗi thành số và ngược lại để xử lý dữ liệu do người dùng nhập.
  • Biểu thức chính quy cơ bản: Dùng regex với matches, split và replaceAll để kiểm tra các định dạng như email hoặc số điện thoại.
OOP: Lớp và đối tượng
  • Tư duy hướng đối tượng: Hiểu cách mô hình hóa các thực thể trong bài toán thành đối tượng để tổ chức chương trình lớn dễ dàng hơn.
  • Lớp và đối tượng: Phân biệt lớp với đối tượng và biết cách tạo đối tượng bằng new để dùng trong chương trình.
  • Thuộc tính và phương thức: Xây dựng lớp có thuộc tính và phương thức để mô tả dữ liệu và hành vi của đối tượng.
  • Hàm khởi tạo: Dùng constructor và nạp chồng constructor để đối tượng có đủ dữ liệu cần thiết ngay khi được tạo.
  • Từ khóa this: Dùng this để phân biệt thuộc tính với tham số và gọi constructor khác trong cùng lớp.
  • Tham chiếu và null: Hiểu cách biến tham chiếu trỏ đến đối tượng để tránh lỗi NullPointerException.
  • Thành viên static: Phân biệt thành viên static với thành viên của đối tượng để biết dữ liệu nào dùng chung cho cả lớp.
  • Hằng số: Dùng static final để khai báo hằng số và tránh viết các giá trị cố định rải rác trong code.
  • Mảng đối tượng: Biết cách lưu và xử lý nhiều đối tượng trong mảng để giải các bài toán quản lý đơn giản.
  • Thu gom rác: Hiểu cách Garbage Collector dọn dẹp các đối tượng không còn được tham chiếu để biết vì sao Java không cần giải phóng bộ nhớ thủ công.
OOP: Đóng gói và tổ chức mã nguồn
  • Package và import: Dùng package để nhóm các lớp liên quan và import để dùng lớp từ package khác.
  • Quy ước đặt tên: Đặt tên package và lớp theo chuẩn của Java để project dễ đọc và đồng nhất khi làm việc nhóm.
  • Phạm vi truy cập: Phân biệt public, protected, mặc định và private để kiểm soát phần nào của lớp được dùng từ bên ngoài.
  • Tính đóng gói: Dùng thuộc tính private kèm getter và setter để kiểm tra dữ liệu và bảo vệ trạng thái của đối tượng.
  • POJO: Nhận biết lớp POJO để quen với dạng lớp dữ liệu thường gặp trong các project Java.
  • Quan hệ giữa các đối tượng: Dùng composition để xây dựng đối tượng lớn từ các đối tượng nhỏ theo quan hệ “có một”.
  • Thiết kế lớp: Biết cách xác định thuộc tính, hành vi và trách nhiệm của từng lớp từ một mô tả bài toán.
OOP: Kế thừa và đa hình
  • Kế thừa: Dùng extends để lớp con dùng lại code của lớp cha theo quan hệ “là một”.
  • Từ khóa super: Dùng super để gọi constructor và phương thức của lớp cha khi cần mở rộng hành vi.
  • Ghi đè phương thức: Dùng @Override để lớp con thay đổi hành vi được thừa hưởng từ lớp cha.
  • Phân biệt overload và override: So sánh nạp chồng với ghi đè để chọn đúng cách và tránh nhầm lẫn khi đọc code.
  • Đa hình: Hiểu cách một biến kiểu cha gọi đúng phương thức của lớp con lúc chạy để viết code mở rộng được mà không cần sửa nhiều.
  • Upcasting và downcasting: Biết cách chuyển đổi kiểu giữa lớp cha và lớp con để xử lý nhiều loại đối tượng một cách an toàn.
  • Instanceof và pattern matching: Dùng instanceof với pattern matching để kiểm tra kiểu và ép kiểu ngắn gọn trong một câu lệnh.
  • Từ khóa final: Dùng final để ngăn một lớp bị kế thừa hoặc một phương thức bị ghi đè khi cần giữ nguyên hành vi.
  • Kế thừa hay composition: So sánh kế thừa với composition để chọn cách thiết kế phù hợp và tránh lạm dụng kế thừa.
OOP: Lớp trừu tượng và Interface
  • Tính trừu tượng: Hiểu cách ẩn chi tiết xử lý và chỉ lộ ra những gì cần dùng để giảm độ phức tạp của chương trình.
  • Lớp trừu tượng: Dùng lớp và phương thức abstract để định nghĩa khung chung và bắt buộc lớp con tự cài đặt phần riêng.
  • Interface: Dùng interface để định nghĩa hợp đồng mà nhiều lớp không liên quan có thể cùng thực hiện.
  • Đa kế thừa qua Interface: Biết cách một lớp thực hiện nhiều interface để có nhiều khả năng mà không gặp vấn đề của đa kế thừa.
  • Phương thức default và static: Dùng các phương thức default và static trong interface để thêm tính năng mà không làm hỏng các lớp đang có.
  • So sánh lớp trừu tượng với Interface: Phân biệt hai cách trừu tượng hóa để chọn đúng công cụ cho từng tình huống thiết kế.
  • Lập trình theo Interface: Dùng interface làm kiểu khai báo để giảm phụ thuộc vào lớp cụ thể và dễ thay đổi cách cài đặt.
  • Sealed class: Dùng sealed và permits để giới hạn các lớp được phép kế thừa khi cần kiểm soát cấu trúc phân cấp.
Các lớp nền tảng
  • Lớp Object: Hiểu Object là lớp cha của mọi lớp để biết các phương thức mà đối tượng nào cũng có.
  • ToString, equals và hashCode: Biết cách ghi đè các phương thức này để đối tượng in ra rõ ràng và so sánh đúng theo nội dung.
  • Lớp Wrapper: Dùng các lớp bao như Integer và Double cùng cơ chế tự động đóng mở để dùng số như đối tượng.
  • So sánh Wrapper: Nhận biết lỗi khi dùng == với Wrapper và lỗi null khi tự động mở gói để tránh các bug khó phát hiện.
  • BigDecimal: Dùng BigDecimal để tính toán tiền tệ chính xác mà không gặp sai số của double.
  • Enum: Dùng enum để biểu diễn tập giá trị cố định như trạng thái đơn hàng một cách an toàn.
  • Đối tượng bất biến: Biết cách thiết kế lớp bất biến để dữ liệu an toàn hơn khi được chia sẻ giữa nhiều nơi trong chương trình.
  • Record: Dùng record để khai báo lớp chứa dữ liệu ngắn gọn thay cho việc viết tay constructor, getter và các phương thức so sánh.
  • Từ khóa var: Dùng var để code ngắn hơn và biết khi nào nên viết rõ kiểu để giữ code dễ đọc.
Xử lý ngoại lệ
  • Ngoại lệ và stack trace: Biết cách đọc stack trace để xác định loại lỗi và vị trí xảy ra lỗi.
  • Try, catch và finally: Dùng try, catch và finally để xử lý lỗi mà chương trình không bị dừng đột ngột.
  • Cây phân cấp ngoại lệ: Hiểu cấu trúc phân cấp của Throwable để bắt đúng loại lỗi và đúng thứ tự.
  • Checked và unchecked: Phân biệt hai loại ngoại lệ để biết khi nào trình biên dịch bắt buộc phải xử lý.
  • Throw và throws: Dùng throw để chủ động báo lỗi và throws để chuyển trách nhiệm xử lý cho nơi gọi phương thức.
  • Ngoại lệ tự định nghĩa: Xây dựng lớp ngoại lệ riêng để báo lỗi nghiệp vụ rõ nghĩa hơn.
  • Try-with-resources: Dùng try-with-resources để tài nguyên được đóng tự động và tránh rò rỉ khi có lỗi.
Generics và List
  • Vai trò của Generics: Hiểu cách Generics kiểm tra kiểu lúc biên dịch để tránh lỗi ép kiểu khi chương trình đang chạy.
  • Lớp và phương thức Generic: Xây dựng lớp và phương thức có tham số kiểu để dùng lại cùng một đoạn code cho nhiều kiểu dữ liệu.
  • Giới hạn kiểu và wildcard: Nhận biết cú pháp extends và ? để đọc hiểu được các khai báo Generic trong thư viện của Java.
  • Tổng quan Collections: Nắm cấu trúc của Collections Framework để biết nên tìm cấu trúc dữ liệu nào cho từng nhu cầu.
  • Khai báo List: Dùng cách khai báo List<String> list = new ArrayList<>() để áp dụng lập trình theo Interface vào code hằng ngày.
  • ArrayList: Dùng ArrayList để thêm, xóa, sửa và tìm phần tử trong một danh sách có kích thước thay đổi được.
  • LinkedList: So sánh LinkedList với ArrayList về cách lưu trữ và hiệu năng để chọn đúng cấu trúc cho từng bài toán.
  • Duyệt danh sách: Dùng for-each và Iterator để duyệt danh sách và xóa phần tử an toàn khi đang duyệt.
  • Sắp xếp: Dùng Comparable và Comparator để sắp xếp đối tượng theo một hoặc nhiều tiêu chí.
Set, Map và Queue
  • Cơ chế băm: Hiểu cách hashCode và equals quyết định vị trí lưu phần tử để giải thích tốc độ của HashSet và HashMap.
  • Set: So sánh HashSet, LinkedHashSet và TreeSet để chọn đúng loại khi cần loại bỏ phần tử trùng lặp.
  • HashMap: Dùng HashMap để lưu dữ liệu theo cặp khóa và giá trị và tra cứu nhanh theo khóa.
  • Duyệt Map: Dùng keySet, values và entrySet để lấy dữ liệu từ Map theo nhu cầu.
  • Các thao tác hữu ích của Map: Dùng getOrDefault và merge để viết gọn các bài toán như đếm tần suất.
  • TreeMap và LinkedHashMap: So sánh các loại Map để chọn đúng khi cần giữ thứ tự thêm vào hoặc thứ tự sắp xếp.
  • Queue và Deque: Dùng ArrayDeque và PriorityQueue để xử lý dữ liệu theo thứ tự vào trước ra trước hoặc theo độ ưu tiên.
  • Chọn Collection phù hợp: So sánh các cấu trúc dữ liệu về tốc độ và thứ tự để chọn đúng loại cho từng bài toán thực tế.
Lambda và Stream API
  • Lớp ẩn danh: Dùng lớp ẩn danh để cài đặt nhanh một interface và thấy rõ vì sao Lambda ra đời.
  • Cú pháp Lambda: Biết cách viết biểu thức Lambda để thay thế lớp ẩn danh bằng code ngắn gọn hơn.
  • Functional Interface: Dùng Predicate, Function, Consumer và Supplier để truyền hành vi vào phương thức mà không phải tự định nghĩa interface.
  • Method Reference: Dùng cú pháp :: để viết Lambda ngắn gọn hơn khi chỉ gọi một phương thức có sẵn.
  • Khái niệm Stream: Phân biệt Stream với Collection và hiểu cách một pipeline được thực thi để viết xử lý dữ liệu đúng cách.
  • Lọc và biến đổi: Dùng filter, map, sorted và distinct để biến đổi dữ liệu mà không cần viết vòng lặp.
  • Thao tác kết thúc: Dùng count, findFirst, anyMatch, min và max để lấy kết quả cuối từ pipeline.
  • Collectors: Dùng toList, joining và groupingBy để gom dữ liệu thành danh sách, chuỗi hoặc Map theo nhóm.
  • Optional: Dùng Optional để biểu diễn giá trị có thể không tồn tại và tránh lỗi NullPointerException.
Ngày giờ và xử lý file
  • API java.time: Dùng LocalDate, LocalTime và LocalDateTime để biểu diễn và tính toán ngày giờ an toàn.
  • Định dạng ngày giờ: Dùng DateTimeFormatter để chuyển đổi giữa ngày giờ và chuỗi theo định dạng mong muốn.
  • Khoảng thời gian: Dùng Duration và Period để tính khoảng cách giữa hai mốc thời gian.
  • Path và Files: Dùng Path và Files để tạo, sao chép, di chuyển và xóa file hoặc thư mục.
  • Đọc và ghi file: Dùng Files.readString, Files.writeString và Files.lines để đọc ghi file văn bản ngắn gọn.
  • BufferedReader và BufferedWriter: Biết cách dùng luồng có bộ đệm để xử lý file lớn mà không tốn nhiều bộ nhớ.
  • Mã hóa ký tự: Hiểu vai trò của UTF-8 để tránh lỗi hiển thị sai tiếng Việt khi đọc ghi file.
  • Xử lý file CSV: Xây dựng chương trình đọc file CSV thành danh sách đối tượng để áp dụng File I/O, Stream và ngoại lệ cùng lúc.
Đa luồng
  • Tiến trình và luồng: Phân biệt tiến trình với luồng để biết khi nào đa luồng mang lại lợi ích.
  • Tạo luồng: Dùng Thread và Runnable để chạy nhiều công việc cùng lúc.
  • Vòng đời của luồng: Hiểu các trạng thái của luồng và dùng sleep, join để điều phối thứ tự thực hiện.
  • Race condition: Nhận biết lỗi khi nhiều luồng cùng sửa một dữ liệu để biết vì sao chương trình cho kết quả sai không ổn định.
  • Synchronized: Dùng phương thức và khối synchronized để chỉ một luồng được vào đoạn code quan trọng tại một thời điểm.
  • Deadlock: Nhận biết tình huống các luồng chờ nhau mãi mãi và biết cách sắp xếp thứ tự khóa để tránh.
  • ExecutorService: Dùng thread pool để tái sử dụng luồng thay vì tự tạo mới cho từng công việc.
  • Callable và Future: Dùng Callable và Future để lấy kết quả từ công việc chạy ở luồng khác.
  • Collection an toàn luồng: Dùng ConcurrentHashMap và AtomicInteger để chia sẻ dữ liệu an toàn giữa nhiều luồng.
  • Virtual Thread: Hiểu cách Virtual Thread giúp xử lý số lượng lớn tác vụ chờ I/O để biết hướng phát triển của các ứng dụng Java hiện đại.
Maven và Unit Test
  • Vai trò của Maven: Hiểu Maven giải quyết vấn đề gì để biết vì sao không cần tự tải và thêm thư viện thủ công.
  • Cấu trúc project Maven: Nhận biết cấu trúc thư mục chuẩn để đọc được project Java bất kỳ.
  • File pom.xml: Biết cách đọc và sửa pom.xml để khai báo thông tin project và các thư viện cần dùng.
  • Quản lý thư viện: Biết cách thêm thư viện từ Maven Central và hiểu dependency bắc cầu để tránh xung đột phiên bản.
  • Vòng đời build: Dùng các lệnh clean, test và package để build project thành file JAR và chạy được bên ngoài IntelliJ.
  • Ghi log: Dùng SLF4J và Logback để ghi log theo mức độ thay cho System.out.println trong ứng dụng thực tế.
  • Annotation: Hiểu vai trò của annotation để đọc được các cú pháp như @Override và @Test.
  • Vai trò của Unit Test: Hiểu lợi ích của việc kiểm thử tự động để sửa code mà không sợ làm hỏng phần đang chạy đúng.
  • JUnit cơ bản: Biết cách cài JUnit bằng Maven và viết test đầu tiên với @Test.
  • Assertions: Dùng assertEquals, assertTrue và assertThrows để kiểm tra kết quả và cả các trường hợp báo lỗi.
  • Viết test tốt: Dùng cấu trúc Arrange, Act, Assert và các trường hợp biên để test dễ đọc và phát hiện được nhiều lỗi hơn.
Nguyên lý thiết kế
  • Coupling và cohesion: Hiểu độ phụ thuộc và mức độ gắn kết để đánh giá một thiết kế là dễ hay khó thay đổi.
  • Nguyên lý SOLID: Nắm các nguyên lý SOLID để viết các lớp dễ mở rộng và dễ kiểm thử hơn.
  • Mẫu thiết kế phổ biến: Dùng Singleton, Factory và Builder để giải quyết các vấn đề khởi tạo đối tượng thường gặp.
  • Cải tiến thiết kế: Biết cách nhận ra điểm yếu trong một chương trình có sẵn và sửa lại theo các nguyên lý đã học để code dễ bảo trì hơn.

Đối tượng học

  • Bạn chưa biết gì về lập trình và muốn bắt đầu một cách bài bản với Java.
  • Bạn muốn học Java để sau này theo đuổi Spring Boot hoặc các công nghệ khác trong hệ sinh thái Java.
  • Bạn đã tự học Java một thời gian nhưng kiến thức còn rời rạc và chưa tự viết được chương trình.
  • Bạn là sinh viên muốn nắm chắc Java và lập trình hướng đối tượng để học tốt các môn trên trường.
  • Bạn đang làm ngành khác và muốn chuyển sang lập trình, cần một lộ trình rõ ràng với người hướng dẫn sát sao.

Học 1 Kèm 1 - Đảm bảo chất lượng Tốt Nhất

  • Bạn sẽ được theo sát và hỗ trợ 1-1 bởi giảng viên. Đảm bảo chất lượng học tập đạt kết quả tốt nhất.
  • Nếu HỌC CHẬM bạn không cần lo lắng không theo kịp chương trình, giảng viên sẽ đi chậm để đảm bảo bạn nắm chắc 100% kiến thức.
  • Nếu học nhanh, bạn có thể nhanh chóng kết thúc chương trình để đi làm công ty.

Học online - Tiết kiệm thời gian di chuyển

Thay vì phải di chuyển vất vả trên đường giữa dòng người đông đúc. Giờ đây, bạn chỉ cần mở laptop để bắt đầu học ngay tại nhà. Tiết kiệm thời gian, tránh căng thẳng, và tập trung hoàn toàn vào việc học!

Lịch học linh hoạt

  • LetDiv sắp xếp lịch học theo ý của bạn. Học đúng thời điểm mà bạn cảm thấy thoải mái nhất.
  • Dễ dàng thay đổi lịch học trong khi học nếu bạn có việc bận. Không làm gián đoạn tiến độ học tập của bạn.
  • LetDiv có thể sắp xếp thời gian học cho bạn từ 8h đến 23h, kể cả cuối tuần.

Áp dụng Scaffolding Learning

  • Học dễ dàng từ cơ bản đến nâng cao qua từng bước nhỏ.
  • Cá nhân hóa lộ trình học tập, nắm chắc kiến thức ngay lập tức.
  • Tiến bộ vượt bậc nhờ phương pháp sư phạm khoa học hiệu quả.

Trải nghiệm thử buổi học

Bạn có thể tham khảo ngay một buổi học 1 Kèm 1 qua video sau, để hiểu rõ hơn phong cách giảng dạy và quy trình đào tạo của LetDiv sẽ diễn ra như thế nào:

Chính sách hoàn tiền 100%

  • Cam kết hoàn tiền 100% nếu bạn không hài lòng với chất lượng đào tạo trong 2 buổi đầu tiên.
  • Quá trình hoàn tiền sẽ diễn ra nhanh chóng ngay trong ngày.

Học viên LetDiv đang làm ở đâu?

FPT logo
KMS Logo
Nash Tech Logo
Niteco Logo
Teko Logo
Tyme Logo

Đánh giá của học viên

TK
Nguyễn Tuấn Kiệt

Hai khóa video mình mua đều bỏ dở ở khoảng một phần ba, vì không hiểu chỗ nào cũng không có ai để hỏi. Lần này chưa hiểu là mình hỏi ngay, giảng viên xem code của mình rồi chỉ đúng chỗ sai, giải thích cũng rất dễ hiểu. Nhờ vậy lần đầu tiên mình đi được đến bài cuối của một khóa lập trình.

PT
Trần Phương Thảo

Bài tập không lặp lại một kiểu, có bài tính toán, có bài quản lý danh sách, có bài đọc file. Bài kiểm tra giữa khóa khó hơn mình nghĩ, nhưng nhờ đã làm nhiều dạng nên mình vẫn làm được.

HĐ
Lê Hải Đăng

Công việc của mình là kiểm thử phần mềm, nên trước giờ mình gần như không đọc được code của đồng nghiệp. Giảng viên chọn bài tập sát với công việc của mình, vừa viết từng chương trình vừa tự viết unit test. Bây giờ mình đọc được đồng nghiệp viết gì, báo lỗi rõ ràng hơn và đã bắt đầu viết vài unit test cho nhóm.

BN
Phạm Bích Ngọc

Bài tập trong khóa có nhiều dạng, từ bài nhỏ để luyện cú pháp đến bài gần với việc thật như đọc file danh sách khách hàng rồi tính tổng tiền của từng người. Mình phải sửa mấy lần mới chạy đúng, và lần nào giảng viên cũng xem cùng để chỉ chỗ sai.

TN
Hoàng Trọng Nghĩa

Năm ngoái làm đồ án nhóm, cứ đứa này sửa code của đứa kia là chương trình lại lỗi. Mình mang đúng đồ án đó vào buổi học, giảng viên chỉ cách chia chương trình thành từng lớp rõ ràng rồi cho làm thêm mấy bài thiết kế lớp. Học kỳ này nhóm mình chia nhau mỗi người một phần, ghép lại vẫn chạy tốt.

CT
Võ Cẩm Tú

Nói thật là phần đa luồng mình phải học đến hai lần mới hiểu. Giảng viên giảng lại theo cách dễ hiểu hơn, đổi sang ví dụ mấy quầy thu ngân trong siêu thị, nghe xong mình hiểu ngay.

AK
Đặng Anh Khoa

Mình đăng ký vì thấy có hoàn tiền trong 2 buổi đầu, nên muốn học thử rồi tính. Giảng viên dạy dễ hiểu, buổi nào cũng sửa bài riêng cho mình, nên cuối cùng mình học một mạch đến hết khóa.

TD
Bùi Thùy Dung

Nhà có con nhỏ nên phải đợi con ngủ, gần 9 giờ tối mình mới mở máy được. Lịch học được xếp theo giờ đó của mình, và giảng viên vẫn kiên nhẫn dù có hôm mình hỏi lại một câu đến ba lần.

Khóa Học Java Core & OOP Thumbnail

Hoàn tiền 100% nếu không hài lòng 2 buổi đầu tiên

Khóa học này bao gồm

Hoàn tiền 100% nếu không hài lòng 2 buổi đầu tiên