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

Nhập/Xuất Trên Console
Bài viết được sự cho phép của tác giả Nhựt Danh Bài viết hôm nay sẽ hướng dẫn bạn sử dụng một “công cụ” để các bạn tiến hành nhập/xuất thông qua Console . Công cụ này giúp cho các bạn sau khi nhập dữ liệu vào từ bàn phím, nó sẽ lấy dữ liệu được nhập này rồi sau đó chuyển vào chương trình của bạn, để chương trình xử lý, rồi xuất ra kết quả thông qua màn hình Console . Sau bài học hôm nay thì các bạn có thể test thoải mái các dòng code, để hỗ trợ tốt vào quá trình học Java của bạn. Nhưng trước hết, chúng ta hãy cùng tìm hiểu sâu hơn về khái niệm nãy nhờ được nhắc đi nhắc lại này. Khái Niệm Console Đầu tiên bạn có thể hiểu Console chúng như là một bảng điều khiển chuyên dụng. Như các Game Console chính là các thiết bị chuyên cho việc điều khiển game. Hay các trang web quản lý như quản lý nhân viên cũng có thể coi là các Console chuyên dụng cho việc quản lý. Trong ngôn ngữ lập trình, Console được biết đến như là một cách điều khiển ứng dụng đơn thuần nhất thông qua các dòng text (dòng lệnh), nó được phân biệt với điều khiển bằng UI. Và Console trong chương trình học của chúng ta là hình minh họa dưới đây, ở các bài làm quen sơ sơ trước, khi bạn thực thi chương trình thì cũng đã biết tới cửa sổ Console này rồi đúng không nào. Màn hình Console trong InteliJ Nhập Trên Consolse Chúng ta đang nói đến các cách thức để bạn nhập dữ liệu từ Console . Để bắt đầu, bạn hãy mở InteliJ lên....

Cùng tìm hiểu về Stream trong Java 8
Bài viết được sự cho phép của tác giả Kiên Nguyễn Quay trở lại với chuỗi bài Java Stream , hôm nay do đang không có task nên mình tranh thủ viết bài (kẻo nhàn cư vi bất thiện ). Lúc đầu thì tính là không viết dài, nhưng vì giật tít bài viết ghê quá, nên mình sẽ cố gắng viết hết tất cả, từ khái quát, bản chất cho tới hiệu năng, …. Tuy hơi dài nhưng chắc là cũng đáng để đọc, mục tiêu của mình khi viết bài này là mong rằng chỉ đọc only bài này, các bạn đã thật sự hiểu sâu, nắm chắc về mặt bản chất của Stream , qua đó từ từ trở thành Senior Java Developer . Viết có hay ho gì không mà PR ghê thế?. Bố đọc mà không hiểu lại close mẹ tab bây giờ! Úi, đừng close tab mà tội nghiệp em nó, vào bài ngay đây. Xem thêm nhiều việc làm Java hấp dẫn trên Station D 1. Stream là gì? 1.1 Một câu chuyện nhỏ và định nghĩa. Chuyện rằng ngày nảy ngày nay, ở phường 3, quận Tân Bình có thằng Tèo , nhà giàu tổ bố, nhà cực nhiều xe, nó có một List 10 chiếc xe với thông tin ngày bảo hành gần nhất. Đến hạn bảo dưỡng, vì đ*o lành nghề IT nên Tèo nhờ Tồ (kỹ sư công nghệ thông tắc hệ thống thoát nước) kiểm tra xem xe nào đến hạn bảo hành. Với số lượng 10 chiếc, Tồ nhanh trí sử dụng Iterator next() kiểm tra trên từng chiếc xe, mọi việc đơn giản, Tồ lụm 2 củ. Qua hôm sau, thằng Tí kế bên kêu thằng Tồ tới làm vố này to, Tồ nhanh chân đề...

