🏋 Top Posts

👉 MongoDB Cheat Sheet - Continuous update

Tổng hợp những chức năng được sử dụng nhiều nhất khi sử dụng mongodb và mongoose.

👉 Hàm reduce trong Javascript: Cách sử dụng và các ví dụ đơn giản trong lập trình js

reduce js hay còn gọi là hàm reduce trong Javascript là một hàm có sẵn trong thư viện của Javascript, cho phép bạn áp dụng một hàm lên một mảng và giảm nó xuống thành một giá trị duy nhất. Hàm reduce có cú pháp như sau

👉 Khi nào nên sử dụng Firebase

Firebase là Backend-as-a-Service - BaaS. Firebase theo nghĩa rộng là nền tảng phát triển ứng dụng trên thiết bị di động và web. Firebase giải phóng các developer để tập trung tạo ra trải nghiệm cho người dùng sử dụng sản phẩm một cách tuyệt vời.

🏋 New Posts

👉 Cải thiện hiệu suất SELECT COUNT(*) từ 4,2s xuống 0.002s với 13 triệu dữ liệu có đánh đổi gì không?

Tôi có hai table mỗi table có 13 triệu records. Và vẫn là câu lệnh SELECT COUNT(*) nhưng một table mất 4.2s và một table mất 0.002s... Vì sao? Chúng ta sẽ đi tìm hiểu

👉 Với 13 triệu dữ liệu và 4Gb chúng tôi cải thiện tìm kiếm từ 6s còn 1s trong MYSQL không sử dụng ElasticSearch

Đây là một kịch bản có thật được thực hiện lại với một table `(products)` trong MySQL có 13 triệu dữ liệu. Và có 3 tính huống tìm kiếm. Và mỗi tình huống có 3 cách, trong đó có 2 cách sử dụng toán tử `LIKE = '%keySearch%'` và `LIKE = 'keySearch%'`. Như sau:

👉 40 tuổi của ngành lập trình viên tôi chấp nhận buông bỏ...

Tôi biết tôi đang ở đâu và hơn 15 năm kinh nghiệm trong lĩnh vực lập trình dường như không mang lại lợi thế gì khi bạn chấp nhận trong ngành nghề này.

👉 Source Go JAVA API: vetautet - Tích hợp master, slave, sentinel và local cache cải thiện performance API (Link đính kèm)

Dự án vetautet giải quyết bài toán cải thiện hiệu suất READ API, WRITE API, Data consistency, Distributed Transactions, Distributed data... Ngoài java, go còn có nestjs và nodejs...

👉 Thu hồi JWT - Cách hiệu quả vô hiệu hoá devices (iPad, iMac) khi iPhone thay đổi password!

CV quá tốt, như vậy thì hệ thống xxxx.com bạn triển khai cho phép một user login trên được nhiều thiết bị phải không?

👉 JWT Skills: Kịch bản tốt nhất ở đây là gì? Khi JWT khi User logout trên iPhone mà iPad, iMac vẫn hoạt động

Ngoài ra một kịch bản khác nữa được đưa ra ngoài chuyện Logout. Khi logout thì token này đã có trong `tokenBlackList` vì vậy khi một ai đó vô tình lấy lại token này để sử dụng or token này bị rò rỉ (leak) và thời gian token này chưa hết hạn...

👉 #07: OpenSource ShareScreen Go và Nodejs Low latency / High resolution

Mục này sẽ cung cấp hai `OpenSource` về web app ShareScreen được phát triển bởi Go và Nodejs với nhiều tính năng được cải thiện về hình ảnh, độ trễ...

👉 DDD - Project: vetautet - Điều gì khiến bạn lo lắng khi đi phỏng vấn với vị trí Senior? Khấu trừ hàng tồn kho?

Đầu tiên, đừng vội vồ vập, vì chúng ta là những người đã kinh qua không gì phải vội. Hãy nhấn mạnh với họ rằng, công ty bạn đang trừ hàng tồn kho ở giai đoạn nào?

👉 Ở vị trí Front-End gần 2 năm và giờ đây tôi ở vị trí Full-Stack tiệm cận Backend nay tôi muốn chia sẻ lộ trình...

Nhưng nói thêm rằng, nếu từ FE muốn chuyển qua `Back-End(BE)` thì Nest.js không đủ để làm chuyện đó. Vì sao? Tôi có thể kết luận như thế này..

👉 Nestjs, JAVA vì sao chúng ta phải cần IoC (Inverse of Control)

