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?
Bạn sẽ học được gì?
- Viết được chương trình Java từ đầu, dù trước đó bạn chưa biết gì về lập trình.
- Rèn tư duy giải quyết vấn đề qua biến, điều kiện, vòng lặp, phương thức và mảng.
- Tự tìm và sửa lỗi trong code bằng debugger và thông báo lỗi của chương trình.
- Thiết kế chương trình theo lập trình hướng đối tượng với đóng gói, kế thừa, đa hình và Interface.
- Lưu trữ và xử lý dữ liệu hiệu quả với List, Set, Map và Generics.
- Viết code ngắn gọn, hiện đại hơn với Lambda và Stream API.
- Xử lý lỗi, làm việc với ngày giờ và đọc ghi file trong chương trình.
- Chạy nhiều công việc cùng lúc bằng đa luồng và tránh các lỗi thường gặp khi làm việc này.
- Quản lý thư viện bằng Maven, viết Unit Test và áp dụng các nguyên lý thiết kế để code dễ bảo trì.
Khóa học này bao gồm
- Thời lượng 20 buổi (2-3 tháng)
- 2-3 buổi/tuần (2.5 tiếng/buổi)
- 120 bài tập thực hành
- Hỗ trợ riêng 1-1
Nội dung khóa học
- 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
mainvà 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: 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.
- 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ênbreak. - Switch expression: Dùng cú pháp
switchmũ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 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
whilevà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
breakvà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.
- 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ộ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
forvà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.
- 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ớiequalsđể 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
printfvà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,splitvàreplaceAllđể kiểm tra các định dạng như email hoặc số điện thoại.
- 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.
- 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
privatekè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.
- 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
instanceofvớ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.
- 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
defaultvàstatictrong 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
sealedvà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.
- Lớp Object: Hiểu
Objectlà 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ư
IntegervàDoublecù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ỗinullkhi 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ủadouble. - 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.
- 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,catchvà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.
- 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
extendsvà?để đọ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
LinkedListvớiArrayListvề 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-eachvà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
ComparablevàComparatorđể sắp xếp đối tượng theo một hoặc nhiều tiêu chí.
- Cơ chế băm: Hiểu cách
hashCodevàequalsquyế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,LinkedHashSetvà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,valuesvà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
getOrDefaultvà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
ArrayDequevà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ế.
- 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,Consumervà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,sortedvà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,minvàmaxđể lấy kết quả cuối từ pipeline. - Collectors: Dùng
toList,joiningvà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ỗiNullPointerException.
- API java.time: Dùng
LocalDate,LocalTimevà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
DurationvàPeriodđể tính khoảng cách giữa hai mốc thời gian. - Path và Files: Dùng
Pathvà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.writeStringvà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.
- 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
Threadvà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
Callablevà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
ConcurrentHashMapvà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.
- 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,testvà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.printlntrong ứng dụng thực tế. - Annotation: Hiểu vai trò của annotation để đọc được các cú pháp như
@Overridevà@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,assertTruevà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.
- 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?
Đánh giá của học viên

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.

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.

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.

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.

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.

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.

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.

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.
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
- Thời lượng 20 buổi (2-3 tháng)
- 2-3 buổi/tuần (2.5 tiếng/buổi)
- 120 bài tập thực hành
- Hỗ trợ riêng 1-1
Hoàn tiền 100% nếu không hài lòng 2 buổi đầu tiên
