<?xml version="1.0" encoding="UTF-8" ?>
<rss
    version="2.0"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:webfeeds="http://webfeeds.org/rss/1.0"
    xmlns:media="http://search.yahoo.com/mrss/"
    >
    <channel>
        <title>Effective-java Tag - Viblo</title>
        <link>https://viblo.asia/rss</link>
        <description><![CDATA[Free service for technical knowledge sharing]]></description>
        <atom:link href="https://viblo.asia/rss/tags/effective-java.rss" rel="self"></atom:link>
                <copyright>Sun* Inc.</copyright>
                                                <webfeeds:logo>https://viblo.asia/logo_full.svg</webfeeds:logo>
        <image>
            <url>https://viblo.asia/logo_full.svg</url>
            <title>Effective-java Tag - Viblo</title>
            <link>https://viblo.asia/rss</link>
        </image>
                                <language>vi-vn</language>
        <lastBuildDate>2026-07-17T15:45:34+07:00</lastBuildDate>
                <item>
            <title><![CDATA[Bài 9: Ưu tiên try-with-resources thay cho try-finally]]></title>
                        <link>https://viblo.asia/p/bai-9-uu-tien-try-with-resources-thay-cho-try-finally-18J2exR54YK</link>
            <guid isPermaLink="true">https://viblo.asia/p/bai-9-uu-tien-try-with-resources-thay-cho-try-finally-18J2exR54YK</guid>
            <description><![CDATA[Bad practice thường gặp (hướng cũ)

Vì sao cách này không tốt

- Khi có nhiều resource lồng nhau, code nhanh chóng rối và dài.
- Dễ sai sót thứ tự đón...]]></description>
                        <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anh Hoàng Tuấn</dc:creator>
            <pubDate>2026-06-08 17:13:24</pubDate>
                                                                                                        </item>
                <item>
            <title><![CDATA[Bài 8: Tránh finalizer và cleaner]]></title>
                        <link>https://viblo.asia/p/bai-8-tranh-finalizer-va-cleaner-K9Vy87n0LQR</link>
            <guid isPermaLink="true">https://viblo.asia/p/bai-8-tranh-finalizer-va-cleaner-K9Vy87n0LQR</guid>
            <description><![CDATA[Bad practice thường gặp (hướng cũ)

Vì sao cách này không tốt

- Thời điểm chạy finalizer/cleaner là không xác định.
- Không đảm bảo được sẽ chạy kịp ...]]></description>
                        <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anh Hoàng Tuấn</dc:creator>
            <pubDate>2026-06-08 17:04:03</pubDate>
                                                                                                        </item>
                <item>
            <title><![CDATA[Bài 7: Loại bỏ obsolete object references]]></title>
                        <link>https://viblo.asia/p/bai-7-loai-bo-obsolete-object-references-gdJzv89EJz5</link>
            <guid isPermaLink="true">https://viblo.asia/p/bai-7-loai-bo-obsolete-object-references-gdJzv89EJz5</guid>
            <description><![CDATA[Bad practice thường gặp (hướng cũ)

Vì sao cách này không tốt

- Object đã “không còn dùng” về mặt logic nhưng vẫn bị giữ reference vật lý.
- Garbage ...]]></description>
                        <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anh Hoàng Tuấn</dc:creator>
            <pubDate>2026-06-08 16:14:25</pubDate>
                                                                                                        </item>
                <item>
            <title><![CDATA[Bài 6: Tránh tạo object không cần thiết]]></title>
                        <link>https://viblo.asia/p/bai-6-tranh-tao-object-khong-can-thiet-1XVOW8n8VMz</link>
            <guid isPermaLink="true">https://viblo.asia/p/bai-6-tranh-tao-object-khong-can-thiet-1XVOW8n8VMz</guid>
            <description><![CDATA[Bad practice thường gặp (tạo object dư thừa)

Vì sao cách này không tốt

- Mỗi lần gọi matches là mỗi lần compile regex mới.
- Ở hot path, chi phí tạo...]]></description>
                        <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anh Hoàng Tuấn</dc:creator>
            <pubDate>2026-06-08 09:53:22</pubDate>
                                                                                                        </item>
                <item>
            <title><![CDATA[Bài 5: Ưu tiên dependency injection thay vì hardcode resource]]></title>
                        <link>https://viblo.asia/p/bai-5-uu-tien-dependency-injection-thay-vi-hardcode-resource-R5JRQ8704Gv</link>
            <guid isPermaLink="true">https://viblo.asia/p/bai-5-uu-tien-dependency-injection-thay-vi-hardcode-resource-R5JRQ8704Gv</guid>
            <description><![CDATA[Bad practice thường gặp (làm theo hướng cũ)

Vấn đề của cách này:

- SpellChecker bị khóa cứng vào FileLexicon.
- Khó test vì không thể thay bằng mock...]]></description>
                        <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anh Hoàng Tuấn</dc:creator>
            <pubDate>2026-06-08 09:52:09</pubDate>
                                                                                                        </item>
                <item>
            <title><![CDATA[Bài 4: Buộc Class không thể được khởi tạo bằng constructor private]]></title>
                        <link>https://viblo.asia/p/bai-4-buoc-class-khong-the-duoc-khoi-tao-bang-constructor-private-37LdeXngVov</link>
            <guid isPermaLink="true">https://viblo.asia/p/bai-4-buoc-class-khong-the-duoc-khoi-tao-bang-constructor-private-37LdeXngVov</guid>
            <description><![CDATA[Bad practice thường gặp (hướng cũ)

Vấn đề của cách này:

- Utility class bị khởi tạo dù instance là vô nghĩa.
- Người dùng API có thể hiểu sai mục đí...]]></description>
                        <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anh Hoàng Tuấn</dc:creator>
            <pubDate>2026-06-08 09:50:54</pubDate>
                                                                                                        </item>
                <item>
            <title><![CDATA[Bài 3: Thực thi tính chất singleton bằng constructor private hoặc enum type]]></title>
                        <link>https://viblo.asia/p/bai-3-thuc-thi-tinh-chat-singleton-bang-constructor-private-hoac-enum-type-1XVOW7D1VMz</link>
            <guid isPermaLink="true">https://viblo.asia/p/bai-3-thuc-thi-tinh-chat-singleton-bang-constructor-private-hoac-enum-type-1XVOW7D1VMz</guid>
            <description><![CDATA[Bài toán
Giá sử chúng ta tự triển khai một hệ thống loging đơn giản như sau
Ở khắp nơi trong hệ thống của chúng ta sẽ liên tục làm điều này
Vấn đề là ...]]></description>
                        <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anh Hoàng Tuấn</dc:creator>
            <pubDate>2026-06-04 13:21:18</pubDate>
                                                                                                        </item>
                <item>
            <title><![CDATA[Bài 2: Consider a builder when faced with many constructor parameters]]></title>
                        <link>https://viblo.asia/p/bai-2-consider-a-builder-when-faced-with-many-constructor-parameters-AWVpXYv3V05</link>
            <guid isPermaLink="true">https://viblo.asia/p/bai-2-consider-a-builder-when-faced-with-many-constructor-parameters-AWVpXYv3V05</guid>
            <description><![CDATA[Static factory và constructor có chung một hạn chế: chúng không mở rộng tốt khi số lượng tham số tùy chọn (optional parameters) trở nên quá lớn. Hãy x...]]></description>
                        <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anh Hoàng Tuấn</dc:creator>
            <pubDate>2026-06-03 15:41:00</pubDate>
                                                                                                        </item>
                <item>
            <title><![CDATA[Bài 1: Sử dụng static factory methods thay vì sử dụng constructors]]></title>
                        <link>https://viblo.asia/p/bai-1-su-dung-static-factory-methods-thay-vi-su-dung-constructors-13VM9wA8VY7</link>
            <guid isPermaLink="true">https://viblo.asia/p/bai-1-su-dung-static-factory-methods-thay-vi-su-dung-constructors-13VM9wA8VY7</guid>
            <description><![CDATA[Static factory method và constructor là gì?
Như các bạn đã biết, Java là ngôn ngữ lập trình hướng đối tượng, các thành phần cấu thành nên một chương t...]]></description>
                        <dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anh Hoàng Tuấn</dc:creator>
            <pubDate>2026-06-02 18:04:11</pubDate>
                                                                                                        </item>
            </channel>
</rss>
