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

Khám phá các phương pháp so sánh trong Java

Khám phá các phương pháp so sánh trong Java

Trong lập trình Java , việc so sánh là một kỹ năng cần thiết để xử lý các đối tượng khác nhau. Tuy nhiên, có nhiều cách để thực hiện phép toán này, tùy thuộc vào kiểu dữ liệu và yêu cầu cụ thể của bạn. Trong bài viết này, chúng ta sẽ tìm hiểu về các phương pháp so sánh trong Java, bao gồm so sánh đối tượng, so sánh giá trị, sử dụng toán tử so sánh và các phương thức tiện ích như equals() và Comparable. Bằng nhau trong Java Trước khi đi vào chi tiết về các phương pháp so sánh trong Java , chúng ta cần hiểu rõ khái niệm “bằng nhau” trong ngôn ngữ lập trình này. Trong Java, có hai cách để xác định xem hai đối tượng có bằng nhau hay không: so sánh đối tượng và so sánh giá trị. Khi sử dụng phép toán so sánh đối tượng, chúng ta kiểm tra xem hai đối tượng có tham chiếu đến cùng một đối tượng trong bộ nhớ hay không. Điều này được thực hiện bằng cách sử dụng toán tử == . Tuy nhiên, trong hầu hết các trường hợp, chúng ta không muốn so sánh đối tượng theo cách này. Thay vào đó, chúng ta thường muốn so sánh nội dung của các đối tượng để xác định xem chúng có bằng nhau hay không. >>> Xem thêm: Cập nhật các tính năng mới trong Java 20 So sánh đối tượng trong Java Để so sánh nội dung của hai đối tượng trong Java, chúng ta cần ghi đè phương thức equals() . Phương thức này được định nghĩa trong lớp Object , là lớp cha của tất cả các lớp trong Java. Tuy nhiên, phương thức này chỉ...

By stationd
Ép Kiểu & Comment Source Code trong Java

Ép Kiểu & Comment Source Code trong Java

Bài viết được sự cho phép của tác giả Nhựt Danh Bài hôm nay chúng ta sẽ nói về 2 vấn đề “nhỏ”, đó là ép kiểu và comment source code . Bạn cũng nên biết nhỏ ở đây là nhỏ về tổng số chữ viết, chứ thực ra hai vấn đề hôm nay đều rất quan trọng cho các bài học kế tiếp đấy nhé. Với kiến thức về ép kiểu , chúng là kiến thức nền để bạn hiểu rõ cách sử dụng các kiểu dữ liệu khác nhau trong các ứng dụng của bạn. Còn comment source code sẽ trở thành phong cách viết code sao cho có đầy đủ chú thích dễ hiểu cho chính bạn và những người khác đọc source code của bạn sau này. Nào để hiểu nó là gì, mời bạn đến với bài học. Khái Niệm Ép Kiểu Trước khi đi sâu vào tìm hiểu về ép kiểu , mình cũng xin nhắc lại một chút, là chúng ta đã từng làm quen với việc khai báo một biến (hoặc hằng) , khi đó bạn cần chỉ định một kiểu dữ liệu cho biến hoặc hằng đó trước khi sử dụng . Việc khai báo một kiểu dữ liệu ban đầu như vậy mang tính tĩnh. Có nghĩa là nếu bạn định nghĩa biến đó là kiểu int , nó sẽ mãi là kiểu int , nếu bạn định nghĩa nó là kiểu float , nó sẽ mãi là kiểu float . Có bao giờ bạn thắc mắc nếu đem hai biến có kiểu dữ liệu khác nhau này vào tính toán với nhau, liệu nó sẽ tạo ra một biến kiểu gì? Và liệu chúng ta có thể thay đổi kiểu dữ liệu của một biến, hay một giá trị...

By stationd
Sử dụng mảng đúng cách trong PHP – Bạn đã bao giờ nghĩ?

