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

Cấu trúc dữ liệu Set trong Python
Bài viết được sự cho phép của tác giả Kien Dang Chung Python khác với các ngôn ngữ lập trình khác, nó đưa ra rất nhiều các cấu trúc dữ liệu dạng đa giá trị, trong bài trước chúng ta đã học về List và Tuple, bài này chúng ta tìm hiểu về hai cấu trúc dữ liệu tiếp theo của Python là Set (tập hợp). 1. Tập hợp (Set) Set trong Python là một cấu trúc dữ liệu liên quan đến toán tập hợp hay còn gọi là lý thuyết tập hợp do nhà toán học người Đức Georg Cantor đề xuất. Set có thể chứa nhiều các phần tử và các phần tử này không có thứ tự, vị trí của nó hỗn loạn trong tập hợp. Bạn có thể duyệt qua các phần tử trong tập hợp, có thể thêm hoặc xóa đi các phần tử và thực hiện các phép toán tập hợp như phép hợp (union), phép giao (intersection), phép hiệu (difference)… Các phần tử của tập hợp phải là các dữ liệu không thể thay đổi như một số (int), một chuỗi (string), hoặc một Tuple. 1.1 Khai báo tập hợp Tập hợp (Set) trong Python có một số tính chất mà bạn cần nhớ: Các phần tử trong tập hợp không có thứ tự. Các phần tử này là duy nhất, không cho phép lặp lại. Set có thể thay đổi (thêm bớt phần tử) nhưng các phần tử của tập hợp phải ở dạng không thể thay đổi (tức là xác định được dung lượng bộ nhớ ngay khi khai báo). Chúng ta sử dụng các dấu ngoặc nhọn trong khai báo Set, ví dụ: friends = { "Rolf" , "Bob" , "Anne" } print ( friends ) Chú ý: [] sử...

Dùng .NET Framework với IronPython
Bài viết được sự cho phép của tác giả Pymi IronPython là một triển khai của Python chạy trên .NET Framework, cho phép bạn kết hợp sức mạnh của Python với các tính năng của .NET. Dưới đây là hướng dẫn chi tiết cách sử dụng IronPython với .NET Framework Assembly là gì? Assembly (số nhiều: assemblies) là một file được tạo ra bởi quá trình compile một ứng dụng .NET. Nó có thể có đuôi .dll hoặc .exe . .NET Framework có sẵn rất nhiều assemblies (chính là thành phần Class Library trong .NET Framework ), cũng tương tự như Python có sẵn rất nhiều standard libraries vậy. AddReference .NET Assemblies Khi lập trình các ngôn ngữ .NET khác như C# hay VB.NET, dùng Visual Studio, muốn sử dụng các công cụ trong .NET Framework thì bạn phải thêm “Reference” vào project browser. IronPython có 1 module hỗ trợ “Add Reference” vào script là clr . Các methods Add Reference trong IronPython: # Sử dụng một trong các methods sau clr . AddReference clr . AddReferenceByName clr . AddReferenceByPartialName clr . AddReferenceToFile clr . AddReferenceToFileAndPath clr.AddReference nhận vào 1 đối tượng System.Reflection.Assembly , hoặc full name của assembly (vd clr.AddReference("System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") ), hoặc partial name của assembly (vd clr.AddReference("System.Drawing") ). Khi dùng partial name, IronPython sẽ tìm file dll ở trong Global Assembly Cache (GAC) . Mình thường dùng cách thứ 3: truyền vào partial name cho ngắn gọn. Xem các assemblies đã add ở clr.References : C : Users HTL > "c:Program Files (x86)IronPython 2.7ipy.exe" IronPython 2.7 . 3 ( 2.7 . 0.40 ) on . NET 4.0 . 30319.42000 ( 32 - bit ) Type "help" , "copyright" , "credits" or "license" for more information . >>> import clr >>> clr . AddReference ( "System.Drawing"...

