برنامه نویسی جاوا | Java
5.7K subscribers
1.11K photos
158 videos
379 files
1.18K links
🎓آکـــــــــادمی جاواپـــــــــــــــرو
آموزش پیش نیازهای برنامه نویسی
آموزش مقدماتی تا پیشرفته جاوا
آموزش Spring Boot
سفارش پروژه ، دوره و تدریس خصوصی: @rzutab
مشاهده دوره ها و ثبت نام👇
wwww.academyjavapro.com
گروه جاوا : @group_javapro
Download Telegram
Media is too big
VIEW IN TELEGRAM
🌟معرفی فصل هفتم دوره میکروسرویس ها با Java و Spring Boot


🟢در فصل هفتم میخوایم در مورد اعتبارسنجی صحبت کنیم.


جزییات بیشتر و ثبت نام
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
⚠️میکروسرویس‌ها بدون این الگوهای طراحی جاوا به یک آشوب تبدیل می‌شن!
داری با میکروسرویس‌ها توی جاوا کار می‌کنی؟ بدون این الگوها، خطر بی‌نظمی در کمینه.
بیا با هم بررسیشون کنیم:


۱. الگوی Saga
✔️ مدیریت تراکنش‌های توزیع‌شده
✔️ حفظ یکپارچگی داده‌ها بین سرویس‌ها

۲. دروازه API (API Gateway)
✔️نقطه ورود مرکزی
✔️مدیریت احراز هویت، محدودیت نرخ و مسیردهی

۳. قطع‌کننده مدار (Circuit Breaker)
✔️ جلوگیری از خطاهای زنجیره‌ای
✔️حفظ پایداری در زمان بروز مشکل

۴. کشف سرویس (Service Discovery)
✔️شناسایی خودکار سرویس‌ها
✔️سازگار با Eureka / Consul

🐿 ۵. الگوی DTO (Data Transfer Object)
✔️ APIهای تمیز و مرتب
✔️ جلوگیری از نمایش مدل‌های داخلی


🟢دوره میکروسرویس ها با جاوا

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


⚡️ @javapro_ir
💬@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🙏1
⭐️نوشتن کد تمیز در جاوا

نوشتن کد تمیز و قابل نگهداری در جاوا فقط درباره‌ی اجرای درست برنامه نیست — بلکه هدف این است که کدها خوانا، قابل استفاده‌ی مجدد و بادوام باشند.
⬅️کلاس‌ها و اشیاء

به اصل تک مسئولیتی پایبند باشید

ترکیب (composition) را به ارث‌بری ترجیح دهید

فیلدها را خصوصی (private) نگه دارید

برای ثابت‌ها از final استفاده کنید


⬅️نام‌گذاری

از نام‌های واضح و معنادار استفاده کنید

از camelCase برای متغیرها و متدها استفاده کنید

از PascalCase برای نام کلاس‌ها استفاده کنید


⬅️متدها

هر متد باید فقط یک کار انجام دهد

متدها را کوتاه و متمرکز نگه دارید (۵ تا ۲۰ خط یک معیار خوب است)

از اثرات جانبی پنهان خودداری کنید

تعداد پارامترهای متد را به ۳ محدود کنید؛ اگر بیشتر لازم شد، یک شیء تعریف کنید


⬅️ساختار کد

کدهای مرتبط را به‌صورت منطقی گروه‌بندی کنید

در هر فایل فقط یک کلاس عمومی (public) داشته باشید

برای ثابت‌ها از UPPER_SNAKE_CASE استفاده کنید

importهای استفاده‌نشده را مرتباً حذف کنید


⬅️طراحی شیء‌گرا (OOP)

به جای پیاده‌سازی‌ها، با واسط‌ها (interface) برنامه‌نویسی کنید

به اصول SOLID پایبند باشید

از متدهای static برای منطق تجاری (business logic) پرهیز کنید


⬅️جریان کنترل (Control Flow)

برای کاهش تو در تو شدن کد، زودتر return کنید

به جای if-elseهای طولانی از switch یا چندریختی (polymorphism) استفاده کنید

استثناها را به‌صورت معنادار مدیریت کنید — فقط گرفتن و نادیده گرفتنشان کافی نیست


🔴نکات تکمیلی