Sử dụng mảng đúng cách trong PHP – Bạn đã bao giờ nghĩ?

Điểm hấp dẫn nhất của PHP theo mình là Array, và hầu như trong code, mọi thứ đều là key => value. Do vậy mà bạn biết thêm những hàm built-in rẳng của PHP, mà xử lý cho lẹ là điều hết sức quan trọng. Nếu không, thay vì tập trung vào cái cần làm, bạn lại hì bục sáng tạo ra những cái hàm, ban đầu chỉ là để cho xong task, hoặc là xa hơn là để tự sướng. Nhưng kết quả là, rất ức chế cho thằng khác, vì nó phải suy nghĩ cái đó là cái gì? – Đây là note khá hay mình dẫn từ 1 post của bạn Trần Phong Phú (Fullstackdev tại Sendo). [ Xem thêm bài blog về associative array ] Mình vô tình đọc được 1 bài tuts hay của tác giả Anton Bagaiev nên lược dịch lại cho các bạn đọc, không bổ bề ngang cũng bổ bề dọc, chúc các bạn thu được kiến thức hữu ích. Trong bài tutorial này, mình sẽ liệt kê các hàm xử lý mảng thông dụng trong Php kèm theo ví dụ và cách sử dụng tốt nhất. Đã lập trình Php thì cần biết làm sao sử dụng và làm sao để phối hợp các hàm xử lý mảng để cho code dễ đọc và ngắn gọn hơn. Cơ bản Bắt đầu bằng 1 hàm cơ bản để xử lý keys và values của mảng. Một trong số đó là array_combine() , nó tạo 1 mảng kết hợp bằng cách trộn keys của 1 mảng này và values của 1 mảng khác, với điều kiện 2 mảng này bằng nhau. $keys = ['sky', 'grass', 'orange']; $values = ['blue', 'green', 'orange']; $array = array_combine($keys, $values); print_r($array); // Array // ( // [sky] =>...

By stationd
Giới thiệu về Spring Integration

Giới thiệu về Spring Integration

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Mình đã giới thiệu với các bạn về MuleSoft , một low code platform giúp chúng ta hiện thực các ứng dụng Enterprise Service Bus với nhiều Enterprise Integration Pattern một cách dễ dàng. Vấn đề là MuleSoft không free mặc dù nó cũng có bản community nên chúng ta cần có những giải pháp ít tốn chi phí hơn. Một trong số những giải pháp mà mình muốn giới thiệu với các bạn trong bài viết này là Spring Integration. Cụ thể là như thế nào? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này các bạn nhé! Cơ bản về Spring Integration Điều đầu tiên mà các bạn cần biết là, tương tự như MuleSoft, Spring Integration giúp chúng ta hiện thực các ứng dụng middleware, integrate các ứng dụng trong một hệ thống với nhau. Nó sử dụng messaging strategy để giữ và truyền thông tin giữa các component với nhau trong ứng dụng middleware hoặc giữa các ứng dụng với nhau. Các khái niệm chính trong Spring Integration mà các bạn cần biết là Message , Message Channel và Message Endpoint . Một message sẽ được gửi tới một Message Endpoint, các Message Endpoints sẽ được kết nối với nhau thông qua Message Channels, một Message Endpoint có thể nhận Message từ một Message Channel. Message Một Message trong Spring Integration sẽ chứa các thông tin mà qua mỗi một Endpoint, các thông tin đó có thể sẽ bị thay đổi. Cấu trúc của một Message bao gồm Header và Payload như sau: Interface Message của Spring Integration định nghĩa thông tin Message này đó các bạn! package org.springframework.messaging; public interface Message<T> { T getPayload(); MessageHeaders getHeaders(); } Implementation chính của interface...

By stationd
Một số thủ thuật hay trong Python

Một số thủ thuật hay trong Python

