Lập Trình

Duyệt các bài viết được gắn thẻ Lập Trình

1677 bài viết

Hiểu hơn về CAP Theorem trong System Design

Hiểu hơn về CAP Theorem trong System Design

Bài viết được sự cho phép của tác giả Kiên Nguyễn Một số bạn mới bắt đầu làm quen với System Design khi thấy CAP Theorem không khỏi bỡ ngỡ. Theorem – Định lý, nghe thôi là đã thấy nhức đầu. Tuy nhiên trong System Design thì CAP không quá phức tạp. 11 mẹo đơn giản để tăng hiệu suất Java cấp tốc Capacity Planning - Dự toán công suất cho ứng dụng (Tập 1 ) Biết về CAP Theorem giúp ta có cái nhìn tổng quan hơn, tốt hơn khi thiết kế hệ thống. Không những vậy còn tránh những sai sót không đáng có khi thiết kế. Bắt đầu ngay thôi nào! 1. CAP Theorem là gì? CAP bao gồm 3 từ consistency , availability , và partition tolerance . (Tính nhất quán, tính khả dụng và dung sai phân vùng). The CAP theorem applies a similar type of logic to distributed systems—namely, that a distributed system can deliver only two of three desired characteristics: consistency , availability , and partition tolerance (the ‘ C ,’ ‘ A ’ and ‘ P ’ in CAP). Định lý CAP áp dụng một loại logic tương tự cho các hệ thống phân tán (Distributed Systems) — cụ thể là hệ thống phân tán chỉ có thể cung cấp hai trong ba đặc tính mong muốn: tính nhất quán, tính khả dụng và dung sai phân vùng (chữ ‘C,’ ‘A’ và ‘P’ trong CAP ). 2. Cap Theorem và Cloud Applications Đọc qua định nghĩa phía trên chắc một số bạn sẽ thắc mắc về Hệ thống phân tán. (Distributed System) A distributed system is a network that stores data on more than one node (physical or virtual machines ) at the same time. Because all cloud applications are distributed systems,...

By stationd
Product Manager nên từ chối như thế nào để “được lòng người” nhất?

Product Manager nên từ chối như thế nào để “được lòng người” nhất?

Tác giả: Maddy Kirsch Cách từ chối hay ho cho Product Manager là gì? Công việc của Product Manager là gì ? Họ phải đưa ra được những lựa chọn tốt nhất. Vậy để đưa ra những lựa chọn tốt nhất, một Product Manager thường phải nói không với những đề xuất, ý tưởng, yêu cầu hay thậm chí là sự đòi hỏi từ các bên liên quan. Tuy nhiên, trên thực tế để được lòng mọi người cũng như công việc được suôn sẻ hơn, bạn nên biết cách từ chối khéo léo, hãy làm sao để đối phương có thể hiểu được vấn đề và tôn trọng quyết định của bạn. Từ chối khéo léo giúp PM làm việc hiệu quả hơn 6 mẹo các Product Manager có thể sử dụng để nói “không” Dành thời gian để thảo luận với các bên liên quan về yêu cầu của họ Lý do cho việc này rất đơn giản, tất cả mọi người đều muốn được lắng nghe . Trong những khóa đào tạo trước khi nhận việc của các công ty lớn, như với chương trình KMS Technology tuyển dụng , Product Manager sẽ được hướng dẫn về cách lắng nghe những yêu cầu và khiếu nại của khách hàng, sau đó nói chuyện với họ như thế nào để họ hiểu và thông cảm với vấn đề hiện tại. Khi một bên liên quan trong nội bộ công ty hoặc một khách hàng đến gặp bạn với yêu cầu thêm một tính năng hay một yêu cầu mà bạn không thể hỗ trợ, ít nhất là không phải ngay lập tức, bạn đừng vội vàng nói lời từ chối với họ. Bạn không nên nói những câu nói đại loại như “Điều đó có vẻ không phải...

By stationd
Làm tính năng Theme trong React?

Làm tính năng Theme trong React?