با احتیاط از Lombok استفاده کنید — اجازه ندهید پیچیدگی را پنهان کند

از Streams و Lambdas استفاده کنید، ولی مراقب خوانایی کد باشید

DTOها و Entityها را جدا نگه دارید تا معماری تمیز حفظ شود


🟢جمع‌بندی:
کد تمیز باید خودش را توضیح دهد. هدف این است که نیت شما نه فقط برای کامپایلر، بلکه برای توسعه‌دهنده‌ی بعدی (یا خود آینده‌ی شما) کاملاً روشن باشد.

عادت مورد علاقه‌ی شما در کدنویسی تمیز چیست؟ بیایید با هم به اشتراک بگذاریم و یاد بگیریم.


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


⚡️ @javapro_ir
💬@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🙏1
CompletableFuture در جاوا!

تا حالا شده منتظر پاسخ یک API یا اجرای یک کوئری کند از دیتابیس بمونید تا برنامه‌تون ادامه پیدا کنه؟
اجازه بدید یکی از ابزارهای کم‌تر شناخته‌شده ولی بسیار قدرتمند جاوا رو بهتون معرفی کنم: CompletableFuture.

👇چی هست؟

CompletableFuture راه‌کار جاوا برای نوشتن کدهای غیربلادکننده (non-blocking) و غیربه‌هنگام (asynchronous) است.

به جای اینکه برنامه‌تون منتظر بمونه، می‌تونید تسک‌ها رو به صورت موازی اجرا کنید، نتایج رو زنجیره‌ای پردازش کنید، خطاها رو مدیریت کنید — اونم بدون اینکه thread اصلی متوقف بشه.


☀️چه زمانی استفاده کنیم؟

وقتی می‌خواید چند کار رو هم‌زمان انجام بدید (مثلاً گرفتن داده از چند سرویس مختلف).

وقتی متوقف کردن thread اصلی امکان‌پذیر یا قابل قبول نیست (سلام به بهبود عملکرد!).

برای عملیات‌های سنگین I/O مثل درخواست‌های HTTP یا دسترسی به دیتابیس.

وقتی می‌خواید جریان‌های غیربه‌هنگام (asynchronous workflows) بسازید که با رسیدن داده واکنش نشون بدن.


🌟چرا فوق‌العاده‌ست؟

عملکرد برنامه رو به‌طور چشم‌گیری افزایش می‌ده (مخصوصاً در سیستم‌های مبتنی بر I/O).

اپلیکیشن شما رو پاسخ‌گو و سریع نگه می‌داره.

بهتون اجازه می‌ده کد غیربه‌هنگام بنویسید که هم تمیزه، هم قابل فهم‌تر.


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


⚡️ @javapro_ir
💬@group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61🙏1
🖋 ۲۵ سؤال برتر مصاحبه Spring Boot

سؤالات مربوط به Spring Boot در همه سطوح مصاحبه‌های جاوا رایج هستند. اگر در حال آمادگی برای مصاحبه هستید، یا در حال مصاحبه دادن هستید، یا می‌خواهید مهارت‌های خود در جاوا را ارتقا دهید، این فهرست را حتماً مرور کنید. بیایید وارد فهرست سؤالات Spring Boot شویم:

1. Spring Boot چیست؟

2. مزایای Spring Boot چیست؟

3. تفاوت بین Spring و Spring Boot چیست؟

4. Spring Boot Starter چیست؟

5. پیکربندی خودکار (auto-configuration) چیست؟

6. ‏@SpringBootApplication چه کاری انجام می‌دهد؟

7. Spring Boot چگونه ویژگی‌های (properties) برنامه را مدیریت می‌کند؟

8. چگونه پورت پیش‌فرض را در Spring Boot تغییر می‌دهید؟

9. Spring Initializr چیست؟

10. تفاوت بین @Component، ‏@Service و ‏@Repository چیست؟

11. چگونه در Spring Boot یک API مبتنی بر REST ایجاد می‌کنید؟

12. Spring Data JPA چیست؟

13. چگونه با استفاده از Spring Boot به پایگاه داده متصل می‌شوید؟

14. چگونه به صورت سراسری استثناها را در Spring Boot مدیریت می‌کنید؟

15. Spring Boot Actuator چیست؟

16. چگونه اندپوینت‌های Actuator را فعال و سفارشی‌سازی می‌کنید؟

