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

Viết chương trình Xoá các File trùng lặp bằng Python

Viết chương trình Xoá các File trùng lặp bằng Python

Bài viết được sự cho phép của tác giả AnonyViet Bạn quá lo âu vì có nhiều file bị trùng lặp trên ổ đĩa khiến chiếm dung lượng bộ nhớ? Nhưng khi tìm kiếm và xoá chúng theo cách thủ công lại quá tẻ nhạt. Tiếp tục Seri python , hôm nay, mình sẽ tiếp tục hướng dẫn các bạn cách xoá các File trùng lặp và giải phóng dung lượng ổ đĩa bằng python. Giải pháp Thay vì tìm kiếm khắp ổ đĩa để xoá các File trùng lặp, bạn có thể tự động hóa quy trình này bằng cách sử dụng script, bằng cách viết một chương trình để tìm kiếm đệ quy trong ổ đĩa và loại bỏ tất cả các File trùng lặp được tìm thấy. Nguyên lý hoạt động Nếu chúng ta đọc toàn bộ File và sau đó so sánh nó với các File còn lại bằng đệ quy thì sẽ mất rất nhiều thời gian, vậy chúng ta phải làm thế nào mới được? Câu trả lời là hashing (băm), với hashing chúng ta có thể tạo ra một chuỗi các chữ cái và số nhất định đóng vai trò là danh tính của một File nhất định và nếu chúng ta tìm thấy bất kỳ File nào khác có cùng danh tính, chúng ta sẽ xóa nó. Có rất nhiều thuật toán hashing khác nhau như: md5 sha1 sha224, sha256, sha384 và sha512 Tại sao phải chọn giữa R hay Python trong khi bạn có thể chọn cả 2? Code xoá các File trùng lặp bằng Python Hashing trong Python khá đơn giản, chúng ta sẽ sử dụng thư viện hashlib được mặc định với thư viện chuẩn của Python. Dưới đây là một ví dụ về cách chúng ta hashing nội...

By stationd
Hỏi khó – Java Clone hoạt động như thế nào?

Hỏi khó – Java Clone hoạt động như thế nào?

Bài viết được sự cho phép của tác giả Kiên Nguyễn Java Clone là một trong 5 cách khởi tạo mới một Object. Tại sao chúng ta lại cần nó?. Hãy cùng tìm hiểu qua bài viết dưới đây: 1. Từ câu chuyện của reference variable. Không cần quá phức tạp, ngay từ ban đầu, ta sẽ tự đặt câu hỏi rằng: “Nếu muốn sao chép một Object A, chẳng phải cứ gán A = B là được sao?, cần gì tới Java Clone” 10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java 10 tips để trở thành Java Developer xịn hơn Xem thêm các việc làm Java lương cao trên Station D Rất tiếc, câu trả lời là không. Đối với C++, phép gán này sẽ cho ra một Object mới, hoàn toàn độc lập với Object cũ. Nhưng Java thì không làm được, nếu sử dụng phép toán ==, java sẽ tạo ra một biến tham chiếu (reference variable) -> không tạo ra một object mới. Thực chất, trường hợp sử dụng Operator equal hay toán tử New, Java đều trỏ tới cùng một địa chỉ trên memory. Object được tạo ra có thể bị thay đổi nếu object mà nó reference trước đó thay đổi. Để dễ hiểu hơn, ta cùng xem xét ví dụ dưới đây: import java.io.*; // Class Test, nơi chưa object ta muốn clone. class Test { int x, y; Test() { x = 10; y = 20; } } // Main Class class Main { public static void main(String[] args) { // Tạo object ob1 Test ob1 = new Test(); System.out.println(ob1.x + " " + ob1.y); // Tạo mới reference variable cho ob2 // Thực chất Object ob2 trỏ tới cùng một địa chỉ với...

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

Hướng dẫn Java Design Pattern – Object Pool

