Lập Trình

Tổng hợp các thông tin, kinh nghiệm hữu ích và mới nhất về lập trình cần học gì, phỏng vấn, mức lương trong ngành IT như thế nào, tìm hiểu ngay!

398 bài viết

Biến số và kiểu dữ liệu số trong Python

Biến số và kiểu dữ liệu số trong Python

Bài viết được sự cho phép của tác giả Kien Dang Chung Trong lập trình biến và kiểu dữ liệu là những khái niệm cơ bản nhất, từ những khái niệm cơ bản này chúng ta mới tiếp tục những phần nâng cao hơn như tương tác với người dùng, các cú pháp điều khiển luồng ứng dụng, thuật toán… Khóa học này nhắm đến cả những bạn mới bắt đầu làm quen với lập trình do đó nội dung đi khá chi tiết, bạn nào đã có kiến thức sẵn có thể xem các bài tiếp theo. 1. Biến số 1.1 Biến số trong ngôn ngữ lập trình là gì? Biến số (variable) là một khái niệm cơ bản trong lập trình, biến dùng để lưu trữ thông tin, các tham chiếu và sử dụng để thao tác dữ liệu. Các biến bản chất là một cách để đánh nhãn cho dữ liệu với một tên gợi nhớ, các chương trình có thể hiểu được cần lấy dữ liệu từ đâu với biến đó. Đặt tên biến gợi nhớ cũng giúp cho các lập trình viên khác có thể hiểu được đoạn code bạn chia sẻ. Một hình tượng khác có thể dễ hiểu hơn là các biến giống như những chiếc công tơ nơ chứa bên trong các nội dung là đồ vật, hàng hóa… được đánh số (đặt tên) ví dụ công tơ nơ thực phẩm, công tơ nơ đồ điện giúp cho muốn tìm đến một loại hàng hóa nào đó dễ dàng. Trong Python , các biến được khai báo với cú pháp như sau: ten_bien = gia_tri Trong đó: ten_bien: là một tên gợi nhớ cho dữ liệu cần xử lý, ví dụ tuoi_nguoi_dung, tong_so_tien… Chú ý nên đặt tên gợi nhớ giúp cho...

By stationd
[Python cơ bản thường dùng trong công việc] Phần 5 : thao tác trên tập tin và thư mục

[Python cơ bản thường dùng trong công việc] Phần 5 : thao tác trên tập tin và thư mục

Nội dung chương này sẽ hướng dẫn các thao tác liên quan đến tập tin và thư mục. 5.1. Tập tin (File) 5.1.1. Mở file Trước khi muốn đọc hoặc ghi file, bạn cần có thao tác mở file theo cú pháp: fh = open(filepath, mode) Trong đó, filepath là đường dẫn của file sẽ mở và mode là chế độ để mở. Có một số chế độ là: r : mở để đọc nội dung (mặc định) w : mở để ghi nội dung a : mở để ghi thêm nội dung vào cuối file. r+ : mở để đọc và ghi. Con trỏ nằm ở đầu file. w+ : mở để đọc và ghi. Ghi đè nếu file đã tồn tại, nếu file chưa tồn tại thì tạo file mới để ghi. a+ : mở để đọc và thêm vào cuối file. Con trỏ nằm ở cuối file. Nếu file chưa tồn tại thì tạo file mới để ghi. Mặc định là mở file text, nếu muốn mở file nhị phân (binary) thì thêm b , ví dụ: rb , wb , ab , rb+ , wb+ , ab+ . Ví dụ: f1 = open('test.txt', 'r') f2 = open('access_log', 'a+') Sau khi gọi hàm open() thành công thì sẽ trả về một object có các thuộc tính: closed : True nếu file đã đóng mode : chế độ khi mở file name : tên của file softspace : cờ đánh dấu softspace khi dùng với hàm print Việc làm python lương cạnh tranh 5.1.2. Đọc nội dung từ file Sau khi file đã mở ở chế độ đọc thì gọi phương thức read([count]) để trả về toàn bộ nội dung của file. Ví dụ: f1 = open('test.txt', 'r') data = f1.read(); Hàm read() có nhận một tham số...

