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

PHPExcel – Import và Export xử lý Excel

PHPExcel – Import và Export xử lý Excel

Đôi lúc chúng ta sẽ cần phải truy – xuất dữ liệu bằng file Excel như: xuất dữ liệu thống kê ra cho người dùng, hoặc import nhiều dữ liệu từ file excel vào Database. Thư viện được sử dụng nhiều nhất hiện nay là PHPOffice/PHPExcel . Đọc và ghi file excel bằng PHP thuần Đọc file excel Các bạn tải file data mẫu excel này mà mình đã tạo sẵn, có nội dung hình dưới và đặt nó nằm cùng cấp với thư mục Classes : Tiếp theo, bạn sẽ tiến hành đọc file này bằng cách tạo thêm 1 file mới tên là docfile.php cùng cấp với thư mục Classes , và gõ theo nội dung bên dưới: <?php // Include thư viện PHPExcel_IOFactory vào include 'Classes/PHPExcel/IOFactory.php'; $inputFileName = 'product.xlsx'; // Tiến hành đọc file excel try { $inputFileType = PHPExcel_IOFactory::identify($inputFileName); $objReader = PHPExcel_IOFactory::createReader($inputFileType); $objPHPExcel = $objReader->load($inputFileName); } catch(Exception $e) { die('Lỗi không thể đọc file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage()); } // Lấy thông tin cơ bản của file excel // Lấy sheet hiện tại $sheet = $objPHPExcel->getSheet(0); // Lấy tổng số dòng của file, trong trường hợp này là 6 dòng $highestRow = $sheet->getHighestRow(); // Lấy tổng số cột của file, trong trường hợp này là 4 dòng $highestColumn = $sheet->getHighestColumn(); // Khai báo mảng $rowData chứa dữ liệu // Thực hiện việc lặp qua từng dòng của file, để lấy thông tin for ($row = 1; $row <= $highestRow; $row++){ // Lấy dữ liệu từng dòng và đưa vào mảng $rowData $rowData[] = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE,FALSE); } //In dữ liệu của mảng echo "<pre>"; print_r($rowData); echo "</pre>"; Tiếp theo bạn tiến hành thực thi file docfile.php này, sẽ thấy kết quả in ra màn hình là một mảng chứa tất...

By stationd
Hướng dẫn Java Design Pattern – Proxy

Hướng dẫn Java Design Pattern – Proxy

Bài viết được sự cho phép của tác giả Giang Phan Khi cần điều khiển truy nhập tới một đối tượng được thực hiện từ quá trình khởi tạo nó cho tới khi thực sự cần sử dụng nó. Hoặc cần bảo vệ quyền truy xuất vào các phương thức của object thực. Trong trường hợp như vậy, ta nên dùng mẫu thiết kế Proxy . Proxy Pattern là gì? Provide a surrogate or placeholder for another object to control access to it. Proxy Pattern là một trong những Pattern thuộc nhóm cấu trúc (Structural Pattern). Proxy có nghĩa là “ủy quyền” hay “đại diện”. Mục đích xây dựng Proxy pattern cũng chính vì muốn tạo ra một đối tượng sẽ ủy quyền, thay thế cho một đối tượng khác. Proxy Pattern là mẫu thiết kế mà ở đó tất cả các truy cập trực tiếp đến một đối tượng nào đó sẽ được chuyển hướng vào một đối tượng trung gian (Proxy Class). Mẫu Proxy (người đại diện) đại diện cho một đối tượng khác thực thi các phương thức, phương thức đó có thể được định nghĩa lại cho phù hợp với múc đích sử dụng. Để đơn giản hơn bạn có thể nghĩ đến khái niệm HTTP proxy trong mạng máy tính, nó là một gateway giữa trình duyệt (client) và máy chủ (server). HTTP proxy giúp nâng cao trải nghiệm người dùng, tăng tốc với lưu đệm các dữ liệu, loại bỏ các trang quảng cáo, giới hạn các vùng thông tin được xem… Proxy Pattern cũng có chung một mục đích như với HTTP proxy. Proxy Pattern còn được gọi là Surrogate (thay thế) hoặc Placeholder (trình giữ chỗ). Hệ thống 23 mẫu Design Patterns Design pattern là gì? Tại sao nên sử dụng Design...

By stationd
Cơ bản về GraphQL trong Java

