Chia sẻ kiến thức

Cùng khám phá và chia sẻ các bài viết bổ ích.
Tổng 13 Blogs
Lộ trình cơ bản để trở thành Java Developer

Tạo bởi - Hi Admin

Lộ trình cơ bản để trở thành Java Developer

Ngày nay, có rất nhiều ngôn ngữ lập trình mà chúng ta có thể theo đuổi. Trong bài viết này HocLapTrinh.me sẽ nói về lộ trình học Java – một trong số những ngôn ngữ lập trình phổ biến nhất hiện nay . Sự phổ biến của Java có thể là do tính linh hoạt của nó vì nó có thể được sử dụng để thiết kế các ứng dụng tùy chỉnh nhẹ, nhanh và phục vụ cho nhiều mục đích khác nhau.Tại thời điểm viết bài viết này, theo Tiobe Index, Java đang là ngôn ngữ lập trình phổ biến thứ 2, đứng sau ngôn ngữ lập trình C. Giảm 1 bậc so với cùng thời điểm tháng 3/2020. Trên thực tế, Java là ngôn ngữ được sử dụng ở hầu hết mọi công ty, cho dù họ là công ty nhỏ hay công ty công nghệ khổng lồ như Google, Amazon, v.v. Vì vậy, trở thành một Java Developer có thể là một định hướng rất tốt cho tương lai của bạn! Và đó là lý do tại sao hôm nay HocLapTrinh.me sẽ chia sẻ những yêu cầu cơ bản để trở thành một Java Developer:1. Nắm vững Core Java SEĐầu tiên, hãy bắt đầu với Core Java ( Java SE ) và thành thạo nó càng nhiều càng tốt. Bạn nên biết và hiểu các khái niệm cơ bản như vòng lặp, mảng, toán tử và nhiều khái niệm khác. Ngoài ra, Java SE có một loạt các API thông dụng như java.lang, java.io, java.math, v.v. và ít đương nhiên bạn cần phải có kiến ​​thức cơ bản về chúng. Quan trọng hơn nữa bạn cũng nên bắt đầu học các khái niệm của OOP (Object Oriented Programmin – lập trình hướng đối tượng) vì chúng đã được biết đến nhiều trong Java và nó cũng là một kỹ thuật lập trình phổ biến nhất hiện nay.2. Tiếp tục thực hành JavaBất cứ điều gì bạn đã học trong Core Java, chỉ cần tiếp tục thực hành nó để bạn có thể viết cú pháp mà không gặp bất kỳ lỗi cơ bản nào. Ngoài ra, hãy thử đưa ra những giải pháp khác nhau cho cùng một vấn để cải thiện tư duy lập trình của bạn. Vì vậy, hãy tiếp tục coding thực hành càng nhiều càng tốt và cũng cố gắng thực hiện các dự án nhỏ về bất kỳ chủ đề nào bạn học được.3. Học Java EESau khi đã có kiến thức về Core Java bạn có thể bắt đầu chuyển sang học Java EE (Enterprise Edition), còn được gọi là Advanced Java. Khi bạn bắt đầu học Java EE, bạn có thể làm quen với việc phát triển web vì Java EE có các tính năng bổ sung như web services bao gồm các công nghệ như Servlet, WebSocket, Java Server Faces, v.v.4. Thực hiện dự án với Servlet và JSPTừ những điều bạn đã học được trong Java EE, chỉ cần kết hợp nó với các công nghệ Front End như HTML, CSS, Javascript là bạn đã có thể tạo các dự án web cho riêng mình. Ngoài ra, điều quan trọng là bạn phải thực hiện hai dự án, một với Servlet và hai là với JSP . Điều này là do nếu không thực hiện các dự án trên 2 nền tảng này, bạn sẽ không thực sự hiểu về ngôn ngữ lập trình này.5. Tìm hiểu Hibernate và Spring FrameworksKhi bạn hoàn thành cả Java SE và Java EE thì bạn có thể chuyển sang học Java Framework bao gồm Hibernate Framework và Spring Framework . Đây là những framework phổ biến nhất của Java hiện nay. Trên thực tế, hầu hết các Công ty phát triển Java ngày nay đều sử dụng các frameworks Spring như Spring Boot, Spring MVC và Spring Cloud để phát triển ứng dụng web. Hibernate framework cũng rất phổ biến để ánh xạ mô hình hướng đối tượng sang cơ sở dữ liệu quan hệ và cũng là Hibernate Query Language. Vì vậy, nếu bạn biết những frameworks này thì bạn có thể trở thành phát triển Java trong bất kỳ công ty nào.Xem thêm khóa học Java miễn phí: Khóa học lập trình Java cơ bản

Xem chi tiết

Published - Thứ Ba, 22 Feb 2022

Một số khóa học Flutter miễn phí nên học

Tạo bởi - Hi Admin

Một số khóa học Flutter miễn phí nên học