By stationd
1001 Tips: Con trỏ và hàm (Pointer & Function) trong C++

1001 Tips: Con trỏ và hàm (Pointer & Function) trong C++

Con trỏ và tham số của hàm Chúng ta đã tìm hiểu về 2 kiểu tham số của hàm: Hàm có tham số nhận giá trị: giá trị truyền vào hàm có thể là giá trị của biến, một hằng số hoặc một biểu thức toán học… Hàm có tham số kiểu tham chiếu: giá trị truyền vào cho hàm là tên biến, và tham số của hàm sẽ tham chiếu trực tiếp đến vùng nhớ của biến đó. Chúng ta còn có thêm một kiểu truyền dữ liệu vào cho hàm nữa, đó là truyền địa chỉ vào hàm ( Pass arguments by address ). Do đó, kiểu tham số của hàm có thể nhận giá trị là địa chỉ phải là con trỏ. void foo ( int *iPtr) { cout << "Int value at " << iPtr << " is " << *iPtr << endl ; } int main () { int iValue = 10 ; foo(&iValue); system( "pause" ); return 0 ; } Trong đoạn chương trình trên, sau khi truyền địa chỉ của biến iValue vào hàm foo , tham số iPtr bây giờ sẽ giữ địa chỉ của biến iValue , và chúng ta có thể sử dụng toán tử dereference cho con trỏ iPtr . Kết quả in ra màn hình trên máy tính của mình là: Int value at 0xBFBA144C is 10 Nếu vùng nhớ tại địa chỉ được sử dụng làm đối số cho hàm không phải là hằng, chúng ta có thể thay đổi giá trị của vùng nhớ đó ngay bên trong hàm thông qua toán tử dereference : void changeValue ( int *iPtr) { *iPtr = 10 ; } int main () { int iValue = 5 ; cout << "Value = " << iValue << endl ; changeValue(&iValue);...

By stationd
Hướng dẫn sử dụng Set trong Java chi tiết

Hướng dẫn sử dụng Set trong Java chi tiết

Set là một cấu trúc dữ liệu giao diện trong Java đại diện cho một tập hợp các phần tử duy nhất, không sắp xếp và không được đánh chỉ mục. Nói cách khác, Set là một tập hợp các đối tượng mà trong đó mỗi đối tượng chỉ xuất hiện một lần. Trong Java, Set được định nghĩa trong gói java.util. Có nhiều lớp triển khai Set khác nhau, bao gồm: HashSet, TreeSet và LinkedHashSet. Các khái niệm cơ bản về Set trong Java Trước khi đi vào cách sử dụng Set trong Java , hãy cùng Station D đi sơ lược các khái niệm cơ bản về Set. Đầu tiên , Set là một tập hợp các phần tử duy nhất, điều này có nghĩa là mỗi phần tử chỉ được lưu trữ một lần trong Set. Thứ hai , các phần tử trong Set không được sắp xếp theo bất kỳ thứ tự nào và thứ tự của chúng có thể thay đổi khi bạn thêm hoặc xóa các phần tử. Cuối cùng , bạn không thể truy cập các phần tử trong Set bằng chỉ mục, điều này khác với List trong Java. >>> Xem thêm: Sử dụng List để quản lý dữ liệu trong Java Cách sử dụng Set trong Java Để tạo một đối tượng Set, bạn có thể sử dụng các lớp triển khai cụ thể. Ví dụ: Set set = new HashSet(); Trong ví dụ trên, chúng ta đã tạo một đối tượng Set kiểu String bằng cách sử dụng lớp HashSet. Bạn cũng có thể sử dụng các lớp triển khai khác như TreeSet hoặc LinkedHashSet tùy thuộc vào nhu cầu của bạn. >>> Xem thêm: Các phương thức cơ bản của HashSet trong Java Phương thức thêm và xóa phần...

By stationd
Generate keystore với PKCS12 format sử dụng công cụ keytool của Java

Generate keystore với PKCS12 format sử dụng công cụ keytool của Java

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh PKCS12 là một trong những định dạng chuẩn của chứng chỉ SSL với khả năng bảo mật cao. Công cụ keytool của Java ngoài việc giúp chúng ta có thể generate JKS keystore dành riêng cho Java thì nó còn hỗ trợ chúng generate chứng chỉ PKCS12 này. 10 Java Web Framework tốt nhất 10 tips để trở thành Java Developer xịn hơn Xem thêm các chương trình tuyển dụng Java hấp dẫn trên Station D Cụ thể thì các bạn có thể command sau để generate chứng chỉ PKCS12 với keytool: keytool -genkeypair -alias <alias> -keyalg <keyalg> -keystore <keystore> -storetype PKCS12 Ý nghĩa của từng tham số trên, các bạn có thể tham khảo thêm ở bài viết Sử dụng keytool để generate keystore trong Java . Chỉ có khác biệt ở đây là chúng ta phải khai báo thêm tham số -storetype với giá trị là PKCS12. Extension của tập tin chứng chỉ PKCS12 có thể là .p12 hoặc .pfx các bạn nhé! Ví dụ, mình có thể generate chứng chỉ PKCS12 với câu lệnh sau: keytool -genkeypair -alias <alias> -keyalg <keyalg> -keystore <keystore> -storetype PKCS12 Kết quả: Các bạn cần nhập password để đảm bảo tính toàn vẹn của tập tin keystore (xem thêm option -storepass trong bài viết Sử dụng keytool để generate keystore trong Java ) rồi nhấn Enter: Nhập lại password rồi nhấn Enter tiếp: Trả lời một số câu hỏi rồi xác nhận. Nếu đúng hết thì nhập yes nhé các bạn! Sau khi generate xong, các bạn có thể vào thư mục được truyền trong câu lệnh (của mình là /Users/Khanh/Documents), nhập câu lệnh sau: keytool -list -keystore <keystore> -storepass <storepass> Ví dụ của mình như sau: Bài viết gốc...

By stationd
Xử lý Date/Time dễ dàng với Carbon trong Laravel

Xử lý Date/Time dễ dàng với Carbon trong Laravel

Làm việc với ngày và giờ trong PHP không phải là nhiệm vụ dễ dàng gì. Chúng ta phải đối mặt với các vấn đề về thời gian, định dạng, nhiều tính toán, v.v. Có một package khá tiện lợi có tên Carbon có thể giúp việc xử lý ngày / giờ trong PHP dễ dàng hơn và có nhiều ngữ nghĩa hơn để code của chúng tôi có thể trở nên dễ đọc và dễ bảo trì hơn. Carbon là gì? Carbon là một gói phần mềm được phát triển bởi Brian Nesbit mở rộng từ class DateTime của PHP. Từ phiên bản 5.3, Laravel đã tích hợp sẵn thư viện này vào Project. Việc sử dụng tốt thư viện này sẽ giúp bạn rất nhiều vấn đề về xử lý thời gian. Thư viện này giúp chúng ta rất nhiều trong việc xử lý datetime trong PHP. Điển hình như: Xử lý timezone. Lấy ngày tháng hiện tại dễ dàng. Convert datetime sang định dạng khác để đọc Dễ dàng thao tác với datetime. Chuyển đổi cú pháp là cụm từ tiếng anh sang datetime. Cách sử dụng Carbon trong Laravel – Bạn cần import thư viện để sử dụng: <?php use CarbonCarbon; Lấy thời gian: Carbon::now(); // thời gian hiện tại 2018-10-18 14:15:43 Carbon::yesterday(); //thời gian hôm qua 2018-10-17 00:00:00 Carbon::tomorrow(); // thời gian ngày mai 2018-10-19 00:00:00 $newYear = new Carbon('first day of January 2018'); // 2018-01-01 00:00:00 Để lấy tgian hiện tại tại Việt Nam ta sẽ thêm locale của Việt nam như sau: echo Carbon::now('Asia/Ho_Chi_Minh'); // 2018-10-18 21:15:43 Để biết thêm về các nước khác bạn có thể tại trang chủ của PHP: Timezone Bạn cũng có thể chuyển đổi kiểu datetime khác: $dt = Carbon::now('Asia/Ho_Chi_Minh'); echo $dt->toDayDateTimeString(); Thu, Oct 18, 2018 9:16 PM...

By stationd
Hướng dẫn lập trình Python trên Eclipse với plugin PyDev

Hướng dẫn lập trình Python trên Eclipse với plugin PyDev

Bài viết được sự cho phép của tác giả Trần Hữu Cương Với những người lập trình viên Java thì Eclipse là 1 IDE quá quen thuộc, mặc dù nó hơi nặng một chút nhưng đầy đủ tính năng, nhiều plugin… Chính vì thế mà khi chuyển sang lập trình ngôn ngữ khác mình vẫn muốn sử dụng Eclipse. Trong bài này mình sẽ thực hiện cài đặt plugin PyDev để thực hiện biến Eclipse thành Python IDE. Xem thêm các việc làm Python hấp dẫn trên Station D Cài đặt Plugin PyDev Các bạn vào Help/Eclipse Marketplace Trong ô tìm kiếm nhập pydev và click vào biểu tượng tìm kiếm. Chọn install PyDev. Sau khi cài đặt xong plugin bạn cần khởi động lại eclipse. Sau khi cài đặt xong plugin PyDev chúng ta đã có thể tạo project python trên Eclipse. Các bạn vào New/Other Trong mục PyDev sẽ có lựa chọn tạo project, package python. Học Python: Từ Zero đến Hero (phần 1) Cấu hình Python Interpreter trên Eclipse Phần cấu hình python interpreter này tương tự với việc bạn cấu hình JDK trên Eclipse vậy. Nó sẽ cho phép bạn trỏ tới version Python mà bạn muốn dùng để chạy project. Vào Windows/Preperences và chọn Python Interpreter -> click vào New Trong phần Intepreter Executable trỏ tới file python.exe mà bạn đã cài đặt Bài viết gốc được đăng tải tại codecute.com Có thể bạn quan tâm: TOP 10 Plugin được SỬ DỤNG NHIỀU NHẤT trên ECLIPSE Lập trình Python trên IntelliJ IDEA (code Python trên IntelliJ) Giới thiệu IDE phổ biến trong lập trình Python Xem thêm việc làm CNTT hấp dẫn trên Station D

By stationd
Một số Patterns hay sử dụng trong React

Một số Patterns hay sử dụng trong React

Trong lập trình chúng ta thường sẽ gặp phải một số vấn đề chung lặp đi lặp lại trong các dự án khác nhau và sẽ có những kỹ thuật (lời giải) tương tự nhau để giải quyết bài toán đó. Khái niệm pattern chỉ những “mẫu” lời giải đó, nó thường được tổng hợp và khuyên dùng trong lập trình để xử lý và tránh các lỗi có thể gặp phải. Với React , chúng ta có một vài pattern được khuyên sử dụng và bài viết hôm nay chúng ta cùng tìm hiểu về chúng cùng các ví dụ cụ thể nhé. Higher-Order Function/Component Higher-Order functions là một hàm nhận một hàm khác dưới dạng đối số hoặc trả về một hàm dưới dạng đầu ra. Chúng ta có ví dụ dưới đây: function greaterThan ( n ) { return ( m ) => m > n ; } const greaterThan10 = greaterThan ( 10 ); console . log ( greaterThan10 ( 11 )); // true Ở ví dụ trên, hàm greaterThan trả về 1 function so sánh giá trị truyền vào với đối số xác định trước, cụ thể với hàm greaterThan10 thì đối số là 10. Từ đó chúng ta có thể tạo ra các function khác nhau bằng cách call function greaterThan và đối số truyền vào. Đấy chính là lợi ích của higher-order function. Hệ thống 23 mẫu Design Patterns Bridge Pattern trong Java – Code ví dụ Composite Pattern Từ khái niệm trên, trong React chúng ta cũng có khái niệm Higher-Order component (HOC), đó là 1 component mà: Nhận đầu vào 1 component và trả về 1 component mới Biến đổi 1 component thành 1 component khác Chúng ta có ví dụ dưới đây: const withColor = Element => props => <...

By stationd
Def trong Python và cách sử dụng

Def trong Python và cách sử dụng

Trong bài viết trước về Hàm trong Python , chúng ta đã biết rằng có 2 loại hàm cơ bản bao gồm hàm được tích hợp sẵn và hàm tự định nghĩa bởi người dùng. Để định nghĩa được một hàm trong Python, chúng ta sử dụng đến từ khóa Def . Vậy def là gì trong Python ? Bài viết hôm nay chúng ta cùng nhau tìm hiểu về khái niệm này nhé. Def Python là gì? Def là một từ khóa (keyword) trong Python dùng để xác định một hàm (function), từ đó chúng ta định nghĩa ra một khối mã có thể gọi và tái sử dụng để thực hiện một số các công việc, nhiệm vụ cụ thể. Khái niệm hàm def dùng để chỉ một hàm mà người dùng tự định nghĩa (user-defined functions), phân biệt với các hàm tích hợp sẵn trong Python (built-in functions). Cú pháp hàm def trong Python như sau: Trong đó từ khóa def được sử dụng để đánh dấu sự bắt đầu của khai báo hàm, tiếp đến là tên của hàm được kết thúc bằng dấu “:” . Phần thân hàm chứa các câu lệnh được viết thụt vào đầu dòng so với từ khóa def . Lợi ích khi sử dụng hàm def trong Python: Giúp phân tích một chương trình lớn trong Python thành các khối code nhỏ đảm nhận từng nhiệm vụ rõ ràng và dễ hiểu khi đọc, bảo trì hay gỡ lỗi Giúp source code có khả năng tái sử dụng, tối ưu cấu trúc của chương trình viết bằng Python Giúp tăng khả năng làm việc nhóm, phân chia công việc trong team một cách dễ dàng và thống nhất bằng cách định nghĩa trước cấu trúc, input/ output của hàm Ví...

By stationd
Cài đặt transaction in memory cho Java

Cài đặt transaction in memory cho Java

Bài viết được sự cho phép của tác giả Trần Văn Dem Khi xây dựng hệ thống backend chúng ta thường xuyên phải làm việc với transaction – đây là một khái niệm rất quen thuộc với các lập trình viên backend . Việc nắm bắt và sử dụng thành thạo các loại này là việc cần thiêt để xây dựng một hệ thống backend tốt. Tuy nhiên trong nhiều trường hợp database chúng ta sử dụng lại không hỗ trợ transaction hoặc việc insert vào các loại cơ sở dữ liệu quan hệ được xử lý bởi các hệ thống acsync điều này khiến chúng ta phải xử lý các transaction trên logic trong application của mình. Những hệ thống trước đây tôi xây dựng đều phải xử lý điều này và sau khi tìm được một cách hay ho có thể sử dụng lại thì tôi quết định viết bài chia sẻ cho mọi người. Cách sử dụng Transaction trong SQL hiệu quả Transaction Processing – Everything must know Cài đặt transaction in memory Ta sẽ chú ý ví dụ lưu các sản phẩm khách hàng mua thành công trên RAM sau: import blog.common.transaction.element.TxnHashMap; import java.util.ArrayList; import java.util.List; public class TestTransaction { private TxnHashMap<String, List<String>> userData; public TestTransaction () { this .userData = new TxnHashMap<>(); } private void buySuccess (String userName, String productName) { if (!userData.contain(userName)) { userData.put(userName, new ArrayList<>()); } userData.get(userName).add(productName); } private void buyFail () { throw new RuntimeException( " something is error" ); } public TxnHashMap<String, List<String>> getUserData() { return userData; } public void setUserData (TxnHashMap<String, List<String>> userData) { this .userData = userData; } public static void main (String[] args) { TestTransaction test = new TestTransaction(); TxnManager manager = new TxnManager(); manager.executeTransaction(() -> { test.buySuccess( "demtv" , "iphone" ); test.buySuccess( "demtv" , "ipad" ); test.buySuccess(...

By stationd
PHP & MySQL – Các công cụ hỗ trợ “tuyệt vời”

PHP & MySQL – Các công cụ hỗ trợ “tuyệt vời”

Bài viết được sự cho phép của smartjob.vn Khơi dậy và nuôi nấng niềm đam mê lập trình Với sự phát triển mạnh mẽ của công nghệ thông tin (CNTT) mà cụ thể mà công nghệ phần mềm (CNPM), cuộc cách mạng đó đã tạo ra một khối lượng khổng lồ các phần mềm ở nhất nhiều lĩnh vực khác nhau. Việc sử dụng thành thạo và nắm bắt được tất cả các vấn đề mà một phần mềm hỗ trợ đã là rất khó đối với nhiều người sử dụng thế nên việc tạo ra phần mềm đó còn khó hơn gấp nhiều lần. Mà chỉ có niềm đam mê lập trình, tư duy sáng tạo, tư duy logic, ham học hỏi và kinh nghiệm cuộc sống mới có thể theo nghiệp lập trình viên được, ở đây chúng ta quan niệm rằng nếu hội tụ các yếu tố trên thì sẽ cho ra sản phẩm phần mềm tốt. 10 Frameworks tốt nhất hiện nay cho PHP Cài đặt MySQL Community Server trên macOS Xem thêm các việc làm PHP lương cao trên Station D Bạn sẽ rất dễ nản lòng khi mà cả ngày mới code xong một chức năng, khi mà cả ngày mới tìm ra được lỗi. Niềm vui có lẽ sẽ rất khó tả khi bạn giải quyết được vấn đề đó. Rồi một ngày, bạn gặp lỗi tương tự, bạn sửa giống như những lần trước mà tại sao nó vẫn không chạy? Rồi bạn lại mất một ngày, hai ngày thậm chí hai ngày rưỡi để tìm ra được lỗi đó là do đâu. Khi đó thì kim đồng hồ đã chỉ 2-3h sáng nhưng bạn vẫn cảm thấy thích thú và tiếp tục khám phá thế giới lập trình. Có một điều...

By stationd
Tạo random số và chuỗi ngẫu nhiên trong Java

Tạo random số và chuỗi ngẫu nhiên trong Java

Bài viết được sự cho phép của tác giả Giang Phan Trong thế giới lập trình, việc tạo số ngẫu nhiên là một yêu cầu cơ bản và quan trọng, ảnh hưởng trực tiếp đến chất lượng và tính ngẫu nhiên của dữ liệu. Java, với sự đa dạng và mạnh mẽ của mình, cung cấp nhiều cách để sinh số ngẫu nhiên. Bài viết này sẽ giới thiệu ba phương pháp chính để tạo số ngẫu nhiên trong Java. Hướng dẫn tạo số ngẫu nhiên bằng Java chi tiết Để tạo một trình tạo số ngẫu nhiên (generator), đơn giản chỉ việc tạo một new instance của Random . Random generator = new Random(); Khi sử dụng hàm tạo này, bạn sẽ nhận ra rằng các trình tạo số ngẫu nhiên thuật toán không thực sự ngẫu nhiên , chúng thực sự là các thuật toán tạo ra một chuỗi số cố định nhưng trông ngẫu nhiên. Khi tạo một generator, nó sẽ khởi tạo chuỗi của nó từ một giá trị được gọi là “ seed ” của nó. Khi chúng ta sử dụng constructor không có tham số, nó sẽ tạo seed có một giá trị khác biệt với bất kỳ lời gọi nào khác của constructor này. Nhưng chúng ta không kiểm soát được giá trị đó là gì, hoặc thậm chí đảm bảo hoàn toàn rằng nó sẽ khác với seed được sử dụng bởi các lời gọi khác trên constructor này. Nếu thích, chúng ta cũng có thể chỉ định một giá trị bất kỳ thuộc kiểu “ long ” để khởi tạo cho seed. Ví dụ: Random generator = new Random( 19900828 ); Sau khi đã có generator, gọi các phương thức nextXxx() để tạo các giá trị ngẫu nhiên: nextInt() : trả...

By stationd