Telegram Web
🧾شرایط اقساطی دوره جامع نخبگان معماری میکروسرویس ها با Java و boot Spring برای مدت محدود در لینک زیر می توانید مشاهده کنید:

🖥 مشاهده
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 چطور در برنامه‌نویسی انگیزه‌مون رو حفظ کنیم؟

گاهی پیش میاد وسط مسیر یادگیری یا کار کدنویسی بی‌انگیزه بشیم. اما راهکارهایی وجود داره که کمک می‌کنه انگیزه‌مون پایدار بمونه:

1️⃣ با افراد هم‌فکر معاشرت کن → وقتی اطرافت پر از کسایی باشه که روی پروژه‌ها کار می‌کنن، تو هم ناخودآگاه وارد جریان می‌شی.

2️⃣ در رویدادها شرکت کن → دیدار با برنامه‌نویس‌ها، استارتاپی‌ها و متخصصان، انرژی و انگیزه زیادی می‌ده.

3️⃣ استراحت رو فراموش نکن → کدنویسی بدون وقفه باعث فرسودگی می‌شه. با استراحت ذهن تازه می‌مونه.

4️⃣ رقابت کن → شرکت در چالش‌ها و هکاتون‌ها باعث رشد و یادگیری سریع‌تر می‌شه، حتی اگر برنده نشی.

5️⃣ آموزش بده → ضبط ویدئو یا نوشتن مقاله، علاوه بر یادگیری عمیق‌تر، باعث می‌شه دنبال‌کننده پیدا کنی و انگیزه‌ات بیشتر بشه.

6️⃣ چیزهای جدید یاد بگیر → با امتحان تکنولوژی‌ها و روش‌های تازه، یادگیری همیشه جذاب و تازه می‌مونه.

انگیزه در برنامه‌نویسی یک مسیر بلندمدته، با این عادت‌ها می‌تونی پایدار و با انرژی پیش بری.


➡️اشتراک 👍لایک 💬کامنت

⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🔜بزودی در بروزرسانی جدید دوره طلایی Spring Core مباحث پیشرفته ارائه خواهد شد.
این مباحث برای شرکت کنندگان قبلی دوره «رایگان» خواهد بود.

🖥مشاهده
Please open Telegram to view this post
VIEW IN TELEGRAM
4
⚖️ چرا باید equals و hashCode با هم Override شوند؟

برنامه‌نویسی شیءگرا در جاوا به شدت بر پایه‌ی مقایسه‌ی اشیاء است.
دو متد مهم که در این زمینه نقش حیاتی دارند، equals و hashCode هستند.



📌 متد equals

برای مقایسه‌ی محتوای دو شیء استفاده می‌شود.

به صورت پیش‌فرض از کلاس Object به ارث می‌رسد و فقط مقایسه‌ی آدرس حافظه انجام می‌دهد.

معمولاً باید آن را Override کنیم تا بتوانیم دو شیء با محتوای یکسان را برابر در نظر بگیریم.




📌 متد hashCode

این متد یک عدد صحیح (int) برمی‌گرداند که نشان‌دهنده‌ی یک Hash برای شیء است.

در ساختارهایی مثل HashMap, HashSet و Hashtable برای سریع پیدا کردن اشیاء استفاده می‌شود.

قرارداد جاوا می‌گوید:

اگر a.equals(b) درست باشد، باید a.hashCode() == b.hashCode() هم درست باشد.





🔎 مشکل وقتی فقط equals را Override کنیم
import java.util.HashSet;

class Person {
    String name;

    Person(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person person = (Person) o;
        return name.equals(person.name);
    }
}

public class Test {
    public static void main(String[] args) {
        HashSet<Person> set = new HashSet<>();
        set.add(new Person("Ali"));

        System.out.println(set.contains(new Person("Ali"))); // false
    }
}

📌 توضیح:

ما equals را Override کردیم اما hashCode را نه.

در واقع HashSet ابتدا hashCode را چک می‌کند تا موقعیت را پیدا کند. چون hashCode پیش‌فرض برای دو شیء متفاوت است، حتی اگر equals درست باشد، شیء پیدا نمی‌شود.




🔎 مثال درست با Override هر دو متد
import java.util.HashSet;
import java.util.Objects;

class Person {
    String name;