Bài viết được sự cho phép của tác giả Nguyễn Chí Thức Copy một list Giả dụ chúng ta có đoạn code sau: >>> A = [ 1 , 2 , 3 , 4 , 5 ] >>> B = A thì nếu chúng ta in list B thì sẽ được các phần tử của list A, nhưng thực ra B chỉ là một biến tham chiếu đến A trong bộ nhớ, tức là thực chất trong bộ nhớ chỉ có 1 list [1, 2, 3, 4, 5] và cả A và B cùng trỏ đến list đó chứ không phải A và B có 2 list giống nhau. 71 trích đoạn code Python cho các vấn đề hàng ngày của bạn Bỏ túi cheatsheet dành cho Python newbie >>> C = A[:] Còn trong dòng code trên thì chúng ta mới thực sự tạo ra một list khác là C có các phần tử giống như list A. Bây giờ chúng ta thử đổi một phần tử trong list A: >>> A[ 0 ] = 8 >>> A >>> [ 8 , 2 , 3 , 4 , 5 ] >>> B >>> [ 8 , 2 , 3 , 4 , 5 ] >>> C >>> [ 1 , 2 , 3 , 4 , 5 ] Rõ ràng khi in list A và B đều cho kết quả giống nhau vì chúng cùng tham chiếu tới một list, nhưng C thì lại khác vì các phần tử trong list C tồn tại độc lập. Việc làm python các công ty lớn Khởi tạo giá trị mặc định cho đối tượng Dictionary Các đối tượng Dictionary được tạo ra là rỗng. Nhiều khi chúng ta làm việc với Dictionary mà không biết khóa đó có giá trị hay...

By stationd
[Python cơ bản thường dùng trong công việc] Phần 3 : Phân chia module

[Python cơ bản thường dùng trong công việc] Phần 3 : Phân chia module

Tất cả ví dụ cho đến thời điểm này đều được thực thi trong command line hoặc từ một file python .py . Tuy nhiên, đối với các ứng dụng lớn, có nhiều chức năng thì phân chia nhỏ dự án thành các file khác nhau sẽ giúp dễ bảo trì và tái sử dụng các thành phần đã thiết kế. Chương này sẽ giúp bạn thiết kế các tính năng theo mô hình các module và khi cần thì sẽ gọi file tương ứng và sử dụng. Việc làm python mới ra trường cho bạn 3.1. Các loại module / thư viện Có 3 loại module thường thấy là: Viết bằng Python: có phần mở rộng là .py Các thư viện liên kết động: có phần mở rộng là .dll , .pyd , .so , .sl ,… C-Module liên kết với trình phiên dịch. [Python cơ bản thường dùng trong công việc] Phần 3 : Phân chia module Phần 3 : Phân chia module”] [Python cơ bản thường dùng trong công việc] Phần 3 : Phân chia module Phần 4 : Class”] [Python cơ bản thường dùng trong công việc] Phần 3 : Phân chia module 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 3 : Phân chia module Phần 6 : Xử lý hình ảnh”] 3.2. Đường dẫn tìm để load module Để tải một module vào script của bạn, sử dụng cú pháp đơn giản: import modulename khi gặp câu lệnh trên thì trình biên dịch sẽ tiến hành tìm kiếm file module tương ứng theo thứ tự thư mục sau: Thư mục hiện hành mà script đang gọi Các thư mục trong PYTHONPATH (nếu có set) Các thư mục cài đặt chuẩn trên Linux/Unix.....

By stationd
Biết Python – quen ngay Julia

Biết Python – quen ngay Julia

