Java

Duyệt các bài viết được gắn thẻ Java

106 bài viết

Tổng quan về JPA (Java Persistence API)

Tổng quan về JPA (Java Persistence API)

Bài viết được sự cho phép của tác giả Giang Phan Bất kỳ một ứng dụng nào cũng đều cần phải thực hiện các tháo tác (CRUD) đến database bằng việc lưu trữ, truy vấn dữ liệu. Chúng ta cần phải viết nhiều code để thực hiện các việc này. Với công nghệ JDBC trước đây, chúng ta phải thực hiện các việc: mở kết nối vào Database, tạo các Statement, ResultSet, … và sau cùng phải đóng tất cả các thứ đó lại. Dẫn đến code sẽ trở nên cồng kềnh, khó mở rộng và bảo trì. Chúng ta cũng cần phải làm việc với cả Java code và SQL. Thực tế, từng Database khác nhau thì câu SQL có một số phần khác nhau, nên đòi hỏi chúng ta phải nắm được sự khác biệt này để viết code cho phù hợp. Khi ứng dụng muốn chuyển từ database sang database khác (ví dụ từ MySQL sang Oracle) thì chắc chắn sẽ có một số phần của câu SQL cần phải đổi. Công việc sửa code lại đòi hỏi phải test lại ứng dụng. Điều này sẽ tốn thời gian, chi phí phát triển và cũng gặp không ít rủi ro. Để khắc phục nhược điểm này, đã có rất nhiều Framework ra đời với mục đích giúp xóa đi vấn để về tương thích giữa các Database, giúp tập trung vào phần xử lý nghiệp vụ. Trong phần tiếp theo của bài viết này, tôi sẽ giới thiệu với các bạn JPA (Java Persistence API) – một chuẩn đặc tả cho các ORM Framework giải quyết vấn đề trê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 10 tips để trở thành Java Developer xịn hơn Xem thêm các...

By stationd
Class trong Java là gì? Object trong Java là gì?

Class trong Java là gì? Object trong Java là gì?

