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

Java Serializable là gì? Serialization và Deserialization trong Java
Bài viết được sự cho phép của tác giả Trần Hữu Cương Khi lập trình với Java chắc hẳn bạn đã bắt gặp khái niệm serialize nhất là khi đọc ghi object ra file, mapping với cơ sở dữ liệu… Java Serializable là gì? Serialization trong Java là cơ chế chuyển đổi trạng thái của một đối tượng (giá trị các thuộc tính trong object) thành một chuỗi byte sao cho chuỗi byte này có thể chuyển đổi ngược lại thành một đối tượng. Quá trình chuyển đổi chuỗi byte thành đối tượng gọi là deserialization. Một object có thể serializable (có thể thực hiện Serialization) nếu class của nó thực hiện implements interface java.io.Serializable 10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java Java Developer là gì? Lộ trình để trở thành Java Developer Tại sao cần Serialization? Trong Java, khi trao đổi dữ liệu giữa các thành phần khác nhau (giữa các module cùng viết bằng Java) thì dữ liệu được thể hiện dưới dạng byte chứ không phải là đối tượng. Do đó ta cần có một cơ chế để hiểu các đối tượng được gửi và nhận. Quá trình serilization hoàn toàn độc lập với platform (không phụ thuộc vào hệ điều hành) nên việc chuyển đổi giữa byte và object giữa các module được đảm bảo. Java tuyển dụng lương cao, đãi ngộ tốt Code ví dụ Ví dụ mình có 2 module, một module thực hiện chuyển đối tượng Customer thành byte và ghi ra file .Một module thực hiện đọc byte từ file và chuyển ngược lại thành đối tượng Customer. (Trong thực tế thì 2 module có thể trao đổi qua database, network chứ không phải qua file) package stackjava. com . serializable . demo...

Sử dụng override trong Java sao cho hiệu quả?
Trong lập trình hướng đối tượng (OOP), việc ghi đè phương thức (method overriding) là một tính năng cho phép con lớp định nghĩa lại các phương thức được kế thừa từ lớp cha. Phương thức ghi đè sẽ có cùng tên và tham số với phương thức trong lớp cha, nhưng có thể có hành vi khác nhau. Từ khóa override được sử dụng trong java để chỉ ra rằng phương thức trong con lớp đang ghi đè phương thức của lớp cha. Từ khóa này giúp trình biên dịch Java kiểm tra xem phương thức được ghi đè có tuân theo các quy tắc nhất định hay không. Tìm hiểu về từ khóa override trong Java Trong Java , từ khóa override được sử dụng để ghi đè phương thức của lớp cha trong lớp con. Điều này có nghĩa là khi một phương thức được gọi từ một đối tượng của lớp con, phương thức trong lớp con sẽ được thực thi thay vì phương thức trong lớp cha. Điều này cho phép chúng ta định nghĩa lại các phương thức đã có trong lớp cha và điều chỉnh hành vi của chúng theo ý muốn. Để sử dụng từ khóa override, chúng ta cần thực hiện các bước sau: Tạo một con lớp kế thừa từ lớp cha có phương thức muốn ghi đè. Định nghĩa một phương thức mới trong con lớp có cùng tên và tham số với phương thức trong lớp cha. Sử dụng từ khóa override trước khai báo phương thức trong con lớp. Ví dụ: class Cha { public void inRa() { System.out.println("Đây là lớp cha"); } } class Con extends Cha { @Override public void inRa() { System.out.println("Đây là lớp con"); } } Trong ví dụ trên, phương thức inRa()...

Phân biệt giữa Java ME, Java SE và Java EE
Bài viết được sự cho phép của tác giả Trần Hữu Cương Java ME/SE/EE là ba phiên bản khác nhau được xây dựng dựa trên nền tảng Java. Java SE(Java Platform, Standard Edition) Java SE còn được gọi là Java Core , đây là phiên bản chuẩn và cơ bản của Java, được dùng làm nền tảng cho các phiên bản khác. Chứa các API chung (như java.lang, java.util... ) và nhiều các API đặc biệt khác. Bao gồm tất cả các tính năng, đặc trưng cơ bản của ngôn ngữ Java như biến, kiểu dữ liệu nguyên thủy, Arrays, Streams, Strings, Java Database Connectivity (JDBC)… Tính năng nổi tiếng nhất của Java là JVM cũng chỉ được xây dựng cho phiên bản này. Java SE được sử dụng với mục đích chính là để để tạo các ứng dụng cho môi trường Desktop. Top 10 câu hỏi phỏng vấn Java Developer thường gặp Internationalization và Localization trong Java Java ME(Java Platform, Micro Edition) Java ME – Đây là phiên bản được sử dụng cho việc tạo các ứng dụng chạy trên các hệ thống nhúng như thiết bị mobile và các thiết bị nhỏ. Các thiết bị sử dụng Java ME thường có các hạn chế như giới hạn về khả năng xử lý, giới hạn về nguồn điện (pin), màn hình hiển thị nhỏ… Java ME còn hỗ trợ trong việc sử dụng công nghệ nén web, giúp giảm dụng lượng sử dụng (network usage) và cải thiện khả năng truy cập internet giá rẻ. Java ME sử dụng nhiều thư viện và API của Java SE và nhiều thư viện, API của riêng nó. Tham khảo việc làm Fresher Java mới nhất trên Station D Java EE(Java Platform, Enterprise Edition) Java EE là phiên bản Enterprise của...

Tạo ứng dụng Java RESTful Client với thư viện Retrofit
Bài viết được sự cho phép của tác giả Giang Phan Trong các bài viết trước chúng ta sử dụng thư viện Jersey client , OkHttp để gọi các RESTful API. Trong bài này, tôi sẽ giới thiệu với các bạn thư viện khác là Retrofit . Giới thiệu Retrofit Retrofit là một type-safe HTTP client cho Java và Android được phát triển bởi Square. Retrofit giúp dễ dàng kết nối đến một dịch vụ REST trên web bằng cách chuyển đổi API thành Java Interface . Tương tự với các thư viện khác, Retrofit giúp bạn dễ dàng xử lý dữ liệu JSON hoặc XML sau đó phân tích cú pháp thành Plain Old Java Objects (POJOs). Tất cả các yêu cầu GET , POST , PUT , và DELETE đều có thể được thực thi. Retrofit được xây dựng dựa trên một số thư viện mạnh mẽ và công cụ khác. Đằng sau nó, Retrofit làm cho việc sử dụng OkHttp để xử lý các request/ response trên mạng. Ngoài ra, từ Retrofit2 không tích hợp bất kỳ một bộ chuyển đổi JSON nào để phân tích từ JSON thành các đối tượng Java. Thay vào đó nó đi kèm với các thư viện chuyển đổi JSON sau đây: Gson : com.squareup.retrofit2:converter-gson Jackson : com.squareup.retrofit2:converter-jackson Xem thêm các thư viện khác: https://mvnrepository.com/artifact/com.squareup.retrofit2 Sử dụng retrofit Để sử dụng Retrofit chúng ta thực hiện các bước sau: Một class object tương ứng với JSON/ XML data. Một interface dùng để định nghĩa các các phương thức request đến API. Sử dụng Annotations để mô tả yêu cầu HTTP. Tạo một Retrofit.Builder để khởi tạo các phương thức trong interface đã được định nghĩa. 8 thủ thuật khi làm việc với Object sử dụng resting và spreading API là gì?...

Giới thiệu JMS – Java Message Services
Bài viết được sự cho phép của tác giả Giang Phan Trong cuộc sống để có thể hiểu nhau thì chúng ta cần phải trao đổi thông tin với nhau, chúng ta có thể trao đổi thông tin bằng cách nói chuyện trực tiếp, qua điện thoại, email, zalo, skype, facebook, … Trong phần mềm, các component của chương trình hoặc các chương trình trong một hệ thống cũng cần trao đổi thông tin với nhau để có thể chạy đồng nhất, việc trao đổi thông tin này thông qua message (tin nhắn). Trong Java, nó cung cấp một số API cho phép các ứng dụng Java có thể tạo, gửi, nhận và đọc các message. Các API này gọi JMS (Java Message Service) API. Tìm việc làm Java mới nhất lương up to 2000 USD Giới thiệu JMS Message là gì? Message (Tin nhắn) là một phần thông tin. Nó có thể là một text, XML, JSON hoặc một Entity (đối tượng Java), … Message là dữ liệu rất hữu ích để giao tiếp giữa các hệ thống khác nhau. Messaging là gì? Messaging (nhắn tin) là việc trao đổi thông tin giữa các thành phần khác nhau trong cùng một hệ thống hoặc các hệ thống khác nhau. Nó có thể xảy ra theo cách đồng bộ hoặc không đồng bộ. Ưu điểm của nhắn tin là khả năng tích hợp các nền tảng khác nhau, làm giảm tắc nghẽn hệ thống, tăng cường khả năng mở rộng và nâng cao độ tin cậy gửi nhận tin. Có 2 mô hình nhắn tin: P2P (Point to Point) và Pub/Sub (Publisher/ Subscriber). JMS là gì? Java Message Service (JMS) API là một phần của đặc tả kỹ thuật Java Enterprice Edition (Java EE), là một API trung gian hướng...

Làm thế nào tạo instance của một class mà không gọi từ khóa new?
Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Như đã biết, trong Java để khởi tạo một instance của một class chúng ta sẽ sử dụng từ khóa new . Tuy nhiên, trong một số trường hợp chúng ta cần tạo một instance khi chỉ biết tên class hoặc private constructor hoặc không biết được số lượng tham số của constructor,… Với những trường hợp như vậy, chúng ta không thể gọi từ khóa new một cách trực tiếp mà sẽ sử dụng một số cách đặc biệt và chúng ta sẽ cùng tìm hiểu các cách giải quyết vấn đề này trong phần tiếp theo của bài viết. Sử dụng Reflection khi biết tên class Một trong những cách đơn giản và thường được sử dụng để tạo instance của một class là sử dụng kỹ thuật Reflection. Nếu bạn chưa biết về Reflection, hãy dành chút thời gian xem lại bài viết Hướng dẫn sử dụng Java Reflection . Sử dụng newInstance() khi class có constructor không có tham số và phạm vi truy cập không phải private package com.gpcoder.instance; public class Employee { private int id; private String name; public Employee() { super(); } public Employee(int id, String name) { super(); this.id = id; this.name = name; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Employee [id=" + id + ", name=" + name + "]"; } } Tạo instance sử dụng newInstance(): package com.gpcoder.instance; import java.lang.reflect.InvocationTargetException; public class NewInstanceExample { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException { // Get class based on the given class name Class<?> clazz = Class.forName("com.gpcoder.instance.Employee"); // Create a new instance with empty argument...

Tìm hiểu về đối tượng String trong Java
Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Đối tượng String, được định nghĩa trong package java.lang, là một đối tượng cơ bản trong Java. Các bạn sẽ sử dụng nó thường xuyên và là một đối tượng không thể thiếu đối với tất cả chúng ta khi lập trình với Java . Trong bài viết này, mình sẽ trình bày với các bạn sâu hơn về đối tượng String này để các bạn hiểu rõ thêm về nó các bạn nhé! Khởi tạo đối tượng String Chúng ta có nhiều cách để khởi tạo một đối tượng String, đó là: – Sử dụng toán tử new Ví dụ: String a = new String("Khanh"); – Sử dụng toán tử gán (“=”) Ví dụ: String b = "Khanh"; – Khai báo trong dấu nháy kép Ví dụ: System.out.println("Khanh"); Sự khác nhau giữa các cách khai báo trên, đó là: Nếu các bạn khai báo đối tượng String sử dụng toán tử new thì Java sẽ tạo ra những đối tượng Java riêng biệt, lưu trữ ở những vị trí khác nhau trong bộ nhớ. Do đó, khi các bạn so sánh những đối tượng này sử dụng toán tử quan hệ (“==”) thì kết quả sẽ là false. Hãy xem ví dụ sau nhé các bạn: package com.huongdanjava.javaexample; public class Example { public static void main(String[] args) { String a = new String("Khanh"); String b = new String("Khanh"); System.out.println(a == b); } } Kết quả: Nếu các bạn khởi tạo đối tượng String bằng cách sử dụng toán tử gán (“=”) thì khi so sánh những đối tượng này sử dụng toán tử quan hệ (“==”) thì kết quả sẽ là true. Hãy xem xét ví dụ sau nhé các bạn: package com.huongdanjava.javaexample; public class Example {...

Tạo ứng dụng Java RESTful Client không sử dụng 3rd party libraries
Bài viết được sự cho phép của tác giả Giang Phan Trong bài này tôi sẽ giới thiệu với các bạn cách gọi Restful web service sử dụng thư viện chuẩn java.net của Java, không sử dụng bất kỳ 3rd party libraries nào khác. Các bước thực hiện Để gọi restful web service thông qua lớp java.net chúng ta lần lượt thực hiện các bước sau: Tạo 1 java.net.URL object. Mở HttpURLConnection từ URL trên. Set các Request property cần thiết. Gửi Request data lên server (nếu có). Nhận Response từ server gửi về (nếu có). 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 chương trình tuyển dụng Java lương cao trên Station D Ví dụ tạo ứng dụng Java RESTful Client sử dụng java.net Trong ví dụ này, chúng ta sẽ gọi lại các Restful API chúng ta đã tạo ở bài viết trước “ JWT – Token-based Authentication trong Jersey 2.x “. Đầu tiên, chúng ta cần gọi API /auth để lấy token và sau đó chúng ta sẽ attach token này vào mỗi request để truy cập resource. package com.gpcoder; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpClientExample { public static final String BASE_URL = "http://localhost:8080/RestfulWebServiceExample/rest"; private static String token; public static void main(String[] args) throws IOException { token = getToken(); System.out.println("token: " + token); createOrder(); retrieveOrder(); updateOrder(); deleteOrder(); } /** * @POST http://localhost:8080/RestfulWebServiceExample/rest/auth */ private static String getToken() throws IOException { // Create A URL Object URL url = new URL(BASE_URL + "/auth"); // Open a Connection HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // Set the Request Content-Type Header Parameter connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // Set Response Format Type connection.setRequestProperty("Accept", "application/json");...

Type Query trong GraphQL với Spring Boot
Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Trong bài viết trước , mình đã giới thiệu với các bạn về GraphQL, những vấn đề mà GraphQL đã giải quyết được cho những hạn chế của RESTful Web Service. Mình cũng đã hướng dẫn sơ qua cho các bạn về cách hiện thực type Query của GraphQL với Spring Boot. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết hơn về cách hiện thực type Query này sử dụng Spring Boot các bạn nhé! Đầu tiên, mình sẽ tạo một Spring Boot project với Web và GraphQL Starter để làm ví dụ: Kết quả: Như mình đã nói trong bài viết trước, để làm việc với GraphQL, chúng ta cần định nghĩa các tập tin schema .graphqls. Mặc định thì Spring Boot sẽ scan tất cả các thư mục trong classpath src/main/resources của project để đọc các tập tin schema này. Mình sẽ tạo một thư mục tên là graphql trong thư mục src/main/resources và để các tập tin schema của GraphQL trong thư mục này. Để làm ví dụ mình đã tạo mới tập tin schema.graphqls với nội dung ban đầu đơn giản như sau: type Query { hello: String } Query này sẽ return dòng chữ “Hello World” khi chúng ta query tới! Để handle cho Query trên , chúng ta sẽ tạo mới một controller và định nghĩa một method có tên giống với tên field của type Query này, như sau: package com.huongdanjava.graphql; import org.springframework.graphql.data.method.annotation.QueryMapping; import org.springframework.stereotype.Controller; @Controller public class GraphQLController { @QueryMapping public String hello() { return "Hello World"; } } Như các bạn thấy, phương thức hello() đã được annotate với annotation @QueryMapping giúp cho Spring có thể scan và map tên method này với field của type...

Giới thiệu Feign – Tạo ứng dụng Java RESTful Client không thể đơn giản hơn
Bài viết được sự cho phép của tác giả Giang Phan Trong các bài viết trước chúng ta sử dụng thư viện Jersey client , OkHttp , Retrofit để gọi các RESTful API. Trong bài này, tôi sẽ giới thiệu với các bạn thư viện khác là Feign . Thư viện này giúp chúng ta dễ dàng hơn nữa trong phát triển ứng dụng Rest Client. Giới thiệu Feign Feign là một HTTP client cho Java, được phát triển bởi Netflix. Mục tiêu của Fiegn là giúp đơn giản hóa HTTP API Client. Tương tự với các thư viện khác, Feign giúp bạn dễ dàng xử lý dữ liệu JSON hoặc XML sau đó phân tích cú pháp thành Plain Old Java Objects (POJOs). Tất cả các yêu cầu GET , POST , PUT , và DELETE đều có thể được thực thi. Feign được xây dựng dựa trên một số thư viện mạnh mẽ và công cụ khác để xử lý các request/ response trên mạng bao gồm OkHttp, JAX-RS, Gson, Jackson, JAXB, Ribbon, Hystrix, SOAP, … Các bạn xem thêm các thư viện khác: https://mvnrepository.com/artifact/io.github.openfeign Feign hỗ trợ một số tính năng mạnh mẽ khác như: Error Handling, Retry, hỗ rợ default method, static method với interface trong java 8. 10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java API là gì? Các nguyên tắc xây dựng Rest API Xem thêm tuyển dụng Java lương cao trên Station D Sử dụng Feign Ý tưởng của Feign tương tự như Retrofit là sử dụng interface và các annotation để định nghĩa các phương thức request đến API. Với Retrofit, chúng ta còn gặp một chút phiền phức khi phải gọi xử lý Call<Respone>. Sử dụng Feign chúng ta sẽ không thấy sự...

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...

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...