Công Nghệ
Review và giải thích sâu về framework, ngôn ngữ, AI, blockchain… ngắn gọn, dễ hiểu, cập nhật liên tục như git pull ‑‑rebase.
1826 bài viết

Intersection Observer API
Bài viết được sự cho phép của tác giả Lưu Bình An Chúng ta thường phải đặt listener trên sự kiện window.scroll thực hiện một số thao tác tính toán, so sánh với thanh scroll để biết được khi nào element bắt đầu xuất hiện. Cách làm này gây nhiều vấn đề hiệu năng và tương đối rườm rà. Giờ các trình duyệt đã đồng loạt hỗ trợ Intersection Observer API , chúng ta có một cách hoàn toàn gọn gàng, sạch sẽ mà lại tối ưu hiệu năng hơn nhiều. Hiểu về setTimeout và setInterval trong Javascript Cấu hình JSP views trong InternalResourceViewResolver với Spring Boot JAR file Cách sử dụng như sau, chúng ta khởi tạo một instance IntersectionObserver và gọi observe trên element muốn theo dõi ( watch là thuật ngữ chuyên ngành hơn) const myImg = document . querySelector ( '.animate-me' ) ; const observer = new IntersectionObserver ( ( entry , observer ) => { console . log ( { entry } ) ; console . log ( { observer } ) ; } ) observer . observe ( myImg ) ; Trong trường hợp chúng ta muốn observe trên nhiều element cùng lúc const myImgs = document . querySelectorAll ( '.animate-me' ) ; const observer = new IntersectionObserver ( entries => { console . log ( entries ) ; } ) ; myImgs . forEach ( image => { observer . observe ( image ) ; } ) ; Để thực thi một tác vụ nào đó khi element bắt đầu xuất hiện trong viewport hoặc leave khỏi viewport const myImgs = document . querySelectorAll ( '.animate-me' ) ; observer = new IntersectionObserver ( entries => { entries . forEach ( entry => { if ( entry . intersectionRatio > 0 ) { console...

Var, let và const – 3 quý cô xinh đẹp nhà Javascript
Bài viết được sự cho phép của tác giả Kiên Nguyễn 1. Con nhà danh giá. Tiếp tục chuỗi bài về Javascript , hôm nay sẽ là bài viết về gái. Không phải một mà là 3 đứa Var, Let và Const. Từ kỷ ES6 , giới anh hùng trong giang hồ đã không ngừng bàn luận tới 3 cô nàng tuyệt sắc giai nhân của nhà Javascript . Tuy nhiên, không phải cô nào cũng giống nhau, cũng đều thích hợp cho tất cả các chàng developer. 3 chị em var,let và const. Cuộc chiến không khoan nhượng. Nguồn ảnh/ Source: deadcoderising.com Tính khí các cô khác nhau, vì vậy phải hiểu thật rõ để có chiến thuật cưa cẩm phù hợp. Hãy cùng tìm hiểu qua bài viết dưới đây. 10 trình quản lý file hàng đầu trong JavaScript 10 tip tối ưu code trên JavaScript mà web developer nào cũng nên biết Xem thêm các chương trình tuyển dụng JavaScript lương cao trên Station D 2. Các quý cô xinh đẹp. 2.1 Angelina VAR Hình ảnh chả liên quan. Để các ông ngắm đọc bài đỡ chán. 2.1.1 Phạm vi hoạt động. Phạm vi của var là FUNCTION SCOPE , nghĩa rằng khi ta khai báo var trong một function, biến var đó chỉ tồn tại và có giá trị trong phạm vi function nó khai báo. var varGirl = "Mặt em là mặt mộc"; function after_tay_trang() { var varGirl = "Đây là ai?, tao ở đâu?, con nào đang đứng trước gương thế này"; console.log (varGirl); } after_tay_trang(); // output: Đây là ai?, tao ở đâu?, con nào đang đứng trước gương thế này console.log(varGirl); // output: Mặt em là mặt mộc Hoặc là: function myFunc() { var name = 'Luke' console.log(name); // 'Luke' } myFunc();...

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,...

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...

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...

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...

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...

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...

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...

Khai báo hàm khởi tạo trong Java – Constructor Declarations
Bài viết được sự cho phép của tác giả Trần Hữu Cương Constructor Declarations Trong Java, các đối tượng được khởi tạo thông qua hàm khởi tạo (constructor). Mỗi lần bạn tạo mới một đối tượng sẽ có ít nhất một hàm khởi tạo được thực thi. Mỗi class đều có một hàm khởi tạo, nếu bạn không khai báo thì complier sẽ tự động khai báo một hàm khởi tạo không tham số cho bạn. Có rất nhiều nguyên tắc khác nhau liên quan đến hàm khởi tạo (sẽ tìm hiểu ở bài sau). Ở bài này chúng ta sẽ chỉ tập trung vào các nguyên tắc khai báo cơ bản. Hàm khởi tạo cũng được coi như một hàm với kiểu dữ liệu trả về của hàm khởi tạo chính là một thể hiện của class chứa nó. Hàm khởi tạo có thể đi kèm với các access modifier Tìm việc làm Java cho sinh viên ít kinh nghiệm Ví dụ ta có class sau: public class Person { private String name; private String address; } Các hàm khởi tạo hợp lệ: Person ( ) { } public Person ( ) { } protected Person ( ) { } private Person ( ) { } public Person ( String name, String address ) { this . name = name; this . address = address; } public Person ( String name ) { this . name = name; } Các hàm khởi tạo không hợp lệ: void Person ( ) { } // đây là một method, không khải constructor static Person ( ) { } // không thể đi kèm với từ khóa static final Person ( ) { } // không thể đi kèm với từ khóa final abstract Person ( ) { } // không thể...

Trách nhiệm chính của một Product Manager xuất sắc là gì?
Tác giả: Annie Dunham Công việc của Product Manager là gì? Là người thiết lập kế hoạch và tầm nhìn dài hạn cho các sản phẩm công ty thực hiện. Truyền đạt phương pháp thực hiện kế hoạch cho tất cả các bên liên quan. Tài liệu chính được sử dụng là “lộ trình sản phẩm”, nó chứa đựng các tài liệu trực quan về chuyên môn và những lý do vận hành đằng sau một sản phẩm thành công. Product Manager phải làm việc với nhiều bên liên quan 4 trách nhiệm chính của Product Manager là gì? 1. Minh bạch thông tin về các vấn đề liên quan đến thứ tự ưu tiên của lộ trình sản phẩm Giải đáp các vấn đề liên quan đến câu hỏi “Tại sao” với các bên làm việc chính là vai trò và trách nhiệm của một Product Manager. Tại sao bạn lại ưu tiên tính năng này hoặc chủ đề này cho bản phát hành tiếp theo mà không phải cái khác? Tại sao bạn lại chọn tập trung nhiều hơn vào một mục tiêu cụ thể trong hai quý tiếp theo thay vì một mục tiêu khác?… Xem thêm các việc làm tuyển dụng product manager hấp dẫn tại Station D Sẽ có rất nhiều các câu hỏi như thế và cách tốt nhất là Product Manager phải thuyết phục được khách hàng, lãnh đạo công ty, các bộ phận liên quan và thành viên trong team hiểu và tham gia vào tư duy chiến lược của bạn. Hãy rõ ràng và cởi mở với họ về lý do bạn đưa ra những quyết định đó. 2. Bạn có thể nói “Không”, nhưng hãy giải thích lý do bằng các thuật ngữ mà các bên liên quan đều hiểu...

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