پیش از ورود به مبحث DSA، لازم است پایههای خود را در زبان جاوا تقویت کنید:
۱. تسلط بر مفاهیم برنامهنویسی شیءگرا شامل Abstraction، Encapsulation، Inheritance و Polymorphism
۲. آشنایی با Collections Framework شامل List، Set و Map
۳. یادگیری مدیریت استثناها (Exception Handling)
۴. تمرین کار با Java Streams و Lambda Expressions
۵. توانایی نوشتن کد تمیز، ماژولار و قابل تست
آرایهها و رشتهها:
۱. پیدا کردن بیشترین مجموع یک زیرآرایه
۲. یافتن تمام زیررشتههایی که پالیندروم هستند
۳. پیادهسازی مسئله «دو جمع» (Two Sum)
۴. پیادهسازی الگوریتم Kadane برای بیشترین مجموع زیرآرایه
۵. پیدا کردن عدد گمشده در یک آرایه از اعداد صحیح
۶. ادغام دو آرایه مرتب در یک آرایه مرتب
۷. بررسی اینکه آیا یک رشته پالیندروم است یا نه
۸. یافتن اولین کاراکتر غیرتکراری در یک رشته
۹. حذف عناصر تکراری از یک آرایه مرتب
لیستهای پیوندی:
۱۰. برعکس کردن یک لیست پیوندی
۱۱. شناسایی حلقه در لیست پیوندی
۱۲. پیدا کردن عنصر میانی یک لیست پیوندی
۱۳. ادغام دو لیست پیوندی مرتب
۱۴. پیادهسازی پشته با استفاده از لیست پیوندی
۱۵. یافتن نقطه اشتراک دو لیست پیوندی
پشتهها و صفها:
۱۶. پیادهسازی پشته با آرایه
۱۷. پیادهسازی پشتهای که عملیات push، pop، top و بازیابی حداقل عنصر را انجام دهد
۱۸. پیادهسازی صف حلقهای (Circular Queue)
۱۹. طراحی پشتهای که عملیات push، pop، top و بازیابی بیشترین عنصر را پشتیبانی کند
۲۰. طراحی صف با استفاده از پشتهها
درختها و درختهای جستجوی دودویی:
۲۱. یافتن ارتفاع یک درخت دودویی
۲۲. یافتن کمترین اجداد مشترک دو گره در یک درخت دودویی
۲۳. بررسی اینکه آیا یک درخت دودویی یک درخت جستجوی دودویی معتبر است یا نه
۲۴. سریالسازی و دیسریالسازی یک درخت دودویی
۲۵. پیادهسازی پیمایش Inorder در یک درخت دودویی
۲۶. یافتن قطر یک درخت دودویی
۲۷. تبدیل یک درخت دودویی به آینه آن
گرافها:
۲۸. پیادهسازی جستجوی عمقی (DFS)
۲۹. پیادهسازی جستجوی سطحی (BFS)
۳۰. یافتن کوتاهترین مسیر بین دو گره در یک گراف بدون وزن
۳۱. شناسایی حلقه در یک گراف بدون جهت با استفاده از DFS
۳۲. بررسی دوبخشی بودن یک گراف (Bipartite)
۳۳. یافتن تعداد مؤلفههای همبند در یک گراف بدون جهت
۳۴. یافتن پلها (Bridges) در یک گراف
مرتبسازی و جستجو:
۳۵. پیادهسازی مرتبسازیهای حبابی، درجی، انتخابی و ادغامی (Bubble, Insertion, Selection, Merge Sort)
۳۶. پیادهسازی مرتبسازی سریع (Quicksort)
۳۷. پیادهسازی جستجوی دودویی (Binary Search)
۳۸. پیادهسازی جستجوی درونیابی (Interpolation Search)
۳۹. یافتن kامین عنصر کوچکتر در یک آرایه
۴۰. شمارش تعداد وارونگیها (Inversions) در یک آرایه — وارونگی زمانی رخ میدهد که دو عنصر نسبت به ترتیب صحیح جابهجا باشند
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
RESTful API.pdf
943.4 KB
آشنایی با RESTful API در Java
در این PDF به صورت خلاصه و کلی با RESTful API در زبان Java آشنا میشوید.
➡️ اشتراک 👍 لایک 💬 کامنت
#جاوا #java #restful
در این PDF به صورت خلاصه و کلی با RESTful API در زبان Java آشنا میشوید.
⚡️ @javapro_ir✈️ @group_javapro
#جاوا #java #restful
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😍3
✨ مسیر واقعی موفقیت ✨
نه یک خط صافه⛔
نه شانس🍀
نه جادو✨ 🧞♂
مسیرش اینه:
🧠 فکر کن →
🔍 امتحان کن →
💪 انجام بده →
❌ شکست بخور →
📚 یاد بگیر →
🔄 دوباره امتحان کن →
🚀 دوباره انجام بده →
⏳ ادامه بده…
و یک روز…✅ موفقیت
✅ موفقیت به معنای بینقص بودن نیست
✅ یعنی حفظ شتاب و حرکت
✅ یعنی آجر به آجر ساختن با پشتکار
❓ امروز تو کجای این مسیر هستی؟
👇 توی کامنتها بگو
➡️ اگه موافقی پست رو بازنشر کن
➡️ اشتراک 👍 لایک 💬 کامنت
نه یک خط صافه
نه شانس
نه جادو
مسیرش اینه:
و یک روز…
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 در جاوا Varargs چیست
🔹در جاوا Varargs یا Variable Arguments به شما اجازه میدهد که به یک متد، تعداد نامحدود آرگومان از یک نوع خاص بدهید، بدون اینکه مجبور باشید آرایه را به صورت دستی ایجاد کنید.
📖 تعریف
در جاوا، اگر بخواهید یک متد تعداد متغیری از آرگومانها را بگیرد، از سه نقطه (...) بعد از نوع داده استفاده میکنید:
📌 این یعنی متد printNumbers میتواند:
⚡ نکات مهم
1. فقط یک پارامتر Varargs میتواند وجود داشته باشد و باید آخرین پارامتر متد باشد:
2. در پشتصحنه، Varargs یک آرایه میسازد.
3. میتوان متد را با هیچ آرگومانی هم صدا زد.
💡 مثال متنوع
جمع اعداد با Varargs:
📌 مزیت: سادهتر و خواناتر از تعریف چند متد Overload شده.
🚫 عیب: استفاده بیشازحد ممکن است کد را مبهم کند.
✍️ خلاصه:
در جاوا Varargs یعنی "به جای اینکه بگی چند تا پارامتر، بگو هر چند تا خواستی!" و جاوا خودش آنها را داخل یک آرایه میریزد.
🔹در جاوا Varargs یا Variable Arguments به شما اجازه میدهد که به یک متد، تعداد نامحدود آرگومان از یک نوع خاص بدهید، بدون اینکه مجبور باشید آرایه را به صورت دستی ایجاد کنید.
📖 تعریف
در جاوا، اگر بخواهید یک متد تعداد متغیری از آرگومانها را بگیرد، از سه نقطه (...) بعد از نوع داده استفاده میکنید:
public void printNumbers(int... numbers) {
for (int num : numbers) {
System.out.print(num + " ");
}
}
📌 این یعنی متد printNumbers میتواند:
printNumbers(1, 2, 3);
printNumbers(10, 20, 30, 40, 50);
printNumbers(); // حتی بدون هیچ آرگومانی
⚡ نکات مهم
1. فقط یک پارامتر Varargs میتواند وجود داشته باشد و باید آخرین پارامتر متد باشد:
public void example(String name, int... scores) { }
2. در پشتصحنه، Varargs یک آرایه میسازد.
3. میتوان متد را با هیچ آرگومانی هم صدا زد.
💡 مثال متنوع
جمع اعداد با Varargs:
public class VarargsExample {
public static int sum(int... numbers) {
int total = 0;
for (int num : numbers) {
total += num;
}
return total;
}
public static void main(String[] args) {
System.out.println(sum(1, 2, 3)); // خروجی: 6
System.out.println(sum(10, 20)); // خروجی: 30
System.out.println(sum()); // خروجی: 0
}
}
📌 مزیت: سادهتر و خواناتر از تعریف چند متد Overload شده.
🚫 عیب: استفاده بیشازحد ممکن است کد را مبهم کند.
✍️ خلاصه:
در جاوا Varargs یعنی "به جای اینکه بگی چند تا پارامتر، بگو هر چند تا خواستی!" و جاوا خودش آنها را داخل یک آرایه میریزد.
#کاربرـحرفهـای
🆔 @javapro_ir
🆔 @group_javapro
👍9😍3❤2👾2
نمودار تکامل فناوریهای پایگاه داده در جاوا 🚀
دسترسی به پایگاه داده در جاوا – از JDBC تا Spring Data JPA
سفر دسترسی به پایگاه داده در اکوسیستم جاوا مسیری بسیار جذاب بوده است.
آغاز کار با JDBC بود؛ جایی که هر دستور SQL باید بهصورت دستی نوشته میشد و مدیریت منابع نیز به شکل دستی انجام میگرفت.
پس از آن، مفهوم ORM (Object-Relational Mapping) مطرح شد که پلی میان Java Objects و Database Tables ایجاد میکرد.
📌 خط زمانی تکامل:
سال ۱۹۹۹ – JDBC → اجرای مستقیم SQL، مدیریت دستی
سال ۲۰۰۲ – ORM Concept → ایدهی نگاشت Object ↔ Table
سال ۲۰۰۴ – Hibernate → ابزار ORM، لایهی Wrapper روی JDBC
سال ۲۰۰۶ – JPA (Java Persistence API) → مشخصهی رسمی ORM (بهصورت API)
سال ۲۰۱۲ – Spring JDBC → سادهسازی دسترسی JDBC از طریق Spring
سال ۲۰۱۲ به بعد – Spring Data JPA → انتزاع سطح بالا روی JPA
زمان حال – Hibernate همراه با JPA → تأمینکنندهی پیشفرض JPA در Spring Boot
امروزه در پروژههای Spring Boot، معمولاً از Spring Data JPA استفاده میشود؛
اما در لایههای زیرین، ترکیب JPA API + Hibernate (Implementation) + JDBC مسئول انجام عملیات اصلی پایگاه داده هستند.
💡 جریان کاری (Flow):
Spring Data JPA → JPA API → Hibernate (JPA Implementation) → JDBC → Database
دسترسی به پایگاه داده در جاوا – از JDBC تا Spring Data JPA
سفر دسترسی به پایگاه داده در اکوسیستم جاوا مسیری بسیار جذاب بوده است.
آغاز کار با JDBC بود؛ جایی که هر دستور SQL باید بهصورت دستی نوشته میشد و مدیریت منابع نیز به شکل دستی انجام میگرفت.
پس از آن، مفهوم ORM (Object-Relational Mapping) مطرح شد که پلی میان Java Objects و Database Tables ایجاد میکرد.
📌 خط زمانی تکامل:
سال ۱۹۹۹ – JDBC → اجرای مستقیم SQL، مدیریت دستی
سال ۲۰۰۲ – ORM Concept → ایدهی نگاشت Object ↔ Table
سال ۲۰۰۴ – Hibernate → ابزار ORM، لایهی Wrapper روی JDBC
سال ۲۰۰۶ – JPA (Java Persistence API) → مشخصهی رسمی ORM (بهصورت API)
سال ۲۰۱۲ – Spring JDBC → سادهسازی دسترسی JDBC از طریق Spring
سال ۲۰۱۲ به بعد – Spring Data JPA → انتزاع سطح بالا روی JPA
زمان حال – Hibernate همراه با JPA → تأمینکنندهی پیشفرض JPA در Spring Boot
امروزه در پروژههای Spring Boot، معمولاً از Spring Data JPA استفاده میشود؛
اما در لایههای زیرین، ترکیب JPA API + Hibernate (Implementation) + JDBC مسئول انجام عملیات اصلی پایگاه داده هستند.
💡 جریان کاری (Flow):
Spring Data JPA → JPA API → Hibernate (JPA Implementation) → JDBC → Database
🙏3👍1
اگر سالها با Java کار کرده باشید، احتمالاً فکر میکنید همه چیز را میدانید — ترفندها، نکات و حتی مشکلات پنهان. اما جاوا مثل یک همکار قدیمی است؛ درست وقتی فکر میکنید او را کاملاً میشناسید، نکتهای جدید رو میکند که نگاهتان را تغییر میدهد.در اینجا چند واقعیت کمتر شناختهشده از جاوا را میبینید که حتی توسعهدهندگان باتجربه را هم غافلگیر میکند. اگر برای مصاحبهی شغلی آماده میشوید یا میخواهید مهارت جاوای خود را ارتقا دهید، این لیست به شما کمک خواهد کرد.
در جاوا، شما میتوانید null را به هر Reference Type مثل String یا Integer Cast کنید و Compiler هیچ خطایی نمیدهد. این کاملاً مجاز است — اما اگر بدون بررسی استفاده شود میتواند خطرناک باشد.
public class NullCastingExample {
public static void main(String[] args) {
// null can be cast to any reference type
String text = (String) null;
Integer number = (Integer) null;
// printing values
System.out.println("Text: " + text);
System.out.println("Number: " + number);
}
}
Text: null
Number: null
> اینجا خطای ClassCastException رخ نمیدهد چون شیء واقعی Cast نشده است. مشکل زمانی شروع میشود که متدی روی null فراخوانی کنید و با NullPointerException روبهرو شوید.
2️⃣ امکان داشتن چند متد main در یک کلاس
یک کلاس میتواند چند متد main داشته باشد. اما فقط متدی با امضای دقیق زیر بهعنوان نقطهی شروع برنامه شناخته میشود:
public static void main(String[] args)
بقیهی متدهای main صرفاً متدهای معمولی هستند و میتوانند پارامترهای مختلفی بگیرند.
public class MultiMainExample {
public static void main(String[] args) {
// this is the actual entry point
System.out.println("Main method with String[] args");
// calling the overloaded main method
main(42);
}
// overloaded main method with int parameter
public static void main(int number) {
System.out.println("Main method with int: " + number);
}
}
Main method with String[] args
Main method with int: 42
3️⃣ تفاوت عملگر == در مقایسهی String ها
عملگر == در جاوا برای مقایسهی Reference Equality (برابری آدرس حافظه) استفاده میشود. اما در مورد String Literals، به دلیل String Interning ممکن است گمراهکننده باشد.
public class StringComparison {
public static void main(String[] args) {
// string literals are interned
String a = "Java";
String b = "Java";
// new creates a separate object in the heap
String c = new String("Java");
// comparing references (true, same interned literal)
System.out.println(a == b);
// comparing references (false, different objects)
System.out.println(a == c);
// comparing actual values (true, values are equal)
System.out.println(a.equals(c));
}
}
اگر به اشتباه برای مقایسهی رشتهها از == استفاده کنید، ممکن است دچار باگهای ظریف شوید — مخصوصاً وقتی رشتهها بهصورت پویا ساخته میشوند. همیشه برای مقایسهی مقدار رشته از equals() استفاده کنید.
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🔹جلوگیری از NullPointerException با استفاده از Optional
یکی از خطاهای رایج در جاوا، استثنای معروف NullPointerException است. برای مقابله با این مشکل، از کلاس Optional که از جاوا 8 معرفی شد، استفاده میکنیم.
✅ کاربرد اصلی Optional:
این کلاس به ما کمک میکند مقادیری که ممکن است null باشند را در یک ظرف (Container) قرار دهیم و هنگام استفاده، بهصورت امن بررسی کنیم.
📌 مثال ساده بدون Optional:
📌 همان مثال با Optional:
🔍 روشهای مهم کار با Optional
1️⃣ ایجاد Optional
2️⃣ بررسی مقدار
3️⃣ استفاده از orElse / orElseGet
4️⃣ استفاده از ifPresent
5️⃣ استفاده از map برای تغییر مقدار
✨ نتیجهگیری:
با استفاده از Optional، کد ما تمیزتر و ایمنتر میشود و میتوانیم جلوی بسیاری از خطاهای NullPointerException را بگیریم.
یکی از خطاهای رایج در جاوا، استثنای معروف NullPointerException است. برای مقابله با این مشکل، از کلاس Optional که از جاوا 8 معرفی شد، استفاده میکنیم.
✅ کاربرد اصلی Optional:
این کلاس به ما کمک میکند مقادیری که ممکن است null باشند را در یک ظرف (Container) قرار دهیم و هنگام استفاده، بهصورت امن بررسی کنیم.
📌 مثال ساده بدون Optional:
public class User {
private String name;
public String getName() {
return name;
}
}
public class Test {
public static void main(String[] args) {
User user = null;
// اینجا خطای NullPointerException رخ میدهد
System.out.println(user.getName());
}
}
📌 همان مثال با Optional:
import java.util.Optional;
public class Test {
public static void main(String[] args) {
Optional<String> name = Optional.ofNullable(null);
// اگر مقدار null باشد، "Unknown" چاپ میشود
System.out.println(name.orElse("Unknown"));
}
}
🔍 روشهای مهم کار با Optional
1️⃣ ایجاد Optional
Optional<String> opt1 = Optional.of("Hello"); // مقدار حتماً باید غیر null باشد
Optional<String> opt2 = Optional.ofNullable(null); // میتواند null یا غیر null باشد
Optional<String> opt3 = Optional.empty(); // همیشه خالی
2️⃣ بررسی مقدار
if(opt1.isPresent()) {
System.out.println(opt1.get());
}
3️⃣ استفاده از orElse / orElseGet
String value = opt2.orElse("Default Value");
String value2 = opt2.orElseGet(() -> "Generated Value");
4️⃣ استفاده از ifPresent
opt1.ifPresent(v -> System.out.println("Value: " + v));
5️⃣ استفاده از map برای تغییر مقدار
Optional<String> upper = opt1.map(String::toUpperCase);
System.out.println(upper.orElse("No Value"));
✨ نتیجهگیری:
با استفاده از Optional، کد ما تمیزتر و ایمنتر میشود و میتوانیم جلوی بسیاری از خطاهای NullPointerException را بگیریم.
#کاربرـحرفهـای
🆔 @javapro_ir
🆔 @group_javapro
👍8🗿1
01 - مقدمه
02 - ایجاد پروژه
03 - مفهوم Bean
04 - مدل یوزر
05 - یوزر ریپو و سرویس
06 - کنترلر یوزر
07 - کنترلر یوزر بخش 2
08 - کنترلر یوزر بخش 3
09 - اسپرینگ security
10 - سرویس ثبت نام
11 - سرویس ورود
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5💯2👍1😍1
اگه تو مصاحبه ازت پرسیدن «چرا Spring؟»، فقط نگو «چون کد تکراری کمتر داره!»
حتماً این نکات رو هم بگو👇
اسپرینگ از مفاهیم وارونگی کنترل (Inversion of Control - IoC) و تزریق وابستگی (Dependency Injection - DI) استفاده میکنه.
یعنی خودت اشیاء رو نمیسازی، اسپرینگ میسازه!
اسپرینگ خیلی از موارد پایهای رو خودش هندل میکنه:
🔹 ساخت REST API
🔹 ارتباط با دیتابیس (JDBC / JPA)
🔹 مدیریت تراکنشها
🔹 امنیت و احراز هویت
اینا باعث میشن تمرکزت بره روی منطق اصلی برنامه، نه جزئیات ریز!
🧩 ۳. معماری ماژولار و منعطف
اسپرینگ یه غول سنگین نیست! هر چی رو نیاز داری انتخاب میکنی:
🔸 Spring Web → برای ساخت API
🔸 Spring Data → کار با دیتابیس
🔸 Spring Security → امنیت و دسترسی
اسپرینگ بوت میاد و دردسر رو کم میکنه:
⚙️ پیکربندی خودکار (Auto Configuration)
🛠️ تنظیمات آماده برای محیط تولید
شروع پروژهها رو سریعتر و نگهداریشون رو راحتتر میکنه.
اسپرینگ از همون اول برای محیط واقعی ساخته شده:
📋 لاگگیری داخلی
یک فریمورک جاافتاده، پایدار، و قابل اعتماد برای پروژههای بزرگ
#Java #Spring #SpringBoot #مصاحبه_برنامهنویسی #Backend #Javadev
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
بانکینو استخدام میکند | توسعهدهنده iOS (Swift) و توسعهدهنده Java (Back-End)
بانکینو در راستای توسعه و تقویت تیم فنی خود، از متخصصان حوزههای iOS و Java دعوت به همکاری مینماید.
علاقهمندان میتوانند رزومه کاری و تحصیلی خود را با درج عنوان شغلی مورد نظر در قسمت عنوان ایمیل، به آدرس زیر ارسال نمایند:
📧 Bankino@middleeastbank.ir
برای مشاهده جزئیات و شرایط احراز موقعیتهای شغلی، از طریق لینک زیر اقدام کنید:
🔗 way2pay.ir/481352
➡️ اشتراک 👍 لایک 💬 کامنت
بانکینو در راستای توسعه و تقویت تیم فنی خود، از متخصصان حوزههای iOS و Java دعوت به همکاری مینماید.
علاقهمندان میتوانند رزومه کاری و تحصیلی خود را با درج عنوان شغلی مورد نظر در قسمت عنوان ایمیل، به آدرس زیر ارسال نمایند:
برای مشاهده جزئیات و شرایط احراز موقعیتهای شغلی، از طریق لینک زیر اقدام کنید:
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2😍1
در اغلب وبسایتها بخشی برای ورود و ثبتنام کاربران وجود دارد. همچنین احتمالاً مشاهده کردهاید که برخی بخشها تنها برای کاربران خاصی در دسترس هستند. در این دوره یاد میگیرید چگونه با پیادهسازی یک سرویس IAM Service و استفاده از APIهای آماده، مفاهیم مربوط به Authorization را بهصورت عملی درک کرده و پیادهسازی کنید.
01 - مقدمه
02 - ایجاد پروژه
03 - مفهوم Bean
04 - مدل یوزر
05 - یوزر ریپو و سرویس
06 - کنترلر یوزر
07 - کنترلر یوزر بخش 2
08 - کنترلر یوزر بخش 3
09 - اسپرینگ security
10 - سرویس ثبت نام
11 - سرویس ورود
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3
✍️ آشنایی با Functional Interfaces در جاوا
یکی از قابلیتهای قدرتمند جاوا 8، معرفی Functional Interfaces است. اینترفیسهایی که فقط یک متد انتزاعی دارند (SAM – Single Abstract Method) و میتوان از آنها به صورت مستقیم با Lambda Expressions یا Method References استفاده کرد.
سه اینترفیس بسیار پرکاربرد در جاوا عبارتند از:
* Predicate<T>:
ورودی میگیرد و یک boolean برمیگرداند.
* Function\<T, R>:
ورودی میگیرد و خروجی از نوع دیگر برمیگرداند.
* Consumer<T>:
ورودی میگیرد ولی خروجی ندارد (برای انجام عملی روی داده).
🔹 ۱. استفاده از Predicate
مثالی ساده برای بررسی شرط روی دادهها:
در اینجا با استفاده از Predicate بررسی کردیم که طول یک رشته بیشتر از ۵ هست یا خیر.
🔹 ۲. استفاده از Function
تبدیل یک ورودی به خروجی متفاوت:
اینجا رشته ورودی را گرفتیم و طول آن را به صورت عدد برگرداندیم.
🔹 ۳. استفاده از Consumer
اجرای عملی روی داده بدون بازگرداندن خروجی:
در این مثال، هر رشتهای که به Consumer بدهیم، چاپ میشود.
🔹 ۴. ترکیب آنها
گاهی لازم است چند اینترفیس را با هم ترکیب کنیم:
✅ نتیجهگیری:
استفاده از Functional Interfaces باعث میشود کدهای ما مختصرتر، قابلخواندنتر و قابلاستفاده مجدد شوند. اینترفیسهایی مثل Predicate، Function و Consumer پایه و اساس Stream API در جاوا هستند و فهم درست آنها برای برنامهنویسی مدرن در جاوا ضروری است.
یکی از قابلیتهای قدرتمند جاوا 8، معرفی Functional Interfaces است. اینترفیسهایی که فقط یک متد انتزاعی دارند (SAM – Single Abstract Method) و میتوان از آنها به صورت مستقیم با Lambda Expressions یا Method References استفاده کرد.
سه اینترفیس بسیار پرکاربرد در جاوا عبارتند از:
* Predicate<T>:
ورودی میگیرد و یک boolean برمیگرداند.
* Function\<T, R>:
ورودی میگیرد و خروجی از نوع دیگر برمیگرداند.
* Consumer<T>:
ورودی میگیرد ولی خروجی ندارد (برای انجام عملی روی داده).
🔹 ۱. استفاده از Predicate
مثالی ساده برای بررسی شرط روی دادهها:
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<String> isLong = s -> s.length() > 5;
System.out.println(isLong.test("Hello")); // false
System.out.println(isLong.test("FunctionalInterface")); // true
}
}
در اینجا با استفاده از Predicate بررسی کردیم که طول یک رشته بیشتر از ۵ هست یا خیر.
🔹 ۲. استفاده از Function
تبدیل یک ورودی به خروجی متفاوت:
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, Integer> stringLength = s -> s.length();
System.out.println(stringLength.apply("Java")); // 4
System.out.println(stringLength.apply("LambdaExpr")); // 10
}
}
اینجا رشته ورودی را گرفتیم و طول آن را به صورت عدد برگرداندیم.
🔹 ۳. استفاده از Consumer
اجرای عملی روی داده بدون بازگرداندن خروجی:
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
Consumer<String> printer = s -> System.out.println("Hello, " + s);
printer.accept("Ali"); // Hello, Ali
printer.accept("Sara"); // Hello, Sara
}
}
در این مثال، هر رشتهای که به Consumer بدهیم، چاپ میشود.
🔹 ۴. ترکیب آنها
گاهی لازم است چند اینترفیس را با هم ترکیب کنیم:
import java.util.function.*;
public class Main {
public static void main(String[] args) {
Predicate<Integer> isEven = n -> n % 2 == 0;
Function<Integer, String> toString = n -> "عدد شما: " + n;
Consumer<String> show = s -> System.out.println(s);
int number = 8;
if (isEven.test(number)) {
String result = toString.apply(number);
show.accept(result); // خروجی: عدد شما: 8
}
}
}
✅ نتیجهگیری:
استفاده از Functional Interfaces باعث میشود کدهای ما مختصرتر، قابلخواندنتر و قابلاستفاده مجدد شوند. اینترفیسهایی مثل Predicate، Function و Consumer پایه و اساس Stream API در جاوا هستند و فهم درست آنها برای برنامهنویسی مدرن در جاوا ضروری است.
#کاربرـپیشرفته
🆔 @javapro_ir
🆔 @group_javapro
👍5❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
برنامه نویسی جاوا | Java
Please open Telegram to view this post
VIEW IN TELEGRAM
ما در شرکت ارزشآفرین اطلس به دنبال جذب برنامهنویس ارشد جاوا (Senior Java Developer) برای پیوستن به تیم فنی خود هستیم.
مهارتها و توانمندیهای مورد نیاز:
تسلط کامل به زبان Java
تجربه کار با Spring Framework (Spring Boot, Spring MVC, Spring Data)
آشنایی با RESTful APIs و معماری Microservices
تجربه کار با پایگاهدادههای رابطهای (Oracle، PostgreSQL)
تسلط به Git
آشنایی با مفاهیم CI/CD و ابزارهای مربوطه
تجربه کار با Docker (مزیت محسوب میشود)
تسلط به مفاهیم OOP و Design Patterns
تجربه کار در محیط Agile و ابزارهایی مثل Jira
حداقل ۲ سال تجربه کاری مرتبط
روحیه تیمی بالا و علاقهمندی به یادگیری و رشد
لینک آگهی و جزئیات بیشتر:
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
📌 کلاس های Record Class در جاوا
🔹 در جاوا ۱۴ به صورت Preview و از جاوا ۱۶ به صورت رسمی، قابلیتی به نام Record Class معرفی شد.
این قابلیت برای مواقعی است که میخواهیم یک کلاس فقط برای نگهداری دادهها (Data Carrier) بسازیم و نیازی به متدهای پیچیده یا تغییر وضعیت نداشته باشیم.
✅ چرا Record Class؟
در حالت عادی، وقتی یک کلاس دادهای مینویسیم، مجبوریم کلی کد Boilerplate بنویسیم:
تعریف فیلدها
ولی با record همه اینها به صورت خودکار ساخته میشود.
📝 مثال ساده:
این قطعه کد معادل چیزی شبیه به زیر است:
یعنی فقط با یک خط record، جاوا همهی این کدها را خودش میسازد.
✅ استفاده:
⚡ نکات مهم:
1. کلاسهای Record immutable هستند (فیلدها final هستند).
2. نمیتوانید فیلد جدید (mutable) تعریف کنید.
3. میتوانید متد اضافه کنید، ولی هدف اصلی آن حمل دادهها است.
🛠 مثال پیشرفتهتر:
📌 خلاصه:
کلاس های record راهی مدرن برای تعریف کلاسهای ساده و دادهمحور است که:
کد اضافی را حذف میکند.
کلاس را به صورت immutable میسازد.
برای DTOها، مدلهای دادهای، و Value Objectها بسیار مناسب است.
🔹 در جاوا ۱۴ به صورت Preview و از جاوا ۱۶ به صورت رسمی، قابلیتی به نام Record Class معرفی شد.
این قابلیت برای مواقعی است که میخواهیم یک کلاس فقط برای نگهداری دادهها (Data Carrier) بسازیم و نیازی به متدهای پیچیده یا تغییر وضعیت نداشته باشیم.
✅ چرا Record Class؟
در حالت عادی، وقتی یک کلاس دادهای مینویسیم، مجبوریم کلی کد Boilerplate بنویسیم:
تعریف فیلدها
constructor
getters
toString(), equals(), hashCode()
ولی با record همه اینها به صورت خودکار ساخته میشود.
📝 مثال ساده:
public record Person(String name, int age) { }
این قطعه کد معادل چیزی شبیه به زیر است:
public final class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String name() { return name; }
public int age() { return age; }
@Override
public String toString() { return "Person[name=" + name + ", age=" + age + "]"; }
@Override
public boolean equals(Object o) { ... }
@Override
public int hashCode() { ... }
}
یعنی فقط با یک خط record، جاوا همهی این کدها را خودش میسازد.
✅ استفاده:
public class Main {
public static void main(String[] args) {
Person p1 = new Person("Ali", 25);
Person p2 = new Person("Ali", 25);
System.out.println(p1); // Person[name=Ali, age=25]
System.out.println(p1.equals(p2)); // true
}
}
⚡ نکات مهم:
1. کلاسهای Record immutable هستند (فیلدها final هستند).
2. نمیتوانید فیلد جدید (mutable) تعریف کنید.
3. میتوانید متد اضافه کنید، ولی هدف اصلی آن حمل دادهها است.
🛠 مثال پیشرفتهتر:
public record Rectangle(double width, double height) {
public double area() {
return width * height;
}
}
public class Main {
public static void main(String[] args) {
Rectangle r = new Rectangle(5, 3);
System.out.println("Area = " + r.area()); // Area = 15.0
}
}
📌 خلاصه:
کلاس های record راهی مدرن برای تعریف کلاسهای ساده و دادهمحور است که:
کد اضافی را حذف میکند.
کلاس را به صورت immutable میسازد.
برای DTOها، مدلهای دادهای، و Value Objectها بسیار مناسب است.
#کاربرـحرفهـای
🆔 @javapro_ir
🆔@group_javapro
👍7
در طول سالها، مهارتهایم را به عنوان یک توسعهدهنده جاوا با تسلط بر مفاهیم اصلی و ابزارهای مدرن که برنامههای کاربردی واقعی را مقاوم، مقیاسپذیر و آماده برای تولید میکنند، تکمیل کردهام. این نقشهراه مسیر این پیشرفت را به نمایش میگذارد:
🔹 جاوای پایه – پایهگذاری قوی در برنامهنویسی شیءگرا (OOP)، ساختارهای داده و کتابخانههای اصلی
🔹 ر JDBC و SQL – ساخت اتصال یکپارچه به پایگاه داده و تسلط بر پرسوجوهای دادههای رابطهای
🔹 ر JSP و Servlets – درک اصول اولیه برنامههای وب
🔹 فریمورک Spring – معکوسسازی کنترل، تزریق وابستگی، و معماری مقیاسپذیر برای سطح سازمانی
🔹 ر Spring Boot – توسعه سریع میکروسرویسها با تنظیمات پیشفرض آماده برای تولید
🔹 ر Hibernate – سادهسازی تعامل با پایگاه داده با استفاده از ORM قدرتمند
🔹 میزبانی در ابر (AWS، Azure، GCP) – استقرار و مقیاسبندی برنامهها در ابر
🔹 ر Docker و Kubernetes – کانتینرسازی و ارکستراسیون برای دسترسی بالا
🔹 پروژههای واقعی – استفاده از تمامی این تکنولوژیها برای ساخت برنامههای مقیاسپذیر و قابل نگهداری
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
شرکت خدمات انفورماتیک به دنبال جذب برنامهنویس جاوا برای توسعه و نگهداری نرمافزارهای سازمانی و مالی میباشد.
🔹 مهارتهای مورد نیاز:
تسلط به Java/J2EE و توسعه نرمافزارهای تحت وب
تجربه در طراحی رابط کاربری با HTML، CSS، jQuery، Primefaces
آشنایی با REST و SOAP
پیادهسازی گزارشها با Jasper Reports
تجربه کار تیمی با Git و SVN
استفاده از Design Patterns و بهینهسازی کد
حداقل ۳ سال تجربه مرتبط
🔹 مزایا:
محیط کاری پویا
پروژههای کلان بانکی
فرصت رشد شغلی
اگر به این موقعیت علاقهمندید، لطفاً رزومه خود را به آدرس ایمیل زیر ارسال نمایید: 📧 [Sima.Mohammadali@isc.co.ir]
⚡️ @javapro_ir✈️ @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
✍️ آشنایی با Lombok @Data در جاوا
در برنامهنویسی جاوا معمولاً وقتی یک کلاس مدل (Model/Entity) مینویسیم، نیاز به نوشتن مقدار زیادی کد تکراری داریم مثل:
متدهای getter و setter
متد toString()
متدهای equals() و hashCode()
این کار هم وقتگیر است و هم باعث شلوغ شدن کلاس میشود.
🔹 کتابخانه Lombok یک کتابخانه کاربردی است که با استفاده از Annotations کدهای تکراری را به صورت خودکار تولید میکند.
📌 نقش @Data
وقتی روی یک کلاس از @Data استفاده میکنیم، Lombok به طور خودکار موارد زیر را برای ما تولید میکند:
1. همهی getter و setter ها برای فیلدها
2. متد toString()
3. متد equals() و hashCode()
4. یک constructor برای فیلدهای final
✅ مثال ساده
🔹 معادل کدی که Lombok در پشت صحنه تولید میکند (بدون اینکه شما بنویسید):
🎯 استفاده در عمل
⚠️ نکته مهم
برای اینکه Lombok کار کند باید:
1. کتابخانه Lombok را به پروژه اضافه کنید.
در Maven:
در Gradle:
2. پلاگین Lombok را در IDE (مثل IntelliJ یا Eclipse) فعال کنید.
✨ نتیجه: با @Data شما میتوانید کلاسهای تمیزتر، خواناتر و کوتاهتر بنویسید بدون نیاز به نوشتن کدهای تکراری.
در برنامهنویسی جاوا معمولاً وقتی یک کلاس مدل (Model/Entity) مینویسیم، نیاز به نوشتن مقدار زیادی کد تکراری داریم مثل:
متدهای getter و setter
متد toString()
متدهای equals() و hashCode()
این کار هم وقتگیر است و هم باعث شلوغ شدن کلاس میشود.
🔹 کتابخانه Lombok یک کتابخانه کاربردی است که با استفاده از Annotations کدهای تکراری را به صورت خودکار تولید میکند.
📌 نقش @Data
وقتی روی یک کلاس از @Data استفاده میکنیم، Lombok به طور خودکار موارد زیر را برای ما تولید میکند:
1. همهی getter و setter ها برای فیلدها
2. متد toString()
3. متد equals() و hashCode()
4. یک constructor برای فیلدهای final
✅ مثال ساده
import lombok.Data;
@Data
public class User {
private String name;
private int age;
}
🔹 معادل کدی که Lombok در پشت صحنه تولید میکند (بدون اینکه شما بنویسید):
public class User {
private String name;
private int age;
// Getters & Setters
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
// toString
@Override
public String toString() {
return "User(name=" + name + ", age=" + age + ")";
}
// equals & hashCode
@Override
public boolean equals(Object o) { /* کد تولیدشده */ }
@Override
public int hashCode() { /* کد تولیدشده */ }
}
🎯 استفاده در عمل
public class Main {
public static void main(String[] args) {
User u1 = new User();
u1.setName("Saleh");
u1.setAge(23);
System.out.println(u1);
// خروجی: User(name=Saleh, age=23)
User u2 = new User();
u2.setName("Saleh");
u2.setAge(23);
System.out.println(u1.equals(u2));
// true چون Lombok خودش equals و hashCode را نوشته
}
}
⚠️ نکته مهم
برای اینکه Lombok کار کند باید:
1. کتابخانه Lombok را به پروژه اضافه کنید.
در Maven:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
در Gradle:
compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'
2. پلاگین Lombok را در IDE (مثل IntelliJ یا Eclipse) فعال کنید.
✨ نتیجه: با @Data شما میتوانید کلاسهای تمیزتر، خواناتر و کوتاهتر بنویسید بدون نیاز به نوشتن کدهای تکراری.
#کاربرـحرفهـای
🆔 @javapro_ir
🆔 @group_javapro
👍5❤2💯2