17. پروفایل در Spring Boot چیست؟

18. چگونه یک برنامه Spring Boot را ایمن‌سازی می‌کنید؟

19. چگونه در Spring Boot لاگ‌گذاری (Logging) انجام می‌دهید؟

20. چگونه در Spring Boot وظایف زمان‌بندی‌شده (Scheduled Tasks) تعریف می‌کنید؟

21. DevTools در Spring Boot چیست؟

22. هدف از spring-boot-devtools چیست؟

23. هدف از spring-boot-devtools چیست؟ (تکراری)

24. چگونه در Spring Boot تست واحد (Unit Test) می‌نویسید؟

25. چگونه یک برنامه Spring Boot را مستقر (Deploy) می‌کنید؟

🟢دوره Spring Core
🟢دوره Spring Boot- کتابفروشی

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


⚡️ @javapro_ir
💬@group_javapro




#مصاحبه #استخدام #جاوا #Spring_boot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🤖 Java + AI: ترکیب قدرتمندی که انتظارش😊 را نداشتید 🚀

📱جاوا در مهمانی هوش مصنوعی دیر نرسیده؛ بلکه همان کسی‌ست که ابزارهای مناسب تولید را روی میز آورده است.

🧰 ابزارها

DJL، Tribuo، Deeplearning4j

Spring AI = یکپارچگی بی‌نقص

عملکرد JVM + CRaC + GraalVM = آتشین و سریع


📇 تعامل‌پذیری (Interoperability)

جاوا به‌خوبی با ONNX، TensorFlow، PyTorch کار می‌کند
نیازی به لایه ترجمه نیست — فقط وصل کن و بساز


---

🏭 آماده برای تولید (Production Ready)

امنیت، عملکرد و مانیتورینگ داخلی
برنامه‌های AI را با همان قابلیت اطمینان معروف جاوا در مقیاس بالا اجرا کنید


💡 جاوا فقط در حال یادگیری AI نیست؛ دارد آن را در مقیاس سازمانی راه‌اندازی می‌کند. این غول به‌ظاهر قدیمی را دست‌کم نگیرید.🤖


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


⚡️ @javapro_ir
💬@group_javapro




#java #جاوا #هوش_مصنوعی #ai
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1🙏1
👩‍💻👩‍💻پروتکل جایگزین Model Context: یکپارچه‌سازی ابزارهای هوش مصنوعی با Spring و Java

هوش مصنوعی در حال تغییر نحوه ساخت سیستم‌های بک‌اند است — و جاوا دیگر تماشاگر این تحول نیست.


👩‍💻در سال ۲۰۲۵، توسعه‌دهندگان جاوا فراتر از APIهای REST و gRPC رفته‌اند. حالا ما مدل‌های هوش مصنوعی را مستقیماً در سرویس‌های Spring Boot خود جای می‌دهیم، با استفاده از الگوهای یکپارچه‌سازی سبک، کارآمد و وابسته به بستر اجرایی.

💡 ایده چیست؟
نه فقط فراخوانی مدل‌های هوش مصنوعی… بلکه تبدیل آن‌ها به بخشی طبیعی از جریان کاری برنامه.

🔎 چه چیزی باعث این تغییر شده؟

✔️REST برای کاربردهای بلادرنگ هوش مصنوعی بیش از حد سنگین است

✔️gRPC پیچیدگی‌ای دارد که بسیاری از تیم‌ها نیازی به آن ندارند

✔️تیم‌های جاوا به روشی ساده و سبک برای اتصال به هوش مصنوعی نیاز دارند


⚙️ ابزارهایی که این تحول را ممکن کرده‌اند:

Spring AI – یکپارچه‌سازی OpenAI، Hugging Face و سایر مدل‌ها با Spring Boot

LangChain4J – آوردن جریان‌های کاری مبتنی بر عامل به جاوا

Kompact AI – اجرای مدل‌های بزرگ هوش مصنوعی روی CPU (بله، بدون نیاز به GPU!)

OpenAI + مبدل‌های سفارشی – مناسب برای تفکر مدل‌محور


معماری تمیزتر
استنتاج سریع‌تر
تست و بازگشت‌پذیری آسان‌تر
جریان‌های کاری یکپارچه و مبتنی بر هوش مصنوعی