Trong bài viết này VNFS sẽ chia sẻ với các bạn một số khóa học Flutter miễn phí mà chúng ta có thể tham khảo.Dart Programming Tutorial – Full CourseTrước tiên, nếu muốn bắt đầu với Flutter bạn phải biết đến ngôn ngữ Dart. Flutter sử dụng Dart cho việc phát triển app của mình.Flutter Course – Full Tutorial for Beginners (Build iOS and Android Apps)Một khóa học ở freeCodeCamp về Flutter cho người mới bắt đầu. Đây cũng là một trong những khóa học mà tôi được giới thiệu khi bắt đầu đến với Flutter. Nó rất hiệu quả và chắc chắn sẽ rất hữu ích cho bạnLearn Flutter, Google’s groundbreaking multi-platform mobile development framework, to create apps for Android and iOS.Trong khóa học này, Nick Manning đến từ Flutter Crash Course dạy bạn cách để đến với Flutter một cách nhanh nhất và hiệu quả nhất, Nick đã là một kỹ sư Flutter từ những năm 2017 và anh ấy hiểu rất sâu về nó. Khóa học sẽ giúp bạn hiểu sâu về thực thế, hiểu rõ vấn đề một cách trực quan nhất, từng bước và từng bước.Flutter Crash CourseTrong khóa học này chúng ta sẽ được tìm hiểu cách để xây dựng một native mobile app. Định nghĩa Flutter là gì, cách để cài đặt, tạo widgets, stateless and stateful…Flutter Tutorial for BeginnersBạn sẽ khám phá ra cách để sử dụng Flutter để tạo app android và ios. Học được tất cả mọi thứ về widgets, packages, assets & asynchronous code để tạo app “Giờ thế giới”.Flutter & Firebase App BuildLại một playlist nữa về Flutter và Firebase được tạo bởi The Net Ninja. Khi tôi muốn sử dụng firebase cho ứng dụng đầu tiên của mình thì nó chính là sự lựa chọn hợp lý. Khóa học rất đầy đủ và đã giúp tôi hiểu thế nào để tích hợp Firebase vào Flutter.Trong khóa học này bạn sẽ hiểu được cách sử dụng Firebase Firestore (Real- time database) và firebase Authentication. Playlist này dành cho những người đã có một chút kiến thức với FlutterReso CoderMột kênh Youtube chuyên dụng dành riêng cho Flutter. Reso Coder đã tạo ra rất nhiều tutorials để giải thích cách hoạt động của Flutter. Một số tool mà bạn có thể sử dụng cùng Flutter rất rõ ràng đơn giản và tất nhiên bạn có thể tích hợp nó vào dự án của mình.Flutter đang làm thay đổi diện mạo của việc phát triển ứng dụng. Đừng để bị bỏ lại phía sau. Hãy học cách để phát triển những ứng dụng cross-platform dành cho di động và web.FilledStacksMột kênh Youtube chuyên về Flutter. Bạn sẽ khám phá ra tất nhiều tut về Flutter như là Firebase, UI, cấu trúc hoạt động. Và tất nhiên nó có cả những tut về web và mobile. Học cách để xây dựng một sản phẩm chất lượng từ Flutter.Code With AndreaKhóa học về Flutter. Các video bao gồm tất cả những thứ về Flutter bao gồm về cách quản lý các sate, giao diện, kiểm thử và nhiều những thứ khác. Kênh này sẽ giúp bạn trở thành một lập trình viên Flutter giỏi hơn.Xem thêm: Triển khai BLoC trong Flutter

Xem chi tiết

Published - Thứ Ba, 22 Feb 2022

Lộ trình học lập trình Flutter

Tạo bởi - Hi Admin

Lộ trình học lập trình Flutter

Flutter là nền tảng phát triển ứng dụng đa nền tảng cho iOS và Android do Google phát triển. Flutter sử dụng ngôn ngữ DART cũng do Google phát triển và flutter cũng đã được sử dụng để tạo ra các ứng dụng native cho Google.Bên dưới là lộ trình học flutter cho các bạn tham khảo. Có thể xem thêm video về học flutter của VNFS tại đây: Triển khai BLoC trong FlutterProgramming LanguageDartIDE for developmentVsCodeAndroid StudiointellijUser InterfaceWidgetsstatefull widgetstateless widgetaccessibilityInherited widgetThemingLocalizationStyleMaterialCupertionAssetsfontsimagessvgaudiovideoStatic User InterfaceViewText,Image,button raised button etcViewGroupContainer, Row, Column, Stack, Expanded, ConstrainedBoxDynamic User InterfaceListViewGridViewExpansionTitleAnimationAnimatedWidgetAnimatedBuilderAnimationControllerCurvedAnimationHeroTransformOpacitySotrageshared preferencefile storagesqlite3rd party libararieshttpdioget_itcached_network_imageFlutter_webview_plug-infont_awesome_flutterSQFLiterxdartbloc_patternBehavior ComponentsPermissionLocal NotificationPush NotificationDownload ManagerMedia PlaybackPreferenceSharingState managementsetStateProviderReduxBLoCMobXQuality AssuranceFirebaseCrashlyticsApp distributionAnalyticsGoogle play beta testsTestFlightApp CenterVersion ControlGitGithubBitbucketGitlabFirebaseFirebase AuthFirebase databaseFirebase StorageFirebase MessagingNative IntegrationAndroidAndroid StudioJavaKotlinApp SigingGoogle Play StoreIn App PurchaseiosXcodeSwiftObjective-CApple CertificationAppStoreKeep Learning and try to improve your code.Xem thêm:Một số khóa học Flutter miễn phí nên họcĐăng ký Youtube VNFS:VNFS Youtube

Xem chi tiết

Published - Thứ Ba, 22 Feb 2022

GetX Flutter – Giới thiệu và cài đặt (Phần 1)

Tạo bởi - Hi Admin

GetX Flutter – Giới thiệu và cài đặt (Phần 1)

1. Giới Thiệu về GetX trong FlutterTrong series bài viết này chúng ta sẽ tìm hiểu về GetX trong Flutter. Hiện nay có rất nhiều thư viện State Management như MobX, BLoC, Redux, Provider, v.v. GetX cũng là một micro framework mạnh mẽ cho Flutter. Nó kết hợp State Management, dependency injection và route management một cách nhanh chóng và thiết thực.Những ưu điểm của Get – State managerLink fanpage học Flutter để cập nhật thông tin mới nhất: facebook.com/VNFSChỉ update những widget cần thiết.Sử dụng ít bộ nhớ hơn so với các kiểu quản lý state khác.Chỉ cần sử dụng một component duy nhất là GetWidget thay vì lựa chọn StatefulWidget hay StateLessWidgetViệc tổ chức cấu trúc project sẽ cực kỳ clear, phần code logic được tách hẳn hoàn toàn so với UI.Tối ưu hoá bộ nhớ, Get sẽ tự động thu dọn những component không cần thiết.2. Nguyên lý hoạt độngVề nguyên lý hoạt động của Get. Những bạn nào đã quen làm việc với Rx chắc sẽ hiểu được nguyên lý hoạt động của nó một cách dễ dàng. Về cơ bản Get hoạt động cũng giống như Rx, cũng có các Observable và các component để lắng nghe thay đổi của Observable.3. Cài đặtThêm vào file pubspec.yaml:dependencies: get:Import vào những file cần sử dụng:import 'package:get/get.dart';

