<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Cris The Dev — Blog lập trình</title><description>Kiến thức lập trình qua ví dụ thực hành.</description><link>https://cristhedev.com/blog/</link><language>vi</language><item><title>Đếm token và ước tính chi phí khi gọi LLM trong Java</title><link>https://cristhedev.com/blog/llm/counting-tokens-and-estimating-costs-when-calling-llms-in-java/</link><guid isPermaLink="true">https://cristhedev.com/blog/llm/counting-tokens-and-estimating-costs-when-calling-llms-in-java/</guid><description>Cách đếm token cục bộ bằng JTokkit, tính chi phí bằng BigDecimal, chặn request vượt ngân sách và đối chiếu với usage thực tế từ Spring AI.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Error handling trong Rust với thiserror và anyhow</title><link>https://cristhedev.com/blog/rust/error-handling-in-rust-with-thiserror-and-anyhow/</link><guid isPermaLink="true">https://cristhedev.com/blog/rust/error-handling-in-rust-with-thiserror-and-anyhow/</guid><description>Dùng thiserror để định nghĩa kiểu lỗi rõ ràng cho library, dùng anyhow để gom lỗi và thêm context cho application, và kết hợp cả hai.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Object, companion object và singleton trong Kotlin</title><link>https://cristhedev.com/blog/kotlin/object-companion-object-and-singleton-in-kotlin/</link><guid isPermaLink="true">https://cristhedev.com/blog/kotlin/object-companion-object-and-singleton-in-kotlin/</guid><description>Phân biệt object declaration, object expression và companion object trong Kotlin, cách chúng tạo singleton, gọi từ Java và những lỗi hay gặp.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Template literal types trong TypeScript qua ví dụ</title><link>https://cristhedev.com/blog/typescript/template-literal-types-in-typescript-through-examples/</link><guid isPermaLink="true">https://cristhedev.com/blog/typescript/template-literal-types-in-typescript-through-examples/</guid><description>Dùng template literal types để sinh tên key, parse route param và viết event emitter an toàn kiểu, kèm test kiểu với Vitest và các bẫy cần tránh.</description><pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Concurrency an toàn trong Rust với Mutex và channel</title><link>https://cristhedev.com/blog/rust/safe-concurrency-in-rust-with-mutex-and-channel/</link><guid isPermaLink="true">https://cristhedev.com/blog/rust/safe-concurrency-in-rust-with-mutex-and-channel/</guid><description>Cách chia sẻ dữ liệu giữa các thread bằng Arc&lt;Mutex&lt;T&gt;&gt;, truyền message bằng mpsc channel, và tránh deadlock, poisoning cùng các lỗi hay gặp.</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Kotlin và Java chung một dự án Spring Boot với Maven</title><link>https://cristhedev.com/blog/kotlin/kotlin-and-java-in-a-single-spring-boot-project-with-maven/</link><guid isPermaLink="true">https://cristhedev.com/blog/kotlin/kotlin-and-java-in-a-single-spring-boot-project-with-maven/</guid><description>Cấu hình Maven để Kotlin và Java gọi lẫn nhau, xử lý nullability, @JvmStatic, @JvmOverloads và các lỗi hay gặp trong Spring Boot.</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Streaming response từ LLM API với Java 21 và Spring Boot</title><link>https://cristhedev.com/blog/llm/streaming-responses-from-llm-apis-with-java-21-and-spring-boot/</link><guid isPermaLink="true">https://cristhedev.com/blog/llm/streaming-responses-from-llm-apis-with-java-21-and-spring-boot/</guid><description>Nhận từng token từ LLM API qua Server-Sent Events bằng HttpClient và WebClient, rồi đẩy tiếp về trình duyệt, kèm xử lý lỗi, timeout và test.</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Strict mode trong TypeScript: bật những gì</title><link>https://cristhedev.com/blog/typescript/strict-mode-in-typescript-what-gets-enabled/</link><guid isPermaLink="true">https://cristhedev.com/blog/typescript/strict-mode-in-typescript-what-gets-enabled/</guid><description>Cờ strict trong tsconfig bật những kiểm tra nào, mỗi kiểm tra bắt lỗi gì, nên bật thêm cờ nào ngoài strict, và cách chuyển dự án cũ sang strict.</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Delegated properties trong Kotlin: lazy và observable</title><link>https://cristhedev.com/blog/kotlin/delegated-properties-in-kotlin-lazy-and-observable/</link><guid isPermaLink="true">https://cristhedev.com/blog/kotlin/delegated-properties-in-kotlin-lazy-and-observable/</guid><description>Dùng by lazy để khởi tạo trễ an toàn với thread, dùng Delegates.observable và vetoable để theo dõi hoặc chặn thay đổi giá trị property.</description><pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Function calling / tool use qua ví dụ với Spring AI</title><link>https://cristhedev.com/blog/llm/function-calling-and-tool-use-with-spring-ai/</link><guid isPermaLink="true">https://cristhedev.com/blog/llm/function-calling-and-tool-use-with-spring-ai/</guid><description>Hiểu cách LLM gọi hàm của ứng dụng, từ JSON thô tới @Tool trong Spring AI. Bài có ví dụ tra cứu, huỷ đơn hàng và test không cần gọi model thật.</description><pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate></item><item><title>keyof, typeof và indexed access types trong TypeScript</title><link>https://cristhedev.com/blog/typescript/keyof-typeof-and-indexed-access-types-in-typescript/</link><guid isPermaLink="true">https://cristhedev.com/blog/typescript/keyof-typeof-and-indexed-access-types-in-typescript/</guid><description>Dùng keyof, typeof và indexed access types để suy ra type từ dữ liệu có sẵn, giảm lặp code và để compiler bắt lỗi sai key thay cho bạn.</description><pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Viết REST API bằng Axum trong Rust</title><link>https://cristhedev.com/blog/rust/building-rest-apis-with-axum-in-rust/</link><guid isPermaLink="true">https://cristhedev.com/blog/rust/building-rest-apis-with-axum-in-rust/</guid><description>Xây dựng REST API CRUD bằng Axum 0.8, gồm routing, extractor, shared state, xử lý lỗi bằng IntoResponse và test handler không cần mở cổng mạng.</description><pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Higher-order function và lambda trong Kotlin</title><link>https://cristhedev.com/blog/kotlin/higher-order-functions-and-lambdas-in-kotlin/</link><guid isPermaLink="true">https://cristhedev.com/blog/kotlin/higher-order-functions-and-lambdas-in-kotlin/</guid><description>Cách khai báo function type, truyền và trả về lambda, dùng function reference, closure, lambda with receiver và inline trong Kotlin.</description><pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Smart pointer trong Rust: Box, Rc và Arc</title><link>https://cristhedev.com/blog/rust/smart-pointers-in-rust-box-rc-and-arc/</link><guid isPermaLink="true">https://cristhedev.com/blog/rust/smart-pointers-in-rust-box-rc-and-arc/</guid><description>Khi nào dùng Box, Rc hay Arc trong Rust: cấp phát heap, chia sẻ ownership trong một thread và giữa nhiều thread, kèm Weak, RefCell và Mutex.</description><pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Structured output: bắt LLM trả về JSON đúng schema với Spring AI</title><link>https://cristhedev.com/blog/llm/structured-output-force-llm-to-return-json-matching-schema/</link><guid isPermaLink="true">https://cristhedev.com/blog/llm/structured-output-force-llm-to-return-json-matching-schema/</guid><description>Cách ép LLM trả về JSON khớp schema trong Spring Boot: map vào record bằng Spring AI, bật JSON Schema native, validate, retry và viết test.</description><pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Viết thư viện TypeScript có type declaration</title><link>https://cristhedev.com/blog/typescript/writing-a-typescript-library-with-type-declarations/</link><guid isPermaLink="true">https://cristhedev.com/blog/typescript/writing-a-typescript-library-with-type-declarations/</guid><description>Cách cấu hình tsconfig và package.json để thư viện TypeScript sinh file .d.ts đúng chuẩn, có type đầy đủ cho người dùng và kiểm thử được bằng Vitest.</description><pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Async Rust với Tokio: async/await, task và channel</title><link>https://cristhedev.com/blog/rust/async-rust-with-tokio-async-await-tasks-and-channels/</link><guid isPermaLink="true">https://cristhedev.com/blog/rust/async-rust-with-tokio-async-await-tasks-and-channels/</guid><description>Hướng dẫn lập trình bất đồng bộ trong Rust với Tokio, gồm async/await, spawn task, join!, select!, timeout, channel, spawn_blocking và cách test code async.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Kiểu cho hàm async và Promise trong TypeScript</title><link>https://cristhedev.com/blog/typescript/typing-async-functions-and-promises-in-typescript/</link><guid isPermaLink="true">https://cristhedev.com/blog/typescript/typing-async-functions-and-promises-in-typescript/</guid><description>Cách khai báo kiểu cho hàm async, dùng Promise&lt;T&gt;, Awaited, Promise.all, xử lý lỗi an toàn và tránh các bẫy hay gặp với callback async.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Kotlin cho backend với Spring Boot</title><link>https://cristhedev.com/blog/kotlin/kotlin-for-backend-with-spring-boot/</link><guid isPermaLink="true">https://cristhedev.com/blog/kotlin/kotlin-for-backend-with-spring-boot/</guid><description>Thiết lập dự án Spring Boot 3 bằng Kotlin, viết REST API, entity JPA, cấu hình và test, kèm các lỗi hay gặp khi chuyển từ Java.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Prompt engineering: các kỹ thuật dùng được ngay</title><link>https://cristhedev.com/blog/llm/prompt-engineering-practical-techniques-you-can-use-now/</link><guid isPermaLink="true">https://cristhedev.com/blog/llm/prompt-engineering-practical-techniques-you-can-use-now/</guid><description>Các kỹ thuật prompt engineering thực dụng như system prompt, delimiter, few-shot, structured output và temperature, minh họa bằng Spring AI.</description><pubDate>Sun, 25 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Cargo: tạo dự án, quản lý dependency và tổ chức workspace</title><link>https://cristhedev.com/blog/rust/cargo-create-projects-manage-dependencies-and-organize-workspaces/</link><guid isPermaLink="true">https://cristhedev.com/blog/rust/cargo-create-projects-manage-dependencies-and-organize-workspaces/</guid><description>Hướng dẫn dùng Cargo để tạo dự án Rust, thêm dependency đúng cách, viết test và gom nhiều crate vào một workspace.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Enum hay union string literal trong TypeScript?</title><link>https://cristhedev.com/blog/typescript/enum-or-union-string-literal-in-typescript/</link><guid isPermaLink="true">https://cristhedev.com/blog/typescript/enum-or-union-string-literal-in-typescript/</guid><description>So sánh enum và union string literal trong TypeScript về runtime, type safety và tooling, kèm pattern `as const` và tiêu chí chọn cho từng tình huống.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Graceful shutdown cho HTTP server Go</title><link>https://cristhedev.com/blog/golang/graceful-shutdown-for-http-servers-in-go/</link><guid isPermaLink="true">https://cristhedev.com/blog/golang/graceful-shutdown-for-http-servers-in-go/</guid><description>Tắt HTTP server Go an toàn với signal.NotifyContext và http.Server.Shutdown, xử lý timeout, WebSocket, tài nguyên phụ và Kubernetes.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Scope functions trong Kotlin: let, run, apply, also, with</title><link>https://cristhedev.com/blog/kotlin/scope-functions-in-kotlin-let-run-apply-also-with/</link><guid isPermaLink="true">https://cristhedev.com/blog/kotlin/scope-functions-in-kotlin-let-run-apply-also-with/</guid><description>Phân biệt 5 scope function của Kotlin theo context object và giá trị trả về, kèm ví dụ thực tế, test và các lỗi hay gặp.</description><pubDate>Sat, 24 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Đọc và ghi JSON trong Go với encoding/json</title><link>https://cristhedev.com/blog/golang/reading-and-writing-json-in-go-with-encoding-json/</link><guid isPermaLink="true">https://cristhedev.com/blog/golang/reading-and-writing-json-in-go-with-encoding-json/</guid><description>Hướng dẫn dùng encoding/json trong Go, từ Marshal/Unmarshal, struct tag, Encoder/Decoder đến kiểu tuỳ biến, kèm test và các lỗi hay gặp.</description><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Đóng gói Spring Boot thành Docker image gọn nhẹ</title><link>https://cristhedev.com/blog/spring-boot/packing-spring-boot-into-lightweight-docker-images/</link><guid isPermaLink="true">https://cristhedev.com/blog/spring-boot/packing-spring-boot-into-lightweight-docker-images/</guid><description>Dùng multi-stage build, layered jar, JRE tối giản và user non-root để có Docker image Spring Boot nhỏ, build nhanh và an toàn hơn.</description><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Garbage collector trong Java: G1, ZGC và cách chọn</title><link>https://cristhedev.com/blog/java/garbage-collectors-in-java-g1-zgc-and-how-to-choose/</link><guid isPermaLink="true">https://cristhedev.com/blog/java/garbage-collectors-in-java-g1-zgc-and-how-to-choose/</guid><description>So sánh G1 và ZGC trong Java 21: cách hoạt động, cách bật, đọc GC log, kiểm tra GC đang chạy và tiêu chí chọn GC cho ứng dụng Spring Boot.</description><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Validate dữ liệu runtime trong TypeScript với Zod</title><link>https://cristhedev.com/blog/typescript/runtime-data-validation-in-typescript-with-zod/</link><guid isPermaLink="true">https://cristhedev.com/blog/typescript/runtime-data-validation-in-typescript-with-zod/</guid><description>Dùng Zod để kiểm tra dữ liệu từ API, form hay biến môi trường lúc runtime, đồng thời suy ra type TypeScript từ cùng một schema.</description><pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Gửi và nhận message Kafka trong Spring Boot</title><link>https://cristhedev.com/blog/spring-boot/sending-and-receiving-kafka-messages-in-spring-boot/</link><guid isPermaLink="true">https://cristhedev.com/blog/spring-boot/sending-and-receiving-kafka-messages-in-spring-boot/</guid><description>Hướng dẫn dùng Spring Kafka để gửi message bằng KafkaTemplate, nhận bằng @KafkaListener, xử lý lỗi với Dead Letter Topic và viết test với Embedded Kafka.</description><pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate></item><item><title>java.time: LocalDate, ZonedDateTime và Duration</title><link>https://cristhedev.com/blog/java/java-time-localdate-zoneddatetime-and-duration/</link><guid isPermaLink="true">https://cristhedev.com/blog/java/java-time-localdate-zoneddatetime-and-duration/</guid><description>Dùng LocalDate, ZonedDateTime và Duration đúng chỗ: tính ngày, đổi múi giờ, xử lý giờ mùa hè và viết test ổn định với Clock.</description><pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Mapped types và conditional types trong TypeScript</title><link>https://cristhedev.com/blog/typescript/mapped-types-and-conditional-types-in-typescript/</link><guid isPermaLink="true">https://cristhedev.com/blog/typescript/mapped-types-and-conditional-types-in-typescript/</guid><description>Dùng mapped types và conditional types để sinh kiểu tự động từ kiểu có sẵn, kèm infer, key remapping, kiểm thử kiểu và các lỗi hay gặp.</description><pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Worker pool trong Go: giới hạn goroutine, thu kết quả và hủy an toàn</title><link>https://cristhedev.com/blog/golang/worker-pools-in-go-limiting-goroutines-collecting-results-safe-cancellation/</link><guid isPermaLink="true">https://cristhedev.com/blog/golang/worker-pools-in-go-limiting-goroutines-collecting-results-safe-cancellation/</guid><description>Cách xây dựng worker pool trong Go bằng channel, sync.WaitGroup, context và errgroup để xử lý song song có giới hạn, có hủy và có kiểm thử.</description><pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate></item><item><title>GIL trong Python là gì và ảnh hưởng thế nào tới hiệu năng</title><link>https://cristhedev.com/blog/python/what-is-gil-in-python-and-how-it-impacts-performance/</link><guid isPermaLink="true">https://cristhedev.com/blog/python/what-is-gil-in-python-and-how-it-impacts-performance/</guid><description>Hiểu Global Interpreter Lock của CPython, vì sao thread không tăng tốc code CPU-bound, khi nào dùng threading, multiprocessing và bản build free-threaded.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Immutable collections trong Java: List.of, copyOf và unmodifiable</title><link>https://cristhedev.com/blog/java/immutable-collections-in-java-list-of-copyof-and-unmodifiable/</link><guid isPermaLink="true">https://cristhedev.com/blog/java/immutable-collections-in-java-list-of-copyof-and-unmodifiable/</guid><description>So sánh List.of, List.copyOf và Collections.unmodifiableList: cái nào là bản sao, cái nào chỉ là view, xử lý null ra sao, và khi nào dùng cái nào.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Phân trang và sắp xếp với Pageable trong Spring Boot</title><link>https://cristhedev.com/blog/spring-boot/pagination-and-sorting-with-pageable-in-spring-boot/</link><guid isPermaLink="true">https://cristhedev.com/blog/spring-boot/pagination-and-sorting-with-pageable-in-spring-boot/</guid><description>Dùng Pageable, Page, Slice và Sort của Spring Data JPA để phân trang và sắp xếp dữ liệu, từ repository tới REST controller, kèm test và các lỗi hay gặp.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Struct embedding trong Go thay cho kế thừa</title><link>https://cristhedev.com/blog/golang/struct-embedding-in-go-instead-of-inheritance/</link><guid isPermaLink="true">https://cristhedev.com/blog/golang/struct-embedding-in-go-instead-of-inheritance/</guid><description>Go không có kế thừa. Bài này giải thích struct embedding, cách method được &quot;thăng cấp&quot;, bẫy ghi đè method và cách kết hợp embedding với interface.</description><pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate></item><item><title>defer, panic và recover trong Go: dùng khi nào</title><link>https://cristhedev.com/blog/golang/defer-panic-and-recover-in-go-when-to-use/</link><guid isPermaLink="true">https://cristhedev.com/blog/golang/defer-panic-and-recover-in-go-when-to-use/</guid><description>Hiểu cơ chế defer, panic, recover trong Go, các bẫy hay gặp, và khi nào nên trả về error thay vì panic.</description><pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Đóng gói và phát hành package Python lên PyPI</title><link>https://cristhedev.com/blog/python/packaging-and-releasing-python-packages-to-pypi/</link><guid isPermaLink="true">https://cristhedev.com/blog/python/packaging-and-releasing-python-packages-to-pypi/</guid><description>Hướng dẫn đóng gói một thư viện Python với pyproject.toml, build wheel, kiểm thử trên TestPyPI và phát hành lên PyPI bằng token hoặc Trusted Publishing.</description><pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate></item><item><title>ExecutorService và thread pool: chọn đúng loại cho từng bài toán</title><link>https://cristhedev.com/blog/java/executorservice-and-thread-pool-choosing-the-right-type/</link><guid isPermaLink="true">https://cristhedev.com/blog/java/executorservice-and-thread-pool-choosing-the-right-type/</guid><description>So sánh các loại thread pool trong Java 21: fixed, cached, scheduled, work-stealing, virtual thread. Cách tự cấu hình ThreadPoolExecutor và dùng an toàn trong Spring Boot.</description><pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Transaction trong Spring: @Transactional và các bẫy hay gặp</title><link>https://cristhedev.com/blog/spring-boot/transactions-in-spring-transactional-and-common-pitfalls/</link><guid isPermaLink="true">https://cristhedev.com/blog/spring-boot/transactions-in-spring-transactional-and-common-pitfalls/</guid><description>Cách @Transactional hoạt động qua proxy, cùng các bẫy hay gặp như self-invocation, checked exception, rollback-only và test che lỗi.</description><pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Exception trong Java: checked, unchecked và cách thiết kế</title><link>https://cristhedev.com/blog/java/exceptions-in-java-checked-unchecked-and-design/</link><guid isPermaLink="true">https://cristhedev.com/blog/java/exceptions-in-java-checked-unchecked-and-design/</guid><description>Phân biệt checked và unchecked exception, chọn đúng loại, thiết kế exception riêng có ngữ cảnh và tránh các anti-pattern hay gặp.</description><pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate></item><item><title>multiprocessing trong Python cho tác vụ nặng CPU</title><link>https://cristhedev.com/blog/python/multiprocessing-in-python-for-cpu-bound-tasks/</link><guid isPermaLink="true">https://cristhedev.com/blog/python/multiprocessing-in-python-for-cpu-bound-tasks/</guid><description>Vì sao threading không tăng tốc code nặng CPU, và cách dùng multiprocessing, Pool, ProcessPoolExecutor để tận dụng mọi nhân CPU.</description><pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Profiling Go với pprof: tìm điểm nghẽn CPU, bộ nhớ và goroutine</title><link>https://cristhedev.com/blog/golang/profiling-go-with-pprof-finding-cpu-memory-and-goroutine-bottlenecks/</link><guid isPermaLink="true">https://cristhedev.com/blog/golang/profiling-go-with-pprof-finding-cpu-memory-and-goroutine-bottlenecks/</guid><description>Hướng dẫn dùng pprof để thu và đọc profile CPU, heap, goroutine, block, mutex trong ứng dụng Go, từ HTTP service tới benchmark.</description><pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Xử lý tác vụ định kỳ với @Scheduled trong Spring Boot</title><link>https://cristhedev.com/blog/spring-boot/handling-scheduled-tasks-with-scheduled-in-spring-boot/</link><guid isPermaLink="true">https://cristhedev.com/blog/spring-boot/handling-scheduled-tasks-with-scheduled-in-spring-boot/</guid><description>Cách dùng @Scheduled với fixedRate, fixedDelay và cron, cấu hình thread pool, xử lý lỗi, viết test và các lỗi hay gặp khi chạy tác vụ định kỳ.</description><pubDate>Mon, 19 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Comparator: sắp xếp nhiều tiêu chí với comparing và thenComparing</title><link>https://cristhedev.com/blog/java/comparator-sorting-by-multiple-criteria-with-comparing-and-thencomparing/</link><guid isPermaLink="true">https://cristhedev.com/blog/java/comparator-sorting-by-multiple-criteria-with-comparing-and-thencomparing/</guid><description>Dùng Comparator.comparing, thenComparing, reversed và nullsLast để sắp xếp theo nhiều tiêu chí, kèm các lỗi hay gặp khi dùng.</description><pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Integration test với Testcontainers trong Spring Boot 3</title><link>https://cristhedev.com/blog/spring-boot/integration-testing-with-testcontainers-in-spring-boot-3/</link><guid isPermaLink="true">https://cristhedev.com/blog/spring-boot/integration-testing-with-testcontainers-in-spring-boot-3/</guid><description>Viết integration test chạy trên PostgreSQL thật bằng Testcontainers và @ServiceConnection, chia sẻ container giữa các test class và tránh các lỗi hay gặp.</description><pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Logging trong Python: cấu hình cho production</title><link>https://cristhedev.com/blog/python/logging-in-python-production-configuration/</link><guid isPermaLink="true">https://cristhedev.com/blog/python/logging-in-python-production-configuration/</guid><description>Cấu hình logging Python cho production: logger theo module, dictConfig, log JSON, request_id bằng contextvars, QueueHandler và test với caplog.</description><pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Map trong Go và lỗi concurrent map writes</title><link>https://cristhedev.com/blog/golang/maps-in-go-and-the-concurrent-map-writes-error/</link><guid isPermaLink="true">https://cristhedev.com/blog/golang/maps-in-go-and-the-concurrent-map-writes-error/</guid><description>Tìm hiểu cách map trong Go hoạt động, vì sao chương trình crash với &quot;concurrent map writes&quot; và các cách sửa bằng sync.Mutex, sync.RWMutex, sync.Map.</description><pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Cache với @Cacheable và Redis trong Spring Boot</title><link>https://cristhedev.com/blog/spring-boot/caching-with-cacheable-and-redis-in-spring-boot/</link><guid isPermaLink="true">https://cristhedev.com/blog/spring-boot/caching-with-cacheable-and-redis-in-spring-boot/</guid><description>Hướng dẫn dùng @Cacheable, @CachePut, @CacheEvict với Redis trong Spring Boot 3, cấu hình TTL, serializer JSON và viết test bằng Testcontainers.</description><pubDate>Sat, 17 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Collectors.groupingBy và partitioningBy qua ví dụ</title><link>https://cristhedev.com/blog/java/collectors-groupingby-and-partitioningby-through-examples/</link><guid isPermaLink="true">https://cristhedev.com/blog/java/collectors-groupingby-and-partitioningby-through-examples/</guid><description>Học cách nhóm và chia dữ liệu bằng Collectors.groupingBy, partitioningBy và downstream collector như counting, mapping, filtering trong Java 21.</description><pubDate>Sat, 17 Oct 2026 00:00:00 GMT</pubDate></item></channel></rss>