CodeGym
Khuyến mãi
Học tập
Khóa học
Bài tập
Khảo sát & Bài kiểm tra
Trò chơi
Trợ giúp
Lịch
Cộng đồng
Người dùng
Diễn đàn
Trò chuyện
Bài viết
Câu chuyện thành công
Hoạt động
Đánh giá
Gói đăng ký
Chủ đề sáng

Bài học

  • Đánh giá
  • Về chúng tôi
Bắt đầu
Bắt đầu học
Bắt đầu học ngay
  • Tiến độ của tôi
  • Khóa học
  • Bản đồ Quest
  • Bài học
  • module-info.java: cú pháp, tạo mô-đun

    JAVA 25 SELF
    Cấp độ 60,Bài học 1
    Cùng tìm hiểu tệp module-info.java là gì, nó nằm ở đâu trong dự án và cách khai báo mô-đun bằng từ khóa module. Học cách export API qua exports, khai báo phụ thuộc qua requires, đồng thời xem các chỉ thị bổ sung ( opens, uses, provides ... with). Trong bài giảng — ví dụ, quy tắc đặt tên mô-đun, phân tích thực tế cấu trúc dự án và các lỗi thường gặp khi build mô-đun.
    Có sẵn
  • Đóng gói thông qua mô-đun: export và import

    JAVA 25 SELF
    Cấp độ 60,Bài học 2
    Cách Java 9+ bổ sung cơ chế đóng gói theo mô-đun bên trên lớp và gói: ngay cả các lớp public cũng bị ẩn cho đến khi gói được mở rõ ràng bằng exports trong module-info.java. Cùng tìm hiểu cách khai báo phụ thuộc với requires, cách giới hạn khả năng nhìn thấy với exports to, sự khác nhau giữa cấp module so với private/ public, và những lỗi biên dịch (ví dụ: “package ... is not visible”, “cannot access ...”) cho thấy bạn đã quên exports hoặc requires.
    Có sẵn
  • Tách dự án thành mô-đun: best practices

    JAVA 25 SELF
    Cấp độ 60,Bài học 3
    Hướng dẫn thực hành về kiến trúc mô-đun trong Java: khi nào và vì sao nên chia nhỏ mã thành các mô-đun, các sơ đồ điển hình (kiến trúc “hành tây”, tách api/ impl, mô-đun kiểm thử), cấu hình phụ thuộc qua module-info.java và các từ khóa requires/ exports, ví dụ dự án với 3 mô-đun, tích hợp với Maven/ Gradle và IntelliJ IDEA, cũng như phân tích các lỗi thường gặp (phụ thuộc vòng, package không được export, --module-path sai).
    Có sẵn
  • Xây dựng các dự án đa mô-đun: Maven, Gradle, IDEA

    JAVA 25 SELF
    Cấp độ 60,Bài học 4
    Cách xây dựng một dự án mô-đun trên Java: khác biệt giữa classpath và module-path, khi nào dùng cờ --module-path, cách cấu hình cấu trúc đa mô-đun trong Maven và Gradle, và cách chạy mọi thứ từ IntelliJ IDEA. Chúng tôi sẽ trình bày cấu trúc mô-đun với module-info.java, phụ thuộc qua requires/ exports, cấu hình plugin và các lỗi thường gặp khi build.
    Có sẵn
  • ProcessBuilder — khởi chạy tiến trình bên ngoài

    JAVA 25 SELF
    Cấp độ 61,Bài học 0
    Phân tích cách khởi chạy lệnh và tiện ích bên ngoài từ Java bằng lớp ProcessBuilder: vì sao nó tốt hơn Runtime. getRuntime(). exec(), cách cấu hình thư mục làm việc qua directory(), biến môi trường qua environment(), và điều khiển tiến trình qua start(), waitFor(), các luồng getInputStream()/ getErrorStream()/ getOutputStream(). Thảo luận về tính đa nền tảng ( cmd.exe/ ls), làm việc với stdout/ stderr và các lỗi thường gặp.
    Có sẵn
  • Đọc đầu ra của tiến trình, làm việc với stdin/stdout

    JAVA 25 SELF
    Cấp độ 61,Bài học 1
    Thực hành làm việc với các tiến trình bên ngoài trong Java: cách đọc stdout qua Process.getInputStream(), bắt lỗi từ stderr qua Process.getErrorStream(), ghi vào stdin bằng Process.getOutputStream(), cũng như dùng các phương thức tiện lợi inputReader()/ errorReader()/ outputWriter(). Chúng ta sẽ xem các đặc thù của những lệnh như java -version, đọc song song các luồng để tránh deadlock, xử lý mã hóa ký tự ( "UTF-8") và một cầu nối nhỏ với các script Python.
    Có sẵn
  • Quản lý vòng đời tiến trình

    JAVA 25 SELF
    Cấp độ 61,Bài học 2
    Thực hành quản lý các tiến trình bên ngoài từ Java: chờ kết thúc qua waitFor() (bao gồm cả timeout), đọc mã thoát, dừng đúng cách bằng destroy()/ destroyForcibly(), ngăn treo và các tiến trình “zombie”, đồng thời đừng quên các luồng xuất và ngoại lệ. Cùng phân tích các điểm khác biệt đa nền tảng và lỗi thường gặp.
    Có sẵn
  • Giao tiếp tương tác với các tiến trình

    JAVA 25 SELF
    Cấp độ 61,Bài học 3
    Trong bài giảng này, chúng ta sẽ tìm hiểu cách từ Java thiết lập một cuộc đối thoại “sống” với các chương trình bên ngoài: ghi vào stdin, đọc từ stdout và stderr, tránh khóa chéo ( deadlock), xử lý song song phần xuất bằng ExecutorService, đóng luồng đúng cách và quản lý vòng đời của Process thông qua ProcessBuilder. Chúng ta sẽ xem các ví dụ với script tương tác bằng Python và tiện ích bc, đồng thời phân tích các cạm bẫy của cơ chế đệm và nhu cầu gọi flush().
    Có sẵn
  • Phân tích các lỗi điển hình khi làm việc với tiến trình

    JAVA 25 SELF
    Cấp độ 61,Bài học 4
    Hướng dẫn thực hành để làm việc ổn định với các tiến trình bên ngoài trong Java: cách tránh treo do các luồng chưa được đọc stdout/ stderr, cấu hình đúng mã hóa đầu ra (ví dụ, UTF-8, CP866), tính đến khác biệt lệnh giữa các nền tảng ( ls so với dir), xử lý quyền truy cập và mã thoát thông qua process.exitValue(), đóng tài nguyên để không rò rỉ và tránh deadlock khi tương tác. Chúng ta xem xét cách sử dụng đúng ProcessBuilder, đọc song song các luồng (thread/ ExecutorService), kết thúc đúng thông qua process.destroy(), cũng như đường dẫn đa nền tảng với File.separator.
    Có sẵn
  • Giới thiệu về reflection: lớp Class, dùng để làm gì

    JAVA 25 SELF
    Cấp độ 62,Bài học 0
    Chúng ta sẽ tìm hiểu reflection trong Java là gì và vì sao các framework và công cụ cần đến nó; cách đối tượng Class — trái tim của reflection — hoạt động, và các cách để lấy nó: qua .class, getClass() và Class.forName(). Sẽ bàn khi nào nên dùng reflection và khi nào nên tránh, xem ví dụ lấy metadata (tên, package, superclass, interfaces), phân tích mini‑tiện ích “Đây là lớp gì?” và các lỗi thường gặp ( ClassNotFoundException, hiệu năng, bảo mật).
    Có sẵn
  • Lấy thông tin về lớp, trường, phương thức

    JAVA 25 SELF
    Cấp độ 62,Bài học 1
    Trong bài giảng này, chúng ta tìm hiểu về reflection trong Java: cách dùng Class-API để lấy thông tin về trường ( getFields()/ getDeclaredFields()), phương thức ( getMethods()/ getDeclaredMethods()), constructor ( getConstructors()/ getDeclaredConstructors()) và annotation ( getAnnotations()). Ta sẽ đọc các modifier qua Modifier ( public, private, protected, static, final), phân biệt giữa “public” và “declared”, ghép một tiện ích nhỏ để kiểm tra lớp (class inspector) và xem sơ đồ trực quan.
    Có sẵn
  • Bảo mật, hạn chế và các thay thế cho reflection

    JAVA 25 SELF
    Cấp độ 62,Bài học 2
    Trong bài giảng này, chúng ta phân tích các rủi ro và hạn chế của reflection: vượt qua tính đóng gói qua setAccessible( true), thử thay đổi các trường final và vì sao điều đó nguy hiểm do các tối ưu hóa của JVM; số phận của SecurityManager và cách hệ thống mô-đun (Java 9+) dẫn đến InaccessibleObjectException. Cũng bàn về mất hiệu năng và an toàn kiểu, các giải pháp thay thế hiện đại ( record, sealed, pattern matching, APT, DI) và best practices. Cuối cùng — ví dụ thực hành với tham số JVM --add-opens.
    Có sẵn
  • 1
  • ...
  • 26
  • 27
  • 28
  • 29
  • 30
Học
  • Đăng ký
  • Khóa học Java
  • Trợ giúp bài tập
  • Bảng giá
  • Cú pháp Java
Cộng đồng
  • Người dùng
  • Bài viết
  • Diễn đàn
  • Trò chuyện
  • Câu chuyện thành công
  • Hoạt động
  • Chương trình giới thiệu
Công ty
  • Về chúng tôi
  • Liên hệ
  • Đánh giá
  • Phòng báo chí
  • CodeGym cho EDU
  • Câu hỏi thường gặp
  • Hỗ trợ
CodeGymCodeGym là một khóa học trực tuyến để học lập trình Java từ đầu. Khóa học này là cách hoàn hảo để nắm vững Java cho người mới bắt đầu. Nó chứa 1200+ bài tập với kiểm tra ngay lập tức và phạm vi lý thuyết cơ bản cần thiết về Java. Để giúp bạn thành công trong học tập, chúng tôi đã triển khai một bộ tính năng tạo động lực: bài kiểm tra, dự án lập trình, nội dung về phương pháp học hiệu quả, và hỗ trợ sự nghiệp lập trình viên Java.
Theo dõi chúng tôi
Ngôn ngữ giao diện
English Deutsch Español हिन्दी Français Português Polski বাংলা 简体中文 मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский
Vietnamese
"Lập trình viên được tạo nên, không sinh ra" © 2026 CodeGym
MastercardVisa
"Lập trình viên được tạo nên, không sinh ra" © 2026 CodeGym