    Person(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person person = (Person) o;
        return name.equals(person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}

public class Test {
    publiSystem.out.println(String[] args) {
        HashSet<Person> set = new HashSet<>();
        set.add(new Person("Ali"));

        System.out.println(set.contains(new Person("Ali"))); // true
    }
}

📌 حالا چون هم equals و هم hashCode درست Override شده‌اند، مجموعه به درستی کار می‌کند.




🎯 جمع‌بندی

equals:
محتوای اشیاء را مقایسه می‌کند.

hashCode:
برای جست‌وجوی سریع در Collectionهای مبتنی بر Hash استفاده می‌شود.

اگر equals را Override کردید، حتماً باید hashCode را هم Override کنید، وگرنه ساختارهایی مثل HashSet و HashMap رفتار غیرمنتظره خواهند داشت.

#کاربرـپیشرفته


🆔 @javapro_ir
🆔 @group_javapro
👍62
🆕 دوره Spring Core بروزرسانی شد!

مباحث پیشرفته تر به دوره Spring Core اضاف شد

🆓 مباحث جدید اضاف شده برای شرکت کنندکان قبلی دوره رایگان خواهد بود.

👇 مشاهده


➡️اشتراک 👍لایک 💬کامنت

⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🌟 قرارداد کامل equals و hashCode در جاوا


متد equals و hashCode دو بخش جدایی‌ناپذیر از قرارداد برابری در جاوا هستند. زمانی‌که شما این متدها را بازنویسی می‌کنید، باید قوانین مشخصی را رعایت کنید تا رفتار کلاس‌هایتان قابل پیش‌بینی و درست باقی بماند. این قوانین به صورت رسمی در مستندات جاوا تعریف شده‌اند.


قوانین متد equals:

۱️⃣ بازتابی بودن (Reflexive): هر شیء باید با خودش برابر باشد.

obj.equals(obj) // همیشه باید true باشد


۲️⃣ متقارن بودن (Symmetric): اگر a.equals(b) درست باشد، باید b.equals(a) هم درست باشد.

a.equals(b) == b.equals(a)


۳️⃣ گذرا بودن (Transitive): اگر a.equals(b) و b.equals(c) درست باشند، آنگاه a.equals(c) نیز باید درست باشد.

if(a.equals(b) && b.equals(c)) {
    a.equals(c) == true;
}


۴️⃣ سازگاری (Consistent): نتایج مقایسه باید در صورت تغییر نکردن وضعیت اشیاء ثابت بماند.

a.equals(b) // همیشه همان نتیجه را برمی‌گرداند تا وقتی که وضعیت a و b تغییر نکند


۵️⃣ عدم برابری با null: هیچ شیء نباید برابر با null باشد.

a.equals(null) // همیشه false



قوانین متد hashCode:

۱️⃣ سازگاری با equals: اگر دو شیء برابر باشند (equals آنها true باشد)، مقدار hashCode آن‌ها باید یکی باشد.

۲️⃣ سازگاری زمانی: تا زمانی که وضعیت شیء تغییر نکرده باشد، مقدار hashCode آن باید ثابت بماند.

۳️⃣ نامساوی‌ها ممکن است یکسان باشند: اگر دو شیء برابر نباشند، مجاز است که hashCode یکسانی داشته باشند، ولی توصیه می‌شود که تا جای ممکن متفاوت باشند.


مثال عملی:

import java.util.Objects;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
               Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}


در این مثال، اگر دو شیء از نوع Person دارای نام و سن یکسان باشند، هم equals و هم hashCode آن‌ها برابر خواهد بود. این امر باعث می‌شود در ساختارهایی مثل HashSet یا HashMap رفتار درستی داشته باشند.


نتیجه‌گیری:
رعایت قرارداد equals و hashCode برای جلوگیری از خطاهای غیرمنتظره در مجموعه‌هایی مثل HashSet، HashMap و دیگر ساختارهای داده وابسته به هش بسیار حیاتی است. بی‌توجهی به این قوانین می‌تواند منجر به خطاهایی شود که پیدا کردن آن‌ها بسیار دشوار است.

#کاربرـپیشرفته


🆔 @javapro_ir
🆔 @group_javapro
👍31
🚀 استخدام برنامه‌نویس جاوا در شرکت داده‌ورزی سداد 💼

شرکت داده‌ورزی سداد به منظور توسعه تیم‌های فنی خود، در حال جذب متخصصین با مهارت‌های زیر می‌باشد:

🔹 مسلط به Java (نسخه 8 به بالا)
🔹 آشنایی با Spring Framework
🔹 تسلط بر مفاهیم OOP
🔹 تجربه کار با JPA / Hibernate
🔹 تجربه توسعه RESTful API
🔹 توانایی کار با پایگاه داده‌های PostgreSQL یا DB2
🔹 آشنایی با ابزار Maven
🔹 توانایی کار با Git و Git-based workflow

📧 برای ارسال رزومه
در صورت تمایل به همکاری، رزومه خود را به آدرس پست الکترونیک زیر ارسال فرمایید:
✉️ [email protected]


➡️اشتراک 👍لایک 💬کامنت

⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
📌 مفهوم Pass by Value در جاوا

در جاوا همه‌ی پارامترها به‌صورت Pass by Value (یعنی ارسال مقدار) به متدها منتقل می‌شوند.
اما بسیاری از برنامه‌نویسان در ابتدا فکر می‌کنند جاوا Pass by Reference دارد، چون وقتی یک آبجکت به متد ارسال می‌شود، تغییر روی آن آبجکت در بیرون متد هم دیده می‌شود.

🔎 بیایید دقیق‌تر نگاه کنیم:

اگر نوع‌های ابتدایی (Primitive) مثل int, double, boolean را ارسال کنید، مقدار کپی می‌شود. پس تغییرات داخل متد روی متغیر اصلی اثری ندارد.

اگر آبجکت را ارسال کنید، در واقع کپی آدرس آبجکت (Reference Value) ارسال می‌شود. بنابراین متد می‌تواند به همان آبجکت اشاره کرده و داده‌هایش را تغییر دهد. اما خود رفرنس اصلی کپی شده و تغییرش بی‌اثر است.



📘 مثال ۱ – نوع Primitive:

public class PassByValueDemo {
    public static void main(String[] args) {
        int x = 10;
        changeValue(x);
        System.out.println("x after method: " + x); // خروجی: 10
    }