‼️در سال ۲۰۲۵، Spring Boot دیگر فقط یک فریم‌ورک بک‌اند نیست.
در حال تبدیل شدن به یک پلتفرم مجهز به هوش مصنوعی است.

آیا شما هم هوش مصنوعی را در اپلیکیشن‌های Java خود یکپارچه کرده‌اید؟


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


⚡️ @javapro_ir
💬@group_javapro




#java #جاوا #هوش_مصنوعی #ai
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🙏1
👑 دو نفر برای کلاس خصوصی آنلاین «جاوا» در این ماه پذیرش داریم.

📷این کلاس‌ها مناسب چه کسانی‌ست؟

افرادی که می‌خوان از صفر جاوا رو یاد بگیرن

کسانی که دارن به‌صورت خودخوان جاوا یاد می‌گیرن و نیاز به رفع اشکال دارن

🟢البته شرکت‌کنندگان دوره‌های «جاواپرو» معمولاً نیازی به کلاس خصوصی ندارن، چون:

مباحث دقیق و مرحله‌به‌مرحله آموزش داده شده

پشتیبانی اختصاصی در تلگرام براشون فعاله

اما بعضی‌ها ترجیح می‌دن با کلاس خصوصی جلو برن. برای این دسته هم در «جاواپرو» شرایط فراهمه.

📞برای دریافت اطلاعات بیشتر، به آی‌دی زیر پیام بدید:
@rzutab
Please open Telegram to view this post
VIEW IN TELEGRAM
Channel name was changed to «♨️آموزش ️️برنامه نویسی جاوا | Java»
⚠️هشدار اصول طراحی در جاوا: SOLID – راز کد تمیز

📌 مورد توافق مصاحبه‌گران و توسعه‌دهندگان:
درک اصول SOLID برای نوشتن برنامه‌های جاوایی که قابل توسعه، نگهداری‌پذیر و انعطاف‌پذیر باشند، حیاتی است. آیا این اصول را در پروژه‌هایت به کار می‌بری؟

🔍 هدف:
• اصل مسئولیت یگانه (SRP): هر کلاس فقط یک وظیفه دارد.
• اصل باز/بسته (OCP): قابلیت توسعه بدون نیاز به تغییر.
• اصل جایگزینی لیسکوف (LSP): زیرکلاس‌ها باید بدون تغییر رفتار قابل جایگزینی باشند.
• اصل تفکیک رابط (ISP): رابط‌های کوچک و تخصصی بهتر از رابط‌های بزرگ هستند.
• اصل وارونگی وابستگی (DIP): وابستگی به انتزاع، نه پیاده‌سازی.

📑 قرارداد SOLID (محبوب ۱۰۰٪ در مصاحبه‌ها):

1️⃣ اصل مسئولیت یگانه (SRP):
هر کلاس فقط باید یک دلیل برای تغییر داشته باشد.
مثال: کلاس UserService فقط باید منطق مربوط به کاربر را مدیریت کند، نه ذخیره‌سازی داده.

2️⃣ اصل باز/بسته (OCP):
کد باید برای توسعه باز، اما برای تغییر بسته باشد.
مثال: قابلیت افزودن ویژگی جدید با ایجاد کلاس جدید، بدون تغییر در کدهای قبلی.

3️⃣ اصل جایگزینی لیسکوف (LSP):
زیرکلاس‌ها باید قابل جایگزینی با کلاس پایه باشند، بدون اختلال در عملکرد.
مثال: Square نباید Rectangle را توسعه دهد، مگر اینکه دقیقاً مثل آن رفتار کند.

4️⃣ اصل تفکیک رابط (ISP):
رابط‌ها باید کوچک و دقیق باشند.
مثال: اجبار کلاس‌ها به پیاده‌سازی متدهای غیرضروری اشتباه است.

5️⃣ اصل وارونگی وابستگی (DIP):
ماژول‌های سطح بالا باید به انتزاع‌ها وابسته باشند، نه به ماژول‌های سطح پایین.
مثال: استفاده از تزریق وابستگی برای جدا کردن اجزای برنامه.

🧠 تأثیر در دنیای واقعی:
عدم رعایت SOLID منجر به موارد زیر می‌شود:
🚩 کدی که نگهداری آن سخت است
🪱 عدم انعطاف در افزودن ویژگی‌ها
🕷 سیستم‌هایی پر از باگ و دشوار برای تست

