• Trang chủ
    • Môn học
    • Kỳ thi
    • Báo lỗi
    • Hướng dẫn
    Tất cả môn học
    ☕

    Java

    Lập trình Java: OOP, Collections, Stream, Lambda, đa luồng và xử lý ngoại lệ.

    1001 bài · 15 chủ đề

    Bài giảng

    Lập trình Java

    Khóa Lập trình Java 10 buổi (30 giờ) theo học phần CNTT1153: từ cú pháp, OOP, Collections, I/O, đa luồng đến Lambda và Stream — mỗi buổi có bài giảng, bộ slide, ví dụ chạy thử ngay trên trang và bài tập chấm tự động.

    10
    buổi học
    30 giờ
    thời lượng
    190
    bài thực hành
    Tiến độ của bạn0/190 bài (0%)

    🎯 Hoàn thành khóa: giải được ≥70% số bài thực hành

    Hiện 0/190 bài (0%) — cần 133 bài.

    📦 Tài liệu & hướng dẫn cài đặt môi trường
    Bắt đầu học — Buổi 1

    Lộ trình 10 buổi

    1. 1

      Buổi 1: Làm quen với Java: JVM, biến, kiểu dữ liệu, vào/ra

      180 phút
      • Sau buổi này bạn có thể giải thích Java là ngôn ngữ biên dịch-rồi-thông dịch, phân biệt được JDK, JRE, JVM, mã nguồn và bytecode.
      • Sau buổi này bạn có thể biên dịch và chạy một chương trình Java bằng `javac`/`java` hoặc bằng IDE, đọc được cấu trúc của chương trình Hello World.
      • Sau buổi này bạn có thể khai báo biến, hằng, chọn đúng kiểu nguyên thủy (và hiểu khác biệt với kiểu tham chiếu) cho từng loại dữ liệu.
      0/18 bàiVào học →
    2. 2

      Buổi 2: Chuỗi và cấu trúc điều khiển

      180 phút
      • Giải thích được vì sao `String` trong Java là **bất biến** và phân biệt được `==` với `equals`.
      • Dùng thành thạo các phương thức thường gặp của `String`, `StringBuilder` và định dạng đầu ra bằng `String.format` / `printf`.
      • Xác định được **phạm vi (scope)** của biến trong khối lệnh và tránh các lỗi do trùng tên, dùng biến ngoài phạm vi.
      0/20 bàiVào học →
    3. 3

      Buổi 3: Mảng, tìm kiếm và sắp xếp

      180 phút
      • Sau buổi này bạn có thể khai báo, khởi tạo, duyệt mảng một chiều, hai chiều và mảng răng cưa bằng `for` và `for-each`.
      • Sau buổi này bạn có thể giải thích mảng là đối tượng tham chiếu, dự đoán kết quả khi gán mảng, truyền mảng vào phương thức và sao chép mảng.
      • Sau buổi này bạn có thể dùng thành thạo `Arrays.toString`, `sort`, `fill`, `copyOf`, `copyOfRange`, `equals`, `binarySearch`.
      0/19 bàiVào học →
    4. 4

      Buổi 4: Phương thức và xử lý ngoại lệ

      180 phút
      • Sau buổi này bạn có thể viết và gọi phương thức tĩnh có tham số, giá trị trả về, biến cục bộ; giải thích được vì sao Java luôn *truyền tham số theo giá trị*.
      • Bạn có thể chồng hàm (overloading) và dùng tham số biến đổi (varargs) đúng chỗ.
      • Bạn có thể phân tích một bài toán thành dạng đệ quy (điều kiện dừng + bước đệ quy), theo dõi được ngăn xếp lời gọi và biết khi nào cần ghi nhớ (memoization).
      0/19 bàiVào học →
    5. 5

      Buổi 5: Lập trình hướng đối tượng (1): lớp và đối tượng

      180 phút
      • Sau buổi này bạn có thể giải thích được vì sao cần OOP và kể tên bốn tính chất của nó (đóng gói, kế thừa, đa hình, trừu tượng).
      • Sau buổi này bạn có thể khai báo một lớp với thuộc tính, phương thức, nhiều hàm tạo (có dùng `this`) và tạo, sử dụng các đối tượng của lớp đó.
      • Sau buổi này bạn có thể áp dụng đóng gói: đặt thuộc tính `private`, viết getter/setter có kiểm tra hợp lệ, chọn đúng phạm vi truy cập.
      0/17 bàiVào học →
    6. 6

      Buổi 6: Lập trình hướng đối tượng (2): kế thừa, trừu tượng, đa hình

      180 phút
      • Sau buổi này bạn có thể dùng `extends` và `super` để xây dựng cây kế thừa, và nói đúng thứ tự các hàm tạo được gọi.
      • Sau buổi này bạn có thể phân biệt ghi đè (override) với chồng hàm (overload), dùng `@Override` và `protected` đúng chỗ.
      • Sau buổi này bạn có thể khai báo lớp trừu tượng và phương thức trừu tượng, biết khi nào chọn lớp trừu tượng.
      0/19 bàiVào học →
    7. 7

      Buổi 7: Lập trình tổng quát và khung Collections

      180 phút
      • Sau buổi này bạn có thể viết lớp và phương thức tổng quát (`Box<T>`, `Pair<K, V>`, `<T> void print(T[] a)`) và giải thích lợi ích so với dùng `Object` ép kiểu.
      • Sau buổi này bạn có thể đặt giới hạn kiểu (`extends`, nhiều giới hạn) và chọn đúng ký tự đại diện `? extends` / `? super` theo nguyên tắc PECS.
      • Sau buổi này bạn có thể mô tả phân cấp của khung Collections và chọn đúng cấu trúc (`ArrayList`, `LinkedList`, `HashSet`, `TreeSet`, `HashMap`, `TreeMap`, `LinkedHashMap`, `ArrayDeque`, `PriorityQueue`) cho từng bài toán dựa trên độ phức tạp.
      0/20 bàiVào học →
    8. 8

      Buổi 8: Dòng dữ liệu vào/ra và tệp

      180 phút
      • Sau buổi này bạn có thể phân biệt dòng **byte** với dòng **ký tự** và chọn đúng lớp cho từng loại dữ liệu.
      • Bạn có thể ghi và đọc dữ liệu **nhị phân** (số, chuỗi, logic) bằng `DataOutputStream` / `DataInputStream` và sao chép tệp bất kỳ bằng bộ đệm.
      • Bạn có thể ghi và đọc tệp **văn bản** bằng `Reader`/`Writer`, `BufferedReader`, `PrintWriter`, `Scanner`, `Files`, luôn chỉ rõ bảng mã UTF-8.
      0/20 bàiVào học →
    9. 9

      Buổi 9: Lập trình đa luồng

      180 phút
      • Sau buổi này bạn có thể phân biệt tiến trình với luồng, giải thích mô hình bộ nhớ của luồng (mỗi luồng một stack, chung heap).
      • Sau buổi này bạn có thể tạo luồng bằng `Thread`, `Runnable`, lambda; dùng `start`, `join`, `sleep`, `interrupt` và mô tả vòng đời của luồng.
      • Sau buổi này bạn có thể nhận ra race condition và sửa bằng `synchronized`, `volatile`, `AtomicInteger`, `ReentrantLock`, tập hợp an toàn luồng.
      0/18 bàiVào học →
    10. 10

      Buổi 10: Java hiện đại: Lambda, Stream và tổng kết khóa

      180 phút
      • Sau buổi này bạn có thể giải thích giao diện hàm (functional interface) và viết biểu thức lambda thay cho lớp ẩn danh.
      • Sau buổi này bạn có thể chọn đúng giao diện hàm chuẩn (`Function`, `Predicate`, `Supplier`, `Consumer`, `UnaryOperator`, `BinaryOperator`) và dùng tham chiếu phương thức (`String::length`, `System.out::println`).
      • Sau buổi này bạn có thể dùng `Optional` để biểu diễn "có thể không có giá trị" mà không phải kiểm tra `null` thủ công.
      0/20 bàiVào học →