    static void changeValue(int num) {
        num = 20; // فقط کپی تغییر می‌کند
    }
}

👉 نتیجه: مقدار x تغییر نکرد چون فقط کپی به متد داده شده بود.


📘 مثال ۲ – آبجکت‌ها:

class Person {
    String name;
}

public class PassByValueDemo2 {
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "Ali";
        changeName(p);
        System.out.println("Person name: " + p.name); // خروجی: Reza
    }

    static void changeName(Person person) {
        person.name = "Reza"; // داده‌ی داخل آبجکت تغییر می‌کند
    }
}

👉 اینجا رشته‌ی name تغییر کرد، چون رفرنس کپی شده به همان آبجکت اشاره داشت.



📘 مثال ۳ – تغییر رفرنس داخل متد:
static void reassignObject(Person person) {
    person = new Person();
    person.name = "Sara";
}

public static void main(String[] args) {
    Person p = new Person();
    p.name = "Ali";
    reassignObject(p);
    System.out.println(p.name); // خروجی: Ali
}

👉 در اینجا مقدار name تغییر نکرد چون رفرنس اصلی کپی شده بود و تغییر رفرنس داخل متد روی متغیر اصلی بی‌اثر است.



نتیجه‌گیری:
جاوا همیشه Pass by Value است، حتی برای آبجکت‌ها. فقط نکته این است که وقتی آبجکت‌ها را پاس می‌دهید، در واقع کپی رفرنس پاس می‌شود، نه خود آبجکت. همین موضوع باعث سردرگمی خیلی‌ها می‌شود.

#کاربرـپیشرفته


🆔 @javapro_ir
🆔 @group_javapro
👍71
📌موضوع: Immutable Objects در جاوا و ارتباط آن با Pass by Value

در جاوا بعضی از کلاس‌ها Immutable هستند؛ یعنی بعد از ساخته شدن، حالت داخلی آن‌ها دیگر تغییر نمی‌کند.
معروف‌ترین نمونه‌ی Immutable در جاوا، کلاس String است.

🔎 ویژگی اصلی Immutable این است که اگر به نظر برسد در حال تغییر دادن شیء هستیم، در واقع یک شیء جدید ساخته می‌شود و رفرنس متغیر به آن اشاره می‌کند.


📘 مثال ۱ – رشته‌ها (String):

public class ImmutableDemo {
    public static void main(String[] args) {
        String s = "Ali";
        changeString(s);
        System.out.println("Original: " + s); // خروجی: Ali
    }

    static void changeString(String str) {
        str = str + " Reza"; // شیء جدید ساخته می‌شود
        System.out.println("Inside method: " + str); // خروجی: Ali Reza
    }
}


👉 چرا خروجی نهایی هنوز Ali است؟
چون شیء رشته تغییر نکرد، بلکه یک String جدید ساخته شد و فقط رفرنس محلی (str) در متد به آن اشاره کرد.