Bài viết được sự cho phép của tác giả Trần Hữu Cương 1. Đối tượng là gì (Object là gì?) Khoan nói tới lập trình, chúng ta hãy nói tới đối tượng trong đời sống thực tế hàng ngày. Đối tượng là một thực thể vật lý, có thể là một con vật, một đồ vật… Ví dụ như ngôi nhà, cái xe, người… Mỗi đối tượng sẽ có đặc trưng riêng của nó: Trạng thái của đối tượng: ví dụ cái xe màu gì, bao nhiêu phân khối, giá tiền… Hành vi: các hành động của đối tượng. Ví dụ cái xe có thể chạy, phát tiếng còi, phát ánh đèn… Định danh / nhận diện: là một tính chất giúp các đối tượng phân biệt được với nhau. Các đối tượng có thể nhìn giống nhau không phải là một. Ví dụ hai người sinh đôi nhìn giống hệt nhau nhưng là hai người (đối tượng) riêng biệt. Record class trong Java Giới thiệu Javascript Proxy object Trong lập trình hướng đối tượng, các đối tượng trong Java cũng có ba đặc trưng trên: Trạng thái: thể hiện ở giá trị của các biến class (các field của đối tượng) Hành vi: các method/phương thức của class Định danh: Mỗi khi bạn tạo một đối tượng mới thì chúng sẽ được lưu trong bộ nhớ với địa chỉ, kích thước khác nhau. JVM phân biệt được các đối tượng theo các địa chỉ nhớ đó. Nếu bạn thấy có 2 đối tượng A và B có cùng 1 bộ nhớ thì bản chất nó là 1 đối tượng với các tên gọi khác nhau mà thôi (Nếu A thay đổi thì B cũng thay đổi y hệt, ngược lại B thay đổi thì A cũng sẽ thay đổi...

By stationd
Tìm hiểu Java Design Pattern – Service Locator

Tìm hiểu Java Design Pattern – Service Locator

Bài viết được sự cho phép của tác giả Giang Phan Trong các ứng dụng, chúng ta thường gặp trường hợp một class Client phụ thuộc vào một service hoặc một component là những lớp cụ thể (concrete class) trong lúc chạy ứng dụng. Sự phụ thuộc của class Client vào các service này sẽ có một số vấn đề cần phải giải quyết: Nếu thay thế hoặc cập nhật các service phụ thuộc, chúng ta cần thay đổi mã nguồn của class Client. Các concrete class của một phụ thuộc có thể thay đổi tại thời điểm run-time hay không? Các class cần phải viết những đoạn code cho việc quản lý, khởi tạo các phụ thuộc. Khó khăn khi viết Unit Test do các lớp được kết hợp chặt chẽ. Giải pháp cho vấn đề này chính là áp dụng Service Locator pattern , nó tạo ra một class chứa các tham chiếu đến các service và nó đóng gói các xử lý nghiệp vụ để xác định các service. Các loại Design patterns Factory Method Pattern - Giải thích đơn giản, dễ hiểu Service Locator Pattern là gì? The service locator pattern is a design pattern used in software development to encapsulate the processes involved in obtaining a service with a strong abstraction layer. This pattern uses a central registry known as the “service locator” which on request returns the information necessary to perform a certain task. The ServiceLocator is responsible for returning instances of services when they are requested for by the service consumers or the service clients. Service Locator là một design pattern thông dụng cho phép tách rời (decouple) một class với các dependency (hay được gọi là service) của nó. Service Locator có thể coi là một đối tượng trung gian trong việc...

By stationd
Java Talk: Java – Ngôi sao hết thời?

Java Talk: Java – Ngôi sao hết thời?

Java “hết thời” hay “chết dần” luôn là quan điểm nhận về nhiều ý kiến trái chiều trong cộng đồng Kỹ sư phần mềm những năm gần đây. Liệu đó có phải là sự thật hay chỉ là lời đồn đại trong thế giới “tech-biz”? *Nội dung bài viết tham khảo từ sự kiện Java Talk: Java – Ngôi sao hết thời? do CMC Global tổ chức, với sự đồng hành của Viblo Platform và Trung tâm Đổi mới Sáng tạo Quốc gia (NIC). Sự kiện được dẫn dắt bởi anh Phan Tích Hoàng – Solution Architect và anh Nguyễn Thế Hưng – Technical Leader đến từ CMC Global. Sự thất thế của Java Java là ngôn ngữ lập trình hướng đối tượng được phát triển bởi Sun Microsystems, phát hành lần đầu tiên năm 1995 và được Tập đoàn Oracle mua lại năm 2010. Tính đến nay, Java đã qua nhiều lần cải tiến với tổng cộng 19 phiên bản được phát hành. Tuy nhiên, Java đang không tránh khỏi sự cạnh tranh gay gắt của những ngôn ngữ lập trình hiện đại với những điểm ưu việt riêng, mang lại tính cạnh tranh và phần nào “thắng thế” Java. Anh Phan Tích Hoàng (Solution Architect, CMC Global), diễn giả trong sự kiện chia sẻ “Lần đầu làm quen với Java từ những năm 1997, mình bị thu hút bởi những triết lý mới của ngôn ngữ này. Ưu điểm lớn nhất của Java là tính ổn định. Nhưng nếu làm cùng một công việc, Java phải đòi hỏi nhiều dòng code hơn. Điều này chính là bất lợi của Java so với các ngôn ngữ khác.” Đồng quan điểm, anh Nguyễn Thế Hưng (Technical Leader, CMC Global) cũng cho rằng đứng trước sự ra đời của nhiều công...

By stationd
Lỗi Could not create the Java Virtual Machine khi chạy Minecraft

Lỗi Could not create the Java Virtual Machine khi chạy Minecraft

Bài viết được sự cho phép của blogchiasekienthuc.com Có bao giờ bạn gặp một thông báo lỗi như thế này chưa? (lỗi này xảy ra khi mình chạy game Minecraft). Error: Could not create the Java Virtual Machine. Error: A fatalexception has occurred. Program will exit. Mình nghĩ là lỗi này chắc nhiều bạn cũng đã từng bị rồi. Chính vì thế mà hôm nay mình sẽ hướng dẫn cho các bạn các cách để sửa lỗi này một cách hiệu quả nhất nhé. 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 nhiều việc làm Java lương cao trên Station D #1. Tạo một System Variable cho Java Đầu tiên bạn nhấn tổ hợp phím Windows + R để mở hộp thoại Run => sau đó nhập sysdm.cpl => và bấm OK . Tiếp theo, bạn vào tab Advanced => và bấm vào Environment Variables trong phần Startup and Recovery . Sau đó bạn tiếp tục bấm vào New ở phàn System Variables . Sau đó bạn thiết lập như sau: Variable name bạn nhập JAVA_OPTIONS Variable value bạn nhập là –Xmx512M để xác định số lượng RAM tối đa mà Minecraft có thể sử dụng, ở trong ví dụ này mình để là 512MB. Bạn có thể thay đổi thành –Xmx1024M hoặc –Xmx2048M. => Cuối cùng bạn bấm OK để thực hiện. #2. Chạy Java với quyền Admin Để thực hiện điều này thì bạn nhấn tổ hợp phím Windows + S để mở Windows Search => sau đó nhập từ khóa tìm kiếm là Java . Nếu như có sẵn shorcut Java ở ngoài màn hình Desktop thì nhấn chuột phải vào shortcut đó luôn. Bấm chuột phải vào...

By stationd
Interface trong Java – Bạn đã hiểu đúng? Nếu chưa, mời đọc ngay

Interface trong Java – Bạn đã hiểu đúng? Nếu chưa, mời đọc ngay

Bài viết được sự cho phép của tác giả Sơn Dương Trong một lần tình cờ vào VOZ forums, có một bạn hỏi về Interface trong Java là gì? Nó khác với Abstract Class chỗ nào? Tại sao phải dùng Interface, mặc dù nó chẳng rút gọn code đi tý nào, thậm chí còn dài hơn. Mặc dù có nhiều bạn trả lời cho chủ topic đó nhưng hầu hết là hiểu sai, hoặc chưa hiểu rõ bản chất của Interface trong Java. Để các bạn có cái nhìn thấu đáo, hiểu rõ bản chất của Interface. Từ đó có thể ứng dụng Interface một cách chuẩn chỉ cho dự án của mình. Mình đã cho ra đời bài viết này. Java Interface là gì? Có phải “bộ mặt” của Java? Để hiểu một cách chính xác thì phải đọc khái niệm Interface của chính chủ Oracle : In its most common form, an interface is a group of related methods with empty bodies. – Oracle – Đến Oracle cũng không thể định nghĩa Interface một cách khoa học kiểu: Interface là xyz, bla bla. Nhưng chúng ta có thể hiểu một cách nôm na và chính xác như sau: Trong thế giới thực, chúng ta có vật (đồ vật, con vật…) và các hành vi của nó. Interface được sinh là để định nghĩa các hành vi của một nhóm vật. Mình lấy ví dụ như sau: Một con mèo (đây là con vật) thì có các hành vi như: chạy, bắt chuột, ngủ… Ta sẽ định nghĩa một Interface Cat như sau: interface CatBehaviors { // Cách con mèo chạy với tốc độ void run ( int speed ) ; // Cách con mèo bắt chuột void catchMouse ( int mouse ) ; // Định nghĩa cách con...

By stationd
Tổng Hợp Các Phương Thức Của Thread

Tổng Hợp Các Phương Thức Của Thread

Bài viết được sự cho phép của tác giả Nhựt Danh Thread có nhiều phương thức khá hay, nếu lúc nào đó bỗng nhiên bạn cần đến, thì việc tìm hiểu thêm về chúng cũng mất kha khá thời gian. Và cũng nhân tiện có nhiều bạn cũng đặt các câu hỏi xoay quanh một vài phương thức được dùng nhiều, hôm nay mình viết hẳn một bài để tổng hợp lại các phương thức đó của Thread lại. Mình sẽ tập trung giải nghĩa cụ thể vào từng phương thức, có ví dụ rõ ràng, để các bạn nắm rõ hơn và để mình nhanh chóng cho ra những bài viết còn lại của chuỗi kiến thức Thread khá là đồ sộ này nhé. Lưu ý rằng bài viết hôm nay sẽ chưa có đủ mặt các phương thức, nhưng mình sẽ cập nhật thêm sau này và sẽ để lại đường link đến bài này từ các bài viết liên quan khác. Thread.sleep() Một phương thức đơn giản nhưng khá nhiều bạn thắc mắc. Giải Nghĩa sleep() là một phương thức static của Thread. Do đó chúng ta gọi kèm với tên của lớp: Thread.sleep() . Thread.sleep() làm cho Thread hiện tại (chính là Thread đang gọi đến lệnh Thread.sleep() ) phải tạm hoãn lại việc thực thi trong một khoảng thời gian được chỉ định. Nói cho đầy đủ thì là vậy, nhưng các lập trình viên hay dùng theo tên của phương thức, đó là “Ngủ” . Tuy Thread.sleep() được nạp chồng cho phép bạn chỉ định thời gian ngủ cho Thread hiện tại tính đến nano giây. Nhưng bạn đừng có nghĩ rằng Thread.sleep() sẽ thực sự ngủ với chính xác khoảng thời gian mà bạn định nghĩa nhé. Vì việc ngủ và thức này...

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

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

Bài viết được sự cho phép của tác giả Giang Phan Trong một số tình huống trong phát triển phần mềm, chúng ta có thể cải thiện hiệu suất của ứng dụng với việc sử dụng Cache . Hãy tưởng tượng rất nhiều đối tượng được tạo ra và lãng phí bộ nhớ. Mô hình Flyweight được tạo ra để tránh vấn đề này và tối ưu hóa hiệu suất. Flyweight Pattern là gì? Use sharing to support large numbers of fine-grained objects efficiently. Flyweight Pattern là một trong những Pattern thuộc nhóm cấu trúc (Structural Pattern). Nó cho phép tái sử dụng đối tượng tương tự đã tồn tại bằng cách lưu trữ chúng hoặc tạo đối tượng mới khi không tìm thấy đối tượng phù hợp. Flyweight Pattern được sử dụng khi chúng ta cần tạo một số lượng lớn các đối tượng của 1 lớp nào đó. Do mỗi đối tượng đều đòi hỏi chiếm giữ một khoảng không gian bộ nhớ, nên với một số lượng lớn đối tượng được tạo ra có thể gây nên vấn đề nghiêm trọng đặc biệt đối với các thiết bị có dung lượng nhớ thấp. Flyweight Pattern có thể được áp dụng để giảm tải cho bộ nhớ thông qua cách chia sẻ các đối tượng. Vì vậy performance của hệ thống được tối ưu. Flyweight object là immutable , nghĩa là không thể thay đổi khi nó đã được khởi tạo. Hướng dẫn Java Design Pattern – Proxy Bridge Pattern trong Java – Code ví dụ Composite Pattern Hai trạng thái của Flyweight Object Trạng thái của flyweight object là một phần quan trọng trong việc thiết kế Flyweight Pattern. Mục tiêu chính của Flyweight Pattern là giảm bộ nhớ bằng cách chia sẽ các đối tượng. Điều...

By stationd
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
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
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