Bài viết được sự cho phép của tác giả Nguyễn Việt Hưng Julia là ngôn ngữ lập trình mới, trông rất giống code Python, chạy nhanh hơn Python3 ít nhất 2 lần và có nhiều tính năng hấp dẫn. Bạn không cần phải từ bỏ Python hay ngôn ngữ XYZ để học Julia, Julia chỉ đơn giản là một bông hoa đẹp mà ai thích… thì múc. Julia là ngôn ngữ lập trình “làm gì cũng được”, nhưng được tập trung vào lĩnh vực tính toán khoa học và muốn thế chỗ Python (nhưng đường còn dài, và còn nhiều hơn chông gai). Cài đặt Xem https://docs.julialang.org/en/v1/ Tại thời điểm viết bài (2019 tháng 4), Julia ở bản 1.1.0 – đã ổn định hơn trước rất nhiều, ít bug hơn, chạy nhanh hơn. Từ Python ngó sang Julia trông rất giống Python , cách dùng các học, cách code cũng tương tự, nên nếu biết Python thì việc viết được code để làm công việc thường ngày (của 1 DevOps) chỉ trong vòng vài tiếng. REPL Gõ lệnh trực tiếp bằng lệnh julia trên Linux/MacOS $ julia _ _ _ _ ( _ ) _ | Documentation : https :// docs . julialang . org ( _ ) | ( _ ) ( _ ) | _ _ _ | | _ __ _ | Type "?" for help , "]?" for Pkg help . | | | | | | |/ _ ` | | | | |_| | | | (_| | | Version 1.1.0 (2019-01-21) _/ |__'_|_|_|__'_| | Official https://julialang.org/ release |__/ | julia> 1 + 1 2 Đây gọi là chế độ “REPL” (Read-Eval-Print-Loop) == (gõ vào – chạy – in ra kết quả – cứ thế mà làm). Những cải tiến đáng giá của Python...

By stationd
Python Lists: Append vs Extend (Có ví dụ)

Python Lists: Append vs Extend (Có ví dụ)

Bài viết được sự cho phép của tác giả Phạm Văn Nguyên Hai trong số các phương thức Danh sách phổ biến nhất trong Python là các phương thức “append” và “extend” Tuy nhiên, hai phương thức này là nguyên nhân của rất nhiều nhầm lẫn và hiểu lầm giữa những người mới bắt đầu Python. Trong bài viết này, tôi sẽ giải thích từng phương pháp làm gì và cho bạn thấy chính xác sự khác biệt giữa chúng. Đầu tiên: Append append phương thức được sử dụng để thêm một đối tượng vào một danh sách. Đối tượng này có thể thuộc bất kỳ kiểu dữ liệu , chuỗi, số nguyên, boolean hoặc thậm chí một danh sách khác. Giả sử bạn muốn thêm một mục vào danh sách L ban đầu có 4 phần tử >>> L = [1, 2, 3, 4] >>> L.append(5) >>> L [1, 2, 3, 4, 5] Như bạn có thể thấy, phương thức chắp thêm mục 5 mới vào danh sách. Không cần phải nói, độ dài của danh sách đã tăng thêm một (và chỉ một) vì phương thức chắp thêm chỉ thêm một đối tượng vào danh sách. Đây là một sự khác biệt quan trọng bởi vì bạn sẽ thấy sau này không nhất thiết phải là trường hợp “extend” . Được rồi, vì tò mò, hãy thử nối thêm một danh sách vào danh sách của chúng tôi. >>> L = [1, 2, 3, 4] >>> L.append([5, 6, 7]) >>> L [1, 2, 3, 4, [5, 6, 7]] Vì vậy, những gì chúng tôi đã làm ở đây là chúng tôi đã thêm một đối tượng (có thể thuộc danh sách loại) vào danh sách L của chúng tô. Một lần nữa, sau khi sửa đổi, chiều dài...

By stationd
Code PHP làm sao cho sạch (Phần 2)

Code PHP làm sao cho sạch (Phần 2)