🟢 قانون طلایی (مستقیم از مصاحبه‌ها):
اگر برنامه جاوایی پیچیده‌ای می‌نویسی، رعایت اصول SOLID ضروری است. کدت ساده‌تر نگهداری، تست و توسعه‌ خواهد شد.

🤔 پرسش سریع:
تا حالا کدی را برای تطبیق با اصول SOLID بازنویسی کرده‌ای؟ کدام اصل را در کارت مؤثرتر می‌دانی؟ بیا گفتگو کنیم!

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


⚡️ @javapro_ir
💬@group_javapro



#️⃣ #جاوا #برنامه_نویسی #java
Please open Telegram to view this post
VIEW IN TELEGRAM
1
در حال آماده شدن برای مصاحبه‌های شغلی جاوا هستی؟ ویژگی‌های Java 8 را نادیده نگیر!

فرقی نمی‌کند که برای شرکت‌های بزرگ مثل Google، Amazon، Microsoft آماده می‌شوی یا استارتاپ‌های مطرح را هدف گرفته‌ای — آشنایی با Java 8 در مصاحبه‌ها ضروری است.

Java 8 تحول بزرگی در برنامه‌نویسی جاوا🟢
ایجاد کرد و قابلیت‌هایی آورد که کدها را خواناتر، نگه‌داشت‌پذیرتر و تابع‌محورتر کرد.

در تصویر ضمیمه شده، مهم‌ترین ویژگی‌های Java 8 آمده که هر توسعه‌دهنده‌ی جاوا باید به آن‌ها مسلط باشد.
این ویژگی‌ها فقط تئوری نیستند — در مصاحبه‌ها از شما می‌خواهند که با آن‌ها کدنویسی کنید و در سناریوهای واقعی از آن‌ها استفاده کنید!

نکته: تمرین عملی را جدی بگیر. سعی کن حلقه‌های قدیمی را با استفاده از Stream API و ساختارهای تابع‌محور بازنویسی کنی.

اگر برای مصاحبه‌ها آماده می‌شوی، تسلط بر Java 8 می‌تواند همان مزیتی باشد که تو را متمایز می‌کند.

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


⚡️ @javapro_ir
💬@group_javapro



#️⃣ #جاوا #برنامه_نویسی #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
💡مدیریت حافظه در جاوا و جمع‌آوری زباله (Garbage Collection)

در اپلیکیشن‌های پرفورمنس‌محور جاوا، درک نحوه مدیریت حافظه در پشت‌صحنه می‌تواند یک تغییر اساسی ایجاد کند — نه فقط برای بهینه‌سازی، بلکه برای نوشتن کدی تمیز و مقیاس‌پذیر.
📄اخیراً مفاهیم اصلی مربوط به ساختار حافظه در جاوا و فرآیند جمع‌آوری زباله را مرور کردم و در ادامه خلاصه‌ای دقیق از نکاتی آورده‌ام که هر توسعه‌دهنده بک‌اند باید بداند:

📅ساختار حافظه در جاوا

Heap Space (فضای هیپ): به دو بخش تقسیم می‌شود: نسل جوان (Young Generation) شامل Eden و Survivorها، و نسل قدیم (Old Generation). اشیاء کوتاه‌عمر ابتدا در Young Generation ایجاد می‌شوند و اگر از چرخه‌های GC جان سالم به در ببرند، به Old Generation منتقل می‌شوند.

Stack Memory (حافظه پشته): مدیریت‌کننده فراخوانی‌های متد، متغیرهای محلی، و نتایج میانی است — برای هر ترد به‌صورت مجزا اختصاص می‌یابد.

Method Area / Metaspace: شامل متادیتاهای سطح کلاس، اطلاعات متدها، و متغیرهای static است.

جمع‌آوری زباله (Garbage Collection) و فرآیند آن

Minor GC: حافظه نسل جوان را پاک‌سازی می‌کند — سریع و پرتکرار.

Major (Full) GC: حافظه نسل قدیم را پاک‌سازی می‌کند — پرهزینه‌تر، اما بسیار حیاتی.


🔴انواع جمع‌آورنده‌های زباله:

Serial GC: ساده و تک‌نخی