10 điều bạn cần biết về PHP7
Nếu bạn là một web developer hoặc một người sở hữu website? Nếu trang web của bạn chạy trên CMS PHP như WordPress, Drupal, Joomla hay Magento? Vậy thì tôi có một tin vui cho bạn đây: phiên bản đầy đủ tính năng của PHP 7 mới đây đã được tung ra thị trường, bao gồm rất nhiều tính năng thú vị khiến chung tôi phải dành ra cả một bài viết về nó. 1.Tên của nó là PHP 7 (Không phải PHP 6) Phiên bản ổn định hiện tại sử dụng phiên bản tên PHP 5.6. Tuy nhiên sau một số tranh chấp nhỏ thì đội ngũ phát triển quyết định sẽ bỏ qua PHP 6 trong lần ra mắt lớn lần này. PHP 6 thật ra đã từng tồn tại trong quá khứ như một dự án thử nghiệm nhưng đáng tiếc nó chưa bao giờ được triển khai thành một sản phẩm thật sự. Nhằm đảm bảo người dùng không bị nhầm lẫn giữa phiên bản trong quá khứ và phiên bản thật sự lần này, lần ra mắt lớn này sẽ xuất hiện dưới cái tên PHP 7. Station D Techtalk #54: PHP & PHP7 – Secrets behind Optimization *Hồ Chí Minh: 18h00 – 21h00 ngày 06/01/2017 [Malaysia] Android Engineer – Attractive Salary — KFit Asia Sdn. Bhd [HCM] Experienced Linux Developer | Attractive Salary — DEK Technologies [HCM, HN] Tuyển 05 PHP Developers (Laravel, ReactJS) – Tập đoàn Novaon Jobs by 2. Zend Engine mới Zend engine đã hỗ trợ cho PHP kể từ năm 1999 khi nó được giới thiệu với PHP 4. Zend – không giống như Zend Framework – là một engine vận hành mã nguồn mở được viết ở ngôn ngữ C và thông dịch ngôn ngữ PHP. Phiên bản PHP...

Dùng Python viết hàm xử lý dữ liệu dưới tầng database cho PostgreSQL
Bài viết được sự cho phép của tác giả Nguyễn Hồng Quân Có một bận, tôi ôm trong tay một bộ CSDL của website nọ, với nhiều thông tin danh tính người thật. Để tránh cho dữ liệu danh tính bị lộ, hưởng ứng tinh thần của Luật An Ninh Mạng, tôi quyết định phải làm xáo trộn dữ liệu đó để nó không còn phản ánh danh tính thật nữa. Cụ thể là tôi sẽ ghi thêm vài kí tự bừa bãi vào cột email, cho nó thành email “xạo” hết. Nói tới nhu cầu này thì cách dễ nhất là viết đoạn code cho nó chạy một vòng lặp, lặp qua các dòng của bảng dữ liệu, tại mỗi dòng lấy ra cột email, ghi nội dung mới vào rồi lưu lại. Cách đó dễ, nhưng hơi cơ bắp, không tinh tế, sẽ chậm khi bảng dữ liệu hơi lớn. Tôi quyết định thử phương án tạo hàm tùy thêm cho hệ CSDL đó, để có thể sửa tất cả trong một câu truy vấn (query) duy nhất, ví dụ: UPDATE web_users SET email = my_func ( email ) Dùng qua cơ sở dữ liệu, các bạn chắc cũng biết trong câu truy vấn, thỉnh thoảng ta bắt gặp lời gọi hàm. Ví dụ phổ biến nhất là hàm COUNT , ví dụ: SELECT COUNT ( * ) FROM student WHERE country = 'VN' Ngoài những hàm có sẵn như thế, các hệ CSDL vẫn cho phép ta định nghĩa thêm hàm tùy ý, và viết theo cú pháp phương ngữ SQL của hệ CSDL đó, ví dụ trong MySQL: DELIMITER $$ CREATE FUNCTION CustomerLevel ( credit DECIMAL ( 10 , 2 ) ) RETURNS VARCHAR ( 20 ) DETERMINISTIC BEGIN DECLARE customerLevel VARCHAR ( 20 ); IF...