Xem lại Phần 1 Cách Code PHP làm sao cho sạch tại đây. Tránh kiểm tra kiểu dữ liệu (phần 1) PHP là một ngôn ngữ không ràng buộc kiểu dữ liệu, nghĩa hàm có thể nhận bất kỳ kiểu nào. Thỉnh thoảng thì chúng ta bị ảnh hưởng bởi sự tự do này và nó trở thành điều kiện để phải kiểm tra kiểu dữ liệu trong hàm. Có nhiều cách để tránh phải làm việc đó. Điều đầu tiên cần làm là tạo ra những API nhất quán. Chưa tốt: function travelToTexas($vehicle): void { if ($vehicle instanceof Bicycle) { $vehicle->pedalTo(new Location('texas')); } elseif ($vehicle instanceof Car) { $vehicle->driveTo(new Location('texas')); } } Tốt: function travelToTexas(Traveler $vehicle): void { $vehicle->travelTo(new Location('texas')); } Tránh kiểm tra kiểu dữ liệu (phần 2) Nếu bạn đang làm việc với các kiểu dữ liệu nguyên thủy như strings, integers, và arrays, và sử dụng PHP 7+ và bạn không thể sử dụng tính đa hình nhưng bạn vẫn cảm thấy cần kiểm tra kiểu dữ liệu, hãy xem type declaration hoặc strict mode. Nó cung cấp cho bạn kiểu static trên PHP standard. Vấn đề thông thường khi kiểm tra kiểu dữ liệu là sẽ khiến code khó đọc nên tóm lại mất nhiều hơn là được. Hãy giữ PHP nguyên thủy, viết tests cho tốt, và code reviews cẩn thận là được. Nếu không thì chỉ còn cách định nghĩa theo kiểu nghiêm ngặt(strict type declaration) hoặc dùng strict mode. Chưa tốt: function combine($val1, $val2): int { if (!is_numeric($val1) || !is_numeric($val2)) { throw new Exception('Must be of type Number'); } return $val1 + $val2; } Tốt: function combine(int $val1, int $val2): int { return $val1 + $val2; } Xem tin tuyển lập trình viên PHP đãi ngộ tốt trên Station D Xóa dead...

By stationd
[Python cơ bản thường dùng trong công việc] Phần 12 : Kết nối RabbitMQ

[Python cơ bản thường dùng trong công việc] Phần 12 : Kết nối RabbitMQ

RabbitMQ là gì? RabbitMQ là một phần mềm cho phép xây dựng Message Queue theo protocol AMQP và khá thông dụng trên thế giới. Để kết nối đến RabbitMQ trên Python, ta sẽ sử dụng thư viện pika . 12.1. Cài đặt Có thể xem thêm về hướng dẫn cài đặt thư viện này tại https://pika.readthedocs.org/en/0.10.0/ Đơn giản cài thông qua pip là: $ sudo pip install pika 12.2 Gởi một message đến Server – Provider Ví dụ để gởi một message đến server import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.queue_declare(queue='hello') channel.basic_publish(exchange='', routing_key='hel lo', body='Hello World!') print " [x] Sent 'Hello World!'" connection.close() Để gởi một message, chúng ta cần kết nối đến server và khai báo một channel, ở đây là channel có tên là hello . Sau khi khai báo channel, tao tiến hành gởi message có nội dung Hello World! thông qua channel này, kèm theo khai báo routing_key là hello . Routing Key sẽ giúp điều hướng message này đến đúng các worker được khai báo nhận message theo routing key (Consumer) Tuyển dụng python lương cao 12.3. Nhận message – Consumer Ở bước trước, ta đã tạo một message lên queue. Ở bước này, ta sẽ khai báo một worker xử lý các message nhận được từ channel hello . import pika connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) channel = connection.channel() channel.queue_declare(queue='hello') print ' [*] Waiting for messages. To exit press CTR L+C' def callback(ch, method, properties, body): print " [x] Received %r" % (body,) channel.basic_consume(callback, queue='hello', no_a ck=True) channel.start_consuming() Đoạn code này cũng có phần khai báo connection , channel . Tuy nhiên, vì là consumer nên sẽ sử dụng phương thức basic_consume để lắng nghe trên queue hello , khi có message đến sẽ gọi hàm callback() để xử lý. Trong trường hợp ví...