Parallel GC: بهینه‌شده برای کارایی بالا (Throughput)

CMS GC: بهینه‌شده برای تأخیر کم

G1 GC: مبتنی بر منطقه (Region-based)، تعادلی میان زمان توقف و عملکرد


🔹نکاتی برای بهینه‌سازی عملکرد

از ایجاد بی‌مورد اشیاء خودداری کنید

از ساختارهای داده‌ای با بهره‌وری حافظه استفاده کنید

فعالیت GC را با ابزارهایی مثل JVisualVM و لاگ‌های GC مانیتور کنید

پارامترهای JVM را متناسب با GC مورد استفاده تنظیم کنید

درک این مفاهیم فقط برای رفع نشت حافظه یا تنظیم پرفورمنس نیست — بلکه کلیدی‌ست برای تبدیل شدن به یک مهندس جاوای کارآمد و حرفه‌ای.

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


⚡️ @javapro_ir
💬@group_javapro



#️⃣ #جاوا #برنامه_نویسی #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📣استخدام برنامه نویس جاوا داتین

🔹محل کار
پردیس
🔹روز و ساعت کاری
44 ساعت در هفته
🔹نوع همکاری
تمام وقت
🔹مزایا و تسهیلات
سرویس رفت و برگشت -وام -پاداش -بیمه درمان تکمیلی -پارکینگ -کمک هزینه دوره آموزشی -بن خرید -ناهار -پزشک سازمانی -صبحانه -بسته ها و هدایای مناسبتی
سفرهای کاری

🟢شرح شغل و وظایف
ما در داتین به‌دنبال همکاری خلاق و باپشتکار هستیم تا در نقش برنامه‌نویس جاوا در تیم‌های توسعه نرم‌افزاری ما را همراهی کند.

✔️ برنامه‌نویس جاوا در داتین با پذیرفتن مسئولیت‌های زیر به پیش‌برد اهداف تیم کمک می‌کند:

طراحی و پیاده سازی نیاز های زیرساختی توسعه نرم افزار
 بهبود زیرساختی سامانه موجود و تلاش در جهت توسعه ویژگی های جدید

✔️برای انجام بهتر این وظایف دانش و مهارت‌های زیر نیاز است:

تسلط بر JavaSE 
آشنایی با JavaEE 
تسلط بر مفاهیم شیءگرایی  
تسلط بر اصول و الگوهای طراحی و توسعه نرم‌افزار و Clean Code 
آشنایی با ORM (ترجیحاً Hibernate) 
آشنایی با مفاهیم پایگاه داده و توانایی نوشتن Query 
آشنایی با معماری نرم افزار، خصوصا معماری‌های لایه‌ای و microservice
آشنایی با مفاهیم بانکی مزیت محسوب می‌شود. 

🖱جزییات بیشتر و ارسال رزومه


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


⚡️ @javapro_ir
💬@group_javapro



#️⃣ #جاوا #برنامه_نویسی #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🟥کوییز – مفاهیم شی‌گرایی در جاوا

کد زیر را در نظر بگیرید:
class Animal {
    void speak() {
        System.out.println("Animal speaks");
    }
}

class Dog extends Animal {
    void speak() {
        System.out.println("Dog barks");
    }
}

class Cat extends Animal {
    void speak() {
        System.out.println("Cat meows");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal a1 = new Dog();
        Animal a2 = new Cat();
        Animal a3 = new Animal();

        a1.speak();
        a2.speak();
        a3.speak();
    }
}


سؤال: خروجی اجرای برنامه چیست؟

الف)
Animal speaks 
Animal speaks 
Animal speaks

ب)
Dog barks 
Cat meows 
Animal speaks

ج)
Dog barks 
Dog barks 
Dog barks

د)
خطای کامپایل رخ می‌دهد




پاسخ صحیح: ب)

Dog barks 
Cat meows 
Animal speaks

توضیح:

در این مثال:

کلاس Animal یک متد speak() دارد.

کلاس‌های Dog و Cat آن را override کرده‌اند.

در زمان اجرا، به خاطر پدیده Polymorphism، نسخه متدی اجرا می‌شود که به نوع شیء واقعی مرتبط است، نه نوع ارجاع.



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


⚡️ @javapro_ir
💬@group_javapro