Java Enum là gì? Tại sao nên sử dụng enum?
Bài viết được sự cho phép của tác giả Kiên Nguyễn Trước khi bắt đầu, để hiểu rõ tại sao Senior Dev lại luôn sử dụng Java Enum , các bạn có thể tham khảo bài viết này. 10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java Kiểu Enum trong C/C++ (Code ví dụ Enumeration trong C/C++) Xem thêm các việc làm Java lương cao trên Station D 1. Enum là gì? 1.1 Định nghĩa. Định nghĩa thì nhàm chán , nhưng không đọc không được. =))) A Java Enum is a special Java type used to define collections of constants. More precisely, a Java enum type is a special kind of Java class. An enum can contain constants, methods etc. Java enums were added in Java 5. Java Enum là một kiểu đặc biệt sử dụng để định nghĩa một collections of constants (tập các giá trị cố định). Chính xác hơn, kiểu enum là một lớp Java đặt biệt. Enums có thể chứa các giá trị constants, method, … Java enums được thêm vào từ Java 5. 1.2 Ví dụ. Ví dụ kinh điển của Java, lụm từ W3Schools . // Trình trong trình độ. Chứ đ*o phải trinh. enum Trinh { LOW, MEDIUM, HIGH } public class HocCuaGai { public static void main(String[] args) { // Trình còi, cưa gái không nổi. Trinh cuagai = Trinh.LOW; // Chả muốn viết dòng này. System.out.println(cuagai); } } 2. Đôi điều thú vị. public class DoDen { public final String nuocBai; public static final DoDen CO = new DoDen("CƠ"); public static final DoDen RO = new DoDen("RÔ"); public static final DoDen CHUON = new DoDen("CHUỒN"); public static final DoDen BICH = new DoDen("BÍCH"); private DoDen(String nuocBai) { this.nuocBai = nuocBai; } public String...

Sử dụng phương thức flatMap() của đối tượng Stream trong Java
Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Khi làm việc với đối tượng Stream trong Java , đôi khi chúng ta sẽ có những đối tượng Stream của những đối tượng List, Set hay là Array. Ví dụ như: List<String> students1 = new ArrayList<>(); students1.add("Khanh"); List<String> students2 = new ArrayList<>(); students2.add("Thanh"); students2.add("Dung"); List<List<String>> students = Arrays.asList(students1, students2); Stream<List<String>> stream = students.stream(); Ở đây, chúng ta có đối tượng List chứa những đối tượng List của những đối tượng String và khi convert đối tượng này qua đối tượng Stream, chúng ta có đối tượng Stream chứa đối tượng List của những đối tượng String. Java Stream – Collectors và Statistics Khi đó, nếu chúng ta cần thao tác trên đối tượng Stream này ví dụ như filter chẳng hạn thì chúng ta không thể làm được. Ví dụ như: Xem thêm nhiều việc làm Java hấp dẫn trên Station D Để giải quyết vấn đề này, chúng ta có thể sử dụng phương thức flatMap () trong đối tượng Stream trước khi chúng ta cần thao tác điều gì đó trên đối tượng Stream. Sử dụng phương thức flatMap() chúng ta có thể chuyển đổi đối tượng Stream của những đối tượng List, Set or Array thành đối tượng Stream của những đối tượng đơn giản hơn. Ví dụ như: List<String> students1 = new ArrayList<>(); students1.add("Khanh"); List<String> students2 = new ArrayList<>(); students2.add("Thanh"); students2.add("Dung"); List<List<String>> students = Arrays.asList(students1, students2); Stream<List<String>> stream = students.stream(); Stream<String> flatMap = stream.flatMap(l -> l.stream()); Tìm hiểu cơ chế Lazy Evaluation của Stream trong Java 8 Bây giờ, chúng ta có thể sử dụng phương thức flapMap() để giải quyết vấn đề trên: Bài viết gốc được đăng tải tại huongdanjava.com Xem thêm: Javascript sự khác biệt map và weakmap. What make...