Cơ bản về GraphQL trong Java

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Trong bài viết Giới thiệu về GraphQL , mình đã giới thiệu với các bạn sơ qua về cách xây dựng một GraphQL server sử dụng Spring Boot. Về bản chất thì Spring Boot đã sử dụng thư viện GraphQL Java và wrap tất cả mọi thứ behind the scenes liên quan đến việc xử lý một câu query của GraphQL của thư viện này rồi. Trong bài viết này, mình sẽ trình bày với các bạn một số kiến thức cơ bản về GraphQL và cách mà thư viện GraphQL Java xử lý một câu query như thế nào các bạn nhé! Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ: GraphQL Java dependency như sau: <dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-java</artifactId> <version>18.2</version> </dependency> Nói về GraphQL, như mình đã đề cập trong bài viết trước , chúng ta phải nói về các type. Ngoài các type định nghĩa cho các đối tượng data mà chúng ta sẽ provide cho client, ví dụ như: type Student { id: ID code: String name: String age: Int address: String clazz: String } GraphQL còn có 3 type đặc biệt là Query, Mutation và Subscription. Trong mỗi type, chúng ta sẽ định nghĩa các fields, và trong mỗi field, chúng ta sẽ có các sub-fields. Để định nghĩa kiểu dữ liệu cho các fields hay sub-fields, các bạn có thể sử dụng các built-in scalar types (https://graphql.org/learn/schema/#scalar-types), định nghĩa enum types (https://graphql.org/learn/schema/#enumeration-types) hoặc định nghĩa các object types như ví dụ ở trên. Chúng ta có thể định nghĩa một field là non-null sử dụng dấu chấm than, được khai báo phía sau kiểu dữ liệu của field hoặc sub-field, ví dụ như: type Student { id: ID! code:...

By stationd
Phân tách dữ liệu với DataFrame trong Python

Phân tách dữ liệu với DataFrame trong Python

Bài viết được sự cho phép của tác giả Kien Dang Chung Video trong bài viết Trong bài trước, chúng ta đã thu thập và làm sạch dữ liệu, nhưng với những con số như vậy thật khó để nhận ra những quy luật hoặc có ý tưởng để thực hiện những bước tiếp theo. Đây là lúc chúng ta cần đọc dữ liệu đã thu thập được và thực hiện phân tách những dữ liệu cần thiết cũng như trực quan hóa chúng thông qua các biểu đồ. Tìm việc làm python lương cao các công ty lớn Xử lý file csv với Python File cost_revenue_clean.csv là file đã được làm sạch những thông tin nhiễu, không chính xác và cả định dạng lại để máy tính có thể hiểu được. Chúng ta cần đưa dữ liệu này vào máy tính để có thể sử dụng cho các mô hình dự đoán, như vậy các dữ liệu này có thể biểu thị bằng các biểu đồ, nó chứa đựng nhiều thông tin hơn một bảng dữ liệu chỉ toàn các con số. Trước khi bắt đầu, bạn nên làm quen với Jupyter một công cụ không thể thiếu khi lập trình ngôn ngữ Python . Jupyter cho phép bạn thực hiện các đoạn code Python trực tuyến hoặc bạn có thể cài đặt trên máy tính cá nhân. Ở phần tiếp theo này, giả định bạn đã cài đặt hoặc biết cách sử dụng Jupyter trực tuyến tại Jupyter.org. Trải nghiệm lần đầu viết thư viện Python từ ngôn ngữ biên dịch Đầu tiên, chúng ta tải lên các file dữ liệu cost_revenue_clean.csv với nút Upload trong trang Jupyter. Sau đó, chúng ta sẽ sử dụng module pandas để có thể đọc file dữ liệu này. import pandas Pandas...

By stationd
Tạo kho lưu cho các gói thư viện Python

Tạo kho lưu cho các gói thư viện Python

Bài viết được sự cho phép của tác giả Nguyễn Hồng Quân Python là ngôn ngữ chính cho hệ thống backend của AgriConnect . Với đội ngũ giàu kinh nghiệm về Python, luôn đẩy sự khai thác, “bóc lột” Python đến mức cao nữa, cao nữa, nên quá trình vận hành của AgriConnect thường dẫn đến những nhu cầu “không giống ai”. Một trong số đó là nhu cầu dựng một kho chứa gói thư viện Python “tại nhà”. Bài dưới đây xin chia sẻ kinh nghiệm như thế. Khi hệ thống của AgriConnect vận hành, tác vụ cài đặt các gói thư viện Python được thực hiện lặp đi lặp lại rất nhiều lần. Chúng đến từ: Hệ thống chạy test tự động, kích hoạt mỗi khi có code mới được đẩy lên Git. Việc deploy bản cập nhật đến các server nội bộ đặt rải rác ở các trang trại khách hàng. Đa số các máy mà quá trình cài đặt thư viện Python diễn ra, đều nằm ở Việt Nam, nên việc để pip kéo phần mềm từ kho chính thức của Python (https://pypi.org/) làm tôi thấy chưa được tối ưu. Không những phí thời gian truyền tải (đường xa), làm chật chội đường truyền đi ra nước ngoài mà còn tạo áp lực lên hạ tầng của PyPI . Tôi không muốn tạo gánh nặng về chi phí bảo trì lên họ, khi tôi đã được sử dụng dịch vụ miễn phí của họ. Ngoài ra còn có một lý do thiết thực khác là nhu cầu về sự đa dạng nền tảng cần hỗ trợ, ví dụ: Quá trình test tự động, được chạy trong các Docker container, build từ Alpine Linux. Khác với các bản Linux phổ biến khác (Ubuntu, RedHat v.v..), bản Linux...

By stationd
Tất tần tật các Frontend cheatsheets tốt nhất

Tất tần tật các Frontend cheatsheets tốt nhất

Làm sao có thể nhớ hết được các APIs ? Đừng lo vì đã có cheatsheets! Dưới đây là tập hợp các frontend cheatsheets hay nhất mà tôi tập hợp được. Javascript ES2015 features Javascript Javascript Regular expression React Redux Vuejs Vuex Angular 4 Flexbox SCSS Stylus GraphQL Một vài thủ thuật CSS mà chính Frontend có thể còn chưa biết (Phần 1) Roadmap Frontend Developer - "Con đường tắt" để trở thành cao thủ Frontend Developer Ứng tuyển ngay các vị trí tuyển dụng Frontend trên Station D

By stationd
Những điểm mới của Java 8 (phần 1: Lambda expression)

Những điểm mới của Java 8 (phần 1: Lambda expression)

Bài viết được sự cho phép của smartjob.vn Vào quý I năm 2014, Java 8 được phát hành với nhiều ưu điểm mới. Station D xin giới thiệu những điểm mới mẻ này đến các bạn. 10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java Những mã xấu mà Java 8 có thể khử Xem thêm việc làm Java lương cao trên Station D Khởi tạo thực thể Nhân viên (Employee) có 3 thuộc tính là tên, tuổi và mức lương: package com.smartJob.demo; import java.math.BigDecimal; public class Employee { // Tên của nhân viên. String name; // Tuổi. Integer age; // Lương của nhân viên. BigDecimal salary; public Employee() { } public Employee(String name, BigDecimal salary, Integer age) { super(); this.name = name; this.salary = salary; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public BigDecimal getSalary() { return salary; } public void setSalary(BigDecimal salary) { this.salary = salary; } } Mục tiêu của chúng ta là sắp xếp nhân viên theo 1 trong 3 tiêu chí: tên, tuổi hay mức lương. Với Java 7, dùng 2 class là java.util.Collections và java.util.Comparator để so sánh và sắp xếp: package com.smartJob.demo; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Sorting { // Khởi tạo cấu trúc dữ liệu. private static List getEmployees() { List result = new ArrayList(); result.add(new Employee("VyDN", new BigDecimal("750000"), 29)); result.add(new Employee("AnhHT", new BigDecimal("800000"), 23)); result.add(new Employee("ConNV", new BigDecimal("10000000"), 22)); result.add(new Employee("KhanhND", new BigDecimal("17500000"), 26)); return result; } // Tiện ích hỗ trợ in kết quả ra màn hình. private static void printResult(List listEmployees) { for (Employee employee :...

By stationd
Lập trình Python trên IntelliJ IDEA (code Python trên IntelliJ)

Lập trình Python trên IntelliJ IDEA (code Python trên IntelliJ)

Bài viết được sự cho phép của tác giả Trần Hữu Cương Lập trình Python trên IntelliJ IDEA (code Python trên IntelliJ). Lập trình Python trên IntelliJ IDEA (code Python trên IntelliJ) Để thực hiện viết code Python trên intellij IDEA ta cần cài đặt plugin Python. File/Setting (hoặc ấn tổ hợp phím Ctrl + Alt + S ) Chọn menu Plugins, và gõ python để tìm kiếm plugin Pytthon. Hiện tại máy mình chưa cài plugin python nên mình sẽ cần search nó ở repositories. Chọn Plugin Python và Install. Sau khi cài đặt thành công thì khởi động lại IntelliJ để nó nhận plugin vừa cài đặt Như vậy là bạn đã cài đặt thành công plugin python để lập trình python trên IntelliJ. Selenium WebDriver trên Python Ví dụ Python Hello World trên IntelliJ Chọn File/New/Project Chọn Python. Phần Project SDK thì các bạn trỏ tới file python.exe trong folder python mà bạn đã cài đặt. (Ví dụ máy bạn cài cả bản python 3 và python 2 thì bạn có thể lựa chọn bản mà mình muốn) Kết quả: Tổng hợp các Module Python "khủng" mà bạn có thể đã bỏ qua Tạo file hello.py với nội dung print("hell world) Chạy file hello.py trên bằng cách click chuột phải vào file hello.py và chọn Run (hoặc Ctrl+Shift+F10 ) Kết quả: Bài viết gốc được đăng tải tại codecute.com Có thể bạn quan tâm: Hướng dẫn cách kết nối đến Database MySQL trong Eclipse Vừa đủ để đi (go) Artificial Intelligence (AI) đã thay đổi cuộc chơi Marketing Xem thêm Việc làm python hấp dẫn trên Station D

By stationd
Thông não Java Design Pattern – Dependency Injection

Thông não Java Design Pattern – Dependency Injection

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Với lập trình hướng đối tượng, chúng ta thường xuyên làm việc với rất nhiều class trong một chương trình, các class được liên kết với nhau theo một mối quan hệ nào đó. Dependency là một loại quan hệ giữa 2 class mà trong đó một class hoạt động độc lập và class còn lại phụ thuộc bởi class kia. Sự phụ thuộc chặt chẽ này gây rất nhiều khó khăn khi hệ thống cần thay đổi, nâng cấp. Để giải quyết vấn đề này chúng ta có thể sử dụng Dependency Injection (DI) , một dạng design pattern được thiết kế nhằm ngăn chặn sự phụ thuộc nêu trên. DI – Dependency Injection Dependency Inversion Principle (DIP), Inversion of Control (IoC), Dependency Injection (DI) là gì Trước khi bắt đầu với Dependency Injection, các bạn hãy dành chút thời gian xem lại nguyên lý SOLID trong OOP . Nguyên lý cuối cùng, tương ứng với chữ D trong SOLID chính là DIP – Dependency Inversion Principle (nguyên lý đảo ngược sự phụ thuộc). Nội dung của nguyên lý này như sau : Các module cấp cao không nên phụ thuộc vào các module cấp thấp. Cả 2 nên phụ thuộc vào abstraction . Interface (abstraction) không nên phụ thuộc vào chi tiết, mà ngược lại, chi tiết nên phụ thuộc vào abstraction. Các class giao tiếp với nhau thông qua interface, không phải thông qua implementation. Chúng ta thường hay lẫn lộn giữa các khái niệm Dependency Inversion Principle (DIP), Inversion of Control (IoC), Dependency Injection (DI) . Ba khái niệm này tương tự nhau, tất cả đều hướng đến một mục đích duy nhất là tạo ra ứng dụng ít kết dính (loosely coupling), dễ...

By stationd
Mobile Developer là gì? Trở thành Mobile Developer từ con số 0

Mobile Developer là gì? Trở thành Mobile Developer từ con số 0

Theo thống kê từ trang Statista, đầu năm 2023, số lượng người dùng smartphone trên thế giới hiện nay là 6.92 tỷ người, nghĩa là có đến 86.34% dân số thế giới sở hữu smartphone. Thị trường phát triển ứng dụng smartphone ngày càng có nhu cầu lớn hơn, cũng chính vì thế mà lập trình viên ứng dụng di động – Mobile Developer trở thành 1 ngành nghề hot với nhu cầu tuyển dụng rất lớn. Bài viết hôm nay chúng ta cùng tìm hiểu về ngành này cũng như lộ trình để trở thành lập trình viên ứng dụng di động nhé. Mobile Developer là gì? Mobile Developer là những lập trình viên phát triển những ứng dụng dành cho các thiết bị di động, phổ biến hiện nay là các ứng dụng trên smartphone với 2 hệ điều hành chính là Android và iOS. Các hệ điều hành chạy trên thiết bị smartphone đều được trang bị các công cụ (SDK, IDE) và ngôn ngữ giúp các nhà phát triển tạo ra ứng dụng của mình, với Android sử dụng Java hay Kotlin; iOS sử dụng Objective-C hay Swift. Ngoài ra có các thư viện hay framework và ngôn ngữ khác nhau giúp tạo ra ứng dụng đa nền tảng (có thể chạy trên nhiều hệ điều hành) như React Native viết bằng JavaScript, Flutter viết bằng Dart,… Nhiệm vụ của lập trình viên di động là nắm vững các kiến thức về lập trình, trang bị cho mình 1 hoặc nhiều trong số các ngôn ngữ, thư viện hay framework kể trên để có thể tạo ra những ứng dụng theo yêu cầu. Mô tả về công việc cụ thể của 1 lập trình viên di động như sau: Tham gia thiết kế xây dựng phần...

By stationd
Code ví dụ Callable, Future, Executors trong Java

Code ví dụ Callable, Future, Executors trong Java

Bài viết được sự cho phép của tác giả Trần Hữu Cương Thay vì tạo thread bằng việc Extend Thread hoặc implement Runable và tự quản lý số lượng thread. Thì ta có một hướng tiếp cận khác đó là sử dụng Callable và Future. (Cho phép hủy các thread, kiểm tra thread đã hoàn thành chưa, quản lý số thread chạy cùng lúc …). Callable, Future, Executors là gì? Callable là một interface trong java, nó định nghĩa một công việc và trả về một kết quả trong tương lai và có thể throw Exception. Future là kết quả trả về của Callable , nó thể hiện kết quả của một phép tính không đồng bộ, cho phép kiểm tra trạng thái của phép tính (đã thực hiện xong chưa, kết quả trả về là gì…). Executors là một class tiện ích trong Java, dùng để tạo thread pool, đối tượng Callable cho các xử lý bất đồng bộ. 10 câu hỏi javascript để nâng cao trình độ Tạo random số và chuỗi ngẫu nhiên trong Java Code ví dụ Callable, Future, Executors trong Java Ví dụ mình muốn thực hiện nhiều phép tính tổng 2 số nguyên cùng lúc: Đầu tiên mình tạo một class thực hiện implement Callable với kiểu trả về là Integer và implement phương thức tính tổng: package stackjava. com . futureTutorial ; import java. util . concurrent . Callable ; public class Calculator implements Callable<Integer> { private int a; private int b; public Calculator ( int a, int b ) { this . a = a; this . b = b; } public int sum ( ) { int sum = this . a + this . b ; System . out . println ( "result: " + a + " + "...

By stationd
Tìm hiểu về lệnh return trong Python

Tìm hiểu về lệnh return trong Python

Lệnh return là một thành phần cơ bản không thể thiếu trong Python cũng như nhiều ngôn ngữ lập trình khác, giúp hoàn thiện tính năng của một hàm. Tuy đơn giản nhưng để sử dụng return trong hàm một cách tối ưu thì không phải ai cũng nắm rõ được, nhất là với những bạn mới học Python. Bài viết hôm nay chúng ta cùng tìm hiểu về hàm return Python và các cách sử dụng lệnh này nhé. Lệnh return trong Python Lệnh return trong Python được sử dụng để thoát khỏi hàm và trở về điểm gọi của hàm đó; cho phép gửi kết quả của hàm trở lại điểm gọi. Lệnh return bao gồm một keyword return và theo sau là giá trị cần trả về của hàm. Cú pháp lệnh return: return [object] Trong đó, object là một đối tượng bất kỳ, có thể là số (number), chuỗi (string), list, tuple, hàm, lớp (class). Chúng ta cùng xem ví dụ dưới đây: def return_by_type ( type ): if type == "number" : return 10 elif type == "string" : return "Hello" elif type == "list" : return [ 1 , 2 , 3 ] elif type == "tuple" : return ( 1 , "A" , [ 2 , 3 ]) print ( return_by_type ( "number" )) # 10 print ( return_by_type ( "string" )) # Hello print ( return_by_type ( "list" )) # [1, 2, 3] print ( return_by_type ( "tuple" )) # (1, "A", [2, 3]) Lưu ý khi sử dụng lệnh return : Lệnh return chỉ sử dụng được ở trong hàm, nếu sử dụng ở ngoài hàm thì chương trình Python sẽ trả về lỗi: SyntaxError: ‘return’ outside function Lệnh return phải được kèm theo sau là giá trị trả về, không...

By stationd