Bài viết được sự cho phép của tác giả Giang Phan Trong OOP, một class có thể có rất nhiều instance nhưng ngược lại Singleton là một dạng class mà chỉ hỗ trợ tối đa một instance duy nhất và một đối tượng khi đã được khởi tạo sẽ tồn tại suốt vòng đời chương trình. Trong một số trường hợp, chúng ta cần khởi tạo và sử dụng một tập hợp các đối tượng. Khi với số lượng lớn các đối tượng giống nhau, thì việc khởi tạo nhiều lần sẽ gây lãng phí không cần thiết. Chúng ta cũng có thể sử dụng Prototype Pattern để cãi thiện performance bằng cách cloning object. Tuy nhiên, không phải lúc nào object cũng có thể được clone đầy đủ. Trong những trường hợp như vậy, chúng ta có thể dùng Object pool pattern . Object Pool Pattern là gì? Object Pool Pattern là một trong những Creational pattern . Nó không nằm trong danh sách các Pattern được giới thiệu bởi GoF . Object Pool Pattern cung cấp một kỹ thuật để tái sử dụng objects thay vì khởi tạo không kiểm soát. Ý tưởng của Object Pooling là: chúng ta dùng Object Pool Pattern quản lý một tập hợp các objects mà sẽ được tái sử dụng trong chương trình. Khi client cần sử dụng object, thay vì tạo ra một đối tượng mới thì client chỉ cần đơn giản yêu cầu Object pool lấy một đối tượng đã có sẵn trong object pool. Sau khi object được sử dụng nó sẽ không hủy mà sẽ được trả về pool cho client khác sử dụng. Nếu tất cả các object trong pool được sử dụng thì client phải chờ cho tới khi object được trả về pool. Object pool...

By stationd
Ngôn ngữ lập trình PHP là gì? Tất tần tật những điều bạn cần biết về PHP

Ngôn ngữ lập trình PHP là gì? Tất tần tật những điều bạn cần biết về PHP

PHP là một ngôn ngữ lập trình rất phổ biến với dân IT, vậy ngôn ngữ lập trình PHP là gì ? Vai trò của PHP trong việc phát triển các phần mềm? Những ưu, nhược điểm của ngôn ngữ PHP? Bài viết này chúng ta hãy cùng tìm hiểu kỹ hơn về ngôn ngữ lập trình PHP cũng như các kiến thức liên quan đến loại ngôn ngữ này nhé! Ngôn ngữ lập trình PHP là gì? Ngôn ngữ PHP là từ viết tắt của Personal Home Page nay đã chuyển thành Hypertext Preprocessor. Thuật ngữ này là một dạng mã lệnh hoặc một chuỗi ngôn ngữ kịch bản được dùng để phát triển các ứng dụng web chạy trên máy chủ. Khi các lập trình viên PHP viết chương trình, chuỗi lệnh sẽ được xử lý trên server sau đó sinh ra mã HTML trên client. Dựa vào đó, các ứng dụng trên website sẽ hoạt động một cách dễ dàng. Ngôn ngữ PHP thường được dùng trong việc xây dựng và phát triển website bởi nó có thể kết nối dễ dàng với các website khác có sử dụng HTML . PHP cũng là ngôn ngữ lập trình có mã nguồn mở, tương thích với nhiều nền tảng khác nhau như MacOS, Linux, Windows,… PHP được nhiều người dùng đánh giá là dễ đọc nên đa số các lập trình viên sẽ lựa chọn học PHP trước khi bắt đầu vào nghề. Những câu hỏi thường gặp khi đi phỏng vấn lập trình php Ứng dụng của ngôn ngữ PHP trong lập trình Ngôn ngữ lập trình PHP thường tập trung vào việc thiết lập chương trình cho máy chủ, tạo các cơ sở dữ liệu, xây dựng nội dung website, nhận dữ liệu cookie. Chưa hết,...

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
Kết quả chung cuộc benchmark hiệu năng giữa PHP 7.0 và HHVM

Kết quả chung cuộc benchmark hiệu năng giữa PHP 7.0 và HHVM