#️⃣ #جاوا #برنامه_نویسی #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🧠 آشنایی با LinkedHashMap در زبان Java

کلاس LinkedHashMap در Java برای ذخیره‌سازی داده‌ها به‌صورت کلید-مقدار (Key-Value) همراه با حفظ ترتیب درج طراحی شده است. این کلاس ترکیبی از سرعت HashMap و ترتیب LinkedList را در اختیار قرار می‌دهد.

🔹 کاربرد

در موقعیت‌هایی که نیاز به نگهداری داده‌ها با حفظ ترتیب وارد کردن آن‌ها وجود دارد، استفاده از LinkedHashMap انتخاب مناسبی به‌شمار می‌آید. برخی کاربردهای رایج:

* پیدا کردن اولین کاراکتر یا عنصر غیرتکراری در مجموعه‌ای از داده‌ها
* پیاده‌سازی حافظه پنهان (Cache) با سیاست حذف عناصر قدیمی (LRU)
* نگهداری داده‌ها با ترتیب ثابت برای گزارش‌گیری یا نمایش خروجی

🔹 سازنده‌ها

کلاس LinkedHashMap چند نوع سازنده دارد که شامل موارد زیر می‌شود:


LinkedHashMap<K, V> map = new LinkedHashMap<>();
LinkedHashMap<K, V> map = new LinkedHashMap<>(initialCapacity);
LinkedHashMap<K, V> map = new LinkedHashMap<>(initialCapacity, loadFactor);
LinkedHashMap<K, V> map = new LinkedHashMap<>(initialCapacity, loadFactor, accessOrder);


در صورتی که مقدار accessOrder برابر true قرار داده شود، ترتیب بر اساس آخرین دسترسی به عنصر خواهد بود.

🔹 توابع کاربردی مهم

کلاس LinkedHashMap توابعی برای مدیریت داده‌ها فراهم می‌کند که شامل موارد زیر است:

*متد`put(key, value)` ← افزودن یا بروزرسانی مقدار برای کلید مشخص
*متد get(key) ← دریافت مقدار متناظر با کلید
*متد containsKey(key) ← بررسی وجود کلید
*متد containsValue(value) ← بررسی وجود مقدار
*متد remove(key) ← حذف کلید و مقدار
*متد clear() ← حذف تمامی داده‌ها
*متد size() ← تعداد عناصر موجود
*متد isEmpty() ← بررسی خالی بودن ساختار
*متد keySet() ← مجموعه‌ای از کلیدها به‌ترتیب درج
*متد values() ← مجموعه‌ای از مقادیر به‌ترتیب درج
*متد entrySet() ← مجموعه‌ای از جفت‌های کلید-مقدار

🔹 مثال ساده

در مثال زیر، نمرات تعدادی از دانش‌آموزان در LinkedHashMap درج شده و به ترتیب ورود چاپ می‌شود:


import java.util.LinkedHashMap;

public class Example {
public static void main(String[] args) {
LinkedHashMap<String, Integer> scores = new LinkedHashMap<>();

scores.put("ali", 85);
scores.put("maryam", 92);
scores.put("reza", 78);

for (String name : scores.keySet()) {
System.out.println(name + " -> " + scores.get(name));
}
}
}


📤 خروجی برنامه:


ali -> 85
maryam -> 92
reza -> 78


🔹 جمع‌بندی

برای مواقعی که نیاز به نگهداری ترتیب درج داده‌ها همراه با سرعت بالای جست‌وجو وجود داشته باشد، LinkedHashMap یکی از بهترین انتخاب‌ها در Java است. علاوه بر این، با استفاده از ویژگی accessOrder و بازنویسی تابع removeEldestEntry امکان پیاده‌سازی کش‌هایی مانند LRU نیز فراهم می‌شود.


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


🆔 @javapro_ir
🆔 @group_javapro
👍5
همه میخوان Spring Boot را یاد بگیرن ولی نمیدونن بعد از Java SE و قبل از شروع یادگیری Spring Boot باید بر مباحث Spring Core مسلط باشند.

جاواپرو اولین سایت آموزشی در ایران( حداقل من جایی در سایت های فارسی ندیدم) که دوره Spring Core رو تهیه کرده است.