Để học tốt Python
Bài viết được sự cho phép của tác giả Nguyễn Chí Thức Python là một trong những ngôn ngữ lập trình linh hoạt và được sử dụng rộng rãi nhất trên thế giới. Đối với những nhà lập trình mới thì Python cực kỳ thông dụng và mang lại cho họ cơ hội tham gia vào nhiều lĩnh vực coding như mong muốn. Tuy nhiên nhiều tài liệu giảng dạy về Python hiện nay lại khá nhạt nhẽo và chung chung. Điều này có thể khiến bạn gặp khó khăn trong việc học Python đặc biệt là đối với người mới bắt đầu. Đó là lý do tại sao chúng tôi sẽ cung cấp từng bước trong hướng dẫn này để chỉ cho bạn cách tốt nhất để học Python. Hãy cùng bắt đầu bằng việc tìm hiểu những điều cơ bản, ngắn gọn để bạn có cái nhìn tổng quan về ngôn ngữ lập trình Python và nó được sử dụng để làm gì. Sau đó, chúng ta sẽ tiếp tục tìm hiểu xem cách học Python như thế nào và những điều cần phải làm khi mới bắt đầu học. Chúng tôi sẽ chỉ cho bạn về các nguồn hướng dẫn Python tốt nhất mà bạn có thể rút ra trong quá trình học, và cách để tiếp tục phát triển khi bắt đầu học lên cao. Hy vọng bạn sẽ thích hướng dẫn này! Xem thêm: Tìm việc làm python lương cao Bước 1: Python là gì? và Python dùng để làm gì? Trước khi học lập trình Python thì bạn cần phải biết nó là gì và tại sao nó được sử dụng. Nói một cách đơn giản, Python là một ngôn ngữ lập trình cấp cao, cực kỳ linh hoạt, có thể được sử dụng...

Tại sao PHP lại chậm? Vậy có những cách nào để tối ưu PHP?
Bài viết được sự cho phép của tác giả Lê Chí Dũng Một thời gian làm việc trên PHP mình nhận thấy rằng về phương diện sử dụng là rất tốt và dễ dàng sử dụng viết sau cũng chạy kiểu dữ liệu tự do nhưng về perfomance thì thật sự chưa tốt. Chính vì thế sau một thời gian sử dụng sẽ thấy perfomance giảm rõ rệt, tuy nhiên ta cũng có một số cách để cải thiện vấn đề này. Tại sao PHP lại chậm? Để trả lời vấn đề này ta sẽ quay lại cơ chế hoạt động cơ bản của ngôn ngữ server này. PHP là ứng dụng execute từ PHP script sang ngôn ngữ máy ( Assembly -> mã nhị phân ) để xử lý mà trước khi đến execute thì phải qua bộ core của PHP để parse PHP script và compiler nửa chính vì qua nhiều bước để đến execute nên nếu quá nhiều xử lý thì sẽ rất chậm với lại web hiện nay thì lượng truy cập tăng rất nhanh nên chậm là điều khó tránh khỏi. Vậy có những cách nào để tối ưu PHP? 1. Dùng kết hợp Cache OpCode (APC Cache) và Cache data (Memcached, Redis,…) Cache Opcode điển hình là APC Cache, Opcache. Nó là cache file được tạo ra và lưu trên ổ đĩa, sau khi compile xong hiểu nôm na là thay thế 2 bước ( Parse + Compile ) thay vì phải qua 3 bước nặng nề để chuyển PHP thành ngôn ngữ máy để chạy thì mình chỉ tốn 2 bước nhẹ nhàn lấy cache ra chuyển thành ngôn ngữ máy để chạy. Nên tốc độ sẽ nhanh hơn đến 50%. Cache data điển hình là Memche, memched, redis,… Nó là cache data...