Thật tuyệt vời cho tất cả những ai sử dụng PHP mỗi ngày, không chỉ các developer hay các công ty hosting mà còn cả user nữa. Chúng ta có những website nhanh hơn và dịch vụ web cho tất cả mọi người. Vì nghiện việc tối ưu thời gian load của các website và để xem phiên bản mới của PHP này cải tiến và đáp ứng được bao nhiêu so với mong đợi, chúng ta sẽ đưa một phiên bản đã public của PHP 7.0 vào kiểm tra và so sánh với PHP 5.6.16 và HHVM 3.10.1 trên một server vật lý(vì ảo hóa không phân biệt được kết quả). Việc kiểm tra bao gồm WordPress 4.3.1, Drupal 8, Magento 2.0 CE, OctoberCMS build 309, PyroCMS v3 beta2, và Flarum v0.1.0-beta.4. Server vật lý dùng để benchmark có cấu hình Intel Xeon E5-2630v3 processor (8 CPU cores và 16 threads), 64 GB RAM và 2 x 4 TB SAS 7200 rpm HGST disks in RAID 0. Chúng tôi dùng MariaDB 10.1.9 cho MySQL server và Nginx 1.9.7 cho web server. WordPress 4.4 Dùng dummy content từ wptest.io và đã benchmark trang home trong một phút với 15 CCU. WordPress là lần test duy nhất chúng tôi có thể sử dụng chế độ Repo Authoritative của HHVM mà không cần tốn thời gian sửa đổi phần mềm này. Nó giúp tăng thêm một chút tốc độ nữa nhưng không dành cho mọi người vì đòi hỏi phải thêm một số bước nâng cao để có thể chạy được. Kết quả benchmark của WordPress 4.4 HHVM RepoAuthoritative: 358.33 trans/sec Kết quả benchmark của WordPress 4.4 HHVM: 335.13 trans/sec Kết quả benchmark của WordPress 4.4 PHP 7.0: 287.92 trans/sec Kết quả benchmark của WordPress 4.4 PHP 7.0 không dùng opcache: 84.87...

By stationd
Bridge Pattern trong Java – Code ví dụ Composite Pattern

Bridge Pattern trong Java – Code ví dụ Composite Pattern