Bài viết được sự cho phép của tác giả Lưu Bình An Để hỗ trợ tính năng Theme , cho phép người dùng lựa chọn kiểu giao diện mà họ thích, trong React, bạn sẽ có thể tiếp cận 1 trong 2 cách dùng CSS-in-JS hoặc dùng CSS variable (tất nhiên không có hỗ trợ với IE) Nếu dùng CSS-in-JS bạn sẽ có thể làm được nhiều thứ hơn, bạn có một bộ công cụ đủ các đạo cụ để mua mai trong JS. Bài viết này sẽ chỉ ra tại sao bạn nên dùng CSS variable cho nhu cầu làm theme Tuyển dụng it react không yêu cầu kinh nghiệm Nếu dùng CSS-in-JS, trong React bạn sẽ tổ chức một ThemeProvider bằng React Context, dùng hook useTheme để lấy giá trị trong ThemeProvider , sẽ như thế này import * as React from 'react' import styled from '@emotion/styled' import { ThemeProvider } from 'emotion-theming' const themes = { light : { colors : { primary : 'deeppink' , background : 'white' , } , } , dark : { colors : { primary : 'lightpink' , background : 'black' , } , } , } const PrimaryText = styled . div ( ( { theme } ) => ( { padding : 20 , color : theme . colors . primary , backgroundColor : theme . colors . background , } ) ) function ThemeToggler ( { theme , onClick } ) { const nextTheme = theme === 'light' ? 'dark' : 'light' return ( < button onClick = { ( ) => onClick ( nextTheme ) } > Change to { nextTheme } mode </ button > ) } function App ( ) { const [ theme , setTheme ] = React . useState ( 'light' ) return...

By stationd
Những cái bẫy cần tránh đối với tester mới

Những cái bẫy cần tránh đối với tester mới

Bài viết được sự cho phép của vntesters.com Bạn là tester mới? Bạn hoang mang không biết khởi đầu từ đâu? Càng tìm hiểu bạn càng cảm thấy bị mù mờ? Bạn lạc lõng và hoài nghi về năng lực cũng như con đường phát triển của một kỹ sư kiểm thử? Bạn cũng đã tự hỏi mình đã làm gì sai? Bạn không sai nhưng có thể bạn đã bị rơi vào một trong những cái bẫy mà những bạn tester mới hay mắc phải. Những cái bẫy mà theo mình các bạn cần phải thoát ra càng sớm càng tốt để có thể bước những bước vững chắc trên con đường phát triển nghề kiểm thử. Tìm hiểu các công việc tester cần có Lạc trong định nghĩa, khái niệm Image credit: httpsbrownehr.com Các định nghĩa, khái niệm trong kiểm thử gần như là những thứ các bạn mới vào nghề thường tiếp cận. Những câu hỏi như “Trường hợp kiểm thử là gì”, “các kỹ thuật kiểm thử”, “sự khác nhau giữa test plan và test strategy”, “sự khác nhau giữa bug, defect, error, fault”, “các loại kiểm thử” hay những câu hỏi tương tự được hỏi ở rất nhiều diễn đàn. Vấn đề ở đây không hẳn là các bạn không tìm được câu trả lời mà chính xác hơn là các bạn bị lạc trong các định nghĩa và khái niệm. Bạn đọc ở chỗ này định nghĩa như vậy, thầy giáo dạy bạn định nghĩa khác. Bạn thấy trên Wiki định nghĩa khác và đọc ở một blog thì thấy định nghĩa khác. Sao lại như vậy? Vậy định nghĩa nào là đúng nhất. Các bạn nghĩ rằng ở đâu đó sẽ có một định nghĩa đúng nhất và bạn đi tìm nó với...

By stationd
Top 10 Hệ quản trị cơ sở dữ liệu (DBMS) phổ biến

Top 10 Hệ quản trị cơ sở dữ liệu (DBMS) phổ biến

Chào các bạn, đã từ lâu hệ quản trị cơ sở dữ liệu (Database Management System – DBMS) là một phần không thể thiếu trong các hệ thống thông tin có nhu cầu quản lý và trao đổi dữ liệu. Thậm chí là việc sử dụng hệ quản trị CSDL tốt và đúng cách còn rất quan trọng trong quá trình phát triển và mở rộng hệ thống. Vậy nên, ở trong bài viết này Station D sẽ cùng với các bạn tìm hiểu về hệ quản trị cơ sở dữ liệu và TOP 10 HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU đang được sử dụng rộng rãi nhất tính đến thời điểm hiện tại nhé! Hệ quản trị cơ sở dữ liệu là gì? Hệ quản trị cơ sở dữ liệu là gì? Hệ quản trị cơ sở dữ liệu – Database Management System (DBMS) là một hệ thống được sử dụng để quản lý và điều hành cơ sở dữ liệu (CSDL). Bạn có thể thao tác thêm mới, sửa, xóa và truy vấn dữ liệu một cách hiệu quả và an toàn. DBMS đảm bảo dữ liệu được tổ chức tốt và dễ dàng truy xuất, đồng thời bảo mật dữ liệu và duy trì tính nhất quán. Một số ứng dụng thực tiễn của DBMS trong doanh nghiệp Quản lý Khách hàng (CRM – Customer Relationship Management): Các hệ thống CRM sử dụng DBMS để lưu trữ thông tin về khách hàng và tương tác của họ với công ty. Ví dụ như Salesforce sử dụng hệ quản trị cơ sở dữ liệu để lưu trữ thông tin khách hàng, lịch sử mua hàng, và dữ liệu liên quan để quản lý mối quan hệ khách hàng hiệu quả. Hệ thống Quản lý Nhân sự (HRMS...

By stationd
Xây dựng API với NodeJS không sử dụng Framework và thư viện bên ngoài (Libraries)

Xây dựng API với NodeJS không sử dụng Framework và thư viện bên ngoài (Libraries)

Biên dịch: Trần Thanh Dân NodeJS thường được sử dụng với Express framework. Ngoài ra NodeJS còn được sử dụng một loạt các thư viện bên ngoài khác. Lý do frameworks và libraries được sử dụng cùng với NodeJS là làm cho việc phát triển dễ dàng hơn và nhanh hơn nhiều. Trong khi làm việc trên bất kỳ dự án thực tế nào, tốt nhất là sử dụng Frameworks và libraries khi cần thiết để cho phép phát triển nhanh hơn. Điều đó nói rằng, trong bài này tôi sẽ chỉ cho bạn cách xây dựng Simple API với NodeJS mà không cần sử dụng frameworks hoặc bất kỳ libraries nào khác. Bài viết này sẽ chỉ sử dụng những chức năng được cung cấp bởi NodeJS. Lý do cho điều này là để cho thấy NodeJS có thể được sử dụng như thế nào nếu không có frameworks và libraries. Ngoài ra điều này sẽ giúp hiểu tốt hơn cách hoạt động của NodeJS Tuyển dụng NodeJS lương cao hấp dẫn cho bạn Chuẩn bị: Cài đặt NodeJS tại https://nodejs.org Mã của bài viết này được lưu trữ tại github repo . Tạo một thư mục có tên là simple-rest-apis-nodejs-without-frameworks. Đây sẽ là thư mục project NodeJS của chúng ta. Vào thư mục simple-rest-apis-nodejs-without-frameworks và sử dụng npm init để làm cho thư mục này trở thành project NodeJS. Các lệnh để thực hiện điều này là cd simple-rest-apis-nodejs-without-frameworks npm init package.json Sau khi chạy npm init, tệp package.json được tạo trong thư mục simple-rest-apis-nodejs-without-frameworks . package.json chứa thông tin về project như tên project, phiên bản, mô tả, v.v. Ngoài ra package.json là nơi chúng ta sẽ thêm các dependencies của node. Trong bài viết này, chúng ta sẽ không có bất kỳ dependencies nào vì chúng...

By stationd
Top 10 câu hỏi thường gặp khi phỏng vấn WordPress Developer

Top 10 câu hỏi thường gặp khi phỏng vấn WordPress Developer

Để xây dựng một website cơ bản với các chức năng viết bài, đăng bài đầy đủ với các thao tác cơ bản thì WordPress là một lựa chọn không thể tốt hơn dành cho chúng ta. Sự đơn giản, linh hoạt và dễ sử dụng khiến WordPress trở thành một CMS phổ biến nhất hiện nay, cùng vì thế mà nhu cầu tuyển dụng lập trình viên WordPress luôn luôn ở mức cao. Bài viết hôm nay chúng ta cùng nhau điểm qua top 10 câu hỏi phỏng vấn WordPress Developer thường gặp nhé. Câu 1: CMS là gì? Các chức năng cơ bản của CMS CMS – Content Management System là hệ thống quản trị nội dung là nơi mà người dùng có thể thao tác cập nhật, thay đổi nội dung text, video, hình ảnh, files, .. trên website của họ mà không cần sự hỗ trợ từ lập trình viên thông qua việc sửa source code. Các chức năng cơ bản của CMS bao gồm: Quản lý nội dung: text, hình ảnh, files, video,… trên website Quản lý quyền truy cập, sử dụng, vai trò trên trang web Quản lý các tài nguyên sử dụng, themes, plugin,… Quản lý cấu hình: các thông tin liên quan đến domain, cấu hình bài viết, tài khoản thanh toán,… Chức năng giao diện tương tác tức thời (WYSIWYG) – kết quả chỉnh sửa sẽ được hiển thị ngay trong quá trình chỉnh sửa Câu 2: WordPress là gì? WordPress là một CMS mã nguồn mở, miễn phí dùng để xây dựng các blog, website được viết bằng ngôn ngữ lập trình PHP , sử dụng hệ quản trị cơ sở dữ liệu MySQL . WordPress thích hợp cho các trang web dạng blog cá nhân, portfolio online, các diễn...

By stationd
Beautiful UX và ứng dụng Real Time cải thiện trải nghiệm người dùng

Beautiful UX và ứng dụng Real Time cải thiện trải nghiệm người dùng

Vài năm trước đây, công nghệ như WebSockers đã đạt được những phát triển vượt bậc nhờ vào sự trợ giúp của tính năng Real time. Sau này tính năng Real time được phát triển và được xem như một tính năng “ không – thể – thiếu” trong hầu hết các ứng dụng được yêu thích hiện nay như: Facebook với thông báo qua ứng dụng điện thoại, Uber với hiệu ứng dò tìm địa điểm ngay lập tức, tính năng đa người dùng của Google Docs và chat trực tuyến của Slack,… Tính năng real time có tác dụng truyền tải thông tin đến người dùng ngay tức thì, làm gia tăng những trải nghiệm chân thực nhất cho người dùng. Nhưng làm thế nào để áp dụng tính năng Real time giúp cải thiện sản phẩm và đáp ứng mong muốn của khách hàng? Anh Đỗ Vũ Hoàng Trình – Director of Project Management của POETA , với nhiều năm kinh nghiệm trong lĩnh vực cung ứng giải pháp trải nghiệm người dùng, trong buổi trò chuyện gần đây với Station D đã có những chia sẻ quý báu về kinh nghiệm cải thiện trải nghiệm người dùng, cũng như những vấn đề cần quan tâm khi tích hợp tính năng real time vào ứng dụng để cải thiện trãi nghiệm người dùng. 1. Anh có thể giới thiệu đôi nét về POETA cho cộng đồng lập trình viên được biết? Được thành lập năm 2007 với 2 chi nhánh ở Seattle (Mỹ) và ở Việt Nam tên công ty ban đầu là VinaSource. Mục đích là giúp khách hàng dễ đọc, nhanh chóng biết được công ty đang làm gì ? ở đâu? Nhưng qua thời gian thì vấn đề dễ đọc không còn là yếu...

By stationd
Những projects giúp nâng hạng Front-end Developer

Những projects giúp nâng hạng Front-end Developer

Tác giả: Kyle Prinsloo Cách nhanh nhất để lên trình Front end là tự triển những project thật. Bạn có thể xem tutorials, hay tham gia rất nhiều khóa học, nhưng nếu không tự ứng dụng và thực hành thì sẽ rất khó để bạn thực sự tiếp thu những kỹ năng cần thiết cho những projects thực tế. Những project từ client thì sẽ không có hướng dẫn từ A đến Z, nếu có thì họ cũng chẳng cần bạn làm gì. Với project được giao, bạn phải tự thân vận động từ solution, thực hiện từng bước, thậm chí hack quá trình để về đích. Vì vậy cách tốt nhất để luyện skill là bắt tay tự làm những project front-end và tự rút ra bài học kinh nghiệm cá nhân luôn một thể. Chưa cần khách hàng vào thời điểm này khi tự bạn có thể build project cho riêng mình. Chọn Project cá nhân như thế nào? Xác định level kỹ năng Khoan hãy chọn những project quá nâng cao so với trình hiện tại, nhất là nếu bạn dễ nản khi gặp khó khăn. Nhưng cũng đừng quên mục tiêu đặt ra là để master front-end, cho nên hãy chọn một project cao hơn so với skill level hiện tại, mà vẫn khả thi. Ví dụ, bạn vừa hoàn thành HTML và CSS, thì đã đến lúc tìm hiểu thêm JavaScript. Xử lý problem cá nhân hay bài toán mà bạn quan tâm Bạn sẽ hào hứng và “dính” với project hơn nếu có problem liên quan đến cuộc sống xung quanh hay nó có thể đáp ứng mong muốn nào đó của riêng bạn. Có thể nhiều lúc bạn mất kiểm soát về thời gian khi lướt Facebook quá nhiều, hoặc bạn đang muốn...

By stationd
Sự khác biệt giữa List.of và Arrays.asList là gì?

Sự khác biệt giữa List.of và Arrays.asList là gì?

Bài viết được sự cho phép của tác giả Lê Chí Dũng Arrays.asList trả về một danh sách có thể thay đổi trong khi danh sách được trả về List.of là không thay đổi : List<Integer> list = Arrays.asList(1, 2, null);list.set(1, 10); // OK List<Integer> list = List.of(1, 2, 3);list.set(1, 10); // Fails with UnsupportedOperationException 4 ứng dụng của Array.from Cấu trúc dữ liệu List trong Python và các thao tác cơ bản Arrays.asList cho phép các phần tử null trong khi List.of không: List<Integer> list = Arrays.asList(1, 2, null); // OKList<Integer> list = List.of(1, 2, null); // Fails with NullPointerException contains cư xử khác với null List<Integer> list = Arrays.asList(1, 2, 3);list.contains(null); // Returns false List<Integer> list = List.of(1, 2, 3);list.contains(null); // Fails with NullPointerException Arrays.asList trả về một khung nhìn của mảng đã qua, vì vậy những thay đổi đối với mảng cũng sẽ được phản ánh trong danh sách. Đối với List.of điều này là không đúng sự thật: Integer[] array = {1,2,3};List<Integer> list = Arrays.asList(array);array[1] = 10;System.out.println(list); // Prints [1, 10, 3] Integer[] array = {1,2,3};List<Integer> list = List.of(array);array[1] = 10;System.out.println(list); // Prints [1, 2, 3] Bài viết gốc được đăng tải tại lcdung.top Có thể bạn quan tâm: Java map và flatmap – điều gì làm nên khác biệt? Typescript là gì? Ưu và nhược điểm của Typescript Cấu trúc dữ liệu từ điển Dictionary trong Python Xem thêm Việc làm IT hấp dẫn trên Station D

By stationd
Sử dụng CSS content như thế nào cho đúng

Sử dụng CSS content như thế nào cho đúng

Thuộc tính content trong CSS thường được sử dụng cùng với 2 ghost element là after và before, những giá trị nào có thể đưa vào cho thuộc tính content này <div data-done="&#x2705;" class="email"> chriscoyier@gmail.com </div> .email::before { /* Chèn trước thẻ div giá trị của data-done + Email: */ content: attr(data-done) " Email: "; } Không phải giá trị nào đưa vào content này cũng hợp lệ /* Được */ ::after { content: "1"; } /* Không được */ ::after { content: 1; } Không thể tính toán gì đâu, nó chỉ là string thôi <div data-price="4" data-sale-modifier="0.9">Coffee</div> /* Méo chạy */ div::after { content: " $" calc(attr(data-price) * attr(data-sale-modifier)); } /* Nope */ ::after { content: calc(2 + 2); } Muốn nối chuỗi ư? /* Không chạy đâu, không phải javascript hay php */ ::after { content: "1" . "2" . "3"; content: "1" + "2" + "3"; /* Dùng bình thường thế này thôi */ content: "1" "2" "3"; content: "1 2 3"; } Đường dẫn hình thì được, mà không cho thay đổi kích thước hình ¯_(ツ)_/ p:before { content: url(image.jpg); } Station D via Vuilaptrinh

By stationd
Giải thích Javascript Reactivity

Giải thích Javascript Reactivity

Bài viết được sự cho phép của tác giả Lưu Bình An Rất nhiều thư viện Javascript như Angular, React, Vue sử dụng Reactivity, hiểu được reactivity là gì và cách nó chạy sẽ giúp nâng cao kỹ năng lập trình Một ví dụ về Reactivity của Vue <div id='app'> <div>Price: ${{ price }}</div> <div>Total: ${{ price * quantity }}</div> <div>Taxes: ${{ totalPriceWithTax }}</div> </div> var vm = new Vue({ el: '#app', data: { price: 5.00, quantity: 2 }, computed: { totalPriceWithTax() { return this.price * this.quantity * 1.03 } } }) Ở đây khi chúng ta thay đổi giá trị của price , thằng Vue nó sẽ làm 3 thứ Cập nhập lại giá trị price Tính lại giá trị total Gọi lại hàm totalPriceWithTax và cập nhập lại giá trị Thấy hết sức bình thường, nhưng đó KHÔNG PHẢI LÀ CÁCH CHẠY BÌNH THƯỜNG CỦA JAVASCRIPT Ví dụ với javascript bình thường let price = 5 let quantity = 2 let total = price * quantity // kết quả sẽ là 10 price = 20 // gán lại giá trị của price console.log(`total is ${total}`) Bạn hãy đoán xem kết quả log ra là mấy? Sẽ là 10 chứ không phải 40 đâu. Tham khảo tuyển dụng javascript lương cao trên Station D Vấn đề và giải pháp Vấn đề là chúng ta cần phải lưu cái cách tính price * quantity này lại ở đâu đó, để chúng ta re-run cách tính này khi gọi lại total , nó sẽ không nên là biến số mà là thành hàm, thì khi đó nếu giá trị price hoặc quantity thay đổi chúng ta sẽ có kết quả total thay đổi theo. Chúng ta cần một nơi để lưu phần code tính toán kiểu như vậy lại ở đâu...

By stationd