
Bài viết được sự cho phép của tác giả Võ Doãn Thành 1. Kể chuyện nè Có 2 điều mình muốn kể cho bạn nghe. Một là tại sao mình viết topic này. Hai là hoàn cảnh nào mà mình nhận được câu hỏi như topic. Thật ra, ban đầu mình không nghĩ sẽ chia sẽ topic này đâu. Do trước đó mình có viết 1 vài về "Data nên lưu vào database trước rồi mới lưu vào cache hay phải làm ngược lại?". Thì mình có lấy ví dụ để mô tả thì đa số các ví dụ đều dùng Microservice. Và có rất nhiều bạn đặt câu hỏi liên quan tới việc làm sao đảm bảo tính nhất quán (consitent) dữ liệu cho các services với nhau. Lúc đó mình mới nghĩ ra được topic này. Vì nó khá liên quan tới việc quản lý transactions giữa các services. Nguyên văn câu hỏi mà mình nhận được trước đó "How do you handle transactions in Microservice architecture? And if one service fails, what's the [...]
Read more →
Trong bối cảnh thế giới ngày càng chú trọng đến sự bền vững và giảm thiểu tác động môi trường, các yếu tố chất lượng của kiến trúc phần mềm cũng đang dần thay đổi để thích ứng với yêu cầu này. Bài viết này sẽ trình bày chi tiết về tính bền vững như một yếu tố chất lượng mới trong kiến trúc phần mềm và những bước cần thiết để đạt được điều này. Các thuộc tính chất lượng Các yêu cầu không chức năng (non-functional requirements) là các tiêu chí quan trọng để đánh giá mức độ hoàn thiện của một hệ thống phần mềm. Chúng bao gồm hơn 80 thuộc tính đáng chú ý như tính sẵn sàng, độ tin cậy, khả năng mở rộng, bảo mật và bảo trì. Dưới đây là một số bộ thuộc tính chất lượng chính: Bảo mật (Security): Bảo mật thông tin, tính toàn [...]
Read more →
Design Thinking là gì? Việc áp dụng Design Thinking không chỉ giúp bạn tạo ra những sản phẩm và dịch vụ tốt hơn mà còn phát triển kỹ năng mềm quan trọng như làm việc nhóm, thuyết trình và tư duy sáng tạo. Cùng tìm hiểu chi tiết trong bài viết dưới đây. Xu Hướng Công Nghệ Hiện Nay Trong thời đại số hóa, các xu hướng công nghệ mới đang định hình lại cách chúng ta sống và làm việc. Dưới đây là những xu hướng nổi bật: 1. Trí Tuệ Nhân Tạo (AI) AI đã phát triển từ năm 1956, đóng vai trò quan trọng trong tự động hóa, phân tích dữ liệu và cải thiện trải nghiệm khách hàng. 2. Web3 Web3 phi tập trung hóa và bảo mật thông tin người dùng thông qua blockchain, ứng dụng trong tài chính phi tập trung (DeFi) và NFTs. 3. An Ninh Mạng (Cyber Security) An ninh mạng đảm bảo hệ thống được bảo vệ trước cá [...]
Read more →
Bài viết được sự cho phép của tác giả Duy Phan Có khá nhiều bạn đã yêu cầu mình một bài viết về Repository Design Pattern. Vậy mục đích của nó là gì? Nó có thực sự cần thiết cho ứng dụng của bạn hay không? Những điểm mạnh, điểm yếu của nó là gì? Chúng ta cùng đi sâu tìm hiểu qua bài viết này nhé. Repository Design Pattern là gì? Đây là một mẫu thiết kế nâng cao mà các bạn mới tiếp xúc lập trình có lẽ cũng không để ý về nó lắm. Đối với các bạn đã có kinh nghiệm thực tập hay làm việc ở các công ti - chắc hẳn cũng đã được nghe các mentor của mình nói về nó. Repository Design Pattern (mình sẽ tạm viết tắt nó thành RD) là một trong những mẫu thiết kế được sử dụng nhiều nhất trong hầu hết các ngôn ngữ lập trình, các framework... như .NET, Java, PHP..., trải dài [...]
Read more →
Bài viết được sự cho phép bởi tác giả Vũ Thành Nam Trong bài viết sự tiến hóa của kiến trúc phần mềm mình có đề cập đến loại kiến trúc này, bạn đọc có thể tìm đọc lại link ở cuối bài viết. Bài viết này mình sẽ đi sâu hơn một chút nhưng vẫn không phải dùng những thuật ngữ đao to búa lớn để diễn tả kiến trúc này, mà mình thông qua những ví dụ đơn giản nhất để bạn đọc có thể hiểu được một cách dễ dàng. Bắt đầu nhé! Bạn bắt đầu hình dung, một ứng dụng hay một website thường sẽ có 3 lớp thành phần chính đó là tầng giao diện, tầng xử lý nghiệp vụ business và tầng cơ sở dữ liệu. Ba lớp ngày sẽ đi từ ngoài vào trong, thứ mà đập vào mắt bạn như bài viết này cũng không ngoại lệ, để có thể hiển thị được cho bạn đọc (client hay [...]
Read more →
Trong thời đại 4.0 ngày nay, vai trò của người thiết kế đồ họa (Graphic Designer) ngày càng trở nên quan trọng và được đánh giá cao. Vậy, bạn có biết Graphic Designer là gì và công việc của họ là như thế nào không? Trong bài viết này, hãy cùng TopDev khám phá nhiều khía cạnh về Graphic Designer, từ công việc hàng ngày, kỹ năng cần có, cơ hội nghề nghiệp và các câu hỏi thường gặp xoay quanh công việc này. Graphic Designer là gì? Graphic designer là người chuyên thiết kế và tạo ra các sản phẩm có liên quan đến hình ảnh, đồ họa và thiết kế mỹ thuật. Họ sử dụng sự sáng tạo và kỹ năng kỹ thuật để tạo ra các sản phẩm như bảng quảng cáo, hình ảnh, logo, bìa sách và nhiều sản phẩm khác. Công việc của Graphic Designer là gì? Thông thường trên các JD (mô tả công việc) khi tuyển dụng, các công việ [...]
Read more →
Bạn đã từng say mê trước những logo ấn tượng, những trang web đẹp mắt hay những bộ trang phục lộng lẫy? Đây chính là tác phẩm của những Designer chuyên nghiệp. Tuy nhiên bạn vẫn chưa hình dung rõ nghề Designer là gì? Trong bài viết này, chúng ta sẽ khám phá sâu hơn về bản chất của nghề Designer, từ định nghĩa cơ bản cho đến những khía cạnh phức tạp hơn như mức lương hay cơ hội nghề nghiệp. Bắt đầu thôi nào! Designer là gì? Designer là những người chuyên về việc thiết kế và sáng tạo ra các sản phẩm, dịch vụ, hoặc trải nghiệm với mục đích mang lại giá trị thẩm mỹ, chức năng và trải nghiệm tốt cho người sử dụng. Một cách cụ thể hơn, Designer là những người sử dụng kiến thức, kỹ năng và sự sáng tạo của mình để: Xác định và giải quyết vấn đề thông qua thiết [...]
Read more →
System Design là một kỹ năng cần thiết đối với các kỹ sư phần mềm đang tham gia hay muốn xây dựng các ứng dụng phức tạp; nó đòi hỏi khả năng tư duy sáng tạo và có hệ thống về cách giải quyết vấn đề cũng như việc áp dụng kiến thức kỹ thuật để thực hiện các giải pháp một cách hiệu quả. Bài viết hôm nay chúng ta cùng nhau điểm qua top 10 khái niệm System Design mà mọi lập trình viên nên biết để có thể tự tin hơn khi tham gia vào các dự án lớn trong tương lai nhé. System Design là gì? System Design (thiết kế hệ thống) là quá trình xác định kiến trúc (architecture), thành phần (component), module và giao diện (interfaces) của một hệ thống để đáp ứng các yêu cầu cụ thể, cũng như xác định các công nghệ và công cụ sẽ được sử dụng để triển khai hệ thống. Các bước trong quá trình System Design Xác định [...]
Read more →
UI UX là gì? - UX UI Design là một ngành khá hot và có tiềm năng rất lớn trong thời đại công nghệ số ngày nay. Vậy bạn có từng tự hỏi rằng công việc của một UX/UI designer là như thế nào? Một UX UI Designer thì phải có những tính cách hay tố chất như thế nào? Người làm UX UI Design sẽ phối hợp với những chức năng khác như thế nào? Bài viết này sẽ giải đáp những câu hỏi đó. UX UI là gì? UX (User Experience) và UI (User Interface) là hai khái niệm quan trọng trong lĩnh vực thiết kế và phát triển ứng dụng, trang web và các sản phẩm số. UX là gì? UX (User Experience - Trải nghiệm người dùng): Đây là khái niệm liên quan đến cách mà người dùng tương tác với sản phẩm của bạn và cảm nhận về trải nghiệm đó. Mục tiêu chính của UX design là đảm bảo người dùng có [...]
Read more →
Bài viết đến từ anh Trần Minh Thiện - Giám đốc Kiến trúc Giải pháp Enterprise Architect team @Techcombank 1. Tổng quan Trong các hệ thống phân tán (distributed systems), các giao dịch thương mại (business transactions) qua nhiều tầng dịch vụ (multiple-layer services) cần thiết có một cơ chế để đảm bảo dữ liệu phải nhất quán xuyên suốt. Vì vậy, khái niệm SAGA đại diện cho một mô hình hoạt động thương mại tổng quát (như khi ta đặt một chuyến du lịch) gồm nhiều yêu cầu chuyên sâu (low-level requests) mà mỗi yêu cầu này sẽ thực hiện cập nhật dữ liệu trong từng service đơn lẻ. Mỗi yêu cầu cũng sẽ chứa một yêu cầu khôi phục (compensating request) chỉ được thực hiện khi yêu cầu ban đầu bị lỗi. 2. Ngữ cảnh Giao dịch (transactions) là thành phần chủ yếu trong mọi ứng dụng doanh nghiệp (enterprise application). Không có giao dịch sẽ không thể duy trì tính nhất [...]
Read more →
Bài viết đến từ anh Nguyễn Ngọc Hải - Quản lý cao cấp Kiến trúc Giải pháp Enterprise Architect team @Techcombank Tổng quan Trong quy trình phát triển phần mềm, các nguyên tắc về thiết kế component là không thể thiếu để có một hệ thống được tổ chức quy củ, dễ mở rộng và dễ quản lý. Components trong bài dùng để chỉ đến các thành phần nhỏ nhất, thuộc về một hệ thống, có thể triển khai được một cách tương đối độc lập với các component khác, có thể là micro-service, hoặc library, package, v.v.. Các nguyên tắc thiết kế dưới đây giúp hướng dẫn developer và kiến trúc sư đặt class nào vào component nào (component cohesion), và những component đó liên quan gì đến nhau (component coupling). Việc có các nguyên tắc thiết kế đặc biệt quan trở nên quan trọng khi các hệ thống phần mềm phát triển ngày một lớn và phức tạp. Lúc này chỉ riêng việc quyết định đặ [...]
Read more →
Bài viết đến từ anh Vũ Tuấn Nghĩa - Quản lý cao cấp hoạch định dữ liệu Data Engineering team @Techcombank DynamoDB là một dịch vụ cơ sở dữ liệu NoSQL cung cấp hiệu năng nhanh và nhất quán - có khả năng mở rộng và linh hoạt trong cách sử dụng. Khác với cơ sở dữ liệu quan hệ (RDMS), DynamoDB không sử dụng joins và các cấu trúc quan hệ khác để lưu trữ và truy vấn dữ liệu. Thay vào đó, bạn sẽ thiết kế table của mình theo Single design table - 1 table duy nhất phục vụ toàn bộ application hay service, việc này giúp hiệu suất đọc và ghi nhanh hơn ở scale lớn và giảm chi phí cloud. Trong bài viết này, chúng mình sẽ khám phá các lợi ích và thách thức của việc sử dụng Single design table trong DynamoDB, cũng như cách Datalake ở Techcombank sử dụng để đáp ứng và tối ưu như cầu sử dụng. Single table design Trong tài liệu trang chủ AWS có đề cập: You should maintain as few tables as [...]
Read more →
Game designer có phải là người thiết kế chính cho game? Vậy những kỹ năng nào cần có cho vị trí này, dưới đây là ví dụ 5 câu hỏi phỏng vấn Game Designer. Tin tui đi bà con ơi, tui là game designer nè, thiết kế gì cũng chuẩn, game nào game nấy làm ra chỉ có chơi ghiền tới chết hông à!. Đùa chút cho vui nhưng mong rằng qua bài viết này, anh em sẽ có các bước chuẩn bị thật tốt cho buổi phỏng vấn. Bắt đầu ngay thôi nào! 1. Những kĩ năng nào là quan trọng nhất của Game Designer Câu hỏi thứ nhất phỏng vấn Game Designer, tập trung vào những kĩ năng mà ứng viên cho rằng nó là quan trọng đối với vị trí mà mình đang ứng tuyển. Việc xác định rõ những kĩ năng cần có hoặc quan trọng đối với bản thân giúp nhà tuyển dụng hiểu được ứng viên đang ở trình độ nào. Những kỹ năng mà ứng [...]
Read more →
Bài viết được sự cho phép của tác giả Giang Phan Một trong những khía cạnh quan trọng nhất trong quá trình phát triển một ứng dụng mà các lập trình viên phải đối đầu là sự thay đổi. Khi muốn thêm hoặc loại bỏ một tính năng của một đối tượng, điều đầu tiên chúng ta nghĩ đến là thừa kế (extends). Tuy nhiên, thừa kế không khả thi vì nó là static, chúng ta không thể thêm các lớp con mới vào một chương trình khi nó đã được biên dịch và thực thi. Để giải quyết vấn đề này, chúng ta có thể sử dụng Decorator Pattern được giới thiệu trong phần tiếp theo của bài viết này. Decorator Pattern là gì? Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality. Decorator pattern là một trong những Pattern thuộc nhóm cấu trúc (Structural Pattern). Nó cho phép người dùng thêm chức năng mới vào đối tượng hiện tại mà khô [...]
Read more →
Bài viết được sự cho phép của tác giả Giang Phan Transfer Object Pattern là gì? Transfer Object/ Data Transfer Object Pattern là một dạng Architectural Design Pattern, được sử dụng khi chúng ta muốn truyền dữ liệu qua lại giữa các tầng trong ứng dụng, giữa Client – Server. Data Transfer Object (DTO) còn được gọi là Value Object (VO). Transfer Object đơn giản là một POJO (Plain Old Java Object), chỉ chứa các getter/ setter method và có thể có implement serialize để truyền tải dữ liệu thông qua network. DTO hoàn toàn không chứa behavior/ logic, chỉ được sử dụng để truyền dữ liệu và map dữ liệu từ các Domain Model trước khi truyền tới Client. Trong các ứng dụng đơn giản, các Domain Model thường có thể được sử dụng lại trực tiếp dưới dạng DTO và được truyền trực tiếp đến lớp hiển thị, do đó chỉ có một Data Model thống nhất. Đối với các ứng dụng phức tạp hơn, chúng ta không muốn hiển thị toàn bộ Domain Model cho Client, do đó, việc ánh xạ [...]
Read more →