<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://chanhle.dev/en</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi" />
<lastmod>2026-10-12T06:52:32.100Z</lastmod>
<changefreq>weekly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog" />
<lastmod>2026-10-12T06:52:32.100Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://chanhle.dev/en/about</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/about" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/about" />
<lastmod>2026-10-12T06:52:32.100Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/proxysql-hostgroups-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/proxysql-hostgroups-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/proxysql-hostgroups-explained" />
<lastmod>2026-10-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/python-threadpool-to-asyncio-migration</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/python-threadpool-to-asyncio-migration" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/python-threadpool-to-asyncio-migration" />
<lastmod>2026-06-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/proxysql-php-mysql-connection-pooling</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/proxysql-php-mysql-connection-pooling" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/proxysql-php-mysql-connection-pooling" />
<lastmod>2026-06-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-25-new-apis-libraries</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-25-new-apis-libraries" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-25-new-apis-libraries" />
<lastmod>2026-05-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/seniors-use-ai-like-google</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/seniors-use-ai-like-google" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/seniors-use-ai-like-google" />
<lastmod>2026-05-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/git-logs-as-ai-context</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/git-logs-as-ai-context" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/git-logs-as-ai-context" />
<lastmod>2026-05-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/software-fundamentals-matter-more-than-ever</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/software-fundamentals-matter-more-than-ever" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/software-fundamentals-matter-more-than-ever" />
<lastmod>2026-05-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/context-engineering-harness-engineering-ai-agents</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/context-engineering-harness-engineering-ai-agents" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/context-engineering-harness-engineering-ai-agents" />
<lastmod>2026-05-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/real-engineers-cant-vibe-code</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/real-engineers-cant-vibe-code" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/real-engineers-cant-vibe-code" />
<lastmod>2026-05-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/power-of-abstraction-software-construction</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/power-of-abstraction-software-construction" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/power-of-abstraction-software-construction" />
<lastmod>2026-05-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/why-learning-to-code-still-matters</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/why-learning-to-code-still-matters" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/why-learning-to-code-still-matters" />
<lastmod>2026-05-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/coding-with-ai-workflow</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/coding-with-ai-workflow" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/coding-with-ai-workflow" />
<lastmod>2026-04-29T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/software-history-battle-against-complexity</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/software-history-battle-against-complexity" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/software-history-battle-against-complexity" />
<lastmod>2026-04-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/python-senior-interview-questions</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/python-senior-interview-questions" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/python-senior-interview-questions" />
<lastmod>2026-04-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/how-to-communicate-with-your-boss</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/how-to-communicate-with-your-boss" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/how-to-communicate-with-your-boss" />
<lastmod>2026-04-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/memory-in-ai-coding-assistants</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/memory-in-ai-coding-assistants" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/memory-in-ai-coding-assistants" />
<lastmod>2026-04-13T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/context-in-ai-coding-assistants</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/context-in-ai-coding-assistants" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/context-in-ai-coding-assistants" />
<lastmod>2026-04-13T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/vibe-coding-vs-spec-driven-development</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/vibe-coding-vs-spec-driven-development" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/vibe-coding-vs-spec-driven-development" />
<lastmod>2026-04-13T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/why-devs-need-domain-experts</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/why-devs-need-domain-experts" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/why-devs-need-domain-experts" />
<lastmod>2026-04-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/nestjs-modules-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/nestjs-modules-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/nestjs-modules-explained" />
<lastmod>2026-04-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/dev-is-problem-solving-not-just-coding</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/dev-is-problem-solving-not-just-coding" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/dev-is-problem-solving-not-just-coding" />
<lastmod>2026-04-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/docker-networks-and-volumes</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/docker-networks-and-volumes" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/docker-networks-and-volumes" />
<lastmod>2026-04-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/docker-compose-basics</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/docker-compose-basics" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/docker-compose-basics" />
<lastmod>2026-04-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/docker-writing-a-dockerfile</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/docker-writing-a-dockerfile" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/docker-writing-a-dockerfile" />
<lastmod>2026-04-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/docker-images-and-containers-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/docker-images-and-containers-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/docker-images-and-containers-explained" />
<lastmod>2026-04-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/docker-production-failure-handling</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/docker-production-failure-handling" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/docker-production-failure-handling" />
<lastmod>2026-03-30T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/docker-networking-volumes</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/docker-networking-volumes" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/docker-networking-volumes" />
<lastmod>2026-03-30T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/microservices-hidden-complexity-cost</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/microservices-hidden-complexity-cost" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/microservices-hidden-complexity-cost" />
<lastmod>2026-03-28T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/redis-vs-memcached-vs-local-cache</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/redis-vs-memcached-vs-local-cache" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/redis-vs-memcached-vs-local-cache" />
<lastmod>2026-03-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/iot-ingestion-api-design-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/iot-ingestion-api-design-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/iot-ingestion-api-design-guide" />
<lastmod>2026-03-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/gitflow-branching-model-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/gitflow-branching-model-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/gitflow-branching-model-guide" />
<lastmod>2026-03-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/local-dev-vs-production-environment</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/local-dev-vs-production-environment" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/local-dev-vs-production-environment" />
<lastmod>2026-03-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/vertical-slice-architecture-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/vertical-slice-architecture-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/vertical-slice-architecture-guide" />
<lastmod>2026-03-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/playwright-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/playwright-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/playwright-complete-guide" />
<lastmod>2026-03-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/local-smtp-relay-sendgrid-docker</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/local-smtp-relay-sendgrid-docker" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/local-smtp-relay-sendgrid-docker" />
<lastmod>2026-03-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-25-jvm-performance-improvements</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-25-jvm-performance-improvements" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-25-jvm-performance-improvements" />
<lastmod>2026-03-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-25-key-language-changes</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-25-key-language-changes" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-25-key-language-changes" />
<lastmod>2026-03-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-25-whats-new-overview</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-25-whats-new-overview" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-25-whats-new-overview" />
<lastmod>2026-03-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/express-mongodb-mongoose-integration</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/express-mongodb-mongoose-integration" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/express-mongodb-mongoose-integration" />
<lastmod>2026-03-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/dockerfile-best-practices-multi-stage</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/dockerfile-best-practices-multi-stage" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/dockerfile-best-practices-multi-stage" />
<lastmod>2026-03-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/docker-phase-3-kubernetes-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/docker-phase-3-kubernetes-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/docker-phase-3-kubernetes-fundamentals" />
<lastmod>2026-03-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-testing</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-testing" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-testing" />
<lastmod>2026-03-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-security-hardening</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-security-hardening" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-security-hardening" />
<lastmod>2026-03-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-deployment</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-deployment" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-deployment" />
<lastmod>2026-03-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-analytics</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-analytics" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-analytics" />
<lastmod>2026-03-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-course-catalog</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-course-catalog" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-course-catalog" />
<lastmod>2026-03-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-stripe-integration</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-stripe-integration" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-stripe-integration" />
<lastmod>2026-03-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-video-player</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-video-player" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-video-player" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-secure-streaming</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-secure-streaming" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-secure-streaming" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-video-transcoding</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-video-transcoding" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-video-transcoding" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-video-upload</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-video-upload" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-video-upload" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-admin-dashboard</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-admin-dashboard" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-admin-dashboard" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-course-management</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-course-management" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-course-management" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-authentication</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-authentication" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-authentication" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-project-setup</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-project-setup" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-project-setup" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/video-platform-series-overview</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/video-platform-series-overview" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/video-platform-series-overview" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-seo-link-previews</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-seo-link-previews" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-seo-link-previews" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-admin-rbac</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-admin-rbac" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-admin-rbac" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-admin-moderation</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-admin-moderation" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-admin-moderation" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-admin-frontend</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-admin-frontend" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-admin-frontend" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-admin-analytics</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-admin-analytics" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-admin-analytics" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/senior-developer-design-docs</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/senior-developer-design-docs" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/senior-developer-design-docs" />
<lastmod>2026-03-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/web-dev-beginners-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/web-dev-beginners-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/web-dev-beginners-roadmap" />
<lastmod>2026-03-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-testing</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-testing" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-testing" />
<lastmod>2026-03-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-short-code-generation</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-short-code-generation" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-short-code-generation" />
<lastmod>2026-03-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-redis-caching</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-redis-caching" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-redis-caching" />
<lastmod>2026-03-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-redirect-analytics</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-redirect-analytics" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-redirect-analytics" />
<lastmod>2026-03-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-frontend-react</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-frontend-react" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-frontend-react" />
<lastmod>2026-03-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-deployment</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-deployment" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-deployment" />
<lastmod>2026-03-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-database-design</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-database-design" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-database-design" />
<lastmod>2026-03-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-authentication</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-authentication" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-authentication" />
<lastmod>2026-03-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/database-internals-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/database-internals-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/database-internals-roadmap" />
<lastmod>2026-03-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/personal-blog-custom-domain-hostinger</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/personal-blog-custom-domain-hostinger" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/personal-blog-custom-domain-hostinger" />
<lastmod>2026-03-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-project-setup</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-project-setup" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-project-setup" />
<lastmod>2026-03-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/software-craftsmanship-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/software-craftsmanship-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/software-craftsmanship-roadmap" />
<lastmod>2026-03-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/url-shortener-series-overview</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/url-shortener-series-overview" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/url-shortener-series-overview" />
<lastmod>2026-03-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/cpp-memory-management-smart-pointers</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/cpp-memory-management-smart-pointers" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/cpp-memory-management-smart-pointers" />
<lastmod>2026-03-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/distributed-systems-durability-foundations</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/distributed-systems-durability-foundations" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/distributed-systems-durability-foundations" />
<lastmod>2026-03-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/advanced-sql-window-functions-ctes</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/advanced-sql-window-functions-ctes" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/advanced-sql-window-functions-ctes" />
<lastmod>2026-03-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/patterns-of-distributed-systems-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/patterns-of-distributed-systems-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/patterns-of-distributed-systems-roadmap" />
<lastmod>2026-03-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/docker-phase-2-compose-multi-container</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/docker-phase-2-compose-multi-container" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/docker-phase-2-compose-multi-container" />
<lastmod>2026-03-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/yii2-widgets-assets</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/yii2-widgets-assets" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/yii2-widgets-assets" />
<lastmod>2026-03-18T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/yii2-rest-api</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/yii2-rest-api" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/yii2-rest-api" />
<lastmod>2026-03-18T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/object-oriented-design-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/object-oriented-design-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/object-oriented-design-guide" />
<lastmod>2026-03-18T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/yii2-forms-validation</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/yii2-forms-validation" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/yii2-forms-validation" />
<lastmod>2026-03-18T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/junior-developer-crisis-ai-talent-pipeline</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/junior-developer-crisis-ai-talent-pipeline" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/junior-developer-crisis-ai-talent-pipeline" />
<lastmod>2026-03-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/yii2-phase-4-auth-rbac</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/yii2-phase-4-auth-rbac" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/yii2-phase-4-auth-rbac" />
<lastmod>2026-03-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/personal-blog-deploy-ubuntu-vps-hostinger</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/personal-blog-deploy-ubuntu-vps-hostinger" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/personal-blog-deploy-ubuntu-vps-hostinger" />
<lastmod>2026-03-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/unit-testing-best-practices</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/unit-testing-best-practices" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/unit-testing-best-practices" />
<lastmod>2026-03-16T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/iot-data-pipeline-ingestion-processing-storage</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/iot-data-pipeline-ingestion-processing-storage" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/iot-data-pipeline-ingestion-processing-storage" />
<lastmod>2026-03-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/personal-blog-docker-compose</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/personal-blog-docker-compose" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/personal-blog-docker-compose" />
<lastmod>2026-03-13T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/my-vng-fresher-program-best-learning-experience</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/my-vng-fresher-program-best-learning-experience" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/my-vng-fresher-program-best-learning-experience" />
<lastmod>2026-03-13T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/iot-device-management-ota-updates</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/iot-device-management-ota-updates" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/iot-device-management-ota-updates" />
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/galera-cluster-architecture</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/galera-cluster-architecture" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/galera-cluster-architecture" />
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/yii2-phase-3-active-record-database</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/yii2-phase-3-active-record-database" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/yii2-phase-3-active-record-database" />
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/yii2-phase-2-mvc-routing</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/yii2-phase-2-mvc-routing" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/yii2-phase-2-mvc-routing" />
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/mysql-ha-replication-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/mysql-ha-replication-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/mysql-ha-replication-fundamentals" />
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/yii2-phase-1-getting-started</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/yii2-phase-1-getting-started" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/yii2-phase-1-getting-started" />
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/mysql-ha-galera-percona-proxysql-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/mysql-ha-galera-percona-proxysql-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/mysql-ha-galera-percona-proxysql-roadmap" />
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/yii2-learning-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/yii2-learning-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/yii2-learning-roadmap" />
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-dependency-management</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-dependency-management" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-dependency-management" />
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/cpp-stack-heap-memory</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/cpp-stack-heap-memory" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/cpp-stack-heap-memory" />
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/cpp-pointers-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/cpp-pointers-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/cpp-pointers-complete-guide" />
<lastmod>2026-03-12T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-structured-logging</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-structured-logging" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-structured-logging" />
<lastmod>2026-03-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/api-gateway-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/api-gateway-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/api-gateway-complete-guide" />
<lastmod>2026-03-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-docker-kubernetes-deployment</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-docker-kubernetes-deployment" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-docker-kubernetes-deployment" />
<lastmod>2026-03-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/reverse-proxy-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/reverse-proxy-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/reverse-proxy-explained" />
<lastmod>2026-03-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-express-database</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-express-database" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-express-database" />
<lastmod>2026-03-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/cors-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/cors-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/cors-complete-guide" />
<lastmod>2026-03-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/pet-projects-fullstack-practice</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/pet-projects-fullstack-practice" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/pet-projects-fullstack-practice" />
<lastmod>2026-03-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/personal-blog-tags-search-pagination</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/personal-blog-tags-search-pagination" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/personal-blog-tags-search-pagination" />
<lastmod>2026-03-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/orm-guide-prisma-vs-typeorm-vs-drizzle</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/orm-guide-prisma-vs-typeorm-vs-drizzle" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/orm-guide-prisma-vs-typeorm-vs-drizzle" />
<lastmod>2026-03-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-api-versioning-hateoas</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-api-versioning-hateoas" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-api-versioning-hateoas" />
<lastmod>2026-03-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/react-native-how-it-works</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/react-native-how-it-works" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/react-native-how-it-works" />
<lastmod>2026-03-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/ionic-vs-react-native-vs-flutter</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/ionic-vs-react-native-vs-flutter" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/ionic-vs-react-native-vs-flutter" />
<lastmod>2026-03-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/ionic-capacitor-how-it-works</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/ionic-capacitor-how-it-works" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/ionic-capacitor-how-it-works" />
<lastmod>2026-03-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/flutter-how-it-works</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/flutter-how-it-works" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/flutter-how-it-works" />
<lastmod>2026-03-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/cross-platform-mobile-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/cross-platform-mobile-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/cross-platform-mobile-roadmap" />
<lastmod>2026-03-08T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/go-error-handling-patterns</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/go-error-handling-patterns" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/go-error-handling-patterns" />
<lastmod>2026-03-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/choosing-software-architecture-decision-framework</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/choosing-software-architecture-decision-framework" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/choosing-software-architecture-decision-framework" />
<lastmod>2026-03-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/enterprise-data-source-patterns</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/enterprise-data-source-patterns" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/enterprise-data-source-patterns" />
<lastmod>2026-03-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/personal-blog-postgresql-drizzle-orm</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/personal-blog-postgresql-drizzle-orm" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/personal-blog-postgresql-drizzle-orm" />
<lastmod>2026-03-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/go-phase-3-concurrency-advanced</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/go-phase-3-concurrency-advanced" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/go-phase-3-concurrency-advanced" />
<lastmod>2026-03-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/observer-command-state-patterns</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/observer-command-state-patterns" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/observer-command-state-patterns" />
<lastmod>2026-03-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/strategy-template-method-patterns</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/strategy-template-method-patterns" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/strategy-template-method-patterns" />
<lastmod>2026-03-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/enterprise-domain-logic-patterns</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/enterprise-domain-logic-patterns" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/enterprise-domain-logic-patterns" />
<lastmod>2026-03-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/serverless-faas-architecture-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/serverless-faas-architecture-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/serverless-faas-architecture-guide" />
<lastmod>2026-03-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/dynamic-programming-greedy-algorithms-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/dynamic-programming-greedy-algorithms-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/dynamic-programming-greedy-algorithms-guide" />
<lastmod>2026-03-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/heaps-priority-queues-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/heaps-priority-queues-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/heaps-priority-queues-guide" />
<lastmod>2026-03-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/enterprise-application-architecture-patterns-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/enterprise-application-architecture-patterns-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/enterprise-application-architecture-patterns-roadmap" />
<lastmod>2026-03-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/domain-driven-design-patterns</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/domain-driven-design-patterns" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/domain-driven-design-patterns" />
<lastmod>2026-03-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/graphs-algorithms-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/graphs-algorithms-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/graphs-algorithms-complete-guide" />
<lastmod>2026-03-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/go-phase-2-core-concepts</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/go-phase-2-core-concepts" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/go-phase-2-core-concepts" />
<lastmod>2026-03-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/decorator-proxy-patterns</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/decorator-proxy-patterns" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/decorator-proxy-patterns" />
<lastmod>2026-03-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/sorting-binary-search-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/sorting-binary-search-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/sorting-binary-search-complete-guide" />
<lastmod>2026-03-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/hexagonal-architecture-ports-adapters</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/hexagonal-architecture-ports-adapters" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/hexagonal-architecture-ports-adapters" />
<lastmod>2026-03-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/nestjs-core-concepts-dependency-injection</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/nestjs-core-concepts-dependency-injection" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/nestjs-core-concepts-dependency-injection" />
<lastmod>2026-03-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/angular-core-concepts</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/angular-core-concepts" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/angular-core-concepts" />
<lastmod>2026-03-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/event-driven-architecture-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/event-driven-architecture-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/event-driven-architecture-guide" />
<lastmod>2026-03-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/cqrs-event-sourcing-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/cqrs-event-sourcing-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/cqrs-event-sourcing-guide" />
<lastmod>2026-03-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/microservices-architecture-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/microservices-architecture-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/microservices-architecture-guide" />
<lastmod>2026-03-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/clean-architecture-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/clean-architecture-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/clean-architecture-guide" />
<lastmod>2026-03-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/mqtt-iot-messaging-protocol-deep-dive</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/mqtt-iot-messaging-protocol-deep-dive" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/mqtt-iot-messaging-protocol-deep-dive" />
<lastmod>2026-03-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/iot-edge-computing-fog-architecture</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/iot-edge-computing-fog-architecture" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/iot-edge-computing-fog-architecture" />
<lastmod>2026-03-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/dependency-injection-inversion-of-control-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/dependency-injection-inversion-of-control-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/dependency-injection-inversion-of-control-explained" />
<lastmod>2026-03-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/trees-binary-search-trees-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/trees-binary-search-trees-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/trees-binary-search-trees-guide" />
<lastmod>2026-03-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/express-routing-request-handling</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/express-routing-request-handling" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/express-routing-request-handling" />
<lastmod>2026-03-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-express-rest-api</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-express-rest-api" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-express-rest-api" />
<lastmod>2026-03-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-nodejs-backend-setup</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-nodejs-backend-setup" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-nodejs-backend-setup" />
<lastmod>2026-03-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/developer-growth-mindset-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/developer-growth-mindset-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/developer-growth-mindset-guide" />
<lastmod>2026-03-01T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/personal-blog-mdx-on-demand-rendering</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/personal-blog-mdx-on-demand-rendering" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/personal-blog-mdx-on-demand-rendering" />
<lastmod>2026-02-28T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/ufw-linux-vps-best-practices</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/ufw-linux-vps-best-practices" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/ufw-linux-vps-best-practices" />
<lastmod>2026-02-28T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/javascript-browser-vs-server</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/javascript-browser-vs-server" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/javascript-browser-vs-server" />
<lastmod>2026-02-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/frontend-to-backend-nodejs</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/frontend-to-backend-nodejs" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/frontend-to-backend-nodejs" />
<lastmod>2026-02-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/adapter-facade-patterns</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/adapter-facade-patterns" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/adapter-facade-patterns" />
<lastmod>2026-02-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/github-first-project-beginner-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/github-first-project-beginner-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/github-first-project-beginner-guide" />
<lastmod>2026-02-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/mvc-mvp-mvvm-patterns-compared</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/mvc-mvp-mvvm-patterns-compared" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/mvc-mvp-mvvm-patterns-compared" />
<lastmod>2026-02-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/it-student-job-ready-skills</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/it-student-job-ready-skills" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/it-student-job-ready-skills" />
<lastmod>2026-02-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/personal-blog-nextjs-shadcn-setup</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/personal-blog-nextjs-shadcn-setup" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/personal-blog-nextjs-shadcn-setup" />
<lastmod>2026-02-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/personal-blog-nextjs-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/personal-blog-nextjs-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/personal-blog-nextjs-roadmap" />
<lastmod>2026-02-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/vscode-remote-ssh-development</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/vscode-remote-ssh-development" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/vscode-remote-ssh-development" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/start-learning-programming-from-scratch</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/start-learning-programming-from-scratch" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/start-learning-programming-from-scratch" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/csharp-phase-1-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/csharp-phase-1-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/csharp-phase-1-fundamentals" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/csharp-learning-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/csharp-learning-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/csharp-learning-roadmap" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/cpp-phase-3-modern-features</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/cpp-phase-3-modern-features" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/cpp-phase-3-modern-features" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/networking-how-internet-works</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/networking-how-internet-works" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/networking-how-internet-works" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/aspnet-core-phase-1-getting-started</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/aspnet-core-phase-1-getting-started" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/aspnet-core-phase-1-getting-started" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/aspnet-core-learning-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/aspnet-core-learning-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/aspnet-core-learning-roadmap" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/nextjs-phase-3</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/nextjs-phase-3" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/nextjs-phase-3" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/bootstrap-vs-tailwind-vs-shadcn</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/bootstrap-vs-tailwind-vs-shadcn" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/bootstrap-vs-tailwind-vs-shadcn" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/bff-pattern-jwt-refresh-token-security</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/bff-pattern-jwt-refresh-token-security" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/bff-pattern-jwt-refresh-token-security" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/bff-pattern-backend-for-frontend</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/bff-pattern-backend-for-frontend" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/bff-pattern-backend-for-frontend" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/mdx-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/mdx-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/mdx-complete-guide" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/layered-n-tier-architecture-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/layered-n-tier-architecture-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/layered-n-tier-architecture-guide" />
<lastmod>2026-02-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/process-vs-thread</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/process-vs-thread" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/process-vs-thread" />
<lastmod>2026-02-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/web-development-is-more-than-frontend-and-backend</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/web-development-is-more-than-frontend-and-backend" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/web-development-is-more-than-frontend-and-backend" />
<lastmod>2026-02-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/junior-intern-learn-everything-you-can</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/junior-intern-learn-everything-you-can" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/junior-intern-learn-everything-you-can" />
<lastmod>2026-02-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/stacks-queues-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/stacks-queues-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/stacks-queues-complete-guide" />
<lastmod>2026-02-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/prototype-pattern-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/prototype-pattern-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/prototype-pattern-explained" />
<lastmod>2026-02-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/monolithic-architecture-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/monolithic-architecture-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/monolithic-architecture-guide" />
<lastmod>2026-02-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/redis-persistence-rdb-aof</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/redis-persistence-rdb-aof" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/redis-persistence-rdb-aof" />
<lastmod>2026-02-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/express-middleware-deep-dive</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/express-middleware-deep-dive" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/express-middleware-deep-dive" />
<lastmod>2026-02-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-graphql</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-graphql" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-graphql" />
<lastmod>2026-02-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/react-ecosystem</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/react-ecosystem" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/react-ecosystem" />
<lastmod>2026-02-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/redis-source-code-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/redis-source-code-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/redis-source-code-explained" />
<lastmod>2026-02-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/react-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/react-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/react-fundamentals" />
<lastmod>2026-02-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/react-nextjs-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/react-nextjs-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/react-nextjs-roadmap" />
<lastmod>2026-02-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/junior-new-tech-stack-approach</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/junior-new-tech-stack-approach" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/junior-new-tech-stack-approach" />
<lastmod>2026-02-22T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/networking-for-web-developers-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/networking-for-web-developers-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/networking-for-web-developers-roadmap" />
<lastmod>2026-02-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/sql-fundamentals-select-join-subqueries</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/sql-fundamentals-select-join-subqueries" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/sql-fundamentals-select-join-subqueries" />
<lastmod>2026-02-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/learn-by-doing-junior-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/learn-by-doing-junior-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/learn-by-doing-junior-guide" />
<lastmod>2026-02-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/sql-nosql-database-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/sql-nosql-database-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/sql-nosql-database-roadmap" />
<lastmod>2026-02-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/builder-pattern-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/builder-pattern-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/builder-pattern-explained" />
<lastmod>2026-02-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/ai-gatekeeping-panic-software-development</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/ai-gatekeeping-panic-software-development" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/ai-gatekeeping-panic-software-development" />
<lastmod>2026-02-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/getting-started-with-express-js</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/getting-started-with-express-js" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/getting-started-with-express-js" />
<lastmod>2026-02-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/software-architecture-patterns-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/software-architecture-patterns-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/software-architecture-patterns-roadmap" />
<lastmod>2026-02-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/iot-communication-protocols-mqtt-coap-amqp</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/iot-communication-protocols-mqtt-coap-amqp" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/iot-communication-protocols-mqtt-coap-amqp" />
<lastmod>2026-02-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-performance-optimization</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-performance-optimization" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-performance-optimization" />
<lastmod>2026-02-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/intern-survival-guide-senior-perspective</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/intern-survival-guide-senior-perspective" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/intern-survival-guide-senior-perspective" />
<lastmod>2026-02-17T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-testing-devops</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-testing-devops" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-testing-devops" />
<lastmod>2026-02-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-advanced-testing</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-advanced-testing" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-advanced-testing" />
<lastmod>2026-02-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/iot-fundamentals-architecture-protocols</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/iot-fundamentals-architecture-protocols" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/iot-fundamentals-architecture-protocols" />
<lastmod>2026-02-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/iot-patterns-strategies-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/iot-patterns-strategies-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/iot-patterns-strategies-roadmap" />
<lastmod>2026-02-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/stop-over-engineering-your-code</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/stop-over-engineering-your-code" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/stop-over-engineering-your-code" />
<lastmod>2026-02-14T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/factory-abstract-factory-patterns</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/factory-abstract-factory-patterns" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/factory-abstract-factory-patterns" />
<lastmod>2026-02-13T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-database-orm</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-database-orm" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-database-orm" />
<lastmod>2026-02-13T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/web-security-owasp-top-10</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/web-security-owasp-top-10" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/web-security-owasp-top-10" />
<lastmod>2026-02-13T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/web-security-phase-1-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/web-security-phase-1-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/web-security-phase-1-fundamentals" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/react-vite-hono-api-vercel</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/react-vite-hono-api-vercel" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/react-vite-hono-api-vercel" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/bun-hono-neon-upstash-vercel</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/bun-hono-neon-upstash-vercel" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/bun-hono-neon-upstash-vercel" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/deploy-bun-hono-api-vercel</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/deploy-bun-hono-api-vercel" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/deploy-bun-hono-api-vercel" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/web-security-learning-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/web-security-learning-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/web-security-learning-roadmap" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/load-balancing-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/load-balancing-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/load-balancing-explained" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/junior-developer-is-extinct</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/junior-developer-is-extinct" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/junior-developer-is-extinct" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/vercel-supabase-modern-dev-ecosystem</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/vercel-supabase-modern-dev-ecosystem" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/vercel-supabase-modern-dev-ecosystem" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-nodejs-api-development</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-nodejs-api-development" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-nodejs-api-development" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/bun-vs-nodejs-vs-deno</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/bun-vs-nodejs-vs-deno" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/bun-vs-nodejs-vs-deno" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/senior-developer-is-new-entry-level</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/senior-developer-is-new-entry-level" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/senior-developer-is-new-entry-level" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/is-learning-css-waste-of-time-2026</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/is-learning-css-waste-of-time-2026" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/is-learning-css-waste-of-time-2026" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/knowledge-collapse-ai-era</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/knowledge-collapse-ai-era" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/knowledge-collapse-ai-era" />
<lastmod>2026-02-11T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/singleton-pattern-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/singleton-pattern-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/singleton-pattern-explained" />
<lastmod>2026-02-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-oauth2-social-login</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-oauth2-social-login" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-oauth2-social-login" />
<lastmod>2026-02-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/solid-principles-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/solid-principles-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/solid-principles-explained" />
<lastmod>2026-02-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/linked-lists-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/linked-lists-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/linked-lists-complete-guide" />
<lastmod>2026-02-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/graphql-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/graphql-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/graphql-complete-guide" />
<lastmod>2026-02-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/docker-phase-1-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/docker-phase-1-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/docker-phase-1-fundamentals" />
<lastmod>2026-02-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/docker-kubernetes-learning-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/docker-kubernetes-learning-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/docker-kubernetes-learning-roadmap" />
<lastmod>2026-02-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/polymorphism-interfaces-oop</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/polymorphism-interfaces-oop" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/polymorphism-interfaces-oop" />
<lastmod>2026-02-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-react-best-practices</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-react-best-practices" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-react-best-practices" />
<lastmod>2026-02-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/cpp-phase-2-oop</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/cpp-phase-2-oop" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/cpp-phase-2-oop" />
<lastmod>2026-02-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-advanced-jpa-optimization</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-advanced-jpa-optimization" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-advanced-jpa-optimization" />
<lastmod>2026-02-09T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-openapi-swagger</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-openapi-swagger" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-openapi-swagger" />
<lastmod>2026-02-07T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/go-pointers-vs-cpp-pointers</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/go-pointers-vs-cpp-pointers" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/go-pointers-vs-cpp-pointers" />
<lastmod>2026-02-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/go-phase-1-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/go-phase-1-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/go-phase-1-fundamentals" />
<lastmod>2026-02-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/inheritance-composition-oop</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/inheritance-composition-oop" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/inheritance-composition-oop" />
<lastmod>2026-02-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/arrays-strings-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/arrays-strings-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/arrays-strings-complete-guide" />
<lastmod>2026-02-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/what-is-rest-api-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/what-is-rest-api-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/what-is-rest-api-complete-guide" />
<lastmod>2026-02-06T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/javascript-build-tools-bundlers-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/javascript-build-tools-bundlers-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/javascript-build-tools-bundlers-explained" />
<lastmod>2026-02-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/http-protocol-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/http-protocol-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/http-protocol-complete-guide" />
<lastmod>2026-02-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-advanced-types-deep-dive</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-advanced-types-deep-dive" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-advanced-types-deep-dive" />
<lastmod>2026-02-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/problem-solving-patterns-techniques</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/problem-solving-patterns-techniques" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/problem-solving-patterns-techniques" />
<lastmod>2026-02-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/encapsulation-information-hiding-oop</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/encapsulation-information-hiding-oop" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/encapsulation-information-hiding-oop" />
<lastmod>2026-02-05T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/big-o-notation-complexity-analysis</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/big-o-notation-complexity-analysis" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/big-o-notation-complexity-analysis" />
<lastmod>2026-02-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-rest-api-best-practices</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-rest-api-best-practices" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-rest-api-best-practices" />
<lastmod>2026-02-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/pulumi-phase-1-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/pulumi-phase-1-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/pulumi-phase-1-fundamentals" />
<lastmod>2026-02-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/pulumi-learning-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/pulumi-learning-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/pulumi-learning-roadmap" />
<lastmod>2026-02-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/data-structures-algorithms-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/data-structures-algorithms-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/data-structures-algorithms-roadmap" />
<lastmod>2026-02-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/classes-objects-abstraction-oop</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/classes-objects-abstraction-oop" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/classes-objects-abstraction-oop" />
<lastmod>2026-02-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/four-pillars-of-oop</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/four-pillars-of-oop" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/four-pillars-of-oop" />
<lastmod>2026-02-04T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/cpp-phase-1-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/cpp-phase-1-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/cpp-phase-1-fundamentals" />
<lastmod>2026-02-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/cpp-learning-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/cpp-learning-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/cpp-learning-roadmap" />
<lastmod>2026-02-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/version-managers-complete-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/version-managers-complete-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/version-managers-complete-guide" />
<lastmod>2026-02-03T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/go-channels-communication</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/go-channels-communication" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/go-channels-communication" />
<lastmod>2026-02-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/goroutines-vs-java-virtual-threads</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/goroutines-vs-java-virtual-threads" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/goroutines-vs-java-virtual-threads" />
<lastmod>2026-02-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/go-goroutines-concurrency-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/go-goroutines-concurrency-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/go-goroutines-concurrency-fundamentals" />
<lastmod>2026-02-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/go-learning-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/go-learning-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/go-learning-roadmap" />
<lastmod>2026-02-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/object-oriented-programming-design-patterns-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/object-oriented-programming-design-patterns-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/object-oriented-programming-design-patterns-roadmap" />
<lastmod>2026-02-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-rest-api-advanced-patterns</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-rest-api-advanced-patterns" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-rest-api-advanced-patterns" />
<lastmod>2026-02-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-phase-4-fullstack-integration</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-phase-4-fullstack-integration" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-phase-4-fullstack-integration" />
<lastmod>2026-02-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-phase-3-backend-development</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-phase-3-backend-development" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-phase-3-backend-development" />
<lastmod>2026-02-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/database-schema-design-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/database-schema-design-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/database-schema-design-guide" />
<lastmod>2026-02-02T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/relational-database-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/relational-database-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/relational-database-fundamentals" />
<lastmod>2026-01-31T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/server-client-architecture-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/server-client-architecture-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/server-client-architecture-explained" />
<lastmod>2026-01-30T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-fullstack-monorepo</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-fullstack-monorepo" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-fullstack-monorepo" />
<lastmod>2026-01-30T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-async-processing</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-async-processing" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-async-processing" />
<lastmod>2026-01-29T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-phase-2-frontend-development</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-phase-2-frontend-development" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-phase-2-frontend-development" />
<lastmod>2026-01-29T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/learning-redis-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/learning-redis-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/learning-redis-fundamentals" />
<lastmod>2026-01-28T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-caching-redis</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-caching-redis" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-caching-redis" />
<lastmod>2026-01-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/fresher-interview-preparation-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/fresher-interview-preparation-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/fresher-interview-preparation-guide" />
<lastmod>2026-01-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/the-future-of-web-development-in-ai-era</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/the-future-of-web-development-in-ai-era" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/the-future-of-web-development-in-ai-era" />
<lastmod>2026-01-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-learning-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-learning-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-learning-roadmap" />
<lastmod>2026-01-27T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/python-type-hints-typing</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/python-type-hints-typing" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/python-type-hints-typing" />
<lastmod>2026-01-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/python-testing-pytest</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/python-testing-pytest" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/python-testing-pytest" />
<lastmod>2026-01-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/python-phase-3-stdlib-tools</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/python-phase-3-stdlib-tools" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/python-phase-3-stdlib-tools" />
<lastmod>2026-01-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/python-phase-2-oop-advanced</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/python-phase-2-oop-advanced" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/python-phase-2-oop-advanced" />
<lastmod>2026-01-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/python-phase-1-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/python-phase-1-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/python-phase-1-fundamentals" />
<lastmod>2026-01-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/python-package-management-poetry</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/python-package-management-poetry" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/python-package-management-poetry" />
<lastmod>2026-01-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/python-decorators</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/python-decorators" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/python-decorators" />
<lastmod>2026-01-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/python-async-programming</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/python-async-programming" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/python-async-programming" />
<lastmod>2026-01-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/fastapi-learning-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/fastapi-learning-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/fastapi-learning-roadmap" />
<lastmod>2026-01-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/python-learning-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/python-learning-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/python-learning-roadmap" />
<lastmod>2026-01-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-phase-1-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-phase-1-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-phase-1-fundamentals" />
<lastmod>2026-01-26T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-full-stack-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-full-stack-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-full-stack-roadmap" />
<lastmod>2026-01-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-streams-functional-programming</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-streams-functional-programming" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-streams-functional-programming" />
<lastmod>2026-01-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-modules-build-tools</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-modules-build-tools" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-modules-build-tools" />
<lastmod>2026-01-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-intern-interview-preparation</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-intern-interview-preparation" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-intern-interview-preparation" />
<lastmod>2026-01-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-generics-explained</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-generics-explained" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-generics-explained" />
<lastmod>2026-01-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-exception-handling-best-practices</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-exception-handling-best-practices" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-exception-handling-best-practices" />
<lastmod>2026-01-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-collections-deep-dive</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-collections-deep-dive" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-collections-deep-dive" />
<lastmod>2026-01-25T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-testing-guide</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-testing-guide" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-testing-guide" />
<lastmod>2026-01-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-security-authentication</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-security-authentication" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-security-authentication" />
<lastmod>2026-01-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/spring-boot-database-integration</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/spring-boot-database-integration" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/spring-boot-database-integration" />
<lastmod>2026-01-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-phase-3-core-apis</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-phase-3-core-apis" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-phase-3-core-apis" />
<lastmod>2026-01-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-phase-2-oop</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-phase-2-oop" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-phase-2-oop" />
<lastmod>2026-01-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-phase-1-fundamentals</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-phase-1-fundamentals" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-phase-1-fundamentals" />
<lastmod>2026-01-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/java-learning-roadmap</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/java-learning-roadmap" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/java-learning-roadmap" />
<lastmod>2026-01-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/getting-started-with-spring-boot</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/getting-started-with-spring-boot" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/getting-started-with-spring-boot" />
<lastmod>2026-01-24T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/working-with-databases-in-fastapi</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/working-with-databases-in-fastapi" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/working-with-databases-in-fastapi" />
<lastmod>2026-01-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/understanding-openapi-with-fastapi</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/understanding-openapi-with-fastapi" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/understanding-openapi-with-fastapi" />
<lastmod>2026-01-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/mastering-pydantic-in-fastapi</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/mastering-pydantic-in-fastapi" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/mastering-pydantic-in-fastapi" />
<lastmod>2026-01-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/managing-fastapi-projects-with-poetry-toml</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/managing-fastapi-projects-with-poetry-toml" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/managing-fastapi-projects-with-poetry-toml" />
<lastmod>2026-01-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/learning-fastapi-getting-started</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/learning-fastapi-getting-started" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/learning-fastapi-getting-started" />
<lastmod>2026-01-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/dependency-injection-in-fastapi</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/dependency-injection-in-fastapi" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/dependency-injection-in-fastapi" />
<lastmod>2026-01-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/authorization-in-fastapi-rbac-permissions</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/authorization-in-fastapi-rbac-permissions" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/authorization-in-fastapi-rbac-permissions" />
<lastmod>2026-01-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/authentication-in-fastapi-jwt-oauth2</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/authentication-in-fastapi-jwt-oauth2" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/authentication-in-fastapi-jwt-oauth2" />
<lastmod>2026-01-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/asynchronous-programming-in-fastapi</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/asynchronous-programming-in-fastapi" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/asynchronous-programming-in-fastapi" />
<lastmod>2026-01-23T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/migrating-pulumi-state-azure-blob-storage</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/migrating-pulumi-state-azure-blob-storage" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/migrating-pulumi-state-azure-blob-storage" />
<lastmod>2026-01-21T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/why-full-stack-developers-thrive</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/why-full-stack-developers-thrive" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/why-full-stack-developers-thrive" />
<lastmod>2026-01-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/scaling-long-running-autonomous-coding</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/scaling-long-running-autonomous-coding" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/scaling-long-running-autonomous-coding" />
<lastmod>2026-01-20T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/learning-linux-why-it-matters</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/learning-linux-why-it-matters" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/learning-linux-why-it-matters" />
<lastmod>2026-01-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/learning-go-never-use-array</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/learning-go-never-use-array" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/learning-go-never-use-array" />
<lastmod>2026-01-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/learning-go-method-pointer-receiver-vs-value-receiver</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/learning-go-method-pointer-receiver-vs-value-receiver" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/learning-go-method-pointer-receiver-vs-value-receiver" />
<lastmod>2026-01-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/learning-go-favor-composition-over-inheritance</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/learning-go-favor-composition-over-inheritance" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/learning-go-favor-composition-over-inheritance" />
<lastmod>2026-01-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/learning-docker-why-it-matters</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/learning-docker-why-it-matters" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/learning-docker-why-it-matters" />
<lastmod>2026-01-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/duck-typing-vs-explicit-inerface-vs-implicit-interface</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/duck-typing-vs-explicit-inerface-vs-implicit-interface" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/duck-typing-vs-explicit-inerface-vs-implicit-interface" />
<lastmod>2026-01-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/template-for-small-project-fullstack-typescript</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/template-for-small-project-fullstack-typescript" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/template-for-small-project-fullstack-typescript" />
<lastmod>2025-01-19T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/getting-started-with-nextjs</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/getting-started-with-nextjs" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/getting-started-with-nextjs" />
<lastmod>2024-01-15T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://chanhle.dev/en/blog/typescript-best-practices</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://chanhle.dev/en/blog/typescript-best-practices" />
<xhtml:link rel="alternate" hreflang="vi" href="https://chanhle.dev/vi/blog/typescript-best-practices" />
<lastmod>2024-01-10T00:00:00.000Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