📘 مثال ۲ – مقایسه با Mutable Object (مثل StringBuilder):

public class MutableDemo {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Ali");
        changeBuilder(sb);
        System.out.println("After method: " + sb); // خروجی: Ali Reza
    }

    static void changeBuilder(StringBuilder builder) {
        builder.append(" Reza"); // همان شیء تغییر می‌کند
    }
}


👉 این بار شیء تغییر کرد، چون StringBuilder یک کلاس Mutable است.


نتیجه‌گیری:

* جاوا همیشه Pass by Value است، اما رفتار Immutable vs Mutable تعیین می‌کند که داده‌ها "به ظاهر" تغییر می‌کنند یا نه.
* در مورد Immutableها مثل String، هر تغییری منجر به ساخت یک شیء جدید می‌شود.
* در مورد Mutableها مثل StringBuilder یا ArrayList، تغییرات مستقیماً روی همان شیء اثر می‌گذارد.

#کاربرـپیشرفته



🆔 @javapro_ir
🆔 @group_javapro
👍51🗿1
📌 موضوع: String Pool در جاوا و تفاوت == با equals

در جاوا رشته‌ها (`String`) یک ویژگی خاص دارند به نام String Pool. این مکانیزم باعث می‌شود مدیریت حافظه بهینه‌تر شود.


🔎 String Pool چیست؟
وقتی شما یک رشته با لیترال (Literal) بسازید، جاوا آن را در یک حافظه‌ی خاص به نام String Pool نگه می‌دارد. اگر دوباره همان رشته را با همان مقدار بسازید، جاوا از همان شیء موجود در String Pool استفاده می‌کند.


📘 مثال ۱ – استفاده از String Pool:


public class StringPoolDemo {
public static void main(String[] args) {
String s1 = "Ali";
String s2 = "Ali";

System.out.println(s1 == s2); // true
System.out.println(s1.equals(s2)); // true
}
}


👉 چرا == اینجا true شد؟
چون هر دو متغیر به یک شیء یکسان در String Pool اشاره می‌کنند.


📘 مثال ۲ – استفاده از new String():


public class StringPoolDemo2 {
public static void main(String[] args) {
String s1 = new String("Ali");
String s2 = new String("Ali");

System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
}
}


👉 این بار == false شد، چون هر بار که از new String() استفاده می‌کنیم، یک شیء جدید در حافظه Heap ساخته می‌شود (نه در String Pool).
اما equals() مقدار محتوای رشته را مقایسه می‌کند، بنابراین true می‌دهد.


📘 مثال ۳ – متد intern():


public class StringPoolDemo3 {
public static void main(String[] args) {
String s1 = new String("Ali");
String s2 = s1.intern(); // این رشته وارد String Pool می‌شود
String s3 = "Ali";

System.out.println(s2 == s3); // true
}
}


👉 متد intern() باعث می‌شود رشته وارد String Pool شود و از آن به بعد مقایسه با == هم true خواهد شد.


نتیجه‌گیری:

* همیشه از equals() برای مقایسه‌ی مقدار رشته‌ها استفاده کنید.
* == فقط بررسی می‌کند که دو متغیر به یک شیء یکسان در حافظه اشاره می‌کنند.
* بهینه‌سازی حافظه در جاوا برای رشته‌ها به کمک String Pool انجام می‌شود.

#کاربر_مبتدی


🆔 @javapro_ir
🆔 @group_javapro
5👍5
💻دوره جامع نخبگان معماری میکروسرویس ها با Java و Spring Boot بروزرسانی شد

فصل ۱۹ به دوره اضاف شد
📅تاریخ آخرین بروزرسانی:  ۱۴ مهر  ۱۴٠۴

🔺مشاهده
Please open Telegram to view this post
VIEW IN TELEGRAM
1
راه حلی برای اجرا کردن برنامه های روزانه ات

اگر میخوای آموزش ببینی، کتاب بخونی، ورزش کنی و... ولی اهمال کاری میکنی این راه حل مناسب شماست.

بخش اول

🆔 @javapro_ir
🆔 @group_javapro
👍4
راه حلی برای اجرا کردن برنامه های روزانه ات

بخش دوم (پایانی)

🆔 @javapro_ir
🆔 @group_javapro
👍3
🎆 ۱۶ مهر؛ تولد ۹ سالگی جاواپرو 9️⃣🎂

جاواپرو در ۱۶ مهر ۱۳۹۵ ساعت ۱۷:۳۷ متولد شد

