About XoanDev YouTube Channel
Chào mừng bạn đến với XoanDev – nơi mình chia sẻ hành trình tuổi trẻ, kiến thức, và các dự án cá nhân. Từ ứng dụng, website, chương trình WinForms đến các công cụ và hướng dẫn công nghệ, đây là nơi cùng nhau học tập và sáng tạo.
Chủ đề chính:
💻 Công nghệ – Lập trình, phát triển ứng dụng, và các công cụ công nghệ.
🎙️ Podcast – Trò chuyện về cuộc sống, học tập và sáng tạo.
📖 Học tập – Mẹo và chiến lược học hiệu quả.
Nếu thấy nội dung hữu ích, hãy Like và Subscribe để ủng hộ kênh nhé!
🔗 Subscribe: youtube.com/@xoandev
📩 Email: xoandev163@gmail.com
Hãy cùng học tập và xây dựng những điều tuyệt vời nhé! 😊
------------------
Main Topics:
💻 IT – Coding, app development, and tech tools.
🎙️ Podcast – Discussions on life, learning, and creativity.
📖 Study – Tips and strategies for effective learning.


Xoan Dev

THỊ TRƯỜNG CẠNH TRANH, CHƯA BIẾT TÌM VIỆC Ở ĐÂU? 🤔

Nếu vẫn đang loay hoay tìm nơi ứng tuyển, dưới đây là 12 website tuyển dụng uy tín mà mình thấy rất đáng để tham khảo. Mỗi nền tảng đều có thế mạnh riêng, tùy vào ngành nghề và kinh nghiệm của bạn.

1. Hệ sinh thái đa ngành & uy tín lâu năm

• VietnamWorks: Một trong những nền tảng tuyển dụng lâu đời và uy tín tại Việt Nam, phù hợp với các vị trí từ Mid-level đến Senior.

• JobOKO: Nổi bật với công nghệ tổng hợp việc làm từ nhiều nguồn khác nhau, hiện có hơn 81.000 tin tuyển dụng đang mở.

• Glints: Nền tảng tuyển dụng trẻ trung, tập trung nhiều cơ hội dành cho sinh viên, Fresher và nhân sự trẻ tại khu vực Đông Nam Á.

• JobsGO: Website và ứng dụng tìm việc thông minh, có khả năng gợi ý việc làm theo vị trí, giúp tìm kiếm thuận tiện hơn.

• LinkedIn: Mạng xã hội nghề nghiệp lớn nhất thế giới, không chỉ để tìm việc mà còn giúp xây dựng thương hiệu cá nhân và mở rộng mạng lưới kết nối.

• Indeed: Một trong những website tuyển dụng lớn nhất thế giới, tổng hợp hàng nghìn tin tuyển dụng từ doanh nghiệp và nhiều nguồn khác nhau. Phù hợp để tìm việc trong nước, remote hoặc cơ hội quốc tế.

2. Website tuyển dụng theo từng lĩnh vực

• YBOX: Kênh quen thuộc dành cho sinh viên và Fresher tìm kiếm cơ hội thực tập, việc làm đầu tiên, Management Trainee và các chương trình phát triển bản thân.

• ITviec: Website tuyển dụng chuyên dành cho lập trình viên với tiêu chí "ít nhưng chất", tập trung vào trải nghiệm của ứng viên ngành IT.

• TopDev: Nền tảng tuyển dụng chuyên biệt cho ngành Công nghệ thông tin, đồng thời cung cấp nhiều báo cáo và thông tin về thị trường IT tại Việt Nam.

• Adjob Vietnam: Phù hợp với những bạn theo đuổi lĩnh vực Marketing, Truyền thông, Creative và Agency.

• Brands Vietnam: Cộng đồng Marketing lớn tại Việt Nam, vừa chia sẻ kiến thức chuyên môn vừa cập nhật nhiều cơ hội việc làm trong ngành.

• Hoteljob: Website tuyển dụng chuyên biệt dành cho lĩnh vực Nhà hàng, Khách sạn và Du lịch.

💡 Gợi ý nhỏ: Đừng chỉ tạo CV trên một website. Hãy cập nhật hồ sơ ở nhiều nền tảng để tăng cơ hội được nhà tuyển dụng chủ động liên hệ.

Ngoài những cái tên trên, bạn cũng có thể tham khảo thêm CareerLink, Timviec365 hoặc Chefjob nếu phù hợp với lĩnh vực mình đang theo đuổi.

Nếu thấy danh sách này hữu ích, đừng quên lưu lại để dùng khi cần và chia sẻ cho bạn bè đang tìm việc nhé!

3 hours ago | [YT] | 0

Xoan Dev

SQL gọn gàng ngăn nắp tìm gì có nấy, còn NoSQL thì như cái phòng của anh em mình vậy, tuy bừa bộn nhưng ném gì vào cũng vừa 😂 Anh em thuộc phe nào?

1 day ago | [YT] | 1

Xoan Dev

Wireframe và Design - Sự khác biệt cốt lõi trong thiết kế giao diện
Nhiều khách hàng khi làm việc với Designer thường mất kiên nhẫn hỏi:
"Sao không lên màu luôn cho đẹp, vẽ mấy cái nét chì thô sơ này làm gì mất thời gian?"
Thực ra, nếu nhảy bổ vào làm giao diện đẹp ngay từ đầu, bạn rất dễ rơi vào cái bẫy: Đẹp mắt nhưng... sai logic.
Hãy nhìn vào bức ảnh ở phía dưới, bạn sẽ thấy hành trình biến hóa của một giao diện:
✏️ Bên trái là Wireframe (Khung xương): Giống như những nét phác thảo thô sơ bằng bút chì. Giai đoạn này chúng ta tạm quên đi màu sắc để tập trung hoàn toàn vào bộ não: Nút này bấm vào đâu? Biểu đồ đặt thế này đã hợp lý chưa? Nó giải quyết bài toán về Logic và Cấu trúc.
🎨 Bên phải là UI Design (Da thịt): Khi khung xương đã vững, ta mới "thổi hồn" vào bằng màu sắc xanh dương hiện đại, font chữ sắc nét và đổ bóng mượt mà. Nó giải quyết bài toán về Thẩm mỹ và Cảm xúc.
Lời kết cho một sản phẩm tốt:
Wireframe trả lời câu hỏi "Làm sao cho đúng?", còn Design trả lời câu hỏi "Làm sao cho đẹp?". Thiếu một trong hai, sản phẩm số khó lòng đi xa được.
Còn bạn thì sao?
Trong quy trình làm việc, bạn thích cảm giác "vắt óc" làm logic cho Wireframe hay cảm giác "thăng hoa" khi phối màu cho Design? Chia sẻ góc nhìn của bạn bên dưới nhé! 👇
#UIUXDesign #ProductDesign #Wireframe #UIDesign #XoanDev

3 weeks ago | [YT] | 2

Xoan Dev

Học được gì từ React Navigation sau chuỗi ngày làm React Native?
Hồi mới bắt đầu với React Native, mình cứ nghĩ đơn giản: "Navigation thì có gì đâu, chẳng qua là chuyển từ màn hình này sang màn hình khác thôi mà."
Nhưng đến khi bơi vào các dự án thực tế (production-scale), mình mới thấm thía một điều: Kiến trúc điều hướng (Navigation Architecture) chính là xương sống quyết định độ mở rộng (scalability), khả năng bảo trì (maintainability) và trải nghiệm người dùng (UX) của cả cái app.


Sau vài "vố" đau thương, đây là những bài học sương máu mình rút ra được:
⚡ Stack Navigation: Cực kỳ lý tưởng cho các luồng đi tuyến tính (linear journeys) hoặc khi cần handle các hiệu ứng chuyển màn hình.
⚡ Bottom Tabs: "Vũ khí" tối thượng để tăng tính tiện dụng (accessibility), giúp người dùng sờ ngay được vào các tính năng cốt lõi của app.
⚡ Nested Navigators: Siêu mạnh mẽ cho các app có cấu trúc phức tạp, nhưng nhớ là phải lên kế hoạch cực kỳ kỹ nếu không muốn tự tay tạo ra một "mớ bòng bong".
⚡ Deep Linking: Trải nghiệm người dùng mượt hay không, các campaign marketing có hiệu quả không, phần lớn dựa vào ông này.
⚡ Authentication Flows: Một cấu trúc điều hướng chuẩn chỉnh là chìa khóa để handle mượt mà các luồng Login, Onboarding và các Route cần bảo mật.


Sai lầm lớn nhất của mình thời "tấm chiếu mới" là cắm đầu vào code UI cho xong các màn hình rồi mới ngồi nghĩ xem sẽ điều hướng thế nào. Giờ thì quy trình đã ngược lại: Thiết kế kiến trúc navigation trước rồi mới code. Cách này vừa tiết kiệm thời gian, vừa giảm nợ kỹ thuật (technical debt), lại còn giúp app dễ scale hơn rất nhiều sau này.
Anh em làm React Native thường chuộng pattern hay best practice nào nhất khi quản lý Navigation? Chia sẻ bên dưới thảo luận cho xôm nhé! 👇


#ReactNative #ReactNavigation #MobileDevelopment #Programming #XoanDev

3 weeks ago | [YT] | 3

