جاواپرو | برنامه نویسی جاوا | Java
جلسه ۲۳ تهران جاگ زمان: پنج شنبه ۲۹ آبان ۱۴۰۴ ساعت ۰۹:۰۰ الی ۱۴:۰۰ مکان: ملاصدرا، خیابان عباس شیرازی شمالی، خیابان حکیم اعظم، پلاک ۳۰، دانشگاه خاتم، همکف، سالن آمفی تأتر لینک ثبت نام: https://evand.com/events/tehjug23 موضوع جلسه: An Analysis of The Latest…
این دورهمیها و جلسات، هم دانش و اطلاعات شما را در زمینهٔ برنامه نویسی جاوا بهروز میکند و هم برای شبکهسازی و ارتباطسازی توصیه میشود.
سادهسازی توسعه جاوا با Starter Dependencies در اسپرینگ بوت!
اسپرینگ بوت توسعه جاوا را سریعتر، تمیزتر و آسانتر میکند، چون مجموعهای از وابستگیهای ازپیشپیکربندیشده ارائه میدهد — دیگر نیازی به تنظیمات دستی چندین فایل JAR یا پیکربندیهای پیچیده نیست!
🔹 استارترها چه هستند؟
استارترهای اسپرینگ بوت مجموعههای آمادهای از وابستگیها هستند که تنظیمات Maven یا Gradle را بسیار ساده میکنند.
بهجای اضافه کردن دهها کتابخانه به صورت دستی، کافیست فقط یک استارتر را اضافه کنید — و پروژه آماده اجراست!
پرکاربردترین استارترهای اسپرینگ بوت:
1️⃣ spring-boot-starter-web →
برای ساخت REST API و برنامههای وب
2️⃣ spring-boot-starter-data-jpa → برای اتصال به دیتابیس با استفاده از JPA/Hibernate
3️⃣ spring-boot-starter-security → برای احراز هویت و کنترل دسترسی
4️⃣ spring-boot-starter-test →
برای تستهای واحد و یکپارچه
💡 استارترها = افزایش بهرهوری!
استفاده از استارترها کدهای اضافی را حذف میکند و باعث میشود پروژه شما سبک، یکپارچه و قابل نگهداری بماند.
📚لیست دوره های تخصصی مرتبط با جاوا
اسپرینگ بوت توسعه جاوا را سریعتر، تمیزتر و آسانتر میکند، چون مجموعهای از وابستگیهای ازپیشپیکربندیشده ارائه میدهد — دیگر نیازی به تنظیمات دستی چندین فایل JAR یا پیکربندیهای پیچیده نیست!
🔹 استارترها چه هستند؟
استارترهای اسپرینگ بوت مجموعههای آمادهای از وابستگیها هستند که تنظیمات Maven یا Gradle را بسیار ساده میکنند.
بهجای اضافه کردن دهها کتابخانه به صورت دستی، کافیست فقط یک استارتر را اضافه کنید — و پروژه آماده اجراست!
پرکاربردترین استارترهای اسپرینگ بوت:
1️⃣ spring-boot-starter-web →
برای ساخت REST API و برنامههای وب
2️⃣ spring-boot-starter-data-jpa → برای اتصال به دیتابیس با استفاده از JPA/Hibernate
3️⃣ spring-boot-starter-security → برای احراز هویت و کنترل دسترسی
4️⃣ spring-boot-starter-test →
برای تستهای واحد و یکپارچه
💡 استارترها = افزایش بهرهوری!
استفاده از استارترها کدهای اضافی را حذف میکند و باعث میشود پروژه شما سبک، یکپارچه و قابل نگهداری بماند.
📚لیست دوره های تخصصی مرتبط با جاوا
🆔 @javapro_ir
🆔 @group_javapro
👍2
جاواپرو | برنامه نویسی جاوا | Java
Photo
جیاِسپی،(JavaServer Pages) — ساخت محتوای وب پویا
جیاِسپی (JSP) قدرت سروالتها را با این امکان گسترش میدهد که توسعهدهندگان بتوانند کد جاوا را مستقیماً داخل صفحات HTML قرار دهند؛ به این ترتیب ایجاد برنامههای وب پویا و دادهمحور بسیار آسانتر میشود.
در حالی که سروالتها منطق اصلی را در پشت صحنه مدیریت میکنند، JSP بر بخش ارائه (Presentation) تمرکز دارد و ساخت رابط کاربری را سادهتر میکند.
✨ ویژگیهای کلیدی JSP:
1️⃣ تفکیک مسئولیتها → جداسازی منطق تجاری (سروالتها) از لایه نمایش (JSP).
2️⃣ کتابخانههای تگ (Tag Libraries) → تگهای قابلاستفاده مجدد که توسعه را ساده کرده و از تکرار کد جلوگیری میکنند.
3️⃣ زبان عبارتنویسی (EL) → دسترسی ساده به JavaBeans و دادهها در داخل JSP.
4️⃣ دستورات و اکشنهای JSP → کنترل رفتار صفحه و امکان استفاده از مؤلفههای قابلتکرار.
🔹 چرخهٔ حیات JSP:
ترجمه (Translation): تبدیل فایل JSP به یک کلاس Servlet
کامپایل (Compilation): کامپایل به بایتکد
اجرا (Execution): پردازش درخواستها توسط سروالت و تولید خروجی HTML پویا
💡 ر JSP را میتوان لایهٔ دیداری (View Layer) در نظر گرفت که در هماهنگی کامل با سروالتها کار میکند — ترکیب منطق + نمایش در بهترین حالت!
جیاِسپی (JSP) قدرت سروالتها را با این امکان گسترش میدهد که توسعهدهندگان بتوانند کد جاوا را مستقیماً داخل صفحات HTML قرار دهند؛ به این ترتیب ایجاد برنامههای وب پویا و دادهمحور بسیار آسانتر میشود.
در حالی که سروالتها منطق اصلی را در پشت صحنه مدیریت میکنند، JSP بر بخش ارائه (Presentation) تمرکز دارد و ساخت رابط کاربری را سادهتر میکند.
✨ ویژگیهای کلیدی JSP:
1️⃣ تفکیک مسئولیتها → جداسازی منطق تجاری (سروالتها) از لایه نمایش (JSP).
2️⃣ کتابخانههای تگ (Tag Libraries) → تگهای قابلاستفاده مجدد که توسعه را ساده کرده و از تکرار کد جلوگیری میکنند.
3️⃣ زبان عبارتنویسی (EL) → دسترسی ساده به JavaBeans و دادهها در داخل JSP.
4️⃣ دستورات و اکشنهای JSP → کنترل رفتار صفحه و امکان استفاده از مؤلفههای قابلتکرار.
🔹 چرخهٔ حیات JSP:
ترجمه (Translation): تبدیل فایل JSP به یک کلاس Servlet
کامپایل (Compilation): کامپایل به بایتکد
اجرا (Execution): پردازش درخواستها توسط سروالت و تولید خروجی HTML پویا
💡 ر JSP را میتوان لایهٔ دیداری (View Layer) در نظر گرفت که در هماهنگی کامل با سروالتها کار میکند — ترکیب منطق + نمایش در بهترین حالت!
🆔 @javapro_ir
🆔 @group_javapro
💯1
📘 آشنایی با ThreadLocal و نقش آن در Thread-Safe بودن دادهها
در برنامهنویسی همزمانی (Concurrency) در جاوا، یکی از چالشهای مهم این است که هر Thread بتواند دادههای مخصوص خود را داشته باشد، بدون آنکه این دادهها میان Threadهای مختلف به اشتراک گذاشته شود. کلاس ThreadLocal برای حل دقیق همین مسئله طراحی شده و یکی از ابزارهای بسیار قدرتمند و ظریف در ساخت برنامههای Thread-Safe محسوب میشود.
✳️ ۱. ThreadLocal چیست؟
در حالت عادی، اگر چند Thread به یک متغیر مشترک دسترسی داشته باشند، احتمال بروز مشکلاتی مانند Race Condition وجود دارد. کلاس ThreadLocal با نگهداشتن یک نسخهٔ مجزا از داده برای *هر Thread*، این مشکل را کاملاً حذف میکند.
هر Thread یک مقدار مستقل دارد و تغییر مقدار توسط یک Thread، هیچ تأثیری روی Threadهای دیگر ندارد. این رفتار شبیه داشتن یک «کپی خصوصی» از متغیر برای هر Thread است.
✳️ ۲. کاربرد اصلی ThreadLocal
متداولترین کاربرد ThreadLocal، نگهداری دادههایی است که هر Thread بهصورت جداگانه به آنها نیاز دارد؛ مانند:
* نگهداری Session کاربر در یک سرویس چندریسمانی
* ذخیرهٔ اطلاعات Request در وبسرورها
* مدیریت تاریخ و زمان با کلاسهایی که Thread-Safe نیستند (مثل SimpleDateFormat)
* نگهداری موقت داده در طول اجرای یک Thread بدون نیاز به Passing در پارامترها
✳️ ۳. مثال کاربردی: ذخیرهسازی داده خصوصی برای هر Thread
در مثال زیر، هر Thread یک مقدار مستقل دارد و تغییر مقدار یک Thread روی دیگری اثر نمیگذارد:
اجرای این برنامه خروجی زیر را میدهد:
هر Thread مقدار جداگانهای دارد و هیچگونه اشتراک دادهای رخ نمیدهد.
✳️ ۴. مثال پیشرفته: حل مشکل Thread-Safety در SimpleDateFormat
کلاس SimpleDateFormat بهصورت پیشفرض Thread-Safe نیست. بنابراین برای استفاده در محیط همزمانی، ThreadLocal یکی از بهترین راهحلهاست.
در اینجا هر Thread یک نمونهٔ مستقل از SimpleDateFormat دارد و مشکل رقابت (Race Condition) کاملاً از بین میرود.
✳️ ۵. نکته بسیار مهم: مدیریت حافظه و جلوگیری از Memory Leak
در استفاده از ThreadLocal باید بسیار دقت کرد، زیرا اگر مقدار ذخیرهشده در ThreadLocal پس از پایان کار Thread حذف نشود، ممکن است مشکلات Memory Leak بهوجود بیاید؛ بهخصوص در محیطهایی مانند سرورهای وب که Thread Pool استفاده میشود.
بهترین روش این است که همیشه پس از پایان کار مقدار ThreadLocal را پاک کنیم:
این کار از باقیماندن داده در ThreadPool جلوگیری میکند.
✳️ ۶. جمعبندی
درک و استفادهٔ درست از ThreadLocal یکی از مهارتهای مهم در ساخت سیستمهای چندریسمانی پایدار است:
* هر Thread یک نسخهٔ خصوصی از داده دارد.
* هیچ تداخلی بین Threadها ایجاد نمیشود.
* مناسب برای دادههای حساس، مانند Request Context یا Formatterها.
* نیازمند مدیریت دقیق برای جلوگیری از Memory Leak.
در برنامهنویسی همزمانی (Concurrency) در جاوا، یکی از چالشهای مهم این است که هر Thread بتواند دادههای مخصوص خود را داشته باشد، بدون آنکه این دادهها میان Threadهای مختلف به اشتراک گذاشته شود. کلاس ThreadLocal برای حل دقیق همین مسئله طراحی شده و یکی از ابزارهای بسیار قدرتمند و ظریف در ساخت برنامههای Thread-Safe محسوب میشود.
✳️ ۱. ThreadLocal چیست؟
در حالت عادی، اگر چند Thread به یک متغیر مشترک دسترسی داشته باشند، احتمال بروز مشکلاتی مانند Race Condition وجود دارد. کلاس ThreadLocal با نگهداشتن یک نسخهٔ مجزا از داده برای *هر Thread*، این مشکل را کاملاً حذف میکند.
هر Thread یک مقدار مستقل دارد و تغییر مقدار توسط یک Thread، هیچ تأثیری روی Threadهای دیگر ندارد. این رفتار شبیه داشتن یک «کپی خصوصی» از متغیر برای هر Thread است.
✳️ ۲. کاربرد اصلی ThreadLocal
متداولترین کاربرد ThreadLocal، نگهداری دادههایی است که هر Thread بهصورت جداگانه به آنها نیاز دارد؛ مانند:
* نگهداری Session کاربر در یک سرویس چندریسمانی
* ذخیرهٔ اطلاعات Request در وبسرورها
* مدیریت تاریخ و زمان با کلاسهایی که Thread-Safe نیستند (مثل SimpleDateFormat)
* نگهداری موقت داده در طول اجرای یک Thread بدون نیاز به Passing در پارامترها
✳️ ۳. مثال کاربردی: ذخیرهسازی داده خصوصی برای هر Thread
در مثال زیر، هر Thread یک مقدار مستقل دارد و تغییر مقدار یک Thread روی دیگری اثر نمیگذارد:
public class ThreadLocalExample {
private static ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(() -> 0);
public static void main(String[] args) {
Runnable task = () -> {
int value = threadLocal.get();
threadLocal.set(value + 1);
System.out.println(Thread.currentThread().getName() + " → " + threadLocal.get());
};
new Thread(task, "Thread-A").start();
new Thread(task, "Thread-B").start();
new Thread(task, "Thread-C").start();
}
}
اجرای این برنامه خروجی زیر را میدهد:
Thread-A → 1
Thread-B → 1
Thread-C → 1
هر Thread مقدار جداگانهای دارد و هیچگونه اشتراک دادهای رخ نمیدهد.
✳️ ۴. مثال پیشرفته: حل مشکل Thread-Safety در SimpleDateFormat
کلاس SimpleDateFormat بهصورت پیشفرض Thread-Safe نیست. بنابراین برای استفاده در محیط همزمانی، ThreadLocal یکی از بهترین راهحلهاست.
private static final ThreadLocal<SimpleDateFormat> dateFormat =
ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));
public static String format(Date date) {
return dateFormat.get().format(date);
}
در اینجا هر Thread یک نمونهٔ مستقل از SimpleDateFormat دارد و مشکل رقابت (Race Condition) کاملاً از بین میرود.
✳️ ۵. نکته بسیار مهم: مدیریت حافظه و جلوگیری از Memory Leak
در استفاده از ThreadLocal باید بسیار دقت کرد، زیرا اگر مقدار ذخیرهشده در ThreadLocal پس از پایان کار Thread حذف نشود، ممکن است مشکلات Memory Leak بهوجود بیاید؛ بهخصوص در محیطهایی مانند سرورهای وب که Thread Pool استفاده میشود.
بهترین روش این است که همیشه پس از پایان کار مقدار ThreadLocal را پاک کنیم:
try {
// work
} finally {
threadLocal.remove();
}
این کار از باقیماندن داده در ThreadPool جلوگیری میکند.
✳️ ۶. جمعبندی
درک و استفادهٔ درست از ThreadLocal یکی از مهارتهای مهم در ساخت سیستمهای چندریسمانی پایدار است:
* هر Thread یک نسخهٔ خصوصی از داده دارد.
* هیچ تداخلی بین Threadها ایجاد نمیشود.
* مناسب برای دادههای حساس، مانند Request Context یا Formatterها.
* نیازمند مدیریت دقیق برای جلوگیری از Memory Leak.
#کاربرـحرفهـای
🆔 @javapro_ir
🆔 @group_javapro
👍5❤1
◾بلک فرایدی | دوره های جاوا | 70% تخفیف
📆1 تا 10 آذر ماه
💢کد تخفیف 70%: BLKFR
Spring, Java, Microservices
📚لیست دوره های تخصصی مرتبط با جاوا
آکادمی جاواپرو
📆1 تا 10 آذر ماه
💢کد تخفیف 70%: BLKFR
Spring, Java, Microservices
📚لیست دوره های تخصصی مرتبط با جاوا
آکادمی جاواپرو
❤1
📢 اطلاعیه مهم
کاربران گرامی جاواپرو
اختلال پیشآمده در نمایش ویدئوهای سایت مربوط به زیرساخت شرکت ارائهدهنده هاست است. تیم فنی آن شرکت در حال پیگیری و رفع مشکل میباشد.
از شکیبایی و همراهی شما سپاسگزاریم. 🙏
کاربران گرامی جاواپرو
اختلال پیشآمده در نمایش ویدئوهای سایت مربوط به زیرساخت شرکت ارائهدهنده هاست است. تیم فنی آن شرکت در حال پیگیری و رفع مشکل میباشد.
از شکیبایی و همراهی شما سپاسگزاریم. 🙏
❤1
📘 آشنایی عمیق با ThreadLocalMap و نحوهٔ واقعی ذخیرهسازی دادهها در ThreadLocal
در ادامهٔ آموزش قبلی دربارهٔ ThreadLocal، اکنون لازم است ساختار داخلی آن در JVM را بررسی کنیم. فهمیدن سازوکار ThreadLocalMap باعث میشود دقیقاً بدانیم دادهها چگونه ذخیره میشوند، چرا Memory Leak ممکن است رخ بدهد، و چرا remove() اهمیت حیاتی دارد.
✳️ ۱. ThreadLocal چگونه دادهها را ذخیره میکند؟
در ظاهر، برنامهنویس فقط با کلاس ThreadLocal کار میکند.
اما در پشت صحنه:
هر Thread یک شیء مستقل بهنام ThreadLocalMap دارد.
این ساختار داخل کلاس Thread قرار دارد و متعلق به همان Thread است.
بنابراین دادهها نه در خود ThreadLocal، بلکه در ThreadLocalMap مربوط به هر Thread ذخیره میشوند.
ساختار کلی به این شکل است:
* هر Thread یک ThreadLocalMap دارد
* هر ThreadLocalMap شامل چند Entry است
* هر Entry دارای یک کلید از جنس WeakReference<ThreadLocal> و یک مقدار (Object) است
با این طراحی، هر Thread نسخهٔ خصوصی دادههای خودش را دارد.
✳️ ۲. کلیدهای ThreadLocalMap از نوع WeakReference هستند
در داخل ThreadLocalMap، کلید اصلی هر مقدار، یک WeakReference به شیء ThreadLocal است.
دلیل این طراحی:
* اگر برنامهنویس ThreadLocal را فراموش کند از بین ببرد
* JVM بتواند ThreadLocal را Garbage Collect کند
* اما مقدار ذخیرهشده در Map هنوز باقی میماند
این نکته منجر به موضوع مهم بعدی میشود.
✳️ ۳. چرا Memory Leak ممکن است رخ بدهد؟
وقتی ThreadLocal بهصورت WeakReference نگه داشته میشود، ممکن است ThreadLocal از بین برود، اما مقدارش در ThreadLocalMap باقی بماند.
این وضعیت زمانی خطرناک میشود که:
* Thread مربوطه در ThreadPool باشد
* Thread پس از پایان کار از بین نرود
* مقدار ذخیرهشده همچنان در ThreadLocalMap باقی بماند
در این صورت، دادهٔ قبلی غیرقابل دسترس اما غیرقابل حذف خواهد بود و باعث Memory Leak میشود.
برای جلوگیری از این مشکل بهترین کار همیشه استفاده از:
در بلوک finally است.
✳️ ۴. مثال: شبیهسازی رفتار ThreadLocalMap
در مثال زیر نشان میدهیم چطور ThreadLocalMap در هر Thread دادههای مختلف نگه میدارد:
در اینجا برای هر Thread مقدار جداگانهای در ThreadLocalMap ذخیره شده و پس از remove دیگر هیچ دادهای باقی نمیماند.
✳️ ۵. جمعبندی ساختار داخلی ThreadLocal
درک ThreadLocalMap کمک میکند بدانیم ThreadLocal چگونه واقعاً کار میکند:
* هر Thread یک ThreadLocalMap مخصوص خود دارد.
* کلیدها WeakReference به شیء ThreadLocal هستند.
* مقدارها Strong Reference هستند و اگر remove نشوند ممکن است در حافظه گیر کنند.
* استفاده از remove برای جلوگیری از Memory Leak ضروری است، بهخصوص در ThreadPoolها.
* طراحی ThreadLocalMap باعث میشود دادههای Thread-Specific بهصورت امن و جداگانه مدیریت شوند.
در ادامهٔ آموزش قبلی دربارهٔ ThreadLocal، اکنون لازم است ساختار داخلی آن در JVM را بررسی کنیم. فهمیدن سازوکار ThreadLocalMap باعث میشود دقیقاً بدانیم دادهها چگونه ذخیره میشوند، چرا Memory Leak ممکن است رخ بدهد، و چرا remove() اهمیت حیاتی دارد.
✳️ ۱. ThreadLocal چگونه دادهها را ذخیره میکند؟
در ظاهر، برنامهنویس فقط با کلاس ThreadLocal کار میکند.
اما در پشت صحنه:
هر Thread یک شیء مستقل بهنام ThreadLocalMap دارد.
این ساختار داخل کلاس Thread قرار دارد و متعلق به همان Thread است.
بنابراین دادهها نه در خود ThreadLocal، بلکه در ThreadLocalMap مربوط به هر Thread ذخیره میشوند.
ساختار کلی به این شکل است:
* هر Thread یک ThreadLocalMap دارد
* هر ThreadLocalMap شامل چند Entry است
* هر Entry دارای یک کلید از جنس WeakReference<ThreadLocal> و یک مقدار (Object) است
با این طراحی، هر Thread نسخهٔ خصوصی دادههای خودش را دارد.
✳️ ۲. کلیدهای ThreadLocalMap از نوع WeakReference هستند
در داخل ThreadLocalMap، کلید اصلی هر مقدار، یک WeakReference به شیء ThreadLocal است.
دلیل این طراحی:
* اگر برنامهنویس ThreadLocal را فراموش کند از بین ببرد
* JVM بتواند ThreadLocal را Garbage Collect کند
* اما مقدار ذخیرهشده در Map هنوز باقی میماند
این نکته منجر به موضوع مهم بعدی میشود.
✳️ ۳. چرا Memory Leak ممکن است رخ بدهد؟
وقتی ThreadLocal بهصورت WeakReference نگه داشته میشود، ممکن است ThreadLocal از بین برود، اما مقدارش در ThreadLocalMap باقی بماند.
این وضعیت زمانی خطرناک میشود که:
* Thread مربوطه در ThreadPool باشد
* Thread پس از پایان کار از بین نرود
* مقدار ذخیرهشده همچنان در ThreadLocalMap باقی بماند
در این صورت، دادهٔ قبلی غیرقابل دسترس اما غیرقابل حذف خواهد بود و باعث Memory Leak میشود.
برای جلوگیری از این مشکل بهترین کار همیشه استفاده از:
threadLocal.remove();
در بلوک finally است.
✳️ ۴. مثال: شبیهسازی رفتار ThreadLocalMap
در مثال زیر نشان میدهیم چطور ThreadLocalMap در هر Thread دادههای مختلف نگه میدارد:
public class ThreadLocalMapDemo {
private static ThreadLocal<String> threadLocal = new ThreadLocal<>();
public static void main(String[] args) {
Runnable task = () -> {
threadLocal.set("Value for " + Thread.currentThread().getName());
System.out.println(Thread.currentThread().getName() + ": " + threadLocal.get());
threadLocal.remove();
};
new Thread(task, "Thread-A").start();
new Thread(task, "Thread-B").start();
}
}
در اینجا برای هر Thread مقدار جداگانهای در ThreadLocalMap ذخیره شده و پس از remove دیگر هیچ دادهای باقی نمیماند.
✳️ ۵. جمعبندی ساختار داخلی ThreadLocal
درک ThreadLocalMap کمک میکند بدانیم ThreadLocal چگونه واقعاً کار میکند:
* هر Thread یک ThreadLocalMap مخصوص خود دارد.
* کلیدها WeakReference به شیء ThreadLocal هستند.
* مقدارها Strong Reference هستند و اگر remove نشوند ممکن است در حافظه گیر کنند.
* استفاده از remove برای جلوگیری از Memory Leak ضروری است، بهخصوص در ThreadPoolها.
* طراحی ThreadLocalMap باعث میشود دادههای Thread-Specific بهصورت امن و جداگانه مدیریت شوند.
#کاربرـحرفهـای
🆔 @javapro_ir
🆔 @group_javapro
👍6❤1
📢 اطلاعیه مهم – رفع مشکل نمایش ویدئوها
کاربران گرامی جاواپرو
مشکل اختلال در نمایش ویدئوهای سایت که ناشی از زیرساخت شرکت ارائهدهنده هاست بود، بهطور کامل برطرف شده است.
اکنون تمامی ویدئوها بدون مشکل و با سرعت بیشتر قابل مشاهده هستند.
از صبر و همراهی همیشگی شما سپاسگزاریم. 🙏
جاواپرو
❤️به پاس شکیبایی شما تخفیف بلک فرایدی رو به 75 درصد تغییر دادیم
کد تخفیف 75 درصد: SEPAS
انقضا تا 10 آذر
📚لیست دوره های تخصصی مرتبط با جاوا
کاربران گرامی جاواپرو
مشکل اختلال در نمایش ویدئوهای سایت که ناشی از زیرساخت شرکت ارائهدهنده هاست بود، بهطور کامل برطرف شده است.
اکنون تمامی ویدئوها بدون مشکل و با سرعت بیشتر قابل مشاهده هستند.
از صبر و همراهی همیشگی شما سپاسگزاریم. 🙏
جاواپرو
❤️به پاس شکیبایی شما تخفیف بلک فرایدی رو به 75 درصد تغییر دادیم
کد تخفیف 75 درصد: SEPAS
انقضا تا 10 آذر
📚لیست دوره های تخصصی مرتبط با جاوا
🙏2❤1🗿1
جاواپرو | برنامه نویسی جاوا | Java pinned «📢 اطلاعیه مهم – رفع مشکل نمایش ویدئوها کاربران گرامی جاواپرو مشکل اختلال در نمایش ویدئوهای سایت که ناشی از زیرساخت شرکت ارائهدهنده هاست بود، بهطور کامل برطرف شده است. اکنون تمامی ویدئوها بدون مشکل و با سرعت بیشتر قابل مشاهده هستند. از صبر و همراهی همیشگی…»
دوره جامع نخبگان معماری میکروسرویس ها با Java و Spring Boot بروزرسانی شد
فصل های 23 و 24 از بخش 4 به دوره اضاف شد
تاریخ آخرین بروزرسانی: ۵ آذر ۱۴٠۴
مشاهده
فصل های 23 و 24 از بخش 4 به دوره اضاف شد
تاریخ آخرین بروزرسانی: ۵ آذر ۱۴٠۴
مشاهده
جاواپرو | برنامه نویسی جاوا | Java
دوره جامع نخبگان معماری میکروسرویس ها با Java و Spring Boot بروزرسانی شد فصل های 23 و 24 از بخش 4 به دوره اضاف شد تاریخ آخرین بروزرسانی: ۵ آذر ۱۴٠۴ مشاهده
مباحث این دورهی میکروسرویس اگر قرار باشد توسط یک سینیور جاوا بهصورت کلاس خصوصی آموزش داده شود، بین ۵۰ تا ۶۰ میلیون تومان هزینه خواهد داشت.
اما شما میتوانید در بلکفرایدی این دورهی ارزشمند را همراه با پشتیبانی با ۷۵٪ تخفیف تهیه کنید.
کد تخفیف: SEPAS
👩🎓👨🎓 تا امروز 53 نفر در این دوره شرکت کرده اند
⚠️این فرصت تکرار نخواهد شد
ثبت نام
اما شما میتوانید در بلکفرایدی این دورهی ارزشمند را همراه با پشتیبانی با ۷۵٪ تخفیف تهیه کنید.
کد تخفیف: SEPAS
👩🎓👨🎓 تا امروز 53 نفر در این دوره شرکت کرده اند
⚠️این فرصت تکرار نخواهد شد
ثبت نام
آکادمی جاواپرو
دوره جامع نخبگان معماری میکروسرویسها با Java و Spring Boot
آموزش ایجاد میکروسرویسها با استفاده از Spring Boot 3، Spring Cloud، React، Kafka، RabbitMQ، REST API، Docker و IntelliJ IDEA
❤2
📘 تفاوتهای Array و ArrayList در زبان جاوا
در زبان جاوا، ساختارهای دادهای مختلفی برای ذخیرهسازی مجموعهای از عناصر وجود دارد. دو نمونهی پرکاربرد این ساختارها، Array و ArrayList هستند. درک تفاوتهای این دو ابزار برای نوشتن کدهای کارآمد و قابل نگهداری اهمیت زیادی دارد.
در گام نخست باید توجه داشت که آرایهها (Array) ساختاری با اندازهٔ ثابت هستند. به عبارت دیگر، هنگام ایجاد یک آرایه باید اندازهٔ آن مشخص شود و این اندازه در طول اجرای برنامه قابل تغییر نیست. همچنین آرایهها میتوانند شامل نوعهای دادهای اولیه مانند int و double نیز باشند.
در مقابل، آرایهلیستها (ArrayList) ساختاری پویا در چارچوب مجموعهها (Collections Framework) هستند. این ساختار امکان افزایش یا کاهش تعداد عناصر را در زمان اجرا فراهم میکند. علاوهبر آن، آرایهلیست تنها میتواند اشیاء (Object) را در خود نگه دارد و در نتیجه برای استفاده از نوعهای اولیه، لازم است از نوعهای Wrapper مانند Integer و Double استفاده شود.
در زمینهٔ عملکرد، باید توجه داشت که دسترسی به عناصر در آرایه و ArrayList هر دو سریع است؛ زیرا هر دو از اندیسگذاری پشتیبانی میکنند. با این حال عملیات افزودن یا حذف عناصر در ArrayList نسبت به آرایه انعطافپذیرتر و سادهتر است، زیرا این ساختار بدون نیاز به ایجاد آرایهای جدید، اندازهٔ خود را مدیریت میکند.
در ادامه یک مثال ساده برای درک بهتر ارائه میشود:
در جمعبندی میتوان بیان کرد که آرایه برای موقعیتهایی مناسب است که اندازهٔ دادهها ثابت باشد و نیاز به سرعت بالا وجود داشته باشد، در حالی که آرایهلیست برای زمانی کاربرد دارد که انعطافپذیری در اندازه و امکان مدیریت آسان عناصر مورد نیاز باشد.
در زبان جاوا، ساختارهای دادهای مختلفی برای ذخیرهسازی مجموعهای از عناصر وجود دارد. دو نمونهی پرکاربرد این ساختارها، Array و ArrayList هستند. درک تفاوتهای این دو ابزار برای نوشتن کدهای کارآمد و قابل نگهداری اهمیت زیادی دارد.
در گام نخست باید توجه داشت که آرایهها (Array) ساختاری با اندازهٔ ثابت هستند. به عبارت دیگر، هنگام ایجاد یک آرایه باید اندازهٔ آن مشخص شود و این اندازه در طول اجرای برنامه قابل تغییر نیست. همچنین آرایهها میتوانند شامل نوعهای دادهای اولیه مانند int و double نیز باشند.
در مقابل، آرایهلیستها (ArrayList) ساختاری پویا در چارچوب مجموعهها (Collections Framework) هستند. این ساختار امکان افزایش یا کاهش تعداد عناصر را در زمان اجرا فراهم میکند. علاوهبر آن، آرایهلیست تنها میتواند اشیاء (Object) را در خود نگه دارد و در نتیجه برای استفاده از نوعهای اولیه، لازم است از نوعهای Wrapper مانند Integer و Double استفاده شود.
در زمینهٔ عملکرد، باید توجه داشت که دسترسی به عناصر در آرایه و ArrayList هر دو سریع است؛ زیرا هر دو از اندیسگذاری پشتیبانی میکنند. با این حال عملیات افزودن یا حذف عناصر در ArrayList نسبت به آرایه انعطافپذیرتر و سادهتر است، زیرا این ساختار بدون نیاز به ایجاد آرایهای جدید، اندازهٔ خود را مدیریت میکند.
در ادامه یک مثال ساده برای درک بهتر ارائه میشود:
// مثال آرایه
int[] numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
// مثال ArrayList
import java.util.ArrayList;
ArrayList<Integer> list = new ArrayList<>();
list.add(10);
list.add(20);
list.add(30);
list.add(40); // افزودن بدون نیاز به تعیین اندازه
در جمعبندی میتوان بیان کرد که آرایه برای موقعیتهایی مناسب است که اندازهٔ دادهها ثابت باشد و نیاز به سرعت بالا وجود داشته باشد، در حالی که آرایهلیست برای زمانی کاربرد دارد که انعطافپذیری در اندازه و امکان مدیریت آسان عناصر مورد نیاز باشد.
#کاربر_مبتدی
🆔 @javapro_ir
🆔 @group_javapro
👍4
3 روز تا پایان تخفیف 75% بلک فرایدی آکادمی جاواپرو
کد تخفیف 75 درصد: SEPAS
انقضا تا 10 آذر
📚لیست دوره های تخصصی مرتبط با جاوا
کد تخفیف 75 درصد: SEPAS
انقضا تا 10 آذر
📚لیست دوره های تخصصی مرتبط با جاوا
تهیه 8 دوره مرتبط با جاوا آکادمی جاواپرو در طرح بلک فرایدی با 75 درصد تخفیف
مبلغ کل دوره ها:
23,499,000 تومان
با تخفیف 75 درصد:
5،874،000 تومان
کد تخفیف 75 درصد: SEPAS
انقضا تا 10 آذر
📚لیست دوره های تخصصی مرتبط با جاوا
مبلغ کل دوره ها:
23,499,000 تومان
با تخفیف 75 درصد:
5،874،000 تومان
کد تخفیف 75 درصد: SEPAS
انقضا تا 10 آذر
📚لیست دوره های تخصصی مرتبط با جاوا
جاواپرو | برنامه نویسی جاوا | Java
تهیه 8 دوره مرتبط با جاوا آکادمی جاواپرو در طرح بلک فرایدی با 75 درصد تخفیف مبلغ کل دوره ها: 23,499,000 تومان با تخفیف 75 درصد: 5،874،000 تومان کد تخفیف 75 درصد: SEPAS انقضا تا 10 آذر 📚لیست دوره های تخصصی مرتبط با جاوا
می توانید سبد دوره های اسپرینگ
و میکروسرویس
یا پایه و پیشرفته یا سبد دلخواه خودتون ایجاد کرده و کد تخفیف 75 درصد را وارد کرده و ثبت نام خودتون نهایی کنید
جهت راهنمایی ثبت نام به آی دی زیر پیام بدید:
@rzutab
و میکروسرویس
یا پایه و پیشرفته یا سبد دلخواه خودتون ایجاد کرده و کد تخفیف 75 درصد را وارد کرده و ثبت نام خودتون نهایی کنید
جهت راهنمایی ثبت نام به آی دی زیر پیام بدید:
@rzutab
تخصص هایی که برای استخدام یک برنامه نویس جاوا برای توسعه پروژه بانکی نیاز است در این تصویر درج شده
جاوا و اسپرینگ جز جدایی ناپذیر تخصص هایی که برای استخدام شدن نیاز دارید و ضروری است
و با تسلط بر معماری میکروسرویس در زمان مصاحبه با اعتماد به نفس حضور پیدا خواهید کرد و نگاه ویژه ای نسبت به شما خواهند داشت.
بعد از دوره میکروسرویس با جاوا تغییر را در جایگاه تخصصی خود احساس کرده و بابت یادگیری آن از خود تشکر خواهید کرد
دوره میکروسرویس با جاوا را با تخفیف 75 درصد می توانید تا 10 آذر تهیه نمایید
کد تخفیف 75 درصد: SEPAS
انقضا تا 10 آذر
ثبت_نام
ما به کیفیت آموزش خود اطمینان داریم در صورت عدم رضایت، کل مبلغ دوره به حساب شما برگشت داده می شود.
جاوا و اسپرینگ جز جدایی ناپذیر تخصص هایی که برای استخدام شدن نیاز دارید و ضروری است
و با تسلط بر معماری میکروسرویس در زمان مصاحبه با اعتماد به نفس حضور پیدا خواهید کرد و نگاه ویژه ای نسبت به شما خواهند داشت.
بعد از دوره میکروسرویس با جاوا تغییر را در جایگاه تخصصی خود احساس کرده و بابت یادگیری آن از خود تشکر خواهید کرد
دوره میکروسرویس با جاوا را با تخفیف 75 درصد می توانید تا 10 آذر تهیه نمایید
کد تخفیف 75 درصد: SEPAS
انقضا تا 10 آذر
ثبت_نام
ما به کیفیت آموزش خود اطمینان داریم در صورت عدم رضایت، کل مبلغ دوره به حساب شما برگشت داده می شود.
جاواپرو | برنامه نویسی جاوا | Java
تخصص هایی که برای استخدام یک برنامه نویس جاوا برای توسعه پروژه بانکی نیاز است در این تصویر درج شده جاوا و اسپرینگ جز جدایی ناپذیر تخصص هایی که برای استخدام شدن نیاز دارید و ضروری است و با تسلط بر معماری میکروسرویس در زمان مصاحبه با اعتماد به نفس حضور پیدا…
در این دوره به مباحثی در حوزه میکروسرویس با جاوا پرداخته شده که برخی از آنها حتی در دورههای یودمی نیز یافت نمیشوند!
📘نوشتن Unit Test در Java با استفاده از JUnit
نوشتن آزمونهای واحد (Unit Test) یکی از مهمترین مراحل در توسعهٔ نرمافزار است که به برنامهنویسان امکان میدهد صحت عملکرد بخشهای مختلف کد را بهصورت مستقل ارزیابی کنند. فریمورک JUnit یکی از پرکاربردترین ابزارهای آزموننویسی در زبان Java است و با فراهمکردن ساختار استاندارد، اجرای تستها را بسیار ساده میکند.
۱. ساختار کلی یک Unit Test در JUnit
هر تست معمولاً شامل سه مرحلهٔ اصلی است:
1. آمادهسازی (Arrange): ایجاد ورودیها و اشیای مورد نیاز.
2. اقدام (Act): فراخوانی تابع یا کلاس مورد نظر.
3. ارزیابی (Assert): بررسی خروجی و اطمینان از صحت عملکرد.
JUnit از annotationها برای مشخصکردن نقش هر متد استفاده میکند. متداولترین آنها عبارتند از:
۲. مثال ساده از یک کلاس و تستهای آن
در ادامه کلاسی به نام
مثال: کلاس اصلی
مثال: نوشتن تست با JUnit
در این مثال، ابتدا شیء کلاس
۳. استفاده از Annotationهای تکمیلی
گاهی لازم است قبل از اجرای هر تست، یک شیء اولیهسازی شود. در این حالت از
در این نمونه، مقداردهی شیء
۴. اهمیت Assertها در JUnit
JUnit مجموعهای از متدهای Assert را ارائه میدهد که امکان ارزیابی دقیق خروجیها را فراهم میکنند. برای مثال:
با استفاده از
۵. نتیجهگیری
آزموننویسی با JUnit روشی استاندارد و قابل اعتماد برای تضمین کیفیت کد است. با تعریف تستهای واحد، توسعهدهنده میتواند ایرادهای احتمالی را در همان مراحل اولیه تشخیص دهد و از ایجاد خطاهای پیچیده در آینده جلوگیری کند. استفادهٔ صحیح از Annotationها، Assertها و ساختار مناسب تستها، موجب افزایش پایداری، خوانایی و قابلیت نگهداری کد خواهد شد.
نوشتن آزمونهای واحد (Unit Test) یکی از مهمترین مراحل در توسعهٔ نرمافزار است که به برنامهنویسان امکان میدهد صحت عملکرد بخشهای مختلف کد را بهصورت مستقل ارزیابی کنند. فریمورک JUnit یکی از پرکاربردترین ابزارهای آزموننویسی در زبان Java است و با فراهمکردن ساختار استاندارد، اجرای تستها را بسیار ساده میکند.
۱. ساختار کلی یک Unit Test در JUnit
هر تست معمولاً شامل سه مرحلهٔ اصلی است:
1. آمادهسازی (Arrange): ایجاد ورودیها و اشیای مورد نیاز.
2. اقدام (Act): فراخوانی تابع یا کلاس مورد نظر.
3. ارزیابی (Assert): بررسی خروجی و اطمینان از صحت عملکرد.
JUnit از annotationها برای مشخصکردن نقش هر متد استفاده میکند. متداولترین آنها عبارتند از:
@Test برای علامتگذاری یک متد تست@BeforeEach برای عملیات قبل از هر تست@AfterEach برای عملیات پاکسازی پس از هر تست۲. مثال ساده از یک کلاس و تستهای آن
در ادامه کلاسی به نام
Calculator تعریف میکنیم که یک تابع جمع دارد. سپس یک تست واحد برای آن خواهیم نوشت.مثال: کلاس اصلی
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}مثال: نوشتن تست با JUnit
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class CalculatorTest {
@Test
public void testAddition() {
Calculator calculator = new Calculator();
int result = calculator.add(5, 7);
assertEquals(12, result);
}
}
در این مثال، ابتدا شیء کلاس
Calculator ساخته میشود. سپس متد add با ورودیهای مشخص فراخوانی میگردد و نتیجهٔ حاصل با مقدار مورد انتظار مقایسه میشود. در صورتیکه خروجی برابر با مقدار مورد انتظار نباشد، تست شکست خواهد خورد.۳. استفاده از Annotationهای تکمیلی
گاهی لازم است قبل از اجرای هر تست، یک شیء اولیهسازی شود. در این حالت از
@BeforeEach استفاده میکنیم. این کار باعث جلوگیری از تکرار کد نیز میشود.import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class CalculatorTest {
private Calculator calculator;
@BeforeEach
public void setUp() {
calculator = new Calculator();
}
@Test
public void testAddition() {
int result = calculator.add(10, 20);
assertEquals(30, result);
}
@Test
public void testAdditionWithNegativeNumbers() {
int result = calculator.add(-5, -8);
assertEquals(-13, result);
}
}
در این نمونه، مقداردهی شیء
calculator تنها یکبار قبل از هر تست انجام میشود، و هر تست مستقل از تست دیگر اجرا میگردد.۴. اهمیت Assertها در JUnit
JUnit مجموعهای از متدهای Assert را ارائه میدهد که امکان ارزیابی دقیق خروجیها را فراهم میکنند. برای مثال:
assertEquals(expected, actual)assertTrue(condition)assertThrows(exceptionType, executable)با استفاده از
assertThrows میتوانیم عملکرد صحیح برنامه در پاسخ به ورودیهای نامعتبر را بررسی کنیم:@Test
public void testDivisionByZero() {
assertThrows(ArithmeticException.class, () -> {
int x = 10 / 0;
});
}
۵. نتیجهگیری
آزموننویسی با JUnit روشی استاندارد و قابل اعتماد برای تضمین کیفیت کد است. با تعریف تستهای واحد، توسعهدهنده میتواند ایرادهای احتمالی را در همان مراحل اولیه تشخیص دهد و از ایجاد خطاهای پیچیده در آینده جلوگیری کند. استفادهٔ صحیح از Annotationها، Assertها و ساختار مناسب تستها، موجب افزایش پایداری، خوانایی و قابلیت نگهداری کد خواهد شد.
#کاربرـحرفهـای
🆔 @javapro_ir
🆔 @group_javapro
👍4❤2