Bài viết được sự cho phép của tác giả Trần Hữu Cương 1. Bridge Pattern là gì? Bridge Pattern là một mẫu cấu trúc ( Structural Pattern ). Bridge Pattern được dùng khi có sự phân cấp giao diện trong cả thành phần interface lẫn thành phần implement nó. 2. Bridge Pattern UML Diagram Hướng dẫn Java Design Pattern – DAO Hệ thống 23 mẫu Design Patterns 3. Ví dụ Ta có 1 tin nhắn với 2 cách log là ghi ra file và show ra màn hình mỗi cách lại được thực hiện làm 2 kiểu là thực hiện với kết quả là text rõ hoặc text đã được mã hóa. Message: là 1 lớp trừu tượng khai báo chức năng log MessageLogger: là 1 interface thực thi chức năng log của Message ConsoleLogger: thừa kế MessageLogger, có chức năng show message ra console FileLogger: thừa kế MessageLogger, có chức năng ghi message vào file TextMessage và EncryptedMessage: thừa kế Message, quyết định xem việc log tin nhắn là text rõ hoặc text đã được mã hóa. Tham khảo việc làm Fresher Java mới nhất trên Station D Code ví dụ: MessageLogger.java public interface MessageLogger { public void log ( String msg ) ; } ConsoleLogger.java public class ConsoleLogger implements MessageLogger { @Override public void log ( String msg ) { System . out . println ( msg ) ; } } Xem tin tuyển dụng Java mới nhất trên Station D FileLogger.java public class FileLogger implements MessageLogger { @Override public void log ( String msg ) { // viet ham ghi ra file log.txt try { FileWriter fw = new FileWriter ( new File ( "log.txt" ) , true ) ; fw. append ( ( char ) 10 ) ; fw. write ( msg ) ; fw. close...

By stationd
Giới thiệu Java Service Provider Interface (SPI) – Tạo các ứng dụng Java dễ mở rộng

Giới thiệu Java Service Provider Interface (SPI) – Tạo các ứng dụng Java dễ mở rộng

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Hầu hết vòng đời của một ứng dụng xoay quanh việc bảo trì. Một ứng dụng có thể mở rộng cho phép bảo trì dễ dàng, tức là nâng cấp một tính năng mà không ảnh hưởng đến toàn bộ ứng dụng. Trong bài viết này chúng ta sẽ tìm hiểu về Java Service Provider Interface (SPI) và cách chúng ta có thể áp dụng nó vào trường hợp sử dụng thực tế để tạo các ứng dụng dễ dàng mở rộng, tạo ứng dụng theo các kiến trúc module, plugin. Các thành phần của Java Service Provider Interface (SPI) Một Service Provider framework là một hệ thống trong đó nhiều nhà cung cấp dịch vụ (Service Provider) implement một Service và hệ thống này cung cấp các implement cho client sử dụng. SPI giúp giảm kết dính và che dấu thông tin giữa các thành phần của ứng dụng. Java SPI định nghĩa các thành phần chính sau: Service : là một tập hợp các interface/ abstract class mà nó cung cấp quyền truy cập vào một số chức năng hoặc tính năng ứng dụng cụ thể. Service Provider Interface (SPI): là một tập hợp interface/ abstract hoạt động như một proxy hoặc điểm cuối (endpoint) cho service. Service Provider : là một triển khai cụ thể của SPI. Nó chứa một hoặc nhiều class cụ thể implements hoặc extends một Service. ServiceLoader : là thành phần không thể thiếu của SPI. Nó có vai trò tìm kiếm và load các implements khi được yêu cầu. Nó sử dụng context classpath để xác định vị trí các provider implement provider và lưu chúng vào cache để tăng performance. Bridge Pattern trong Java – Code ví dụ Composite...

By stationd
Học Python: Từ Zero đến Hero (phần 1)

Học Python: Từ Zero đến Hero (phần 1)

Trước nhất, Python là gì? Theo người sáng lập, Guido van Rossum, Python là: “Là programming language high-level, và triết lý core design tập trung vào code readability và syntax cho phép các programmers thể hiện được concepts chỉ trong vài dòng code” Với tôi, lý do đầu tiên học Python vì đây là ngôn ngữ đẹp, có thể code & thể hiện suy nghĩ của tôi 1 cách tự nhiên. Lý do nữa chúng tôi có thể tận dụng việc code Python trong nhiều lĩnh vực như: Data Science, Web Development, Machine Learning… Quora, Pinterest & Spotify đều dùng Python để lập trình backend Web của mình. Tuyển python lương cao các công ty hot Kiến thức cơ bản 1. Variables – Các biến số Bạn có thể xem các biến số này như những từ ngữ chứa 1 giá trị. Trong Python, rất dễ để define 1 variable và đặt giá trị cho nó. Hãy tưởng tượng bạn muốn lưu số 1 trong biến gọi là “one”. Bạn có thể làm như sau: one = 1 Quá dễ phải không? Chỉ cần chỉ định giá trị 1 đến biến “one”. two = 2 some_number = 10000 Và bạn có thể chỉ định bất kì giá trị nào đến bất kì biến số nào mà bạn muốn. Như đã thấy ở bảng trên, biến “two” giữ số nguyên 2 , và “ some_number ” giữ 10,000 . Bên cạnh các số nguyên, chúng ta cũng có thể sử dụng booleans (True / False), strings, float, và rất nhiều kiểu dữ liệu khác. # booleans true_boolean = True false_boolean = False # string my_name = "Leandro Tk" # float book_price = 15.80 2. Control Flow: conditional statements (lệnh tùy điều kiện) “ If ” sử dụng 1 expression để xác...

By stationd
Lập trình web cơ bản với PHP (P2)

Lập trình web cơ bản với PHP (P2)

Bài viết được sự cho phép của smartjob.vn Lập trình web cơ bản với PHP – Giải thích một số thuật ngữ Thế nào là lập trình hướng đối tượng? Để học lập trình web cơ bản với PHP, trước hết nên hiểu việc lập trình hướng đối tượng (OOP) là gì. Với nhiều sinh viên, đó là khái niệm khá trừu tượng, khó hiểu, khiến họ khó nắm bắt được PHP hay các ngôn ngữ khác. Tuy nhiên nếu bạn đã hiểu bản chất của nó thì công việc lập trình của bạn sẽ trở nên đơn giản hơn rất nhiều. Lập trình hướng đối tượng là phương pháp viết mà cho phép người lập trình nhóm các action tương ứng vào các class. Việc này khiến cho mã lệnh có thể giữ vững nguyên lý DRY – don’t repeat yourself (không lặp lại chính nó) và dễ dàng hơn trong việc bảo trì. Xem thêm nhiều việc làm PHP lương cao trên Station D Nguyên lý DRY có rất nhiều lợi ích, một trong số đó là nếu 1 phần thông tin bị thay đổi thì bạn chỉ cần một thay đổi để cập nhật lại mã lệnh. Biến và hằng Biến Là vùng nhớ dữ liệu tạm thời, giá trị của biến có thể thay đổi được Được bắt đầu bằng ký hiệu $, sau đó là một từ hoặc một cụm từ viết liền hay gạch dưới Biến được bắt đầu bằng 1 ký tự hoặc dấu gạch dưới “_” Tên biến chỉ được phép chứa các ký tự từ a đến z, không được bắt đầu bằng một ký tự số, trong biến có thể viết các số từ 0 đến 9 và dầu gạch dưới Tên biến phân biệt chữ hoa và chữ thường...

By stationd
Khởi Đầu Dự Án Python Như Thế Nào Để Thuận Tiện Phát Triển Lên

Khởi Đầu Dự Án Python Như Thế Nào Để Thuận Tiện Phát Triển Lên

Bài viết được sự cho phép của tác giả Nguyễn Hồng Quân Thỉnh thoảng mình có mối duyên ghé mắt qua các dự án Python , thấy cách sắp đặt vẫn còn chuệch choạc, không có lợi lắm cho việc phát triển tiếp diễn. Nên sau đây mình chia sẻ một số cách thức, công cụ, thư viện mà bạn nên chuẩn bị từ đầu, để công việc sau đó trở nên thoải mái hơn. Cách sắp đặt này có thể coi là chuẩn trong những năm 2020 này (nhưng có thể trở thành lạc hậu sau 5 năm nữa). 1. Quản lý các gói phụ thuộc Gói phụ thuộc (dependency) là các thư viện / công cụ bên ngoài mà dự án của bạn cần. Các gói này phải được cài trước khi phần mềm của bạn có thể chạy. Ví dụ bạn làm về khoa học dữ liệu thì sẽ cần NumPy, làm web thì sẽ cần Django v.v… Việc một dự án phụ thuộc vào hàng chục gói thư viện khác là chuyện bình thường. Thông thường các gói này sẽ được liệt kê trong file requirements.txt để khi sao chép dự án sang máy khác thì biết cần cài cái gì. Tuy nhiên, file requirements.txt chỉ là hình thức tối thiểu để quản lý gói phụ thuộc. Nó không đủ để hỗ trợ tình huống phức tạp hơn. Ví dụ dự án của bạn sử dụng thư viện A phiên bản v1 và B phiên bản v2. Sau vài tháng, nhu cầu nảy sinh, bạn cần thêm tính năng mới, và để làm tính năng mới, bạn cần đến thư viện C. Tuy nhiên thư viện C này cũng lại phụ thuộc thư viện A, và thư viện C đang có nhiều phiên bản, v1 đến...

By stationd
Python: Cách in mà không cần dòng mới

Python: Cách in mà không cần dòng mới

Bài viết được sự cho phép của tác giả Phạm Văn Nguyên Python là một trong những ngôn ngữ lập trình dễ học nhất. Một trong những chương trình đầu tiên bạn viết khi bạn bắt đầu học bất kỳ ngôn ngữ lập trình mới nào là chương trình hello world . Một chương trình hello world trong python trông như thế này # hello world in python print("Hello World!") Thật dễ dàng! Chỉ cần một dòng và tada bạn có chương trình hello world của bạn. Trong Python 3, print () là một hàm in ra những thứ trên màn hình (print là một câu lệnh trong Python 2) . Như bạn có thể thấy, nó là một chức năng rất đơn giản. Tuy nhiên, có một điều thực sự khó chịu về chức năng này. Nó tự động in một dòng mới ‘ n’ ở cuối dòng! Hãy xem ví dụ này print("Hello World!") print("My name is Nguyenpv") # output:# Hello World! # My name is Nguyenpv Như bạn có thể nhận thấy, hai chuỗi không được in lần lượt từng chuỗi trên cùng một dòng mà thay vào đó là các dòng riêng biệt. Mặc dù đây có thể là những gì bạn thực sự muốn, nhưng không phải lúc nào cũng như vậy. nếu bạn đến từ một ngôn ngữ khác, bạn có thể thoải mái hơn khi đề cập rõ ràng liệu một dòng mới có nên được in ra hay không. Ví dụ: trong Java, bạn phải thể hiện rõ ràng mong muốn in một dòng mới bằng cách sử dụng chức năng println hoặc nhập ký tự dòng mới ( n) bên trong chức năng in của bạn: // option 1 System.out.println("Hello World!") // option 2 System.out.print("Hello World!n") Vậy chúng ta nên làm...

By stationd