Xoan Dev

So sánh Session-Based Authentication và JWT Token
Giới thiệu
Khi xây dựng hệ thống xác thực người dùng, hai phương pháp phổ biến nhất là Session-Based Authentication và JWT (JSON Web Token). Mỗi phương pháp đều có những ưu điểm và hạn chế riêng. Bài viết này sẽ giúp bạn hiểu rõ bản chất của từng giải pháp để đưa ra lựa chọn phù hợp cho dự án của mình.

So sánh Session-Based Authentication và JWT Token
Giới thiệu
Khi xây dựng hệ thống xác thực người dùng, hai phương pháp phổ biến nhất là Session-Based Authentication và JWT (JSON Web Token). Mỗi phương pháp đều có những ưu điểm và hạn chế riêng. Bài viết này sẽ giúp bạn hiểu rõ bản chất của từng giải pháp để đưa ra lựa chọn phù hợp cho dự án của mình.

1. Session-Based Authentication
Cách hoạt động
Khi người dùng đăng nhập thành công, server tạo ra một Session ID ngẫu nhiên, lưu trữ thông tin này vào database hoặc cache (Redis), sau đó gửi Session ID về browser dưới dạng HttpOnly Cookie.
Ở các request tiếp theo, browser tự động gửi cookie này lên server, server sẽ tra cứu thông tin session để xác thực người dùng.
Ưu điểm

Dễ triển khai: Hầu hết các framework web đều hỗ trợ sẵn cơ chế session, bạn chỉ cần get/set là xong.
Thu hồi quyền truy cập tức thì: Muốn "đăng xuất tất cả thiết bị" hoặc khóa tài khoản? Chỉ cần xóa session khỏi database/Redis là xong ngay lập tức.
Bảo mật tốt: Thông tin nhạy cảm luôn nằm ở server, không bao giờ rò rỉ ra ngoài.
Phù hợp với hệ thống vừa và nhỏ: Khi chưa cần kiến trúc phức tạp, session là lựa chọn đơn giản và hiệu quả.

Nhược điểm

Khó scale theo chiều ngang: Khi có nhiều server, bạn cần cơ chế "sticky session" (gắn user vào 1 server cố định) hoặc dùng shared cache như Redis để đồng bộ session giữa các server.
Tốn tài nguyên khi traffic lớn: Mỗi request đều phải truy vấn database/cache để lấy thông tin session, có thể gây bottleneck khi lượng user tăng cao.
Rủi ro bị chiếm đoạt session: Nếu kẻ tấn công lấy được Session ID từ cookie (qua XSS, MITM...), chúng có thể giả mạo người dùng.
Vấn đề với dữ liệu động: Khi cập nhật thông tin user (như thay đổi role, quyền hạn), bạn cần có cơ chế đồng bộ hoặc làm mới session để tránh dữ liệu cũ.


2. JWT (JSON Web Token) Authentication
Cách hoạt động
Sau khi đăng nhập, server tạo ra một JWT Token - một chuỗi mã hóa chứa 3 phần:

Header: Thông tin về thuật toán mã hóa
Payload: Dữ liệu người dùng (user_id, role, email...)
Signature: Chữ ký xác thực tính toàn vẹn

Token này được gửi về client và client sẽ đính kèm vào mỗi request (thường qua header Authorization: Bearer <token>). Server chỉ cần verify chữ ký để xác thực, không cần tra cứu database.

Lưu ý: JWT được encode bằng Base64, không phải encrypt. Bất kỳ ai cũng có thể đọc được nội dung payload, nhưng chỉ có server mới tạo/verify được chữ ký.

Ưu điểm

Stateless - Không cần lưu trạng thái: Server không cần lưu trữ gì cả. Mọi thông tin đều nằm trong token, giúp giảm tải database/cache đáng kể.
Scale tốt với Microservices: Các service khác nhau có thể độc lập verify token mà không cần gọi đến service xác thực trung tâm.
Linh hoạt với SPA và Mobile App: Phù hợp với các ứng dụng Single Page Application, mobile app cần gọi API từ nhiều nguồn khác nhau.
Giảm độ trễ: Không cần round-trip đến database/cache để verify mỗi request.

Nhược điểm

Khó thu hồi token: Một khi token được phát hành, nó sẽ hợp lệ cho đến khi hết hạn. Muốn "đăng xuất ngay lập tức" hoặc khóa user phải implement thêm cơ chế phức tạp như:

Dùng Refresh Token kết hợp Access Token ngắn hạn
Lưu Blacklist/Whitelist token (mất đi tính stateless)
Giảm thời gian sống của token (gây phiền toái cho UX)