By stationd
Callback trong PHP là gì?

Callback trong PHP là gì?

Bài viết được sự cho phép của tác giả Kien Dang Chung Callback là gì? Callback là khái niệm một hàm được truyền vào một hàm khác như một tham số để nó có thể được thực hiện trước hoặc sau một sự kiện hoặc một thay đổi trạng thái. Trong thực tế, callback nghĩa là gọi lại, xem xét một ví dụ sau, một người hỗ trợ sẽ thực hiện lấy các thông tin về lỗi của người dùng sau đó mới gọi lại (callback) cho khách hàng. Trong PHP, thực hiện callback là rất đơn giản. Chúng ta xem một ví dụ sau: <?php function sayHello ( $callback ) { echo "Xin chào ! </ br > " ; // Các câu chuyện khác ở giữa xin chào và tạm biệt // ... $callback ( ) ; } function sayGoodbye ( ) { echo "Tạm biệt!" ; } sayHello ( 'sayGoodbye' ) ; // Kết quả // Xin chào! // ... // Tạm biệt Trên đây là một ví dụ rất đơn giản về callback trong PHP, hàm sayGoodbye được truyền vào hàm sayHello như một tham số. Cách thực hiện này rất hữu ích khi chúng ta muốn định nghĩa một hàm (sayGoodbye) được thực hiện khi một sự kiện xảy ra (sau các câu chuyện khác). Ví dụ trên đây khá dễ hiểu nhưng có một khía cạnh chưa được bàn đến là việc sử dụng kết quả của hàm gọi trong hàm được gọi. Ví dụ tiếp theo cho thấy hỗ trợ viên sau khi lấy thông tin về lỗi người dùng và sử dụng thông tin này để gọi lại cho khách hàng: <?php function sayHello ( $first_name , $last_name , $callback ) { $full_name = $first_name . ' ' . $last_name ; $callback...

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

Hướng dẫn Java Design Pattern – Intercepting Filter

Intercepting Filter Pattern là gì? Intercepting filter pattern là một Java EE pattern, được sử dụng khi muốn thực hiện một vài xử lý trước (pre-processing) khi request được ứng dụng đích (target) xử lý hoặc sau (post-processing) khi response được trả về từ target. Các Filter được định nghĩa và áp dụng trên yêu cầu (request) khi chuyển request đến ứng dụng đích thực tế (target). Các Filter có thể thực hiện xác thực (authentication), ủy quyền (authorization), nén dữ liệu (compressing), ghi nhật ký (logging) hoặc theo dõi yêu cầu (tracking) và sau đó chuyển yêu cầu đến các trình xử lý tương ứng. Các Filter được thực thi một cách trong suốt, phía client và target không hề biết sự tồn tại của nó. Tìm Java job lương cao trên Station D ngay! Cài đặt Intercepting Filter Pattern như thế nào? Các thành phần tham gia mẫu Intercepting filter pattern: Filter : chịu trách nhiệm thực hiện một vài xử lý trước khi request được target xử lý hoặc sau khi response được trả về từ target. Target : là một đối tượng xử lý lý chính, một trình xử lý yêu cầu. Filter chain : chứa một chuỗi các Filter sẽ được thực hiện trên target theo thứ tự được xác định. Filter manager : quản lý các Filter và Filter Chain. Client : đối tượng gửi request đến target hoặc nhận response từ target. Hướng dẫn Java Design Pattern – Memento Một số Patterns hay sử dụng trong React Ví dụ sử dụng Intercepting Filter Pattern Giả sử chúng ta có một ứng dụng cần ghi log, xác thực tất cả request đến hệ thống trước khi target xử lý. Chương trình của chúng ta như sau: HttpRequest.java package com.gpcoder.patterns.other.filter; import lombok.Data; @Data public class...

By stationd