Lập trình game với Java cho người mới bắt đầu
Bài viết được sự cho phép của tác giả Lê Hồng Kỳ Lập trình game với java dành cho người mới bắt đầu sẽ trình bày những kiến thức cũng như những xử lý đặc thù khi lập trình game như xử lý va chạm, xử lý chuyển động, xử lý âm thanh, xử lý vòng lặp game,… Các bạn lưu ý, để học tốt bài này người học phải có kiến thức về lập trình với ngôn ngữ Java . Trong bài học này, người học sẽ dùng ngôn ngữ Java để thiết kế giao diện game, cài đặt xử lý game. Chúng ta hãy bắt đầu bài học bằng một game nhỏ (mini game) với tựa là Mini Tennis. Game này có luật chơi rất đơn giản. Quả bóng di chuyển từ trên xuống dưới. Nếu đụng biên dưới, trò chơi kết thúc. Người chơi sẽ sử dụng 2 phím mũi tên để di chuyển thanh ngang qua trái/phải sao cho quả bóng không được đụng biên dưới. Lập trình game với java – Nội dung bài học Đồ họa (Graphic) Chuyển động và lặp lại (Animation and loop) Nhân vật (Sprite) Sự kiện (Event) Va cham (Collision) Âm thanh (Sound) Top 5 Ngôn Ngữ Lập Trình Game Không Thể Bỏ Qua 2024 Mẫu bảng mô tả công việc lập trình Game Lập trình game với java – Đồ hoạ trong game Để vẽ một cái gì đó, trước tiên chúng ta cần một bề mặt để vẽ. Đó chính là JPanel. Khi vẽ một đối tượng nào đó, chúng ta phải xác định được toạ độ (x, y) và kích thước của đối tượng đó. Phần code dùng để vẽ các hình oval và hình chữ nhật public class Game extends JPanel { public void paint(Graphics g)...

Top 3 phần mềm giả lập Java trên Android tốt nhất
Vào khoảng thời gian những năm 2010, cách đây hơn 10 năm, khi mà các thiết bị smartphone chạy hệ điều hành Android hay iOS chưa quá phổ biến, thì cũng là thời kỳ vàng son của các game Java trên điện thoại di động còn bàn phím số. Ngày nay với việc smartphone chạy các hệ điều hành chuyên biệt, không hỗ trợ cài đặt, chạy các ứng dụng viết bằng Java; thì để trải nghiệm lại những tựa game được xem là bầu trời tuổi thơ của thế hệ 8x, 9x chúng ta cần đến các ứng dụng giả lập Java trên smartphone. Bài viết hôm nay chúng ta cùng điểm qua một số các ứng dụng giả lập Java trên Android phổ biến hiện nay nhé. Giả lập Java là gì? Java là 1 ngôn ngữ lập trình bậc cao được phát triển bởi Sun Microsystems (hiện tại thuộc sở hữu của Oracle) từ những năm 1995. Java với sự đa năng của nó có thể được sử dụng để viết được các phần mềm dành cho môi trường Desktop, Web và cả các hệ thống nhúng, thiết bị mobile. Trong đó 3 phiên bản Java khác nhau được xây dựng để phục vụ cho từng mục đích chuyên biệt: Thời điểm smartphone chạy hệ điều hành Android hay iOS chưa phổ biến thì để viết một ứng dụng trên thiết bị di động, Java là một lựa chọn phổ biến với phiên bản J2ME (Java Platform Micro Edition). Những ứng dụng được viết ra với file có đuôi .jar, .jad chạy trên các hệ điều hành mobile phổ biến trước đây như Symbian. Android mặc dù được viết bằng Java, nhưng nó không hỗ trợ J2ME hay J2SE, vì vậy nó không thể chạy trực tiếp...

Hướng dẫn Java Design Pattern – Transfer Object
Bài viết được sự cho phép của tác giả Giang Phan Transfer Object Pattern là gì? Transfer Object/ Data Transfer Object Pattern là một dạng Architectural Design Pattern, được sử dụng khi chúng ta muốn truyền dữ liệu qua lại giữa các tầng trong ứng dụng, giữa Client – Server. Data Transfer Object (DTO) còn được gọi là Value Object (VO). Transfer Object đơn giản là một POJO (Plain Old Java Object), chỉ chứa các getter/ setter method và có thể có implement serialize để truyền tải dữ liệu thông qua network. DTO hoàn toàn không chứa behavior/ logic, chỉ được sử dụng để truyền dữ liệu và map dữ liệu từ các Domain Model trước khi truyền tới Client. Trong các ứng dụng đơn giản, các Domain Model thường có thể được sử dụng lại trực tiếp dưới dạng DTO và được truyền trực tiếp đến lớp hiển thị, do đó chỉ có một Data Model thống nhất. Đối với các ứng dụng phức tạp hơn, chúng ta không muốn hiển thị toàn bộ Domain Model cho Client, do đó, việc ánh xạ từ các Domain Model sang DTO là cần thiết. Tìm Java job lương cao trên Station D ngay! Cài đặt Transfer Object Pattern như thế nào? Các thành phần tham gia Transfer Object Pattern: Business Object : là một Business Service, tạo Transfer Object và trả nó về Client khi cần thiết. Nó cũng có thể nhận dữ liệu từ Client trong một Transfer Object và gửi đến Server để cập nhật vào database. Transfer Object : là một POJO, chỉ chứa các getter/ setter method. Client : người sử dụng ứng dụng. CQRS pattern là gì? Ví dụ dễ hiểu về CQRS Pattern Hướng dẫn Java Design Pattern – Builder Ví dụ sử dụng Transfer...

Các thuật toán tìm ước chung lớn nhất trong Java
Bài viết được sự cho phép bởi tác giả Sơn Dương Nằm trong series học thuật toán – cấu trúc dữ liệu và giải thuật , chúng ta cùng nhau tìm hiểu các phương pháp để tìm ước chung lớn nhất, code được minh họa bằng Java . Trước hết, chúng ta cùng nhau tìm hiểu lý thuyết trước đã nhé. Định nghĩa ước chung lớn nhất Trước khi hiểu ước chung lớn nhất, bạn cần phải biết ước số là gì? Đơn giản lắm, ước số của một số nguyên a là số nguyên b khi và chỉ khi số a chia hết cho số b. Ước chung lớn nhất (GCD – Greatest Common Divisor) của hai hay nhiều số nguyên là số lớn nhất trong tập hợp ước chung. Ngược với ước chung lớn nhất là bội số chung nhỏ nhất. Mình sẽ dành riêng bài viết sau để hướng dẫn sử dụng thuật toán để tìm bội số chung nhỏ nhất. Các bạn đón đọc nhé. Ứng dụng thực tế của ước chung lớn nhất (UCLN) Với nhiều ứng dụng thực tế, ước chung lớn nhất không chỉ dùng trong lĩnh vực toán học, mà cả các lĩnh vực khác nữa, liên quan đến nhiều sự vật, hiện tượng trong đời sống. Mình lấy ví dụ minh họa nhé: Tôi chán làm dev, bỏ về quê chăn thỏ làm giàu. Đố bạn biết tôi đang nuôi bao nhiêu con thỏ? Dữ liệu cho bạn đây: Hàng này tôi luôn bỏ ra 6 cây súp lơ, 8 củ cà rốt làm thức ăn cho chúng. Mỗi con thỏ đều được thưởng thức cả súp lơ và cà rốt. Trong đó, số lượng súp lơ và cà rốt ăn được phải bằng nhau. Tất nhiên, không được bỏ thừa...

Từ khóa super trong Java: Các ví dụ minh họa chi tiết
Trong ngôn ngữ lập trình java , từ khóa super đóng một vai trò quan trọng trong việc làm việc với các lớp và mối quan hệ kế thừa. Từ khóa này cho phép chúng ta truy cập đến các thành viên (biến và phương thức) của lớp cha từ lớp con. Trong bài viết này, Station D sẽ cùng bạn tìm hiểu về cách sử dụng từ khóa super trong Java và tại sao nó lại quan trọng đối với tính kế thừa. 1. Mở đầu Khi bạn tạo ra một lớp con từ một lớp cha, lớp con sẽ kế thừa tất cả các thuộc tính và phương thức của lớp cha. Điều này có nghĩa là bạn có thể sử dụng các thành viên này trong lớp con mà không cần phải định nghĩa lại chúng. Tuy nhiên, trong một số trường hợp, bạn có thể muốn truy cập đến các thành viên của lớp cha từ lớp con. Đây là lúc mà từ khóa super sẽ trở nên hữu ích. 2. Từ khóa super trong hàm khởi tạo Hàm khởi tạo trong Java được sử dụng để khởi tạo một đối tượng khi nó được tạo. Trong các lớp con, từ khóa super được sử dụng bên trong hàm khởi tạo để gọi đến hàm khởi tạo của lớp cha. Điều này đảm bảo rằng các thuộc tính và hành vi của lớp cha được thiết lập trước khi lớp con thực hiện khởi tạo thêm. Cú pháp cơ bản: public class LớpCon extends LớpCha { public LớpCon() { super(); // Gọi đến hàm khởi tạo mặc định của LớpCha } public LớpCon(Tham số1, Tham số2) { super(Tham số1, Tham số2); // Gọi đến hàm khởi tạo cụ thể của LớpCha } } Trong ví dụ...

Hướng dẫn tạo Gradle Project Java bằng dòng lệnh CMD
Bài viết được sự cho phép của tác giả Trần Hữu Cương Trong bài này mình sẽ thực hiện tạo Project Java bằng Gradle trên giao diện dòng lệnh, các bạn có thể thực hiện bằng cmd/powershell trên windows hoặc terminal trên linux. Hướng dẫn tạo Gradle Project Java bằng dòng lệnh cmd Đầu tiên tạo folder chứa Project, ví dụ mình tạo folder GradleHello sau đó di chuyển tới folder vừa tạo Để tạo project gradle ta dùng lệnh gradle init Sau khi chạy lệnh gradle init , nó sẽ hiện ra danh sách các loại project. Để tạo project Java thì các bạn chọn java-application Các câu hỏi sau đó thì các bạn có thể bỏ qua (để nó chọn mặc định – default) bằng cách ấn enter Kết quả project GradleHello được tạo ra như sau: Trong đó: folder gradle dùng để wrapper các file folder src/main/java chứa mã nguồn java folder src/test/java là folder chứa các file test java Tìm Java job lương cao trên Station D Các file khác: file settings.gradle dùng để thiết lập các thông tin của project như tên project /* * This file was generated by the Gradle 'init' task. * * The settings file is used to specify which projects to include in your build. * * Detailed information about configuring a multi-project build in Gradle can be found * in the user manual at https://docs.gradle.org/5.4/userguide/multi_project_builds.html */ rootProject. name = 'GradleHello' file build.gradle chứa thông tin cấu hình gradle như plugin, repository, dependency… Ví dụ mainClassName = 'GradleHello.App' tức là khi chạy project nó sẽ chạy file App.java trong package GradleHello plugins { // Apply the java plugin to add support for Java id 'java' // Apply the application plugin to add support for building an application id 'application' }...

Hướng dẫn Java Design Pattern – Proxy
Bài viết được sự cho phép của tác giả Giang Phan Khi cần điều khiển truy nhập tới một đối tượng được thực hiện từ quá trình khởi tạo nó cho tới khi thực sự cần sử dụng nó. Hoặc cần bảo vệ quyền truy xuất vào các phương thức của object thực. Trong trường hợp như vậy, ta nên dùng mẫu thiết kế Proxy . Proxy Pattern là gì? Provide a surrogate or placeholder for another object to control access to it. Proxy Pattern là một trong những Pattern thuộc nhóm cấu trúc (Structural Pattern). Proxy có nghĩa là “ủy quyền” hay “đại diện”. Mục đích xây dựng Proxy pattern cũng chính vì muốn tạo ra một đối tượng sẽ ủy quyền, thay thế cho một đối tượng khác. Proxy Pattern là mẫu thiết kế mà ở đó tất cả các truy cập trực tiếp đến một đối tượng nào đó sẽ được chuyển hướng vào một đối tượng trung gian (Proxy Class). Mẫu Proxy (người đại diện) đại diện cho một đối tượng khác thực thi các phương thức, phương thức đó có thể được định nghĩa lại cho phù hợp với múc đích sử dụng. Để đơn giản hơn bạn có thể nghĩ đến khái niệm HTTP proxy trong mạng máy tính, nó là một gateway giữa trình duyệt (client) và máy chủ (server). HTTP proxy giúp nâng cao trải nghiệm người dùng, tăng tốc với lưu đệm các dữ liệu, loại bỏ các trang quảng cáo, giới hạn các vùng thông tin được xem… Proxy Pattern cũng có chung một mục đích như với HTTP proxy. Proxy Pattern còn được gọi là Surrogate (thay thế) hoặc Placeholder (trình giữ chỗ). Hệ thống 23 mẫu Design Patterns Design pattern là gì? Tại sao nên sử dụng Design...

Cơ bản về GraphQL trong Java
Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Trong bài viết Giới thiệu về GraphQL , mình đã giới thiệu với các bạn sơ qua về cách xây dựng một GraphQL server sử dụng Spring Boot. Về bản chất thì Spring Boot đã sử dụng thư viện GraphQL Java và wrap tất cả mọi thứ behind the scenes liên quan đến việc xử lý một câu query của GraphQL của thư viện này rồi. Trong bài viết này, mình sẽ trình bày với các bạn một số kiến thức cơ bản về GraphQL và cách mà thư viện GraphQL Java xử lý một câu query như thế nào các bạn nhé! Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ: GraphQL Java dependency như sau: <dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-java</artifactId> <version>18.2</version> </dependency> Nói về GraphQL, như mình đã đề cập trong bài viết trước , chúng ta phải nói về các type. Ngoài các type định nghĩa cho các đối tượng data mà chúng ta sẽ provide cho client, ví dụ như: type Student { id: ID code: String name: String age: Int address: String clazz: String } GraphQL còn có 3 type đặc biệt là Query, Mutation và Subscription. Trong mỗi type, chúng ta sẽ định nghĩa các fields, và trong mỗi field, chúng ta sẽ có các sub-fields. Để định nghĩa kiểu dữ liệu cho các fields hay sub-fields, các bạn có thể sử dụng các built-in scalar types (https://graphql.org/learn/schema/#scalar-types), định nghĩa enum types (https://graphql.org/learn/schema/#enumeration-types) hoặc định nghĩa các object types như ví dụ ở trên. Chúng ta có thể định nghĩa một field là non-null sử dụng dấu chấm than, được khai báo phía sau kiểu dữ liệu của field hoặc sub-field, ví dụ như: type Student { id: ID! code:...

Những điểm mới của Java 8 (phần 1: Lambda expression)
Bài viết được sự cho phép của smartjob.vn Vào quý I năm 2014, Java 8 được phát hành với nhiều ưu điểm mới. Station D xin giới thiệu những điểm mới mẻ này đến các bạ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 Những mã xấu mà Java 8 có thể khử Xem thêm việc làm Java lương cao trên Station D Khởi tạo thực thể Nhân viên (Employee) có 3 thuộc tính là tên, tuổi và mức lương: package com.smartJob.demo; import java.math.BigDecimal; public class Employee { // Tên của nhân viên. String name; // Tuổi. Integer age; // Lương của nhân viên. BigDecimal salary; public Employee() { } public Employee(String name, BigDecimal salary, Integer age) { super(); this.name = name; this.salary = salary; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public BigDecimal getSalary() { return salary; } public void setSalary(BigDecimal salary) { this.salary = salary; } } Mục tiêu của chúng ta là sắp xếp nhân viên theo 1 trong 3 tiêu chí: tên, tuổi hay mức lương. Với Java 7, dùng 2 class là java.util.Collections và java.util.Comparator để so sánh và sắp xếp: package com.smartJob.demo; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Sorting { // Khởi tạo cấu trúc dữ liệu. private static List getEmployees() { List result = new ArrayList(); result.add(new Employee("VyDN", new BigDecimal("750000"), 29)); result.add(new Employee("AnhHT", new BigDecimal("800000"), 23)); result.add(new Employee("ConNV", new BigDecimal("10000000"), 22)); result.add(new Employee("KhanhND", new BigDecimal("17500000"), 26)); return result; } // Tiện ích hỗ trợ in kết quả ra màn hình. private static void printResult(List listEmployees) { for (Employee employee :...

Thông não Java Design Pattern – Dependency Injection
Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh Với lập trình hướng đối tượng, chúng ta thường xuyên làm việc với rất nhiều class trong một chương trình, các class được liên kết với nhau theo một mối quan hệ nào đó. Dependency là một loại quan hệ giữa 2 class mà trong đó một class hoạt động độc lập và class còn lại phụ thuộc bởi class kia. Sự phụ thuộc chặt chẽ này gây rất nhiều khó khăn khi hệ thống cần thay đổi, nâng cấp. Để giải quyết vấn đề này chúng ta có thể sử dụng Dependency Injection (DI) , một dạng design pattern được thiết kế nhằm ngăn chặn sự phụ thuộc nêu trên. DI – Dependency Injection Dependency Inversion Principle (DIP), Inversion of Control (IoC), Dependency Injection (DI) là gì Trước khi bắt đầu với Dependency Injection, các bạn hãy dành chút thời gian xem lại nguyên lý SOLID trong OOP . Nguyên lý cuối cùng, tương ứng với chữ D trong SOLID chính là DIP – Dependency Inversion Principle (nguyên lý đảo ngược sự phụ thuộc). Nội dung của nguyên lý này như sau : Các module cấp cao không nên phụ thuộc vào các module cấp thấp. Cả 2 nên phụ thuộc vào abstraction . Interface (abstraction) không nên phụ thuộc vào chi tiết, mà ngược lại, chi tiết nên phụ thuộc vào abstraction. Các class giao tiếp với nhau thông qua interface, không phải thông qua implementation. Chúng ta thường hay lẫn lộn giữa các khái niệm Dependency Inversion Principle (DIP), Inversion of Control (IoC), Dependency Injection (DI) . Ba khái niệm này tương tự nhau, tất cả đều hướng đến một mục đích duy nhất là tạo ra ứng dụng ít kết dính (loosely coupling), dễ...