Học dùng AI – Claude Code
Chào mọi người 👋 Sau một thời gian dài sử dụng AI cho lập trình, mình bắt đầu nhận ra rằng: biết dùng AI thôi là chưa đủ, mà cần phải dùng cho đúng cách và hiệu quả. Thế là mình quyết định dành thêm thời gian để học cách làm việc với AI agent bài bản hơn. Tuần vừa rồi, ngoài giờ làm ban ngày thì buổi tối mình cày thêm một khoá học về Claude Code. Học cũng hơi chậm 🐌 nhưng không sao — miễn là không bỏ cuộc 😆. Bài viết này chủ yếu là để khoe nhẹ thành quả sau 1 tuần cố gắng. ...
Phân biệt Message Queue - Pub/Sub - Message Broker
Chào mọi người đầu xuân năm mới 2026 👋 Cùng mình ôn tập lại một vài khái niệm trong lập trình mà anh em backend rất hay gặp phải nhưng đôi khi dễ bị nhầm lẫn nhé. Nào, let’s go 🚀 Hôm nay chúng ta sẽ cùng phân biệt: Message Queue Pub-Sub Message Broker Ba khái niệm này thường bị đánh tráo hoặc hiểu sai, nhưng thực tế chúng được thiết kế để giải quyết những bài toán kiến trúc khác nhau. ...
Chuyện mình triển khai Rule Engine trong backend
Chào mọi người, gần đây khi mình chuyển sang công việc mới với một ngôn ngữ lập trình khác, mình có cơ hội tham gia thiết kế một hệ thống rule engine để đáp ứng các yêu cầu business của công ty. Trong quá trình tìm hiểu và research, mình muốn ghi lại những kiến thức đã học được, đồng thời chia sẻ lại theo một scope phổ biến hơn để phù hợp với nhiều mô hình business hiện nay. Bài viết này vừa để mình hệ thống hóa kiến thức, vừa hy vọng giúp ích cho những bạn đang quan tâm đến rule engine. ...
Hiểu rõ cách hoạt động của RabbitMQ Exchange khi dùng NestJS Microservice
Trong quá trình làm việc với microservice trong NestJS, mình chủ yếu dùng RabbitMQ microservice transport. Bản chất là các service giao tiếp qua message broker (RabbitMQ), chứ không gọi HTTP trực tiếp. Mỗi service có thể đóng vai trò: Publisher: gửi message Consumer: nhận message Khi gửi message, service sẽ publish đến exchange — đây là nơi định tuyến trung gian. RabbitMQ dùng binding rule giữa exchange và các queue để quyết định message sẽ được gửi đến queue nào. Các service khác (consumer) sẽ subscribe vào queue, lắng nghe message được định tuyến đến đó và xử lý. ...
Hiểu về các mức Isolation trong Transaction của SQL
Thời gian gần đây khi mình tham gia các buổi phỏng vấn ở vị trí backend thì thường xuyên được hỏi đến các câu hỏi về database, trong đó chủ yếu xoay quanh transaction. Vậy nên trong bài viết hôm nay mình sẽ cùng ôn lại kiến thức về nó nhé. Nội dung này mình không rành lắm nên chủ yếu là góp nhặt và tích luỹ để viết cho bản thân nhớ lâu hơn — cũng tiện chia sẻ cho các bạn hữu duyên nếu đọc được. ...
Những điều mình học được về Index trong MongoDB
Khi làm việc với MongoDB, chắc hẳn bạn đã nghe đến index - một khái niệm tưởng đơn giản nhưng lại có ảnh hưởng rất lớn đến hiệu năng của hệ thống. Nếu không hiểu rõ cách hoạt động của index, bạn có thể khiến truy vấn chậm đi đáng kể, hoặc tốn nhiều tài nguyên mà không biết lý do. Trong bài viết này, mình sẽ chia sẻ một cách dễ hiểu nhất về index trong MongoDB: nó là gì, tại sao cần dùng, có những loại nào và hoạt động ra sao. ...
Triển khai microservice với GraphQL Federation
Trong quá trình làm việc, team mình từng triển khai một hệ thống microservice với hơn 20 service hoạt động độc lập. Để kết nối các service này vào một API thống nhất cho client sử dụng, bọn mình đã áp dụng GraphQL Federation. Bài viết này sẽ chia sẻ lại cách tiếp cận đó — cách mà Federation giúp gom nhiều service lại thành một GraphQL API duy nhất, đơn giản cho phía client nhưng vẫn linh hoạt cho backend. ...
Hướng dẫn implement 1 hệ thống realtime sử dụng Socket IO bằng GoLang
Hôm nay nhân dịp cuối tuần cùng nhìn lại những gì đã làm trong 2 tuần làm việc vừa qua của mình sau khi join vào 1 công ty mới, mình ngồi viết những dòng này để hệ thống lại những gì đã làm trong tuần qua, cũng như summerize lại kiến thức để tránh việc chảy máu chất xám. Hôm nay mình sẽ nói về việc xây dựng 1 hệ thống realtime backend sử dụng socket.io với ngôn ngữ lập trình Golang. Mình mới chuyển từ nodejs sang Go lang =)) ...
SOLID - Ngũ tuyệt trong thế giới lập trình (Phiên bản kiếp hiệp)
Hôm nay, trong một buổi chiều cuối thu ở Sài Gòn nhộn nhịp, có một chàng trai đang ngồi ôn lại kiến thức để chuẩn bị tham gia phỏng vấn trong căn nhà nhỏ. Bên ngoài cửa sổ, trời đang đổ những cơn mưa rào kèm những đợt sấm chớp lan man. Lòng ta lại suy tư về một thứ gì đó muốn được viết ra cho nhẹ nỗi lòng, thôi thì ta hãy cùng viết về SOLID nhé. ...
PostgreSQL xử lý câu lệnh DML như thế nào?
Khi làm việc với database chắc hẳn chúng ta đã quen với các câu lệnh như SELECT, UPDATE, INSERT, DELETE,… Giả sử khi chạy một câu lệnh INSERT INTO ... để thêm record vào DB thì bên trong cơ sở dữ liệu sẽ làm những gì để xử lý? Trong bài viết này, hãy cùng mình tìm hiểu đằng sau một câu lệnh SQL khi thực thi sẽ đi qua những bước gì nhé. ...
Lập kế hoạch công việc hiệu quả với SMART
Chắc hẳn bạn đã quá quen thuộc với việc làm việc trong các team theo các mô hình quản lý như Agile, đặc biệt là trong các công ty lớn. Vì vậy hôm nay mình sẽ chia sẻ cho các bạn cách có thể làm việc hiệu quả hơn khi muốn đóng góp nhiều hơn vào các buổi planning, muốn nhận được đánh giá tốt hơn từ team, hoặc khi các bạn làm cho startup nơi đòi hỏi nỗ lực cá nhân cao do thiếu hụt về resource. Đó chính là lập kế hoạch theo quy tắc SMART. ...
Designing a virtual tag module in FinOps
Khi làm việc với các hệ thống FinOps thì có 2 thứ quan trọng chúng ta cần phải quan tâm đó chính là perspective, thứ 2 là showback và chargeback. Trong bài viết này mình sẽ chia sẻ lại tại sao chúng quan trọng và làm sao để có thể dễ dàng quản lý chúng bằng module virtual tag trong các hệ thống FinOps. Bắt đầu nào, dĩ nhiên là ngoài những cái này ra thì FinOps cũng có rất nhiều thứ quan trọng cần phải chú ý nhưng ở đây ta chỉ nói về những cái này thôi nhé. ...
Kubernetes Components
The architecture of Kubernetes is divided into two main parts: 1. Control Plane Components The Control Plane is the brain of Kubernetes — responsible for managing the overall state of the cluster and orchestrating all activities. 1.1 kube-apiserver Acts as the central communication gateway of the system. All requests from kubectl, the Dashboard, CI/CD pipelines, etc., are sent through this component. Responsible for: Authentication Authorization Reading/writing data from/to etcd Forwarding requests to other components Example: You run kubectl get pods → the request goes to the kube-apiserver. ...
Kubernetes Concepts
When learning Kubernetes, there are two core concepts you should understand: Kubernetes Object Model and Declarative Management. Let’s break down both of these. 1. Kubernetes Object Model Everything in Kubernetes is an object, and these objects are managed via YAML or JSON definitions. They represent the resources in your system. Cluster A cluster is a group of machines (nodes) consisting of: Control Plane (master) - responsible for managing the system. Worker Nodes - where your applications run. Node A node is a physical or virtual machine within a cluster. Each node includes: ...
Google Cloud Billing
In Google Cloud, Billing is the system that helps you manage costs, payments, and budgets when using services on Google Cloud Platform (GCP), such as Compute Engine, BigQuery, Cloud Storage, and more. Below are the four most important components in Google Cloud Billing: 1. Budget Allows you to set a spending limit for a specific time period (e.g., month, quarter) for a project or billing account. Purpose: Avoid spending beyond your planned budget. Example: You’re building a backend for a crawling system running on GCP, using multiple VMs or Cloud Functions. To control cost, you set a $500/month budget to track your expenses. 2. Alert Alerts are automatically triggered when spending exceeds a defined percentage of the budget (e.g., 50%, 90%, 100%). Purpose: Notify you when costs spike unexpectedly — possibly due to a bug or misconfiguration. Example: If the cost of your backend on Cloud Run reaches 90% of the $500 budget, you’ll receive an email notification to take action. ...
Google Cloud Compute Offering
In Google Cloud, Compute Offering is a set of services that help you run workloads (like applications, APIs, batch jobs, etc.) on Google’s host infrastructure. Depending on your workload and requirements, you can choose from the options below: 1. Compute Engine (IaaS - Infrastructure as a Service) A virtual machine where you have full permission to configure the environment. High level of control, similar to traditional hosting on the cloud. Use case: Configure OS in detail, install custom software, need full system control. Example: Run a Node.js/Golang server, cron job, or backend AI model training. AWS equivalent: EC2 2. App Engine (PaaS - Platform as a Service) A platform for running applications where you only need to deploy code — Google handles everything else (scaling, patching, infrastructure, etc.). Low level of control — just push your code, no need to manage servers. Use case: Rapid development, no infrastructure management needed. Example: Run a small API server, REST API, or MVP web app. AWS equivalent: Elastic Beanstalk 3. Cloud Run (Serverless Containers) Run containers (e.g., Docker) in a serverless model. Billing is based on request duration. Medium level of control — you manage the container image, while Google handles scaling and infrastructure. Use case: Leverage the benefits of containers + serverless for lightweight backends or microservices. Example: Run an API service, webhook receiver, or AI inference container. AWS equivalent: App Runner / Fargate 4. Google Kubernetes Engine (GKE) (CaaS - Container as a Service) Run containerized applications with Kubernetes. Google manages the control plane. High level of control — you can fully configure your cluster, while Google manages some parts of it. Use case: Need orchestration, CI/CD pipelines, or complex multi-service applications. Example: Run a microservices system, CI job runners, or real-time data pipelines. AWS equivalent: EKS 5. Cloud Functions (FaaS - Function as a Service) Write and deploy small functions that are triggered by events (HTTP, Pub/Sub, Cloud Storage, etc.). Extremely easy to use — just write a function, no need to manage infrastructure. Use case: Handle small event-driven logic, time-based triggers, or system integration tasks. Example: Auto-resize images, handle webhooks from Telegram/Stripe, send emails on user registration. AWS equivalent: Lambda
Bloom filter là gì và trường hợp sử dụng
Chào mọi người, hôm nay trong lúc mình ôn tập kiến thức thì nhớ đến Bloom Filter, thế là mình lại phải viết thêm một bài nói về cái này nữa rồi =)) Bloom Filter là một cấu trúc dữ liệu xác suất được thiết kế để kiểm tra nhanh chóng xem một phần tử có thuộc tập hợp hay không. Công dụng của nó là kiểm tra nhanh xem “Cái này có chưa nhỉ?” ...
Tổng quan về Hợp đồng Thông minh trong DEX và AMM
Hợp đồng thông minh DEX Trong một sàn giao dịch phi tập trung (DEX) như Uniswap, nhiều hợp đồng thông minh làm việc cùng nhau để cho phép hoán đổi token. Các hợp đồng chính thường bao gồm: Factory, Router, và Pair. Vai trò của từng hợp đồng như sau: 🔹 1. Factory Contract Là nơi đăng ký chính của các pool thanh khoản (cặp token). Tạo ra pool thanh khoản mới khi có thêm cặp giao dịch mới. Lưu trữ ánh xạ giữa các cặp token và địa chỉ của hợp đồng Pair tương ứng. Các hàm chính: ...
So sánh Node.js và Golang trong Backend
Xin chào mọi người, Trong quá trình làm việc ở vị trí Backend Engineer, mình đã trải qua nhiều ngôn ngữ lập trình, trong đó có Node.js và Golang. Vậy trường hợp nào nên dùng Node.js, trường hợp nào nên dùng Golang? Bài viết này chia sẻ kinh nghiệm thực chiến cá nhân và quan sát thực tế từ đồng nghiệp xung quanh. Let’s start! 1. Hiệu năng và Đa luồng Golang có hiệu năng tốt hơn nhờ là compiled language và mô hình goroutine rất nhẹ (lightweight thread do Go runtime quản lý), dễ dàng xử lý hàng nghìn concurrent connections mà tốn rất ít tài nguyên. ...
Xác thực người dùng bằng ví crypto
Hôm nay, trong một buổi đầu tuần sau chuyến đi du lịch giữa năm, tôi tranh thủ ôn lại kiến thức để chuẩn bị cho buổi phỏng vấn vị trí Backend Blockchain sắp tới. Nhân tiện, tôi viết lại bài này để ghi nhớ kỹ thuật xác thực người dùng không cần tài khoản và mật khẩu, mà sử dụng đăng nhập bằng ví Web3 (như Metamask, Coin98 Super Wallet, Trust Wallet,…). Cùng bắt đầu nhé! Quá trình này gồm 3 bước đơn giản: ...