Xem chi tiết

Published - Thứ Ba, 22 Feb 2022

GetX Flutter – State Management với GetX (Phần 2)

Tạo bởi - Hi Admin

GetX Flutter – State Management với GetX (Phần 2)

1. Tạo Controller kế thừa từ GetxControllerTạo một file mới đặt tên controller.dart sau đó thêm mã vào file vừa tạo như sau: class Controller extends GetxController{ var count = 0.obs; @override void onInit() { super.onInit(); } increment() => count++; @override void onClose() { super.onClose(); } }2. Khởi tạo Controller trong StatelessWidgetCó một lưu ý khi chúng ta sử dụng GetX các bạn sẽ không cần quan tâm đến StatelessWidget hay StateFulWIdget nữa. Cách để chúng ta khởi tạo Controller trong StatelessWidget như sau:final Controller controller = Get.put(Controller());3. Gắn Obx vào widget cần thay đổiVà trong giao diện người dùng, khi bạn muốn hiển thị giá trị đó và cập nhật màn hình bất cứ khi nào giá trị thay đổi, chỉ cần thực hiện điều này:Obx(() => Text("${controller.count)}"));File giao diện đầy đủ sẽ như sau:class Home extends StatelessWidget { final Controller controller = Get.put(Controller()); @override Widget build(context) { return Scaffold( body: Center( child: Obx(() => Text("Clicks: ${controller.count}")) ), floatingActionButton: FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment)); } }

Xem chi tiết

Published - Wed, 23 Feb 2022

GetX Flutter – Route Management với GetX (Phần 3)

Tạo bởi - Hi Admin

GetX Flutter – Route Management với GetX (Phần 3)

