<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mọt Dev</title>
    <link>https://mot-dev-95.vercel.app</link>
    <description>Blog kỹ thuật về lập trình, hệ phân tán và phát triển web hiện đại.</description>
    <language>en</language>
    <atom:link href="https://mot-dev-95.vercel.app/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>99 Ngày Java — Ngày 13: Đóng gói (Encapsulation)</title>
      <link>https://mot-dev-95.vercel.app/blog/java-day-13-encapsulation</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/java-day-13-encapsulation</guid>
      <pubDate>Sun, 09 Aug 2026 11:10:00 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 13 của 99 Ngày Java: vì sao public field là thảm họa, công thức private + getter + nghiệp vụ có kiểm soát (không setter bừa bãi), bốn mức access modifier với chiến lược kín nhất có thể, và quy ước JavaBean bắt tay framework.</description>
    </item>
    <item>
      <title>99 Ngày Spring — Ngày 13: @RequestBody &amp; DTO — đừng công khai entity ra API</title>
      <link>https://mot-dev-95.vercel.app/blog/spring-day-13-request-body-dto</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/spring-day-13-request-body-dto</guid>
      <pubDate>Sun, 09 Aug 2026 11:10:00 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 13 của 99 Ngày Spring: @RequestBody + Jackson deserialize JSON thành object, DTO là hợp đồng API — chặn lỗ hổng mass assignment chiều vào và rò rỉ dữ liệu chiều ra, request/response DTO khác nhau là bình thường, và Jackson annotations tinh chỉnh hợp đồng JSON.</description>
    </item>
    <item>
      <title>99 Ngày Spring — Ngày 12: Request mapping &amp; tham số — @PathVariable, @RequestParam</title>
      <link>https://mot-dev-95.vercel.app/blog/spring-day-12-request-params</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/spring-day-12-request-params</guid>
      <pubDate>Sat, 08 Aug 2026 11:10:00 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 12 của 99 Ngày Spring: @PathVariable hứng định danh trong đường dẫn, @RequestParam hứng bộ lọc sau dấu hỏi (required/defaultValue), quy tắc chọn path hay query, mapping trùng nổ lúc khởi động, và chuẩn thiết kế URL danh từ số nhiều.</description>
    </item>
    <item>
      <title>99 Ngày Java — Ngày 12: Constructor — nghi thức khai sinh đối tượng</title>
      <link>https://mot-dev-95.vercel.app/blog/java-day-12-constructors</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/java-day-12-constructors</guid>
      <pubDate>Sat, 08 Aug 2026 11:10:00 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 12 của 99 Ngày Java: constructor ép đối tượng chào đời đầy đủ dữ liệu, default constructor — món quà có điều kiện của compiler, overload constructor nối nhau bằng this(...), khối khởi tạo instance/static và thứ tự thực thi khi new.</description>
    </item>
    <item>
      <title>99 Ngày Spring — Ngày 11: REST controller đầu tiên</title>
      <link>https://mot-dev-95.vercel.app/blog/spring-day-11-rest-controller</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/spring-day-11-rest-controller</guid>
      <pubDate>Fri, 07 Aug 2026 11:10:00 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 11 của 99 Ngày Spring — mở màn giai đoạn REST API: @RestController + @GetMapping mở endpoint trong 5 dòng, Jackson tự serialize object thành JSON, hành trình request qua DispatcherServlet, và thói quen vàng controller mỏng — service dày.</description>
    </item>
    <item>
      <title>99 Ngày Java — Ngày 11: Lớp &amp; đối tượng</title>
      <link>https://mot-dev-95.vercel.app/blog/java-day-11-classes-objects</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/java-day-11-classes-objects</guid>
      <pubDate>Fri, 07 Aug 2026 11:10:00 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 11 của 99 Ngày Java — mở màn OOP: class là khuôn, object là bánh; field &amp; method của đối tượng; new đúc đối tượng trên heap và biến chỉ giữ tham chiếu; giá trị mặc định của field; và this — con trỏ &quot;chính tôi&quot; trong method.</description>
    </item>
    <item>
      <title>99 Ngày Spring — Ngày 10: @Conditional &amp; cách auto-configuration hoạt động</title>
      <link>https://mot-dev-95.vercel.app/blog/spring-day-10-conditional-auto-configuration</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/spring-day-10-conditional-auto-configuration</guid>
      <pubDate>Thu, 06 Aug 2026 11:10:00 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 10 của 99 Ngày Spring: @Conditional và họ @ConditionalOn... — bean có điều kiện, mổ xẻ auto-configuration của Boot (AutoConfiguration.imports, @ConditionalOnClass), nghệ thuật rút lui của @ConditionalOnMissingBean, và đọc CONDITIONS EVALUATION REPORT với --debug.</description>
    </item>
    <item>
      <title>99 Ngày Java — Ngày 10: Phương thức &amp; truyền tham số</title>
      <link>https://mot-dev-95.vercel.app/blog/java-day-10-methods</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/java-day-10-methods</guid>
      <pubDate>Thu, 06 Aug 2026 11:10:00 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 10 của 99 Ngày Java: khai báo method với tham số và giá trị trả về, overloading — trùng tên khác chữ ký, sự thật đằng sau &quot;Java luôn pass-by-value&quot; (vì sao sửa mảng thì thấy mà gán lại thì không), và phạm vi biến local.</description>
    </item>
    <item>
      <title>Làm sao YouTube, TikTok phục vụ livestream cho 2–3 triệu người xem cùng lúc?</title>
      <link>https://mot-dev-95.vercel.app/blog/livestream-trieu-nguoi-xem-cung-luc</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/livestream-trieu-nguoi-xem-cung-luc</guid>
      <pubDate>Thu, 06 Aug 2026 02:25:59 GMT</pubDate>
      <category>Backend</category>
      <description>Không có 3 triệu kết nối nào chạm tới server gốc cả: ingest tách khỏi delivery, transcode một lần thành thang bitrate, HLS biến video live thành file tĩnh cache được, CDN nhân bản hình cây với request coalescing, trade-off độ trễ, và hệ chat biết &quot;đếm xấp xỉ&quot; — kèm góc trả lời phỏng vấn system design.</description>
    </item>
    <item>
      <title>99 Ngày Spring — Ngày 09: Profiles — cấu hình theo môi trường</title>
      <link>https://mot-dev-95.vercel.app/blog/spring-day-09-profiles</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/spring-day-09-profiles</guid>
      <pubDate>Thu, 06 Aug 2026 00:14:00 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 09 của 99 Ngày Spring: vì sao cần profile, config theo môi trường với on-profile &amp; application-{profile}.yml, chọn bean bằng @Profile (cả !prod, dev | test), ba cách kích hoạt spring.profiles.active, profile group và các lời khuyên thực chiến.</description>
    </item>
    <item>
      <title>99 Ngày Java — Ngày 09: Chuỗi String cơ bản</title>
      <link>https://mot-dev-95.vercel.app/blog/java-day-09-string-basics</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/java-day-09-string-basics</guid>
      <pubDate>Thu, 06 Aug 2026 00:13:59 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 09 của 99 Ngày Java: vì sao String bất biến và mọi method đều trả chuỗi mới, String pool và bẫy kinh điển equals vs ==, hộp đồ nghề method hay dùng (length, substring, strip, split…), nối chuỗi bằng + và bẫy hiệu năng trong vòng lặp.</description>
    </item>
    <item>
      <title>99 Ngày Spring — Ngày 08: Cấu hình với properties &amp; YAML</title>
      <link>https://mot-dev-95.vercel.app/blog/spring-day-08-externalized-configuration</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/spring-day-08-externalized-configuration</guid>
      <pubDate>Wed, 05 Aug 2026 00:14:35 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 08 của 99 Ngày Spring: vì sao cấu hình phải ra khỏi code, application.properties vs application.yml, @Value cho giá trị lẻ, @ConfigurationProperties + record cho nhóm type-safe, relaxed binding và ghi đè bằng biến môi trường ở production.</description>
    </item>
    <item>
      <title>99 Ngày Java — Ngày 08: Mảng (Arrays)</title>
      <link>https://mot-dev-95.vercel.app/blog/java-day-08-arrays</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/java-day-08-arrays</guid>
      <pubDate>Wed, 05 Aug 2026 00:14:34 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 08 của 99 Ngày Java: khai báo &amp; khởi tạo mảng, chỉ số từ 0 và ArrayIndexOutOfBoundsException, duyệt bằng for/for-each, mảng 2 chiều &amp; răng cưa, hộp đồ nghề java.util.Arrays — và bẫy tham chiếu: gán mảng không phải là copy.</description>
    </item>
    <item>
      <title>99 Ngày Java — Ngày 07: Vòng lặp for, while, do-while</title>
      <link>https://mot-dev-95.vercel.app/blog/java-day-07-loops</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/java-day-07-loops</guid>
      <pubDate>Tue, 04 Aug 2026 00:29:53 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 07 của 99 Ngày Java: for khi biết số lần, while/do-while khi lặp theo điều kiện, break &amp; continue lái dòng chảy, label cho vòng lặp lồng nhau — và 3 cái bẫy: dấu chấm phẩy thừa, lặp vô hạn, off-by-one.</description>
    </item>
    <item>
      <title>99 Ngày Spring — Ngày 07: Bean scope &amp; lifecycle</title>
      <link>https://mot-dev-95.vercel.app/blog/spring-day-07-bean-scope-lifecycle</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/spring-day-07-bean-scope-lifecycle</guid>
      <pubDate>Tue, 04 Aug 2026 00:29:41 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 07 của 99 Ngày Spring: singleton/prototype/request scope, vì sao singleton phải stateless (câu phỏng vấn thread-safe kinh điển), vòng đời bean với @PostConstruct &amp; @PreDestroy, và @Lazy cho bean nặng hiếm dùng.</description>
    </item>
    <item>
      <title>99 Ngày Java — Ngày 06: Câu lệnh điều kiện if &amp; switch</title>
      <link>https://mot-dev-95.vercel.app/blog/java-day-06-conditionals-if-switch</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/java-day-06-conditionals-if-switch</guid>
      <pubDate>Mon, 03 Aug 2026 00:30:46 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 06 của 99 Ngày Java: if–else if chạy nhánh đúng đầu tiên rồi dừng, guard clause dẹp if lồng nhau, switch cổ điển với bẫy fall-through và switch expression đời mới với -&gt;, yield, exhaustiveness.</description>
    </item>
    <item>
      <title>99 Ngày Spring — Ngày 06: @Configuration &amp; @Bean</title>
      <link>https://mot-dev-95.vercel.app/blog/spring-day-06-configuration-bean</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/spring-day-06-configuration-bean</guid>
      <pubDate>Mon, 03 Aug 2026 00:30:38 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 06 của 99 Ngày Spring: đăng ký bean thủ công bằng @Configuration &amp; @Bean — khi component scan không với tới (class thư viện ngoài), tiêm phụ thuộc giữa các @Bean, và CGLIB proxy giữ singleton khi gọi chéo method.</description>
    </item>
    <item>
      <title>99 Ngày Java — Ngày 05: Ép kiểu (casting)</title>
      <link>https://mot-dev-95.vercel.app/blog/java-day-05-type-casting</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/java-day-05-type-casting</guid>
      <pubDate>Sat, 01 Aug 2026 23:23:24 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 05 của 99 Ngày Java: widening tự động vs narrowing phải cast tường minh, cast cắt chứ không làm tròn, char chỉ là mã Unicode, và 3 cái bẫy ép kiểu gặp hoài trong code thật.</description>
    </item>
    <item>
      <title>99 Ngày Spring — Ngày 05: @Component &amp; component scan</title>
      <link>https://mot-dev-95.vercel.app/blog/spring-day-05-component-scanning</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/spring-day-05-component-scanning</guid>
      <pubDate>Sat, 01 Aug 2026 23:23:14 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 05 của 99 Ngày Spring: component scan tìm bean thế nào, bộ stereotype @Component/@Service/@Repository, quy tắc vàng main class ở gốc package, và bẫy basePackages thay thế chứ không bổ sung.</description>
    </item>
    <item>
      <title>99 Ngày Java — Ngày 04: Toán tử &amp; biểu thức</title>
      <link>https://mot-dev-95.vercel.app/blog/java-day-04-operators-expressions</link>
      <guid isPermaLink="true">https://mot-dev-95.vercel.app/blog/java-day-04-operators-expressions</guid>
      <pubDate>Fri, 31 Jul 2026 14:53:22 GMT</pubDate>
      <category>Backend</category>
      <description>Ngày 04 của 99 Ngày Java: toán tử số học và cú lừa chia nguyên, ++ prefix vs postfix, logic short-circuit chống NPE, toán tử 3 ngôi và quy tắc thêm ngoặc khi nghi ngờ độ ưu tiên.</description>
    </item>
  </channel>
</rss>