۹ سال تلاش، یادگیری و رشدِ پیوسته برای ساختن دنیایی که منابع فارسی آموزش جاوا در اون غنی‌تر، کاربردی‌تر و در دسترس‌تر باشن.

با هم یاد می‌گیریم، با هم پیشرفت می‌کنیم و با هم مسیر جاوا در ایران رو روشن‌تر می‌سازیم. 🇮🇷💕🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
10🎉3
📢فصل 19 دوره جامع نخبگان میکروسرویس به دلیل انجام اصلاحات حذف شده است و پس از تکمیل اصلاحات، مجدداً در فهرست سرفصل‌ها قرار خواهد گرفت.لذا عزیزانی که سرفصل 19 را دانلود کردن آن را حذف کنند و مجدد بعد از اطلاع رسانی از سایت دانلود نمایند.

آکادمی جاواپرو
Please open Telegram to view this post
VIEW IN TELEGRAM
میدونی ماتریس SWOT چیه؟
Anonymous Poll
21%
بله
79%
خیر
2
🟥 ماتریس SWOT چیست؟

🔹 ماتریس SWOT (تلفظ: اس‌وُت) یک ابزار تحلیلی است که برای بررسی وضعیت یک موضوع، کسب‌وکار، مهارت یا حتی تصمیم شخصی استفاده می‌شود.
کلمه‌ی SWOT مخفف چهار واژه انگلیسی است:

S – Strengths نقاط قوت ویژگی‌های مثبت، مزیت‌ها یا چیزهایی که باعث برتری شما یا موضوع مورد نظر می‌شوند.
W – Weaknesses نقاط ضعف محدودیت‌ها، کمبودها یا مشکلاتی که باعث عقب‌ماندگی یا کاهش کارایی می‌شوند.
O – Opportunities فرصت‌ها شرایط بیرونی یا روندهایی که می‌توانند باعث رشد، موفقیت یا پیشرفت شوند.
T – Threats تهدیدها خطرات یا عوامل بیرونی که می‌توانند مانع پیشرفت یا باعث شکست شوند.

🔹 شکل ماتریس SWOT

معمولاً به صورت یک جدول چهارخانه نمایش داده می‌شود:

مثبت (درونی / بیرونی) منفی (درونی / بیرونی)

درونی (قابل کنترل) ⬅️نقاط قوت (S) نقاط ضعف (W)
بیرونی (غیرقابل کنترل) ⬅️فرصت‌ها (O) تهدیدها (T)

🔹 کاربرد SWOT چیه؟

از SWOT برای تحلیل تصمیم‌ها و برنامه‌ریزی استراتژیک استفاده می‌کنیم.
مثلاً می‌خوای بدونی:

آیا یادگیری زبان جاوا برایت تصمیم درستی است یا نه؟

یا اینکه آیا سرمایه‌گذاری روی یک کسب‌وکار جدید به‌صرفه است یا خطرناک؟


در این حالت، با نوشتن نقاط قوت، ضعف، فرصت و تهدید، تصویری واقعی از وضعیت به‌دست می‌آوری تا بتوانی تصمیم آگاهانه‌تری بگیری.


➡️اشتراک 👍لایک 💬کامنت

⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
7🙏3😍3
مثلا میخواید یک زبان برنامه نویسی جدید رو شروع کنید یک ماتریس شبیه چیزی که در تصویر هست میکشید و در بخش S نقاط قوت اون زبان برنامه نویسی و در بخش W نقاط ضعف اون زبان برنامه نویسی و در بخش O فرصت های اون زبان برنامه نویسی و در بخش T تهدید های اون زبان رو می نویسید اینجوری یک دید بهتری میگیرید که اصلا ارزش داره اون زبان برنامه نوییی را یاد بگیرید یا خیر

در بخش S و W به عوامل درونی اشاره داره و بخش O و T به عوامل بیرونی اشاره داره در ادامه یک مثال از ماتریس SWOT زبان برنامه نویسی جاوا براتون میزنم و برای تمرین بیشتر از هوش مصنوعی می تونید کمک بگیرید، سرچ کنید و تمرینات بیشتری انجام بدید که حسابی دست تون بیاد.

ماتریس SWOT در شروع یک مهارت جدید، راه اندازی کسب و کار، حتی ازدواج و.... میتونه بهتون کمک کنه و با دید باز تصمیم بگیرید.


➡️اشتراک 👍لایک 💬کامنت

⚡️ @javapro_ir
✈️@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
6💯3
2025/10/25 06:29:02
Back to Top
HTML Embed Code: