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
  • Vấn đề hiệu năng IO: điểm nghẽn

    JAVA 25 SELF
    Cấp độ 41,Bài học 0
    Bài giảng này nói về “điểm nghẽn” trong nhập/xuất (IO), cách phát hiện và khắc phục. Chúng ta sẽ tìm hiểu vì sao thao tác đĩa và mạng chậm hơn RAM rất nhiều, các anti‑pattern thường gặp (đọc từng byte qua read(), ghi log đồng bộ, v.v.), vai trò của bộ đệm ( BufferedInputStream, BufferedReader), profiler ( VisualVM, JProfiler) và đo thời gian bằng System. currentTimeMillis (). Chúng ta sẽ làm một thử nghiệm thực tế với tệp "bigfile.txt", so sánh tốc độ có và không có bộ đệm, xem ảnh hưởng của SSD/HDD và mạng, và liệt kê các lỗi thường gặp.
    Có sẵn
  • Kênh NIO và ByteBuffer

    JAVA 25 SELF
    Cấp độ 41,Bài học 1
    Giới thiệu thực hành về I/O không chặn của Java NIO: phân tích cách các kênh Channel và bộ đệm ByteBuffer khác với luồng InputStream/ OutputStream, cách đọc và ghi với FileChannel, định vị bằng position()/ truncate(), làm việc với các tham số bộ đệm ( capacity, limit, position, mark) và lựa chọn giữa allocate() và allocateDirect(). Trình bày các thao tác zero-copy transferTo()/ transferFrom() và các lỗi điển hình như quên flip() hoặc sai chế độ bộ đệm.
    Có sẵn
  • Tệp lớn: các mẫu chunking

    JAVA 25 SELF
    Cấp độ 41,Bài học 2
    Cách xử lý hiệu quả các tệp dung lượng hàng chục gigabyte mà không gặp OutOfMemoryError: chia thành các phần (chunks), đọc theo vị trí qua RandomAccessFile và FileChannel, chạy song song tác vụ với ExecutorService/ ForkJoinPool, còn với việc sao chép đơn giản thì dùng zero-copy qua transferTo/ transferFrom. Cùng phân tích cách chọn kích thước chunk, ranh giới dòng, đồng bộ kết quả và các lỗi thường gặp.
    Có sẵn
  • Làm việc với tệp lớn: chunking, memory mapping

    JAVA 25 SELF
    Cấp độ 41,Bài học 3
    Cách xử lý các tệp khổng lồ trong Java một cách an toàn và nhanh chóng: đọc theo từng phần (chunking) qua luồng và bộ đệm, tinh chỉnh kích thước bộ đệm để đạt hiệu năng, sử dụng ánh xạ tệp vào bộ nhớ thông qua MappedByteBuffer và FileChannel để truy cập ngẫu nhiên siêu nhanh. Chúng ta sẽ phân tích ưu và nhược điểm của memory mapping, khuyến nghị về tài nguyên và song song, cũng như các lỗi điển hình (ví dụ OutOfMemoryError, quên đóng file descriptor, chồng lấn các chunk khi tìm kiếm).
    Có sẵn
  • Lưu trữ/nén: java.util.zip

    JAVA 25 SELF
    Cấp độ 41,Bài học 4
    Bài giảng thực hành về làm việc với lưu trữ và nén trong Java: làm quen với gói java.util.zip, các luồng ZipInputStream/ ZipOutputStream và lớp truy cập ngẫu nhiên ZipFile, điều khiển mức nén qua Deflater ( 0… 9, DEFAULT_COMPRESSION), làm việc với GZIPInputStream/ GZIPOutputStream cho tệp đơn, đóng gói/giải nén thư mục bằng Files.walk và lọc bằng PathMatcher ( "glob:**/*.txt"). Sẽ bàn về bảo mật: bảo vệ khỏi Zip Slip thông qua chuẩn hóa đường dẫn và kiểm soát dung lượng đối với zip bomb, và cũng sẽ xây dựng một CLI nhỏ “zip/unzip” với mẫu.
    Có sẵn
  • Giới thiệu về tuần tự hóa đối tượng: để làm gì

    JAVA 25 SELF
    Cấp độ 42,Bài học 0
    Tại sao và như thế nào để “đóng gói” đối tượng trong Java: biến chúng thành luồng byte và ngược lại bằng ObjectOutputStream/ ObjectInputStream, lưu trạng thái giữa các lần chạy, truyền qua mạng và lưu vào bộ nhớ đệm kết quả. Phân tích vai trò của interface Serializable, các điểm tinh tế với từ khóa transient và các chuỗi như "save.dat", thảo luận rủi ro bảo mật và khả năng tương thích phiên bản. Thực hành: bản lưu (save) mini của trò chơi, gửi thông điệp client↔server và bộ nhớ đệm cho phép tính.
    Có sẵn
  • Giao diện Serializable: nguyên tắc cơ bản

    JAVA 25 SELF
    Cấp độ 42,Bài học 1
    Khám phá những điều cơ bản về tuần tự hóa trong Java: giao diện đánh dấu java.io.Serializable, cách đánh dấu lớp bằng implements Serializable, các yêu cầu đối với trường ( static, transient), các ví dụ từng bước về ghi và đọc đối tượng với ObjectOutputStream/ ObjectInputStream, những gì diễn ra “bên dưới nắp máy” khi gọi writeObject/ readObject, cũng như các lỗi thường gặp (các trường không tuần tự hóa được, lớp lồng, hành vi của trường static và phiên bản lớp thông qua serialVersionUID).
    Có sẵn
  • Các định dạng tuần tự hóa tiêu chuẩn: nhị phân, văn bản

    JAVA 25 SELF
    Cấp độ 42,Bài học 2
    Trong bài giảng này, chúng ta so sánh tuần tự hóa nhị phân của Java thông qua các lớp ObjectOutputStream và ObjectInputStream với các định dạng văn bản ( JSON, XML): nguyên lý hoạt động, tốc độ và độ gọn, khả năng tương thích phiên bản và bảo mật. Chúng ta sẽ phân tích ưu điểm và hạn chế, trình bày thực hành với Jackson (bao gồm dependency Maven) và đưa ra lời khuyên về thời điểm chọn định dạng nào, cũng như các lỗi thường gặp.
    Có sẵn
  • ObjectOutputStream, ObjectInputStream: làm việc với luồng

    JAVA 25 SELF
    Cấp độ 42,Bài học 3
    Trong bài giảng này, chúng ta tìm hiểu cách tuần tự hóa (serialize) và giải tuần tự hóa (deserialize) các đối tượng trong Java bằng cặp luồng ObjectOutputStream và ObjectInputStream: interface đánh dấu java.io.Serializable là gì, các phương thức writeObject() và readObject() hoạt động ra sao, vì sao các trường static và transient không được ghi vào luồng, những ngoại lệ thường gặp ( NotSerializableException, InvalidClassException), và serialVersionUID ảnh hưởng đến điều gì. Trong phần thực hành, chúng ta tuần tự hóa một đối tượng và một danh sách đối tượng vào tệp và phân tích các lỗi điển hình.
    Có sẵn
  • Tuần tự hóa collection: List, Map, Set

    JAVA 25 SELF
    Cấp độ 42,Bài học 4
    Hướng dẫn thực hành về tuần tự hóa collection trong Java: cách lưu và khôi phục List, Map, Set qua ObjectOutputStream/ ObjectInputStream; vì sao phần lớn collection đã triển khai Serializable; yêu cầu đối với phần tử; hành vi về thứ tự trong HashSet/ HashMap; làm việc với collection lồng nhau và collection rỗng; các cạm bẫy ( InvalidClassException, serialVersionUID, transient/ static). Kết thúc bằng một ví dụ hoàn chỉnh về “thư viện ảo”.
    Có sẵn
  • Kiểm soát quá trình tuần tự hóa: writeObject, readObject

    JAVA 25 SELF
    Cấp độ 43,Bài học 0
    Cách chặn tuần tự hóa mặc định và nắm quyền kiểm soát quy trình: dùng các phương thức private writeObject/ readObject với chữ ký nghiêm ngặt ( private void writeObject( ObjectOutputStream out) throws IOException), gọi defaultWriteObject()/ defaultReadObject(), loại trừ trường bằng transient, thêm kiểm tra tổng và log, đừng quên serialVersionUID và tính tương thích phiên bản. Phân tích các lỗi điển hình, làm việc với ObjectOutputStream/ ObjectInputStream và ví dụ thực tiễn.
    Có sẵn
  • trường transient, serialVersionUID

    JAVA 25 SELF
    Cấp độ 43,Bài học 1
    Hướng dẫn thực hành về tuần tự hóa trong Java: khi nào và cách sử dụng transient để loại trừ các trường khỏi luồng, điều gì xảy ra khi giải tuần tự (giá trị mặc định), cách khôi phục trạng thái trong phương thức readObject; serialVersionUID là gì, cách khai báo nó ( private static final long serialVersionUID = 1L), khi nào thay đổi và vì sao nên đặt tường minh. Có các ví dụ hoạt động, kịch bản rủi ro và lỗi thường gặp.
    Có sẵn
  • 1
  • ...
  • 18
  • 19
  • 20
  • 21
  • 22
  • ...
  • 30
Học
  • Đăng ký
  • Khóa học Java
  • Trợ giúp bài tập
  • Bảng giá
  • Dự án trò chơi
  • 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