PHP Autoloading là gì? PSR-4 autoloading với Composer
Bài viết được sự cho phép của tác giả Kien Dang Chung 1. PSR là gì? PSR viết tắt của cụm từ PHP Standard Recommendation là các tiêu chuẩn viết code trong ngôn ngữ PHP được đưa ra bởi tổ chức PHP-FIG (PHP Framework Interop Group). PSR có rất nhiều các tiêu chuẩn khác nhau từ PSR-0 đến PSR-19, mỗi tài liệu đặc tả về những tiêu chuẩn viết code khác nhau cho những công việc khác nhau trong lập trình PHP . Thiết lập tiêu chuẩn viết code là rất quan trọng trong lập trình theo nhóm, nó giúp code dễ đọc, dễ phát hiện sai sót khi kiểm tra bởi các thành viên khác nhau trong nhóm. Tiêu chuẩn viết mã trong PHP là rất khác nhau giữa các framework và ngay cả các phiên bản PHP khác nhau, ví dụ tên phương thức có thể viết theo nhiều kiểu khác nhau như camelCase, snake_case… hoặc một ví dụ khác về cách thức sử dụng các thư viện PHP ngoài bằng cách sử dụng include thuần túy hoặc sử dụng tiêu chuẩn autoload. Chính vì vậy, PSR được hiệp hội phát triển framework ngồi lại và đưa ra các tiêu chuẩn chung cho viết code PHP. Trong viết code PHP có 4 tiêu chuẩn thường thấy nhất là PSR-0, PSR-1, PSR-2 và PSR-4, chúng ta cùng xem chúng là những tiêu chuẩn gì? PSR-0 và PSR-4 là tiêu chuẩn về đặt tên namespace và cách load các thư viện PHP tự động. Từ tháng 10 năm 2014, tiêu chuẩn PSR-0 không còn được dùng nữa và khuyến cáo chuyển sang PSR-4. PSR-1 và PSR-2 là các tiêu chuẩn cơ bản về viết mã nguồn và hiện PSR-2 được coi là tiêu chuẩn phổ biến cho “phong cách” viết...

Cài Đặt Các Công Cụ Phát Triển Cho Java
Bài viết được sự cho phép của tác giả Nhựt Danh Các bạn đều biết rằng, để có thể code được Java, nhất định cần phải xây dựng một môi trường lập trình cho nó. Với một môi trường lập trình như vậy, bạn sẽ có trong tay đầy đủ các công cụ cần thiết để có thể bắt tay vào xây dựng các dòng code cho riêng mình. Vậy thì một môi trường lập trình cho Java sẽ phải cần đến những công cụ gì? Xây dựng chúng như thế nào? Chúng ta hãy cùng bắt tay vào tìm hiểu cách xây dựng từng công cụ nhé! Cài Đặt JDK Tương tự như phần hướng dẫn cài đặt JDK ở bên bài học Android , nếu bạn nào đã làm theo hướng dẫn đó rồi thì có thể bỏ qua phần này mà đến thẳng việc cài đặt InteliJ bên dưới, vì 2 phần hướng dẫn của 2 bài giống nhau. Còn nếu chưa cài đặt JDK bao giờ thì bạn hãy vào trang của Oracle để download file cài đặt, bạn có thể vào bằng đường dẫn này đây (bạn cũng có thể search Google với từ khóa JDK Download ). Sau khi mở link, bạn sẽ thấy danh sách các gói cài đặt như hình sau (hình ảnh có thể khác với máy của bạn ở thời điểm hiện tại do trang web này luôn được làm mới thường xuyên). Ứng tuyển các vị trí việc làm Java lương cao trên Station D Nhiều gói JDK cho bạn cài đặt Bạn hãy chọn gói theo hệ điều hành mà bạn đang dùng rồi down về thôi. Sau khi download JDK về thì bạn tiến hành cài đặt nhé. Hướng dẫn cấu hình JDK (Java) cho Jenkins Thiết...