Không thoát database hoàn toàn: JWT chỉ giúp bỏ qua bước verify, nhưng các thao tác như refresh token, revoke, hoặc check quyền động vẫn cần database/cache đứng sau.
Rủi ro bảo mật từ thư viện bên thứ ba: Hầu hết dev dùng thư viện JWT có sẵn. Nếu thư viện có lỗ hổng, hàng triệu website dùng nó đều gặp nguy hiểm.
Dễ bị tấn công Race Condition: Khi nhiều request cùng lúc với cùng token, có thể gây ra bug nghiêm trọng nếu không xử lý đúng:

Spam tạo tài nguyên (business manager, thẻ tín dụng...)
Thực hiện hành động nhạy cảm nhiều lần đồng thời
Cách khắc phục: Implement queue, rate limiting, idempotency key cho các thao tác quan trọng


Token bị đánh cắp: Nếu kẻ tấn công lấy được token (qua XSS, sniffing, SDK kém bảo mật), chúng có thể sử dụng cho đến khi token hết hạn.


3. Khi nào nên dùng giải pháp nào?
Chọn Session khi:

Dự án có kiến trúc monolith hoặc vừa và nhỏ
Cần thu hồi quyền truy cập tức thì (logout, khóa tài khoản)
Ưu tiên bảo mật và kiểm soát chặt chẽ
Đã có sẵn Redis/cache cluster để scale

Chọn JWT khi:

Hệ thống theo mô hình Microservices
Cần stateless để scale dễ dàng
Xây dựng API cho mobile app, SPA, third-party
Các service cần giao tiếp độc lập mà không phụ thuộc vào service xác thực trung tâm

Kết hợp cả hai
Trong một số trường hợp, bạn có thể dùng kết hợp:

Session cho web app chính
JWT cho mobile app và API public


4. Lời khuyên thực chiến
Với Session:

Dùng Redis thay vì lưu session trên disk để tăng performance
Implement session rotation sau mỗi lần đăng nhập thành công
Set timeout hợp lý cho session

Với JWT:

Access Token nên có thời gian sống ngắn (5-15 phút)
Dùng Refresh Token để gia hạn, lưu refresh token trong database để có thể revoke
Không bao giờ lưu thông tin nhạy cảm trong JWT payload (password, số thẻ...)
Implement rate limiting và idempotency cho các endpoint quan trọng
Thêm jti (JWT ID) vào payload để track và revoke token khi cần

Chung:

Luôn dùng HTTPS để mã hóa kết nối
Set HttpOnly, Secure, SameSite flags cho cookie
Implement CSRF protection
Log và monitor các hoạt động xác thực bất thường


Kết luận
Không có giải pháp nào là hoàn hảo tuyệt đối. Session và JWT đều có thế mạnh riêng:

Session: Đơn giản, bảo mật, kiểm soát tốt - lý tưởng cho monolith
JWT: Linh hoạt, stateless, scale tốt - phù hợp với microservices

Lựa chọn đúng phụ thuộc vào yêu cầu cụ thể của dự án. Đôi khi, việc kết hợp cả hai mới là giải pháp tối ưu.
Quan trọng nhất: Dù chọn giải pháp nào, hãy luôn chú trọng đến security best practices và test kỹ các edge case!

Bạn có kinh nghiệm hoặc góp ý gì khác về Session và JWT? Hãy chia sẻ ở phần bình luận bên dưới!

7 months ago | [YT] | 1

Xoan Dev

[FSW1] DEMO FULLSTACK WEBSITE BÁN GIẦY SUPER THỂ THAO (ASP.NET 7, SQL Server, Visual Studio)
Ở video này mình sẽ DEMO một Website FullStack Bán giầy thể thao sử dụng ASP.NET 7 và SQL Server và trên môi trường Visual Studio 2022.
Link Video: https://youtu.be/1VscGMWiSVM?si=hKhmk...

2 years ago | [YT] | 3

Xoan Dev

How to connect PHP to MySQL database

3 years ago | [YT] | 4

Xoan Dev

Sắp Tới Đây Kênh Mình Có Một Series Về Chủ Đề PodCast Bằng Tiếng Anh. Mình Mong Muốn Năm Mới Có Sự Khác Biệt So Với Năm Cũ. Chúng Ta Cùng Nhau Học Tiếng Anh Nhé Mọi Người!!!

Coming Soon My Channel Has A Series On The Subject Of PodCast In English. I Want The New Year To Be Different From The Old Year. Let's Learn English Together Everyone!!!

3 years ago | [YT] | 3

Xoan Dev

Bạn đã có mục tiêu phấn đấu cho năm 2023 chưa?
Do you have a goal to strive for in 2023?

3 years ago | [YT] | 2