<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>VnnTools Blog</title>
    <link>https://vnntools.com</link>
    <description>VnnTools Blog RSS Feed</description>
    <language>en</language>
    <lastBuildDate>Tue, 22 Sep 2026 03:34:40 GMT</lastBuildDate>
    <atom:link href="https://vnntools.com/rss.xml" rel="self" type="application/rss+xml"/>
  <item>
    <title>[Advanced Spring Boot] Your Own Authorization Server: Spring Authorization Server and Keycloak</title>
    <link>https://vnntools.com/en/blog/spring-authorization-server-and-keycloak/</link>
    <description>Building an OAuth2 and OpenID Connect authorization server with Spring Authorization Server, now a module of Spring Security, on Spring Boot 4.1.1: the starter Initializr picks and the deprecated one, a server from properties alone, both discovery documents and the endpoints they advertise, the two filter chains Boot registers and what changes when you declare your own, client_credentials and authorization_code with PKCE hop by hop, the real error bodies, the RSA key that changes on every restart, a persistent key and key rotation with a JWK selector, the JWKS cache of the resource server, JDBC clients, authorizations and consent on PostgreSQL with the schema scripts from the jar, a roles claim from OAuth2TokenCustomizer and the Jackson allowlist trap, opaque tokens with introspection measured against JWT validation, and a measured comparison with Keycloak.</description>
    <pubDate>Tue, 24 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-authorization-server-and-keycloak/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Tự dựng authorization server: Spring Authorization Server và Keycloak</title>
    <link>https://vnntools.com/vi/blog/spring-authorization-server-and-keycloak/</link>
    <description>Dựng một authorization server OAuth2 và OpenID Connect bằng Spring Authorization Server, nay là một module của Spring Security, trên Spring Boot 4.1.1: starter mà Initializr chọn và starter đã deprecated, một server chỉ từ property, hai discovery document và các endpoint chúng công bố, hai filter chain Boot đăng ký và những gì thay đổi khi bạn tự khai báo, client_credentials và authorization_code với PKCE từng bước, body lỗi thật, RSA key đổi sau mỗi lần restart, key cố định và key rotation với JWK selector, JWKS cache của resource server, client, authorization và consent lưu bằng JDBC trên PostgreSQL với schema script lấy từ jar, claim roles từ OAuth2TokenCustomizer và cái bẫy allowlist của Jackson, opaque token với introspection được đo so với việc validate JWT, và phép so sánh có đo đạc với Keycloak.</description>
    <pubDate>Tue, 24 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-authorization-server-and-keycloak/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] OAuth2 and OpenID Connect in Spring Boot: OAuth2 Login and a JWT Resource Server</title>
    <link>https://vnntools.com/en/blog/oauth2-login-and-resource-server-with-spring-security/</link>
    <description>OAuth2 and OpenID Connect with Spring Security on Spring Boot 4.1.1 and Keycloak: a realm imported from JSON, issuer-uri discovery and the startup failure when Keycloak is down, the authorization code flow with PKCE (S256, on by default for a confidential client) hop by hop, a stolen code rejected without its verifier, the ID token and the access token decoded side by side, the OidcUser with its OIDC_USER and SCOPE_ authorities, user-name-attribute, Keycloak realm roles mapped to ROLE_ with a GrantedAuthoritiesMapper, RP-initiated logout with OidcClientInitiatedLogoutSuccessHandler, Google and GitHub through CommonOAuth2Provider, a JWT resource server with issuer-uri and lazily fetched keys, the WWW-Authenticate headers for foreign-realm, wrong-issuer, tampered, wrong-audience and expired tokens, realm_access.roles mapped with authorities-claim-expressions, token relay with OAuth2ClientHttpRequestInterceptor and a client-credentials token reused across calls.</description>
    <pubDate>Mon, 23 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/oauth2-login-and-resource-server-with-spring-security/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] OAuth2 và OpenID Connect trong Spring Boot: OAuth2 Login và resource server với JWT</title>
    <link>https://vnntools.com/vi/blog/oauth2-login-and-resource-server-with-spring-security/</link>
    <description>OAuth2 và OpenID Connect với Spring Security trên Spring Boot 4.1.1 và Keycloak: realm import từ file JSON, discovery qua issuer-uri và lỗi khởi động khi Keycloak tắt, authorization code flow với PKCE (S256, bật sẵn cho confidential client) từng bước một, authorization code bị đánh cắp bị từ chối vì thiếu verifier, ID token và access token giải mã cạnh nhau, OidcUser với các authority OIDC_USER và SCOPE_, user-name-attribute, realm role của Keycloak map thành ROLE_ bằng GrantedAuthoritiesMapper, RP-initiated logout với OidcClientInitiatedLogoutSuccessHandler, Google và GitHub qua CommonOAuth2Provider, resource server JWT với issuer-uri và key được tải lười, header WWW-Authenticate cho token từ realm khác, sai issuer, bị sửa chữ ký, sai audience và hết hạn, realm_access.roles map bằng authorities-claim-expressions, token relay với OAuth2ClientHttpRequestInterceptor và token client credentials dùng lại qua nhiều lần gọi.</description>
    <pubDate>Mon, 23 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/oauth2-login-and-resource-server-with-spring-security/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Multi-Tenancy and Soft Delete with Spring Boot and Hibernate</title>
    <link>https://vnntools.com/en/blog/multi-tenancy-and-soft-delete-in-spring-boot-with-hibernate/</link>
    <description>Multi-tenancy and soft delete on Spring Boot 4.1.1 with Hibernate and PostgreSQL: an X-Tenant-Id filter with a ThreadLocal that leaks on a reused Tomcat thread and is lost on @Async, a discriminator column with @TenantId and CurrentTenantIdentifierResolver (the tenant predicate on find, JPQL, derived queries, Specifications and bulk updates, none on native SQL or JdbcClient), schema per tenant with a MultiTenantConnectionProvider, the setSchema versus SET search_path connection-reuse trap on HikariCP, Flyway per tenant schema and Hibernate&apos;s TenantSchemaMapper, database per tenant and 100 connections for ten tenants, PostgreSQL row-level security with set_config and FORCE, @SoftDelete strategies versus @SQLDelete and @SQLRestriction, the LAZY to-one error, a partial unique index for soft-deleted SKUs, and restoring deleted rows.</description>
    <pubDate>Sun, 22 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/multi-tenancy-and-soft-delete-in-spring-boot-with-hibernate/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Multi-tenancy và soft delete với Spring Boot và Hibernate</title>
    <link>https://vnntools.com/vi/blog/multi-tenancy-and-soft-delete-in-spring-boot-with-hibernate/</link>
    <description>Multi-tenancy và soft delete trên Spring Boot 4.1.1 với Hibernate và PostgreSQL: filter đọc X-Tenant-Id với ThreadLocal bị rò rỉ trên thread Tomcat được tái sử dụng và bị mất trên @Async, discriminator column với @TenantId và CurrentTenantIdentifierResolver (predicate tenant trên find, JPQL, derived query, Specification và bulk update, không có trên native SQL hay JdbcClient), schema per tenant với MultiTenantConnectionProvider, bẫy tái sử dụng connection giữa setSchema và SET search_path trên HikariCP, Flyway cho từng tenant schema và TenantSchemaMapper của Hibernate, database per tenant với 100 connection cho mười tenant, row-level security của PostgreSQL với set_config và FORCE, các strategy của @SoftDelete so với @SQLDelete và @SQLRestriction, lỗi to-one LAZY, partial unique index cho SKU đã soft delete, và khôi phục các dòng đã xóa.</description>
    <pubDate>Sun, 22 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/multi-tenancy-and-soft-delete-in-spring-boot-with-hibernate/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] NoSQL with Spring Data: MongoDB and Redis</title>
    <link>https://vnntools.com/en/blog/spring-data-mongodb-and-redis-nosql-in-spring-boot/</link>
    <description>Spring Data MongoDB and Spring Data Redis on Spring Boot 4.1.1: @Document, String vs ObjectId ids, the _class field, embedded vs @DocumentReference with the queries each sends, MongoRepository and MongoTemplate with the logged commands, $push/$inc vs load-modify-save under 50 threads, @Version, whether Boot creates @Indexed indexes, COLLSCAN vs IXSCAN on 300,000 documents, an aggregation pipeline, transactions on a replica set, a renamed field, RedisTemplate serialization, INCR, sorted sets, hashes, TTL, @RedisHash keys and phantom keys, pipelining and Lettuce.</description>
    <pubDate>Sat, 21 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-data-mongodb-and-redis-nosql-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] NoSQL với Spring Data: MongoDB và Redis</title>
    <link>https://vnntools.com/vi/blog/spring-data-mongodb-and-redis-nosql-in-spring-boot/</link>
    <description>Spring Data MongoDB và Spring Data Redis trên Spring Boot 4.1.1: @Document, id là String hay ObjectId, field _class, embedded hay @DocumentReference cùng các query mỗi cách gửi đi, MongoRepository và MongoTemplate kèm command đã log, $push/$inc so với load-modify-save dưới 50 thread, @Version, Boot có tạo index từ @Indexed không, COLLSCAN và IXSCAN trên 300.000 document, một aggregation pipeline, transaction trên replica set, một field bị đổi tên, serializer của RedisTemplate, INCR, sorted set, hash, TTL, key của @RedisHash và phantom key, pipelining và Lettuce.</description>
    <pubDate>Sat, 21 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-data-mongodb-and-redis-nosql-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Multiple Datasources in Spring Boot: Two Databases and Read/Write Replica Routing</title>
    <link>https://vnntools.com/en/blog/spring-boot-multiple-datasources-and-read-replica-routing/</link>
    <description>Multiple datasources in Spring Boot 4.1.1 with PostgreSQL: what Boot backs off from once you declare two DataSource beans, DataSourceProperties and the HikariCP prefix trap, two EntityManagerFactories with EntityManagerFactoryBuilder, @EnableJpaRepositories and @Transactional(transactionManager), a repository under the wrong transaction manager, Flyway for the second database, why a write to two databases is not atomic, a streaming replica in Docker, AbstractRoutingDataSource and the read-only flag bug, LazyConnectionDataSourceProxy and its built-in read-only DataSource, SQLSTATE 25006, replication lag and read-your-writes fixes, and one HikariCP pool per target.</description>
    <pubDate>Fri, 20 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-multiple-datasources-and-read-replica-routing/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Nhiều datasource trong Spring Boot: hai database và định tuyến read/write replica</title>
    <link>https://vnntools.com/vi/blog/spring-boot-multiple-datasources-and-read-replica-routing/</link>
    <description>Nhiều datasource trong Spring Boot 4.1.1 với PostgreSQL: Boot lùi lại những gì khi có hai bean DataSource, DataSourceProperties và bẫy prefix của HikariCP, hai EntityManagerFactory dựng bằng EntityManagerFactoryBuilder, @EnableJpaRepositories và @Transactional(transactionManager), repository chạy dưới transaction manager sai, Flyway cho database thứ hai, vì sao ghi vào hai database không atomic, streaming replica trong Docker, AbstractRoutingDataSource và bug cờ read-only, LazyConnectionDataSourceProxy cùng read-only DataSource có sẵn, SQLSTATE 25006, replication lag và các cách giữ read-your-writes, mỗi đích một connection pool HikariCP.</description>
    <pubDate>Fri, 20 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-multiple-datasources-and-read-replica-routing/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Caching in Spring Boot: the Cache Abstraction, Caffeine, Redis and Invalidation</title>
    <link>https://vnntools.com/en/blog/spring-boot-caching-with-caffeine-and-redis/</link>
    <description>Spring Boot 4.1.1 caching on a product lookup with PostgreSQL and Redis: why @EnableCaching is still required, @Cacheable, @CachePut, @CacheEvict with allEntries and @Caching, SimpleKey and SpEL keys, condition, unless and cached Optional nulls, the LazyInitializationException a cached entity causes, Caffeine eviction and the cache.gets metrics, why Boot picks Redis over Caffeine, JDK serialization versus GenericJacksonJsonRedisSerializer for Jackson 3 and the type validator that rejects BigDecimal, the two serializer configurations that silently drop settings, latency with no cache, Caffeine and Redis, a cache stampede that sync = true does not stop on Redis, the evict-before-commit race and transactionAware(), stale reads across two instances, and what a stopped or hung Redis does to requests with and without a CacheErrorHandler.</description>
    <pubDate>Thu, 19 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-caching-with-caffeine-and-redis/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Caching trong Spring Boot: cache abstraction, Caffeine, Redis và chiến lược invalidation</title>
    <link>https://vnntools.com/vi/blog/spring-boot-caching-with-caffeine-and-redis/</link>
    <description>Caching trong Spring Boot 4.1.1 trên một lookup sản phẩm với PostgreSQL và Redis: vì sao vẫn cần @EnableCaching, @Cacheable, @CachePut, @CacheEvict với allEntries và @Caching, key SimpleKey và SpEL, condition, unless và null từ Optional được cache, LazyInitializationException do cache entity, eviction của Caffeine và metric cache.gets, vì sao Boot chọn Redis thay vì Caffeine, JDK serialization so với GenericJacksonJsonRedisSerializer cho Jackson 3 và type validator từ chối BigDecimal, hai cách cấu hình serializer âm thầm làm mất setting, latency khi không cache, với Caffeine và với Redis, cache stampede mà sync = true không chặn được trên Redis, race evict-trước-commit và transactionAware(), đọc dữ liệu cũ giữa hai instance, và request ra sao khi Redis dừng hoặc treo, có và không có CacheErrorHandler.</description>
    <pubDate>Thu, 19 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-caching-with-caffeine-and-redis/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Dynamic Queries with Spring Data JPA: Specifications, the Criteria API and Querydsl</title>
    <link>https://vnntools.com/en/blog/dynamic-queries-with-spring-data-jpa-specifications-criteria-api-and-querydsl/</link>
    <description>Dynamic queries for a product search with optional filters on Spring Boot 4.1.1 and PostgreSQL: why derived queries and the (:x is null or …) @Query trick break down, with the lower(bytea) error and the generic plan that read 200,403 buffers, composable Specifications with the Spring Data 4 API (allOf, unrestricted, PredicateSpecification, UpdateSpecification, where(null) now throwing), LIKE escaping, the to-many join that inflates counts and shrinks pages, distinct versus an exists subquery, the Criteria API in a custom repository fragment with the hibernate-processor metamodel and a count per category, Querydsl with the jakarta classifier, QuerydslPredicateExecutor and JPAQueryFactory, jOOQ code generation, sort whitelisting, a 400 ProblemDetail for minPrice greater than maxPrice, and Query by Example.</description>
    <pubDate>Wed, 18 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/dynamic-queries-with-spring-data-jpa-specifications-criteria-api-and-querydsl/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Truy vấn động với Spring Data JPA: Specification, Criteria API và Querydsl</title>
    <link>https://vnntools.com/vi/blog/dynamic-queries-with-spring-data-jpa-specifications-criteria-api-and-querydsl/</link>
    <description>Dynamic query cho một search sản phẩm có filter tùy chọn trên Spring Boot 4.1.1 và PostgreSQL: vì sao derived query và mẹo @Query (:x is null or …) không đủ, kèm lỗi lower(bytea) và generic plan đọc 200.403 buffer, Specification kết hợp được với API của Spring Data 4 (allOf, unrestricted, PredicateSpecification, UpdateSpecification, where(null) giờ throw), escape LIKE, join to-many làm count phình ra và page co lại, distinct so với subquery exists, Criteria API trong repository fragment tự viết với metamodel của hibernate-processor và đếm theo category, Querydsl với jakarta classifier, QuerydslPredicateExecutor và JPAQueryFactory, code generation của jOOQ, whitelist cho sort, 400 ProblemDetail khi minPrice lớn hơn maxPrice, và Query by Example.</description>
    <pubDate>Wed, 18 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/dynamic-queries-with-spring-data-jpa-specifications-criteria-api-and-querydsl/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Locking and Concurrency in Spring Boot: Optimistic @Version, Pessimistic Locks and Race Conditions</title>
    <link>https://vnntools.com/en/blog/jpa-optimistic-and-pessimistic-locking-in-spring-boot/</link>
    <description>Locking and concurrency in Spring Boot 4.1.1 on PostgreSQL: the lost update when two users edit one product, @Version and the update … where version=? it sends, the exception chain that reaches your code, saveAll, dirty checking and the bulk @Modifying update that bypasses the version, the version over HTTP answered with a 409 ProblemDetail, retrying a conflict around the whole transaction and the placement that never retries, PESSIMISTIC_WRITE vs PESSIMISTIC_READ, NOWAIT and jakarta.persistence.lock.timeout as set local lock_timeout, SKIP LOCKED for a work queue, a real deadlock (40P01) and its fix, the atomic conditional update, a CHECK constraint, and a table for choosing between them.</description>
    <pubDate>Tue, 17 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/jpa-optimistic-and-pessimistic-locking-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Locking và concurrency trong Spring Boot: optimistic @Version, pessimistic lock và race condition</title>
    <link>https://vnntools.com/vi/blog/jpa-optimistic-and-pessimistic-locking-in-spring-boot/</link>
    <description>Locking và concurrency trong Spring Boot 4.1.1 trên PostgreSQL: lost update khi hai người cùng sửa một product, @Version và câu update … where version=? nó gửi đi, chuỗi exception tới được code của bạn, saveAll, dirty checking và bulk update @Modifying bỏ qua version, version qua HTTP trả về 409 ProblemDetail, retry một conflict bao quanh cả transaction và cách đặt retry khiến nó không bao giờ retry, PESSIMISTIC_WRITE so với PESSIMISTIC_READ, NOWAIT và jakarta.persistence.lock.timeout thành set local lock_timeout, SKIP LOCKED cho work queue, một deadlock thật (40P01) và cách sửa, atomic update có điều kiện, CHECK constraint, và một bảng để chọn giữa chúng.</description>
    <pubDate>Tue, 17 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/jpa-optimistic-and-pessimistic-locking-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Spring Transactions in Depth: Propagation, Isolation Levels and Rollback Rules</title>
    <link>https://vnntools.com/en/blog/spring-transaction-propagation-and-isolation-levels/</link>
    <description>Spring transaction propagation, isolation and rollback rules on Spring Boot 4.1.1 with PostgreSQL: all seven propagations with JpaTransactionManager logs and backend pids, the REQUIRES_NEW connection pool deadlock with HikariCP timings, why NESTED fails with JpaTransactionManager and works with JdbcTransactionManager savepoints, non-repeatable reads, lost updates and write skew under each isolation level, SQLSTATE 40001 as CannotAcquireLockException, a correct retry around the transaction, readOnly at the JDBC, PostgreSQL and Hibernate layers, validateExistingTransaction, rollbackOn ALL_EXCEPTIONS and what really enforces @Transactional(timeout).</description>
    <pubDate>Mon, 16 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-transaction-propagation-and-isolation-levels/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Transaction chuyên sâu trong Spring: propagation, isolation level và rollback rules</title>
    <link>https://vnntools.com/vi/blog/spring-transaction-propagation-and-isolation-levels/</link>
    <description>Propagation, isolation level và rollback rules của Spring trên Spring Boot 4.1.1 với PostgreSQL: đủ bảy propagation với log JpaTransactionManager và backend pid, deadlock connection pool do REQUIRES_NEW kèm số đo HikariCP, vì sao NESTED lỗi với JpaTransactionManager nhưng chạy bằng savepoint với JdbcTransactionManager, non-repeatable read, lost update và write skew ở từng isolation level, SQLSTATE 40001 thành CannotAcquireLockException, retry đúng chỗ quanh transaction, readOnly ở tầng JDBC, PostgreSQL và Hibernate, validateExistingTransaction, rollbackOn ALL_EXCEPTIONS và thứ thực sự áp dụng @Transactional(timeout).</description>
    <pubDate>Mon, 16 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-transaction-propagation-and-isolation-levels/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] JPA Performance: N+1 Detection, Batch Fetching, Projections and Batch Inserts</title>
    <link>https://vnntools.com/en/blog/jpa-performance-n-plus-one-batch-fetching-projections-and-batch-inserts/</link>
    <description>JPA performance on Spring Boot 4.1.1 and PostgreSQL: counting SQL per request with a StatementInspector and the Hibernate 7 session metrics log, an integration test that fails on N+1, @BatchSize and default_batch_fetch_size with the = any(?) array parameter PostgreSQL receives, FetchMode.SUBSELECT loading 801 rows for a page of 20, the two-query pattern for paging parents with children, closed, open, record, dynamic and native projections and what they leave in the persistence context, and batch inserts where IDENTITY sends 10,000 statements and a pooled SEQUENCE with batch_size, order_inserts and reWriteBatchedInserts sends 600.</description>
    <pubDate>Sun, 15 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/jpa-performance-n-plus-one-batch-fetching-projections-and-batch-inserts/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Tối ưu JPA: phát hiện N+1, batch fetching, projection và batch insert</title>
    <link>https://vnntools.com/vi/blog/jpa-performance-n-plus-one-batch-fetching-projections-and-batch-inserts/</link>
    <description>Tối ưu hiệu năng JPA trên Spring Boot 4.1.1 và PostgreSQL: đếm SQL cho mỗi request bằng StatementInspector và log session metrics của Hibernate 7, integration test fail khi có N+1, @BatchSize và default_batch_fetch_size với array parameter = any(?) mà PostgreSQL nhận, FetchMode.SUBSELECT đọc 801 row cho một trang 20 order, mẫu hai query để phân trang parent cùng children, projection dạng closed, open, record, dynamic và native cùng những gì chúng để lại trong persistence context, và batch insert khi IDENTITY gửi 10,000 statement còn SEQUENCE pooled cùng batch_size, order_inserts và reWriteBatchedInserts chỉ gửi 600.</description>
    <pubDate>Sun, 15 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/jpa-performance-n-plus-one-batch-fetching-projections-and-batch-inserts/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Spring Events: ApplicationEventPublisher, @EventListener and @TransactionalEventListener</title>
    <link>https://vnntools.com/en/blog/spring-events-applicationeventpublisher-and-transactional-listeners/</link>
    <description>Spring events on Spring Boot 4.1.1: publishing a record through ApplicationEventPublisher and the PayloadApplicationEvent it is wrapped in, proof that @EventListener runs on the caller thread inside the caller transaction, @Order and SpEL condition, a listener that returns another event, why a listener for a generic OrderEvent&lt;Product&gt; never fires without ResolvableTypeProvider, what a throwing listener does synchronously and under @Async, all four @TransactionalEventListener phases with the runs that show which fired, fallbackExecution, the AFTER_COMMIT write that silently loses a row and the REQUIRES_NEW that saves it, @Async listeners against an async applicationEventMulticaster, and where in-process events stop being a reliability mechanism.</description>
    <pubDate>Sat, 14 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-events-applicationeventpublisher-and-transactional-listeners/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Spring Events: ApplicationEventPublisher, @EventListener và @TransactionalEventListener</title>
    <link>https://vnntools.com/vi/blog/spring-events-applicationeventpublisher-and-transactional-listeners/</link>
    <description>Spring event trên Spring Boot 4.1.1: publish một record qua ApplicationEventPublisher và lớp bọc PayloadApplicationEvent, bằng chứng @EventListener chạy trên thread và transaction của caller, @Order cùng condition SpEL, listener trả về event khác, vì sao listener cho generic OrderEvent&lt;Product&gt; không bao giờ nhận được gì nếu thiếu ResolvableTypeProvider, listener throw exception khi sync và khi @Async, đủ bốn phase của @TransactionalEventListener với log của từng lần chạy, fallbackExecution, cái bẫy ghi database trong AFTER_COMMIT làm mất row và REQUIRES_NEW cứu nó, @Async so với applicationEventMulticaster async, và chỗ event in-process hết là một cơ chế đáng tin.</description>
    <pubDate>Sat, 14 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-events-applicationeventpublisher-and-transactional-listeners/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Spring AOP: JDK and CGLIB Proxies, Aspects and Self-Invocation</title>
    <link>https://vnntools.com/en/blog/spring-aop-proxies-aspects-and-self-invocation/</link>
    <description>Spring AOP on Spring Boot 4.1.1: spring-boot-starter-aop is gone from the BOM and spring-boot-starter-aspectj replaces it, JDK dynamic proxy against CGLIB subclass with the real class names, the ClassCastException a JDK proxy causes, the final class that throws AopConfigException, the final method that quietly NPEs because Objenesis skipped the constructor, the pointcut designators that matter, the measured order of all five advice kinds on both paths, @Order between aspects, the self-invocation trap underneath @Transactional and @Async with three fixes compared, the nanosecond cost of a proxied call, and Advised#getAdvisors for debugging.</description>
    <pubDate>Fri, 13 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-aop-proxies-aspects-and-self-invocation/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Spring AOP: proxy JDK và CGLIB, aspect và lỗi self-invocation</title>
    <link>https://vnntools.com/vi/blog/spring-aop-proxies-aspects-and-self-invocation/</link>
    <description>Spring AOP trên Spring Boot 4.1.1: spring-boot-starter-aop đã biến mất khỏi BOM và spring-boot-starter-aspectj thay thế nó, JDK dynamic proxy so với CGLIB subclass kèm tên class thật, ClassCastException mà JDK proxy gây ra, class final ném AopConfigException, method final âm thầm NPE vì Objenesis bỏ qua constructor, các pointcut designator đáng dùng, thứ tự đo được của cả năm loại advice trên hai nhánh, @Order giữa các aspect, lỗi self-invocation nằm dưới @Transactional và @Async cùng ba cách sửa được so sánh, chi phí nanosecond của một lời gọi qua proxy, và Advised#getAdvisors để debug.</description>
    <pubDate>Fri, 13 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-aop-proxies-aspects-and-self-invocation/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Extending the Spring Container: BeanFactoryPostProcessor, BeanPostProcessor and Aware</title>
    <link>https://vnntools.com/en/blog/spring-container-extension-points-beanpostprocessor-and-aware/</link>
    <description>The container extension points of Spring Boot 4.1.1, traced through one startup: a numbered run from EnvironmentPostProcessor to the runners, how each callback is registered in Boot 4 and why context.initializer.classes no longer works, BeanFactoryPostProcessor against BeanDefinitionRegistryPostProcessor, a BeanPostProcessor that returns a JDK dynamic proxy, the &quot;not eligible for getting processed by all BeanPostProcessors&quot; trap with the transaction it silently loses, the measured post-processor chain that shows @Order being ignored, the Aware interfaces worth knowing, and what an exception in an ApplicationRunner does to the exit code.</description>
    <pubDate>Thu, 12 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-container-extension-points-beanpostprocessor-and-aware/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Mở rộng container của Spring: BeanFactoryPostProcessor, BeanPostProcessor và Aware</title>
    <link>https://vnntools.com/vi/blog/spring-container-extension-points-beanpostprocessor-and-aware/</link>
    <description>Các extension point của container trong Spring Boot 4.1.1, trace qua một lần startup: bảng đánh số từ EnvironmentPostProcessor tới các runner, cách đăng ký từng callback trong Boot 4 và lý do context.initializer.classes không còn tác dụng, BeanFactoryPostProcessor so với BeanDefinitionRegistryPostProcessor, một BeanPostProcessor trả về JDK dynamic proxy, cái bẫy &quot;not eligible for getting processed by all BeanPostProcessors&quot; làm mất transaction trong im lặng, chain post-processor đo được cho thấy @Order bị bỏ qua, các interface Aware đáng biết, và exception trong ApplicationRunner ảnh hưởng thế nào tới exit code.</description>
    <pubDate>Thu, 12 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-container-extension-points-beanpostprocessor-and-aware/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Writing Your Own Auto-configuration and Starter</title>
    <link>https://vnntools.com/en/blog/writing-your-own-spring-boot-auto-configuration-and-starter/</link>
    <description>Build and ship a real Spring Boot 4.1.1 starter: the three Gradle projects and the x-spring-boot-starter naming rule, an @AutoConfiguration class with @ConditionalOnMissingBean and @ConditionalOnProperty, registration in AutoConfiguration.imports, ordering with before/after against a Boot auto-configuration, a validated @ConfigurationProperties record with generated spring-configuration-metadata.json, a custom SpringBootCondition with its ConditionOutcome message in the report, five ApplicationContextRunner tests including FilteredClassLoader, publishing to mavenLocal and consuming it, and a FailureAnalyzer for the misconfiguration.</description>
    <pubDate>Wed, 11 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/writing-your-own-spring-boot-auto-configuration-and-starter/</guid>
  </item>
  <item>
    <title>[Advanced Spring Boot] Tự viết auto-configuration và starter cho Spring Boot</title>
    <link>https://vnntools.com/vi/blog/writing-your-own-spring-boot-auto-configuration-and-starter/</link>
    <description>Tự xây và phát hành một starter Spring Boot 4.1.1 thật: ba Gradle project và quy tắc đặt tên x-spring-boot-starter, class @AutoConfiguration với @ConditionalOnMissingBean và @ConditionalOnProperty, đăng ký trong AutoConfiguration.imports, sắp thứ tự bằng before/after so với một auto-configuration của Boot, record @ConfigurationProperties có validation cùng file spring-configuration-metadata.json sinh ra tự động, một SpringBootCondition tự viết với message ConditionOutcome xuất hiện trong report, năm test ApplicationContextRunner kể cả FilteredClassLoader, publish lên mavenLocal rồi dùng thật, và một FailureAnalyzer cho lỗi cấu hình.</description>
    <pubDate>Wed, 11 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/writing-your-own-spring-boot-auto-configuration-and-starter/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Capstone Project: An Order Management REST API with Spring Boot</title>
    <link>https://vnntools.com/en/blog/spring-boot-capstone-order-management-rest-api/</link>
    <description>The Spring Boot Basics capstone on Spring Boot 4.1.1: an order management REST API with feature packages, JPA entities and Flyway migrations on H2 and PostgreSQL, validation and ProblemDetail errors, JWT login with RSA keys, URL rules and @PreAuthorize ownership checks, pessimistic row locks that stop concurrent orders from overselling stock, springdoc-openapi with a bearer scheme in Swagger UI, unit, @WebMvcTest, @DataJpaTest and RANDOM_PORT tests, and a Docker Compose stack whose JWT keys arrive as Compose secrets, and a complete curl walk-through.</description>
    <pubDate>Tue, 10 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-capstone-order-management-rest-api/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Dự án tổng kết: REST API quản lý đơn hàng với Spring Boot</title>
    <link>https://vnntools.com/vi/blog/spring-boot-capstone-order-management-rest-api/</link>
    <description>Dự án tổng kết khóa Spring Boot Basics trên Spring Boot 4.1.1: REST API quản lý đơn hàng với package theo feature, entity JPA và migration Flyway trên H2 và PostgreSQL, validation và lỗi ProblemDetail, đăng nhập JWT với RSA key, URL rule và kiểm tra ownership bằng @PreAuthorize, row lock pessimistic ngăn các order đồng thời bán quá stock, springdoc-openapi với bearer scheme trong Swagger UI, test unit, @WebMvcTest, @DataJpaTest và RANDOM_PORT, cùng một stack Docker Compose nhận JWT key qua Compose secrets, và một lượt curl đầy đủ.</description>
    <pubDate>Tue, 10 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-capstone-order-management-rest-api/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Packaging and Running Spring Boot: Executable JAR, Profiles and a Simple Dockerfile</title>
    <link>https://vnntools.com/en/blog/spring-boot-executable-jar-profiles-and-dockerfile/</link>
    <description>Packaging and running a Spring Boot 4.1.1 application: ./gradlew build vs bootJar and the -plain jar, what the executable JAR contains (MANIFEST.MF, JarLauncher, BOOT-INF/classes, BOOT-INF/lib, classpath.idx), naming the artifact in Gradle and Maven, java -jar with the postgres profile against PostgreSQL, environment variables and an external config file for the password, graceful shutdown and exit codes, a Dockerfile on eclipse-temurin:21-jre, exec form vs shell form ENTRYPOINT timed with docker stop, a non-root user, a multi-stage build and what its Gradle dependency layer really caches, the default heap under --memory=512m, and the application plus PostgreSQL on a Docker network and in Docker Compose.</description>
    <pubDate>Mon, 09 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-executable-jar-profiles-and-dockerfile/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Đóng gói và chạy ứng dụng Spring Boot: JAR thực thi, profile và Dockerfile đơn giản</title>
    <link>https://vnntools.com/vi/blog/spring-boot-executable-jar-profiles-and-dockerfile/</link>
    <description>Đóng gói và chạy ứng dụng Spring Boot 4.1.1: ./gradlew build so với bootJar và file -plain.jar, bên trong JAR thực thi có gì (MANIFEST.MF, JarLauncher, BOOT-INF/classes, BOOT-INF/lib, classpath.idx), đặt tên artifact với Gradle và Maven, java -jar với profile postgres trên PostgreSQL, environment variable và file config bên ngoài cho password, graceful shutdown và exit code, Dockerfile trên eclipse-temurin:21-jre, ENTRYPOINT dạng exec và dạng shell đo bằng docker stop, user không phải root, multi-stage build và thứ mà layer dependency của Gradle thực sự cache, heap mặc định khi chạy với --memory=512m, và ứng dụng cùng PostgreSQL trên Docker network và trong Docker Compose.</description>
    <pubDate>Mon, 09 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-executable-jar-profiles-and-dockerfile/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Common Tasks in Spring Boot: File Upload and Download, Email, @Scheduled and @Async</title>
    <link>https://vnntools.com/en/blog/spring-boot-file-upload-email-scheduled-and-async/</link>
    <description>File upload, download, email, @Scheduled and @Async on Spring Boot 4.1.1: MultipartFile with @RequestParam and @RequestPart and the 415 a JSON part gets without its Content-Type, a path traversal with ../../evil.txt and the normalize() plus Path.startsWith check that stops it, generated names and content type checks, the empty 413 body Spring Boot sends when max-file-size is exceeded and a 413 ProblemDetail handler, ResponseEntity&lt;Resource&gt; with a Vietnamese Content-Disposition filename (the Ban phim co.png ASCII fallback, filename* in Chrome, curl -OJ) and 206 range requests; JavaMailSender with SimpleMailMessage and MimeMessageHelper checked through the Mailpit API (encoded Subject, multipart/mixed, attachment name), a send that blocks forever without SMTP timeouts; fixedRate, fixedDelay, initialDelay and cron on the single scheduling-1 thread, a slow job delaying another, fixedRate overruns and exceptions; @Async on applicationTaskExecutor, self-invocation, exceptions, virtual threads, and an order confirmation email that no longer holds the HTTP response for 5 seconds.</description>
    <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-file-upload-email-scheduled-and-async/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Các tác vụ phổ biến trong Spring Boot: upload/download file, gửi email, @Scheduled và @Async</title>
    <link>https://vnntools.com/vi/blog/spring-boot-file-upload-email-scheduled-and-async/</link>
    <description>Upload, download file, gửi email, @Scheduled và @Async trên Spring Boot 4.1.1: MultipartFile với @RequestParam và @RequestPart cùng lỗi 415 khi part JSON thiếu Content-Type, path traversal với ../../evil.txt và phép kiểm tra normalize() cộng Path.startsWith chặn được nó, tên file sinh ngẫu nhiên và kiểm tra content type, body 413 rỗng mà Spring Boot trả về khi vượt max-file-size và handler trả 413 ProblemDetail, ResponseEntity&lt;Resource&gt; với tên file tiếng Việt trong Content-Disposition (bản dự phòng ASCII Ban phim co.png, filename* trong Chrome, curl -OJ) và range request 206; JavaMailSender với SimpleMailMessage và MimeMessageHelper được kiểm tra qua API của Mailpit (Subject được mã hóa, multipart/mixed, tên attachment), lần gửi bị treo vĩnh viễn khi không có SMTP timeout; fixedRate, fixedDelay, initialDelay và cron trên thread duy nhất scheduling-1, job chậm làm trễ job khác, fixedRate chạy quá chu kỳ và exception; @Async trên applicationTaskExecutor, self-invocation, exception, virtual thread, và email xác nhận đơn hàng không còn giữ HTTP response 5 giây.</description>
    <pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-file-upload-email-scheduled-and-async/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Productivity Tools in Spring Boot: DevTools, Lombok and Actuator Basics</title>
    <link>https://vnntools.com/en/blog/spring-boot-devtools-lombok-and-actuator-basics/</link>
    <description>Spring Boot DevTools, Lombok and Actuator on Spring Boot 4.1.1: why developmentOnly keeps DevTools out of bootJar, the base and restart classloaders with a measured 0.185 s restart against a 1.488 s cold start, triggering restarts with ./gradlew -t classes, why a Gradle resource build restarts the app anyway, the property defaults DevTools applies and LiveReload deprecated in 4.1.0; what Lombok generates according to javap, @Value and @Builder against Java records with Jackson 3 and @Jacksonized, the @Data entity traps (StackOverflowError, a HashSet that loses an entity, LazyInitializationException, @Builder without a no-args constructor) and the safe subset; Actuator /actuator, /actuator/health with show-details and a 503 DOWN, exposure of /actuator/info with build, git, java and os info, why include=* is dangerous, and securing Actuator next to a securityMatcher(&quot;/api/**&quot;) chain.</description>
    <pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-devtools-lombok-and-actuator-basics/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Công cụ tăng năng suất trong Spring Boot: DevTools, Lombok và Actuator cơ bản</title>
    <link>https://vnntools.com/vi/blog/spring-boot-devtools-lombok-and-actuator-basics/</link>
    <description>Spring Boot DevTools, Lombok và Actuator trên Spring Boot 4.1.1: vì sao developmentOnly giữ DevTools ngoài bootJar, base classloader và restart classloader với lần restart đo được 0.185 s so với khởi động lạnh 1.488 s, kích hoạt restart bằng ./gradlew -t classes, vì sao build resource bằng Gradle vẫn làm ứng dụng restart, các giá trị property mặc định DevTools áp dụng và LiveReload bị deprecate từ 4.1.0; Lombok sinh ra gì theo javap, @Value và @Builder so với Java record với Jackson 3 và @Jacksonized, các bẫy của @Data trên entity (StackOverflowError, HashSet làm mất entity, LazyInitializationException, @Builder không có no-args constructor) và tập annotation an toàn; Actuator /actuator, /actuator/health với show-details và 503 DOWN, expose /actuator/info với thông tin build, git, java và os, vì sao include=* nguy hiểm, và bảo vệ Actuator bên cạnh chain securityMatcher(&quot;/api/**&quot;).</description>
    <pubDate>Sat, 07 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-devtools-lombok-and-actuator-basics/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Testing with Spring Boot: @SpringBootTest, @WebMvcTest with MockMvcTester and @DataJpaTest</title>
    <link>https://vnntools.com/en/blog/spring-boot-test-slices-springboottest-webmvctest-datajpatest/</link>
    <description>Spring Boot 4.1.1 testing with spring-test and spring-security-test: the per-feature test starters, the Boot 3 imports that no longer compile and @MockBean replaced by @MockitoBean, measured startup times and bean counts for @WebMvcTest, @DataJpaTest and @SpringBootTest, MockMvcTester with bodyJson assertions for 200, 201, 404, 409, 422 and 500 ProblemDetail responses, why the web slice runs Boot default security until you @Import your SecurityFilterChain, @WithMockUser versus jwt() with 401, 403 and 201, @DataJpaTest with a replaced embedded database, rollback per test and the first-level cache trap, @SpringBootTest in MOCK and RANDOM_PORT with RestTestClient, the @Transactional rollback that a real server thread escapes, @TestConfiguration, @ActiveProfiles and the test context cache.</description>
    <pubDate>Fri, 06 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-test-slices-springboottest-webmvctest-datajpatest/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Test với Spring Boot: @SpringBootTest, @WebMvcTest với MockMvcTester và @DataJpaTest</title>
    <link>https://vnntools.com/vi/blog/spring-boot-test-slices-springboottest-webmvctest-datajpatest/</link>
    <description>Test trong Spring Boot 4.1.1 với spring-test và spring-security-test: các test starter theo từng feature, những import của Boot 3 không còn compile được và @MockBean được thay bằng @MockitoBean, thời gian khởi động và số bean đo được cho @WebMvcTest, @DataJpaTest và @SpringBootTest, MockMvcTester với các assertion bodyJson cho response ProblemDetail 200, 201, 404, 409, 422 và 500, vì sao web slice chạy security mặc định của Boot cho đến khi bạn @Import SecurityFilterChain của mình, @WithMockUser so với jwt() với 401, 403 và 201, @DataJpaTest với database embedded được thay thế, rollback sau mỗi test và bẫy first-level cache, @SpringBootTest ở MOCK và RANDOM_PORT với RestTestClient, rollback của @Transactional mà thread của server thoát được, @TestConfiguration, @ActiveProfiles và test context cache.</description>
    <pubDate>Fri, 06 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-test-slices-springboottest-webmvctest-datajpatest/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Unit Testing in Spring Boot: JUnit 6, AssertJ and Mockito for the Service Layer</title>
    <link>https://vnntools.com/en/blog/unit-testing-spring-boot-services-with-junit-assertj-mockito/</link>
    <description>Unit testing the service layer of a Spring Boot 4.1.1 application with JUnit, AssertJ and Mockito: what a unit test replaces, the Gradle test task and its report, a new test instance per method proven by identity, @Nested and parameterized display names in JUnit 6, the BigDecimal isEqualTo trap and soft assertions with their failure messages, @Mock with constructor injection versus @InjectMocks passing null, stubbing, verify and ArgumentCaptor, UnnecessaryStubbingException and PotentialStubbingProblem under strict stubs, a fixed Clock, and loading Mockito as a -javaagent to remove the self-attaching warning.</description>
    <pubDate>Thu, 05 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/unit-testing-spring-boot-services-with-junit-assertj-mockito/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Unit test trong Spring Boot: JUnit 6, AssertJ và Mockito cho tầng Service</title>
    <link>https://vnntools.com/vi/blog/unit-testing-spring-boot-services-with-junit-assertj-mockito/</link>
    <description>Unit test cho tầng service của ứng dụng Spring Boot 4.1.1 với JUnit, AssertJ và Mockito: unit test thay thế những gì, test task của Gradle và report, mỗi test method một instance mới được chứng minh bằng identity, @Nested và tên hiển thị của parameterized test trong JUnit 6, bẫy isEqualTo với BigDecimal và soft assertion cùng thông báo lỗi, @Mock với constructor injection so với @InjectMocks truyền null, stub, verify và ArgumentCaptor, UnnecessaryStubbingException và PotentialStubbingProblem dưới strict stubs, một Clock cố định, và nạp Mockito dưới dạng -javaagent để bỏ cảnh báo self-attaching.</description>
    <pubDate>Thu, 05 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/unit-testing-spring-boot-services-with-junit-assertj-mockito/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Authorization in Spring Security: Roles, @PreAuthorize, CORS and CSRF</title>
    <link>https://vnntools.com/en/blog/spring-security-authorization-preauthorize-cors-csrf/</link>
    <description>Authorization in Spring Security on Spring Boot 4.1.1, for a JWT API: authorities and the ROLE_ prefix, hasRole vs hasAuthority, what hasRole(&quot;ROLE_ADMIN&quot;) does in a URL rule versus in SpEL, authorizeHttpRequests rules for the catalogue with 401, 403 and 200 exchanges, @EnableMethodSecurity, @PreAuthorize and @PostAuthorize with an ownership rule, the self-invocation trap and the catch-all advice that turns a method-security 403 into a 500, a RoleHierarchy bean, CORS with a preflight blocked in headless Chrome and answered by http.cors and a CorsConfigurationSource, allowedOrigins(&quot;*&quot;) with allowCredentials, and CSRF on a session chain with csrf.spa, the XSRF-TOKEN cookie and X-XSRF-TOKEN header, and why the bearer API can disable it.</description>
    <pubDate>Wed, 04 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-security-authorization-preauthorize-cors-csrf/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Phân quyền trong Spring Security: role, @PreAuthorize, cấu hình CORS và CSRF</title>
    <link>https://vnntools.com/vi/blog/spring-security-authorization-preauthorize-cors-csrf/</link>
    <description>Authorization trong Spring Security trên Spring Boot 4.1.1, cho một JWT API: authority và tiền tố ROLE_, hasRole so với hasAuthority, hasRole(&quot;ROLE_ADMIN&quot;) làm gì trong URL rule và trong SpEL, các rule authorizeHttpRequests cho catalogue với 401, 403 và 200, @EnableMethodSecurity, @PreAuthorize và @PostAuthorize với rule ownership, bẫy self-invocation và catch-all advice biến một 403 từ method security thành 500, một RoleHierarchy bean, CORS với preflight bị chặn trong headless Chrome và được http.cors cùng CorsConfigurationSource trả lời, allowedOrigins(&quot;*&quot;) kèm allowCredentials, và CSRF trên session chain với csrf.spa, cookie XSRF-TOKEN và header X-XSRF-TOKEN, và vì sao bearer API có thể tắt nó.</description>
    <pubDate>Wed, 04 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-security-authorization-preauthorize-cors-csrf/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] JWT Authentication for a Spring Boot REST API: Stateless Login, Issuing and Validating Tokens</title>
    <link>https://vnntools.com/en/blog/jwt-authentication-for-spring-boot-rest-api/</link>
    <description>Stateless JWT authentication with Spring Security and nimbus-jose-jwt on Spring Boot 4.1.1: an RSA key pair generated with openssl, the JwtDecoder Spring Boot builds from public-key-location, a NimbusJwtEncoder bean, a login endpoint that returns accessToken, tokenType and expiresIn, a token decoded into header, payload and signature, oauth2ResourceServer in place of HTTP Basic, @AuthenticationPrincipal Jwt, the default SCOPE_ authorities and roles mapped to ROLE_ with authorities-claim-name and authority-prefix, FACTOR_BEARER, 401 responses with WWW-Authenticate Bearer and ProblemDetail bodies for malformed, edited, foreign-key, alg none and expired tokens, the 60-second clock skew, iss and exp validators, and a disabled user whose token keeps working until it expires.</description>
    <pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/jwt-authentication-for-spring-boot-rest-api/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] JWT cho REST API với Spring Boot: stateless authentication, tạo và kiểm tra token</title>
    <link>https://vnntools.com/vi/blog/jwt-authentication-for-spring-boot-rest-api/</link>
    <description>Stateless authentication bằng JWT với Spring Security và nimbus-jose-jwt trên Spring Boot 4.1.1: cặp RSA key tạo bằng openssl, JwtDecoder mà Spring Boot tạo từ public-key-location, bean NimbusJwtEncoder, endpoint login trả về accessToken, tokenType và expiresIn, một token được tách thành header, payload và signature, oauth2ResourceServer thay cho HTTP Basic, @AuthenticationPrincipal Jwt, authority SCOPE_ mặc định và claim roles được map thành ROLE_ bằng authorities-claim-name và authority-prefix, FACTOR_BEARER, response 401 kèm WWW-Authenticate Bearer và body ProblemDetail cho token sai định dạng, bị sửa, ký bằng key khác, alg none và hết hạn, clock skew 60 giây, validator cho iss và exp, và một user bị vô hiệu hoá vẫn dùng được token cho tới khi hết hạn.</description>
    <pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/jwt-authentication-for-spring-boot-rest-api/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Authenticating Users from a Database in Spring Security: UserDetailsService, BCrypt, Registration and Login</title>
    <link>https://vnntools.com/en/blog/spring-security-authentication-with-database-users/</link>
    <description>Database-backed authentication with Spring Security on Spring Boot 4.1.1, with H2 and PostgreSQL: a users table and AppUser entity, a JpaUserDetailsService and the DaoAuthenticationProvider Spring Security wires from it, BCrypt hashes taken apart with cost 10, 12 and 14 timings, DelegatingPasswordEncoder and the {bcrypt} prefix, the 72-byte limit, a validated registration endpoint with 409 and 422, HTTP Basic against database users, a POST /api/auth/login endpoint built on the AuthenticationManager, identical 401 responses and timings for unknown usernames and wrong passwords, @AuthenticationPrincipal, disabled accounts, the per-request cost of stateless Basic authentication, and rehashing on login with UserDetailsPasswordService.</description>
    <pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-security-authentication-with-database-users/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Xác thực người dùng từ database với Spring Security: UserDetailsService, BCrypt, đăng ký và đăng nhập</title>
    <link>https://vnntools.com/vi/blog/spring-security-authentication-with-database-users/</link>
    <description>Authentication với user lưu trong database bằng Spring Security trên Spring Boot 4.1.1, với H2 và PostgreSQL: table users và entity AppUser, JpaUserDetailsService và DaoAuthenticationProvider mà Spring Security tự dựng từ đó, BCrypt hash được mổ xẻ cùng thời gian đo ở cost 10, 12 và 14, DelegatingPasswordEncoder và prefix {bcrypt}, giới hạn 72 byte, endpoint register có validate với 409 và 422, HTTP Basic với user trong database, endpoint POST /api/auth/login dùng AuthenticationManager, response 401 và thời gian như nhau cho username không tồn tại và sai password, @AuthenticationPrincipal, account bị vô hiệu hoá, chi phí mỗi request của HTTP Basic stateless, và rehash khi login với UserDetailsPasswordService.</description>
    <pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-security-authentication-with-database-users/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Spring Security Overview: Authentication vs Authorization, the Filter Chain and SecurityFilterChain</title>
    <link>https://vnntools.com/en/blog/spring-security-overview-and-securityfilterchain/</link>
    <description>Spring Security on Spring Boot 4.1.1: what spring-boot-starter-security changes, from the generated password to a 401 with WWW-Authenticate for curl and a redirect to the default login page for a browser, authentication vs authorization with 401 and 403 exchanges, DelegatingFilterProxy, FilterChainProxy and the 16 filters of the default chain, a SecurityFilterChain bean in the lambda DSL without @EnableWebSecurity, the CSRF 403 that reaches curl as a 401, SessionCreationPolicy.STATELESS, requestMatchers order and permitAll vs anonymous, two chains with securityMatcher and @Order, 401 and 403 as ProblemDetail, and InMemoryUserDetailsManager with {noop} passwords.</description>
    <pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-security-overview-and-securityfilterchain/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Tổng quan Spring Security: authentication và authorization, filter chain và cấu hình SecurityFilterChain</title>
    <link>https://vnntools.com/vi/blog/spring-security-overview-and-securityfilterchain/</link>
    <description>Spring Security trên Spring Boot 4.1.1: spring-boot-starter-security thay đổi gì, từ password sinh tự động tới 401 kèm WWW-Authenticate cho curl và redirect tới trang login mặc định cho trình duyệt, authentication và authorization qua các response 401 và 403, DelegatingFilterProxy, FilterChainProxy và 16 filter của chain mặc định, bean SecurityFilterChain viết bằng lambda DSL không cần @EnableWebSecurity, lỗi CSRF 403 đến tay curl thành 401, SessionCreationPolicy.STATELESS, thứ tự requestMatchers và permitAll so với anonymous, hai chain với securityMatcher và @Order, 401 và 403 dưới dạng ProblemDetail, và InMemoryUserDetailsManager với password {noop}.</description>
    <pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-security-overview-and-securityfilterchain/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] JPA Auditing in Spring Boot: @CreatedDate, @LastModifiedDate and @CreatedBy</title>
    <link>https://vnntools.com/en/blog/spring-data-jpa-auditing/</link>
    <description>Spring Data JPA auditing on Spring Boot 4.1.1 with PostgreSQL: @EnableJpaAuditing, AuditingEntityListener and a @MappedSuperclass base class, a Flyway migration adding NOT NULL audit columns to a table with rows, the silent nulls without the annotation or the listener, Instant vs LocalDateTime vs OffsetDateTime and what timestamptz stores, when @LastModifiedDate moves and what modifyOnCreate changes, the detached save() that writes null into created_at and @Column(updatable = false), @CreatedBy from an X-User header through AuditorAware, a Clock-backed DateTimeProvider, the bulk and native updates that bypass auditing, and Hibernate @CreationTimestamp and @UpdateTimestamp compared.</description>
    <pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-data-jpa-auditing/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Auditing với Spring Data JPA: @CreatedDate, @LastModifiedDate và @CreatedBy</title>
    <link>https://vnntools.com/vi/blog/spring-data-jpa-auditing/</link>
    <description>Auditing với Spring Data JPA trên Spring Boot 4.1.1 và PostgreSQL: @EnableJpaAuditing, AuditingEntityListener và một base class @MappedSuperclass, Flyway migration thêm column audit NOT NULL vào table đã có dữ liệu, giá trị null âm thầm khi thiếu annotation hoặc listener, Instant so với LocalDateTime và OffsetDateTime cùng giá trị timestamptz thực sự lưu, @LastModifiedDate đổi khi nào và modifyOnCreate thay đổi gì, save() một detached entity ghi null vào created_at và @Column(updatable = false), @CreatedBy lấy từ header X-User qua AuditorAware, DateTimeProvider dựa trên Clock, bulk update và native update bỏ qua auditing, và so sánh với @CreationTimestamp, @UpdateTimestamp của Hibernate.</description>
    <pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-data-jpa-auditing/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Database Migrations in Spring Boot with Flyway: Why ddl-auto Does Not Belong in Production</title>
    <link>https://vnntools.com/en/blog/spring-boot-database-migrations-with-flyway/</link>
    <description>Database migrations in Spring Boot 4.1.1 with Flyway on PostgreSQL: what ddl-auto=update does to a renamed field, a wider column and a dropped scale, spring-boot-starter-flyway and the Unsupported Database error without flyway-database-postgresql, the default classpath:db/migration location, the startup log and flyway_schema_history, V1__ naming rules and silently skipped files, the none default and validate against migrated tables, data.sql still running on H2, checksum mismatch and a legitimate repair, a failed migration rolled back on PostgreSQL but not on MySQL, baseline-on-migrate for a database ddl-auto created, repeatable R__ migrations, clean-disabled, a schema script generated by Hibernate, and Liquibase compared.</description>
    <pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-database-migrations-with-flyway/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Database migration trong Spring Boot với Flyway: vì sao không dùng ddl-auto ở production</title>
    <link>https://vnntools.com/vi/blog/spring-boot-database-migrations-with-flyway/</link>
    <description>Database migration trong Spring Boot 4.1.1 với Flyway trên PostgreSQL: ddl-auto=update làm gì với một field bị đổi tên, một column được nới rộng và một scale bị bỏ, spring-boot-starter-flyway và lỗi Unsupported Database khi thiếu flyway-database-postgresql, location mặc định classpath:db/migration, log lúc khởi động và flyway_schema_history, quy tắc đặt tên V1__ và các file bị bỏ qua trong im lặng, giá trị mặc định none và validate trên các table đã migrate, data.sql vẫn chạy trên H2, checksum mismatch và khi nào repair là hợp lý, một migration thất bại được rollback trên PostgreSQL nhưng không trên MySQL, baseline-on-migrate cho database do ddl-auto tạo, repeatable migration R__, clean-disabled, script schema do Hibernate sinh ra, và so sánh với Liquibase.</description>
    <pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-database-migrations-with-flyway/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] @Transactional in Spring Boot: What a Transaction Is, Where to Put It and When It Rolls Back</title>
    <link>https://vnntools.com/en/blog/transactional-in-spring-boot/</link>
    <description>@Transactional in Spring Boot 4.1.1 with PostgreSQL: the partial write an order leaves without a transaction, the JpaTransactionManager DEBUG log for begin, commit and rollback, the CGLIB proxy behind the injected bean, service method vs repository and class vs method level, rollback rules for unchecked and checked exceptions, rollbackFor, noRollbackFor and caught exceptions, what readOnly does to dirty checking and to PostgreSQL writes, self-invocation, private and protected methods, UnexpectedRollbackException from the rollback-only trap, jakarta.transaction.Transactional and TransactionTemplate.</description>
    <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/transactional-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Transaction trong Spring Boot: @Transactional là gì, đặt ở đâu và khi nào rollback</title>
    <link>https://vnntools.com/vi/blog/transactional-in-spring-boot/</link>
    <description>@Transactional trong Spring Boot 4.1.1 với PostgreSQL: dữ liệu bị ghi dở dang khi đặt order không có transaction, log DEBUG của JpaTransactionManager cho begin, commit và rollback, proxy CGLIB phía sau bean được inject, đặt ở method của service hay ở repository, ở class hay ở method, quy tắc rollback với exception unchecked và checked, rollbackFor, noRollbackFor và exception đã catch, readOnly làm gì với dirty checking và với thao tác ghi trên PostgreSQL, self-invocation, method private và protected, UnexpectedRollbackException từ bẫy rollback-only, jakarta.transaction.Transactional và TransactionTemplate.</description>
    <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/transactional-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Pagination and Sorting in Spring Boot: Pageable, Sort and Paged API Responses</title>
    <link>https://vnntools.com/en/blog/spring-boot-pagination-and-sorting/</link>
    <description>Pagination and sorting in Spring Boot 4.1.1 with Spring Data JPA, on H2 and PostgreSQL: Sort with ignoreCase, nullsFirst and nullsLast and the SQL each produced on both databases, the deprecated TypedSort, zero-based PageRequest, Page vs Slice vs List and the count query and extra row behind each, when Spring Data skips the count, @Query and native queries with Pageable, the inflated totalElements of a paged JOIN FETCH, a Pageable controller with @PageableDefault, max-page-size and one-indexed parameters, the PageImpl serialization warning, PagedModel versus a PageResponse record, a 400 ProblemDetail for an unknown sort property, and OFFSET versus keyset scrolling with Window.</description>
    <pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-pagination-and-sorting/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Phân trang và sắp xếp trong Spring Boot: Pageable, Sort và trả kết quả phân trang qua API</title>
    <link>https://vnntools.com/vi/blog/spring-boot-pagination-and-sorting/</link>
    <description>Phân trang và sắp xếp trong Spring Boot 4.1.1 với Spring Data JPA, trên H2 và PostgreSQL: Sort với ignoreCase, nullsFirst, nullsLast và SQL mỗi cách sinh ra trên hai database, TypedSort đã deprecated, PageRequest đếm từ 0, Page, Slice và List cùng count query và row thừa phía sau từng loại, khi nào Spring Data bỏ count, @Query và native query với Pageable, totalElements bị thổi phồng khi phân trang JOIN FETCH, controller nhận Pageable với @PageableDefault, max-page-size và one-indexed parameter, warning khi serialize PageImpl, PagedModel so với record PageResponse, ProblemDetail 400 cho sort property không tồn tại, và OFFSET so với keyset scrolling bằng Window.</description>
    <pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-pagination-and-sorting/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] JPA Entity Relationships in Spring Boot: @OneToOne, @OneToMany, @ManyToOne, @ManyToMany, Cascade and FetchType</title>
    <link>https://vnntools.com/en/blog/jpa-entity-relationships-in-spring-boot/</link>
    <description>JPA entity relationships in Spring Boot 4.1.1 with Hibernate, on PostgreSQL and H2: the foreign keys, UNIQUE constraint and join tables that @ManyToOne, @OneToOne, @ManyToMany and a unidirectional @OneToMany generate, owning side versus mappedBy and the null foreign key it causes, @ManyToOne with LAZY and optional = false, Set versus List and MultipleBagFetchException, cascade and orphanRemoval with the SQL they run, FetchType defaults, LazyInitializationException and open-in-view, N+1 fixed with JOIN FETCH and @EntityGraph, and the truncated 200 response Jackson 3 writes for a bidirectional entity.</description>
    <pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/jpa-entity-relationships-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Quan hệ giữa các entity trong JPA: @OneToOne, @OneToMany, @ManyToOne, @ManyToMany, cascade và FetchType</title>
    <link>https://vnntools.com/vi/blog/jpa-entity-relationships-in-spring-boot/</link>
    <description>Quan hệ giữa các entity trong JPA với Spring Boot 4.1.1 và Hibernate, trên PostgreSQL và H2: foreign key, UNIQUE constraint và join table mà @ManyToOne, @OneToOne, @ManyToMany và @OneToMany một chiều sinh ra, owning side và mappedBy cùng foreign key bị null khi chỉ gán một phía, @ManyToOne với LAZY và optional = false, Set hay List và MultipleBagFetchException, cascade và orphanRemoval kèm SQL thật, FetchType mặc định, LazyInitializationException và open-in-view, N+1 được sửa bằng JOIN FETCH và @EntityGraph, và response 200 bị cắt cụt mà Jackson 3 trả về cho entity hai chiều.</description>
    <pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/jpa-entity-relationships-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Spring Data JPA Queries: Derived Query Methods, @Query with JPQL and Native SQL</title>
    <link>https://vnntools.com/en/blog/spring-data-jpa-derived-queries-and-query-annotation/</link>
    <description>Spring Data JPA queries on Spring Boot 4.1.1, with H2 and PostgreSQL: how a derived query method name is parsed into JPQL and SQL, a keyword table with the SQL each keyword generated, return types and the exceptions they throw, the startup failure for a misspelled property, whether Containing escapes % and _, @Query with JPQL and when @Param is needed, native full-text search that fails on H2, SQL injection through string concatenation, and @Modifying bulk updates with the stale persistence context, the stale value written back on flush, and clearAutomatically.</description>
    <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-data-jpa-derived-queries-and-query-annotation/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Truy vấn với Spring Data JPA: derived query method, @Query với JPQL và native query</title>
    <link>https://vnntools.com/vi/blog/spring-data-jpa-derived-queries-and-query-annotation/</link>
    <description>Query với Spring Data JPA trên Spring Boot 4.1.1, với H2 và PostgreSQL: tên derived query method được phân tích thành JPQL rồi SQL ra sao, bảng keyword kèm SQL mà từng keyword sinh ra, các return type và exception chúng ném ra, lỗi khởi động khi gõ sai tên property, Containing có escape % và _ không, @Query với JPQL và khi nào cần @Param, native full-text search chạy trên PostgreSQL nhưng lỗi trên H2, SQL injection do nối chuỗi, và bulk update với @Modifying cùng cái bẫy persistence context bị stale, giá trị cũ bị ghi lại khi flush, và clearAutomatically.</description>
    <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-data-jpa-derived-queries-and-query-annotation/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Spring Data JPA and Hibernate in Spring Boot: Entities, @Id, @GeneratedValue and JpaRepository CRUD</title>
    <link>https://vnntools.com/en/blog/spring-data-jpa-entities-and-jparepository/</link>
    <description>Spring Data JPA and Hibernate on Spring Boot 4.1.1, with H2 and PostgreSQL: JPA vs Hibernate vs Spring Data, a first @Entity with @Id, @GeneratedValue, @Column and @Enumerated and the DDL it produced on both databases, the EnumType.ORDINAL trap, no-arg constructors, records and final classes, IDENTITY vs SEQUENCE vs AUTO vs UUID ids across restarts, SQL and bind-parameter logging, the real ddl-auto defaults, JpaRepository CRUD with the SQL each method sends, dirty checking and the first-level cache, replacing the in-memory repository with a 409 for a duplicate SKU, open-in-view and entity equals/hashCode.</description>
    <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-data-jpa-entities-and-jparepository/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Spring Data JPA và Hibernate trong Spring Boot: Entity, @Id, @GeneratedValue và CRUD với JpaRepository</title>
    <link>https://vnntools.com/vi/blog/spring-data-jpa-entities-and-jparepository/</link>
    <description>Spring Data JPA và Hibernate trên Spring Boot 4.1.1, với H2 và PostgreSQL: JPA khác Hibernate và Spring Data thế nào, entity đầu tiên với @Id, @GeneratedValue, @Column, @Enumerated và DDL sinh ra trên cả hai database, bẫy EnumType.ORDINAL, entity thiếu constructor không tham số, record và class final, id IDENTITY, SEQUENCE, AUTO, UUID qua các lần khởi động lại, log SQL và bind parameter, giá trị ddl-auto mặc định thật sự, CRUD với JpaRepository kèm SQL của từng method, dirty checking và first-level cache, thay repository in-memory và trả 409 khi trùng SKU, open-in-view và equals/hashCode cho entity.</description>
    <pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-data-jpa-entities-and-jparepository/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Connecting Spring Boot to a Database: DataSource, HikariCP, H2, PostgreSQL, MySQL and JdbcClient</title>
    <link>https://vnntools.com/en/blog/spring-boot-datasource-hikaricp-and-jdbcclient/</link>
    <description>Connecting Spring Boot 4.1.1 to H2, PostgreSQL and MySQL: what a DataSource is and what a pool saves per connection, how Boot picks an embedded H2 or your URL, H2 file mode, PostgreSQL mode and the separate H2 console module, Docker containers and dev/prod profiles, schema.sql with spring.sql.init.mode, JdbcClient queries into records, KeyHolder on H2 versus PostgreSQL, DuplicateKeyException mapped to 409, a JdbcProductRepository, startup versus first-request failures, and HikariCP defaults with a measured pool exhaustion.</description>
    <pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-datasource-hikaricp-and-jdbcclient/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Kết nối database trong Spring Boot: DataSource, HikariCP, H2, PostgreSQL, MySQL và JdbcClient</title>
    <link>https://vnntools.com/vi/blog/spring-boot-datasource-hikaricp-and-jdbcclient/</link>
    <description>Kết nối Spring Boot 4.1.1 với H2, PostgreSQL và MySQL: DataSource là gì và pool tiết kiệm được bao nhiêu cho mỗi connection, Boot chọn H2 nhúng hay URL của bạn ra sao, H2 file mode, PostgreSQL mode và module H2 console tách riêng, container Docker cùng profile dev/prod, schema.sql với spring.sql.init.mode, query JdbcClient vào record, KeyHolder trên H2 so với PostgreSQL, DuplicateKeyException thành 409, JdbcProductRepository, lỗi lúc khởi động so với lỗi ở request đầu tiên, và giá trị mặc định của HikariCP cùng một lần đo pool cạn connection.</description>
    <pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-datasource-hikaricp-and-jdbcclient/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Server-Side Rendering with Thymeleaf in Spring Boot: Templates, Forms and Validation</title>
    <link>https://vnntools.com/en/blog/server-side-rendering-with-thymeleaf-in-spring-boot/</link>
    <description>Server-side rendering with Thymeleaf in Spring Boot 4.1.1: when SSR beats a JSON API, how a view name becomes classpath:/templates/products/list.html, the five standard expressions, th:text versus th:utext and XSS, th:each with #numbers and #temporals, a validated create form with th:field and th:errors, where BindingResult must go, Post/Redirect/Get with flash attributes, fragments, static CSS, what spring.thymeleaf.cache really changes, and HTML error pages.</description>
    <pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/server-side-rendering-with-thymeleaf-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Server-side rendering với Thymeleaf trong Spring Boot: template, form và validation</title>
    <link>https://vnntools.com/vi/blog/server-side-rendering-with-thymeleaf-in-spring-boot/</link>
    <description>Server-side rendering với Thymeleaf trong Spring Boot 4.1.1: khi nào SSR hợp hơn JSON API, view name trở thành classpath:/templates/products/list.html ra sao, năm loại standard expression, th:text và th:utext với XSS, th:each cùng #numbers và #temporals, form tạo mới có validation với th:field và th:errors, vị trí bắt buộc của BindingResult, Post/Redirect/Get với flash attribute, fragment, CSS tĩnh, spring.thymeleaf.cache thực sự thay đổi gì, và trang lỗi HTML.</description>
    <pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/server-side-rendering-with-thymeleaf-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Calling External APIs with RestClient in Spring Boot: GET, POST, Error Handling and Timeouts</title>
    <link>https://vnntools.com/en/blog/calling-external-apis-with-spring-restclient/</link>
    <description>Calling external HTTP APIs from Spring Boot 4.1.1 with RestClient: RestClient vs RestTemplate, WebClient and @HttpExchange, spring-boot-starter-restclient and the auto-configured RestClient.Builder, GET into records and lists, toEntity, query parameter encoding, POST, PUT and DELETE, the real HttpClientErrorException messages, onStatus, defaultStatusHandler and exchange, measured default and configured connect and read timeouts with spring.http.clients, a logging ClientHttpRequestInterceptor, and turning upstream failures into 502, 503 and 504.</description>
    <pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/calling-external-apis-with-spring-restclient/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Gọi API bên ngoài với RestClient trong Spring Boot: GET, POST, xử lý lỗi và timeout</title>
    <link>https://vnntools.com/vi/blog/calling-external-apis-with-spring-restclient/</link>
    <description>Gọi HTTP API bên ngoài từ Spring Boot 4.1.1 bằng RestClient: RestClient so với RestTemplate, WebClient và @HttpExchange, spring-boot-starter-restclient và RestClient.Builder được auto-configure, GET vào record và list, toEntity, encode query parameter, POST, PUT và DELETE, message thật của HttpClientErrorException, onStatus, defaultStatusHandler và exchange, connect timeout và read timeout mặc định lẫn khi cấu hình bằng spring.http.clients được đo thực tế, interceptor để log, và chuyển lỗi upstream thành 502, 503 và 504.</description>
    <pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/calling-external-apis-with-spring-restclient/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] API Documentation in Spring Boot with springdoc-openapi and Swagger UI</title>
    <link>https://vnntools.com/en/blog/spring-boot-api-documentation-with-springdoc-openapi/</link>
    <description>springdoc-openapi on Spring Boot 4.1.1: the OpenAPI 3.1 document at /v3/api-docs, Swagger UI and Try it out, what springdoc infers from controllers, DTO records and Bean Validation constraints, which @RestControllerAdvice responses it adds, @Tag, @Operation, @ApiResponse, @Parameter and @Schema on records, a global OpenAPI bean and customizer, GroupedOpenApi, springdoc properties and switching the docs off in a prod profile.</description>
    <pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-api-documentation-with-springdoc-openapi/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Tài liệu API trong Spring Boot với springdoc-openapi và Swagger UI</title>
    <link>https://vnntools.com/vi/blog/spring-boot-api-documentation-with-springdoc-openapi/</link>
    <description>springdoc-openapi trên Spring Boot 4.1.1: document OpenAPI 3.1 ở /v3/api-docs, Swagger UI và Try it out, những gì springdoc suy ra từ controller, DTO record và Bean Validation constraint, response nào của @RestControllerAdvice được thêm vào, @Tag, @Operation, @ApiResponse, @Parameter và @Schema trên record, bean OpenAPI và customizer toàn cục, GroupedOpenApi, property của springdoc và tắt tài liệu trong profile prod.</description>
    <pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-api-documentation-with-springdoc-openapi/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Layered Architecture in Spring Boot: Controller, Service, Repository and Package by Layer vs by Feature</title>
    <link>https://vnntools.com/en/blog/spring-boot-layered-architecture-and-package-structure/</link>
    <description>Layered architecture in Spring Boot 4.1.1, refactored on a catalogue API: the controller that does everything and the startup crash when it is reused, what controller, service and repository each own, where DTO mapping belongs, a step-by-step refactor proven unchanged with curl, a service interface or a concrete class checked with Mockito, five layering anti-patterns, and package by layer versus package by feature measured on one change, with package-private beans injected and the compiler error that keeps features apart.</description>
    <pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-layered-architecture-and-package-structure/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Kiến trúc phân lớp trong Spring Boot: Controller – Service – Repository và tổ chức package theo layer hay feature</title>
    <link>https://vnntools.com/vi/blog/spring-boot-layered-architecture-and-package-structure/</link>
    <description>Kiến trúc phân lớp trong Spring Boot 4.1.1, refactor trên một catalogue API: controller làm tất cả mọi việc và lỗi crash lúc khởi động khi tái sử dụng nó, controller, service và repository mỗi layer chịu trách nhiệm gì, map DTO ở layer nào, refactor từng bước và dùng curl chứng minh hành vi không đổi, service nên là interface hay class cụ thể kiểm tra bằng Mockito, năm anti-pattern khi phân layer, và so sánh tổ chức package theo layer với theo feature trên cùng một thay đổi, kèm bean package-private vẫn được inject và lỗi compile giữ các feature tách biệt.</description>
    <pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-layered-architecture-and-package-structure/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Global Exception Handling in Spring Boot: @RestControllerAdvice, @ExceptionHandler and ProblemDetail</title>
    <link>https://vnntools.com/en/blog/global-exception-handling-with-problemdetail-in-spring-boot/</link>
    <description>Global exception handling in Spring Boot 4.1.1: the default /error body and BasicErrorController, spring.web.error.* replacing server.error.*, @ResponseStatus and ResponseStatusException, @ExceptionHandler in a controller and in @RestControllerAdvice, how Spring picks one handler by type distance, controller, @Order and cause, ProblemDetail (RFC 9457) and application/problem+json, ErrorResponseException, spring.mvc.problemdetails.enabled, ResponseEntityExceptionHandler with a 422 field error list, and a catch-all that keeps framework 4xx responses.</description>
    <pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/global-exception-handling-with-problemdetail-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Xử lý exception tập trung trong Spring Boot: @RestControllerAdvice, @ExceptionHandler và ProblemDetail</title>
    <link>https://vnntools.com/vi/blog/global-exception-handling-with-problemdetail-in-spring-boot/</link>
    <description>Xử lý exception tập trung trong Spring Boot 4.1.1: body /error mặc định và BasicErrorController, spring.web.error.* thay cho server.error.*, @ResponseStatus và ResponseStatusException, @ExceptionHandler trong controller và trong @RestControllerAdvice, cách Spring chọn một handler theo khoảng cách type, controller, @Order và cause, ProblemDetail (RFC 9457) với application/problem+json, ErrorResponseException, spring.mvc.problemdetails.enabled, ResponseEntityExceptionHandler trả 422 kèm danh sách lỗi theo field, và một handler catch-all giữ nguyên các response 4xx của framework.</description>
    <pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/global-exception-handling-with-problemdetail-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Validation in Spring Boot: Bean Validation Annotations, @Valid and Custom Validators</title>
    <link>https://vnntools.com/en/blog/bean-validation-in-spring-boot/</link>
    <description>Bean Validation in Spring Boot 4.1.1 with Hibernate Validator: spring-boot-starter-validation, @NotNull vs @NotEmpty vs @NotBlank, @Size, @DecimalMin, @Digits, @Email and @Pattern on request DTO records, @Valid on @RequestBody and the default 400, nested objects and lists, @PathVariable and @RequestParam validation and the @Validated 500 trap, validation groups, ValidationMessages.properties and Accept-Language, custom ConstraintValidator and cross-field constraints, and validation in the service layer.</description>
    <pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/bean-validation-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Validation trong Spring Boot: Bean Validation, @Valid và custom validator</title>
    <link>https://vnntools.com/vi/blog/bean-validation-in-spring-boot/</link>
    <description>Bean Validation trong Spring Boot 4.1.1 với Hibernate Validator: spring-boot-starter-validation, @NotNull, @NotEmpty và @NotBlank khác nhau ra sao, @Size, @DecimalMin, @Digits, @Email và @Pattern trên DTO record, @Valid với @RequestBody và response 400 mặc định, object lồng nhau và list, validate @PathVariable và @RequestParam cùng cái bẫy 500 của @Validated, validation group, ValidationMessages.properties và Accept-Language, custom ConstraintValidator và constraint liên quan nhiều field, và validation ở service layer.</description>
    <pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/bean-validation-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] JSON with Jackson 3 and DTOs in Spring Boot: Serialization, Deserialization and MapStruct</title>
    <link>https://vnntools.com/en/blog/jackson-json-and-dto-in-spring-boot/</link>
    <description>JSON in Spring Boot 4.1.1 with Jackson 3: JacksonJsonHttpMessageConverter and the jacksonJsonMapper bean, the tools.jackson packages, the immutable JsonMapper and unchecked exceptions, measured Jackson 3 defaults against use-jackson2-defaults, @JsonProperty, @JsonIgnore, @JsonInclude, @JsonFormat, BigDecimal, enums and Optional, records, @JsonAlias and @JsonCreator, spring.jackson properties and JsonMapperBuilderCustomizer, why DTOs beat exposing the entity, manual mapping and MapStruct 1.6.3 with Gradle and Maven.</description>
    <pubDate>Sat, 17 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/jackson-json-and-dto-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] JSON với Jackson 3 và DTO trong Spring Boot: serialize, deserialize và MapStruct</title>
    <link>https://vnntools.com/vi/blog/jackson-json-and-dto-in-spring-boot/</link>
    <description>JSON trong Spring Boot 4.1.1 với Jackson 3: JacksonJsonHttpMessageConverter và bean jacksonJsonMapper, package tools.jackson, JsonMapper immutable và exception unchecked, đo các giá trị mặc định của Jackson 3 so với use-jackson2-defaults, @JsonProperty, @JsonIgnore, @JsonInclude, @JsonFormat, BigDecimal, enum và Optional, record, @JsonAlias và @JsonCreator, property spring.jackson và JsonMapperBuilderCustomizer, vì sao DTO tốt hơn để lộ entity, map bằng tay và MapStruct 1.6.3 với Gradle và Maven.</description>
    <pubDate>Sat, 17 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/jackson-json-and-dto-in-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Reading Requests and Shaping Responses in Spring Boot: @PathVariable, @RequestParam, @RequestBody, @RequestHeader and ResponseEntity</title>
    <link>https://vnntools.com/en/blog/spring-boot-request-data-and-responseentity/</link>
    <description>Binding HTTP request data in Spring Boot 4.1.1: @PathVariable and the -parameters compiler flag, @RequestParam with defaultValue, Optional, lists and maps, @RequestHeader and @CookieValue, @RequestBody and its 415 and 400 failures, the status for every missing or unconvertible value, and ResponseEntity for 201 Created with Location, 204 and 404.</description>
    <pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-request-data-and-responseentity/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Nhận và trả dữ liệu trong Spring Boot: @PathVariable, @RequestParam, @RequestBody, @RequestHeader và ResponseEntity</title>
    <link>https://vnntools.com/vi/blog/spring-boot-request-data-and-responseentity/</link>
    <description>Bind dữ liệu của HTTP request trong Spring Boot 4.1.1: @PathVariable và flag -parameters của compiler, @RequestParam với defaultValue, Optional, List và Map, @RequestHeader và @CookieValue, @RequestBody cùng các lỗi 415 và 400, status code cho mọi giá trị bị thiếu hoặc không convert được, và ResponseEntity cho 201 Created kèm Location, 204 và 404.</description>
    <pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-request-data-and-responseentity/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] @RestController and Request Mapping in Spring Boot: @GetMapping, @PostMapping, @PutMapping and @DeleteMapping</title>
    <link>https://vnntools.com/en/blog/spring-boot-restcontroller-and-request-mapping/</link>
    <description>How @RestController and request mapping work in Spring Boot 4.1.1: @Controller versus @ResponseBody, the path of one request through DispatcherServlet, @GetMapping, @PostMapping, @PutMapping, @PatchMapping and @DeleteMapping on a CRUD controller, path patterns and which mapping wins, trailing slashes, consumes, produces, params and headers with the status each mismatch returns, implicit HEAD and OPTIONS, and what each return type becomes.</description>
    <pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-restcontroller-and-request-mapping/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] @RestController và request mapping trong Spring Boot: @GetMapping, @PostMapping, @PutMapping, @DeleteMapping</title>
    <link>https://vnntools.com/vi/blog/spring-boot-restcontroller-and-request-mapping/</link>
    <description>Cách @RestController và request mapping hoạt động trong Spring Boot 4.1.1: @Controller so với @ResponseBody, đường đi của một request qua DispatcherServlet, @GetMapping, @PostMapping, @PutMapping, @PatchMapping và @DeleteMapping trên một controller CRUD, path pattern và mapping nào thắng, dấu gạch chéo cuối URL, consumes, produces, params và headers cùng status code mà mỗi lần không khớp trả về, HEAD và OPTIONS ngầm định, và mỗi kiểu giá trị trả về trở thành response như thế nào.</description>
    <pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-restcontroller-and-request-mapping/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] HTTP and REST Fundamentals: Methods, Status Codes and RESTful URL Design</title>
    <link>https://vnntools.com/en/blog/http-methods-status-codes-and-rest-url-design/</link>
    <description>HTTP and REST fundamentals captured on the wire against a Spring Boot 4.1.1 app: raw requests and responses with nc and curl -v, GET, POST, PUT, PATCH, DELETE, HEAD and OPTIONS with their safe, idempotent and cacheable properties from RFC 9110, retries and the Idempotency-Key header, the status codes an API uses and the mistakes around 400, 422, 401, 403 and 404, Content-Type versus Accept, what REST really means, and RESTful URL design rules ending in a worked endpoint table.</description>
    <pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/http-methods-status-codes-and-rest-url-design/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] HTTP và REST căn bản: method, status code và thiết kế URL chuẩn REST</title>
    <link>https://vnntools.com/vi/blog/http-methods-status-codes-and-rest-url-design/</link>
    <description>HTTP và REST căn bản, quan sát trực tiếp trên đường truyền với application Spring Boot 4.1.1: request và response thô qua nc và curl -v, các method GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS cùng tính safe, idempotent, cacheable theo RFC 9110, retry và header Idempotency-Key, những status code một API thực sự dùng và các lỗi hay gặp quanh 400, 422, 401, 403, 404, Content-Type so với Accept, REST thực sự là gì, và các quy tắc thiết kế URL chuẩn REST khép lại bằng một bảng endpoint mẫu.</description>
    <pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/http-methods-status-codes-and-rest-url-design/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Logging in Spring Boot: SLF4J, Logback, Log Levels and Log Files</title>
    <link>https://vnntools.com/en/blog/spring-boot-logging-with-slf4j-and-logback/</link>
    <description>Logging in Spring Boot 4.1.1: SLF4J as the facade and Logback as the implementation, the jul-to-slf4j and log4j-to-slf4j bridges, parameterised and fluent logging, exceptions, log levels, the logger hierarchy and log groups, --debug versus --trace, the default log line pattern, logging.file.name with rotation, logback-spring.xml with springProfile, MDC and switching to Log4j2.</description>
    <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-logging-with-slf4j-and-logback/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Logging trong Spring Boot: SLF4J, Logback, log level và ghi log ra file</title>
    <link>https://vnntools.com/vi/blog/spring-boot-logging-with-slf4j-and-logback/</link>
    <description>Logging trong Spring Boot 4.1.1: SLF4J là facade và Logback là implementation, hai bridge jul-to-slf4j và log4j-to-slf4j, parameterised và fluent logging, ghi log exception, log level, cây logger và log group, --debug so với --trace, pattern dòng log mặc định, logging.file.name kèm rotation, logback-spring.xml với springProfile, MDC và chuyển sang Log4j2.</description>
    <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-logging-with-slf4j-and-logback/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Spring Boot Profiles and Configuration Precedence: Environment Variables and Command-Line Arguments</title>
    <link>https://vnntools.com/en/blog/spring-boot-profiles-and-configuration-precedence/</link>
    <description>Spring Boot 4.1.1 profiles and configuration precedence: application-dev.yml merged over application.yml key by key, every way to set spring.profiles.active and which of two active profiles wins, spring.profiles.default, multi-document files, profile groups and @Profile expressions, the property source order from command-line arguments down to @PropertySource, where config files are searched, environment variables, spring.config.import and the startup error each mistake produces.</description>
    <pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-profiles-and-configuration-precedence/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Profile và thứ tự ưu tiên cấu hình trong Spring Boot: biến môi trường và tham số dòng lệnh</title>
    <link>https://vnntools.com/vi/blog/spring-boot-profiles-and-configuration-precedence/</link>
    <description>Profile và thứ tự ưu tiên cấu hình của Spring Boot 4.1.1: application-dev.yml được merge lên application.yml theo từng key, mọi cách set spring.profiles.active và profile nào thắng khi hai profile cùng active, spring.profiles.default, file nhiều document, profile group và @Profile expression, thứ tự property source từ command-line argument xuống tới @PropertySource, nơi Spring Boot tìm file config, environment variable, spring.config.import và lỗi khởi động mà từng sai lầm gây ra.</description>
    <pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-profiles-and-configuration-precedence/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] @ConfigurationProperties in Spring Boot: Type-Safe Configuration with Validation</title>
    <link>https://vnntools.com/en/blog/spring-boot-configurationproperties/</link>
    <description>Type-safe configuration in Spring Boot 4.1.1 with @ConfigurationProperties: binding to records without @ConstructorBinding, JavaBean binding and @DefaultValue, the three ways to register a properties class, nested objects, lists, maps, enums, Duration and DataSize conversion, relaxed binding and environment variable names, @Validated fail-fast startup errors, the configuration processor metadata, and a side-by-side comparison with @Value.</description>
    <pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-configurationproperties/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] @ConfigurationProperties trong Spring Boot: cấu hình type-safe kết hợp validation</title>
    <link>https://vnntools.com/vi/blog/spring-boot-configurationproperties/</link>
    <description>Cấu hình type-safe trong Spring Boot 4.1.1 với @ConfigurationProperties: bind vào record không cần @ConstructorBinding, JavaBean binding và @DefaultValue, ba cách đăng ký properties class, object lồng nhau, list, map, enum, chuyển đổi Duration và DataSize, relaxed binding và cách đặt tên environment variable, lỗi khởi động fail-fast với @Validated, metadata từ configuration processor, và bảng so sánh với @Value.</description>
    <pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-configurationproperties/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] application.properties vs application.yml in Spring Boot: Syntax and @Value</title>
    <link>https://vnntools.com/en/blog/spring-boot-application-properties-and-yaml/</link>
    <description>application.properties and application.yml in Spring Boot 4.1.1: the .properties syntax rules, the ISO-8859-1 default that mangles Vietnamese text, YAML nesting and the SnakeYAML values that silently change type, which file wins when both exist, placeholders and random values, and @Value with defaults, type conversion, SpEL and the Environment.</description>
    <pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-application-properties-and-yaml/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] application.properties và application.yml trong Spring Boot: cú pháp và @Value</title>
    <link>https://vnntools.com/vi/blog/spring-boot-application-properties-and-yaml/</link>
    <description>application.properties và application.yml trong Spring Boot 4.1.1: quy tắc cú pháp .properties, mặc định ISO-8859-1 làm hỏng chữ tiếng Việt, cách YAML lồng nhau và những giá trị SnakeYAML âm thầm đổi type, file nào thắng khi có cả hai, placeholder và giá trị random, cùng @Value với default, type conversion, SpEL và Environment.</description>
    <pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-application-properties-and-yaml/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] How Spring Boot Auto-Configuration Works: Conditions, Back-Off and the --debug Report</title>
    <link>https://vnntools.com/en/blog/how-spring-boot-auto-configuration-works/</link>
    <description>The mechanism behind Spring Boot 4.1.1 auto-configuration, opened up and measured: @EnableAutoConfiguration and AutoConfigurationImportSelector, the META-INF/spring/…AutoConfiguration.imports files that Boot 4 spreads across small modules, the @ConditionalOnClass / @ConditionalOnMissingBean family with a custom Condition of your own, a back-off demonstration with before-and-after numbers, and how to read the --debug CONDITIONS EVALUATION REPORT.</description>
    <pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-spring-boot-auto-configuration-works/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Auto-configuration trong Spring Boot hoạt động ra sao: conditional, back-off và báo cáo --debug</title>
    <link>https://vnntools.com/vi/blog/how-spring-boot-auto-configuration-works/</link>
    <description>Mổ xẻ và đo đạc cơ chế auto-configuration của Spring Boot 4.1.1: @EnableAutoConfiguration và AutoConfigurationImportSelector, các file META-INF/spring/…AutoConfiguration.imports mà Boot 4 tách ra nhiều module nhỏ, họ annotation @ConditionalOnClass / @ConditionalOnMissingBean cùng một Condition tự viết, màn demo back-off có số liệu trước và sau, và cách đọc báo cáo CONDITIONS EVALUATION REPORT từ --debug.</description>
    <pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-spring-boot-auto-configuration-works/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Spring Bean Scopes and the Bean Lifecycle: singleton, prototype, @PostConstruct and @PreDestroy</title>
    <link>https://vnntools.com/en/blog/spring-bean-scopes-and-lifecycle/</link>
    <description>Spring bean scopes and the bean lifecycle on Spring Boot 4.1.1: why singleton means one per container and not one per JVM, singleton vs prototype vs request vs session vs application with instance counts from curl, why @PreDestroy never fires on a prototype, the singleton-holds-a-prototype trap and the ObjectProvider, @Lookup and scoped-proxy fixes, the full fourteen-step lifecycle order traced callback by callback, and what @Lazy actually costs.</description>
    <pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-bean-scopes-and-lifecycle/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Bean scope và lifecycle trong Spring: singleton, prototype, @PostConstruct và @PreDestroy</title>
    <link>https://vnntools.com/vi/blog/spring-bean-scopes-and-lifecycle/</link>
    <description>Bean scope và bean lifecycle trong Spring trên Spring Boot 4.1.1: vì sao singleton là một instance cho mỗi container chứ không phải cho cả JVM, so sánh singleton, prototype, request, session và application bằng số instance đếm được qua curl, vì sao @PreDestroy không bao giờ chạy với prototype, cái bẫy singleton giữ prototype cùng ba cách sửa ObjectProvider, @Lookup và scoped proxy, đủ mười bốn bước lifecycle lần theo từng callback, và @Lazy thực sự đánh đổi những gì.</description>
    <pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-bean-scopes-and-lifecycle/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] @Configuration and @Bean in Spring: When to Use a Factory Method Instead of a Stereotype</title>
    <link>https://vnntools.com/en/blog/configuration-and-bean-annotations-in-spring/</link>
    <description>Why @Component cannot register a class from a third-party jar, how a @Bean factory method on a @Configuration class does it instead, a decision table for choosing between the two, and proxyBeanMethods demonstrated with identity hash codes on Spring Boot 4.1.1 — full mode returning one shared singleton, lite mode building three separate objects — plus @Import, static @Bean methods, and three failures with their error messages.</description>
    <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/configuration-and-bean-annotations-in-spring/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] @Configuration và @Bean trong Spring: khi nào dùng thay cho annotation stereotype</title>
    <link>https://vnntools.com/vi/blog/configuration-and-bean-annotations-in-spring/</link>
    <description>Vì sao @Component không đăng ký được một class nằm trong jar của thư viện khác, cách @Bean factory method trên @Configuration class làm thay, bảng quyết định chọn giữa hai cách, và proxyBeanMethods chứng minh bằng identity hash code trên Spring Boot 4.1.1 — full mode trả về một singleton dùng chung, lite mode tạo ba object riêng biệt — cùng @Import, static @Bean method và ba lỗi kèm error message của chúng.</description>
    <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/configuration-and-bean-annotations-in-spring/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Constructor, Setter and Field Injection in Spring, with @Qualifier and @Primary</title>
    <link>https://vnntools.com/en/blog/dependency-injection-types-in-spring/</link>
    <description>The three Spring injection points compared by when the container writes the value: why @Autowired is optional on a single constructor, why final fields and plain JUnit 5 tests are only possible with constructor injection, @Autowired(required=false) versus Optional and ObjectProvider, the NoUniqueBeanDefinitionException fixed four ways with @Primary, @Qualifier, parameter names and a custom qualifier annotation, List and Map injection with @Order, and why a constructor cycle fails at startup while a field cycle does not.</description>
    <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/dependency-injection-types-in-spring/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Các cách inject dependency trong Spring: constructor, setter, field, @Qualifier và @Primary</title>
    <link>https://vnntools.com/vi/blog/dependency-injection-types-in-spring/</link>
    <description>Ba injection point của Spring so sánh theo đúng một tiêu chí — container ghi giá trị vào lúc nào: vì sao @Autowired không cần trên constructor duy nhất, vì sao chỉ constructor injection mới cho field final và test JUnit 5 thuần, @Autowired(required=false) so với Optional và ObjectProvider, lỗi NoUniqueBeanDefinitionException cùng bốn cách sửa bằng @Primary, @Qualifier, tên parameter và custom qualifier annotation, inject List và Map kèm @Order, và vì sao vòng lặp qua constructor chết ngay lúc khởi động còn vòng lặp qua field thì không.</description>
    <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/dependency-injection-types-in-spring/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Spring Beans and the ApplicationContext: @Component, Stereotypes and Component Scanning</title>
    <link>https://vnntools.com/en/blog/spring-beans-and-applicationcontext/</link>
    <description>What a Spring bean actually is and which of your objects should never be one, @Component proved to be the meta-annotation behind @Service, @Repository and @Controller, what each stereotype really adds at run time, how component scanning turns class files into BeanDefinitions, the bean-naming rule including the two-capitals case, the ApplicationContext API with the bean count of a Spring Boot 4.1.1 app, and three registration failures with their error messages.</description>
    <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-beans-and-applicationcontext/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Bean và ApplicationContext trong Spring: @Component, stereotype và component scanning</title>
    <link>https://vnntools.com/vi/blog/spring-beans-and-applicationcontext/</link>
    <description>Bean trong Spring thực chất là gì và object nào không bao giờ nên là bean, chứng minh @Component là meta-annotation nằm dưới @Service, @Repository và @Controller, mỗi stereotype thật sự thêm gì lúc runtime, component scanning biến file .class thành BeanDefinition ra sao, quy tắc đặt tên bean kể cả trường hợp hai chữ hoa, API của ApplicationContext cùng số bean của một app Spring Boot 4.1.1, và ba kiểu đăng ký bean thất bại kèm thông báo lỗi.</description>
    <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-beans-and-applicationcontext/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] IoC and Dependency Injection in Spring: Why You Stop Calling new</title>
    <link>https://vnntools.com/en/blog/ioc-and-dependency-injection-in-spring/</link>
    <description>The idea the whole framework rests on, demonstrated on Spring Boot 4.1.1: a four-class object graph built with new at every level and the three failures that follow, Inversion of Control and Dependency Injection named separately, the same graph hand-wired in main with no framework at all, then wired by the Spring container with the injected instance identities printed to prove it, plus a JUnit 5 test with a hand-made stub, an implementation swapped without touching its consumer, and an honest list of what the container costs you.</description>
    <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/ioc-and-dependency-injection-in-spring/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] IoC và Dependency Injection trong Spring: vì sao không còn tự new object</title>
    <link>https://vnntools.com/vi/blog/ioc-and-dependency-injection-in-spring/</link>
    <description>Ý tưởng mà cả framework dựa lên, demo trên Spring Boot 4.1.1: một object graph bốn class tự new ở mọi tầng cùng ba hậu quả kéo theo, phân biệt rạch ròi Inversion of Control với Dependency Injection, nối tay cùng graph đó trong main mà không có framework nào, rồi để Spring container nối và in identity của từng instance ra để chứng minh, kèm một test JUnit 5 với stub tự viết, một lần đổi implementation mà không đụng vào class đang dùng nó, và danh sách thành thật những cái giá phải trả.</description>
    <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/ioc-and-dependency-injection-in-spring/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Spring Boot Project Structure: Gradle vs Maven, @SpringBootApplication and the Executable JAR</title>
    <link>https://vnntools.com/en/blog/spring-boot-project-structure-build-tools/</link>
    <description>Every file Spring Initializr generates on Spring Boot 4.1.1: the directory layout, the Gradle and Maven wrappers, build.gradle line by line against the same pom.xml, a fair Maven vs Gradle comparison, the BOM that removes version numbers, @SpringBootApplication decomposed into its three meta-annotations with the base-package 404 reproduced, and the anatomy of the executable fat JAR.</description>
    <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-project-structure-build-tools/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Cấu trúc project Spring Boot: Gradle và Maven, @SpringBootApplication và file JAR</title>
    <link>https://vnntools.com/vi/blog/spring-boot-project-structure-build-tools/</link>
    <description>Toàn bộ file mà Spring Initializr sinh ra trên Spring Boot 4.1.1: cấu trúc thư mục, wrapper của Gradle và Maven, build.gradle đọc từng dòng đặt cạnh pom.xml tương ứng, so sánh Maven và Gradle công bằng, BOM giúp bỏ version number, @SpringBootApplication tách thành ba meta-annotation kèm lỗi 404 do sai base package, và giải phẫu file JAR chạy được.</description>
    <pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-project-structure-build-tools/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Setting Up Spring Boot: JDK, IDE, Spring Initializr and Your First Application</title>
    <link>https://vnntools.com/en/blog/spring-boot-setup-first-application/</link>
    <description>Install JDK 21 on macOS, Windows and Linux, fix a JAVA_HOME pointing at the wrong JDK, compare IntelliJ IDEA with VS Code, generate a Spring Boot 4.1.1 project from Spring Initializr or one curl command, run it with the Gradle wrapper, read the startup log line by line, write a @RestController that returns JSON, change server.port, and fix the five errors every beginner hits.</description>
    <pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-setup-first-application/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Cài đặt Spring Boot: JDK, IDE, Spring Initializr và ứng dụng đầu tiên</title>
    <link>https://vnntools.com/vi/blog/spring-boot-setup-first-application/</link>
    <description>Cài JDK 21 trên macOS, Windows và Linux, sửa JAVA_HOME trỏ nhầm JDK, so sánh IntelliJ IDEA với VS Code, tạo project Spring Boot 4.1.1 bằng Spring Initializr hoặc một câu lệnh curl, chạy bằng Gradle wrapper, đọc log khởi động từng dòng, viết @RestController trả về JSON, đổi server.port và xử lý năm lỗi mà người mới nào cũng gặp.</description>
    <pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-setup-first-application/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Spring Framework vs Spring Boot: What Auto-Configuration, Starters and the Embedded Server Actually Do</title>
    <link>https://vnntools.com/en/blog/spring-framework-vs-spring-boot/</link>
    <description>Spring Framework versus Spring Boot 4.1.1: what a plain Spring web application made you write, what starters and the spring-boot-dependencies BOM replace it with, why Boot 4 renamed the web starter to spring-boot-starter-webmvc, how auto-configuration backs off, embedded Tomcat against a WAR, and a map of the Spring ecosystem.</description>
    <pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-framework-vs-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Spring Framework và Spring Boot khác nhau thế nào: Auto-Configuration, Starter và Embedded Server</title>
    <link>https://vnntools.com/vi/blog/spring-framework-vs-spring-boot/</link>
    <description>Spring Framework so với Spring Boot 4.1.1: một web application Spring thuần bắt bạn viết những gì, starter và BOM spring-boot-dependencies thay thế chúng ra sao, vì sao Boot 4 đổi tên web starter thành spring-boot-starter-webmvc, auto-configuration nhường chỗ thế nào, embedded Tomcat so với WAR, và bản đồ hệ sinh thái Spring.</description>
    <pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-framework-vs-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Java Prerequisites for Spring Boot: OOP, Generics, Streams, Records and Annotations</title>
    <link>https://vnntools.com/en/blog/java-prerequisites-for-spring-boot/</link>
    <description>The Java you need before Spring Boot 4.1.1: interfaces and polymorphism, List/Set/Map, generics and type erasure, lambdas and Stream, Optional, records as DTOs, and the one that matters most — custom annotations read back with reflection, exactly how @Component and @GetMapping work.</description>
    <pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/java-prerequisites-for-spring-boot/</guid>
  </item>
  <item>
    <title>[Spring Boot Basics] Kiến thức Java cần có trước khi học Spring Boot: OOP, Generics, Stream, Record và Annotation</title>
    <link>https://vnntools.com/vi/blog/java-prerequisites-for-spring-boot/</link>
    <description>Những gì bạn cần nắm về Java trước khi vào Spring Boot 4.1.1: interface và polymorphism, List/Set/Map, generics và type erasure, lambda và Stream, Optional, record làm DTO, và phần quan trọng nhất — tự viết annotation rồi đọc lại bằng reflection, đúng cách @Component và @GetMapping hoạt động.</description>
    <pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/java-prerequisites-for-spring-boot/</guid>
  </item>
  <item>
    <title>[Advanced Java] Best Practices, Performance and Interview Preparation</title>
    <link>https://vnntools.com/en/blog/java-best-practices-and-interview-preparation/</link>
    <description>Java best practices for Java 21: six performance traps counted in allocation bytes, equals() calls and SQL statements instead of milliseconds, why a nanoTime loop lies, a code review checklist mapped to the defect each question catches, and interview answers backed by transcripts.</description>
    <pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/java-best-practices-and-interview-preparation/</guid>
  </item>
  <item>
    <title>[Advanced Java] Best Practice, Tối Ưu Hiệu Năng và Chuẩn Bị Phỏng Vấn Java</title>
    <link>https://vnntools.com/vi/blog/java-best-practices-and-interview-preparation/</link>
    <description>Best practice cho Java 21: sáu performance trap đo bằng allocation byte, số lần gọi equals() và số câu SQL thay vì millisecond, vì sao vòng lặp nanoTime nói dối, checklist code review gắn với đúng defect nó bắt được, và các câu phỏng vấn trả lời bằng transcript.</description>
    <pubDate>Tue, 29 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/java-best-practices-and-interview-preparation/</guid>
  </item>
  <item>
    <title>[Advanced Java] Putting the Java Course Together: Reports, Error Mapping and a Three-Level Test Suite</title>
    <link>https://vnntools.com/en/blog/putting-the-java-course-together/</link>
    <description>The quality pass over a Spring Boot 4.1.1 sales service: a three-level test suite of 54 tests, a RestControllerAdvice mapping a business exception hierarchy to status codes, reporting written twice with Collectors.groupingBy and with JPQL aggregates and compared in rows transferred, and a concept map naming where every idea from the course actually lives in the code.</description>
    <pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/putting-the-java-course-together/</guid>
  </item>
  <item>
    <title>[Advanced Java] Ghép toàn bộ khóa Java: report, error mapping và test suite ba level</title>
    <link>https://vnntools.com/vi/blog/putting-the-java-course-together/</link>
    <description>Vòng quality pass trên service bán hàng Spring Boot 4.1.1: test suite ba level với 54 test, RestControllerAdvice map exception hierarchy sang status code, report viết hai lần bằng Collectors.groupingBy và bằng JPQL aggregate rồi so sánh theo số row chuyển đi, cùng một concept map chỉ rõ từng kiến thức của khóa nằm ở đâu trong code.</description>
    <pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/putting-the-java-course-together/</guid>
  </item>
  <item>
    <title>[Advanced Java] Building a Real Project: a Sales REST API with Spring Boot</title>
    <link>https://vnntools.com/en/blog/spring-boot-sales-api-project/</link>
    <description>A complete sales management REST API built end to end on Spring Boot 4.1.1: four JPA entities with the owning side marked, the generated schema, services that hold every rule, controllers with DTOs and Location headers, one @RestControllerAdvice mapping four exceptions to 400, 404 and 409, and a full worked curl session including a transaction rollback proved in the SQL log.</description>
    <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-sales-api-project/</guid>
  </item>
  <item>
    <title>[Advanced Java] Xây dựng dự án thực tế: REST API quản lý bán hàng với Spring Boot</title>
    <link>https://vnntools.com/vi/blog/spring-boot-sales-api-project/</link>
    <description>Một REST API quản lý bán hàng hoàn chỉnh dựng từ đầu tới cuối trên Spring Boot 4.1.1: bốn JPA entity với owning side rõ ràng, schema sinh ra, service giữ toàn bộ rule, controller dùng DTO và header Location, một @RestControllerAdvice map bốn exception thành 400, 404 và 409, cùng một phiên curl đầy đủ có cả rollback transaction chứng minh bằng log SQL.</description>
    <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-sales-api-project/</guid>
  </item>
  <item>
    <title>[Advanced Java] Connecting Spring Boot to a Database with Spring Data JPA</title>
    <link>https://vnntools.com/en/blog/spring-data-jpa/</link>
    <description>Spring Data JPA on Spring Boot 4.1.1: how JDBC, JPA, Hibernate and repositories stack, entity mapping and the generated DDL, derived query methods, the N+1 problem counted in real SQL logs, LazyInitializationException, proxy-based @Transactional, dirty checking and flush versus commit.</description>
    <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-data-jpa/</guid>
  </item>
  <item>
    <title>[Advanced Java] Kết nối Spring Boot với Database bằng Spring Data JPA</title>
    <link>https://vnntools.com/vi/blog/spring-data-jpa/</link>
    <description>Spring Data JPA trên Spring Boot 4.1.1: JDBC, JPA, Hibernate và repository xếp chồng thế nào, entity mapping cùng DDL sinh ra, derived query method, vấn đề N+1 đếm bằng log SQL thật, LazyInitializationException, @Transactional dựa trên proxy, dirty checking và flush khác commit.</description>
    <pubDate>Sat, 26 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-data-jpa/</guid>
  </item>
  <item>
    <title>[Advanced Java] Building a REST API with Spring Boot</title>
    <link>https://vnntools.com/en/blog/rest-api-with-spring-boot/</link>
    <description>A REST API on Spring Boot 4.1.1: how DispatcherServlet routes a request, the mapping annotations, ResponseEntity and status codes, jakarta.validation with @Valid, RFC 9457 ProblemDetail error bodies, content negotiation, and a @WebMvcTest run.</description>
    <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/rest-api-with-spring-boot/</guid>
  </item>
  <item>
    <title>[Advanced Java] Xây dựng REST API với Spring Boot</title>
    <link>https://vnntools.com/vi/blog/rest-api-with-spring-boot/</link>
    <description>REST API trên Spring Boot 4.1.1: DispatcherServlet route request ra sao, các annotation mapping, ResponseEntity và status code, jakarta.validation với @Valid, error body ProblemDetail theo RFC 9457, content negotiation và một lần chạy @WebMvcTest.</description>
    <pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/rest-api-with-spring-boot/</guid>
  </item>
  <item>
    <title>[Advanced Java] Spring Boot Basics: the IoC Container, Auto-Configuration and the Bean Lifecycle</title>
    <link>https://vnntools.com/en/blog/spring-boot-basics/</link>
    <description>Spring Framework versus Spring Boot on Spring Boot 4.1.1: the IoC container and constructor injection, @Primary and @Qualifier, the real CONDITIONS EVALUATION REPORT, @ConditionalOnMissingBean back-off, the bean lifecycle and scopes, application.properties versus YAML, profiles, property precedence, and @SpringBootTest against a narrow slice test.</description>
    <pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spring-boot-basics/</guid>
  </item>
  <item>
    <title>[Advanced Java] Spring Boot cơ bản: IoC Container, Auto-Configuration và vòng đời của Bean</title>
    <link>https://vnntools.com/vi/blog/spring-boot-basics/</link>
    <description>Spring Framework khác Spring Boot thế nào trên Spring Boot 4.1.1: IoC container và constructor injection, @Primary với @Qualifier, CONDITIONS EVALUATION REPORT thật, @ConditionalOnMissingBean back-off, vòng đời bean và scope, application.properties so với YAML, profile, thứ tự ưu tiên property, và @SpringBootTest so với slice test.</description>
    <pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spring-boot-basics/</guid>
  </item>
  <item>
    <title>[Advanced Java] Layered Architecture in Java: Controller, Service and Repository</title>
    <link>https://vnntools.com/en/blog/layered-architecture-in-java/</link>
    <description>Layered architecture in Java without a framework: one class that parses input, applies the rules and writes to a database, refactored into Controller, Service and Repository on Java 21 — the repository interface owned by the service package, the dependency direction proved by javac, wiring by hand in main, entity versus DTO with the mapper between them, a JUnit 5 suite that runs with no database, and the four ways layering goes wrong.</description>
    <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/layered-architecture-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Kiến trúc Layered trong Java: Controller, Service và Repository</title>
    <link>https://vnntools.com/vi/blog/layered-architecture-in-java/</link>
    <description>Kiến trúc layered trong Java mà không cần framework: một class vừa parse input, vừa áp rule, vừa ghi database, được refactor thành Controller, Service và Repository trên Java 21 — repository interface do package của service sở hữu, chiều dependency được javac chứng minh, wiring bằng tay trong main, entity so với DTO cùng mapper ở giữa, một bộ test JUnit 5 chạy không cần database, và bốn kiểu làm hỏng layering.</description>
    <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/layered-architecture-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Maven and Gradle: Dependency Management and Building a Java Project</title>
    <link>https://vnntools.com/en/blog/maven-and-gradle-build-tools/</link>
    <description>Maven and Gradle for Java projects: pom.xml and build.gradle, coordinates, the standard layout, the Maven lifecycle against the Gradle task graph, transitive dependency resolution with a real version conflict resolved differently by each tool, scopes and configurations, exclusions and pinning, JUnit 5 from the build, executable jars, and the wrapper.</description>
    <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/maven-and-gradle-build-tools/</guid>
  </item>
  <item>
    <title>[Advanced Java] Maven và Gradle: Quản lý Dependency và Build Project Java</title>
    <link>https://vnntools.com/vi/blog/maven-and-gradle-build-tools/</link>
    <description>Maven và Gradle cho project Java: pom.xml và build.gradle, coordinates, layout chuẩn, lifecycle của Maven so với task graph của Gradle, transitive dependency với một version conflict thật được hai tool resolve khác nhau, scope và configuration, exclude và pin version, chạy JUnit 5 từ build, jar chạy được, và wrapper.</description>
    <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/maven-and-gradle-build-tools/</guid>
  </item>
  <item>
    <title>[Advanced Java] Debugging and Logging in Java with SLF4J, Logback and Log4j 2</title>
    <link>https://vnntools.com/en/blog/debugging-and-logging-in-java/</link>
    <description>Logging and debugging in Java 21: why SLF4J is an API with no implementation, what happens with zero, one and two bindings on the classpath, log levels and thresholds, parameterised logging, logback.xml and log4j2.xml, MDC across threads, logging exceptions, and jdb, jcmd, jstack and jmap for a live process.</description>
    <pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/debugging-and-logging-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Debug và Logging trong Java với SLF4J, Logback và Log4j 2</title>
    <link>https://vnntools.com/vi/blog/debugging-and-logging-in-java/</link>
    <description>Logging và debug trong Java 21: vì sao SLF4J chỉ là API không có implementation, chuyện gì xảy ra với 0, 1 và 2 binding trên classpath, log level và threshold, parameterised logging, logback.xml và log4j2.xml, MDC qua nhiều thread, cách log exception, cùng jdb, jcmd, jstack và jmap cho process đang chạy.</description>
    <pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/debugging-and-logging-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Mocking with Mockito: Stubbing, Verification and When Not to Mock</title>
    <link>https://vnntools.com/en/blog/mocking-with-mockito/</link>
    <description>Mocking in Java with Mockito 5.14.2: what a test double is and why a hand-written fake often beats a library, what an unstubbed mock returns, stubbing with when and thenReturn, argument matchers and the real InvalidUseOfMatchersException, verify with times, never, InOrder and ArgumentCaptor, MockitoExtension with Mock and InjectMocks, the spy trap, mocking final classes and static methods with the inline mock maker, and the over-mocking failure mode where a test that mocks everything tests nothing.</description>
    <pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/mocking-with-mockito/</guid>
  </item>
  <item>
    <title>[Advanced Java] Mockito: mock dữ liệu trong test, stubbing và verify</title>
    <link>https://vnntools.com/vi/blog/mocking-with-mockito/</link>
    <description>Mocking trong Java với Mockito 5.14.2: test double là gì và vì sao một fake viết tay nhiều khi tốt hơn thư viện, mock chưa stub trả về gì, stubbing với when và thenReturn, argument matcher cùng InvalidUseOfMatchersException thật, verify với times, never, InOrder và ArgumentCaptor, MockitoExtension với Mock và InjectMocks, cái bẫy của spy, mock final class và static method bằng inline mock maker, và kiểu test mock mọi thứ nên rốt cuộc chẳng test được gì.</description>
    <pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/mocking-with-mockito/</guid>
  </item>
  <item>
    <title>[Advanced Java] Unit Testing in Java with JUnit 5</title>
    <link>https://vnntools.com/en/blog/unit-testing-with-junit5/</link>
    <description>Unit testing in Java with JUnit 5.11.3: the Platform, Jupiter and Vintage split, the lifecycle callbacks, one new test instance per method, real assertion failure messages, assertThrows and assertAll, DisplayName, Nested, Disabled and Tag, parameterized tests with every argument source, assumptions versus assertions, and the habits that make a test worthless.</description>
    <pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/unit-testing-with-junit5/</guid>
  </item>
  <item>
    <title>[Advanced Java] Unit Testing trong Java với JUnit 5</title>
    <link>https://vnntools.com/vi/blog/unit-testing-with-junit5/</link>
    <description>Unit testing trong Java với JUnit 5.11.3: kiến trúc Platform, Jupiter và Vintage, các callback lifecycle, mỗi test method một instance mới, message báo lỗi thật của từng assertion, assertThrows và assertAll, DisplayName, Nested, Disabled và Tag, parameterized test với đủ các argument source, assumption so với assertion, và những thói quen khiến một test trở nên vô dụng.</description>
    <pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/unit-testing-with-junit5/</guid>
  </item>
  <item>
    <title>[Advanced Java] Connection Pooling in Java with HikariCP</title>
    <link>https://vnntools.com/en/blog/connection-pooling-with-hikaricp/</link>
    <description>Connection pooling in Java with HikariCP 5.1.0: why close() returns a connection instead of closing it, the proxy and unwrap, maximumPoolSize, minimumIdle, connectionTimeout, idleTimeout, maxLifetime and leakDetectionThreshold, a real SQLTransientConnectionException timeout, a real leak warning with its stack trace, HikariPoolMXBean metrics and honest pool sizing.</description>
    <pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/connection-pooling-with-hikaricp/</guid>
  </item>
  <item>
    <title>[Advanced Java] Connection Pool với HikariCP: tối ưu kết nối database</title>
    <link>https://vnntools.com/vi/blog/connection-pooling-with-hikaricp/</link>
    <description>Connection pool trong Java với HikariCP 5.1.0: vì sao close() trả connection về pool chứ không đóng nó, proxy và unwrap, maximumPoolSize, minimumIdle, connectionTimeout, idleTimeout, maxLifetime và leakDetectionThreshold, một SQLTransientConnectionException thật khi hết connection, log leak thật kèm stack trace, metrics từ HikariPoolMXBean và cách chọn cỡ pool một cách trung thực.</description>
    <pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/connection-pooling-with-hikaricp/</guid>
  </item>
  <item>
    <title>[Advanced Java] JDBC in Java: Connections, PreparedStatement and Transactions</title>
    <link>https://vnntools.com/en/blog/jdbc-in-java/</link>
    <description>JDBC in Java 21 with a SQLite database: the driver architecture behind DriverManager, try-with-resources over Connection, Statement and ResultSet, a live SQL injection demonstration that PreparedStatement stops, the ResultSet cursor, transactions with commit, rollback and Savepoint, batch updates, getGeneratedKeys and how to read a SQLException.</description>
    <pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/jdbc-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] JDBC trong Java: Kết nối và thao tác Database</title>
    <link>https://vnntools.com/vi/blog/jdbc-in-java/</link>
    <description>JDBC trong Java 21 với một database SQLite: kiến trúc driver phía sau DriverManager, try-with-resources cho Connection, Statement và ResultSet, một màn SQL injection chạy thật mà PreparedStatement chặn được, ResultSet như một cursor, transaction với commit, rollback và Savepoint, batch update, getGeneratedKeys và cách đọc một SQLException.</description>
    <pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/jdbc-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Working with JSON and XML in Java: Gson, Jackson and the Defaults That Bite</title>
    <link>https://vnntools.com/en/blog/working-with-json-in-java/</link>
    <description>JSON binding in Java with Gson and Jackson: round trips, nested objects and collections, renaming and ignoring fields, the null-handling and unknown-key defaults that differ, TypeToken and TypeReference for generics, java.time support, streaming large documents with JsonReader and JsonParser, the traps that fail somewhere other than the mistake, and what XML looks like on a JDK that no longer ships JAXB.</description>
    <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/working-with-json-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Làm việc với JSON và XML trong Java: Gson, Jackson và những default gây họa</title>
    <link>https://vnntools.com/vi/blog/working-with-json-in-java/</link>
    <description>Binding JSON trong Java với Gson và Jackson: round trip, nested object và collection, đổi tên và bỏ qua field, khác biệt về default khi gặp null và key lạ, TypeToken và TypeReference cho generics, hỗ trợ java.time, streaming document lớn bằng JsonReader và JsonParser, những cái bẫy hỏng ở chỗ khác với chỗ bạn làm sai, và XML trông ra sao trên một JDK không còn kèm JAXB.</description>
    <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/working-with-json-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Java NIO: Path, Files and Channels</title>
    <link>https://vnntools.com/en/blog/java-nio-path-files-and-channels/</link>
    <description>Java NIO in depth for Java 21: path algebra with resolve, relativize, normalize and toRealPath, directory traversal with walk, find and walkFileTree, file attributes and symbolic links, WatchService, and the FileChannel and ByteBuffer model with position, limit, capacity, direct buffers, transferTo and memory-mapped files.</description>
    <pubDate>Tue, 15 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/java-nio-path-files-and-channels/</guid>
  </item>
  <item>
    <title>[Advanced Java] Java NIO: Path, Files và Channel</title>
    <link>https://vnntools.com/vi/blog/java-nio-path-files-and-channels/</link>
    <description>Java NIO chuyên sâu cho Java 21: path algebra với resolve, relativize, normalize và toRealPath, duyệt thư mục bằng walk, find và walkFileTree, file attribute và symlink, WatchService, cùng mô hình FileChannel và ByteBuffer với position, limit, capacity, direct buffer, transferTo và memory-mapped file.</description>
    <pubDate>Tue, 15 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/java-nio-path-files-and-channels/</guid>
  </item>
  <item>
    <title>[Advanced Java] Buffered Streams and Object Serialization in Java</title>
    <link>https://vnntools.com/en/blog/java-io-buffered-streams-and-serialization/</link>
    <description>Advanced java.io in Java 21: the four abstract stream roots and the exact place a charset is chosen, the decorator chain and why its order matters, buffering measured as call counts rather than milliseconds, DataOutputStream and its big-endian layout, and object serialization end to end — the real byte format, transient, serialVersionUID, writeObject, Externalizable, object graphs, and the ObjectInputFilter that exists because the format is unsafe.</description>
    <pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/java-io-buffered-streams-and-serialization/</guid>
  </item>
  <item>
    <title>[Advanced Java] Buffered Stream và Object Serialization trong Java</title>
    <link>https://vnntools.com/vi/blog/java-io-buffered-streams-and-serialization/</link>
    <description>java.io nâng cao trong Java 21: bốn abstract root của stream và đúng chỗ charset được chọn, decorator chain và vì sao thứ tự bọc quan trọng, buffer đo bằng số lần gọi method chứ không đo mili giây, DataOutputStream với layout big-endian, và object serialization từ đầu tới cuối — format byte thật, transient, serialVersionUID, writeObject, Externalizable, object graph, và ObjectInputFilter tồn tại vì format này không an toàn.</description>
    <pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/java-io-buffered-streams-and-serialization/</guid>
  </item>
  <item>
    <title>[Advanced Java] Deadlock and Livelock in Java: Diagnosing and Preventing Them</title>
    <link>https://vnntools.com/en/blog/deadlock-and-livelock-in-java/</link>
    <description>Deadlock and livelock in Java 21: the four Coffman conditions, a reproducible two-lock deadlock, a real jstack thread dump and ThreadMXBean.findDeadlockedThreads, prevention through global lock ordering and ReentrantLock.tryLock with back-off, thread pool deadlock, livelock, starvation and the cost of fair locks.</description>
    <pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/deadlock-and-livelock-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Deadlock, Livelock trong Java và cách phòng tránh</title>
    <link>https://vnntools.com/vi/blog/deadlock-and-livelock-in-java/</link>
    <description>Deadlock và livelock trong Java 21: bốn điều kiện Coffman, một deadlock tái hiện được mọi lần, cách chẩn đoán bằng thread dump thật từ jstack và ThreadMXBean.findDeadlockedThreads, phòng tránh bằng lock ordering toàn cục và ReentrantLock.tryLock kèm back-off, deadlock trong thread pool, livelock, starvation và cái giá của fair lock.</description>
    <pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/deadlock-and-livelock-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] CompletableFuture in Java: Async Chains, Composition and Error Handling</title>
    <link>https://vnntools.com/en/blog/completablefuture-in-java/</link>
    <description>CompletableFuture in Java 21: supplyAsync, runAsync and manual completion, which thread really runs each stage, thenApply versus thenCompose, thenCombine, allOf and anyOf, exception propagation with exceptionally, handle and whenComplete, the CompletionException and ExecutionException wrappers, orTimeout, and the traps that lose a result or starve the common pool.</description>
    <pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/completablefuture-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] CompletableFuture trong Java: lập trình bất đồng bộ, chain và xử lý lỗi</title>
    <link>https://vnntools.com/vi/blog/completablefuture-in-java/</link>
    <description>CompletableFuture trong Java 21: supplyAsync, runAsync và complete thủ công, stage nào chạy trên thread nào, thenApply khác thenCompose, thenCombine, allOf và anyOf, cách lỗi lan xuống chain với exceptionally, handle và whenComplete, wrapper CompletionException và ExecutionException, orTimeout, cùng những cái bẫy làm mất kết quả hoặc làm nghẽn common pool.</description>
    <pubDate>Sat, 12 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/completablefuture-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] ExecutorService and Thread Pools in Java</title>
    <link>https://vnntools.com/en/blog/executorservice-and-thread-pools-in-java/</link>
    <description>ExecutorService and thread pools in Java 21: the seven ThreadPoolExecutor arguments, why an unbounded queue makes maximumPoolSize unreachable, the hidden defaults behind every Executors factory, submit versus execute and the exception submit swallows, Callable, Future, cancellation, invokeAll and invokeAny, the correct shutdown sequence, and how to size a pool honestly.</description>
    <pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/executorservice-and-thread-pools-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] ExecutorService và Thread Pool trong Java</title>
    <link>https://vnntools.com/vi/blog/executorservice-and-thread-pools-in-java/</link>
    <description>ExecutorService và thread pool trong Java 21: bảy argument của ThreadPoolExecutor, vì sao queue không giới hạn khiến maximumPoolSize vô dụng, default bị giấu sau mỗi factory của Executors, submit khác execute và exception mà submit nuốt mất, Callable, Future, cancel, invokeAll và invokeAny, trình tự shutdown đúng, và cách chọn số thread một cách trung thực.</description>
    <pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/executorservice-and-thread-pools-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Thread Lifecycle, synchronized and Race Conditions</title>
    <link>https://vnntools.com/en/blog/thread-lifecycle-synchronized-and-race-conditions/</link>
    <description>Thread lifecycle and race conditions in Java on OpenJDK 21: the six Thread.State values printed by a watcher thread, count++ shown to be getfield/iadd/putfield under javap -c, lost updates measured across seven runs, the intrinsic lock with monitorenter versus ACC_SYNCHRONIZED, visibility versus atomicity, volatile, AtomicInteger and compare-and-swap, wait/notify with the real IllegalMonitorStateException, and the objects you must never lock on.</description>
    <pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/thread-lifecycle-synchronized-and-race-conditions/</guid>
  </item>
  <item>
    <title>[Advanced Java] Vòng đời Thread, synchronized và Race Condition</title>
    <link>https://vnntools.com/vi/blog/thread-lifecycle-synchronized-and-race-conditions/</link>
    <description>Vòng đời thread và race condition trong Java trên OpenJDK 21: sáu giá trị Thread.State do một watcher thread in ra, count++ hiện nguyên hình là getfield/iadd/putfield dưới javap -c, lost update qua bảy lần chạy, intrinsic lock với monitorenter so với ACC_SYNCHRONIZED, visibility khác atomicity ra sao, volatile, AtomicInteger và compare-and-swap, wait/notify kèm IllegalMonitorStateException thật, và những object tuyệt đối không được lock lên.</description>
    <pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/thread-lifecycle-synchronized-and-race-conditions/</guid>
  </item>
  <item>
    <title>[Advanced Java] Threads in Java: Thread, Runnable and Virtual Threads</title>
    <link>https://vnntools.com/en/blog/threads-in-java/</link>
    <description>Threads in Java on OpenJDK 21: what a thread is, its own stack against the shared heap, creating one with Thread, Runnable and a lambda, start versus run, join, daemon threads, names and priorities, non-deterministic output, virtual threads with Thread.ofVirtual, and cooperative interruption.</description>
    <pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/threads-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Thread trong Java: Thread, Runnable và virtual thread</title>
    <link>https://vnntools.com/vi/blog/threads-in-java/</link>
    <description>Thread trong Java trên OpenJDK 21: thread là gì, stack riêng và heap dùng chung, tạo thread bằng Thread, Runnable và lambda, start khác run ra sao, join, daemon thread, tên và priority, output không xác định giữa các lần chạy, virtual thread với Thread.ofVirtual, và interrupt.</description>
    <pubDate>Wed, 09 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/threads-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Optional in Java: A Return Type, Not a Cure for NullPointerException</title>
    <link>https://vnntools.com/en/blog/optional-in-java/</link>
    <description>Optional in Java on OpenJDK 21: why it was designed for return types rather than as a null replacement, its two legal states and the null reference that defeats them, all twenty methods grouped by purpose, the orElse versus orElseGet evaluation trap counted in database hits, map versus flatMap with the real javac error, the five positions where Optional makes code worse, and the three places it genuinely belongs.</description>
    <pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/optional-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Optional trong Java: một return type, không phải thuốc chữa NullPointerException</title>
    <link>https://vnntools.com/vi/blog/optional-in-java/</link>
    <description>Optional trong Java trên OpenJDK 21: vì sao nó sinh ra cho return type chứ không phải để thay thế null, hai trạng thái hợp lệ và cái reference null phá hỏng tất cả, toàn bộ hai mươi method nhóm theo mục đích, cái bẫy orElse so với orElseGet đếm bằng số lần gọi database, map so với flatMap kèm error thật của javac, năm vị trí Optional làm code tệ đi, và ba chỗ nó thực sự thuộc về.</description>
    <pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/optional-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Functional Interfaces: Supplier, Consumer, Function and Predicate</title>
    <link>https://vnntools.com/en/blog/functional-interfaces-in-java/</link>
    <description>Functional interfaces in java.util.function on OpenJDK 21: the shape grid behind all 43 of them, what @FunctionalInterface really checks, why an abstract equals does not break single-abstract-method status, andThen versus compose, the Predicate and Consumer combinators, the primitive specialisations and the boxing they remove, and how to write your own.</description>
    <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/functional-interfaces-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Functional Interface trong Java: Supplier, Consumer, Function và Predicate</title>
    <link>https://vnntools.com/vi/blog/functional-interfaces-in-java/</link>
    <description>Functional interface trong java.util.function trên OpenJDK 21: lưới shape đứng sau cả 43 interface, @FunctionalInterface thực sự kiểm tra cái gì, vì sao một abstract equals không phá vỡ quy tắc một abstract method, andThen và compose, các combinator của Predicate và Consumer, primitive specialisation cùng phần boxing chúng loại bỏ, và cách tự viết một cái cho riêng mình.</description>
    <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/functional-interfaces-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Lambda Expressions in Java: Syntax, Target Typing and Method References</title>
    <link>https://vnntools.com/en/blog/lambda-expressions-in-java/</link>
    <description>Lambda expressions in Java on OpenJDK 21: every syntactic form including var parameters, target typing demonstrated by assigning one text to three interfaces, effectively-final capture with the real javac errors, what this means inside a lambda body, the four kinds of method reference, and why a bound reference evaluates its receiver eagerly.</description>
    <pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/lambda-expressions-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Lambda Expression trong Java: cú pháp, target typing và method reference</title>
    <link>https://vnntools.com/vi/blog/lambda-expressions-in-java/</link>
    <description>Lambda expression trong Java trên OpenJDK 21: đầy đủ các dạng cú pháp kể cả var parameter, target typing chứng minh bằng cách gán một đoạn text cho ba interface, luật effectively final khi capture kèm error thật của javac, this bên trong lambda, bốn loại method reference, và vì sao bound reference đánh giá receiver ngay lập tức.</description>
    <pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/lambda-expressions-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] The Java Stream API: map, filter, reduce and collect</title>
    <link>https://vnntools.com/en/blog/java-stream-api/</link>
    <description>The Java Stream API on OpenJDK 21: the source-intermediate-terminal pipeline, laziness proved with an interleaved println trace, map, filter, all three reduce overloads, collect and the Collectors factory, primitive streams and the allocation cost of boxing, and the traps around peek, findAny, stateful lambdas and parallelStream.</description>
    <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/java-stream-api/</guid>
  </item>
  <item>
    <title>[Advanced Java] Stream API trong Java: map, filter, reduce và collect</title>
    <link>https://vnntools.com/vi/blog/java-stream-api/</link>
    <description>Stream API của Java trên OpenJDK 21: pipeline gồm source, intermediate và terminal, tính lazy được chứng minh bằng trace println xen kẽ, map, filter, cả ba overload của reduce, collect cùng bộ Collectors, primitive stream và chi phí allocation của boxing, và các bẫy quanh peek, findAny, lambda có state cùng parallelStream.</description>
    <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/java-stream-api/</guid>
  </item>
  <item>
    <title>[Advanced Java] The Collections Utility Class: Algorithms, Wrappers and Factories</title>
    <link>https://vnntools.com/en/blog/collections-utility-class-in-java/</link>
    <description>java.util.Collections on OpenJDK 21 organised by what its methods actually are: in-place algorithms including the binarySearch insertion point trick, nCopies returning one reference n times, the unmodifiable, synchronized and checked wrappers that are views rather than copies, checkedList catching heap pollution at insertion, and the immutable factories that replace half of them.</description>
    <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/collections-utility-class-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Class Collections trong Java: algorithm, wrapper và factory</title>
    <link>https://vnntools.com/vi/blog/collections-utility-class-in-java/</link>
    <description>java.util.Collections trên OpenJDK 21 sắp xếp theo đúng bản chất từng nhóm method: các algorithm ghi đè tại chỗ cùng mẹo insertion point của binarySearch, nCopies trả về một reference lặp n lần, ba wrapper unmodifiable, synchronized và checked vốn là view chứ không phải bản copy, checkedList bắt heap pollution ngay lúc insert, và các immutable factory đã thay thế phân nửa số method cũ.</description>
    <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/collections-utility-class-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Comparable vs Comparator in Java: Natural Ordering and Custom Sorting</title>
    <link>https://vnntools.com/en/blog/comparable-vs-comparator-in-java/</link>
    <description>Comparable and Comparator on OpenJDK 21: the full compareTo contract, the Comparator factory and combinator API, why reversed flips every key composed so far, the int subtraction overflow bug, the TimSort IllegalArgumentException that only fires on large inputs, null keys, and sorting stability measured in comparator invocations.</description>
    <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/comparable-vs-comparator-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Comparable vs Comparator trong Java: Natural Ordering và Sắp Xếp Tùy Chỉnh</title>
    <link>https://vnntools.com/vi/blog/comparable-vs-comparator-in-java/</link>
    <description>Comparable và Comparator trên OpenJDK 21: contract đầy đủ của compareTo, API factory và combinator của Comparator, vì sao reversed đảo mọi key đã compose, bug trừ hai số int, IllegalArgumentException từ TimSort chỉ nổ với input lớn, xử lý null và tính stable của sort.</description>
    <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/comparable-vs-comparator-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Iterator, ListIterator, and Fail-Fast versus Fail-Safe Iteration</title>
    <link>https://vnntools.com/en/blog/iterator-and-fail-fast-vs-fail-safe-in-java/</link>
    <description>How iteration really works in Java on OpenJDK 21: the Iterator cursor and lastRet fields, the enhanced for loop disassembled with javap, ListIterator set and add, the modCount and expectedModCount mechanism behind ConcurrentModificationException, a real case where fail-fast silently does not fire, CopyOnWriteArrayList snapshots, weakly consistent ConcurrentHashMap iterators, and writing your own Iterable.</description>
    <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/iterator-and-fail-fast-vs-fail-safe-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Iterator, ListIterator và fail-fast so với fail-safe trong Java</title>
    <link>https://vnntools.com/vi/blog/iterator-and-fail-fast-vs-fail-safe-in-java/</link>
    <description>Iteration trong Java thực sự chạy thế nào trên OpenJDK 21: hai field cursor và lastRet của Iterator, vòng lặp for nâng cao nhìn qua javap, set và add của ListIterator, cơ chế modCount và expectedModCount đằng sau ConcurrentModificationException, một trường hợp thật mà fail-fast im lặng không nổ, snapshot của CopyOnWriteArrayList, iterator weakly consistent của ConcurrentHashMap, và cách tự viết một Iterable.</description>
    <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/iterator-and-fail-fast-vs-fail-safe-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Queue, Deque, Stack and PriorityQueue in Java</title>
    <link>https://vnntools.com/en/blog/queue-deque-stack-and-priorityqueue-in-java/</link>
    <description>Queue, Deque, Stack and PriorityQueue on OpenJDK 21: the two families of Queue methods and exactly what each one does on an empty and a full queue, the full Deque method table and the stack view, why Stack extends Vector is a design mistake with both surprises demonstrated, and proof that a PriorityQueue is a binary heap whose toString and iterator are not in priority order.</description>
    <pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/queue-deque-stack-and-priorityqueue-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Queue, Deque, Stack và PriorityQueue trong Java</title>
    <link>https://vnntools.com/vi/blog/queue-deque-stack-and-priorityqueue-in-java/</link>
    <description>Queue, Deque, Stack và PriorityQueue trên OpenJDK 21: hai họ method của Queue và chính xác từng cái làm gì khi queue rỗng hoặc đầy, bảng method đầy đủ của Deque cùng cách dùng như stack, vì sao Stack extends Vector là một sai lầm thiết kế với cả hai bất ngờ được chứng minh, và bằng chứng rằng PriorityQueue là một binary heap mà toString cùng iterator đều không theo thứ tự priority.</description>
    <pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/queue-deque-stack-and-priorityqueue-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Advanced Map Implementations: TreeMap, LinkedHashMap, Hashtable and ConcurrentHashMap</title>
    <link>https://vnntools.com/en/blog/advanced-map-implementations-in-java/</link>
    <description>The Map implementations beyond HashMap on OpenJDK 21 - TreeMap and the NavigableMap methods floorEntry, ceilingKey, headMap and subMap, LinkedHashMap access order and a five-line LRU cache with removeEldestEntry, why Hashtable is legacy, and what ConcurrentHashMap actually promises about locking, weakly consistent iterators and atomic compound operations.</description>
    <pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/advanced-map-implementations-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Map nâng cao trong Java: TreeMap, LinkedHashMap, Hashtable và ConcurrentHashMap</title>
    <link>https://vnntools.com/vi/blog/advanced-map-implementations-in-java/</link>
    <description>Các Map implementation ngoài HashMap trên OpenJDK 21 - TreeMap cùng các method NavigableMap floorEntry, ceilingKey, headMap và subMap, access order của LinkedHashMap và LRU cache năm dòng với removeEldestEntry, vì sao Hashtable là legacy, và ConcurrentHashMap thực sự cam kết gì về lock, weakly consistent iterator và các compound operation atomic.</description>
    <pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/advanced-map-implementations-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Set Implementations in Java: HashSet, LinkedHashSet and TreeSet</title>
    <link>https://vnntools.com/en/blog/set-implementations-in-java/</link>
    <description>HashSet, LinkedHashSet and TreeSet on OpenJDK 21: what a Set actually guarantees, the HashMap hiding inside HashSet, NavigableSet lookups, the two different rules that decide a duplicate, compareTo that disagrees with equals, ClassCastException and null in a TreeSet, EnumSet, and why removeAll can go quadratic.</description>
    <pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/set-implementations-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Set trong Java: HashSet, LinkedHashSet và TreeSet</title>
    <link>https://vnntools.com/vi/blog/set-implementations-in-java/</link>
    <description>HashSet, LinkedHashSet và TreeSet trên OpenJDK 21: Set thực sự đảm bảo điều gì, HashMap ẩn bên trong HashSet, các lookup của NavigableSet, hai quy tắc khác nhau để quyết định duplicate, compareTo mâu thuẫn với equals, ClassCastException và null trong TreeSet, EnumSet, và vì sao removeAll có thể thành quadratic.</description>
    <pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/set-implementations-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] ArrayList vs LinkedList vs Vector: Comparing List Implementations</title>
    <link>https://vnntools.com/en/blog/arraylist-vs-linkedlist-vs-vector/</link>
    <description>A structural comparison of the three List implementations on OpenJDK 21, without benchmark timings: the real per-element memory cost read out of the JVM with Unsafe field offsets, instrumented copy and pointer-hop counts for insert and remove at the head, middle and tail, the RandomAccess marker and the JDK algorithms that branch on it, Vector every-method synchronization and the check-then-act hole it leaves, doubling versus 1.5x growth read out of the backing array, ensureCapacity and trimToSize, and what to use instead of Vector.</description>
    <pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/arraylist-vs-linkedlist-vs-vector/</guid>
  </item>
  <item>
    <title>[Advanced Java] ArrayList vs LinkedList vs Vector: So sánh các implementation của List</title>
    <link>https://vnntools.com/vi/blog/arraylist-vs-linkedlist-vs-vector/</link>
    <description>So sánh ba implementation của List trên OpenJDK 21 dựa trên cấu trúc, không dùng con số benchmark thời gian: chi phí bộ nhớ thật cho mỗi element đọc từ JVM qua field offset của Unsafe, số element copy và số bước nhảy pointer khi thêm và xóa ở đầu, giữa, cuối, marker interface RandomAccess và những thuật toán trong JDK rẽ nhánh theo nó, cơ chế synchronized trên mọi method của Vector cùng lỗ hổng check-then-act, chính sách tăng capacity gấp đôi so với 1.5x đọc từ backing array, ensureCapacity và trimToSize, và nên dùng gì thay cho Vector.</description>
    <pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/arraylist-vs-linkedlist-vs-vector/</guid>
  </item>
  <item>
    <title>[Advanced Java] Common Design Patterns in Java: Singleton, Factory, Builder, Observer and Strategy</title>
    <link>https://vnntools.com/en/blog/common-design-patterns-in-java/</link>
    <description>Five design patterns in Java on OpenJDK 21, each one demonstrated inside the JDK itself and each one shown where it does damage: singleton initialisation and the race an unsynchronised null check loses, Integer.valueOf and its cache, a staged builder the compiler checks, a listener that leaks and a listener that stops the broadcast, and Comparator as the strategy type you have already been using.</description>
    <pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/common-design-patterns-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Design Pattern phổ biến trong Java: Singleton, Factory, Builder, Observer và Strategy</title>
    <link>https://vnntools.com/vi/blog/common-design-patterns-in-java/</link>
    <description>Năm design pattern trong Java trên OpenJDK 21, mỗi pattern đều được chỉ ra ngay bên trong JDK và đều kèm trường hợp nó gây hại: initialization của singleton và cuộc đua mà null check không đồng bộ thua, Integer.valueOf cùng cache của nó, staged builder được compiler kiểm tra, listener gây leak và listener làm dừng cả lượt broadcast, và Comparator chính là strategy type bạn vẫn dùng hằng ngày.</description>
    <pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/common-design-patterns-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] SOLID Principles in Java: Five Rules and When to Break Them</title>
    <link>https://vnntools.com/en/blog/solid-principles-in-java/</link>
    <description>The five SOLID principles in Java on OpenJDK 21, each with a before and after that compiles and runs: a class split by its reasons to change, a growing switch replaced by an interface, a subclass that breaks its caller with no warning, an UnsupportedOperationException the compiler could have prevented, a class that cannot run without a file, and where each principle stops paying for itself.</description>
    <pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/solid-principles-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Nguyên lý SOLID trong Java: Năm quy tắc và khi nào nên bỏ qua</title>
    <link>https://vnntools.com/vi/blog/solid-principles-in-java/</link>
    <description>Năm nguyên lý SOLID trong Java trên OpenJDK 21, mỗi nguyên lý một cặp before/after compile và chạy được: một class tách theo lý do thay đổi, một switch phình to thay bằng interface, một subclass phá caller mà không có warning nào, một UnsupportedOperationException lẽ ra compiler đã chặn được, một class không chạy nổi nếu thiếu file, và chỗ mà mỗi nguyên lý không còn đáng để áp dụng.</description>
    <pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/solid-principles-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Generics in Java: Type Parameters, Bounded Types, Wildcards and Type Erasure</title>
    <link>https://vnntools.com/en/blog/generics-in-java/</link>
    <description>Generics in Java on OpenJDK 21: the pre-generics Object container and the ClassCastException it produced, writing generic classes and generic methods, bounded and multiply-bounded type parameters, wildcards and PECS with the exact javac errors, type erasure proved with javap, the Signature attribute, bridge methods, and what SuppressWarnings unchecked really promises.</description>
    <pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/generics-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Generics trong Java: type parameter, bounded type, wildcard và type erasure</title>
    <link>https://vnntools.com/vi/blog/generics-in-java/</link>
    <description>Generics trong Java trên OpenJDK 21: container Object thời chưa có generics và ClassCastException mà nó sinh ra, cách viết generic class và generic method, bounded type parameter và nhiều bound, wildcard cùng PECS với đúng message lỗi của javac, type erasure chứng minh bằng javap, Signature attribute, bridge method, và lời hứa thật sự của SuppressWarnings unchecked.</description>
    <pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/generics-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Advanced Enums in Java: Constructors, Constant Bodies, EnumMap and the Enum Singleton</title>
    <link>https://vnntools.com/en/blog/advanced-enums-in-java/</link>
    <description>Advanced enums in Java on OpenJDK 21: what javap shows an enum actually compiles to, fields and the implicitly private constructor, constant-specific class bodies and the extra class files they emit, abstract methods, enums implementing interfaces, EnumMap and EnumSet, exhaustive switch, the enum singleton reflection refuses to break, an enum state machine, and the ordinal and values() traps.</description>
    <pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/advanced-enums-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Enum nâng cao trong Java: constructor, constant body, EnumMap và enum singleton</title>
    <link>https://vnntools.com/vi/blog/advanced-enums-in-java/</link>
    <description>Enum nâng cao trong Java trên OpenJDK 21: javap cho thấy enum thực sự compile ra cái gì, field và constructor private ngầm định, constant-specific class body cùng những file class sinh thêm, abstract method, enum implement interface, EnumMap và EnumSet, switch exhaustive, enum singleton mà reflection không phá được, state machine bằng enum, và các bẫy quanh ordinal với values().</description>
    <pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/advanced-enums-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Nested, Inner, Local and Anonymous Classes in Java</title>
    <link>https://vnntools.com/en/blog/nested-and-inner-classes-in-java/</link>
    <description>Static nested, inner, local and anonymous classes in Java on OpenJDK 21: the synthetic this$0 field proved with javap, Outer.this and outer.new Inner(), the memory leak an inner class causes, effectively final capture, the Outer$1 class file, and a concrete comparison of anonymous classes against lambdas.</description>
    <pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/nested-and-inner-classes-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] Nested class, Inner class, Local class và Anonymous class trong Java</title>
    <link>https://vnntools.com/vi/blog/nested-and-inner-classes-in-java/</link>
    <description>Static nested, inner, local và anonymous class trong Java trên OpenJDK 21: field synthetic this$0 nhìn thấy bằng javap, Outer.this và outer.new Inner(), memory leak do inner class gây ra, luật effectively final khi capture, class file Outer$1, và so sánh cụ thể giữa anonymous class với lambda.</description>
    <pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/nested-and-inner-classes-in-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] The Four OOP Principles in Depth: Where Object Designs Go Wrong</title>
    <link>https://vnntools.com/en/blog/four-oop-principles-in-depth-java/</link>
    <description>The four OOP principles in Java taken past the definitions on OpenJDK 21: encapsulation enforced by behaviour instead of accessors, the inherited method that walks around a subclass guard, the delegation rewrite, switching on types you own versus types you do not, a leaky abstraction in a signature, and a subclass that compiles, passes its own test and still breaks its caller.</description>
    <pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/four-oop-principles-in-depth-java/</guid>
  </item>
  <item>
    <title>[Advanced Java] 4 tính chất OOP dưới góc nhìn nâng cao: thiết kế object sai ở đâu</title>
    <link>https://vnntools.com/vi/blog/four-oop-principles-in-depth-java/</link>
    <description>4 tính chất OOP trong Java nhìn xa hơn phần định nghĩa, trên OpenJDK 21: encapsulation bảo đảm bằng behaviour thay vì accessor, method được inherit đi vòng qua guard của subclass, cách viết lại bằng delegation, switch theo type bạn sở hữu và type bạn không sở hữu, abstraction rò rỉ ngay trong signature, và một subclass compile được, test của nó pass, vẫn làm hỏng caller.</description>
    <pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/four-oop-principles-in-depth-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Java Clean Code Best Practices for Beginners</title>
    <link>https://vnntools.com/en/blog/java-clean-code-best-practices/</link>
    <description>Clean code practices for Java beginners, with Java 21 examples: naming conventions the JDK itself follows, real javac -Xlint:all warnings, magic numbers, extracting a long method in stages that keep the output identical, guard clauses, == against equals, getters that leak state, and the code smells worth recognising early.</description>
    <pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/java-clean-code-best-practices/</guid>
  </item>
  <item>
    <title>[Java Basics] Best Practice Code Sạch trong Java cho Người Mới</title>
    <link>https://vnntools.com/vi/blog/java-clean-code-best-practices/</link>
    <description>Best practice code sạch cho người mới học Java, ví dụ trên Java 21: naming convention mà chính JDK đang theo, warning thật từ javac -Xlint:all, magic number, tách method dài theo từng bước giữ nguyên output, guard clause, == và equals, getter làm lộ state, và những code smell nên nhận ra sớm.</description>
    <pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/java-clean-code-best-practices/</guid>
  </item>
  <item>
    <title>[Java Basics] A Student Manager Console App: The Capstone Project</title>
    <link>https://vnntools.com/en/blog/java-student-manager-console-project/</link>
    <description>A complete console application in Java, built only from what this course has taught: an immutable domain class with validation, a small exception hierarchy, an in-memory repository backed by a list and a map, text-file persistence behind an interface, and a menu loop that survives every bad input thrown at it.</description>
    <pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/java-student-manager-console-project/</guid>
  </item>
  <item>
    <title>[Java Basics] Dự án tổng hợp: app quản lý sinh viên trên console</title>
    <link>https://vnntools.com/vi/blog/java-student-manager-console-project/</link>
    <description>Một ứng dụng console hoàn chỉnh viết bằng Java, chỉ dùng những gì cả khóa đã dạy: class domain bất biến tự kiểm tra dữ liệu, một cây exception nhỏ, repository trong bộ nhớ dựa trên list và map, lưu trữ ra file text sau một interface, và menu loop sống sót trước mọi input sai.</description>
    <pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/java-student-manager-console-project/</guid>
  </item>
  <item>
    <title>[Java Basics] Read and Write Text Files in Java</title>
    <link>https://vnntools.com/en/blog/read-and-write-text-files-in-java/</link>
    <description>Reading and writing text files in Java: FileReader and FileWriter, why BufferedReader and BufferedWriter matter, try-with-resources, the modern Files and Path API, relative paths, the real exceptions when a file is missing, and the character encoding that decides whether the round trip survives.</description>
    <pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/read-and-write-text-files-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Đọc và ghi file text trong Java</title>
    <link>https://vnntools.com/vi/blog/read-and-write-text-files-in-java/</link>
    <description>Đọc và ghi file text trong Java: FileReader và FileWriter, vì sao cần BufferedReader và BufferedWriter, try-with-resources, API hiện đại Files và Path, đường dẫn tương đối, các exception thật khi file không tồn tại, và character encoding quyết định dữ liệu tiếng Việt có sống sót hay không.</description>
    <pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/read-and-write-text-files-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] HashMap in Java: put, get, merge and the hashCode/equals Contract</title>
    <link>https://vnntools.com/en/blog/hashmap-in-java/</link>
    <description>How HashMap works in Java - put, get, containsKey, remove, getOrDefault, putIfAbsent, merge and computeIfAbsent, iterating with entrySet, buckets and hash distribution, and the hashCode/equals contract that decides whether a key can be found again.</description>
    <pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/hashmap-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] HashMap trong Java: put, get, merge và quy tắc hashCode/equals</title>
    <link>https://vnntools.com/vi/blog/hashmap-in-java/</link>
    <description>HashMap trong Java hoạt động ra sao - put, get, containsKey, remove, getOrDefault, putIfAbsent, merge và computeIfAbsent, duyệt bằng entrySet, bucket và cách phân bố hash, cùng quy tắc hashCode/equals quyết định một key có tìm lại được hay không.</description>
    <pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/hashmap-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] ArrayList and LinkedList in Java: Working with Collections</title>
    <link>https://vnntools.com/en/blog/arraylist-and-linkedlist-in-java/</link>
    <description>A practical guide to basic collections in Java - the Collection and List interfaces, the real ArrayList capacity growth read out of elementData, how LinkedList walks its nodes, add, get, set, remove, contains, indexOf, size and isEmpty, iterating with Iterator and removeIf, ConcurrentModificationException, the remove(int) versus remove(Object) trap, and why the usual LinkedList performance advice is wrong. Examples use Java 21.</description>
    <pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/arraylist-and-linkedlist-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] ArrayList và LinkedList trong Java: Làm việc với Collection</title>
    <link>https://vnntools.com/vi/blog/arraylist-and-linkedlist-in-java/</link>
    <description>Hướng dẫn thực dụng về collection cơ bản trong Java - interface Collection và List, cách ArrayList tăng capacity đọc trực tiếp từ elementData, cách LinkedList đi qua từng node, add, get, set, remove, contains, indexOf, size và isEmpty, duyệt bằng Iterator và removeIf, ConcurrentModificationException, cái bẫy remove(int) với remove(Object), và vì sao lời khuyên quen thuộc về LinkedList là sai. Ví dụ dùng Java 21.</description>
    <pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/arraylist-and-linkedlist-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Custom Exceptions in Java: Writing Your Own Exception Types</title>
    <link>https://vnntools.com/en/blog/custom-exceptions-in-java/</link>
    <description>How to write a custom exception class in Java: extends Exception versus extends RuntimeException and what each really costs the caller, the four Throwable constructors, carrying structured data as fields, chaining a cause and reading the Caused by section and its ... N more line, exception translation at an API boundary, and when IllegalArgumentException already says everything you wanted to say.</description>
    <pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/custom-exceptions-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Custom Exception trong Java: tự viết exception type của bạn</title>
    <link>https://vnntools.com/vi/blog/custom-exceptions-in-java/</link>
    <description>Cách viết một custom exception class trong Java: chọn extends Exception hay extends RuntimeException và cái giá thật sự của mỗi lựa chọn, bốn constructor của Throwable, mang dữ liệu có cấu trúc bằng field, chain cause và đọc phần Caused by cùng dòng ... N more, translate exception tại ranh giới API, và khi nào IllegalArgumentException đã nói đủ rồi.</description>
    <pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/custom-exceptions-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Exception Handling in Java: try, catch, finally, throw and throws</title>
    <link>https://vnntools.com/en/blog/exception-handling-in-java/</link>
    <description>Exception handling in Java, with Java 21 examples: the Throwable hierarchy, try-catch-finally and what finally really guarantees, multi-catch and catch ordering, throw versus throws, checked versus unchecked exceptions, stack unwinding and how to read a stack trace, plus the traps — the empty catch, catch (Exception e), and return inside finally.</description>
    <pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/exception-handling-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Xử lý exception trong Java: try, catch, finally, throw và throws</title>
    <link>https://vnntools.com/vi/blog/exception-handling-in-java/</link>
    <description>Xử lý exception trong Java qua ví dụ trên Java 21: cây Throwable, try-catch-finally và điều finally thực sự bảo đảm, multi-catch và thứ tự các block catch, throw khác throws, checked khác unchecked, stack unwinding và cách đọc stack trace, cùng những cái bẫy — catch rỗng, catch (Exception e), và return trong finally.</description>
    <pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/exception-handling-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Interfaces in Java, and How They Differ from Abstract Classes</title>
    <link>https://vnntools.com/en/blog/interfaces-in-java/</link>
    <description>Interfaces in Java, with Java 21 examples: implements versus extends, implicit public static final members, one class with many interfaces, default, static and private methods, the diamond problem and Interface.super, the class-wins rule, functional interfaces, and a precise comparison against abstract classes.</description>
    <pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/interfaces-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Interface trong Java và so sánh với abstract class</title>
    <link>https://vnntools.com/vi/blog/interfaces-in-java/</link>
    <description>Interface trong Java qua ví dụ trên Java 21: implements khác extends thế nào, member ngầm định public static final, một class implement nhiều interface, default, static và private method, diamond problem và Interface.super, luật class-wins, functional interface, cùng bảng so sánh chi tiết với abstract class.</description>
    <pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/interfaces-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Abstraction in Java: Abstract Classes and Abstract Methods</title>
    <link>https://vnntools.com/en/blog/abstract-classes-in-java/</link>
    <description>Abstract classes and abstract methods in Java: why Shape cannot be instantiated, what an abstract class still holds, the template method pattern, anonymous subclasses, constructor order, and the compile errors each mistake produces in Java 21.</description>
    <pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/abstract-classes-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Tính trừu tượng trong Java: abstract class và abstract method</title>
    <link>https://vnntools.com/vi/blog/abstract-classes-in-java/</link>
    <description>Abstract class và abstract method trong Java: vì sao không tạo được object của Shape, abstract class chứa được những gì, template method pattern, anonymous subclass, thứ tự constructor, cùng các compile error mà từng lỗi sai sinh ra trong Java 21.</description>
    <pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/abstract-classes-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Polymorphism in Java: Overriding vs Overloading</title>
    <link>https://vnntools.com/en/blog/polymorphism-in-java/</link>
    <description>Polymorphism in Java explained with Java 21 examples: method overriding rules, @Override, dynamic dispatch proved with javap, overriding versus overloading, field hiding, static hiding, upcasting and downcasting, and the constructor trap.</description>
    <pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/polymorphism-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Tính đa hình trong Java: overriding và overloading</title>
    <link>https://vnntools.com/vi/blog/polymorphism-in-java/</link>
    <description>Tính đa hình trong Java qua ví dụ trên Java 21: quy tắc method overriding, @Override, dynamic dispatch chứng minh bằng javap, overriding và overloading, field hiding, static hiding, upcasting và downcasting, cùng cái bẫy trong constructor.</description>
    <pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/polymorphism-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Inheritance in Java: extends and super</title>
    <link>https://vnntools.com/en/blog/inheritance-in-java/</link>
    <description>How extends works in Java, what a subclass inherits and what it does not, why constructors are never inherited, how super(...) chains constructors up to java.lang.Object and back down, field hiding versus overriding, protected across packages, final classes, the fragile base class problem, and when composition is the better answer.</description>
    <pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/inheritance-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Tính kế thừa trong Java: extends và super</title>
    <link>https://vnntools.com/vi/blog/inheritance-in-java/</link>
    <description>extends hoạt động thế nào, subclass kế thừa gì và không kế thừa gì, vì sao constructor không bao giờ được kế thừa, super(...) xâu chuỗi constructor lên tới java.lang.Object rồi chạy ngược xuống ra sao, field hiding khác overriding chỗ nào, protected qua package, final class, vấn đề fragile base class, và khi nào composition là lựa chọn đúng.</description>
    <pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/inheritance-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Encapsulation in Java: Access Modifiers, Getters and Setters</title>
    <link>https://vnntools.com/en/blog/encapsulation-in-java/</link>
    <description>Encapsulation in Java: the four access modifiers demonstrated across two real packages, the protected rule most tutorials state wrongly, getters that leak a mutable field, defensive copies, immutable classes and records, with the javac error each mistake produces in Java 21.</description>
    <pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/encapsulation-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Tính đóng gói trong Java: access modifier, getter và setter</title>
    <link>https://vnntools.com/vi/blog/encapsulation-in-java/</link>
    <description>Tính đóng gói (encapsulation) trong Java: bốn access modifier demo trên hai package thật, quy tắc protected mà phần lớn tài liệu nói sai, getter làm lộ mutable field, defensive copy, immutable class và record, cùng error của javac mà từng lỗi sai gây ra trong Java 21.</description>
    <pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/encapsulation-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] The this, static and final Keywords in Java</title>
    <link>https://vnntools.com/en/blog/this-static-and-final-in-java/</link>
    <description>The Java keywords this, static and final on JDK 21 — what this binds to, why a static field is shared by every object, static initialiser order, compile-time constant inlining shown with javap, and why final never makes an object immutable.</description>
    <pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/this-static-and-final-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Từ khóa this, static và final trong Java</title>
    <link>https://vnntools.com/vi/blog/this-static-and-final-in-java/</link>
    <description>Ba từ khóa this, static và final trong Java trên JDK 21 — this trỏ vào đâu, vì sao static field dùng chung cho mọi object, thứ tự static initialiser, constant inlining soi bằng javap, và vì sao final không hề làm object immutable.</description>
    <pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/this-static-and-final-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Fields, Methods and Constructors in Java</title>
    <link>https://vnntools.com/en/blog/fields-methods-and-constructors-in-java/</link>
    <description>Fields, instance methods and constructors in Java: default field values, field initialisers, constructor overloading and this(...) chaining, the exact initialisation order proved with print statements, and every real javac error from writing void on a constructor to putting this(...) second.</description>
    <pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/fields-methods-and-constructors-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Field, method và constructor trong Java</title>
    <link>https://vnntools.com/vi/blog/fields-methods-and-constructors-in-java/</link>
    <description>Field, instance method và constructor trong Java: giá trị default của field, field initialiser, overloading constructor và chaining bằng this(...), thứ tự khởi tạo chứng minh bằng lệnh in, cùng mọi error message thật của javac từ việc viết void trước constructor tới việc đặt this(...) không phải đầu tiên.</description>
    <pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/fields-methods-and-constructors-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Classes and Objects in Java: The Foundation of OOP</title>
    <link>https://vnntools.com/en/blog/classes-and-objects-in-java/</link>
    <description>Classes and objects in Java: what a class defines, what new really does step by step, zero-initialised fields, references and aliasing, null and the helpful NullPointerException, instance methods, toString, equals versus ==, and the one-class-per-file rule, all in Java 21.</description>
    <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/classes-and-objects-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Class và Object trong Java: nền tảng của lập trình hướng đối tượng</title>
    <link>https://vnntools.com/vi/blog/classes-and-objects-in-java/</link>
    <description>Class và object trong Java: class định nghĩa cái gì, new thực sự làm gì theo từng bước, field được zero-init, reference và aliasing, null cùng helpful NullPointerException, instance method, toString, equals so với ==, và quy tắc một public class một file, tất cả trên Java 21.</description>
    <pubDate>Sat, 08 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/classes-and-objects-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Recursion in Java: How It Works and When to Use It</title>
    <link>https://vnntools.com/en/blog/recursion-in-java/</link>
    <description>How recursion works in Java: the base case and the recursive case, factorial traced frame by frame, a real StackOverflowError from a missing base case, recursion depth and -Xss, why naive Fibonacci needs 2692537 calls for fib(30) while memoisation needs 59, recursion versus iteration, and why the JVM does not optimise tail calls.</description>
    <pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/recursion-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Đệ quy trong Java: cách hoạt động và khi nào nên dùng</title>
    <link>https://vnntools.com/vi/blog/recursion-in-java/</link>
    <description>Đệ quy trong Java hoạt động ra sao: base case và recursive case, trace factorial theo từng frame, StackOverflowError thật khi thiếu base case, độ sâu đệ quy và -Xss, vì sao Fibonacci naive cần 2692537 lời gọi cho fib(30) trong khi memoisation chỉ cần 59, đệ quy so với vòng lặp, và vì sao JVM không tối ưu tail call.</description>
    <pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/recursion-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Variable Scope in Java: Local, Field and Static</title>
    <link>https://vnntools.com/en/blog/variable-scope-in-java/</link>
    <description>Variable scope in Java explained: local variables, parameters, instance fields and static fields, block scope, shadowing, definite assignment and lifetime, with the cannot find symbol error each mistake produces in Java 21.</description>
    <pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/variable-scope-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Phạm vi biến trong Java: biến cục bộ, field và static</title>
    <link>https://vnntools.com/vi/blog/variable-scope-in-java/</link>
    <description>Scope của variable trong Java: local variable, parameter, instance field và static field, block scope, shadowing, definite assignment và lifetime, cùng lỗi cannot find symbol mà từng lỗi sai gây ra trong Java 21.</description>
    <pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/variable-scope-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Method Parameters, Return Values and Overloading in Java</title>
    <link>https://vnntools.com/en/blog/method-parameters-return-values-and-overloading-in-java/</link>
    <description>Java method parameters, return values and overloading explained: why Java is always pass-by-value, why swap does not work, the four phases of overload resolution, varargs rules, and the compile errors each mistake produces in Java 21.</description>
    <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/method-parameters-return-values-and-overloading-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Tham số, giá trị trả về và overloading trong Java</title>
    <link>https://vnntools.com/vi/blog/method-parameters-return-values-and-overloading-in-java/</link>
    <description>Parameter, giá trị trả về và overloading trong Java: vì sao Java luôn là pass-by-value, vì sao swap không chạy được, bốn phase của overload resolution, quy tắc varargs, cùng các compile error mà từng lỗi sai sinh ra trong Java 21.</description>
    <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/method-parameters-return-values-and-overloading-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Methods in Java: Declaring and Calling Them</title>
    <link>https://vnntools.com/en/blog/methods-in-java/</link>
    <description>How to declare and call a method in Java: the parts of a declaration, static versus instance methods and the non-static method cannot be referenced from a static context error, the return statement, the call stack and StackOverflowError, reading a stack trace, Javadoc, and the real compiler errors beginners hit.</description>
    <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/methods-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Phương thức trong Java: khai báo và gọi method</title>
    <link>https://vnntools.com/vi/blog/methods-in-java/</link>
    <description>Cách khai báo và gọi method trong Java: các thành phần của một declaration, static method so với instance method và lỗi non-static method cannot be referenced from a static context, return statement, call stack và StackOverflowError, cách đọc stack trace, Javadoc, cùng những lỗi compiler thật mà người mới hay gặp.</description>
    <pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/methods-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] String vs StringBuilder vs StringBuffer: Which One to Use</title>
    <link>https://vnntools.com/en/blog/string-stringbuilder-and-stringbuffer-in-java/</link>
    <description>When to use String, StringBuilder or StringBuffer in Java: what javac really emits for +, how the internal buffer grows, what synchronized costs, and the measured allocation counts behind each choice.</description>
    <pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/string-stringbuilder-and-stringbuffer-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] String, StringBuilder và StringBuffer: khi nào dùng cái nào</title>
    <link>https://vnntools.com/vi/blog/string-stringbuilder-and-stringbuffer-in-java/</link>
    <description>Khi nào dùng String, StringBuilder hay StringBuffer trong Java: javac thực sự sinh ra gì cho dấu +, buffer bên trong lớn lên ra sao, synchronized tốn gì, kèm số liệu đếm thật cho từng lựa chọn.</description>
    <pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/string-stringbuilder-and-stringbuffer-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Basic Array Algorithms in Java: Max, Min, Search and Sort</title>
    <link>https://vnntools.com/en/blog/array-algorithms-in-java/</link>
    <description>Max, min, sum, average, filtering, reversing, linear and binary search, bubble, selection and insertion sort, and Arrays.sort in Java - every algorithm instrumented with comparison and swap counters.</description>
    <pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/array-algorithms-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Các thuật toán cơ bản với mảng trong Java: tìm max/min, tìm kiếm và sắp xếp</title>
    <link>https://vnntools.com/vi/blog/array-algorithms-in-java/</link>
    <description>Tìm max, min, tổng, trung bình, lọc, đảo mảng, linear search và binary search, bubble/selection/insertion sort và Arrays.sort trong Java - mọi thuật toán đều được đo bằng counter comparison và swap.</description>
    <pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/array-algorithms-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Multidimensional and Jagged Arrays in Java</title>
    <link>https://vnntools.com/en/blog/multidimensional-arrays-in-java/</link>
    <description>How 2D arrays really work in Java - an array of arrays, not a rectangle: creating and traversing a grid, jagged rows, deepToString, deepEquals, shallow vs deep copy, 3D arrays and a worked matrix example.</description>
    <pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/multidimensional-arrays-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Mảng nhiều chiều trong Java</title>
    <link>https://vnntools.com/vi/blog/multidimensional-arrays-in-java/</link>
    <description>Mảng nhiều chiều trong Java thực chất là array của array chứ không phải hình chữ nhật - cách tạo và duyệt grid, jagged array, deepToString, deepEquals, shallow vs deep copy, mảng 3 chiều và ví dụ matrix.</description>
    <pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/multidimensional-arrays-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Arrays in Java: Declaring, Initializing and Traversing</title>
    <link>https://vnntools.com/en/blog/arrays-in-java/</link>
    <description>A complete guide to one-dimensional arrays in Java - every declaration form, default values, the length field, indexing and ArrayIndexOutOfBoundsException, indexed and for-each traversal, the reference trap, real copies with Arrays.copyOf and System.arraycopy, and Arrays.equals.</description>
    <pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/arrays-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Mảng một chiều trong Java: khai báo, khởi tạo và duyệt mảng</title>
    <link>https://vnntools.com/vi/blog/arrays-in-java/</link>
    <description>Hướng dẫn đầy đủ về mảng một chiều trong Java - mọi cách khai báo, giá trị mặc định, field length, index và ArrayIndexOutOfBoundsException, duyệt mảng bằng for và for-each, cái bẫy reference, copy thật với Arrays.copyOf và System.arraycopy, cùng Arrays.equals.</description>
    <pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/arrays-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Practice Exercises: Conditions and Loops</title>
    <link>https://vnntools.com/en/blog/java-exercises-conditions-and-loops/</link>
    <description>Sixteen graded Java practice exercises on if, else if and loops: FizzBuzz, leap year, factorial overflow, digit reversal, prime checking, star patterns, printf grids, menu and validation loops, each with the expected output, a hint and the mistake most people make.</description>
    <pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/java-exercises-conditions-and-loops/</guid>
  </item>
  <item>
    <title>[Java Basics] Bài tập tổng hợp về câu lệnh điều kiện và vòng lặp</title>
    <link>https://vnntools.com/vi/blog/java-exercises-conditions-and-loops/</link>
    <description>Mười sáu bài tập Java về if, else if và vòng lặp: FizzBuzz, năm nhuận, giai thừa tràn số, đảo chữ số, kiểm tra số nguyên tố, vẽ hình sao, canh cột bằng printf, menu và validate input, mỗi bài đều có output cần đạt, gợi ý và lỗi thường gặp.</description>
    <pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/java-exercises-conditions-and-loops/</guid>
  </item>
  <item>
    <title>[Java Basics] Nested Loops, break and continue in Java</title>
    <link>https://vnntools.com/en/blog/nested-loops-break-and-continue-in-java/</link>
    <description>Nested loops in Java and the two keywords that cut them short: how many times the inner body runs, break leaving only the innermost loop, continue skipping the update in a while loop, labelled break and continue, and the switch-inside-a-loop trap.</description>
    <pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/nested-loops-break-and-continue-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Vòng lặp lồng nhau, break và continue trong Java</title>
    <link>https://vnntools.com/vi/blog/nested-loops-break-and-continue-in-java/</link>
    <description>Vòng lặp lồng nhau trong Java và hai keyword cắt ngang vòng lặp: số lần thân vòng lặp trong chạy, break chỉ thoát vòng lặp gần nhất, continue bỏ qua update trong while, labeled break và continue, cùng bẫy switch nằm trong loop.</description>
    <pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/nested-loops-break-and-continue-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Loops in Java: for, while and do-while</title>
    <link>https://vnntools.com/en/blog/loops-in-java/</link>
    <description>Loops in Java: the exact execution order of a for header, while vs do-while, the enhanced for and why it cannot write back, off-by-one errors against length, and the three ways to write an infinite loop.</description>
    <pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/loops-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Vòng lặp trong Java: for, while và do-while</title>
    <link>https://vnntools.com/vi/blog/loops-in-java/</link>
    <description>Vòng lặp trong Java: thứ tự thực thi chính xác của header for, while so với do-while, enhanced for và lý do nó không ghi ngược vào array, lỗi off-by-one với length, và ba cách tạo ra vòng lặp vô hạn.</description>
    <pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/loops-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Conditional Statements in Java: if, else if, else and switch</title>
    <link>https://vnntools.com/en/blog/conditional-statements-in-java/</link>
    <description>Conditional statements in Java: the if / else if / else chain, why braces matter, the dangling else, boolean-only conditions, switch with break and fall-through, arrow labels, switch expressions with yield, and pattern matching in Java 21.</description>
    <pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/conditional-statements-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Câu lệnh điều kiện trong Java: if, else if, else và switch</title>
    <link>https://vnntools.com/vi/blog/conditional-statements-in-java/</link>
    <description>Câu lệnh điều kiện trong Java: chuỗi if / else if / else, vì sao phải có ngoặc nhọn, bẫy dangling else, điều kiện chỉ nhận boolean, switch với break và fall-through, label mũi tên, switch expression cùng yield và pattern matching của Java 21.</description>
    <pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/conditional-statements-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Reading Input in Java with Scanner (and the nextLine Trap)</title>
    <link>https://vnntools.com/en/blog/input-and-output-with-scanner-in-java/</link>
    <description>How to read keyboard input in Java with Scanner: nextInt vs nextLine, the empty-string trap, InputMismatchException, hasNextInt validation, the nextDouble locale trap, and printf formatting.</description>
    <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/input-and-output-with-scanner-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Nhập xuất dữ liệu trong Java với Scanner và bẫy nextLine</title>
    <link>https://vnntools.com/vi/blog/input-and-output-with-scanner-in-java/</link>
    <description>Cách nhập xuất dữ liệu trong Java với Scanner: nextInt và nextLine, bẫy chuỗi rỗng, InputMismatchException, validate bằng hasNextInt, bẫy locale của nextDouble và định dạng bằng printf.</description>
    <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/input-and-output-with-scanner-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Strings in Java: Immutability, the String Pool and the Methods You Actually Use</title>
    <link>https://vnntools.com/en/blog/strings-in-java/</link>
    <description>How String really works in Java: why it is immutable, what the string pool does to ==, and a reference for length, substring, split, replace, trim vs strip, text blocks and String.format.</description>
    <pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/strings-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Chuỗi String trong Java: tính bất biến, String pool và các method thường dùng</title>
    <link>https://vnntools.com/vi/blog/strings-in-java/</link>
    <description>String trong Java hoạt động ra sao: vì sao nó immutable, string pool ảnh hưởng thế nào tới ==, kèm bảng tra length, substring, split, replace, trim vs strip, text block và String.format.</description>
    <pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/strings-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Type Casting in Java: Implicit vs Explicit Conversion</title>
    <link>https://vnntools.com/en/blog/type-casting-in-java/</link>
    <description>Type casting in Java explained: widening vs narrowing conversion, why (byte) 300 prints 44, why byte + byte will not compile, the hidden cast inside +=, and why casting is not parsing.</description>
    <pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/type-casting-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Ép kiểu dữ liệu trong Java: implicit và explicit</title>
    <link>https://vnntools.com/vi/blog/type-casting-in-java/</link>
    <description>Ép kiểu dữ liệu trong Java: widening và narrowing, tại sao (byte) 300 in ra 44, tại sao byte cộng byte không compile được, cast ẩn bên trong += và vì sao cast không phải là parsing.</description>
    <pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/type-casting-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Operators in Java: Arithmetic, Comparison, Logical, Assignment and Ternary</title>
    <link>https://vnntools.com/en/blog/operators-in-java/</link>
    <description>A complete guide to Java operators — arithmetic, comparison, logical, assignment, bitwise and the ternary — including the integer division, remainder, floating point and short-circuit traps.</description>
    <pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/operators-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Toán tử trong Java: số học, so sánh, logic, gán và toán tử ba ngôi</title>
    <link>https://vnntools.com/vi/blog/operators-in-java/</link>
    <description>Hướng dẫn đầy đủ về toán tử trong Java — số học, so sánh, logic, gán, bitwise và ba ngôi — kèm các bẫy về chia số nguyên, số dư, số thực và short-circuit.</description>
    <pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/operators-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Variables and Data Types in Java: Primitive vs Reference</title>
    <link>https://vnntools.com/en/blog/variables-and-data-types-in-java/</link>
    <description>A complete guide to Java variables and data types - all 8 primitive types with their real ranges, reference types, stack vs heap, literals, integer overflow, var, final and autoboxing.</description>
    <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/variables-and-data-types-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Biến và kiểu dữ liệu trong Java: primitive vs reference</title>
    <link>https://vnntools.com/vi/blog/variables-and-data-types-in-java/</link>
    <description>Hướng dẫn đầy đủ về biến và kiểu dữ liệu trong Java - 8 kiểu primitive cùng range thật, reference type, stack vs heap, literal, integer overflow, var, final và autoboxing.</description>
    <pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/variables-and-data-types-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] How to Compile and Run a Java Program: javac, java and the JVM</title>
    <link>https://vnntools.com/en/blog/compile-and-run-a-java-program/</link>
    <description>A precise walkthrough of the Java build and run pipeline: javac, the .class file and its bytecode, the classpath, packages, single-file source launch, jshell, runnable jars, and how the JVM loads, verifies and JIT-compiles your code.</description>
    <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/compile-and-run-a-java-program/</guid>
  </item>
  <item>
    <title>[Java Basics] Cách biên dịch và chạy chương trình Java: javac, java và JVM</title>
    <link>https://vnntools.com/vi/blog/compile-and-run-a-java-program/</link>
    <description>Đi hết pipeline build và chạy của Java: javac, file .class và bytecode bên trong, classpath, package, chạy thẳng file source, jshell, jar chạy được, và cách JVM load, verify rồi JIT compile code của bạn.</description>
    <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/compile-and-run-a-java-program/</guid>
  </item>
  <item>
    <title>[Java Basics] Hello World in Java: The Anatomy of a .java File</title>
    <link>https://vnntools.com/en/blog/hello-world-in-java/</link>
    <description>A token-by-token breakdown of the Java Hello World program: the structure of a .java file, public static void main(String[] args), the filename rule, System.out.println and printf, escape sequences, text blocks and the first compile errors you will hit.</description>
    <pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/hello-world-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Chương trình Hello World: cấu trúc một file .java trong Java</title>
    <link>https://vnntools.com/vi/blog/hello-world-in-java/</link>
    <description>Phân tích từng token của chương trình Hello World trong Java: cấu trúc file .java, public static void main(String[] args), quy tắc tên file, System.out.println và printf, escape sequence, text block và những lỗi compile đầu tiên.</description>
    <pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/hello-world-in-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Setting Up a Java IDE and Creating Your First Project</title>
    <link>https://vnntools.com/en/blog/set-up-java-ide-and-first-project/</link>
    <description>Compare IntelliJ IDEA, Eclipse and VS Code for Java, install one, create your first Java project, understand the src/out layout, and fix the package-does-not-match-directory error.</description>
    <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/set-up-java-ide-and-first-project/</guid>
  </item>
  <item>
    <title>[Java Basics] Cài đặt IDE cho Java và tạo project đầu tiên</title>
    <link>https://vnntools.com/vi/blog/set-up-java-ide-and-first-project/</link>
    <description>So sánh IntelliJ IDEA, Eclipse và VS Code cho Java, cài một cái, tạo project Java đầu tiên, hiểu cấu trúc src/out và sửa lỗi package không khớp với thư mục.</description>
    <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/set-up-java-ide-and-first-project/</guid>
  </item>
  <item>
    <title>[Java Basics] JDK, JRE and JVM: The Difference and How to Install Java</title>
    <link>https://vnntools.com/en/blog/jdk-jre-and-jvm/</link>
    <description>The precise difference between JDK, JRE and JVM, why the standalone JRE download is gone, how to install Java 21 on macOS, Windows and Linux, and how to read UnsupportedClassVersionError.</description>
    <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/jdk-jre-and-jvm/</guid>
  </item>
  <item>
    <title>[Java Basics] JDK, JRE, JVM là gì? Phân biệt và cách cài đặt môi trường Java</title>
    <link>https://vnntools.com/vi/blog/jdk-jre-and-jvm/</link>
    <description>Phân biệt chính xác JDK, JRE và JVM, vì sao không còn bản JRE riêng để tải, cách cài Java 21 trên macOS, Windows, Linux và cách đọc lỗi UnsupportedClassVersionError.</description>
    <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/jdk-jre-and-jvm/</guid>
  </item>
  <item>
    <title>[Java Basics] What is Java? History, Key Features, and Why It Is Still Worth Learning</title>
    <link>https://vnntools.com/en/blog/what-is-java/</link>
    <description>What is Java? A technical introduction to the Java language and platform: the history from Oak in 1991 to Java 21 LTS, the characteristics that define it, where it runs in production, an honest comparison with Python, JavaScript and C#, and the myths worth killing.</description>
    <pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-java/</guid>
  </item>
  <item>
    <title>[Java Basics] Java là gì? Lịch sử, đặc điểm và tại sao nên học Java</title>
    <link>https://vnntools.com/vi/blog/what-is-java/</link>
    <description>Java là gì? Bài viết giới thiệu Java ở cả hai vai trò ngôn ngữ và platform: lịch sử từ Oak năm 1991 đến Java 21 LTS, các đặc điểm cốt lõi, nơi Java thực sự chạy trong production, so sánh thẳng thắn với Python, JavaScript, C# và những lầm tưởng cần dẹp bỏ.</description>
    <pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-java/</guid>
  </item>
  <item>
    <title>Packaging React Native Apps: A Guide to Building APK, AAB, and IPA</title>
    <link>https://vnntools.com/en/blog/build-react-native-app/</link>
    <description>Detailed guide on how to package React Native applications (Build App). Discover the power of EAS Build to create APK, AAB for Android, and IPA files for iOS completely automatically.</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/build-react-native-app/</guid>
  </item>
  <item>
    <title>Mastering Prebuild Technology and CNG (Continuous Native Generation) Architecture.</title>
    <link>https://vnntools.com/en/blog/prebuild-and-continuous-native-generation/</link>
    <description>Overcome the limitations of Expo Go when using Native libraries and detailed instructions on how to create a Development Build. Master Prebuild technology and the most modern CNG architecture.</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/prebuild-and-continuous-native-generation/</guid>
  </item>
  <item>
    <title>The Process of Publishing React Native Apps to the App Store &amp; Google Play</title>
    <link>https://vnntools.com/en/blog/publish-react-native-app-to-store/</link>
    <description>Guide to the process of publishing React Native apps to the Store. Discover how to configure the Google Play Console, App Store Connect, and use TestFlight to test iOS apps.</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/publish-react-native-app-to-store/</guid>
  </item>
  <item>
    <title>A Guide to Setting Up GitHub Actions Workflow for Expo Applications</title>
    <link>https://vnntools.com/en/blog/set-up-workflow-git-hub-actions-for-expo-application/</link>
    <description>Guide on how to set up a CI/CD system for a React Native project. Leverage GitHub Actions and EAS Build to fully automate the packaging and store publishing process.</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/set-up-workflow-git-hub-actions-for-expo-application/</guid>
  </item>
  <item>
    <title>React Native Unit Testing Guide with Jest &amp; Testing Library</title>
    <link>https://vnntools.com/en/blog/unit-testing-in-react-native/</link>
    <description>Detailed guide on how to write Unit Tests in a React Native project. Master how to use Jest and React Native Testing Library to test function logic and simulate UI interactions.</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/unit-testing-in-react-native/</guid>
  </item>
  <item>
    <title>A Guide to Writing Native Modules in React Native with the Expo Modules API</title>
    <link>https://vnntools.com/en/blog/writing-native-modules-in-react-native-with-the-expo-modules-api/</link>
    <description>A complete guide on how to write your own Native Modules in React Native. Discover the power of the Expo Modules API to help you easily connect JavaScript with Swift and Kotlin.</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/writing-native-modules-in-react-native-with-the-expo-modules-api/</guid>
  </item>
  <item>
    <title>Đóng gói ứng dụng React Native: Hướng dẫn build APK, AAB Và IPA</title>
    <link>https://vnntools.com/vi/blog/build-react-native-app/</link>
    <description>Hướng dẫn chi tiết cách đóng gói ứng dụng React Native (Build App). Khám phá sức mạnh của EAS Build để tạo file APK, AAB cho Android và IPA cho iOS hoàn toàn tự động.</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/build-react-native-app/</guid>
  </item>
  <item>
    <title>Làm chủ công nghệ Prebuild và kiến trúc CNG (Continuous Native Generation).</title>
    <link>https://vnntools.com/vi/blog/prebuild-and-continuous-native-generation/</link>
    <description>Vượt qua rào cản của Expo Go khi dùng thư viện Native và hướng dẫn chi tiết cách tạo Development Build. Làm chủ công nghệ Prebuild và kiến trúc CNG hiện đại nhất.</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/prebuild-and-continuous-native-generation/</guid>
  </item>
  <item>
    <title>Quy trình publish app React Native lên App Store &amp; Google Play</title>
    <link>https://vnntools.com/vi/blog/publish-react-native-app-to-store/</link>
    <description>Hướng dẫn quy trình đưa ứng dụng React Native lên Store. Khám phá cách cấu hình Google Play Console, App Store Connect và dùng TestFlight để test ứng dụng iOS.</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/publish-react-native-app-to-store/</guid>
  </item>
  <item>
    <title>Hướng dẫn thiết lập Workflow GitHub Actions cho ứng dụng Expo</title>
    <link>https://vnntools.com/vi/blog/set-up-workflow-git-hub-actions-for-expo-application/</link>
    <description>Hướng dẫn cách thiết lập hệ thống CI/CD cho dự án React Native. Tận dụng GitHub Actions và EAS Build để tự động hóa hoàn toàn quy trình đóng gói và đẩy app lên Store.</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/set-up-workflow-git-hub-actions-for-expo-application/</guid>
  </item>
  <item>
    <title>Hướng dẫn Unit Test trong React Native với Jest &amp; Testing Library</title>
    <link>https://vnntools.com/vi/blog/unit-testing-in-react-native/</link>
    <description>Hướng dẫn chi tiết cách viết Unit Test trong dự án React Native. Nắm vững cách sử dụng Jest và React Native Testing Library để kiểm tra logic hàm và giả lập tương tác UI.</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/unit-testing-in-react-native/</guid>
  </item>
  <item>
    <title>Hướng dẫn viết Native Module trong React Native với Expo Modules API</title>
    <link>https://vnntools.com/vi/blog/writing-native-modules-in-react-native-with-the-expo-modules-api/</link>
    <description>Hướng dẫn toàn tập cách tự viết Native Module trong React Native. Khám phá sức mạnh của Expo Modules API giúp bạn kết nối dễ dàng JavaScript với Swift và Kotlin.</description>
    <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/writing-native-modules-in-react-native-with-the-expo-modules-api/</guid>
  </item>
  <item>
    <title>EAS Update in Expo: Updating React Native Apps Bypassing the Store</title>
    <link>https://vnntools.com/en/blog/eas-update/</link>
    <description>Detailed guide on OTA Update technology using Expo EAS Update. Learn how to fix React Native app bugs in a flash, pushing updates to users without waiting for App Store approval.</description>
    <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/eas-update/</guid>
  </item>
  <item>
    <title>React Native Gesture Handler: A Guide to Capturing Swipe and Drag Gestures</title>
    <link>https://vnntools.com/en/blog/react-native-gesture-handler/</link>
    <description>Detailed guide on how to use the react-native-gesture-handler library to capture smooth swipe, drag, and drop (Pan, Swipe) gestures without lag on the UI Thread.</description>
    <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-native-gesture-handler/</guid>
  </item>
  <item>
    <title>EAS Update trong Expo: Cập nhật ứng dụng React Native bỏ qua Store</title>
    <link>https://vnntools.com/vi/blog/eas-update/</link>
    <description>Hướng dẫn chi tiết công nghệ OTA Update bằng EAS Update của Expo. Tìm hiểu cách sửa lỗi app React Native chớp nhoáng, đẩy bản cập nhật tới người dùng mà không cần chờ App Store xét duyệt.</description>
    <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/eas-update/</guid>
  </item>
  <item>
    <title>React Native Gesture Handler: Hướng dẫn bắt cử chỉ vuốt kéo thả</title>
    <link>https://vnntools.com/vi/blog/react-native-gesture-handler/</link>
    <description>Hướng dẫn chi tiết cách sử dụng thư viện react-native-gesture-handler để bắt cử chỉ vuốt, kéo thả (Pan, Swipe) mượt mà không bị giật lag trên UI Thread.</description>
    <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-native-gesture-handler/</guid>
  </item>
  <item>
    <title>Animation in React Native: Comprehensive Guide to Reanimated 3</title>
    <link>https://vnntools.com/en/blog/animation-in-react-native/</link>
    <description>A guide to fixing UI lag with React Native Reanimated 3. Discover the secret to creating smooth 60fps animations with useSharedValue and withSpring.</description>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/animation-in-react-native/</guid>
  </item>
  <item>
    <title>Learn How to Create a Custom Camera App Using React Native and Expo</title>
    <link>https://vnntools.com/en/blog/create-a-custom-camera-app-using-react-native-and-expo/</link>
    <description>How can users change their Avatar in your app? Learn how to pick images from the device, build a custom professional camera interface, and upload files to the server with React Native and Expo.</description>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/create-a-custom-camera-app-using-react-native-and-expo/</guid>
  </item>
  <item>
    <title>A Guide to Requesting Permissions in React Native</title>
    <link>https://vnntools.com/en/blog/guide-to-requesting-permissions-in-react-native/</link>
    <description>A detailed guide on how to request Permissions on mobile devices with React Native &amp; Expo. Master the use of expo-location and Linking to handle denials.</description>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/guide-to-requesting-permissions-in-react-native/</guid>
  </item>
  <item>
    <title>How to use React Native Maps: Displaying Maps &amp; Getting GPS Coordinates</title>
    <link>https://vnntools.com/en/blog/how-to-use-react-native-maps/</link>
    <description>A guide to displaying maps in React Native using the react-native-maps library. Learn how to pin locations (Marker) and integrate real-time GPS.</description>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-to-use-react-native-maps/</guid>
  </item>
  <item>
    <title>A Guide to Integrating Push Notifications with React Native and Expo</title>
    <link>https://vnntools.com/en/blog/integrate-push-notifications-with-react-native-and-expo/</link>
    <description>A detailed guide on how to install and configure Push Notifications in React Native using the Expo system. Master how to request permissions, get Tokens, and send test notifications.</description>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/integrate-push-notifications-with-react-native-and-expo/</guid>
  </item>
  <item>
    <title>Optimizing API Calls in React Native using React Query</title>
    <link>https://vnntools.com/en/blog/optimizing-api-calls-in-react-native-using-react-query/</link>
    <description>A guide to optimizing the API calling flow in React Native with TanStack Query. Discover how to use useQuery to manage Server State, and create a super smooth automatic cache.</description>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/optimizing-api-calls-in-react-native-using-react-query/</guid>
  </item>
  <item>
    <title>Animation trong React Native: Hướng dẫn toàn tập Reanimated 3</title>
    <link>https://vnntools.com/vi/blog/animation-in-react-native/</link>
    <description>Hướng dẫn cách khắc phục lỗi giật lag UI bằng React Native Reanimated 3. Khám phá bí quyết tạo animation mượt mà 60fps với useSharedValue và withSpring.</description>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/animation-in-react-native/</guid>
  </item>
  <item>
    <title>Học cách tạo ứng dụng Camera tùy chỉnh bằng React Native và Expo</title>
    <link>https://vnntools.com/vi/blog/create-a-custom-camera-app-using-react-native-and-expo/</link>
    <description>Làm sao để người dùng đổi Avatar trong app? Học cách chọn ảnh từ máy, tự xây dựng giao diện chụp ảnh chuyên nghiệp và tải file lên server với React Native và Expo.</description>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/create-a-custom-camera-app-using-react-native-and-expo/</guid>
  </item>
  <item>
    <title>Hướng dẫn xin quyền truy cập (Permissions) trong React Native</title>
    <link>https://vnntools.com/vi/blog/guide-to-requesting-permissions-in-react-native/</link>
    <description>Hướng dẫn chi tiết cách xin quyền (Permissions) trên thiết bị mobile với React Native &amp; Expo. Nắm vững cách dùng expo-location và Linking để xử lý khi bị từ chối.</description>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/guide-to-requesting-permissions-in-react-native/</guid>
  </item>
  <item>
    <title>Hướng dẫn cách dùng React Native Maps: Hiển thị bản đồ &amp; Lấy tọa độ GPS</title>
    <link>https://vnntools.com/vi/blog/how-to-use-react-native-maps/</link>
    <description>Hướng dẫn hiển thị bản đồ trong React Native bằng thư viện react-native-maps. Tìm hiểu cách ghim vị trí (Marker) và tích hợp GPS theo thời gian thực.</description>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-to-use-react-native-maps/</guid>
  </item>
  <item>
    <title>Hướng dẫn tích hợp Push Notifications với React Native và Expo</title>
    <link>https://vnntools.com/vi/blog/integrate-push-notifications-with-react-native-and-expo/</link>
    <description>Hướng dẫn chi tiết cách cài đặt và cấu hình Push Notifications trong React Native sử dụng hệ thống Expo. Nắm vững cách xin quyền, lấy Token và gửi thông báo kiểm thử.</description>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/integrate-push-notifications-with-react-native-and-expo/</guid>
  </item>
  <item>
    <title>Tối ưu việc gọi API trong React Native bằng React Query</title>
    <link>https://vnntools.com/vi/blog/optimizing-api-calls-in-react-native-using-react-query/</link>
    <description>Hướng dẫn tối ưu hóa luồng gọi API trong React Native với TanStack Query. Khám phá cách sử dụng useQuery để quản lý Server State, tạo bộ nhớ đệm (cache) tự động siêu mượt.</description>
    <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/optimizing-api-calls-in-react-native-using-react-query/</guid>
  </item>
  <item>
    <title>Global State Management in React Native: Redux Toolkit or Zustand?</title>
    <link>https://vnntools.com/en/blog/global-state-in-react-native/</link>
    <description>A detailed explanation of Global State and Prop Drilling. A guide on how to install and use Redux Toolkit and Zustand to manage the data flow in React Native.</description>
    <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/global-state-in-react-native/</guid>
  </item>
  <item>
    <title>React Native Local Data Storage: How to use AsyncStorage &amp; SecureStore</title>
    <link>https://vnntools.com/en/blog/local-data-storage-in-react-native/</link>
    <description>A detailed guide on how to store local data in React Native. Master AsyncStorage for saving settings, SecureStore for secure Tokens, and explore the power of MMKV.</description>
    <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/local-data-storage-in-react-native/</guid>
  </item>
  <item>
    <title>Quản lý Global State trong React Native: Redux Toolkit hay Zustand?</title>
    <link>https://vnntools.com/vi/blog/global-state-in-react-native/</link>
    <description>Giải thích chi tiết khái niệm Global State và Prop Drilling. Hướng dẫn cách cài đặt, sử dụng Redux Toolkit và Zustand để quản lý luồng dữ liệu React Native.</description>
    <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/global-state-in-react-native/</guid>
  </item>
  <item>
    <title>Lưu trữ dữ liệu cục bộ React Native: Cách dùng AsyncStorage &amp; SecureStore</title>
    <link>https://vnntools.com/vi/blog/local-data-storage-in-react-native/</link>
    <description>Hướng dẫn chi tiết cách lưu trữ dữ liệu cục bộ trong React Native. Nắm vững AsyncStorage để lưu cài đặt, SecureStore để lưu Token an toàn và khám phá sức mạnh của MMKV.</description>
    <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/local-data-storage-in-react-native/</guid>
  </item>
  <item>
    <title>How to Create Bottom Tabs &amp; Drawer Navigation in Expo Router</title>
    <link>https://vnntools.com/en/blog/bottom-tabs-and-drawer-navigation-in-expo-router/</link>
    <description>A detailed guide on how to create smooth Bottom Tabs and Drawer Navigation using Expo Router. Master the secrets of the _layout.tsx file.</description>
    <pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/bottom-tabs-and-drawer-navigation-in-expo-router/</guid>
  </item>
  <item>
    <title>How to Call APIs in React Native: Fetch Data &amp; JSON Parsing Guide</title>
    <link>https://vnntools.com/en/blog/how-to-call-api-in-react-native/</link>
    <description>A detailed guide on how to call APIs in React Native. Master the technique of using fetch, axios combined with useEffect, useState to load and display server data smoothly.</description>
    <pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-to-call-api-in-react-native/</guid>
  </item>
  <item>
    <title>Hướng dẫn tạo Bottom Tabs &amp; Drawer Navigation trong Expo Router</title>
    <link>https://vnntools.com/vi/blog/bottom-tabs-and-drawer-navigation-in-expo-router/</link>
    <description>Hướng dẫn chi tiết cách tạo thanh menu Bottom Tabs và menu vuốt Drawer Navigation cực mượt với Expo Router. Nắm vững bí mật của file _layout.tsx.</description>
    <pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/bottom-tabs-and-drawer-navigation-in-expo-router/</guid>
  </item>
  <item>
    <title>Cách gọi API trong React Native: Hướng dẫn Fetch Data và xử lý JSON</title>
    <link>https://vnntools.com/vi/blog/how-to-call-api-in-react-native/</link>
    <description>Hướng dẫn chi tiết cách gọi API trong React Native. Nắm vững kỹ thuật sử dụng fetch, axios kết hợp với useEffect, useState để tải và hiển thị dữ liệu server mượt mà.</description>
    <pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-to-call-api-in-react-native/</guid>
  </item>
  <item>
    <title>Event Handling in React Native: The difference between Pressable and TouchableOpacity</title>
    <link>https://vnntools.com/en/blog/event-handling-in-react-native/</link>
    <description>A guide on how to handle touch and press events in React Native. Learn why you should avoid the Button component and how to replace it with Pressable and TouchableOpacity.</description>
    <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/event-handling-in-react-native/</guid>
  </item>
  <item>
    <title>How to Use FlatList in React Native: Display Lists Without Lag</title>
    <link>https://vnntools.com/en/blog/how-to-use-flatlist-in-react-native/</link>
    <description>Solve the problem of displaying large data lists with FlatList and SectionList. A guide to memory optimization and smooth scrolling speed.</description>
    <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-to-use-flatlist-in-react-native/</guid>
  </item>
  <item>
    <title>Stack Navigation in Expo Router: Navigating &amp; Passing Parameters</title>
    <link>https://vnntools.com/en/blog/stack-navigation-in-expo-router/</link>
    <description>A detailed guide on how to navigate and pass parameters using Stack Navigation in React Native, using Expo Router.</description>
    <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/stack-navigation-in-expo-router/</guid>
  </item>
  <item>
    <title>What is Expo Router? The Era of File-Based Routing in React Native</title>
    <link>https://vnntools.com/en/blog/what-is-expo-router/</link>
    <description>Confused by Navigation in React Native? This article explains in detail the File-based routing concept of Expo Router, the app/ folder structure, and its power.</description>
    <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-expo-router/</guid>
  </item>
  <item>
    <title>Event Handling trong React Native: Sự khác biệt giữa Pressable và TouchableOpacity</title>
    <link>https://vnntools.com/vi/blog/event-handling-in-react-native/</link>
    <description>Hướng dẫn cách bắt sự kiện chạm, nhấn trong React Native. Tìm hiểu vì sao không nên dùng thẻ Button và cách thay thế bằng Pressable, TouchableOpacity.</description>
    <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/event-handling-in-react-native/</guid>
  </item>
  <item>
    <title>Cách dùng FlatList trong React Native: Hiển thị danh sách không giật lag</title>
    <link>https://vnntools.com/vi/blog/how-to-use-flatlist-in-react-native/</link>
    <description>Giải quyết bài toán hiển thị danh sách dữ liệu lớn với FlatList và SectionList. Hướng dẫn tối ưu hóa bộ nhớ và tốc độ cuộn (scroll) mượt mà.</description>
    <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-to-use-flatlist-in-react-native/</guid>
  </item>
  <item>
    <title>Stack Navigation trong Expo Router: Chuyển trang &amp; Truyền tham số</title>
    <link>https://vnntools.com/vi/blog/stack-navigation-in-expo-router/</link>
    <description>Hướng dẫn chi tiết cách chuyển trang và truyền tham số bằng Stack Navigation trong React Native, sử dụng Expo Router.</description>
    <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/stack-navigation-in-expo-router/</guid>
  </item>
  <item>
    <title>Expo Router là gì? Kỷ nguyên File-Based Routing trong React Native</title>
    <link>https://vnntools.com/vi/blog/what-is-expo-router/</link>
    <description>Bối rối với Navigation trong React Native? Bài viết giải thích chi tiết khái niệm File-based routing của Expo Router, cấu trúc thư mục app/ và sức mạnh của nó.</description>
    <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-expo-router/</guid>
  </item>
  <item>
    <title>Detailed Analysis of Expo App Flow from A-Z</title>
    <link>https://vnntools.com/en/blog/analyze-the-expo-application-flow/</link>
    <description>Learn how an application starts, master the app/ directory, basic file structures, and parse JSX syntax in an incredibly easy-to-understand way.</description>
    <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/analyze-the-expo-application-flow/</guid>
  </item>
  <item>
    <title>Understanding the 5 Most Important Core Components in React Native</title>
    <link>https://vnntools.com/en/blog/core-components-in-react-native/</link>
    <description>A guide on how to use Core Components in React Native. Master View, Text, Image, TextInput, and ScrollView to build any mobile interface.</description>
    <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/core-components-in-react-native/</guid>
  </item>
  <item>
    <title>React Hooks Review: How They Work in a Mobile Environment</title>
    <link>https://vnntools.com/en/blog/react-hooks-how-they-work-in-a-mobile-environment/</link>
    <description>Not fully understanding data flow in React Native? This article will explain in detail how to use useState, useEffect, and useRef through the easiest-to-understand practical examples.</description>
    <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-hooks-how-they-work-in-a-mobile-environment/</guid>
  </item>
  <item>
    <title>How to Master StyleSheet &amp; Flexbox Layout in React Native</title>
    <link>https://vnntools.com/en/blog/stylesheet-and-flexbox-layout-in-react-native/</link>
    <description>Master the art of styling with StyleSheet and mastering the Flexbox system in React Native. Detailed guide on flexDirection, justifyContent, alignItems.</description>
    <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/stylesheet-and-flexbox-layout-in-react-native/</guid>
  </item>
  <item>
    <title>Phân tích luồng chạy ứng dụng Expo chi tiết từ A-Z</title>
    <link>https://vnntools.com/vi/blog/analyze-the-expo-application-flow/</link>
    <description>Tìm hiểu cách ứng dụng khởi chạy, làm chủ thư mục app/, cấu trúc file cơ bản và phân tích cú pháp JSX một cách cực kỳ dễ hiểu.</description>
    <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/analyze-the-expo-application-flow/</guid>
  </item>
  <item>
    <title>Tìm hiểu 5 Core Components quan trọng nhất trong React Native</title>
    <link>https://vnntools.com/vi/blog/core-components-in-react-native/</link>
    <description>Hướng dẫn cách sử dụng các Core Components trong React Native. Nắm vững View, Text, Image, TextInput và ScrollView để xây dựng mọi giao diện mobile.</description>
    <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/core-components-in-react-native/</guid>
  </item>
  <item>
    <title>Ôn tập React Hooks: Cách hoạt động của chúng trong môi trường Mobile</title>
    <link>https://vnntools.com/vi/blog/react-hooks-how-they-work-in-a-mobile-environment/</link>
    <description>Chưa hiểu rõ luồng dữ liệu trong React Native? Bài viết này sẽ giải thích cặn kẽ cách sử dụng useState, useEffect và useRef qua các ví dụ thực tế dễ hiểu nhất.</description>
    <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-hooks-how-they-work-in-a-mobile-environment/</guid>
  </item>
  <item>
    <title>Cách làm chủ StyleSheet &amp; Flexbox Layout trong React Native</title>
    <link>https://vnntools.com/vi/blog/stylesheet-and-flexbox-layout-in-react-native/</link>
    <description>Nắm vững nghệ thuật tạo kiểu với StyleSheet và làm chủ hệ thống Flexbox trong React Native. Hướng dẫn chi tiết flexDirection, justifyContent, alignItems.</description>
    <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/stylesheet-and-flexbox-layout-in-react-native/</guid>
  </item>
  <item>
    <title>Guide to Setting Up React Native &amp; Expo Environment in 15 Minutes</title>
    <link>https://vnntools.com/en/blog/guide-to-setting-up-react-native-expo-environment/</link>
    <description>Afraid of complex mobile programming environment setups? A detailed guide on using Expo Go and Node.js to run React Native apps instantly.</description>
    <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/guide-to-setting-up-react-native-expo-environment/</guid>
  </item>
  <item>
    <title>What is React Native? Why use it for Mobile programming?</title>
    <link>https://vnntools.com/en/blog/what-is-react-native/</link>
    <description>Discover the power of React Native and the Expo platform that helps you build mobile apps quickly without the hassle of complex setups.</description>
    <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-react-native/</guid>
  </item>
  <item>
    <title>Hướng dẫn cài đặt môi trường React Native &amp; Expo trong 15 phút</title>
    <link>https://vnntools.com/vi/blog/guide-to-setting-up-react-native-expo-environment/</link>
    <description>Bạn sợ cài đặt môi trường lập trình mobile phức tạp? Hướng dẫn chi tiết cách dùng Expo Go, Node.js để chạy app React Native ngay lập tức.</description>
    <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/guide-to-setting-up-react-native-expo-environment/</guid>
  </item>
  <item>
    <title>React Native là gì? Tại sao nên dùng nó để lập trình Mobile?</title>
    <link>https://vnntools.com/vi/blog/what-is-react-native/</link>
    <description>Tìm hiểu sức mạnh của React Native và nền tảng Expo giúp bạn tạo ứng dụng di động nhanh chóng mà không cần cài đặt rắc rối.</description>
    <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-react-native/</guid>
  </item>
  <item>
    <title>[Advanced JS] What is the Event Loop? Discover How JavaScript Works</title>
    <link>https://vnntools.com/en/blog/event-loop-and-how-javascript-works/</link>
    <description>The Event Loop is the heart of JavaScript, but not everyone understands it well. This article visually explains how the Event Loop works and related concepts.</description>
    <pubDate>Wed, 24 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/event-loop-and-how-javascript-works/</guid>
  </item>
  <item>
    <title>[Advanced JS] Intersection Observer API: The Complete Guide to Effective Usage</title>
    <link>https://vnntools.com/en/blog/intersection-observer-api/</link>
    <description>A comprehensive guide to the Intersection Observer API, from theory to practice. Understand how this API works and apply it to real-world projects to improve user experience.</description>
    <pubDate>Wed, 24 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/intersection-observer-api/</guid>
  </item>
  <item>
    <title>[Advanced JS] Event Loop là gì? Khám phá cơ chế hoạt động của JavaScript</title>
    <link>https://vnntools.com/vi/blog/event-loop-and-how-javascript-works/</link>
    <description>Event Loop là trái tim của JavaScript, nhưng không phải ai cũng hiểu rõ. Bài viết này sẽ giải thích một cách trực quan về cơ chế hoạt động của Event Loop và các khái niệm liên quan.</description>
    <pubDate>Wed, 24 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/event-loop-and-how-javascript-works/</guid>
  </item>
  <item>
    <title>[Advanced JS] Intersection Observer API: Toàn tập về cách sử dụng hiệu quả</title>
    <link>https://vnntools.com/vi/blog/intersection-observer-api/</link>
    <description>Hướng dẫn toàn diện về Intersection Observer API, từ lý thuyết đến thực hành. Giúp bạn hiểu rõ cách API này hoạt động và áp dụng vào các dự án thực tế để cải thiện trải nghiệm người dùng.</description>
    <pubDate>Wed, 24 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/intersection-observer-api/</guid>
  </item>
  <item>
    <title>[Advanced JS] Call, Apply, Bind in JavaScript: Clear Examples and Practical Applications</title>
    <link>https://vnntools.com/en/blog/call-apply-bind-in-javascript/</link>
    <description>&quot;Struggling with the &apos;this&apos; keyword in JavaScript? Learn Call, Apply, Bind through intuitive examples and see how they help you control function execution context effectively.&quot;</description>
    <pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/call-apply-bind-in-javascript/</guid>
  </item>
  <item>
    <title>[Advanced JS] Data Structures &amp; Algorithms: Practical Applications with JavaScript</title>
    <link>https://vnntools.com/en/blog/data-structures-and-algorithms-with-javascript/</link>
    <description>Apply Data Structures and Algorithms to optimize web app performance. Level up your clean and efficient coding skills with JavaScript in this in-depth article.</description>
    <pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/data-structures-and-algorithms-with-javascript/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] A Simple and Effective Guide to Deploying Your Next.js App</title>
    <link>https://vnntools.com/en/blog/deploy-nextjs-app/</link>
    <description>Struggling to deploy your Next.js app? Don’t worry! This step-by-step guide will help you deploy successfully to a server in just a few minutes, even if you’re a beginner.</description>
    <pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/deploy-nextjs-app/</guid>
  </item>
  <item>
    <title>[Advanced JS] Object-Oriented Programming (OOP) in JavaScript: Concepts &amp; Examples</title>
    <link>https://vnntools.com/en/blog/oop-in-javascript/</link>
    <description>What is Object-Oriented Programming (OOP)? This article explains OOP concepts in JavaScript and provides practical examples to help you understand easily.</description>
    <pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/oop-in-javascript/</guid>
  </item>
  <item>
    <title>[Advanced JS] Call, Apply, Bind trong JavaScript: Ví dụ dễ hiểu và Áp dụng thực tế</title>
    <link>https://vnntools.com/vi/blog/call-apply-bind-in-javascript/</link>
    <description>Bạn gặp khó khăn với từ khóa &apos;this&apos; trong JavaScript? Tìm hiểu Call, Apply, Bind qua các ví dụ trực quan, cách chúng giúp bạn kiểm soát ngữ cảnh thực thi hàm một cách hiệu quả.</description>
    <pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/call-apply-bind-in-javascript/</guid>
  </item>
  <item>
    <title>[Advanced JS] Cấu trúc dữ liệu &amp; Thuật toán: Ứng dụng thực tế với JavaScript</title>
    <link>https://vnntools.com/vi/blog/data-structures-and-algorithms-with-javascript/</link>
    <description>Ứng dụng Cấu trúc Dữ liệu và Thuật toán để tối ưu hiệu suất ứng dụng web. Nâng cao kỹ năng viết code sạch và tối ưu với JavaScript qua bài viết chuyên sâu này.</description>
    <pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/data-structures-and-algorithms-with-javascript/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Hướng dẫn cách deploy Next.js app đơn giản và hiệu quả</title>
    <link>https://vnntools.com/vi/blog/deploy-nextjs-app/</link>
    <description>Bạn gặp khó khăn khi deploy Next.js app? Đừng lo! Hướng dẫn từng bước này sẽ giúp bạn deploy thành công lên server chỉ trong vài phút, ngay cả khi bạn là người mới bắt đầu.</description>
    <pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/deploy-nextjs-app/</guid>
  </item>
  <item>
    <title>[Advanced JS] Lập trình hướng đối tượng (OOP) trong JavaScript: Khái niệm &amp; Ví dụ</title>
    <link>https://vnntools.com/vi/blog/oop-in-javascript/</link>
    <description>Lập trình hướng đối tượng (OOP) là gì? Bài viết này giải thích các khái niệm OOP trong JavaScript và cung cấp ví dụ thực tế, giúp bạn dễ dàng nắm bắt.</description>
    <pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/oop-in-javascript/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Caching: The Secret to Making Your Website 10x Faster</title>
    <link>https://vnntools.com/en/blog/caching-in-nextjs/</link>
    <description>Instantly speed up your Next.js app! This article dives deep into Caching techniques, from Server-side to Client-side Caching, helping you optimize performance and SEO.</description>
    <pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/caching-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Testing: The Complete Guide to Unit, Integration, and E2E Testing</title>
    <link>https://vnntools.com/en/blog/testing-in-nextjs/</link>
    <description>A comprehensive guide to everything you need to know about testing in Next.js. From setting up the environment, writing test cases, to tips for optimizing your workflow. Elevate your project quality today!</description>
    <pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/testing-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Caching: Bí quyết để website của bạn nhanh hơn 10x</title>
    <link>https://vnntools.com/vi/blog/caching-in-nextjs/</link>
    <description>Tăng tốc độ ứng dụng Next.js của bạn ngay lập tức! Bài viết này sẽ đi sâu vào kỹ thuật Caching, từ Server-side Caching đến Client-side Caching, giúp bạn tối ưu hiệu suất và SEO hiệu quả.</description>
    <pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/caching-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Testing: Hướng dẫn toàn tập về Unit, Integration và E2E Testing</title>
    <link>https://vnntools.com/vi/blog/testing-in-nextjs/</link>
    <description>Bài viết tổng hợp mọi thứ bạn cần biết về testing trong Next.js. Từ việc thiết lập môi trường, viết test case, đến các mẹo tối ưu quy trình. Nâng cao chất lượng dự án của bạn ngay hôm nay!</description>
    <pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/testing-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Implementing Authentication for Enhanced Website Security</title>
    <link>https://vnntools.com/en/blog/authentication-in-nextjs/</link>
    <description>Learn how to implement authentication in Next.js effectively and securely. This article guides you step-by-step to build login, registration, and protect private routes for your Next.js app.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/authentication-in-nextjs/</guid>
  </item>
  <item>
    <title>[Advanced JS] What is a Closure? Advanced Applications of Closures in JavaScript</title>
    <link>https://vnntools.com/en/blog/closures-in-javascript/</link>
    <description>A closure is an advanced but extremely useful concept in JavaScript. This article will help you understand closures through intuitive examples, so you can apply them effectively in your projects.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/closures-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Fetch API and JSON: How to Communicate with the Server</title>
    <link>https://vnntools.com/en/blog/fetch-api-and-json/</link>
    <description>Learn how to use the Fetch API to request and handle JSON data from the server. This article provides practical examples and useful tips to help you build faster, more dynamic web applications.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/fetch-api-and-json/</guid>
  </item>
  <item>
    <title>[Advanced JS] What is an IIFE? Advanced Applications of IIFE in JavaScript</title>
    <link>https://vnntools.com/en/blog/iife-in-javascript/</link>
    <description>Learn about IIFE (Immediately Invoked Function Expression) and how it works in JavaScript. Discover practical uses of IIFE for creating scope and protecting variables.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/iife-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] LocalStorage, SessionStorage, and Cookies: When to Use Which?</title>
    <link>https://vnntools.com/en/blog/local-storage-and-session-storage-and-cookies/</link>
    <description>Understand the core differences between LocalStorage, SessionStorage, and Cookies. This article will help you master their pros, cons, and how to use them effectively for storing data in the web browser.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/local-storage-and-session-storage-and-cookies/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Boost Your Website Traffic: The Complete Guide to Metadata and SEO</title>
    <link>https://vnntools.com/en/blog/metadata-and-seo-in-nextjs/</link>
    <description>Next.js is a powerful framework for SEO, but do you know how to use Metadata correctly? Learn on-page optimization techniques to improve SEO performance and achieve top Google rankings.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/metadata-and-seo-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Middleware: A Practical Guide with Real-World Examples</title>
    <link>https://vnntools.com/en/blog/middleware-in-nextjs/</link>
    <description>Learn about Middleware in Next.js and how you can use it to handle requests, routing, and user authentication. Explore real-world code examples.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/middleware-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Server Actions &amp; Mutations: A Practical Guide with Real Examples</title>
    <link>https://vnntools.com/en/blog/server-actions-and-mutations-in-nextjs/</link>
    <description>Learn about Server Actions and Mutations in Next.js to optimize data handling. This article provides a detailed guide from basics to advanced usage, helping you build faster and more efficient apps.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/server-actions-and-mutations-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Triển khai Authentication để tăng cường bảo mật Website</title>
    <link>https://vnntools.com/vi/blog/authentication-in-nextjs/</link>
    <description>Tìm hiểu cách triển khai Authentication trong Next.js một cách hiệu quả và an toàn. Bài viết này sẽ hướng dẫn bạn từng bước xây dựng hệ thống đăng nhập, đăng ký và bảo vệ các routes riêng tư cho ứng dụng Next.js của bạn.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/authentication-in-nextjs/</guid>
  </item>
  <item>
    <title>[Advanced JS] Closure là gì? Ứng dụng nâng cao của Closure trong JavaScript</title>
    <link>https://vnntools.com/vi/blog/closures-in-javascript/</link>
    <description>Closure là một khái niệm nâng cao nhưng cực kỳ hữu ích trong JavaScript. Bài viết này sẽ giúp bạn hiểu rõ về Closure thông qua các ví dụ trực quan, từ đó áp dụng hiệu quả vào dự án của mình.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/closures-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Fetch API và JSON: Cách giao tiếp với máy chủ</title>
    <link>https://vnntools.com/vi/blog/fetch-api-and-json/</link>
    <description>Học cách sử dụng Fetch API để gọi và xử lý dữ liệu JSON từ máy chủ. Bài viết này sẽ cung cấp các ví dụ thực tế và mẹo hữu ích để bạn xây dựng các ứng dụng web động, nhanh chóng hơn.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/fetch-api-and-json/</guid>
  </item>
  <item>
    <title>[Advanced JS] IIFE là gì? Ứng dụng nâng cao của IIFE trong JavaScript</title>
    <link>https://vnntools.com/vi/blog/iife-in-javascript/</link>
    <description>Tìm hiểu về IIFE (Immediately Invoked Function Expression) và cách nó hoạt động trong JavaScript. Khám phá các ứng dụng thực tế của IIFE để tạo scope và bảo vệ biến.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/iife-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] LocalStorage, SessionStorage và Cookies: Khi nào dùng cái nào?</title>
    <link>https://vnntools.com/vi/blog/local-storage-and-session-storage-and-cookies/</link>
    <description>Tìm hiểu sự khác biệt cốt lõi giữa LocalStorage, SessionStorage và Cookie. Bài viết này sẽ giúp bạn nắm vững ưu, nhược điểm và cách sử dụng chúng hiệu quả để lưu trữ dữ liệu trên trình duyệt web.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/local-storage-and-session-storage-and-cookies/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Tăng traffic website: Toàn tập về Metadata và SEO</title>
    <link>https://vnntools.com/vi/blog/metadata-and-seo-in-nextjs/</link>
    <description>Next.js là framework mạnh mẽ cho SEO, nhưng bạn đã biết cách sử dụng Metadata đúng cách? Tìm hiểu các kỹ thuật tối ưu hóa on-page để cải thiện hiệu suất SEO và đạt được thứ hạng cao trên Google.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/metadata-and-seo-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Middleware: Hướng dẫn cách dùng với các ví dụ thực tế</title>
    <link>https://vnntools.com/vi/blog/middleware-in-nextjs/</link>
    <description>Tìm hiểu về Middleware trong Next.js và cách bạn có thể sử dụng chúng để xử lý yêu cầu, điều hướng và xác thực người dùng. Khám phá các ví dụ code thực tế.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/middleware-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Server Actions &amp; Mutations: Hướng dẫn áp dụng với ví dụ thực tế</title>
    <link>https://vnntools.com/vi/blog/server-actions-and-mutations-in-nextjs/</link>
    <description>Tìm hiểu về Server Actions và Mutations trong Next.js để tối ưu hóa việc xử lý dữ liệu. Bài viết hướng dẫn chi tiết cách áp dụng, từ cơ bản đến nâng cao, giúp bạn xây dựng ứng dụng nhanh và hiệu quả hơn.</description>
    <pubDate>Sun, 21 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/server-actions-and-mutations-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] API Routes: Build Your Backend Quickly and Efficiently</title>
    <link>https://vnntools.com/en/blog/api-routes-backend-with-nextjs/</link>
    <description>Learn how to build a powerful backend right inside your Next.js project with API Routes. This guide covers the basics, how to create API endpoints, handle requests and responses, and real-world deployment. Save time and optimize performance!</description>
    <pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/api-routes-backend-with-nextjs/</guid>
  </item>
  <item>
    <title>[JS Basics] Asynchronous Programming in JavaScript: Callback, Promise, Async/Await</title>
    <link>https://vnntools.com/en/blog/asynchronous-javascript/</link>
    <description>Learn asynchronous programming in JavaScript with practical examples of Async/Await, Promise, and Callback. This article helps you master the concepts, avoid common mistakes, and optimize code performance.</description>
    <pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/asynchronous-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] ES6+ Features: What You Need to Know to Write Modern JavaScript</title>
    <link>https://vnntools.com/en/blog/es6-features/</link>
    <description>This article is the most detailed handbook on JavaScript Events. Learn how to listen for and respond to user actions on your website, helping you build more interactive and smoother web applications.</description>
    <pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/es6-features/</guid>
  </item>
  <item>
    <title>[JS Basics] JavaScript Events: A Guide to Effective and Optimal Event Handling</title>
    <link>https://vnntools.com/en/blog/event-handling-in-javascript/</link>
    <description>This article is the most detailed handbook on JavaScript Events. Learn how to listen for and respond to user actions on your website, helping you build more interactive and smoother web applications.</description>
    <pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/event-handling-in-javascript/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Optimizing Images, Fonts, and Scripts: Speed Up Your Page Load</title>
    <link>https://vnntools.com/en/blog/optimizing-images-fonts-and-scripts-in-nextjs/</link>
    <description>Learn how to optimize images, fonts, and scripts to improve your Next.js app performance. This article details techniques to help your website load faster and deliver a smoother user experience.</description>
    <pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/optimizing-images-fonts-and-scripts-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] API Routes: Xây dựng Backend nhanh chóng và hiệu quả</title>
    <link>https://vnntools.com/vi/blog/api-routes-backend-with-nextjs/</link>
    <description>Tìm hiểu cách xây dựng backend mạnh mẽ ngay trong dự án Next.js của bạn với API Routes. Hướng dẫn này bao gồm từ khái niệm cơ bản, cách tạo API endpoint, xử lý request và response, đến triển khai thực tế. Tiết kiệm thời gian, tối ưu hiệu suất!</description>
    <pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/api-routes-backend-with-nextjs/</guid>
  </item>
  <item>
    <title>[JS Basics] Lập trình bất đồng bộ trong JavaScript: Callback, Promise, Async/Await</title>
    <link>https://vnntools.com/vi/blog/asynchronous-javascript/</link>
    <description>Tìm hiểu lập trình bất đồng bộ trong JavaScript với các ví dụ thực tế về Async/Await, Promise, và Callback. Bài viết giúp bạn nắm vững kiến thức, tránh lỗi thường gặp và tối ưu hiệu suất code.</description>
    <pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/asynchronous-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] ES6+ Features: Những điều cần biết để viết code JavaScript hiện đại</title>
    <link>https://vnntools.com/vi/blog/es6-features/</link>
    <description>Bài viết này là cẩm nang chi tiết nhất về JavaScript Events. Tìm hiểu cách lắng nghe và phản ứng với các hành động của người dùng trên website, giúp bạn xây dựng ứng dụng web tương tác và mượt mà hơn.</description>
    <pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/es6-features/</guid>
  </item>
  <item>
    <title>[JS Basics] JavaScript Events: Hướng dẫn xử lý sự kiện hiệu quả và tối ưu</title>
    <link>https://vnntools.com/vi/blog/event-handling-in-javascript/</link>
    <description>Bài viết này là cẩm nang chi tiết nhất về JavaScript Events. Tìm hiểu cách lắng nghe và phản ứng với các hành động của người dùng trên website, giúp bạn xây dựng ứng dụng web tương tác và mượt mà hơn.</description>
    <pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/event-handling-in-javascript/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Tối ưu Image, Font, và Script: Tăng tốc độ tải trang</title>
    <link>https://vnntools.com/vi/blog/optimizing-images-fonts-and-scripts-in-nextjs/</link>
    <description>Học cách tối ưu hóa hình ảnh, font và script để cải thiện hiệu suất ứng dụng Next.js. Bài viết này hướng dẫn chi tiết các kỹ thuật giúp website của bạn tải nhanh hơn, mang lại trải nghiệm người dùng mượt mà.</description>
    <pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/optimizing-images-fonts-and-scripts-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Data Fetching in Server Components: How to Optimize Effectively</title>
    <link>https://vnntools.com/en/blog/data-fetching-with-server-components-in-nextjs/</link>
    <description>A deep dive into how Data Fetching works with Server Components in Next.js. Discover best practices for querying data, optimizing performance, and building faster, smoother apps.</description>
    <pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/data-fetching-with-server-components-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Dynamic Routes: How to Use and Optimize</title>
    <link>https://vnntools.com/en/blog/dynamic-routes-in-nextjs/</link>
    <description>Learn how to create and manage Dynamic Routes in Next.js (App Router). This article provides a step-by-step guide to help you build dynamic, SEO-friendly web pages efficiently.</description>
    <pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/dynamic-routes-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Mastering Rendering Strategies: SSG, SSR, ISR, and CSR</title>
    <link>https://vnntools.com/en/blog/nextjs-rendering-strategies/</link>
    <description>Do you truly understand the rendering strategies in Next.js? This article dives deep into SSR, SSG, CSR, and ISR. Discover how they work to optimize your website’s performance.</description>
    <pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/nextjs-rendering-strategies/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Data Fetching trong Server Components: Cách tối ưu hiệu quả</title>
    <link>https://vnntools.com/vi/blog/data-fetching-with-server-components-in-nextjs/</link>
    <description>Tìm hiểu sâu về cách Data Fetching hoạt động với Server Components trong Next.js. Khám phá các phương pháp tốt nhất để truy vấn dữ liệu, tối ưu hiệu suất và xây dựng ứng dụng nhanh chóng, mượt mà hơn.</description>
    <pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/data-fetching-with-server-components-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Dynamic Routes: Hướng dẫn cách dùng và cách tối ưu</title>
    <link>https://vnntools.com/vi/blog/dynamic-routes-in-nextjs/</link>
    <description>Tìm hiểu cách tạo và quản lý Dynamic Routes trong Next.js (App Router). Bài viết hướng dẫn chi tiết từng bước, giúp bạn xây dựng các trang web động hiệu quả và chuẩn SEO.</description>
    <pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/dynamic-routes-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Nắm vững các cơ chế Rendering: SSG, SSR, ISR, và CSR</title>
    <link>https://vnntools.com/vi/blog/nextjs-rendering-strategies/</link>
    <description>Bạn đã thực sự hiểu các cơ chế rendering trong Next.js? Bài viết này sẽ đi sâu vào SSR, SSG, CSR, và ISR. Khám phá cách chúng hoạt động để tối ưu hiệu suất website của bạn.</description>
    <pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/nextjs-rendering-strategies/</guid>
  </item>
  <item>
    <title>[JS Basics] What is an Array in JavaScript? The Most Effective Ways to Use Arrays</title>
    <link>https://vnntools.com/en/blog/arrays-in-javascript/</link>
    <description>Master the Array data structure in JavaScript. This article provides comprehensive knowledge from concepts to practical usage for handling data efficiently.</description>
    <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/arrays-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Manipulating the DOM with JavaScript: A Detailed Guide for Beginners</title>
    <link>https://vnntools.com/en/blog/manipulating-the-dom-using-javascript/</link>
    <description>DOM manipulation is a foundational skill for every web developer. This article provides practical examples and detailed explanations on how to interact with HTML and CSS using JavaScript.</description>
    <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/manipulating-the-dom-using-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Objects in JavaScript: Concepts &amp; Effective Usage</title>
    <link>https://vnntools.com/en/blog/objects-in-javascript/</link>
    <description>A deep dive into how Objects work in JavaScript. Detailed guide on properties, methods, and how to use Objects to write clean and efficient code.</description>
    <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/objects-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Distinguishing Shallow Copy and Deep Copy in JavaScript</title>
    <link>https://vnntools.com/en/blog/shallow-copy-and-deep-copy-in-javascript/</link>
    <description>Are you sure you’re copying objects the right way? Dive deep into Shallow copy and Deep copy in JavaScript with illustrative examples, and choose the right method for your application.</description>
    <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/shallow-copy-and-deep-copy-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Demystifying the this Keyword in JavaScript: When and How to Use It?</title>
    <link>https://vnntools.com/en/blog/this-keyword-in-javascript/</link>
    <description>The this keyword in JavaScript is one of the most important yet confusing concepts. This article will help you master this through practical examples and easy-to-understand explanations, even if you are a beginner.</description>
    <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/this-keyword-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Mảng trong JavaScript là gì? Cách sử dụng Array hiệu quả nhất</title>
    <link>https://vnntools.com/vi/blog/arrays-in-javascript/</link>
    <description>Làm chủ cấu trúc dữ liệu Mảng trong JavaScript. Bài viết cung cấp kiến thức toàn diện từ khái niệm đến cách sử dụng Array để xử lý dữ liệu một cách hiệu quả nhất.</description>
    <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/arrays-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Thao tác DOM với JavaScript: Hướng dẫn chi tiết cho người mới</title>
    <link>https://vnntools.com/vi/blog/manipulating-the-dom-using-javascript/</link>
    <description>Thao tác DOM là kiến thức nền tảng của mọi lập trình viên web. Bài viết này sẽ cung cấp cho bạn những ví dụ thực tế và giải thích chi tiết về cách tương tác với HTML và CSS bằng JavaScript.</description>
    <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/manipulating-the-dom-using-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Đối tượng (Objects) trong JavaScript: Khái niệm &amp; Cách sử dụng hiệu quả</title>
    <link>https://vnntools.com/vi/blog/objects-in-javascript/</link>
    <description>Tìm hiểu sâu về cách hoạt động của Objects trong JavaScript. Hướng dẫn chi tiết về các thuộc tính, phương thức, và cách sử dụng Objects để viết code sạch và hiệu quả.</description>
    <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/objects-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Phân biệt Shallow Copy và Deep Copy trong JavaScript</title>
    <link>https://vnntools.com/vi/blog/shallow-copy-and-deep-copy-in-javascript/</link>
    <description>Bạn có chắc đã sao chép đối tượng đúng cách? Tìm hiểu sâu về Shallow copy và Deep copy trong JavaScript qua ví dụ minh họa, từ đó lựa chọn phương pháp phù hợp cho ứng dụng của mình.</description>
    <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/shallow-copy-and-deep-copy-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Giải mã từ khóa this trong JavaScript: Khi nào dùng? Dùng thế nào?</title>
    <link>https://vnntools.com/vi/blog/this-keyword-in-javascript/</link>
    <description>Từ khóa this trong JavaScript là một trong những khái niệm quan trọng nhưng cũng gây nhiều nhầm lẫn. Bài viết này sẽ giúp bạn làm chủ this thông qua các ví dụ thực tế và giải thích dễ hiểu, ngay cả khi bạn là người mới.</description>
    <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/this-keyword-in-javascript/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Basic Directory Structure and Routing in Your Project</title>
    <link>https://vnntools.com/en/blog/basic-directory-structure-and-routing-in-nextjs/</link>
    <description>How to organize your Next.js project effectively? A detailed guide on directory structure and basic routing, helping you build Next.js websites quickly and properly.</description>
    <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/basic-directory-structure-and-routing-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Layouts: A Detailed Guide to Optimizing Your Website UI</title>
    <link>https://vnntools.com/en/blog/layouts-in-nextjs/</link>
    <description>Want to manage your Next.js website layout flexibly and efficiently? This article will guide you on using layouts to speed up development and improve user experience.</description>
    <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/layouts-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Navigation and Linking: How to Use for Optimal Performance</title>
    <link>https://vnntools.com/en/blog/navigation-and-linking-in-nextjs/</link>
    <description>This article will help you master Navigation and Linking in Next.js with ease. Learn in detail how to use Next/link and useRouter for page navigation and optimize your app’s performance.</description>
    <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/navigation-and-linking-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Server Components vs. Client Components: When to Choose Which?</title>
    <link>https://vnntools.com/en/blog/server-components-and-client-components-in-nextjs/</link>
    <description>A detailed comparison of Server Components and Client Components in Next.js. Learn how they work, their pros and cons, and when to use each to optimize your app’s performance.</description>
    <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/server-components-and-client-components-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] The Complete Guide to Styling: Which Option is Best for You?</title>
    <link>https://vnntools.com/en/blog/styling-in-nextjs/</link>
    <description>Step-by-step guide to styling in Next.js. This article covers best practices and performance tips to help you build beautiful and fast UIs.</description>
    <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/styling-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] What is Next.js? Why Should You Choose It in 2025?</title>
    <link>https://vnntools.com/en/blog/what-is-nextjs/</link>
    <description>Curious about Next.js? This article explains what Next.js is, why it matters for SEO and performance, and the outstanding benefits of using it.</description>
    <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Cấu trúc thư mục và Routing cơ bản trong dự án</title>
    <link>https://vnntools.com/vi/blog/basic-directory-structure-and-routing-in-nextjs/</link>
    <description>Làm thế nào để tổ chức dự án Next.js hiệu quả? Hướng dẫn chi tiết về cấu trúc thư mục và hệ thống routing cơ bản, giúp bạn xây dựng website Next.js nhanh chóng và chuẩn mực.</description>
    <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/basic-directory-structure-and-routing-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Layouts: Hướng dẫn chi tiết để tối ưu giao diện Website</title>
    <link>https://vnntools.com/vi/blog/layouts-in-nextjs/</link>
    <description>Bạn muốn quản lý giao diện website Next.js một cách linh hoạt và hiệu quả? Bài viết này sẽ hướng dẫn bạn cách sử dụng layouts để tăng tốc độ phát triển và cải thiện trải nghiệm người dùng.</description>
    <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/layouts-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Navigation và Linking: Cách sử dụng cho hiệu suất tối ưu</title>
    <link>https://vnntools.com/vi/blog/navigation-and-linking-in-nextjs/</link>
    <description>Bài viết này sẽ giúp bạn làm chủ Navigation và Linking trong Next.js một cách dễ dàng. Tìm hiểu chi tiết cách sử dụng Next/link và useRouter để điều hướng trang, tối ưu hiệu suất ứng dụng của bạn.</description>
    <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/navigation-and-linking-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Server Components vs. Client Components: Khi nào chọn cái nào?</title>
    <link>https://vnntools.com/vi/blog/server-components-and-client-components-in-nextjs/</link>
    <description>So sánh chi tiết Server Components và Client Components trong Next.js. Tìm hiểu cách chúng hoạt động, ưu nhược điểm và khi nào nên sử dụng từng loại để tối ưu hiệu suất ứng dụng của bạn.</description>
    <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/server-components-and-client-components-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Styling toàn tập: Lựa chọn nào là phù hợp nhất với bạn?</title>
    <link>https://vnntools.com/vi/blog/styling-in-nextjs/</link>
    <description>Hướng dẫn từng bước cách styling trong Next.js. Bài viết này bao gồm các best practices, tips tối ưu hiệu suất để giúp bạn xây dựng UI đẹp mắt và nhanh chóng.</description>
    <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/styling-in-nextjs/</guid>
  </item>
  <item>
    <title>[Next.js Tutorial] Next.js là gì? Tại sao nên lựa chọn nó trong 2025?</title>
    <link>https://vnntools.com/vi/blog/what-is-nextjs/</link>
    <description>Bạn có đang băn khoăn về Next.js? Bài viết này sẽ giải đáp Next.js là gì, tại sao nó lại quan trọng cho SEO và hiệu suất, và những lợi ích vượt trội khi sử dụng nó.</description>
    <pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-nextjs/</guid>
  </item>
  <item>
    <title>[JS Basics] Conditional Statements in JavaScript: Examples &amp; Effective Usage</title>
    <link>https://vnntools.com/en/blog/conditional-statements-in-javascript/</link>
    <description>Master common conditional statements in JavaScript like if, if-else, switch. Detailed guide from syntax to practical application in real-world projects.</description>
    <pubDate>Tue, 16 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/conditional-statements-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Functions in JavaScript: Concepts, Declarations, and Detailed Examples</title>
    <link>https://vnntools.com/en/blog/functions-in-javascript/</link>
    <description>Discover the power of Functions in JavaScript! Step-by-step guide on how to write and use functions effectively. Start learning now to level up your coding skills.</description>
    <pubDate>Tue, 16 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/functions-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Loops in JavaScript: A Detailed Guide for Beginners</title>
    <link>https://vnntools.com/en/blog/loops-in-javascript/</link>
    <description>&apos;JavaScript loops are essential tools. Discover how to use for, while, and other loops effectively to optimize your code, with practical examples and expert tips.</description>
    <pubDate>Tue, 16 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/loops-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Câu lệnh điều kiện trong JavaScript: Ví dụ &amp; cách dùng hiệu quả</title>
    <link>https://vnntools.com/vi/blog/conditional-statements-in-javascript/</link>
    <description>Nắm vững các câu lệnh điều kiện phổ biến trong JavaScript như if, if-else, switch. Hướng dẫn chi tiết từ cú pháp đến cách áp dụng trong các dự án thực tế.</description>
    <pubDate>Tue, 16 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/conditional-statements-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Hàm trong JavaScript: Khái niệm, cách khai báo và ví dụ chi tiết</title>
    <link>https://vnntools.com/vi/blog/functions-in-javascript/</link>
    <description>Khám phá sức mạnh của hàm (Functions) trong JavaScript! Hướng dẫn từng bước cách viết và sử dụng hàm hiệu quả. Bắt đầu học ngay để nâng cao kỹ năng code của bạn.</description>
    <pubDate>Tue, 16 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/functions-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Vòng lặp trong JavaScript: Hướng dẫn chi tiết cho người mới</title>
    <link>https://vnntools.com/vi/blog/loops-in-javascript/</link>
    <description>Vòng lặp JavaScript là công cụ không thể thiếu. Khám phá cách sử dụng hiệu quả for, while, và các vòng lặp khác để tối ưu hóa code. Kèm theo ví dụ thực tế và mẹo nhỏ từ chuyên gia.</description>
    <pubDate>Tue, 16 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/loops-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Operators in JavaScript: Overview and Easy-to-Follow Practical Examples</title>
    <link>https://vnntools.com/en/blog/basic-operators-in-javascript/</link>
    <description>Want to master JavaScript? Start by understanding the basic operators. This detailed guide will help you get familiar with the most common types of operators, from arithmetic to logic, with real-world examples.</description>
    <pubDate>Mon, 15 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/basic-operators-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] How to Set Up a JavaScript Runtime Environment</title>
    <link>https://vnntools.com/en/blog/setting-up-the-javascript-runtime-environment/</link>
    <description>Are you new to programming and want to start with JavaScript? This article will guide you step-by-step on how to set up a JavaScript runtime environment on your computer easily and quickly.</description>
    <pubDate>Mon, 15 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/setting-up-the-javascript-runtime-environment/</guid>
  </item>
  <item>
    <title>[JS Basics] Variables and Data Types: Essential Concepts to Master</title>
    <link>https://vnntools.com/en/blog/variables-and-data-types-in-javascript/</link>
    <description>Mastering variables and data types is the key to becoming a great JavaScript developer. This article provides you with a solid foundation and practical examples.</description>
    <pubDate>Mon, 15 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/variables-and-data-types-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Toán tử trong JavaScript: Tổng hợp và ví dụ thực hành dễ hiểu</title>
    <link>https://vnntools.com/vi/blog/basic-operators-in-javascript/</link>
    <description>Bạn muốn làm chủ JavaScript? Hãy bắt đầu bằng cách nắm vững các toán tử cơ bản. Hướng dẫn chi tiết này sẽ giúp bạn làm quen với các loại toán tử phổ biến nhất, từ số học đến logic, với các ví dụ thực tế.</description>
    <pubDate>Mon, 15 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/basic-operators-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] Cách thiết lập môi trường chạy mã JavaScript</title>
    <link>https://vnntools.com/vi/blog/setting-up-the-javascript-runtime-environment/</link>
    <description>Bạn là người mới học lập trình và muốn bắt đầu với JavaScript? Bài viết này sẽ hướng dẫn bạn từng bước cách thiết lập môi trường chạy JavaScript trên máy tính một cách dễ dàng và nhanh chóng nhất.</description>
    <pubDate>Mon, 15 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/setting-up-the-javascript-runtime-environment/</guid>
  </item>
  <item>
    <title>[JS Basics] Biến và Kiểu dữ liệu: Khái niệm quan trọng cần nắm vững</title>
    <link>https://vnntools.com/vi/blog/variables-and-data-types-in-javascript/</link>
    <description>Nắm vững biến và các kiểu dữ liệu là chìa khóa để trở thành lập trình viên JavaScript giỏi. Bài viết này sẽ cung cấp cho bạn kiến thức nền tảng vững chắc và các ví dụ thực tế.</description>
    <pubDate>Mon, 15 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/variables-and-data-types-in-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] What is JavaScript? Why is it Important for Developers?</title>
    <link>https://vnntools.com/en/blog/what-is-javascript/</link>
    <description>What is JavaScript? This article explains in detail the concept, role, and applications of JavaScript—the indispensable programming language in modern web development.</description>
    <pubDate>Sat, 13 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-javascript/</guid>
  </item>
  <item>
    <title>[JS Basics] JavaScript là gì? Tại sao nó lại quan trọng với lập trình viên?</title>
    <link>https://vnntools.com/vi/blog/what-is-javascript/</link>
    <description>JavaScript là gì? Bài viết này sẽ giải thích chi tiết về khái niệm, vai trò và ứng dụng của JavaScript, ngôn ngữ lập trình không thể thiếu trong phát triển web hiện đại.</description>
    <pubDate>Sat, 13 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-javascript/</guid>
  </item>
  <item>
    <title>[Advanced React] Virtualization in React: Optimizing Performance for Large Lists</title>
    <link>https://vnntools.com/en/blog/virtualization-in-react/</link>
    <description>A comprehensive guide to Virtualization techniques in React. Learn how it works, its benefits, and how to implement it to improve user experience in data-heavy applications.</description>
    <pubDate>Thu, 11 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/virtualization-in-react/</guid>
  </item>
  <item>
    <title>[Advanced React] Virtualization trong React: Tối ưu hiệu suất cho danh sách lớn</title>
    <link>https://vnntools.com/vi/blog/virtualization-in-react/</link>
    <description>Hướng dẫn toàn diện về kỹ thuật Virtualization trong React. Tìm hiểu cách thức hoạt động, lợi ích và cách triển khai để cải thiện trải nghiệm người dùng trên các ứng dụng có nhiều dữ liệu.</description>
    <pubDate>Thu, 11 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/virtualization-in-react/</guid>
  </item>
  <item>
    <title>[Advanced React] Micro-Frontends Architecture: A Solution for Large Web Apps</title>
    <link>https://vnntools.com/en/blog/micro-frontends-architecture/</link>
    <description>Looking for a solution for large web apps? Discover how Micro-Frontends architecture enables independent frontend teams, accelerates development, and makes scaling easier.</description>
    <pubDate>Tue, 09 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/micro-frontends-architecture/</guid>
  </item>
  <item>
    <title>[Advanced React] Kiến trúc Micro-Frontends: Giải pháp cho ứng dụng web lớn</title>
    <link>https://vnntools.com/vi/blog/micro-frontends-architecture/</link>
    <description>Bạn đang tìm giải pháp cho ứng dụng web lớn? Khám phá kiến trúc Micro-Frontends giúp đội ngũ frontend làm việc độc lập, tăng tốc độ phát triển và dễ dàng mở rộng.</description>
    <pubDate>Tue, 09 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/micro-frontends-architecture/</guid>
  </item>
  <item>
    <title>[Advanced React] Analyze and Optimize Bundle Size in React: A Detailed Guide</title>
    <link>https://vnntools.com/en/blog/analyze-and-optimize-bundle-size-in-react/</link>
    <description>Struggling with large bundle size in React? This article guides you through analyzing, identifying unnecessary packages, and effectively optimizing your bundle size for dramatically faster load times.</description>
    <pubDate>Mon, 08 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/analyze-and-optimize-bundle-size-in-react/</guid>
  </item>
  <item>
    <title>[Advanced React] Phân tích và Tối ưu Bundle Size trong React: Hướng dẫn chi tiết</title>
    <link>https://vnntools.com/vi/blog/analyze-and-optimize-bundle-size-in-react/</link>
    <description>Bạn đang gặp vấn đề về bundle size lớn trong React? Bài viết này hướng dẫn cách phân tích, xác định các gói không cần thiết và tối ưu bundle size hiệu quả, giúp tăng tốc độ tải trang đáng kể.</description>
    <pubDate>Mon, 08 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/analyze-and-optimize-bundle-size-in-react/</guid>
  </item>
  <item>
    <title>[Advanced React] React Component Composition: Effective Advanced Techniques</title>
    <link>https://vnntools.com/en/blog/advanced-react-component-composition/</link>
    <description>Master advanced component composition techniques in React. This article will help you refactor components efficiently, make them more extensible, and manage your code better.</description>
    <pubDate>Sun, 07 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/advanced-react-component-composition/</guid>
  </item>
  <item>
    <title>[Advanced React] What Are Synthetic Events in React? Do You Really Understand Them?</title>
    <link>https://vnntools.com/en/blog/synthetic-events-in-react/</link>
    <description>A complete guide to Synthetic Events in React. From understanding how they work to practical examples, this article will help you master event handling in React easily and effectively.</description>
    <pubDate>Sun, 07 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/synthetic-events-in-react/</guid>
  </item>
  <item>
    <title>[Advanced React] React Component Composition: Các kỹ thuật nâng cao hiệu quả</title>
    <link>https://vnntools.com/vi/blog/advanced-react-component-composition/</link>
    <description>Nắm vững các kỹ thuật component composition nâng cao trong React. Bài viết sẽ giúp bạn tái cấu trúc component hiệu quả, dễ mở rộng và quản lý code tốt hơn.</description>
    <pubDate>Sun, 07 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/advanced-react-component-composition/</guid>
  </item>
  <item>
    <title>[Advanced React] Synthetic Events trong React là gì? Bạn đã hiểu đúng chưa?</title>
    <link>https://vnntools.com/vi/blog/synthetic-events-in-react/</link>
    <description>Hướng dẫn toàn tập về Synthetic Events trong React. Từ việc hiểu cơ chế hoạt động đến các ví dụ thực tế, bài viết này sẽ giúp bạn làm chủ việc xử lý sự kiện trong React một cách dễ dàng và hiệu quả.</description>
    <pubDate>Sun, 07 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/synthetic-events-in-react/</guid>
  </item>
  <item>
    <title>[Advanced React] React Concurrent Mode: Taking App Performance to the Next Level</title>
    <link>https://vnntools.com/en/blog/react-concurrent-mode/</link>
    <description>React Concurrent Mode is a crucial feature that enables React apps to handle multiple tasks at once. Learn how it works and how to implement it to optimize your app’s performance.</description>
    <pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-concurrent-mode/</guid>
  </item>
  <item>
    <title>[Advanced React] What is React Fiber? Understanding Its Architecture and How It Works</title>
    <link>https://vnntools.com/en/blog/react-fiber/</link>
    <description>Learn about React Fiber, the core architecture that makes React faster and smoother. Discover how it works, its benefits, and its importance in optimizing React app performance.</description>
    <pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-fiber/</guid>
  </item>
  <item>
    <title>[Advanced React] Understanding Render Phase and Commit Phase to Optimize React Performance</title>
    <link>https://vnntools.com/en/blog/render-phase-and-commit-phase-in-react/</link>
    <description>Have you heard of the Render Phase and Commit Phase? Don’t miss this article to deeply understand how React handles UI updates, so you can improve performance and write more effective React code.</description>
    <pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/render-phase-and-commit-phase-in-react/</guid>
  </item>
  <item>
    <title>[Advanced React] A Detailed Guide to Time Slicing and Scheduling in React</title>
    <link>https://vnntools.com/en/blog/time-slicing-and-scheduling-in-react/</link>
    <description>Did you know Time Slicing makes your React apps smoother? This article explains in detail how React’s Scheduling mechanism works and how to leverage it.</description>
    <pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/time-slicing-and-scheduling-in-react/</guid>
  </item>
  <item>
    <title>[Advanced React] React Concurrent Mode: Tăng hiệu suất ứng dụng lên mức tối đa</title>
    <link>https://vnntools.com/vi/blog/react-concurrent-mode/</link>
    <description>React Concurrent Mode là một tính năng quan trọng giúp React ứng dụng xử lý nhiều công việc cùng lúc. Tìm hiểu cách nó hoạt động và cách triển khai để tối ưu hiệu suất ứng dụng.</description>
    <pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-concurrent-mode/</guid>
  </item>
  <item>
    <title>[Advanced React] React Fiber là gì? Hiểu rõ kiến trúc và cách hoạt động của nó</title>
    <link>https://vnntools.com/vi/blog/react-fiber/</link>
    <description>Tìm hiểu về React Fiber, kiến trúc cốt lõi giúp React trở nên nhanh hơn và mượt mà hơn. Khám phá cơ chế hoạt động, lợi ích và tầm quan trọng của nó trong việc tối ưu hiệu suất ứng dụng React.</description>
    <pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-fiber/</guid>
  </item>
  <item>
    <title>[Advanced React] Hiểu rõ Render Phase và Commit Phase để tối ưu hiệu năng React</title>
    <link>https://vnntools.com/vi/blog/render-phase-and-commit-phase-in-react/</link>
    <description>Bạn đã biết về Render Phase và Commit Phase chưa? Đừng bỏ lỡ bài viết này để hiểu cặn kẽ về cách React xử lý cập nhật giao diện, từ đó cải thiện hiệu suất và viết code React hiệu quả hơn.</description>
    <pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/render-phase-and-commit-phase-in-react/</guid>
  </item>
  <item>
    <title>[Advanced React] Hướng dẫn chi tiết về Time Slicing và Scheduling trong React</title>
    <link>https://vnntools.com/vi/blog/time-slicing-and-scheduling-in-react/</link>
    <description>Bạn có biết Time Slicing giúp ứng dụng React mượt mà hơn? Bài viết này sẽ giải thích chi tiết cách cơ chế Scheduling của React hoạt động và cách tận dụng nó.</description>
    <pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/time-slicing-and-scheduling-in-react/</guid>
  </item>
  <item>
    <title>[Advanced React] Virtual DOM in React: The Foundation of Performance and How It Works</title>
    <link>https://vnntools.com/en/blog/virtual-dom-in-react/</link>
    <description>A deep dive into the Virtual DOM in React—one of the most important concepts for fast rendering. Understand how it works, its key advantages, and why it’s so popular.</description>
    <pubDate>Thu, 04 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/virtual-dom-in-react/</guid>
  </item>
  <item>
    <title>[Advanced React] Virtual DOM trong React: Nền tảng hiệu suất và cơ chế hoạt động</title>
    <link>https://vnntools.com/vi/blog/virtual-dom-in-react/</link>
    <description>Tìm hiểu chi tiết về Virtual DOM trong React - một trong những khái niệm quan trọng nhất giúp tăng tốc độ render. Bạn sẽ hiểu được cách nó hoạt động, các ưu điểm vượt trội và tại sao nó lại được ưa chuộng.</description>
    <pubDate>Thu, 04 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/virtual-dom-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] How to Deploy a React App Easily in 5 Minutes</title>
    <link>https://vnntools.com/en/blog/how-to-deploy-react-app/</link>
    <description>Struggling to deploy your React app? Check out this step-by-step guide to deploy your React app quickly and easily.</description>
    <pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-to-deploy-react-app/</guid>
  </item>
  <item>
    <title>[React Basics] How to Use the Profiler in React DevTools to Optimize Performance</title>
    <link>https://vnntools.com/en/blog/how-to-use-profiler-in-react-devtools/</link>
    <description>Looking to optimize your React app’s performance? Learn how to use the Profiler in React DevTools to analyze and identify performance bottlenecks, helping your app run smoother.</description>
    <pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-to-use-profiler-in-react-devtools/</guid>
  </item>
  <item>
    <title>[React Basics] Mastering the Most Important Design Patterns</title>
    <link>https://vnntools.com/en/blog/react-design-patterns/</link>
    <description>A comprehensive collection of the most important React Design Patterns every developer should know. Level up your code quality and become a React expert with these practical insights.</description>
    <pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-design-patterns/</guid>
  </item>
  <item>
    <title>[React Basics] A Guide to Testing in React: Ensuring Your App Works Perfectly</title>
    <link>https://vnntools.com/en/blog/testing-in-react/</link>
    <description>Learn about React testing, unit tests, and integration tests in this in-depth article. Level up your programming skills by learning how to effectively test your React components.</description>
    <pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/testing-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Using TypeScript with React: The Big Benefits</title>
    <link>https://vnntools.com/en/blog/typescript-with-react/</link>
    <description>Discover the benefits of combining TypeScript with React. This detailed guide helps you write safer, more maintainable code and reduce bugs in large projects.</description>
    <pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/typescript-with-react/</guid>
  </item>
  <item>
    <title>[React Basics] Cách deploy ứng dụng React dễ dàng trong 5 phút</title>
    <link>https://vnntools.com/vi/blog/how-to-deploy-react-app/</link>
    <description>Bạn đang gặp khó khăn khi deploy ứng dụng React? Xem ngay hướng dẫn chi tiết từng bước để deploy app React một cách dễ dàng và nhanh chóng.</description>
    <pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-to-deploy-react-app/</guid>
  </item>
  <item>
    <title>[React Basics] Cách sử dụng Profiler trong React DevTools để tối ưu hiệu năng</title>
    <link>https://vnntools.com/vi/blog/how-to-use-profiler-in-react-devtools/</link>
    <description>Bạn đang tìm cách tối ưu hiệu suất ứng dụng React? Học cách sử dụng Profiler trong React DevTools để phân tích và tìm ra các điểm nghẽn hiệu năng, giúp ứng dụng của bạn chạy mượt mà hơn.</description>
    <pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-to-use-profiler-in-react-devtools/</guid>
  </item>
  <item>
    <title>[React Basics] Thành thạo các Design Patterns quan trọng nhất</title>
    <link>https://vnntools.com/vi/blog/react-design-patterns/</link>
    <description>Tổng hợp các React Design Patterns quan trọng nhất mà mọi lập trình viên đều cần biết. Nâng cao chất lượng code và trở thành một chuyên gia React với những kiến thức thực tiễn này.</description>
    <pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-design-patterns/</guid>
  </item>
  <item>
    <title>[React Basics] Hướng dẫn Testing trong React: Đảm bảo ứng dụng hoạt động hoàn hảo</title>
    <link>https://vnntools.com/vi/blog/testing-in-react/</link>
    <description>Tìm hiểu về React testing, unit test và integration test trong bài viết chuyên sâu này. Nâng cao kỹ năng lập trình của bạn bằng cách học cách kiểm thử các React components một cách hiệu quả.</description>
    <pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/testing-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Sử dụng TypeScript với React: Những lợi ích to lớn</title>
    <link>https://vnntools.com/vi/blog/typescript-with-react/</link>
    <description>Tìm hiểu những lợi ích khi kết hợp TypeScript với React. Hướng dẫn chi tiết giúp bạn viết code an toàn, dễ bảo trì và giảm thiểu lỗi trong các dự án lớn.</description>
    <pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/typescript-with-react/</guid>
  </item>
  <item>
    <title>[React Basics] Code Splitting: The Must-Know Performance Optimization Technique</title>
    <link>https://vnntools.com/en/blog/code-splitting-in-react/</link>
    <description>Learn what Code Splitting in React is and how to implement it to reduce bundle size and speed up page loads. Detailed guide with practical examples to help you optimize your React app performance.</description>
    <pubDate>Tue, 02 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/code-splitting-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Is Redux Still Relevant? The Most Powerful Redux Alternatives</title>
    <link>https://vnntools.com/en/blog/redux-alternatives/</link>
    <description>Looking for a better state management solution than Redux? This article provides a detailed comparison of MobX, Zustand, Jotai, and other libraries to help you choose the best fit for your React project.</description>
    <pubDate>Tue, 02 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/redux-alternatives/</guid>
  </item>
  <item>
    <title>[React Basics] Redux Toolkit: Learn to Upgrade Redux with Handy Tools</title>
    <link>https://vnntools.com/en/blog/redux-toolkit/</link>
    <description>Struggling with Redux? Redux Toolkit is the solution. Discover how Redux Toolkit reduces boilerplate, optimizes your workflow, and helps you manage state efficiently in React applications.</description>
    <pubDate>Tue, 02 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/redux-toolkit/</guid>
  </item>
  <item>
    <title>[React Basics] Effective and Optimal Styling in React</title>
    <link>https://vnntools.com/en/blog/styling-in-react/</link>
    <description>Learn about styling methods in React from basic to advanced. This article will guide you through using CSS, SCSS, CSS-in-JS (Styled-components, Emotion), and CSS Modules to create beautiful and manageable interfaces.</description>
    <pubDate>Tue, 02 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/styling-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Code Splitting: Kỹ thuật tối ưu hóa hiệu suất React không thể bỏ qua</title>
    <link>https://vnntools.com/vi/blog/code-splitting-in-react/</link>
    <description>Tìm hiểu Code Splitting trong React là gì và cách triển khai để giảm dung lượng file bundle, tăng tốc độ tải trang. Hướng dẫn chi tiết với các ví dụ thực tế giúp bạn tối ưu hóa hiệu suất ứng dụng React.</description>
    <pubDate>Tue, 02 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/code-splitting-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Redux có còn phù hợp? Các giải pháp thay thế Redux mạnh mẽ nhất</title>
    <link>https://vnntools.com/vi/blog/redux-alternatives/</link>
    <description>Bạn đang tìm kiếm giải pháp quản lý state tốt hơn Redux? Bài viết này so sánh chi tiết MobX, Zustand, Jotai và các thư viện khác, giúp bạn đưa ra lựa chọn phù hợp nhất cho dự án React của mình.</description>
    <pubDate>Tue, 02 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/redux-alternatives/</guid>
  </item>
  <item>
    <title>[React Basics] Redux Toolkit: Học cách nâng cấp Redux với các công cụ tiện lợi</title>
    <link>https://vnntools.com/vi/blog/redux-toolkit/</link>
    <description>Bạn đang gặp khó khăn khi học Redux? Redux Toolkit chính là giải pháp. Tìm hiểu cách Redux Toolkit giúp giảm boilerplate code, tối ưu quy trình phát triển và quản lý state một cách hiệu quả trong ứng dụng React.</description>
    <pubDate>Tue, 02 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/redux-toolkit/</guid>
  </item>
  <item>
    <title>[React Basics] Học cách Styling trong React hiệu quả và tối ưu</title>
    <link>https://vnntools.com/vi/blog/styling-in-react/</link>
    <description>Tìm hiểu các phương pháp styling trong React từ cơ bản đến nâng cao. Bài viết sẽ hướng dẫn bạn cách sử dụng CSS, SCSS, CSS-in-JS (Styled-components, Emotion) và CSS Modules để tạo giao diện đẹp mắt và dễ quản lý.</description>
    <pubDate>Tue, 02 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/styling-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Everything About Redux in React: Definition, Principles and Detailed Examples</title>
    <link>https://vnntools.com/en/blog/redux-in-react/</link>
    <description>Explore the power of Redux in React. Learn about its working principles, core components and practical examples to help you master State Management.</description>
    <pubDate>Mon, 01 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/redux-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] When Do You Need State Management in a React App?</title>
    <link>https://vnntools.com/en/blog/when-is-state-management-needed-in-react/</link>
    <description>Wondering whether to use state management in your React project? This article helps you understand when it is and isn’t needed, so you can make the best choice.</description>
    <pubDate>Mon, 01 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/when-is-state-management-needed-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Tất tật về Redux trong React: Định nghĩa, Nguyên lý và Ví dụ chi tiết</title>
    <link>https://vnntools.com/vi/blog/redux-in-react/</link>
    <description>Khám phá sức mạnh của Redux trong React. Tìm hiểu nguyên lý hoạt động, các thành phần cốt lõi và ví dụ thực tế giúp bạn làm chủ State Management.</description>
    <pubDate>Mon, 01 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/redux-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Khi nào nên dùng State Management trong ứng dụng React?</title>
    <link>https://vnntools.com/vi/blog/when-is-state-management-needed-in-react/</link>
    <description>Bạn đang băn khoăn về việc sử dụng State Management trong dự án React? Bài viết này sẽ giúp bạn hiểu rõ các trường hợp cần và không cần, từ đó đưa ra lựa chọn tối ưu nhất.</description>
    <pubDate>Mon, 01 Sep 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/when-is-state-management-needed-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Optimizing Fetch API in React: Handling Asynchronous Data</title>
    <link>https://vnntools.com/en/blog/fetch-api-in-react/</link>
    <description>Learn effective methods for handling asynchronous data with the Fetch API in React. Improve your state management, error handling, and application performance.</description>
    <pubDate>Sun, 31 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/fetch-api-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Using Axios Library in React: Efficient Asynchronous Data Handling</title>
    <link>https://vnntools.com/en/blog/using-axios-library-in-react/</link>
    <description>Learn effective methods for handling asynchronous data with the Axios library in React. Improve your state management, error handling, and application performance.</description>
    <pubDate>Sun, 31 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/using-axios-library-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Tối ưu Fetch API trong React: Xử lý dữ liệu bất đồng bộ</title>
    <link>https://vnntools.com/vi/blog/fetch-api-in-react/</link>
    <description>Tìm hiểu các phương pháp hiệu quả để xử lý dữ liệu bất đồng bộ với Fetch API trong React. Nâng cao kỹ năng quản lý state, xử lý lỗi và tối ưu hiệu suất ứng dụng của bạn.</description>
    <pubDate>Sun, 31 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/fetch-api-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Tăng tốc ứng dụng React với thư viện Axios: Tại sao nên sử dụng?</title>
    <link>https://vnntools.com/vi/blog/using-axios-library-in-react/</link>
    <description>Hướng dẫn chi tiết cách tích hợp thư viện Axios vào ứng dụng React của bạn. Tìm hiểu về interceptors, error handling, và cách tạo một client Axios tái sử dụng.</description>
    <pubDate>Sun, 31 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/using-axios-library-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Dynamic Routes in React: The Secret to Building Flexible Apps</title>
    <link>https://vnntools.com/en/blog/dynamic-routes-in-react/</link>
    <description>Want to create web pages with flexible URLs? This article will guide you through building Dynamic Routes in React Router in a detailed and easy-to-understand way.</description>
    <pubDate>Sat, 30 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/dynamic-routes-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] The Most Effective Way to Build Nested Routes in React</title>
    <link>https://vnntools.com/en/blog/nested-routes-in-react/</link>
    <description>Struggling with Nested Routes in React? This guide explains the core concepts and provides illustrative code samples to help you master them.</description>
    <pubDate>Sat, 30 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/nested-routes-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Dynamic Routes trong React: Bí quyết tạo nên ứng dụng linh hoạt</title>
    <link>https://vnntools.com/vi/blog/dynamic-routes-in-react/</link>
    <description>Bạn muốn tạo các trang web với URL linh hoạt? Bài viết này sẽ hướng dẫn bạn cách xây dựng Dynamic Routes trong React Router một cách chi tiết và dễ hiểu.</description>
    <pubDate>Sat, 30 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/dynamic-routes-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Cách dựng Nested Routes trong React hiệu quả nhất</title>
    <link>https://vnntools.com/vi/blog/nested-routes-in-react/</link>
    <description>Gặp khó khăn với Nested Routes trong React? Hướng dẫn này sẽ giải thích các khái niệm cốt lõi và cung cấp mã nguồn minh họa, giúp bạn khắc phục mọi vấn đề.</description>
    <pubDate>Sat, 30 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/nested-routes-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Understanding React.memo: When to Use It and When Not To?</title>
    <link>https://vnntools.com/en/blog/react-memo/</link>
    <description>Don’t overuse React.memo! Learn how React.memo works under the hood and when to use it to avoid harming your app’s performance.</description>
    <pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-memo/</guid>
  </item>
  <item>
    <title>[React Basics] useCallback and useMemo: Mastering React App Performance Optimization</title>
    <link>https://vnntools.com/en/blog/usecallback-and-usememo/</link>
    <description>Understand the difference between useCallback and useMemo in React. This article explains in detail how they work and when to use them to optimize your app’s performance.</description>
    <pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/usecallback-and-usememo/</guid>
  </item>
  <item>
    <title>[React Basics] Managing Complex State with the useReducer Hook in React</title>
    <link>https://vnntools.com/en/blog/usereducer-hook/</link>
    <description>Discover the useReducer hook—a powerful solution for managing complex state in React. This article will help you understand its principles and how to apply it effectively.</description>
    <pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/usereducer-hook/</guid>
  </item>
  <item>
    <title>[React Basics] Mastering the useRef Hook in React with Practical Examples</title>
    <link>https://vnntools.com/en/blog/useref-hook/</link>
    <description>What is the useRef hook? Learn how to use useRef in React to interact with the DOM and store values without causing re-renders. Includes clear and detailed code examples.</description>
    <pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/useref-hook/</guid>
  </item>
  <item>
    <title>[React Basics] Hiểu đúng về React.memo: Khi nào dùng và khi nào không?</title>
    <link>https://vnntools.com/vi/blog/react-memo/</link>
    <description>Đừng quá lạm dụng React.memo! Tìm hiểu cách React.memo hoạt động under the hood và khi nào nên sử dụng để tránh gây hại cho hiệu suất của ứng dụng.</description>
    <pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-memo/</guid>
  </item>
  <item>
    <title>[React Basics] useCallback và useMemo: Hiểu rõ cách tối ưu hiệu năng React App</title>
    <link>https://vnntools.com/vi/blog/usecallback-and-usememo/</link>
    <description>Tìm hiểu sự khác biệt giữa useCallback và useMemo trong React. Bài viết này giải thích chi tiết cách chúng hoạt động và khi nào nên sử dụng để tối ưu hiệu năng ứng dụng của bạn.</description>
    <pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/usecallback-and-usememo/</guid>
  </item>
  <item>
    <title>[React Basics] Quản lý State phức tạp với useReducer Hook trong React</title>
    <link>https://vnntools.com/vi/blog/usereducer-hook/</link>
    <description>Tìm hiểu useReducer hook - giải pháp mạnh mẽ cho việc quản lý state phức tạp trong React. Bài viết này sẽ giúp bạn hiểu rõ nguyên lý hoạt động và cách áp dụng hiệu quả.</description>
    <pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/usereducer-hook/</guid>
  </item>
  <item>
    <title>[React Basics] Hiểu rõ cách dùng useRef Hook trong React với các ví dụ thực tế</title>
    <link>https://vnntools.com/vi/blog/useref-hook/</link>
    <description>useRef hook là gì? Tìm hiểu cách sử dụng useRef trong React để tương tác với DOM, lưu trữ giá trị mà không gây re-render. Kèm theo ví dụ code chi tiết và dễ hiểu.</description>
    <pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/useref-hook/</guid>
  </item>
  <item>
    <title>[React Basics] React Context: Concept &amp; Most Effective Usage</title>
    <link>https://vnntools.com/en/blog/understanding-react-context/</link>
    <description>What is React Context? Learn how to use the React Context API to manage global state easily and efficiently, eliminate Prop Drilling, and optimize your React apps.</description>
    <pubDate>Thu, 28 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/understanding-react-context/</guid>
  </item>
  <item>
    <title>[React Basics] useEffect Hook: Deep Dive into Dependencies and Component Lifecycle</title>
    <link>https://vnntools.com/en/blog/useeffect-hook/</link>
    <description>Do you really understand useEffect? Learn how it works, the role of the dependencies array, and how useEffect mimics class component lifecycle methods.</description>
    <pubDate>Thu, 28 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/useeffect-hook/</guid>
  </item>
  <item>
    <title>[React Basics] useState Hook: How to Manage State Effectively in React</title>
    <link>https://vnntools.com/en/blog/usestate-hook/</link>
    <description>A guide to using the useState Hook for managing state in React function components. Learn practical examples, from basics to advanced, to master this essential React Hook.</description>
    <pubDate>Thu, 28 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/usestate-hook/</guid>
  </item>
  <item>
    <title>[React Basics] React Context: Khái niệm &amp; Cách sử dụng hiệu quả nhất</title>
    <link>https://vnntools.com/vi/blog/understanding-react-context/</link>
    <description>React Context là gì? Học cách sử dụng React Context API để quản lý state toàn cục dễ dàng và hiệu quả, loại bỏ Prop Drilling và tối ưu hóa ứng dụng React.</description>
    <pubDate>Thu, 28 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/understanding-react-context/</guid>
  </item>
  <item>
    <title>[React Basics] useEffect Hook: Hiểu sâu về dependencies và vòng đời component</title>
    <link>https://vnntools.com/vi/blog/useeffect-hook/</link>
    <description>Bạn đã thực sự hiểu về useEffect? Tìm hiểu sâu hơn về cơ chế hoạt động, vai trò của dependencies array và cách useEffect mô phỏng các phương thức trong vòng đời của class component.</description>
    <pubDate>Thu, 28 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/useeffect-hook/</guid>
  </item>
  <item>
    <title>[React Basics] useState Hook: Cách quản lý State hiệu quả trong React</title>
    <link>https://vnntools.com/vi/blog/usestate-hook/</link>
    <description>Hướng dẫn cách sử dụng useState Hook để quản lý state trong các function component của React. Tìm hiểu các ví dụ thực tế, từ cơ bản đến nâng cao, giúp bạn làm chủ React Hook quan trọng này.</description>
    <pubDate>Thu, 28 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/usestate-hook/</guid>
  </item>
  <item>
    <title>[React Basics] The Most Effective Ways to Use Conditional Rendering in React</title>
    <link>https://vnntools.com/en/blog/conditional-rendering-in-react/</link>
    <description>Level up your React skills with Conditional Rendering. This guide explains how to display different elements based on conditions and optimize your app’s performance.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/conditional-rendering-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Form Handling in React: Master State, Controlled Components, and Validation</title>
    <link>https://vnntools.com/en/blog/form-handling-in-react/</link>
    <description>Form handling in React is easier than ever. This article explains controlled components and how to build a complete form from start to finish.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/form-handling-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Guide to Setting Up a React Development Environment</title>
    <link>https://vnntools.com/en/blog/how-to-set-up-a-react-development-environment/</link>
    <description>A step-by-step guide for beginners to set up a React development environment. Learn how to install Node.js, npm, and create your first React project with Create React App or Vite.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-to-set-up-a-react-development-environment/</guid>
  </item>
  <item>
    <title>[React Basics] The key Attribute in React: Understand and Use It Effectively</title>
    <link>https://vnntools.com/en/blog/key-attribute-in-react/</link>
    <description>Do you really understand the key attribute in React? Learn its role, how to use it effectively, and real-world examples to make your code cleaner and more optimized.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/key-attribute-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] React Handling Events: Effective and Optimal Approaches</title>
    <link>https://vnntools.com/en/blog/react-handling-events/</link>
    <description>Handling Events is a crucial skill in React. This article will help you understand the syntax, how to pass arguments, and manage state when working with events.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-handling-events/</guid>
  </item>
  <item>
    <title>[React Basics] Rendering Lists in React: Best Practices and Performance Optimization</title>
    <link>https://vnntools.com/en/blog/rendering-lists-in-react/</link>
    <description>Learn techniques for rendering lists in React, from basic .map() usage to advanced methods for handling dynamic data and optimizing performance. This guide is for all levels.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/rendering-lists-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Stateful vs. Stateless Components: Differences and Usage in React</title>
    <link>https://vnntools.com/en/blog/stateful-and-stateless-components-in-react/</link>
    <description>What are the core differences between Stateful and Stateless Components in React? Learn when and why to use each type to optimize your app’s performance.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/stateful-and-stateless-components-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] What is React? Why Should You Learn React Today?</title>
    <link>https://vnntools.com/en/blog/what-is-react/</link>
    <description>Learn what React is and why it is one of the world’s most popular JavaScript libraries. Discover how React builds user interfaces quickly and efficiently.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-react/</guid>
  </item>
  <item>
    <title>[React Basics] Cách sử dụng Conditional Rendering trong React hiệu quả nhất</title>
    <link>https://vnntools.com/vi/blog/conditional-rendering-in-react/</link>
    <description>Nâng cao kỹ năng React của bạn với Conditional Rendering. Hướng dẫn này sẽ giải thích cách hiển thị các phần tử khác nhau dựa trên điều kiện, tối ưu hóa hiệu suất ứng dụng.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/conditional-rendering-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Xử lý Form trong React: Hiểu rõ State, Controlled Components và Validation</title>
    <link>https://vnntools.com/vi/blog/form-handling-in-react/</link>
    <description>Xử lý Form trong React trở nên dễ dàng hơn bao giờ hết. Bài viết này giải thích cặn kẽ về controlled components và cách xây dựng Form hoàn chỉnh từ đầu đến cuối.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/form-handling-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Hướng dẫn thiết lập môi trường phát triển React</title>
    <link>https://vnntools.com/vi/blog/how-to-set-up-a-react-development-environment/</link>
    <description>Hướng dẫn cách thiết lập môi trường phát triển React cho người mới bắt đầu. Tìm hiểu các bước cài đặt Node.js, npm, và tạo project React đầu tiên với Create React App hoặc Vite.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-to-set-up-a-react-development-environment/</guid>
  </item>
  <item>
    <title>[React Basics] Thuộc tính key trong React: Hiểu rõ và sử dụng hiệu quả</title>
    <link>https://vnntools.com/vi/blog/key-attribute-in-react/</link>
    <description>Bạn đã thực sự hiểu về thuộc tính key trong React? Tìm hiểu vai trò, cách dùng hiệu quả và các ví dụ thực tế giúp code của bạn sạch và tối ưu hơn.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/key-attribute-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] React Handling Events: Những cách làm hiệu quả và tối ưu</title>
    <link>https://vnntools.com/vi/blog/react-handling-events/</link>
    <description>Handling Events là một kỹ năng quan trọng trong React. Bài viết này sẽ giúp bạn hiểu rõ về cú pháp, cách truyền đối số và quản lý trạng thái khi làm việc với các sự kiện.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-handling-events/</guid>
  </item>
  <item>
    <title>[React Basics] Rendering Lists trong React: Cách làm chuẩn và tối ưu hiệu suất</title>
    <link>https://vnntools.com/vi/blog/rendering-lists-in-react/</link>
    <description>Tìm hiểu các kỹ thuật render danh sách trong React, từ cơ bản với .map() đến các phương pháp nâng cao để xử lý dữ liệu động, tối ưu hiệu suất. Hướng dẫn này dành cho mọi cấp độ.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/rendering-lists-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Stateful và Stateless Components: Phân biệt và Ứng dụng trong React</title>
    <link>https://vnntools.com/vi/blog/stateful-and-stateless-components-in-react/</link>
    <description>Sự khác biệt cốt lõi giữa Stateful và Stateless Components trong React là gì? Tìm hiểu khi nào và tại sao nên sử dụng từng loại để tối ưu hiệu suất ứng dụng của bạn.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/stateful-and-stateless-components-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] React là gì? Tại sao nên học React ngay hôm nay?</title>
    <link>https://vnntools.com/vi/blog/what-is-react/</link>
    <description>Tìm hiểu React là gì, tại sao nó là một trong những thư viện JavaScript phổ biến nhất thế giới. Nắm bắt được cách React xây dựng giao diện người dùng nhanh chóng và hiệu quả.</description>
    <pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-react/</guid>
  </item>
  <item>
    <title>[Advanced Docker] Dockerfile Optimization: Reduce Size, Speed Up Builds, Enhance Security</title>
    <link>https://vnntools.com/en/blog/dockerfile-optimization/</link>
    <description>Save hours of Docker build time! Learn advanced Dockerfile optimization techniques to create smaller images, making your apps faster, more stable, and more secure.</description>
    <pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/dockerfile-optimization/</guid>
  </item>
  <item>
    <title>[Advanced Docker] Protect Your Application: Security Best Practices in Docker</title>
    <link>https://vnntools.com/en/blog/security-in-docker/</link>
    <description>Are you confident about Docker security? This article provides a detailed guide to Docker security, from basics to advanced, helping you safeguard your applications against attacks.</description>
    <pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/security-in-docker/</guid>
  </item>
  <item>
    <title>[Advanced Docker] What is Container Orchestration? Discover Its Role &amp; Management Tools</title>
    <link>https://vnntools.com/en/blog/what-is-container-orchestration/</link>
    <description>Learn about Container Orchestration – a powerful automation solution. Discover how it helps you deploy, scale, and manage application containers easily and efficiently.</description>
    <pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-container-orchestration/</guid>
  </item>
  <item>
    <title>[Advanced Docker] Kubernetes: When Do You Really Need This &quot;Giant&quot;?</title>
    <link>https://vnntools.com/en/blog/when-to-use-kubernetes/</link>
    <description>What are the signs you should upgrade to Kubernetes? Learn why this &quot;giant&quot; is crucial for modern apps, from small startups to large systems.</description>
    <pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/when-to-use-kubernetes/</guid>
  </item>
  <item>
    <title>[Advanced Docker] Tối ưu Dockerfile: Giảm kích thước, tăng tốc build, tăng cường bảo mật</title>
    <link>https://vnntools.com/vi/blog/dockerfile-optimization/</link>
    <description>Bạn có thể tiết kiệm hàng giờ chờ đợi build Docker! Tìm hiểu cách tối ưu hóa Dockerfile nâng cao để tạo ra image nhỏ gọn, giúp ứng dụng chạy nhanh, ổn định và bảo mật hơn.</description>
    <pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/dockerfile-optimization/</guid>
  </item>
  <item>
    <title>[Advanced Docker] Bảo vệ ứng dụng của bạn: Những lưu ý về Security trong Docker</title>
    <link>https://vnntools.com/vi/blog/security-in-docker/</link>
    <description>Bạn đã nắm vững về security trong Docker chưa? Bài viết này cung cấp hướng dẫn chi tiết về bảo mật Docker, từ cơ bản đến nâng cao, giúp bạn bảo vệ ứng dụng an toàn trước các cuộc tấn công.</description>
    <pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/security-in-docker/</guid>
  </item>
  <item>
    <title>[Advanced Docker] Container Orchestration là gì? Khám phá vai trò &amp; công cụ quản lý Container</title>
    <link>https://vnntools.com/vi/blog/what-is-container-orchestration/</link>
    <description>Tìm hiểu Container Orchestration - giải pháp tự động hóa mạnh mẽ. Khám phá cách nó giúp bạn triển khai, mở rộng và quản lý các container ứng dụng một cách dễ dàng và hiệu quả.</description>
    <pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-container-orchestration/</guid>
  </item>
  <item>
    <title>[Advanced Docker] Kubernetes: Khi nào bạn thực sự cần &quot;gã khổng lồ&quot; này?</title>
    <link>https://vnntools.com/vi/blog/when-to-use-kubernetes/</link>
    <description>Dấu hiệu nào cho thấy bạn nên nâng cấp lên Kubernetes? Tìm hiểu vì sao &quot;gã khổng lồ&quot; này lại quan trọng đối với các ứng dụng hiện đại, từ startup nhỏ đến các hệ thống lớn.</description>
    <pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/when-to-use-kubernetes/</guid>
  </item>
  <item>
    <title>[Docker Basics] Docker Networking: A Guide to Container Connectivity</title>
    <link>https://vnntools.com/en/blog/learn-about-docker-networking/</link>
    <description>Master Docker networking to optimize performance and security for your applications. A detailed guide on creating and configuring networks, helping you connect containers easily and efficiently.</description>
    <pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/learn-about-docker-networking/</guid>
  </item>
  <item>
    <title>[Docker Basics] Docker Volumes: How to Store and Manage Data</title>
    <link>https://vnntools.com/en/blog/understanding-docker-volumes/</link>
    <description>Master data management in Docker with this detailed guide to Volumes. Learn how to create, use, and manage Volumes to ensure your data is always safe and reusable.</description>
    <pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/understanding-docker-volumes/</guid>
  </item>
  <item>
    <title>[Docker Basics] What is Docker Compose? Importance and Effective Usage</title>
    <link>https://vnntools.com/en/blog/what-is-docker-compose/</link>
    <description>Learn what Docker Compose is and why it is essential when working with Docker. Discover how to deploy multi-container applications more easily than ever.</description>
    <pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-docker-compose/</guid>
  </item>
  <item>
    <title>[Docker Basics] Docker Networking: Hướng dẫn xử lý vấn đề kết nối Container</title>
    <link>https://vnntools.com/vi/blog/learn-about-docker-networking/</link>
    <description>Nắm vững kiến thức về Docker networking để tối ưu hiệu suất và bảo mật cho các ứng dụng của bạn. Hướng dẫn chi tiết cách tạo và cấu hình mạng, giúp bạn liên kết các container một cách dễ dàng và hiệu quả.</description>
    <pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/learn-about-docker-networking/</guid>
  </item>
  <item>
    <title>[Docker Basics] Docker Volumes: Cách sử dụng để lưu trữ và quản lý dữ liệu</title>
    <link>https://vnntools.com/vi/blog/understanding-docker-volumes/</link>
    <description>Làm chủ kỹ năng quản lý dữ liệu trong Docker với hướng dẫn chi tiết về Volumes. Học cách tạo, sử dụng và quản lý Volumes để đảm bảo dữ liệu luôn an toàn và có thể tái sử dụng.</description>
    <pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/understanding-docker-volumes/</guid>
  </item>
  <item>
    <title>[Docker Basics] Docker Compose là gì? Tầm quan trọng và cách sử dụng hiệu quả</title>
    <link>https://vnntools.com/vi/blog/what-is-docker-compose/</link>
    <description>Tìm hiểu Docker Compose là gì và tại sao công cụ này lại quan trọng khi làm việc với Docker. Khám phá cách triển khai các ứng dụng multi-container dễ dàng hơn bao giờ hết.</description>
    <pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-docker-compose/</guid>
  </item>
  <item>
    <title>[Docker Basics] Docker Hub: How to Store and Manage Docker Images Professionally</title>
    <link>https://vnntools.com/en/blog/docker-hub-and-image-management/</link>
    <description>Struggling with Docker Image management? Learn about Docker Hub and tips to push, pull, and manage your image repositories like a pro.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/docker-hub-and-image-management/</guid>
  </item>
  <item>
    <title>[Docker Basics] Image and Container: Concepts, Differences, and Usage</title>
    <link>https://vnntools.com/en/blog/docker-image-and-container/</link>
    <description>A detailed look at Docker Images and Containers. This article will help you understand the concepts, differences, and how to use these two core components of Docker effectively.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/docker-image-and-container/</guid>
  </item>
  <item>
    <title>[Docker Basics] A Simple and Effective Guide to Building Docker Images</title>
    <link>https://vnntools.com/en/blog/how-to-build-docker-image/</link>
    <description>Want to build Docker Images like a pro? This article provides a step-by-step guide, from basic Dockerfiles to optimization tips for creating lightweight and efficient Docker Images.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-to-build-docker-image/</guid>
  </item>
  <item>
    <title>[Docker Basics] Step-by-Step Guide to Installing Docker on Windows, macOS, and Linux</title>
    <link>https://vnntools.com/en/blog/how-to-install-docker-on-operating-systems/</link>
    <description>How to install Docker? Step-by-step instructions for Windows, Mac, and Linux. Learn how to install Docker Desktop and Docker Engine easily.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-to-install-docker-on-operating-systems/</guid>
  </item>
  <item>
    <title>[Docker Basics] Essential Commands to Run Docker Containers</title>
    <link>https://vnntools.com/en/blog/how-to-run-docker-container/</link>
    <description>Learn the basic Docker commands to run containers effectively. This article guides you step-by-step through using docker run, docker ps, and other important options.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-to-run-docker-container/</guid>
  </item>
  <item>
    <title>[Docker Basics] How to Write an Optimal Dockerfile for Beginners</title>
    <link>https://vnntools.com/en/blog/how-to-write-dockerfile/</link>
    <description>A detailed guide to writing effective Dockerfiles for beginners. Learn key instructions, tips for optimizing image size, and how to build production-ready images.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-to-write-dockerfile/</guid>
  </item>
  <item>
    <title>[Docker Basics] What is Docker? How has it changed the programming world?</title>
    <link>https://vnntools.com/en/blog/what-is-docker/</link>
    <description>What is Docker and why is it important for developers? This article explains Docker in the most detailed and easy-to-understand way, helping you get familiar with Docker from the very basics.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-docker/</guid>
  </item>
  <item>
    <title>[Docker Basics] Docker Hub: Cách lưu trữ và quản lý Docker Image chuyên nghiệp</title>
    <link>https://vnntools.com/vi/blog/docker-hub-and-image-management/</link>
    <description>Bạn đang gặp khó khăn trong việc quản lý Docker Image? Tìm hiểu Docker Hub và các bí kíp để đẩy, kéo và quản lý kho Image của bạn một cách chuyên nghiệp.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/docker-hub-and-image-management/</guid>
  </item>
  <item>
    <title>[Docker Basics] Image và Container: Khái niệm, Phân biệt và Cách sử dụng</title>
    <link>https://vnntools.com/vi/blog/docker-image-and-container/</link>
    <description>Tìm hiểu chi tiết về Docker Image và Container. Bài viết này sẽ giúp bạn hiểu rõ khái niệm, cách phân biệt và biết cách sử dụng hai thành phần cốt lõi này của Docker một cách hiệu quả.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/docker-image-and-container/</guid>
  </item>
  <item>
    <title>[Docker Basics] Hướng dẫn cách build Docker Image đơn giản, hiệu quả</title>
    <link>https://vnntools.com/vi/blog/how-to-build-docker-image/</link>
    <description>Bạn muốn build Docker Image một cách chuyên nghiệp? Bài viết này sẽ hướng dẫn chi tiết từng bước, từ Dockerfile cơ bản đến các mẹo tối ưu hóa để Docker Image của bạn gọn nhẹ và hiệu quả.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-to-build-docker-image/</guid>
  </item>
  <item>
    <title>[Docker Basics] Hướng dẫn cài đặt Docker chi tiết trên Windows, macOS và Linux</title>
    <link>https://vnntools.com/vi/blog/how-to-install-docker-on-operating-systems/</link>
    <description>Làm thế nào để cài đặt Docker? Hướng dẫn từng bước cho hệ điều hành Windows, Mac và Linux. Giúp bạn cài Docker Desktop và Docker Engine một cách dễ dàng nhất.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-to-install-docker-on-operating-systems/</guid>
  </item>
  <item>
    <title>[Docker Basics] Hướng dẫn các câu lệnh để khởi chạy Docker Container</title>
    <link>https://vnntools.com/vi/blog/how-to-run-docker-container/</link>
    <description>Tìm hiểu các lệnh Docker cơ bản để chạy container một cách hiệu quả. Bài viết này sẽ hướng dẫn bạn từng bước cách sử dụng các lệnh docker run, docker ps và các tùy chọn quan trọng khác.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-to-run-docker-container/</guid>
  </item>
  <item>
    <title>[Docker Basics] Cách viết Dockerfile chuẩn &amp; tối ưu cho người mới</title>
    <link>https://vnntools.com/vi/blog/how-to-write-dockerfile/</link>
    <description>Hướng dẫn chi tiết cách viết Dockerfile hiệu quả cho người mới. Tìm hiểu các lệnh quan trọng, tips tối ưu dung lượng và cách build image chuẩn cho ứng dụng.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-to-write-dockerfile/</guid>
  </item>
  <item>
    <title>[Docker Basics] Docker là gì? Nó đã thay đổi thế giới lập trình như thế nào?</title>
    <link>https://vnntools.com/vi/blog/what-is-docker/</link>
    <description>Docker là gì và tại sao nó lại quan trọng với các lập trình viên? Bài viết này giải thích theo cách chi tiết và dễ hiểu nhất, giúp bạn làm quen với Docker từ những khái niệm cơ bản nhất.</description>
    <pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-docker/</guid>
  </item>
  <item>
    <title>[Advanced Git] What is Git cherry-pick? The &quot;Magic&quot; Command for Selective Commits</title>
    <link>https://vnntools.com/en/blog/what-is-git-cherry-pick/</link>
    <description>Git cherry-pick is more than just copying a commit. This article reveals tips to use this command effectively, avoid common mistakes, and optimize your Git workflow.</description>
    <pubDate>Sat, 23 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-git-cherry-pick/</guid>
  </item>
  <item>
    <title>[Advanced Git] How to Use Git Stash to Handle Unfinished Changes</title>
    <link>https://vnntools.com/en/blog/what-is-git-stash/</link>
    <description>When you are working on a new feature and an urgent request comes up, git stash is your lifesaver. Learn how git stash can temporarily save your work, giving you flexibility to switch between branches.</description>
    <pubDate>Sat, 23 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-git-stash/</guid>
  </item>
  <item>
    <title>[Advanced Git] What is Git Tag? Usage and Real-World Applications</title>
    <link>https://vnntools.com/en/blog/what-is-git-tag/</link>
    <description>Want to mark important versions of your project? Git Tag is the tool you need. Learn how to use Git Tag to easily track and manage releases, boosting your workflow efficiency.</description>
    <pubDate>Sat, 23 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-git-tag/</guid>
  </item>
  <item>
    <title>[Git nâng cao] Git cherry-pick là gì? Câu lệnh &quot;thần kỳ&quot; giúp chọn lọc commit</title>
    <link>https://vnntools.com/vi/blog/what-is-git-cherry-pick/</link>
    <description>Git cherry-pick không đơn thuần chỉ là sao chép commit. Bài viết sẽ bật mí những thủ thuật giúp bạn sử dụng lệnh này hiệu quả, tránh các lỗi thường gặp và tối ưu hóa quy trình làm việc trên Git.</description>
    <pubDate>Sat, 23 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-git-cherry-pick/</guid>
  </item>
  <item>
    <title>[Git nâng cao] Cách dùng Git Stash xử lý các thay đổi chưa hoàn thành</title>
    <link>https://vnntools.com/vi/blog/what-is-git-stash/</link>
    <description>Khi đang làm việc trên một tính năng mới mà lại phát sinh yêu cầu khẩn cấp, git stash sẽ là &quot;vị cứu tinh&quot;. Tìm hiểu cách git stash tạm thời lưu lại công việc của bạn, giúp bạn linh hoạt hơn khi chuyển đổi giữa các branch.</description>
    <pubDate>Sat, 23 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-git-stash/</guid>
  </item>
  <item>
    <title>[Git nâng cao] Git Tag là gì? Cách dùng và cách ứng dụng trong thực tế</title>
    <link>https://vnntools.com/vi/blog/what-is-git-tag/</link>
    <description>Bạn muốn đánh dấu các phiên bản quan trọng của dự án? Git Tag chính là công cụ bạn cần. Tìm hiểu cách sử dụng Git Tag để dễ dàng theo dõi và quản lý các bản release, từ đó nâng cao hiệu suất làm việc.</description>
    <pubDate>Sat, 23 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-git-tag/</guid>
  </item>
  <item>
    <title>[Advanced Git] Git Reset or Git Revert? Choose the Right Way to Undo</title>
    <link>https://vnntools.com/en/blog/git-reset-or-git-revert/</link>
    <description>No more confusion between git reset and git revert! This guide will help you understand how each command works, so you can choose the right tool to undo changes in Git like a pro.</description>
    <pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/git-reset-or-git-revert/</guid>
  </item>
  <item>
    <title>[Advanced Git] Git Rebase Guide: Understand and Use Effectively</title>
    <link>https://vnntools.com/en/blog/what-is-git-rebase/</link>
    <description>Git Rebase is used to rearrange, combine, and modify commits. This article helps you distinguish Git Rebase from Git Merge, and master how to use Git Rebase effectively and safely.</description>
    <pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-git-rebase/</guid>
  </item>
  <item>
    <title>[Advanced Git] Git reflog: Recovering commit history and every action in Git</title>
    <link>https://vnntools.com/en/blog/what-is-git-reflog/</link>
    <description>What is Git reflog? A detailed guide on how to use git reflog to review your action history and recover changes, ensuring you never lose your code again.</description>
    <pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-git-reflog/</guid>
  </item>
  <item>
    <title>[Git nâng cao] Git Reset hay Git Revert? Lựa chọn hoàn tác đúng cách</title>
    <link>https://vnntools.com/vi/blog/git-reset-or-git-revert/</link>
    <description>Không còn nhầm lẫn giữa git reset và git revert nữa! Hướng dẫn này sẽ giúp bạn hiểu rõ cách hoạt động của từng lệnh, từ đó lựa chọn công cụ đúng đắn để hoàn tác thay đổi trong Git một cách chuyên nghiệp.</description>
    <pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/git-reset-or-git-revert/</guid>
  </item>
  <item>
    <title>[Git nâng cao] Hướng dẫn Git Rebase: Hiểu rõ và sử dụng hiệu quả</title>
    <link>https://vnntools.com/vi/blog/what-is-git-rebase/</link>
    <description>Git Rebase dùng để sắp xếp lại, kết hợp và thay đổi các commit. Bài viết này sẽ giúp bạn phân biệt Git Rebase và Git Merge, đồng thời nắm vững cách dùng Git Rebase hiệu quả, an toàn.</description>
    <pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-git-rebase/</guid>
  </item>
  <item>
    <title>[Git nâng cao] Git reflog: Phục hồi lịch sử commit và mọi thao tác trong Git</title>
    <link>https://vnntools.com/vi/blog/what-is-git-reflog/</link>
    <description>Git reflog là gì? Hướng dẫn chi tiết cách dùng lệnh git reflog để xem lại lịch sử các thao tác và khôi phục những thay đổi, đảm bảo bạn không bao giờ mất code nữa.</description>
    <pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-git-reflog/</guid>
  </item>
  <item>
    <title>[Git Basics] Learn Git Branching: Essential Operations Everyone Should Know</title>
    <link>https://vnntools.com/en/blog/basic-operations-with-git-branch/</link>
    <description>Learn how to work with branches in Git: Create a new branch, switch between branches, and delete branches when no longer needed. This article helps you master Git Branching.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/basic-operations-with-git-branch/</guid>
  </item>
  <item>
    <title>[Git Basics] Git Workflow: A Detailed Guide to Popular Team Collaboration Models</title>
    <link>https://vnntools.com/en/blog/common-git-workflows/</link>
    <description>A guide to applying top Git Workflows. Master Git Flow, GitHub Flow, and GitLab Flow to optimize your development process, ensure code quality, and accelerate your project.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/common-git-workflows/</guid>
  </item>
  <item>
    <title>[Git Basics] How to Connect &amp; Interact Effectively with Remote Repositories</title>
    <link>https://vnntools.com/en/blog/connect-and-interact-with-the-remote-repository/</link>
    <description>Struggling with remote repositories? Discover a detailed guide on how to connect and interact, optimizing your workflow.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/connect-and-interact-with-the-remote-repository/</guid>
  </item>
  <item>
    <title>[Git Basics] Mastering Git Merge with Detailed Guide and Examples</title>
    <link>https://vnntools.com/en/blog/master-git-merge/</link>
    <description>Struggling with Git Merge? Check out this comprehensive guide on how to use Git Merge to combine code and resolve conflicts easily and effectively when working in teams.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/master-git-merge/</guid>
  </item>
  <item>
    <title>[Git Basics] How to Effectively Resolve Merge Conflicts in Git</title>
    <link>https://vnntools.com/en/blog/resolve-merge-conflicts-in-git/</link>
    <description>Struggling with merge conflicts? Read this detailed guide to resolve merge conflicts in Git easily and efficiently, helping your team collaborate smoothly.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/resolve-merge-conflicts-in-git/</guid>
  </item>
  <item>
    <title>[Git Basics] What is a Remote Repository? Everything You Need to Know</title>
    <link>https://vnntools.com/en/blog/what-is-remote-repository/</link>
    <description>What role does a remote repository play in Git? Learn the key differences between remote and local repositories. Master the knowledge to manage your code more professionally.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-remote-repository/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Học Git Branching: Những thao tác cơ bản ai cũng cần biết</title>
    <link>https://vnntools.com/vi/blog/basic-operations-with-git-branch/</link>
    <description>Học cách thao tác với Branch trong Git: Tạo một Branch mới, chuyển đổi giữa các Branch và xóa Branch khi không cần thiết. Bài viết giúp bạn nắm vững kiến thức Git Branching.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/basic-operations-with-git-branch/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Git Workflow: Hướng dẫn chi tiết các mô hình làm việc nhóm phổ biến</title>
    <link>https://vnntools.com/vi/blog/common-git-workflows/</link>
    <description>Hướng dẫn cách áp dụng các Git Workflow hàng đầu. Nắm vững Git Flow, GitHub Flow, GitLab Flow để tối ưu hóa quy trình phát triển, đảm bảo chất lượng code và tăng tốc độ dự án.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/common-git-workflows/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Cách kết nối &amp; tương tác với Remote Repository hiệu quả</title>
    <link>https://vnntools.com/vi/blog/connect-and-interact-with-the-remote-repository/</link>
    <description>Bạn gặp khó khăn khi làm việc với Remote Repository? Khám phá ngay hướng dẫn chi tiết về cách kết nối và tương tác, giúp tối ưu quy trình làm việc của bạn.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/connect-and-interact-with-the-remote-repository/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Học thành thạo Git Merge với hướng dẫn và ví dụ chi tiết</title>
    <link>https://vnntools.com/vi/blog/master-git-merge/</link>
    <description>Bạn gặp khó khăn với Git Merge? Tham khảo ngay bài hướng dẫn cách sử dụng Git Merge để hợp nhất code và giải quyết các xung đột một cách đơn giản, hiệu quả khi làm việc nhóm.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/master-git-merge/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Cách xử lý Merge Conflict trong Git hiệu quả nhất</title>
    <link>https://vnntools.com/vi/blog/resolve-merge-conflicts-in-git/</link>
    <description>Merge conflict gây khó khăn cho bạn? Đọc ngay bài hướng dẫn xử lý merge conflict trong Git một cách dễ dàng, chi tiết và hiệu quả nhất, giúp bạn làm việc nhóm trơn tru hơn.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/resolve-merge-conflicts-in-git/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Remote Repository là gì? Tất tần tật kiến thức cần biết</title>
    <link>https://vnntools.com/vi/blog/what-is-remote-repository/</link>
    <description>Remote repository đóng vai trò gì trong Git? Tìm hiểu sự khác biệt cốt lõi giữa kho lưu trữ từ xa và kho lưu trữ cục bộ. Nắm vững kiến thức để quản lý code chuyên nghiệp hơn.</description>
    <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-remote-repository/</guid>
  </item>
  <item>
    <title>[Git Basics] How to Use Git log: Mastering Commit History</title>
    <link>https://vnntools.com/en/blog/how-to-use-git-log/</link>
    <description>Want to review your project’s change history? A detailed guide to using git log from basic to advanced, helping you manage commits more efficiently and easily.</description>
    <pubDate>Tue, 19 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-to-use-git-log/</guid>
  </item>
  <item>
    <title>[Git Basics] What is a Git Branch? Mastering Branches in Git</title>
    <link>https://vnntools.com/en/blog/what-is-git-branch/</link>
    <description>Branching is a crucial feature that helps split projects in Git. Read this article to understand Git Branch, how to create, delete, and switch between branches easily.</description>
    <pubDate>Tue, 19 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-git-branch/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Cách dùng Git log: Nắm lịch sử commit trong lòng bàn tay</title>
    <link>https://vnntools.com/vi/blog/how-to-use-git-log/</link>
    <description>Bạn muốn xem lại lịch sử thay đổi của dự án? Hướng dẫn chi tiết cách dùng lệnh git log từ cơ bản đến nâng cao, giúp bạn quản lý các commit hiệu quả và dễ dàng hơn.</description>
    <pubDate>Tue, 19 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-to-use-git-log/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Git Branch là gì? Hiểu rõ và làm chủ phân nhánh trong Git</title>
    <link>https://vnntools.com/vi/blog/what-is-git-branch/</link>
    <description>Branch là một tính năng quan trọng giúp chia nhỏ dự án trong Git. Đọc bài viết để hiểu rõ về Git Branch, cách tạo, xóa, và chuyển đổi giữa các nhánh một cách dễ dàng.</description>
    <pubDate>Tue, 19 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-git-branch/</guid>
  </item>
  <item>
    <title>[Git Basics] Understanding the File Life Cycle in Git: 3 States You Need to Know</title>
    <link>https://vnntools.com/en/blog/file-life-cycle-in-git/</link>
    <description>The life cycle of a file in Git is not as complicated as you might think. This article will help you master the 3 main states and how they work to manage your source code more effectively.</description>
    <pubDate>Mon, 18 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/file-life-cycle-in-git/</guid>
  </item>
  <item>
    <title>[Git Basics] What is the .gitignore File? How to Use It Effectively for Every Project</title>
    <link>https://vnntools.com/en/blog/gitignore-file/</link>
    <description>Learn how to use the .gitignore file to exclude temporary files, logs, and unnecessary folders. Simplify your project and keep your Git repository clean.</description>
    <pubDate>Mon, 18 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/gitignore-file/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Hiểu đúng về vòng đời file trong Git: 3 trạng thái bạn cần biết</title>
    <link>https://vnntools.com/vi/blog/file-life-cycle-in-git/</link>
    <description>Vòng đời của một file trong Git không hề phức tạp như bạn nghĩ. Bài viết này sẽ giúp bạn nắm vững 3 trạng thái chính và cách chúng hoạt động để quản lý source code hiệu quả hơn.</description>
    <pubDate>Mon, 18 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/file-life-cycle-in-git/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Tệp tin .gitignore là gì? Cách sử dụng hiệu quả cho mọi dự án</title>
    <link>https://vnntools.com/vi/blog/gitignore-file/</link>
    <description>Học cách sử dụng tệp tin .gitignore để bỏ qua các file tạm, file log, và các thư mục không cần thiết. Đơn giản hóa dự án và giữ cho Git repository của bạn luôn sạch sẽ.</description>
    <pubDate>Mon, 18 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/gitignore-file/</guid>
  </item>
  <item>
    <title>[Git Basics] How to Install and Configure Git Initially: What You Need to Know</title>
    <link>https://vnntools.com/en/blog/how-to-install-and-configure-git-initially/</link>
    <description>Getting started with Git has never been easier! A detailed guide on how to install and configure Git for the first time, helping you set up an efficient working environment in just a few minutes.</description>
    <pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/how-to-install-and-configure-git-initially/</guid>
  </item>
  <item>
    <title>[Git Basics] Git Repository: The Essential Foundation for Source Code Management</title>
    <link>https://vnntools.com/en/blog/what-is-git-repository/</link>
    <description>The Git Repository is the core foundation of Git. Discover how a Git Repository helps you manage, track history, and collaborate effectively in your programming projects.</description>
    <pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-git-repository/</guid>
  </item>
  <item>
    <title>[Git Basics] What is Git? Discover the Role of Git in Programming</title>
    <link>https://vnntools.com/en/blog/what-is-git/</link>
    <description>Git is an extremely popular version control system. This article explains what Git is, why every developer should know it, and the steps to get started.</description>
    <pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-git/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Cài đặt Git và Cấu hình ban đầu: Những điều bạn cần biết</title>
    <link>https://vnntools.com/vi/blog/how-to-install-and-configure-git-initially/</link>
    <description>Bắt đầu với Git chưa bao giờ dễ dàng đến thế! Hướng dẫn chi tiết cách cài đặt và cấu hình Git ban đầu, giúp bạn thiết lập môi trường làm việc hiệu quả chỉ trong vài phút.</description>
    <pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/how-to-install-and-configure-git-initially/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Git Repository: Nền tảng quan trọng cho quản lý mã nguồn</title>
    <link>https://vnntools.com/vi/blog/what-is-git-repository/</link>
    <description>Git Repository là nền tảng cốt lõi của Git. Khám phá cách Git Repository giúp bạn quản lý, theo dõi lịch sử thay đổi và hợp tác hiệu quả trong dự án lập trình.</description>
    <pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-git-repository/</guid>
  </item>
  <item>
    <title>[Git cơ bản] Git là gì? Khám phá vai trò của Git trong lập trình</title>
    <link>https://vnntools.com/vi/blog/what-is-git/</link>
    <description>Git là hệ thống quản lý phiên bản cực kỳ phổ biến. Bài viết này sẽ giải thích Git là gì, tại sao mọi developer đều cần biết Git và các bước để bắt đầu sử dụng.</description>
    <pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-git/</guid>
  </item>
  <item>
    <title>Higher-Order Components (HOC) in React: How to Use and Real-World Applications</title>
    <link>https://vnntools.com/en/blog/hoc-in-react/</link>
    <description>Learn about HOC in React, a powerful technique for reusing component logic. This article guides you through creating and using Higher-Order Components with real-world examples.</description>
    <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/hoc-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Props in React: Concepts, Usage and Real-world Examples</title>
    <link>https://vnntools.com/en/blog/props-in-react/</link>
    <description>Decode props in ReactJS: from basic concepts to effectively passing data between components. Explore easy-to-understand examples that you can apply immediately.</description>
    <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/props-in-react/</guid>
  </item>
  <item>
    <title>Is React CSR or SSR? Deep Analysis of React Rendering Methods</title>
    <link>https://vnntools.com/en/blog/react-is-csr-or-ssr/</link>
    <description>Deep analysis of CSR and SSR in React. Understand the differences, advantages and disadvantages to choose the right rendering method, improve performance and user experience.</description>
    <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-is-csr-or-ssr/</guid>
  </item>
  <item>
    <title>What is Render in React? A Detailed Explanation for Beginners</title>
    <link>https://vnntools.com/en/blog/render-in-react/</link>
    <description>Learn about React rendering mechanism from A to Z. This article clearly explains the concept and how React compares Virtual DOM to efficiently update the UI.</description>
    <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/render-in-react/</guid>
  </item>
  <item>
    <title>What are Side Effects in React? Detailed Explanation and Real Examples</title>
    <link>https://vnntools.com/en/blog/side-effects-in-react/</link>
    <description>Understand side effects in React through real examples. Learn how to use the useEffect hook to manage asynchronous tasks, API calls, and DOM updates efficiently.</description>
    <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/side-effects-in-react/</guid>
  </item>
  <item>
    <title>What is Single Page Application? Benefits and How SPA Works in ReactJS</title>
    <link>https://vnntools.com/en/blog/spa-in-react/</link>
    <description>Learn how to build smooth web applications with SPA in React. Explore the benefits, working principles of Single Page Application and how to optimize them.</description>
    <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/spa-in-react/</guid>
  </item>
  <item>
    <title>Higher-Order Components (HOC) trong React: Cách dùng và ứng dụng thực tế</title>
    <link>https://vnntools.com/vi/blog/hoc-in-react/</link>
    <description>Tìm hiểu HOC trong React, một kỹ thuật mạnh mẽ giúp tái sử dụng logic component. Bài viết này hướng dẫn cách tạo và sử dụng Higher-Order Components với các ví dụ thực tế.</description>
    <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/hoc-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Props trong React: Khái niệm, cách dùng và ví dụ thực tế</title>
    <link>https://vnntools.com/vi/blog/props-in-react/</link>
    <description>Giải mã props trong ReactJS: từ khái niệm cơ bản đến cách truyền dữ liệu giữa các component một cách hiệu quả. Khám phá các ví dụ minh họa dễ hiểu để bạn áp dụng ngay.</description>
    <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/props-in-react/</guid>
  </item>
  <item>
    <title>React là CSR hay SSR? Phân tích chuyên sâu về cách render của React</title>
    <link>https://vnntools.com/vi/blog/react-is-csr-or-ssr/</link>
    <description>Phân tích chuyên sâu về CSR và SSR trong React. Tìm hiểu sự khác biệt, ưu điểm và nhược điểm để lựa chọn phương pháp render đúng đắn, cải thiện hiệu suất và trải nghiệm người dùng.</description>
    <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-is-csr-or-ssr/</guid>
  </item>
  <item>
    <title>Render trong React là gì? Bài giải thích chi tiết cho người mới</title>
    <link>https://vnntools.com/vi/blog/render-in-react/</link>
    <description>Tìm hiểu cơ chế Render trong React từ A đến Z. Bài viết giải thích rõ ràng khái niệm, cách React so sánh Virtual DOM và cập nhật UI hiệu quả.</description>
    <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/render-in-react/</guid>
  </item>
  <item>
    <title>Side Effect trong React là gì? Giải thích chi tiết và Ví dụ thực tế</title>
    <link>https://vnntools.com/vi/blog/side-effects-in-react/</link>
    <description>Hiểu rõ về side effect trong React qua các ví dụ thực tế. Tìm hiểu cách sử dụng useEffect hook để quản lý các tác vụ bất đồng bộ, gọi API và cập nhật DOM một cách hiệu quả.</description>
    <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/side-effects-in-react/</guid>
  </item>
  <item>
    <title>Single Page Application là gì? Lợi ích và cách hoạt động của SPA trong ReactJS</title>
    <link>https://vnntools.com/vi/blog/spa-in-react/</link>
    <description>Học cách xây dựng ứng dụng web mượt mà với SPA trong React. Khám phá lợi ích, nguyên lý hoạt động của Single Page Application và cách tối ưu chúng.</description>
    <pubDate>Sun, 10 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/spa-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] React Component Lifecycle: Essential Knowledge You Need to Master</title>
    <link>https://vnntools.com/en/blog/react-component-lifecycle/</link>
    <description>React Component Lifecycle is fundamental knowledge you must understand. Learn how components are created, updated, and destroyed to optimize performance and avoid common pitfalls in React applications.</description>
    <pubDate>Sat, 09 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-component-lifecycle/</guid>
  </item>
  <item>
    <title>What Can React Do? The Most Outstanding Applications of React</title>
    <link>https://vnntools.com/en/blog/what-can-react-do/</link>
    <description>Do you know what React can do? From building interactive interfaces to complex applications, this article will explore the practical applications and benefits of React.</description>
    <pubDate>Sat, 09 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-can-react-do/</guid>
  </item>
  <item>
    <title>[React Basics] React Component Lifecycle: Tổng hợp những kiến thức bạn cần biết</title>
    <link>https://vnntools.com/vi/blog/react-component-lifecycle/</link>
    <description>React Component Lifecycle là một kiến thức nền tảng bạn phải biết. Tìm hiểu cách một component được tạo, cập nhật và xóa, từ đó tối ưu hiệu suất và tránh các lỗi thường gặp trong ứng dụng React.</description>
    <pubDate>Sat, 09 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-component-lifecycle/</guid>
  </item>
  <item>
    <title>React làm được gì? Nhũng ứng dụng nổi bật nhất của React</title>
    <link>https://vnntools.com/vi/blog/what-can-react-do/</link>
    <description>Bạn có biết React làm được những gì không? Từ xây dựng giao diện tương tác đến các ứng dụng phức tạp, bài viết này sẽ khám phá những ứng dụng thực tế và lợi ích của React.</description>
    <pubDate>Sat, 09 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-can-react-do/</guid>
  </item>
  <item>
    <title>[React Basics] What is JSX in React? A Comprehensive Guide for Beginners</title>
    <link>https://vnntools.com/en/blog/jsx-in-react/</link>
    <description>JSX is a syntax extension for JavaScript that allows you to write HTML-like code in React. This article will help you understand what JSX is, why we need JSX, and how to use it effectively.</description>
    <pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/jsx-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] What is a React Component? A Detailed Guide for Beginners</title>
    <link>https://vnntools.com/en/blog/react-component/</link>
    <description>Understanding React Components is the key to building modern web application interfaces. Read now to master common component types and how to create your first component.</description>
    <pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-component/</guid>
  </item>
  <item>
    <title>[React Basics] What are React Hooks? A Comprehensive Guide for Beginners</title>
    <link>https://vnntools.com/en/blog/react-hook/</link>
    <description>Are you learning about React Hooks? This article will explain what React Hooks are, common types of Hooks, and provide step-by-step guidance on how to apply them to real projects.</description>
    <pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-hook/</guid>
  </item>
  <item>
    <title>[React Basics] What is React Router? Complete Guide for Beginners</title>
    <link>https://vnntools.com/en/blog/react-router/</link>
    <description>What is React Router? Learn how React Router helps you build smooth single-page applications (SPAs). Detailed guide from basic installation to advanced features.</description>
    <pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-router/</guid>
  </item>
  <item>
    <title>Two-way Binding in React: How It Works &amp; Easy-to-Understand Examples</title>
    <link>https://vnntools.com/en/blog/two-way-binding-in-react/</link>
    <description>Detailed guide on two-way binding in React. This article analyzes how it works, explains the differences compared to other frameworks, and provides practical examples.</description>
    <pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/two-way-binding-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] JSX trong React là gì? Hướng dẫn chi tiết cho người mới bắt đầu</title>
    <link>https://vnntools.com/vi/blog/jsx-in-react/</link>
    <description>JSX là cú pháp mở rộng của JavaScript, cho phép viết code giống HTML trong React. Bài viết này sẽ giúp bạn hiểu rõ JSX là gì, tại sao cần dùng JSX và cách sử dụng hiệu quả.</description>
    <pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/jsx-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] Component React là gì? Hướng dẫn chi tiết cho người mới bắt đầu</title>
    <link>https://vnntools.com/vi/blog/react-component/</link>
    <description>Hiểu rõ Component React chính là chìa khóa để xây dựng giao diện ứng dụng web hiện đại. Đọc ngay để nắm vững các loại component phổ biến và cách tạo component đầu tiên của bạn.</description>
    <pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-component/</guid>
  </item>
  <item>
    <title>[React Basics] React Hook là gì? Hướng dẫn chi tiết cho người mới bắt đầu</title>
    <link>https://vnntools.com/vi/blog/react-hook/</link>
    <description>Bạn đang tìm hiểu về React Hook? Bài viết này sẽ giải thích React Hook là gì, các loại Hook phổ biến và hướng dẫn từng bước cách áp dụng chúng vào dự án thực tế.</description>
    <pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-hook/</guid>
  </item>
  <item>
    <title>[React Basics] React Router là gì? Hướng dẫn toàn tập cho người mới bắt đầu</title>
    <link>https://vnntools.com/vi/blog/react-router/</link>
    <description>React Router là gì? Tìm hiểu cách React Router giúp bạn xây dựng ứng dụng một trang (SPA) mượt mà. Hướng dẫn chi tiết từ cài đặt cơ bản đến các tính năng nâng cao.</description>
    <pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-router/</guid>
  </item>
  <item>
    <title>Two-way Binding trong React: Cách hoạt động &amp; Ví dụ minh họa dễ hiểu</title>
    <link>https://vnntools.com/vi/blog/two-way-binding-in-react/</link>
    <description>Hướng dẫn chi tiết về two-way binding trong React. Bài viết phân tích cách nó hoạt động, giải thích sự khác biệt so với các framework khác và cung cấp ví dụ thực tế.</description>
    <pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/two-way-binding-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] State in React: Concepts, Usage, and Detailed Examples</title>
    <link>https://vnntools.com/en/blog/state-in-react/</link>
    <description>Learn the concepts, declaration, and usage of State to manage dynamic data in your React application. See detailed guide with examples.</description>
    <pubDate>Fri, 01 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/state-in-react/</guid>
  </item>
  <item>
    <title>[React Basics] State trong React: Khái niệm, cách sử dụng và ví dụ chi tiết</title>
    <link>https://vnntools.com/vi/blog/state-in-react/</link>
    <description>Tìm hiểu khái niệm, cách khai báo và sử dụng State để quản lý dữ liệu động trong ứng dụng React của bạn. Xem ngay hướng dẫn chi tiết kèm ví dụ.</description>
    <pubDate>Fri, 01 Aug 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/state-in-react/</guid>
  </item>
  <item>
    <title>React Lazy Loading: An Extremely Effective Technique for Accelerating Web Applications</title>
    <link>https://vnntools.com/en/blog/react-lazy-loading/</link>
    <description>Learn React Lazy Loading to improve application performance, reduce page load time, and optimize user experience. Detailed guide for ReactJS developers.</description>
    <pubDate>Thu, 31 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-lazy-loading/</guid>
  </item>
  <item>
    <title>Implementing React Multi-language: Best Practices &amp; Performance Optimization</title>
    <link>https://vnntools.com/en/blog/react-multi-language/</link>
    <description>Learn the best methods to integrate multi-language support into React applications, ensuring high performance and easy maintenance. Elevate your application!</description>
    <pubDate>Thu, 31 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/react-multi-language/</guid>
  </item>
  <item>
    <title>React Lazy Loading: Kỹ thuật tăng tốc Web Application vô cùng hiệu quả</title>
    <link>https://vnntools.com/vi/blog/react-lazy-loading/</link>
    <description>Tìm hiểu React Lazy Loading để cải thiện hiệu suất ứng dụng, giảm thời gian tải trang và tối ưu trải nghiệm người dùng. Hướng dẫn chi tiết cho developer ReactJS.</description>
    <pubDate>Thu, 31 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-lazy-loading/</guid>
  </item>
  <item>
    <title>Triển khai React Multi-language: Best Practices &amp; Tối ưu hiệu năng</title>
    <link>https://vnntools.com/vi/blog/react-multi-language/</link>
    <description>Tìm hiểu các phương pháp tốt nhất để tích hợp đa ngôn ngữ vào ứng dụng React, đảm bảo hiệu suất cao và dễ bảo trì. Nâng tầm ứng dụng của bạn!</description>
    <pubDate>Thu, 31 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/react-multi-language/</guid>
  </item>
  <item>
    <title>Master JavaScript Basic Rules in 5 Minutes - Quick Guide</title>
    <link>https://vnntools.com/en/blog/basic-rules-of-javascript/</link>
    <description>Start your JavaScript journey with the most fundamental rules. Learn how to write proper code, avoid common mistakes, and build a solid foundation for your programming career.</description>
    <pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/basic-rules-of-javascript/</guid>
  </item>
  <item>
    <title>JavaScript Optimization: Complete A-Z Guide for Developers</title>
    <link>https://vnntools.com/en/blog/javascript-optimization/</link>
    <description>Learn how to optimize JavaScript to take your website performance to new heights. Discover effective techniques to improve page loading performance today!</description>
    <pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/javascript-optimization/</guid>
  </item>
  <item>
    <title>HTML Optimization: Speed Up Your Website &amp; Improve SEO Effectively</title>
    <link>https://vnntools.com/en/blog/optimize-html-for-website/</link>
    <description>Learn how to optimize HTML structure, remove redundant code, and apply best practices to make your website run smoothly and be search engine friendly.</description>
    <pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/optimize-html-for-website/</guid>
  </item>
  <item>
    <title>Nắm vững quy tắc cơ bản của JavaScript trong 5 phút - Hướng dẫn nhanh</title>
    <link>https://vnntools.com/vi/blog/basic-rules-of-javascript/</link>
    <description>Bắt đầu hành trình JavaScript của bạn với những quy tắc cơ bản nhất. Học cách viết code đúng chuẩn, tránh lỗi thường gặp và xây dựng nền tảng vững chắc cho sự nghiệp lập trình.</description>
    <pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/basic-rules-of-javascript/</guid>
  </item>
  <item>
    <title>Tối ưu JavaScript: Hướng dẫn chi tiết từ A-Z dành cho Developer</title>
    <link>https://vnntools.com/vi/blog/javascript-optimization/</link>
    <description>Học cách tối ưu JavaScript để tăng tốc website của bạn lên tầm cao mới. Khám phá các kỹ thuật hiệu quả giúp cải thiện hiệu suất tải trang ngay hôm nay!</description>
    <pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/javascript-optimization/</guid>
  </item>
  <item>
    <title>Tối ưu HTML: Tăng tốc website &amp; Cải thiện SEO hiệu quả trông thấy</title>
    <link>https://vnntools.com/vi/blog/optimize-html-for-website/</link>
    <description>Tìm hiểu cách tối ưu cấu trúc HTML, loại bỏ mã thừa và áp dụng các best practice để website của bạn hoạt động mượt mà, thân thiện với công cụ tìm kiếm.</description>
    <pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/optimize-html-for-website/</guid>
  </item>
  <item>
    <title>CSS Precedence: Mastering Specificity to Freely &quot;Control&quot; Your Interface</title>
    <link>https://vnntools.com/en/blog/css-precedence/</link>
    <description>Learn how browsers decide which CSS rules to apply, the order of precedence (specificity) and weights to completely control your web interface.</description>
    <pubDate>Tue, 29 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/css-precedence/</guid>
  </item>
  <item>
    <title>Optimize CSS to Speed Up Your Website: A Complete A-Z Guide</title>
    <link>https://vnntools.com/en/blog/optimize-css-for-website/</link>
    <description>Optimizing CSS for your website helps pages load faster, improves SEO, and enhances user experience. Discover compression techniques, merging, removing unused CSS, and much more!</description>
    <pubDate>Tue, 29 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/optimize-css-for-website/</guid>
  </item>
  <item>
    <title>Thứ tự ưu tiên CSS: Nắm vững trọng số để tự do &quot;điều khiển&quot; giao diện</title>
    <link>https://vnntools.com/vi/blog/css-precedence/</link>
    <description>Học cách trình duyệt quyết định quy tắc CSS nào được áp dụng, thứ tự ưu tiên (specificity) và trọng số để kiểm soát hoàn toàn giao diện web của bạn.</description>
    <pubDate>Tue, 29 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/css-precedence/</guid>
  </item>
  <item>
    <title>Tối ưu CSS để tăng tốc website: Hướng dẫn toàn diện từ A-Z</title>
    <link>https://vnntools.com/vi/blog/optimize-css-for-website/</link>
    <description>Tối ưu CSS cho website giúp tải trang nhanh hơn, cải thiện SEO và trải nghiệm người dùng. Khám phá các kỹ thuật nén, gộp, loại bỏ CSS thừa và hơn thế nữa!</description>
    <pubDate>Tue, 29 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/optimize-css-for-website/</guid>
  </item>
  <item>
    <title>How to Optimize Photoshop: Maximize Image Processing Speed Effectively</title>
    <link>https://vnntools.com/en/blog/photoshop-optimization/</link>
    <description>Is your computer slow when using Photoshop? Learn how to optimize Photoshop to increase processing speed, reduce lag, and work more efficiently with detailed guidance.</description>
    <pubDate>Mon, 28 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/photoshop-optimization/</guid>
  </item>
  <item>
    <title>What is TIFF? Why is TIFF widely used in printing and graphics?</title>
    <link>https://vnntools.com/en/blog/what-is-tiff/</link>
    <description>What is TIFF that is considered the &quot;standard&quot; image format for professional printing and graphics? Learn about the outstanding advantages of TIFF in this article.</description>
    <pubDate>Mon, 28 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-tiff/</guid>
  </item>
  <item>
    <title>Cách tối ưu Photoshop: Tăng tốc xử lý ảnh hiệu quả nhất</title>
    <link>https://vnntools.com/vi/blog/photoshop-optimization/</link>
    <description>Máy tính bạn chậm khi dùng Photoshop? Tìm hiểu cách tối ưu Photoshop để tăng tốc độ xử lý, giảm giật lag và làm việc hiệu quả hơn với hướng dẫn chi tiết.</description>
    <pubDate>Mon, 28 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/photoshop-optimization/</guid>
  </item>
  <item>
    <title>TIFF là gì? Tại sao TIFF được dùng nhiều trong in ấn, đồ họa?</title>
    <link>https://vnntools.com/vi/blog/what-is-tiff/</link>
    <description>TIFF là gì mà được xem là định dạng ảnh &quot;chuẩn&quot; cho in ấn và đồ họa chuyên nghiệp? Tìm hiểu ngay những ưu điểm vượt trội của TIFF trong bài viết này.</description>
    <pubDate>Mon, 28 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-tiff/</guid>
  </item>
  <item>
    <title>What is AVIF? The Modern Image Format That Supercharges Website Performance</title>
    <link>https://vnntools.com/en/blog/what-is-avif/</link>
    <description>AVIF, a modern image format with superior compression capabilities, helps reduce image file sizes while maintaining high quality. Learn how AVIF speeds up websites and improves user experience.</description>
    <pubDate>Sun, 27 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-avif/</guid>
  </item>
  <item>
    <title>What is WebP Image? Why Should You Use WebP Images for Your Website?</title>
    <link>https://vnntools.com/en/blog/what-is-webp-image/</link>
    <description>Learn about the WebP image format that is more efficient than JPEG and PNG. Helps reduce image file size, increase page loading speed, improve SEO and user experience.</description>
    <pubDate>Sun, 27 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/what-is-webp-image/</guid>
  </item>
  <item>
    <title>AVIF là gì? Định dạng ảnh hiện đại, tăng tốc Website hiệu quả</title>
    <link>https://vnntools.com/vi/blog/what-is-avif/</link>
    <description>AVIF, định dạng ảnh hiện đại với khả năng nén vượt trội, giúp giảm dung lượng ảnh nhưng vẫn giữ chất lượng cao. Tìm hiểu cách AVIF tăng tốc website và cải thiện trải nghiệm người dùng.</description>
    <pubDate>Sun, 27 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-avif/</guid>
  </item>
  <item>
    <title>Ảnh WebP là gì? Tại sao nên dùng ảnh WebP cho Website của bạn?</title>
    <link>https://vnntools.com/vi/blog/what-is-webp-image/</link>
    <description>Tìm hiểu định dạng ảnh WebP hiệu quả hơn JPEG, PNG. Giúp giảm dung lượng ảnh, tăng tốc độ tải trang, cải thiện SEO và trải nghiệm người dùng.</description>
    <pubDate>Sun, 27 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/what-is-webp-image/</guid>
  </item>
  <item>
    <title>How to Optimize Lightroom for Significantly Faster Performance: Complete A-Z Guide</title>
    <link>https://vnntools.com/en/blog/lightroom-optimization/</link>
    <description>Lightroom lagging and stuttering? Discover how to optimize Smart Previews, Catalog, Cache, and GPU to boost image processing speed by 300%. For professional photographers.</description>
    <pubDate>Wed, 16 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/lightroom-optimization/</guid>
  </item>
  <item>
    <title>Cách tối ưu Lightroom chạy nhanh hơn trông thấy: Hướng dẫn từ A-Z</title>
    <link>https://vnntools.com/vi/blog/lightroom-optimization/</link>
    <description>Lightroom lag giật? Khám phá cách tối ưu Smart Previews, Catalog, Cache và GPU để tăng tốc độ xử lý ảnh lên 300%. Dành cho dân chụp ảnh chuyên nghiệp.</description>
    <pubDate>Wed, 16 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/lightroom-optimization/</guid>
  </item>
  <item>
    <title>How to Optimize Your TikTok Channel 2025: From Zero to Hero with Thousands of Followers</title>
    <link>https://vnntools.com/en/blog/optimize-tiktok-channel/</link>
    <description>Complete guide to TikTok channel optimization 2025: Algorithm, hashtags, viral content. Expert secrets for growing followers and engagement. Latest trends updated!</description>
    <pubDate>Sat, 12 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/optimize-tiktok-channel/</guid>
  </item>
  <item>
    <title>How to Optimize iPhone Photos: Capture &amp; Edit Stunning Pictures [2025]</title>
    <link>https://vnntools.com/en/blog/optimized-images-on-iphone/</link>
    <description>Discover the complete guide to optimizing iPhone photos from A to Z! Detailed instructions on camera settings, professional shooting techniques, app-based post-processing, and efficient storage management.</description>
    <pubDate>Sat, 12 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/optimized-images-on-iphone/</guid>
  </item>
  <item>
    <title>Shopee Keyword Optimization: Complete Guide to Rank Products on TOP and Get &quot;Order Avalanche&quot;</title>
    <link>https://vnntools.com/en/blog/shopee-keyword-optimization/</link>
    <description>Complete guide on how to optimize Shopee keywords effectively. From free keyword research to placing keywords in the right positions, help your products rank top and increase organic orders.</description>
    <pubDate>Sat, 12 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/shopee-keyword-optimization/</guid>
  </item>
  <item>
    <title>Cách tối ưu kênh TikTok 2025: Từ &quot;gà mờ&quot; đến &quot;chiến thần&quot; ngàn follower</title>
    <link>https://vnntools.com/vi/blog/optimize-tiktok-channel/</link>
    <description>Hướng dẫn tối ưu kênh TikTok 2025: Thuật toán, hashtag, nội dung viral. Bí quyết tăng follower và engagement từ chuyên gia. Cập nhật xu hướng mới!</description>
    <pubDate>Sat, 12 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/optimize-tiktok-channel/</guid>
  </item>
  <item>
    <title>Cách tối ưu hóa ảnh trên iPhone: Chụp &amp; chỉnh ảnh đẹp &quot;lung linh&quot; [2025]</title>
    <link>https://vnntools.com/vi/blog/optimized-images-on-iphone/</link>
    <description>Khám phá ngay bí quyết tối ưu hóa ảnh trên iPhone từ A-Z! Hướng dẫn chi tiết cách cài đặt camera, thủ thuật chụp chuyên nghiệp, hậu kỳ bằng app và tiết kiệm dung lượng hiệu quả.</description>
    <pubDate>Sat, 12 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/optimized-images-on-iphone/</guid>
  </item>
  <item>
    <title>Tối ưu từ khóa Shopee: Hướng dẫn chi tiết để sản phẩm lên TOP và nhận &quot;bão đơn hàng&quot;</title>
    <link>https://vnntools.com/vi/blog/shopee-keyword-optimization/</link>
    <description>Hướng dẫn chi tiết cách tối ưu từ khóa Shopee hiệu quả. Từ nghiên cứu từ khóa miễn phí đến đặt từ khóa đúng vị trí, giúp sản phẩm lên top và tăng đơn hàng tự nhiên.</description>
    <pubDate>Sat, 12 Jul 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/shopee-keyword-optimization/</guid>
  </item>
  <item>
    <title>Optimize Images for Facebook: Secrets to Keep Your Photos Sharp and Stunning</title>
    <link>https://vnntools.com/en/blog/optimize-images-before-posting-on-facebook/</link>
    <description>Detailed guide on optimizing images before posting to Facebook: choosing the right dimensions, formats, quality settings, and tips to enable HD mode to ensure your photos always stay sharp, clear, and eye-catching.</description>
    <pubDate>Sun, 29 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/optimize-images-before-posting-on-facebook/</guid>
  </item>
  <item>
    <title>Tối ưu hình ảnh đăng Facebook: Bí kíp giữ ảnh đẹp lung linh, không lo vỡ nét</title>
    <link>https://vnntools.com/vi/blog/optimize-images-before-posting-on-facebook/</link>
    <description>Hướng dẫn chi tiết cách tối ưu ảnh trước khi đăng lên Facebook: chọn kích thước, định dạng, chất lượng và mẹo bật chế độ HD để ảnh luôn sắc nét, không bị mờ, thu hút mọi ánh nhìn.</description>
    <pubDate>Sun, 29 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/optimize-images-before-posting-on-facebook/</guid>
  </item>
  <item>
    <title>Image Optimization: Top 5 Secret Tips to Speed Up Your Website &amp; Boost SEO Rankings</title>
    <link>https://vnntools.com/en/blog/optimize-images-for-website/</link>
    <description>Learn how to comprehensively optimize images for your website. Discover secret tips to increase page load speed, enhance user experience, and get your images to the top of Google!</description>
    <pubDate>Sat, 28 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/optimize-images-for-website/</guid>
  </item>
  <item>
    <title>Shopee Image Optimization: Top 5 Secrets to Boost CTR and Explode Your Sales</title>
    <link>https://vnntools.com/en/blog/optimize-images-on-shopee/</link>
    <description>Master Shopee product image optimization with essential tips on standard sizes, professional photography techniques, post-processing skills, and leveraging video &amp; AI in 2024. Stand out from competitors, increase click-through rates (CTR), and skyrocket your revenue today.</description>
    <pubDate>Sat, 28 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/optimize-images-on-shopee/</guid>
  </item>
  <item>
    <title>Tối ưu hóa hình ảnh: Top 5 bí kíp tăng tốc website &amp; thăng hạng SEO</title>
    <link>https://vnntools.com/vi/blog/optimize-images-for-website/</link>
    <description>Học cách tối ưu hóa hình ảnh toàn diện cho website. Bí kíp giúp tăng tốc độ tải trang, cải thiện trải nghiệm người dùng và đưa hình ảnh lên top Google!.</description>
    <pubDate>Sat, 28 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/optimize-images-for-website/</guid>
  </item>
  <item>
    <title>Tối ưu hình ảnh Shopee: Top 5 bí kíp tăng CTR, bùng nổ đơn hàng</title>
    <link>https://vnntools.com/vi/blog/optimize-images-on-shopee/</link>
    <description>Bí quyết tối ưu hình ảnh sản phẩm trên Shopee: kích thước chuẩn, mẹo chụp ảnh đẹp, hậu kỳ chuyên nghiệp, sử dụng video &amp; AI mới nhất 2024. Giúp shop nổi bật, tăng tỷ lệ nhấp chuột (CTR) và bứt phá doanh thu ngay hôm nay.</description>
    <pubDate>Sat, 28 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/optimize-images-on-shopee/</guid>
  </item>
  <item>
    <title>Optimize Facebook Advertising Images: Top 5 Secrets for Customer Acquisition</title>
    <link>https://vnntools.com/en/blog/optimize-facebook-advertising-images/</link>
    <description>&quot;Don&apos;t let your Facebook ads go unnoticed! Discover 5 secrets to optimize advertising images from dimensions and colors to psychology, helping you capture attention and drive conversions.&quot;</description>
    <pubDate>Fri, 27 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/optimize-facebook-advertising-images/</guid>
  </item>
  <item>
    <title>Tối ưu hình ảnh quảng cáo Facebook: Top 5 bí kíp &quot;bội thu&quot; khách hàng</title>
    <link>https://vnntools.com/vi/blog/optimize-facebook-advertising-images/</link>
    <description>Đừng để quảng cáo Facebook của bạn bị &quot;chìm nghỉm&quot;! Khám phá ngay 5 bí kíp tối ưu hình ảnh quảng cáo từ kích thước, màu sắc đến tâm lý học, giúp bạn thu hút mọi ánh nhìn và bùng nổ đơn hàng.</description>
    <pubDate>Fri, 27 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/optimize-facebook-advertising-images/</guid>
  </item>
  <item>
    <title>Image SEO Optimization: Complete Guide to Boost Rankings &amp; Traffic</title>
    <link>https://vnntools.com/en/blog/optimize-images-for-seo/</link>
    <description>&quot;Don&apos;t let images slow down your website and cost you traffic! Discover our 10-step image optimization checklist for sustainable ranking improvement and attracting users from Google Images.&quot;</description>
    <pubDate>Thu, 26 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/optimize-images-for-seo/</guid>
  </item>
  <item>
    <title>Tối ưu hình ảnh chuẩn SEO: Bài hướng dẫn toàn tập tăng Traffic thứ hạng</title>
    <link>https://vnntools.com/vi/blog/optimize-images-for-seo/</link>
    <description>Đừng để hình ảnh làm chậm website và mất traffic! Tìm hiểu ngay checklist 10 bước tối ưu hình ảnh chuẩn SEO giúp tăng hạng bền vững và thu hút người dùng từ Google Images.</description>
    <pubDate>Thu, 26 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/optimize-images-for-seo/</guid>
  </item>
  <item>
    <title>Essential Mathematics Tools for Everyday Calculations</title>
    <link>https://vnntools.com/en/blog/mathematics-tools-guide/</link>
    <description>Discover our suite of mathematics tools designed to help you calculate area, perimeter, and other geometric properties with ease and accuracy.</description>
    <pubDate>Sun, 15 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/mathematics-tools-guide/</guid>
  </item>
  <item>
    <title>Boost Your Development Workflow with Essential Developer Tools</title>
    <link>https://vnntools.com/en/blog/developer-tools-for-productivity/</link>
    <description>Explore our collection of specialized developer tools designed to streamline your coding process, format code beautifully, and convert between markup languages efficiently.</description>
    <pubDate>Thu, 12 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/developer-tools-for-productivity/</guid>
  </item>
  <item>
    <title>Essential Text Manipulation Tools for Content Creators and Developers</title>
    <link>https://vnntools.com/en/blog/text-manipulation-tools/</link>
    <description>Discover how our suite of text manipulation tools can streamline your workflow, enhance productivity, and solve common text processing challenges.</description>
    <pubDate>Tue, 10 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/text-manipulation-tools/</guid>
  </item>
  <item>
    <title>Working with JSON Data: Essential Tools for Developers</title>
    <link>https://vnntools.com/en/blog/working-with-json-data/</link>
    <description>Discover the best practices and tools for handling JSON data in your projects, from validation and formatting to conversion and comparison.</description>
    <pubDate>Sun, 08 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/working-with-json-data/</guid>
  </item>
  <item>
    <title>Complete Guide to Image Optimization for Web Performance</title>
    <link>https://vnntools.com/en/blog/image-optimization-guide/</link>
    <description>Learn how to optimize your website images for better performance, faster loading times, and improved SEO using effective compression and conversion techniques.</description>
    <pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/en/blog/image-optimization-guide/</guid>
  </item>
  <item>
    <title>Hướng dẫn Toàn diện về Tối ưu hóa Hình ảnh cho Hiệu suất Web</title>
    <link>https://vnntools.com/vi/blog/image-optimization-guide/</link>
    <description>Tìm hiểu cách tối ưu hóa hình ảnh trang web để có hiệu suất tốt hơn, thời gian tải nhanh hơn và cải thiện SEO bằng các kỹ thuật nén và chuyển đổi hiệu quả.</description>
    <pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/image-optimization-guide/</guid>
  </item>
  <item>
    <title>Hướng dẫn Toàn diện về Làm việc với Dữ liệu JSON</title>
    <link>https://vnntools.com/vi/blog/working-with-json-data/</link>
    <description>Tìm hiểu cách thao tác hiệu quả với dữ liệu JSON, từ định dạng và xác thực cho đến chuyển đổi và so sánh, với các công cụ và kỹ thuật tốt nhất.</description>
    <pubDate>Mon, 02 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/working-with-json-data/</guid>
  </item>
  <item>
    <title>Hướng dẫn Sử dụng Công cụ Xử lý Văn bản Nâng cao</title>
    <link>https://vnntools.com/vi/blog/text-manipulation-tools/</link>
    <description>Khám phá các công cụ xử lý văn bản mạnh mẽ để nâng cao hiệu quả công việc - từ đếm ký tự và so sánh văn bản đến chuyển đổi chữ hoa/thường và tìm kiếm/thay thế.</description>
    <pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/text-manipulation-tools/</guid>
  </item>
  <item>
    <title>Công cụ Phát triển cho Năng suất: Bộ công cụ Thiết yếu cho Nhà phát triển</title>
    <link>https://vnntools.com/vi/blog/developer-tools-for-productivity/</link>
    <description>Khám phá bộ công cụ phát triển thiết yếu để tăng cường năng suất, từ công cụ định dạng mã đến chuyển đổi HTML-Markdown và tối ưu hóa JavaScript.</description>
    <pubDate>Fri, 31 May 2024 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/developer-tools-for-productivity/</guid>
  </item>
  <item>
    <title>Hướng dẫn Toàn diện về Công cụ Toán học</title>
    <link>https://vnntools.com/vi/blog/mathematics-tools-guide/</link>
    <description>Khám phá bộ công cụ toán học online của chúng tôi để tính chu vi và diện tích cho các hình dạng khác nhau, giúp học sinh, giáo viên và chuyên gia dễ dàng thực hiện tính toán hình học.</description>
    <pubDate>Wed, 29 May 2024 00:00:00 GMT</pubDate>
    <guid>https://vnntools.com/vi/blog/mathematics-tools-guide/</guid>
  </item>
  </channel>
</rss>