Viết 1 Test Case Đơn Giản Với Python Selenium WebDriver
Bài viết được sự cho phép của vntesters.com Viết 1 test case đơn giản với Python Selenium WebDriver. Đây là bài viết trong loạt bài Automation skills cho tester già mà lười . Bài này VNTesters sẽ hướng dẫn các bạn viết 1 test case đơn giản. Dù bạn chưa từng làm hay học qua Selenium cũng có thể làm được. Chuẩn bị test environment Về cơ bản các bạn cần những software sau Python Browser Selenium package Python binding / WebDriver client Web Driver của browser mà bạn muốn chạy test case Top 15 câu hỏi phỏng vấn Python lý thuyết + thực hành Viết 1 test case đơn giản với Python Selenium Mình sẽ lấy Chrome là trình duyệt chạy test case. Web Driver cho Chrome có thể tìm thấy tại đây . Download về rồi bỏ nó vô folder C:VNTesters. Cũng trong folder này các bạn tạo 1 file tên simple_test_v1.py với nội dung như sau from selenium import webdriver driver = webdriver.Chrome(executable_path="C:/VNTesters/chromedriver.exe") driver.get ("https://vntesters.com/") print (driver.title) driver.quit() view raw simple_test_v1.py hosted with ❤ by GitHub Test case ở trên đơn giản quá phải không? Đơn giản nên dễ giải thích (khó quá sẽ bỏ qua) from selenium import webdriver: import webdriver từ selenium package driver = webdriver.Chrome(executable_path=”C:/VNTesters/chromedriver.exe”): mở Chrome lên, driver.get (“https://vntesters.com/”): navigate tới trang chủ của VNTesters print (driver.title): in ra tiêu đề của trang web print (driver.title): tắt Chrome Để chạy test case trên, các bạn mởi CMD và vào folder C:VNTesters rồi gõ lệnh sau python simple_test.py Cải thiện test case đơn giản với WebDriver Manager Các bạn có để ý dòng số 2 không? Đặc biệt đoạn executable_path=”C:/VNTesters/chromedriver.exe”. Đường dẫn tuyệt đối là rủi ro lớn khi test case phải chạy trên nhiều máy khác nhau. Để giải quyết vấn đề này...

Menu PHP CLI đẹp cho Laravel Artisan Commands
Nuno Maduro, tác giả của Laravel Zero và Collision (Sẽ được đưa vào trong bản Laravel 5.6) đã đưa ra một package mà có thể quản lý các dòng lệnh khá ổn gọi là nunomaduro/ laravel-console-menu . Xem thử console menu đẹp đến mức nào: Laravel Console Menu là gói dùng cho php-school / cli menu được tạo ra cho Artisan commands. Xem tin tuyển lập trình viên PHP đãi ngộ tốt trên Station D Dưới đây là một ví dụ từ readme: class MenuCommand extends Command { /** * Execute the console command. * * @return void */ public function handle() { $option = $this->menu('Pizza menu', [ 'Freshly baked muffins', 'Freshly baked croissants', 'Turnovers, crumb cake, cinnamon buns, scones', ])->open(); $this->info("You have chosen the option number #$option"); } } Đây là cách bạn có thể thay đổi giao diện của menu bằng API: $this->menu($title, $options) ->setForegroundColour('green') ->setBackgroundColour('black') ->setWidth(200) ->setPadding(10) ->setMargin(5) ->setExitButtonText("Abort") // remove exit button with // ->disableDefaultItems() ->setUnselectedMarker('❅') ->setSelectedMarker('✏') ->setTitleSeparator('*-') ->addLineBreak('<3', 2) ->addStaticItem('AREA 2') ->open(); Tất cả những gì bạn phải làm để bắt đầu sử dụng gói Laravel Artisan Commands là cài đặt nó thông qua Composer: composer require nunomaduro/laravel-console-menu Station D via Có gì mới trong bản cập nhật Laravel 5.5.33 vừa ra mắt Source: Laravel-news Xem ngay những tin đăng tuyển dụng IT mới nhất trên Station D