Nếu bạn xuất thấn từ JAVA`, GO và Nestjs thì có lẽ cụm từ `IoC` sẽ xuất hiện tấn suất rất nhiều trong dự án và trong các lần phỏng vấn đúng không?

👉 Khấu trừ hàng tồn kho thì backend sẽ chọn cách nào trong 3 cách sau đây.

Nếu một lập trình viên backend hiểu về hệ thông bán hàng đồng thời CAO hoặc kiến ​​trúc đồng thời cao, bạn có thể thấy rằng khấu trừ hàng tồn kho trong Database này không hoàn hảo và nó có vấn đề ở đây.

👉 Đánh bại sự mông lung của ngành nghề Lập Trình Viên

Trường hợp thứ hai ví dụ muốn xử lý một data trong một `Array()` thì bạn cần phải nắm hai khái niệm chính đó là xử lý `for` với cấp độ bình thường, nhưng khi xử lý một `Array()` lớn thì `for` thôi là chưa đủ, mà thêm khái niệm `Stream()`...

👉 DDD - Project: vetautet.com: Redis Master/Slave: Từng Bước Để Đạt Hiệu Năng Cao (50,000 Orders/Giây)

Vì vậy hãy suy nghĩ nếu như Master bị hẻo thì ai sẽ là người ghi `Slave-01` hay `Slave-02` hoặc `Slave-0N`... Là ai? Công thức nào? Và setup thế nào?

👉 [Cuối tuần #13] - Chúng tôi phụ thuộc quá nhiều vào AI, để bây giờ không thể tự suy nghĩ mỗi ngày...

Vì sao tôi vẫn là một nông dân CODE. Với tôi, tôi sẽ cố gắng không phụ thuộc vào AI trừ khi tôi không còn suy nghĩ được vấn đề gì nữa...

👉 DDD - Project: vetautet.com: Kafka ở cấp độ doanh nghiệp, bài viết này là đủ hãy thêm vào CV của chúng ta.

Thật sự mà nói thời điểm đó khi tôi bắt đầu học về kafka thì lúc đó trên internet có khác ít những blog hay video để triển khai những khái niệm rất mơ hồ như `HW, LEO, LSO, LW` hoặc `ISR và AR là viết tắt của từ gì trong Kafka? Tỷ lệ ISR có nghĩa là gì?` rất khó tìm được đáp án.

👉 Nguyên tắc phân trang trong MySQL với limit X,Y? Vì sao X càng lớn thì timeResponse lại cao...

Chúng ta đều đồng ý rằng, trong MySQL dữ liệu càng nhiều thì query càng chậm. Thực tế như sau, khi sử dụng `limit X,Y` để truy vấn, giá trị `X` càng lớn thì tốc độ truy vấn càng chậm.

👉 [Chuyện cuối tuần #7] - Docker is damaged, kẹt xe làm buổi sáng mất hết năng lượng và nhân vật Anh CAO trong Upstream

Họ đã đưa ra những kiến thức chuẩn bị cho việc `ngồi ghế nóng` kiểu giống như đề mở vậy. Đó là `k8s`, `docker`, và quan trọng là `kafka`. Nhưng đột nhiên hãy xem hình ảnh tôi đang làm

👉 Kafka: Hướng dẫn phỏng vấn dưới góc nhìn của một DEV chuẩn bị layoff (phần 2)

Ngoài trời đang mưa rả rích, tiếng mưa rơi lộp độp trên của kính của văn phòng của một công ty lớn trong ngành sản xuất phần mềm. Trong phòng phỏng vấn, Senior - một kỹ sư dày dạn kinh nghiệm đang trao đổi với Intern - một ứng viên trẻ tiềm năng.

👉 Kafka: Hướng dẫn phỏng vấn dưới góc nhìn của một DEV chuẩn bị layoff.

Gần đây, hiện tại và sắp tới sau khi kỳ tết 2025 thì chuần bị là mùa cao điểm của việc nhảy việc, và nhiều anh em đã gửi các câu hỏi or đã hỏi tôi về các câu hỏi của các stacks ví dụ như phỏng vấn của NVIDIA..

👉 Lập trình đồng thời và Vật cực tất phản - Chuyện cuối tuần

Chuyện cuối tuần - Vật cực tất phản, hôm nay tôi muốn đề cập đến một khái niệm mà tôi đọc qua trong cuộc sống là đúng, nhưng trong lập trình cấp độ ngôn ngữ thì tôi thấy nó chưa đúng, nhưng lạ thay với cấp độ doanh nghiệp thì nó lại đúng. Khái niệm được đề cập như sau:

👉 DDD - Project: vetautet.com 07: Cơn ác mộng của việc tìm kiếm log và cuộc cách mạng trong DDD project

Đó là ngày đầu tiên của tôi sau khi được tăng chức khi có một bước tiến mới trong việc [Cải thiện hiệu suất API mới kỹ thuật mới trong DDD - Project] với tư cách một Junior tại một công ty công nghệ.

👉 Nếu Kafka mất tin nhắn hãy tập trung 3 giai đoạn này - Vũ khí backend năm tới

Làm thế nào để đảm bảo message không bị mất sau này chủ yếu được phân tích từ ba giai đoạn này, hãy chú ý nó một cách cẩn thận. Chỉ khi nào bạn thực sự sử dụng nó thì mới thấy 3 giai đoạn này là vô cùng quan trọng.

👉 Lập trình đồng thời #1: Nói về Thread vs Virtual Thread và ghé nhà hàng xóm Goroutine

Chỉ cần hiểu như thế này cho các round phỏng vấn như món tráng miệng đó là `Thread` rất nặng, nó tương ứng mới các thread của hệ điều hành. Vì vậy chắc chắn có limited.

👉 2025 tôi không phải có thêm kinh nghiệm và tôi có thêm nhiều Anh Em DEV hơn. Tạm biệt 2024

Tôi còn nhớ JavaEE lúc đó rất phổ biến vì các logic business được quản lý mới Struct, Spring, và không quên đó là Hibernate chịu trách nhiệm quản lý database, nhìn lại một hành trình giờ đây quá nhiều thay đổi với sự xuất hiện của SpringMVC nó đã làm lu mờ đi Struct...

👉 DDD - Project: vetautet.com 06: INTERN với sự khiêm tốn đến kỳ lạ lần này nó đã thực sự thành công lên Junior

Cậu intern mới vào công ty có 3 tháng mà có thể thấy hình như cậu ấy đã chạm vào được trái tim của ứng dụng, của anh em và quan trọng có lẽ danh phận Junior chỉ để nhằm hạn chế lương của cậu ta thôi sao... Tôi tự nhủ..

👉 DDD - Project: vetautet.com 05: Hệ thống chúng tôi cảm ơn thằng em INTERN và đây có lẽ là định mệnh

Chắc chắn chúng ta sẽ phải thêm một tuyến phòng thủ tiếp theo để bảo về Redis, tôi nói. Vậy cái gì có performance tốt hơn Redis cache nữa... Bỗng thằng em INTERN cất tiếng nói, Anh em thấy thế này, giọng nó khá trong trẻo..

👉 Hệ thống đồng thời CAO: Kỹ thuật rất đơn giản phải không? Nhưng tôi mất 5 năm còn bạn chỉ mất 3 phút..

Đương nhiên có rất nhiều framework opensource hỗ trợ local cache chẳng hạn như `Ehcache`, `Guava cache`, `Caffeine Cache` đương nhiên còn nhiều nữa... Nhưng thật sự bạn hay team bạn đã sử dụng chúng hết chưa, và các bạn phải chọn lựa thì dựa trên tiêu chí nào?

👉 Cách đảm bảo dữ liệu không bị trùng lặp trong các tình huống đồng thời cao?

Cách đảm bảo dữ liệu không bị trùng lặp trong các tình huống đồng thời cao. Trước tiên hãy xem câu hỏi và sau đó mỗi chúng ta tự hỏi: "Minhd đã từng gặp phải những tình huống này chưa? Hoặc có thể tương lai sẽ gặp thì mình sẽ thực hiện như thế nào?"

👉 Tôi rất tự tin về MYSQL cho đến khi gặp người Anh phỏng vấn có tâm

Sau cuộc phỏng vấn đó, tôi dành một chút thời gian để suy nghĩ lại về những gì anh ấy nói.   Công nhận về MYSQL việc viết câu lệnh rất đơn giản chỉ xoay quanh bốn cụm từ `SELECT`, `UPDATE`, `DELETE`, `INSERT INTO` tôi tin rằng đây là điều mà mọi lập trình viên có chút kinh nghiệm đều có thể hiểu và làm được. Nhưng hôm nay sao nó lại quá lạ lùng như vậy…

👉 Lập trình tuổi 35 - Khủng hoảng không phải đến từ công việc mà từ chi tiêu

Lập trình tuổi 35 - họ nói độ tuổi này ít công ty tuyển, tôi nghĩ không phải, chả phải có nhiều công ty sẵn sằng chi trả mức lương 8K để tuyển 10 năm kinh nghiệm đó sao? Chả phải nhìn xung quanh, bạn tôi vẫn còn hăng say hay sao?

👉 DDD - Project: vetautet.com 04: Một tai nạn trực tuyến xảy ra lúc 11h đêm, một cuộc điện thoại và nhiều notifications

Lúc này hệ thống đã lên tới `6000 request/second`, điều đó có nghĩa là hệ thống bán vé tàu của chúng tôi phát huy sức mạnh với nhiều người quan tâm. Ngáp một hơi lấy tinh thân đi ngủ thôi... Cuộc đời lập trình viên đẹp đến thế là cùng... NHƯNG

👉 DDD - Project: vetautet.com 03: Tuyến phỏng thủ thứ hai của lập trình viên nhiều kinh nghiệm

Ở phần trước chúng ta đã đến cập đến tuyền phòng thủ đầu tiên trong hệ thống [DDD bán vé tàu TẾT - Đồng thời cao], ở đó có một khái niệm cân được quan tâm đó là `circuitBreaker` và `RateLimiter`. Cốt lõi là `circuitBreaker` nó sẽ phát huy tác dụng trong trường hợp đó chính là quấy bán vé quá tải thì phải lập tức chuyển qua trạng thái OPEN.

👉 DDD - Project: vetautet.com 02: Tuyến phỏng thủ đầu tiên được thiếp lập

Như vậy thì ở video trước chúng ta đã lập nên tuyền phòng thủ đầu tiên sử dụng công cụ `Resilience4j` được Netflix khuyên các hệ thống nên thay thế cho `Hystrix`. Vì `Hystrix` đang được maintenance. Tất nhiên các dự án cũ đang còn sử dụng Hystrix thì vẫn có thể sử dụng chúng nhằm giảm lỗi trong hệ thống.

👉 DDD - Project: vetautet.com 01: Triển Khai Kiến Trúc DDD Cho Ứng Dụng Bán Vé Tàu Tết Với Spring Boot Phần 1: Giới Thiệu Cấu Trúc Module

Trong dự án bán vé tàu Tết với Spring Boot, chúng tôi sẽ chia ứng dụng thành 5 module chính: start, application, controller, infrastructure, và domain. Hãy quan sát và suy nghĩ..

👉 Go 35: Code + SQL - Build Service Two Factor Authentication - Interface vs SQLC

File sqlc và goose dành cho các Lập trình viên Go Member có thể lấy tại đây, Section Go 35: Code + SQL - Build Service Two Factor Authentication - Interface vs SQLC

👉 Dự án đồng thời cao về bán vé tàu TẾT giờ cao điểm sử dụng JAVA - OPENSOURCE By MEMBER TIPSJAVA

Trên thực tế, việc xây dựng bán vé TÀU TẾT về cơ bản là một ứng dụng toàn diện của công nghệ có tính đồng thời cao trong các tình huống cụ thể. Ví dụ như mới tổ chức bán vé vào dịp tết, chuẩn bị bán vé liveshow MỸ TÂM, hoặc bán Iphone 17... Các kịch bản có tính đồng thời cao và khả năng thiết kế kiến ​​trúc có tính tương tranh cao là khả năng then chốt không thể thiếu đối với các nhà phát triển. ..

👉 INTERVIEW BACKEND 01: Bảo Vệ Server Khi Bị SPAM API FORGOT PASSWORD với 5000 request/second

INTERVIEW BACKEND vị trí Fresher BE như sau: Làm thế nào bảo vệ hệ thống cụ thể là nhiệm vụ API FORGOT PASSWORD khi có nhiều request trong một thời gian ngắn hạn.

👉 Series GOLANG cho người mới bắt đầu TỪ SỐ 0

Golang cho người mới bắt đầu sẽ được thiết kế dành cho những sinh viên chưa có hoặc chỉ có kinh nghiệm lập trình cơ bản. Trong topic này, bạn sẽ học những kiến ​​thức cơ bản về ngôn ngữ lập trình go backend

👉 Series JAVA cho người mới bắt đầu TỪ SỐ 0

Java cho người mới bắt đầu sẽ được thiết kế dành cho những sinh viên chưa có hoặc chỉ có kinh nghiệm lập trình cơ bản. Trong topic này, bạn sẽ học những kiến ​​thức cơ bản về ngôn ngữ lập trình Java

👉 Go 31 - [User Login Interface] Implementation Verification OTP

Sau khi chúng ta triển khai thực hiện chức năng [Go 29: Implement IUserLogin - Register] và `User` sẽ nhận được `OTP` được gửi qua `EMAIL` or `SMS` đã đăng ký. Sau nó nếu User nhập OTP