جهت ثبت نام در دوره اینجا کلیک کنید.
👍1
🤯میدونستی مباحث دوره Spring Core آکادمی جاواپرو از مباحث دوره udemy کامل تر است!

👍اگر بر Java Core مسط شدی و میخوای اسپرینگ بوت رو شروع کنی پیشنهاد میکنم ابتدا Spring Core رو یاد بگیری...


جزییات بیشتر و ثبت نام
Please open Telegram to view this post
VIEW IN TELEGRAM
2
❗️دوره Spring Core عنوانش باعث شده که شاید خیلی جدیش نگیری ولی...

درواقع ما داریم در جاواپرو موارد زیر را در این دوره آموزش میدیم!

🟢spring data Jpa
🟢Spring core
🟢Hibernate
🟢SQL server
🟢T-SQL


دوره بعد از پایان اردیبهشت افزایش قیمت خواهد داشت... الان میتونی با قیمت فعلی ثبت نام کنی و آپدیت های دوره برای دانشجویان قبلی رایگان خواهد بود.

ثبت نام
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🔘کم‌ارزش‌ترین ویژگی Spring Boot که باید بیشتر دیده شود؟

👨‍💻تجربه یک برنامه نویس

همه عاشق @RestController، @Service و جادوی Spring هستند.
اما قهرمان واقعی در پروژه‌های من؟
@EventListener

ما ازش استفاده کردیم تا یک سرویس شلوغ و درهم رو پاک‌سازی کنیم که وظایف زیر رو انجام می‌داد: • 💳 پرداخت‌ها
✉️ اعلان‌ها
📑 لاگ‌های حسابرسی

الان تبدیل شده به:
▶️ یک رویداد
▶️ چند شنونده‌ی تمیز
▶️ کدی ماژولار، قابل تست و جدا از هم

می‌خوای پردازش ناهمزمان هم داشته باشی؟ فقط کافیه @Async رو هم اضافه کنی—تمام!⚡️

نه یه قابلیت براق جدیده، نه یه موضوع داغ.
اما بی‌سروصدا نحوه ساخت سرویس‌هامون رو متحول کرد.

به‌نظرت کم‌ارزش‌ترین ویژگی Spring Boot چیه؟ بیا توی کامنت‌ها رازمونو با هم بگیم!

🆔 @javapro_ir
🆔 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
💡مثال از استفاده‌ی ترکیبی @EventListener و @Async در Spring Boot. این مثال شامل:

1. تعریف یک رویداد سفارشی (UserRegisteredEvent)

2. انتشار رویداد از یک سرویس

3. دریافت رویداد توسط یک Listener با @EventListener

4. اجرای Listener به‌صورت ناهمزمان با @Async

🔘1. پیکربندی فعال‌سازی Async

// AppConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;

@Configuration
@EnableAsync
public class AppConfig {
}

---

🔘2. تعریف رویداد سفارشی

// UserRegisteredEvent.java
import org.springframework.context.ApplicationEvent;

public class UserRegisteredEvent extends ApplicationEvent {
    private final String email;

    public UserRegisteredEvent(Object source, String email) {
        super(source);
        this.email = email;
    }

    public String getEmail() {
        return email;
    }
}

---

🔘3. سرویس ثبت کاربر و انتشار رویداد

// UserService.java
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    private final ApplicationEventPublisher publisher;

    public UserService(ApplicationEventPublisher publisher) {
        this.publisher = publisher;
    }

    public void registerUser(String email) {
        // ثبت کاربر در دیتابیس یا عملیات دیگر (اینجا شبیه‌سازی می‌کنیم)
        System.out.println("User registered: " + email);

        // انتشار رویداد
        publisher.publishEvent(new UserRegisteredEvent(this, email));
    }
}


🔘4. شنونده‌ی رویداد با @EventListener و @Async


// NotificationListener.java
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.context.event.EventListener;

@Component
public class NotificationListener {

    @Async
    @EventListener
    public void handleUserRegistration(UserRegisteredEvent event) {
        // شبیه‌سازی ارسال ایمیل
        try {
            Thread.sleep(2000); // تأخیر برای شبیه‌سازی پردازش سنگین
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }

        System.out.println("Sending welcome email to: " + event.getEmail());
    }


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

⚡️ @javapro_ir
💬@group_javapro



#جاوا #برنامه_نویسی #java #spring_boot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1