1. Định tuyến không sử dụng tên routeĐịnh tuyến dễ dàng hơn với GetX. Chúng ta cần thay MaterialApp thành GetMaterialApp ở main.dartGetMaterialApp( // Before: MaterialApp( home: MyHome(), )Để chuyển đến một trang mới chúng ta sử dụng phương thức sau:Get.to(NextScreen());Đóng snackbars, dialogs, bottomsheets, hay bất cứ thứ gì có thể đóng bằng Navigator.pop(context) thì trong GetX chúng ta sử dụng cú pháp:Get.back();Điều hướng đến trang mới và không cho quay về trang hiện tại (Thường được sử dụng cho SplashScreen, Login,..):Get.off(NextScreen());Đến trang mới và xóa hết các trang cũ:Get.offAll(NextScreen());Đến trang mới và nhận dữ liệu trả về từ trang đó ngay khi back về trang hiện tại:var data = await Get.to(Payment());Trả dữ liệu về trang trước theo cú pháp:Get.back(result: 'success');2. Định tuyến sử dụng tên routeĐối với chuyển trang bằng tên thì cũng tương tự các hàm trên nhưng có thêm hậu tố Named như: toNamed, offNamed, offAllNamed, …void main() { runApp( GetMaterialApp( unknownRoute: GetPage(name: '/notfound', page: () => UnknownRoutePage()), initialRoute: '/', getPages: [ GetPage(name: '/', page: () => MyHomePage()), GetPage(name: '/second', page: () => Second()), ], ) ); }3. Truyền dữ liệu cho trang mới3.1 Truyền dữ liệu với arguments:Get.toNamed("/NextScreen", arguments: 'Get is the best');print(Get.arguments); //print out: Get is the best3.2 Dynamic urls linksDynamic urls khá quen thuộc đối với Web Developer. GetX hỗ trợ nó cho Flutter. Ta có thể sử dụng theo syntax thuộc tính:Get.offAllNamed("/NextScreen?device=phone&id=354&name=Enzo");print(Get.parameters['id']); // out: 354 print(Get.parameters['name']); // out: EnzoHoặc có thể sử dụng theo cấu trúc định sẵn như ví dụ bên dưới:GetPage( name: '/profile/:user', page: () => UserProfile(), ),Gửi dữ liệu với route được định nghĩa ở trên.Get.toNamed("/profile/34954");Nhận dữ liệu tương tự như ở trên.print(Get.parameters['user']); // out: 3495

Xem chi tiết

Published - Wed, 23 Feb 2022

khóa học viết API bằng NodeJS, Express và MongoDB

Tạo bởi - Hi Admin

khóa học viết API bằng NodeJS, Express và MongoDB

Khóa học này được VNFS cung cấp nhằm mục đích là hướng dẫn các bạn viết một RESTful API. Chúng ta sẽ xây dựng một ứng dụng Todo List đơn giản. Chúng ta sẽ xây dựng các API để tạo, liệt kê, chỉnh sửa và xóa todo list. Khóa học giúp các bạn hiểu rõ hơn về RESTful API, CRUD cũng như ôn lại các kiến thức về NodeJS, Express và MongoDB.Danh sách bài học[NodeJS API] – Bài 1: Thiết lập cấu trúc cho project[NodeJS API] – Bài 2: Tạo API thêm mới dữ liệu[NodeJS API] – Bài 3: Tạo API lấy danh sách dữ liệu[NodeJS API] – Bài 4: Tạo API lấy Todo theo ID[NodeJS API] – Bài 5: Tạo API update dữ liệu[NodeJS API] – Bài 6: Tạo API delete dữ liệu – kết thúcLink youtube của khóa học viết API bằng NodeJS, Express và MongoDB: https://vnfullstack.com/khoa-hoc-api-nodejsMã nguồn của khóa học: https://github.com/nv-thang/node_api_course

Xem chi tiết

Published - Wed, 23 Feb 2022

Điều khiển đèn LED bằng Firebase và ESP8266

Tạo bởi - Hi Admin

Điều khiển đèn LED bằng Firebase và ESP8266

Tổng quan: Điều khiển đèn LED bằng Firebase và ESP8266Sử dụng các phần cứng IoT và nền tảng đám mây , chúng ta có thể kiểm soát các thiết bị IoT từ bất kỳ nơi nào có kết nối internet. Dự án dựa trên IoT mini này đề cập đến việc điều khiển đèn LED bằng Firebase và module NodeMCU ESP8266 . Có nhiều phương pháp kiểm soát trạng thái đèn LED như sử dụng Máy chủ web, Ứng dụng Blynk hay các dịch vụ API. Nhưng trong phạm vi bài viết này VNFS sẽ chỉ tập trung vào Google Firebase. Trong bài viết này VNFS sẽ hướng dẫn các bạn cách điều khiển đèn LED bằng Firebase và ESP8266.Đầu tiên chúng ta cần biết Firebase là gì? Firebase là một dịch vụ cơ sở dữ liệu thời gian thực được cung cấp bởi Google và hoạt động trên nền tảng đám mây. Kèm theo đó là hệ thống máy chủ cực kỳ mạnh mẽ của Google. Nó giúp các lập trình phát triển nhanh các ứng dụng di động bằng cách đơn giản hóa các thao tác với cơ sở dữ liệu.Yêu cầu phần cứngSau đây là các thành phần cần thiết để thực hiện dự án này. Tất cả các thành phần có thể dễ dàng mua từ Shopee. Liên kết mua linh kiện được đưa ra bên dưới:NodeMCU ESP8266 => Link mua shopeeĐèn LED 5mm màu bất kỳ => Link mua shopeeBreadboard => Link mua shopeeĐiện trở 220 ohm => Link mua shopeeSơ đồ kết nối đèn LED bằng Firebase và ESP8266Đây là sơ đồ mạch kết nối LED và Board NodeMCU ESP8266 . Kết nối cực dương của LED với GPIO5 , tức là D1 của NodeMCU ESP8266 thông qua điện trở 220ohm như trong hình bên dưới:Cài đặt Thư viện Firebase và JSONĐể cài đăt 2 thư viện này các bạn có thể download tại link dưới đây:Thư viện firebase: https://github.com/FirebaseExtended/firebase-arduino/blob/master/src/Firebase.hThư viện Arduino Json 5.x https://github.com/bblanchon/ArduinoJsonSau khi download xong, trên Arduino IDE các bạn chọn Sketch > Include library > Add .zip > Select zip file để cài đặt 2 thư viện mà chúng ta đã tải xuống.Thiết lập CSDL FirebaseTạo một dự án firebase mới từ bảng điều khiển(console) và đi đến phần cơ sở dữ liệu. Chọn cơ sở dữ liệu thời gian thực của firebase (real-time database).Trên firebase các bạn copy “database secret”để xác thực từ Settings Panel > Service accounts.Thêm một nút(node) vào cơ sở dữ liệu firebase. Giá trị này sẽ quyết định bật hay tắt đèn LED.Code trên Arduino IDBây giờ tất cả các thiết lập đã xong, chúng ta sẽ chuyển qua bước lập trình cho ESP8266. #include  // esp8266 library #include // firebase library #define FIREBASE_HOST "your-project.firebaseio.com" //Địa chỉ của project trên firebase #define FIREBASE_AUTH "06dEpqanFg*qAwnQLwLI" // secret key lấy từ firebase #define WIFI_SSID "xxxxxxxxxxxxx" //tên wifi #define WIFI_PASSWORD "xxxxxxxxxxxxxx" //password wifi String fireStatus = ""; //Khai báo biến lưu trạng thái của đèn int led = D1; //Chân kết nối của đèn với NodeMCU void setup() { Serial.begin(9600); delay(1000); pinMode(LED_BUILTIN, OUTPUT); pinMode(led, OUTPUT); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); //kết nối với wifi Serial.print("Connecting to "); Serial.print(WIFI_SSID); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.print("Connected to "); Serial.println(WIFI_SSID); Serial.print("IP Address is : "); Serial.println(WiFi.localIP()); //In ra địa chỉ IP Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); // Kết nối tới firebase Firebase.setString("LED_STATUS", "OFF"); //Khởi tạo trạng thái của đèn trên Firebase } void loop() { fireStatus = Firebase.getString("LED_STATUS"); // Lấy trạng thái của đèn trên firebase if (fireStatus == "ON") { // Kiểm tra nếu trạng thái đèn là ON Serial.println("Led Turned ON"); digitalWrite(LED_BUILTIN, LOW); // make bultin led ON digitalWrite(led, HIGH); // make external led ON } else if (fireStatus == "OFF") { // Kiểm tra nếu trạng thái đèn là OFF Serial.println("Led Turned OFF"); digitalWrite(LED_BUILTIN, HIGH); // make bultin led OFF digitalWrite(led, LOW); // make external led OFF } else { Serial.println("Wrong Credential! Please send ON/OFF"); } }Trong phần code này mình đã note rất chi tiết các bạn có thắc mắc vui lòng để lại bình luận để được giải đáp.

Xem chi tiết

Published - Wed, 23 Feb 2022

Sự khác biệt giữa next() và nextLine() trong lập trình Java

Tạo bởi - Hi Admin

Sự khác biệt giữa next() và nextLine() trong lập trình Java

Lớp Scanner trong gói java.util được sử dụng để nhận được input của các kiểu dữ liệu nguyên thủy như int, double, String v.v.. Đây là cách dễ nhất để đọc đầu vào trong chương trình Java, mặc dù đây không phải là phương pháp hiệu quả nhất. Lớp Scanner bao gồm các phương thức next() và nextLine().Trong bài viết này, sẽ thảo luận về sự khác biệt giữa hai phương thức next() và nextLine().Phương thức next()Phương thức này nằm trong lớp Scanner và được sử dụng để có được những thông tin từ người sử dụng. Để sử dụng phương thức này, bạn cần tạo một đối tượng từ lớp Scanner. Phương thức này chỉ có thể đọc đầu vào cho đến khi gặp phải dấu cách (” “). Nó không thể đọc hai từ cách nhau bởi một khoảng trắng.Sau đây là một ví dụ về cách phương thức next() được triển khai trong Java:import java.util.Scanner;class Test {    public static void main(String[] args) {        // Creating the Scanner object        Scanner sc = new Scanner(System.in);        // Use of the next() method        String Inpt = sc.next();        System.out.println(Inpt);    }}Input: Hoc JavaOutput: HocPhương thức nextLine()Cũng giống như phương thức next(), phương thức này nằm trong lớp Scanner và được sử dụng để nhận những thông tin từ người sử dụng. Để sử dụng phương thức này, ta cũng cần khởi tạo một đối tượng từ lớp Scanner. Phương thức này có thể đọc dữ liệu đầu vào cho đến cuối dòng. Nói cách khác, nó có thể nhận dữ liệu đầu vào bao gồm cả những khoảng trắng giữa các từ cho đến cuối dòng(\n) hoặc nhấn phím Enter.Sau đây là một ví dụ về cách phương thức nextLine():import java.util.Scanner;class Test {    public static void main(String[] args) {        // Creating the object of the        // Scanner class        Scanner sc = new Scanner(System.in);        // Use of nextLine() method        String Inpt = sc.nextLine();        System.out.println(Inpt);    }} Input: Hoc JavaOutput: Hoc JavaDưới đây là bảng so sánhnext()nextLine()Đọc đầu vào cho đến ký tự khoảng trắng.Đọc đầu vào cho đến khi dòng thay đổi.Không thể đọc những từ có khoảng trắng trong đó.Có thể đọc những từ có khoảng trắng trong đó.Kết thúc việc đọc đầu vào sau khi nhận được khoảng trắng.Kết thúc việc đọc đầu vào sau khi nhận được ‘\ n’ hoặc nhấn Enter.Đặt con trỏ vào cùng một dòng sau khi đọc đầu vào.Đặt con trỏ vào dòng tiếp theo sau khi đọc đầu vào.Chuỗi thoát của next() là khoảng trắng.Chuỗi thoát của nextLine () là ‘\n’.Cú pháp là: Scanner.next ()Cú pháp là: Scanner.nextLine ()

Xem chi tiết

Published - Thứ Ba, 01 Mar 2022

Tìm kiếm
Danh mục phổ biến
Bài viết mới nhất
Làm việc với thư mục và file trong Java
Làm việc với thư mục và file trong Java
Trong các ứng dụng, bạn cần thao tác thường xuyên với tập tin (file) và thư mục (folder) trong hệ thống. Các thao tác này bao gồm: liệt kê danh sách tập tin, thư mục, thêm/đổi tên, xóa thư mục, v.v. Trong bài viết này sẽ hướng dẫn một số thao tác với tập tin và thư mục trong Java. Java cung cấp 2 class hỗ trợ những việc này bao gồm:Lớp java.io.File đại diện cho một tập tin (file) hoặc một thư mục (directory) của hệ thống, nó được đưa vào Java từ phiên bản 1.0.Lớp java.nio.file.Files cung cấp các phương thức static và native để thao tác với tập tin và thư mục, nó được bổ sung vào từ phiên bản Java 7.0. Lớp này thường được sử dụng khi maintain/optimize chương trình để tăng hiệu suất chương trình Java. Khả năng tăng hiệu suất chương trình của NIO không chỉ phụ thuộc vào hệ điều hành mà còn phụ thuộc vào phiên bản JVM, hệ thống máy chủ, ổ cứng, hay thậm chí dữ liệu.1. Đường dẫn (Path) là gì?Một hệ thống tập tin lưu trữ và tổ chức các tập tin trên một số loại phương tiện lưu trữ, thường là một hoặc nhiều ổ đĩa cứng, theo cách sao cho chúng có thể dễ dàng lấy ra.Hầu hết các hệ thống tập tin được sử dụng ngày hôm nay lưu trữ các tập tin trong một cây (hoặc cấu trúc phân cấp). Ở đầu cây là một (hoặc nhiều hơn) các nút gốc. Dưới nút gốc, có các tệp và thư mục (thư mục trong Microsoft Windows). Mỗi thư mục có thể chứa các tệp tin và các thư mục con, do đó có thể chứa các tệp và thư mục con, v.v … có khả năng lưu trữ một chiều sâu gần như vô hạn.Microsoft Windows hỗ trợ nhiều nút gốc. Mỗi nút gốc ánh xạ tới một phân vùng, chẳng hạn như C:\ hoặc D:\. Hệ điều hành Solaris (Linux) hỗ trợ một nút gốc, được biểu thị bởi ký tự dấu gạch chéo /.Một tập tin được xác định bởi đường dẫn của nó thông qua hệ thống tập tin, bắt đầu từ nút gốc. Ví dụ, tập tin statusReport trong hình trên được mô tả bằng ký hiệu sau:Trong Hệ điều hành Solaris: /home/user2/statusReportTrong Microsoft Windows: C:\home\user2\statusReportKý tự được sử dụng để phân cách các tên thư mục cho hệ thống tập tin:Hệ điều hành Solaris sử dụng dấu gạch chéo (/).Microsoft Windows sử dụng dấu gạch chéo ngược (\). Tuy nhiên, vẫn có thể sử dụng dấu gạch chéo (/) trên Microsoft Window.Đường dẫn tương đối và tuyệt đốiMột đường dẫn tuyệt đối luôn chứa các phần tử gốc và danh sách thư mục đầy đủ cần thiết để định vị tệp tin. Ví dụ, /home/user2/statusReport là một đường dẫn tuyệt đối. Tất cả thông tin cần thiết để định vị tệp tin được chứa trong chuỗi đường dẫn.Một đường dẫn tương đối cần phải được kết hợp với một đường dẫn khác để truy cập một tập tin. Ví dụ, user1/foo là một đường dẫn tương đối. Nếu không có thêm thông tin, một chương trình không thể xác định chính xác vị trí thư mục user2/statusReport trong hệ thống tập tin.2. Giới thiệu lớp Java.io.FileLớp java.io.File đại diện cho một tập tin hoặc một thư mục trong hệ thống, nó đại diện cho một đường dẫn (path). Đường dẫn này có thể không thực sự tồn tại trên hệ thống. Nếu tồn tại thì nó có thể là một thư mục (directory) hoặc là một tập tin (file).Ví dụ tạo một đối tượng File đại diện cho một đường dẫn, và kiểm tra sự tồn tại của nó, ghi ra các thông tin cơ bản của File.public static void main(String[] args) {        // Tạo một đối tượng File đại diện cho một đường dẫn    File file = new File("D:/WorkSpace/data/test.txt");    // Kiểm tra sự tồn tại.    System.out.println("Path exists : " + file.exists());    if (file.exists()) {        // Kiểm tra có phải có phải là một folder hay không?        System.out.println("isDirectory : " + file.isDirectory());        // Kiểm tra có phải là một đường dẫn ẩn hay không?        System.out.println("isHidden : " + file.isHidden());        // Lấy tên file/ folder        System.out.println("Simple Name: " + file.getName());        // Đường dẫn tuyêt đối.        System.out.println("Absolute Path: " + file.getAbsolutePath());        // Kiểm tra kích thước file:        System.out.println("Length : " + file.length() + " (bytes)");        // Thời điểm sửa lần cuối        long lastMofifyInMillis = file.lastModified(); // milliseconds        Date lastModifyDate = new Date(lastMofifyInMillis);        System.out.println("Last modify date: " + lastModifyDate);    }}3. Tạo thư mụcLớp File cung cấp 2 phương thức để tạo môt thư mục:mkdir(): Tạo thư mục cho bởi đường dẫn nếu thư mục cha tồn tại.mkdirs(): Tạo thư mục cho bởi đường dẫn, bao gồm cả các thư mục cha nếu nó không tồn tại.Ví dụ: public static void main(String[] args) {    File dir = new File("D:/WorkSpace/data/created1/child1");    System.out.println("Pathname: " + dir.getAbsolutePath());    System.out.println("Path exists:  " + dir.exists()); // false    System.out.println("Parent Path exists: " + dir.getParentFile().exists()); // false    // Với mkdir(), thư mục chỉ được tạo ra nếu thư mục cha tồn tại.    boolean created = dir.mkdir();    System.out.println("Directory created: " + created); // false    System.out.println();    File dir2 = new File("D:/WorkSpace/data/created2/child2");    System.out.println("Pathname: " + dir2.getAbsolutePath());    System.out.println("File exists: " + dir2.exists()); // false    // Với mkdirs(), thư mục được tạo ra bao gồm cả các thư mục cha nếu nó không tồn tại.    created = dir2.mkdirs();    System.out.println("Directory created: " + created); // true} 4. Xóa tập tinSử dụng phương thức delete() để xóa tập tin và thư mục. Lưu ý: phương thức delete() chỉ cho phép xóa thư mục rỗng.public static void main(String[] args) {    File file = new File("D:/WorkSpace/data/test.txt");    if (file.delete()) {        System.out.println(file.getName() + " is deleted!");    } else {        System.out.println("Delete operation is failed.");    }}5. Xóa thư mụca) Xóa thư mục rỗngpublic static void main(String[] args) {    File folder = new File("D:/WorkSpace/data/created4");    if (folder.delete()) {        System.out.println(folder.getName() + " is deleted!");    } else {        System.out.println("Delete operation is failed.");    }}b) Xóa thư mục có chưa thư mục con và tập tin bằng đệ quypublic static void main(String[] args) {    File folder = new File("D:/WorkSpace/gpcoder/data/created3");    delete(folder);}public static void delete(File file) {    if (file.isDirectory()) {        // directory is empty, then delete it        if (file.list().length == 0) {            file.delete();            System.out.println("Directory is deleted : " + file.getAbsolutePath());        } else {            // list all the directory contents            String files[] = file.list();            for (String temp : files) {                // construct the file structure                File fileDelete = new File(file, temp);                // recursive delete                delete(fileDelete);            }            // check the directory again, if empty then delete it            if (file.list().length == 0) {                file.delete();                System.out.println("Directory is deleted : " + file.getAbsolutePath());            }        }    } else {        // if file, then delete it        file.delete();        System.out.println("File is deleted : " + file.getAbsolutePath());    }}6. Đọc và ghi file trong java – Các thao tác xử lý dữ liệuBước 1: Tạo đối tượng luồng và liên kết với nguồn dữ liệu.Bước 2: Thao tác dữ liệu (đọc hoặc ghi hoặc cả hai).Bước 3: Đóng luồnga) Xử lý nhập xuất dữ liệu sử dụng luồng byteSử dụng luồng byte trong các trường hợp như nhập xuất kiểu dữ liệu nguyên thủy (như kiểu int, float, double, boolean), nhập xuất kiểu dữ liệu kiểu đối tượng (object)Ví dụ 1: Ghi dữ liệu vào d:/mydata.bin với DataOutputStreampublic static void main(String[] args) {   try {   //Bước 1: Tạo đối tượng luồng và liên kết nguồn dữ liệu   FileOutputStream fos = new FileOutputStream("d:/file/mydata.bin");   DataOutputStream dos = new DataOutputStream(fos);   //Bước 2: Ghi dữ liệu   dos.writeInt(100);   dos.writeDouble(9.5);   //Bước 3: Đóng luồng   fos.close();   dos.close();   System.out.println("Done!");  } catch (IOException ex) {    ex.printStackTrace();  } }Ví dụ 2: Đọc dữ liệu chứa trong tập tin d:/mydata.bin với DataInputStreampublic static void main(String[] args) {  try {   //Bước 1: Tạo đối tượng luồng và liên kết nguồn dữ liệu   FileInputStream fis = new FileInputStream("d:/file/mydata.bin");   DataInputStream dis = new DataInputStream(fis);   //Bước 2: Đọc dữ liệu   int n = dis.readInt();    double m = dis.readDouble();   //Bước 3: Đóng luồng   fis.close();   dis.close();   //Hiển thị nội dung đọc từ file   System.out.println("Số nguyên: " + n);   System.out.println("Số thực: " + m);  } catch (IOException ex) {    ex.printStackTrace();  } }b) Xử lý nhập xuất dữ liệu bằng luồng characterLuồng byte rất mạnh mẽ và linh hoạt. Tuy nhiên nếu bạn muốn lưu trữ file chứa văn bản Unicode thì luồng character là lựa chọn tốt nhất vì ưu điểm của luồng character là nó thao tác trực tiếp trên ký tự Unicode. Tất cả các luồng character đều được kế thừa từ 2 lớp Reader và WriterVí dụ 1: Ghi dữ liệu với FileWriterpublic static void main(String[] args) {   try {     //Bước 1: Tạo đối tượng luồng và liên kết nguồn dữ liệu     File f = new File("d:/mydata3.txt");     FileWriter fw = new FileWriter(f);     //Bước 2: Ghi dữ liệu     fw.write("Ghi dữ liệu bằng luồng character");     //Bước 3: Đóng luồng     fw.close();   } catch (IOException ex) {     System.out.println("Loi ghi file: " + ex); }}Ví dụ 2: Đọc dữ liệu với FileReaderpublic static void main(String[] args) {   try {     //Bước 1: Tạo đối tượng luồng và liên kết nguồn dữ liệu     File f = new File("d:/mydata3.txt");     FileReader fr = new FileReader(f);     //Bước 2: Đọc dữ liệu     BufferedReader br = new BufferedReader(fr);     String line;     while ((line = br.readLine()) != null){       System.out.println(line);     }     //Bước 3: Đóng luồng     fr.close();     br.close();    } catch (Exception ex) {      System.out.println("Loi doc file: "+ex);  }}

Thứ Ba, 26 Jul 2022

Hướng dẫn cài đặt môi trường Java và Eclipse
Hướng dẫn cài đặt môi trường Java và Eclipse
1 Cài đặt môi trường JDKJDK (Java Development Kit) là một bộ phát triển phần mềm để phát triển các ứng dụng trong Java. JDK bao gồm JRE và các Development Tool. Bạn có thể cài đặt nhiều phiên bản Java JDK trên cùng một máy tính. Để cài đặt môi trường JDK các bạn thực hiện theo các bước sau:Bước 1: Tải xuống JDKMở trình duyệt và tìm kiếm Tải xuống JDK 17 hoặc nhấp vào liên kết để tải xuống từ trang web Oracle (https://www.oracle.com/java/technologies/downloads/#java17). Nó sẽ hiển thị trang tải xuống JDK như trong Hình 1.Bây giờ hãy nhấp vào liên kết X64 Installer để bắt đầu tải xuống JDK 17.Bước 2 : Cài đặt JDKBây giờ thực thi trình cài đặt JDK bằng cách nhấp đúp vào nó. Nó có thể yêu cầu sự cho phép của hệ thống trước khi bắt đầu cài đặt. Nhấp vào có để cho phép trình cài đặt tự thực thi. Nó hiển thị màn hình chào mừng của trình cài đặt như được hiển thị trong dưới đây:Nhấp vào  nút Tiếp theo (Next) để bắt đầu quá trình cài đặt. Màn hình tiếp theo hiển thị các tùy chọn để thay đổi đường dẫn cài đặt. Có thể thay đổi vị trí cài đặt trên màn hình này nếu muốn. Mặc định nó sẽ được cài đặt trong ổ C như hiển thị trong dưới đây.Bây giờ hãy nhấp vào nút Tiếp theo (Next) để bắt đầu cài đặt. Đợi quá trình cài đặt diễn ra, màn hình cài đặt thành công sẽ được hiển thị như sau:Bước 3: Cài đăt biến môi trường (Environment Variables)Đầu tiên chúng ta mở của sổ RUN của window (bạn nào không biết thì nhấn tổ hợp phím window+R) sau đó nhập vào sysdm.cpl xong nhấn Enter. Tiếp đến chọn thẻ Advanced => Environment Variables như hình bên dưới:Bây giờ hãy nhấp vào nút Environment Variables  > thêm JAVA_HOME & Đường dẫn như được hiển thị trong các hình ảnh dưới đây:Bây giờ chúng ta phải thêm Java Path. Nếu biến Path đã có thì chúng ta chỉ cần nhấp vào nút  Edit…  > sau đó nhấp vào  nút New để thêm đường dẫn như hình bên dưới.Bước 4: Xác minh cài đặt JavaĐể xác minh cài đặt, hãy mở dấu nhắc lệnh ( phím Win + R  và gõ  cmd ), sau đó nhập  java -version  và nhấn phím Enter.Xin chúc mừng! Bạn đã được cài đặt thành công Bộ phát triển Java (JDK) 17 trên hệ thống Windows của mình.

Mon, 27 Tháng sáu 2022

Tìm hiểu sự khác biệt giữa OOP trong C++ và Java
Tìm hiểu sự khác biệt giữa OOP trong C++ và Java
Đặc điểmC++JavaNgôn ngữ thuần OOPKhông phải là ngôn ngữ thuần OOP, được phát triển từ C với tên là C++  hay được gọi là “C với các lớp”.Java là ngôn ngữ thuần OOP. Nghĩa là thành phần nào nó cũng thuộc về lớp, nằm trong lớp.Phạm vi truy cậpC++ có 3 phạm vi truy của cập của thuộc tính và phương thức: private, protected, publicJava mở rộng hơn C++ có 4 phạm vi truy cập: private, default, protected, public.Nạp chồng toán tửC++ có phép chúng ta nạp chồng các toán tử như toán tử vào ra << >>, + – * / hay -= += /= */.Java không cho phép nạp chồng toán tử. Mà chỉ có toán tử + cho phép nối hai chuổi.Hỗ trợ đa kế thừaC++ hổ trợ đa kế thừa, nghĩa là một class có kể kế thừa nhiều lớp dẫn xuất.Java không cho phép bạn đa kế thừa từ nhiều lớp, mà chỉ kế thừa 1 lớp và được implements nhiều interfaceHỗ trợ interfaceC++ không tồn tại khái niệm interfaceJava hỗ trợ interfaceLớp vô sinhC++ không có lớp vô sinh, nghĩa là lớp dẫn xuất được tạo ra thì các lớp con có thể kế thừaJava có lớp vô sinh khi chúng ta đánh dấu final cho lớp. Khi đó lớp này sẽ không có lớp nào kế thừa từ nó.Hàm bạn, lớp bạnC++ có hổ trợ hàm bạn, lớp bạnJava không hổ trợ hàm bạn, lớp bạnLớp cha của mọi lớpMột lớp trong C++ được tạo ra và chưa kế thừa từ lớp nào thì nó không có lớp cha.Mặc định trong Java khi một lớp được tạo ra thì cha của nó chính là lớp Object. Lớp Object này là cha của mọi lớp trong Java.Tổ chức trong classC++ chúng ta có thể gom nhóm những thuộc tính hay phương thức có cùng phạm vi truy cập với nhau. Ví dụpublic:int a;int b;C++ định nghĩa các prototype trong file .h và định nghĩa thân các method trong file .cppTrước mỗi method hay thuộc tính chúng ta phải chỉ định phạm vi truy cập. Nếu không chỉ định thì Java hiểu đó là defaut.Java khai báo và định nghĩa method trong một file .javaPhạm vi truy cập mặc địnhTrong C++ nếu chúng ta không chỉ rõ phạm vi truy cTrong Java nếu không chỉ rõ tường mình thì mặc định thuộc tính hay phương thức đó sẽ có phạm vi truy cập là default.Phạm vi truy cập protectedPhạm vi truy cập là protected trong C++ chỉ truy cập được ở trong class định nghĩa và ở lớp conPhạm vi truy cập protected trong Java được truy cập ở Java là trong class định nghĩa, trong cùng package và lớp con trong cùng package.Gọi lại phương thức của lớp chaC++ sử dụng cú pháp <class_name>::method();Java sử dụng từ khóa super với cú pháp:Super.method();Gọi lại constructor của lớp C++ không cho phép gọi lại contructor khác trong một contructor khác của lớp Java cho phép gọi lại contructor của lớp trong một contructor khác với cú pháp:this(parameter) Kiểu kế thừa Trong C++ có các kiểu kế thừa lớp là:Private, protected, public Trong Java chỉ có kiểu kế thừa là public. Phương thức vô sinh Trong C++ không tồn tại phương thức vô sinh. Nghĩa là có thể override lại ở lớp con. Trong Java nếu phương thức được đánh dấu là final thì ở lớp con không thể override lại được. Phương thức thuần túy ảo C++ có khái niệm phương thức thuần túy ảo. Với cú pháp: return type  name_method()= 0;Java không có khái niệm phương thức thuần túy ảo. Lớp ảo C++ nhận biết lớp ảo khi lớp đó có các phương thức đánh dấu với từ khóa virtual hoặc phương thức thuần ảo Java nhận biết lớp ảo khi khai báo lớp có từ khóa abtract và có những phương thức được đánh dấu là abstract.Phương thức ảoPhương thức ảo trong C++ được đánh dấu bởi từ khóa virtual và có định nghĩa bên trong thân hàm.Phương thức ảo trong Java được đánh dấu bởi từ khóa abstract. Những phương thức này không có định nghĩa thân hàm, kết thúc bằng dấu ‘;’Tổ chức class như thư mụcTrong C++ chúng ta nhắc đến namespace để định nghĩa các lớp trong này.Java định nghĩa các class trong các package.Lập trình đồng bộC++ không hổ trợ lập trình đồng bộ cho class.Java hổ trợ lập trình đồng bộ với từ khóa synchronized.Hàm mainHàm main của C++ không thuộc về lớp nào. Là một hàm cục bộHàm main trong java cũng nằm trong một class vì java là ngôn ngữ thuần OOP.DestructorC++ có destructor. Người lập trình phải chủ động thu dọn vùng nhớ đã cấp phát.Java không có khái niệm destructor mà có bộ thu gom rác gọi là GC (garbage collection). Khi một đối tượng không còn tham chiếu nữa thì bộ thu gom rác sẽ hoạt động.

Thứ Ba, 01 Mar 2022

Tất cả Blog