شرایط:
⚒ طراحی زیرساخت نرمافزار
📐 تسلط بر Design Patterns و Clean Code
امتیاز محسوب میشود:
نوع همکاری:
ارسال رزومه:
📧 arman.it.development@gmail.com
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2
وقتی برنامه جاوای شما اجرا میشود، مدیریت حافظه توسط ماشین مجازی جاوا (JVM) انجام میگیرد. در مرکز این فرآیند، حافظه Heap قرار دارد؛ جایی که تقریباً هر چیزی که ایجاد میکنید در آن زندگی میکند. بیایید عمیقتر بررسی کنیم.
◆ حافظه Heap چیست؟
تمام اشیاء (objects)، آرایهها (arrays)، و نمونههای کلاسها در Heap ذخیره میشوند.
بین تمام تردها (threads) مشترک است.
به صورت خودکار توسط Garbage Collector (GC) مدیریت میشود.
هر زمان که یک شیء را با استفاده از new ایجاد میکنید، در Heap تخصیص داده میشود.
ساختار Heap (مبتنی بر جمعآوری زباله نسلمحور - Generational GC)
به Eden Space و Survivor Spaces (S0، S1) تقسیم میشود.
اشیاء کوتاهعمر را نگهداری میکند.
اشیاء بلندمدت را که چندین چرخه GC را زنده ماندهاند، نگهداری میکند.
محل اجرای GC اصلی (Full GC) است.
💧 Metaspace
متادیتای کلاسها را ذخیره میکند – بخشی از Heap نیست.
مشکلات رایج
Metaspace متادیتای کلاسها را ذخیره میکند – خارج از Heap است.
? وقتی در جاوا یک شیء ایجاد میکنید چه اتفاقی میافتد؟
? Garbage Collector چگونه حافظه Heap را مدیریت میکند؟
? پیام GC Overhead Limit Exceeded – زمانی که GC زمان زیادی میبرد ولی حافظه کمی آزاد میشود.
وقتی یک شیء در جاوا ایجاد میکنید چه میشود؟
GC چگونه حافظه Heap را مدیریت میکند؟
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
📘 درک متغیرهای محلی (Local) و سراسری (Global) در زبان Java
در زبان Java، متغیرها بسته به محل تعریفشان، دارای محدوده (scope) متفاوتی هستند. متغیرهای محلی فقط در همان محدودهای که تعریف شدهاند قابل استفاده هستند، در حالی که متغیرهای سراسری (که در Java بهصورت *فیلدهای کلاس* تعریف میشوند) میتوانند در کل کلاس مورد استفاده قرار گیرند.
🔹 متغیر محلی (Local Variable):
متغیرهای محلی درون متدها، حلقهها یا بلوکهای شرطی تعریف میشوند و فقط در همان بلوک قابل دسترسی هستند. این متغیرها خارج از آن محدوده وجود ندارند و پس از خروج از بلوک از بین میروند.
🔸 مثال ساده:
🟢 توضیح:
متغیر message فقط در متد printMessage قابل استفاده است. خارج از این متد، این متغیر وجود ندارد.
🔸 مثال پیشرفتهتر:
🟢 توضیح:
* متغیر total فقط در متد calculateSum قابل استفاده است.
* متغیر current در هر دور از حلقه for تعریف میشود و فقط درون همان حلقه قابل دسترسی است.
* متغیر bonus تنها زمانی تعریف و قابل استفاده است که شرط if برقرار باشد، و خارج از بلوک if وجود ندارد.
این طراحی باعث میشود متغیرها در کوتاهترین دامنه ممکن تعریف شوند که کد را امنتر و خواناتر میکند.
🔹 متغیر سراسری (Global Variable یا Class Field):
در Java مفهوم متغیر سراسری به شکل سنتی وجود ندارد، اما میتوان متغیرهایی را در سطح کلاس تعریف کرد که توسط تمام متدهای همان کلاس قابل استفاده باشند. این متغیرها به عنوان *فیلدهای کلاس* شناخته میشوند.
🔸 مثال ساده:
🟢 توضیح:
* متغیر balance در سطح کلاس تعریف شده و در تمام متدهای deposit و withdraw در دسترس است.
* مقدار این متغیر حتی پس از پایان یک متد نیز حفظ میشود چون به شیء تعلق دارد.
🔸 مثال پیشرفتهتر:
🟢 توضیح:
* متغیرهای totalOrders و totalRevenue به کل شیء تعلق دارند و در هر متدی از کلاس قابل استفادهاند.
* متد addOrder این متغیرها را بهروزرسانی میکند، متد resetOrders آنها را ریست میکند، و متد printSummary آنها را چاپ میکند.
* این سبک طراحی برای نگهداری اطلاعات پایدار بین چند متد مناسب است.
در زبان Java، متغیرها بسته به محل تعریفشان، دارای محدوده (scope) متفاوتی هستند. متغیرهای محلی فقط در همان محدودهای که تعریف شدهاند قابل استفاده هستند، در حالی که متغیرهای سراسری (که در Java بهصورت *فیلدهای کلاس* تعریف میشوند) میتوانند در کل کلاس مورد استفاده قرار گیرند.
🔹 متغیر محلی (Local Variable):
متغیرهای محلی درون متدها، حلقهها یا بلوکهای شرطی تعریف میشوند و فقط در همان بلوک قابل دسترسی هستند. این متغیرها خارج از آن محدوده وجود ندارند و پس از خروج از بلوک از بین میروند.
🔸 مثال ساده:
public class Example {
public void printMessage() {
String message = "Hello from inside the method!"; // local variable
System.out.println(message);
}
}
🟢 توضیح:
متغیر message فقط در متد printMessage قابل استفاده است. خارج از این متد، این متغیر وجود ندارد.
🔸 مثال پیشرفتهتر:
public class Calculator {
public void calculateSum(int[] numbers) {
int total = 0; // local variable in method
for (int i = 0; i < numbers.length; i++) {
int current = numbers[i]; // local variable in loop
if (current % 2 == 0) {
int bonus = 2; // local variable in if block
total += current + bonus;
System.out.println("Even number with bonus: " + (current + bonus));
} else {
System.out.println("Odd number: " + current);
}
}
System.out.println("Final total: " + total);
}
}
🟢 توضیح:
* متغیر total فقط در متد calculateSum قابل استفاده است.
* متغیر current در هر دور از حلقه for تعریف میشود و فقط درون همان حلقه قابل دسترسی است.
* متغیر bonus تنها زمانی تعریف و قابل استفاده است که شرط if برقرار باشد، و خارج از بلوک if وجود ندارد.
این طراحی باعث میشود متغیرها در کوتاهترین دامنه ممکن تعریف شوند که کد را امنتر و خواناتر میکند.
🔹 متغیر سراسری (Global Variable یا Class Field):
در Java مفهوم متغیر سراسری به شکل سنتی وجود ندارد، اما میتوان متغیرهایی را در سطح کلاس تعریف کرد که توسط تمام متدهای همان کلاس قابل استفاده باشند. این متغیرها به عنوان *فیلدهای کلاس* شناخته میشوند.
🔸 مثال ساده:
public class BankAccount {
private double balance = 0.0; // global variable (field)
public void deposit(double amount) {
balance += amount;
System.out.println("Balance after deposit: " + balance);
}
public void withdraw(double amount) {
if (amount <= balance) {
balance -= amount;
System.out.println("Balance after withdrawal: " + balance);
} else {
System.out.println("Insufficient balance!");
}
}
}
🟢 توضیح:
* متغیر balance در سطح کلاس تعریف شده و در تمام متدهای deposit و withdraw در دسترس است.
* مقدار این متغیر حتی پس از پایان یک متد نیز حفظ میشود چون به شیء تعلق دارد.
🔸 مثال پیشرفتهتر:
public class OrderManager {
private int totalOrders = 0; // global variable (field)
private double totalRevenue = 0.0; // global variable (field)
public void addOrder(double amount) {
totalOrders++;
totalRevenue += amount;
System.out.println("Order added. Total orders: " + totalOrders);
System.out.println("Total revenue: $" + totalRevenue);
}
public void resetOrders() {
totalOrders = 0;
totalRevenue = 0.0;
System.out.println("All orders have been reset.");
}
public void printSummary() {
System.out.println("Order Summary:");
System.out.println("Orders: " + totalOrders + ", Revenue: $" + totalRevenue);
}
}
🟢 توضیح:
* متغیرهای totalOrders و totalRevenue به کل شیء تعلق دارند و در هر متدی از کلاس قابل استفادهاند.
* متد addOrder این متغیرها را بهروزرسانی میکند، متد resetOrders آنها را ریست میکند، و متد printSummary آنها را چاپ میکند.
* این سبک طراحی برای نگهداری اطلاعات پایدار بین چند متد مناسب است.
👍5❤1
✅ جمعبندی نهایی:
* ✅ از متغیر محلی برای دادههای موقت در محدودهی محدود (مثل یک متد یا شرط) استفاده میشود.
* ✅ از متغیر سراسری (فیلد کلاس) برای نگهداری اطلاعاتی استفاده میشود که در چند متد مشترک هستند.
* ✅ رعایت اصول محدودهی متغیرها باعث کاهش خطا، افزایش امنیت و خوانایی برنامه میشود.
* ✅ از متغیر محلی برای دادههای موقت در محدودهی محدود (مثل یک متد یا شرط) استفاده میشود.
* ✅ از متغیر سراسری (فیلد کلاس) برای نگهداری اطلاعاتی استفاده میشود که در چند متد مشترک هستند.
* ✅ رعایت اصول محدودهی متغیرها باعث کاهش خطا، افزایش امنیت و خوانایی برنامه میشود.
#کاربر_مبتدی
🆔 @javapro_ir
🆔 @group_javapro
👍5❤1
مدل هوش مصنوعی Codex که توسط شرکت OpenAI توسعه داده شده، برای درک و تولید کدهای برنامهنویسی طراحی شده است.
این مدل نسخهای تخصصیشده از GPT محسوب میشود که برای کمک به برنامهنویسان ساخته شده و توانایی نوشتن، تکمیل، توضیح و حتی ترجمهی کد بین زبانهای مختلف را دارد.
توسعهدهنده: شرکت OpenAI
ساختهشده بر پایه GPT-3 و نسخههای پیشرفتهتر
پشتیبانی از بیش از ۱۲ زبان برنامهنویسی مانند: Python، JavaScript، Java، C++، Go، PHP و دیگر زبانها
تولید خودکار کد از روی توضیحات متنی
تکمیل خودکار کد هنگام تایپ
پیشنهاد تستهای یونیت برای کدها
ترجمه کد از یک زبان برنامهنویسی به زبان دیگر
تحلیل و توضیح کدهای پیچیده
در ابتدا این مدل از طریق افزونهی GitHub Copilot در اختیار کاربران قرار گرفت؛ این افزونه، که با همکاری GitHub و OpenAI ساخته شد، در محیطهایی مانند Visual Studio Code قابل استفاده است.
همچنین API مربوط به OpenAI Codex از طریق پلتفرم OpenAI در دسترس برنامهنویسان قرار دارد.
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
۲۳ می ۱۹۹۵ جاوا متولد شد
می ۱۹۹۵، نقطه عطفی در دنیای فناوری رقم خورد؛ روزی که «جاوا» پا به عرصه گذاشت. زبانی نوظهور با مأموریتی بزرگ: ایجاد بستری شیگرا، قابل حمل و مستقل از پلتفرم برای توسعهی نرمافزارهایی پویا و انعطافپذیر، بهویژه برای وب. اما جاوا به همین مأموریت بسنده نکرد. در مدت کوتاهی، از یک زبان ساده به یک اکوسیستم قدرتمند تبدیل شد؛ سکویی که شعار انقلابیاش، "یکبار بنویس، همهجا اجرا کن" ، نهتنها تحقق یافت، بلکه افقهای تازهای را به روی توسعهدهندگان گشود و جریان تولید نرمافزار را در سراسر جهان دگرگون کرد.
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🎉1
❓ چرا باید از Java 17 استفاده کنیم؟
این نسخه دارای پشتیبانی بلندمدت (LTS) است، بنابراین نسخهای پایدار و مناسب برای محیطهای سازمانی به شمار میآید.
فریمورک Spring Boot از نسخه 3 به بعد، بهصورت رسمی از Java 17 و بالاتر پشتیبانی میکند و بسیاری از شرکتها از نسخه 11 به 17 مهاجرت کردهاند.
این نسخه همچنان در برخی سیستمها استفاده میشود، اما برای پروژههای جدید، قدیمی محسوب میشود.
این نسخه نیز LTS است و بهتازگی در حال جذب استفاده توسط پروژههای جدید است.
دارای ویژگیهای مهمی در حوزه عملکرد و همزمانی، از جمله Virtual Threads
پشتیبانی رسمی توسط Spring Boot نسخه 3.2 و بالاتر
بسیاری از تیمهای مدرنسازی سیستمها در سالهای ۲۰۲۴ و ۲۰۲۵ از این نسخه استفاده میکنند.
در حال حاضر برای استفاده در تولید مناسب نیست.
این نسخه LTS نیست.
هنوز در سیستمهای واقعی Spring Boot رواج نیافته است.
بیشتر در پروژههای آزمایشی یا توسط کاربران پیشگام استفاده میشود.
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
#تجربه_یک_دولوپر
⚙️ اپلیکیشن Spring Boot خود را به شیوهای درست با احراز هویت مبتنی بر دیتابیس ایمن کنید!
💡
✏️ آنچه در این راهکار وجود دارد:
✅ استفاده از JdbcUserDetailsManager برای مدیریت کاربران مبتنی بر دیتابیس
✔️ کوئریهای سفارشی SQL برای کاربران و نقشها
✔️ رمزنگاری امن گذرواژهها با استفاده از BCryptPasswordEncoder
✔️ دسترسی انعطافپذیر مبتنی بر نقش با استفاده از .antMatchers()
✔️ فرآیند ورود/خروج با احراز هویت مبتنی بر فرم
👩👩👦 تنها چیزی که نیاز دارید، جداولی مثل users و authorities است — و جالب اینجاست که Spring حتی طرح اولیه (schema) این جداول را هم بهصورت پیشفرض فراهم کرده، پس نیازی نیست خودتان از صفر بنویسید!
😀 نکته: ساختار دیتابیس خود را نرمالسازی کنید و از کوئریهای آماده (prepared statements) استفاده کنید تا در برابر حملات تزریق SQL ایمن بمانید.
💬 شما از احراز هویت JDBC استفاده میکنید یا به سمت JWT / OAuth2 رفتهاید؟ بیایید تنظیمات واقعی خود را با هم به اشتراک بگذاریم!
🔹 دوره جامع طلایی Spring Core
🔹 دوره فریمورک Spring Boot
🔹 دوره جامع دژبان Spring Security
➡️ اشتراک 👍 لایک 💬 کامنت
بهتازگی Spring Security را با احراز هویت مبتنی بر JDBC پیادهسازی کردم و باید بگویم یکی از قدرتمندترین روشهایی است که میتوانید در پروژههای واقعی استفاده کنید. چه در حال ساخت سیستم ورود کاربران باشید، چه پنل مدیریت مبتنی بر نقش، این روش کنترل کامل را به شما میدهد.
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
📌 آشنایی با انواع Scope در زبان Java
در زبان برنامهنویسی Java، واژهی Scope به محدودهای اشاره دارد که یک متغیر، تابع یا شیء در آن قابل دسترسی و استفاده است. شناخت درست انواع Scope برای جلوگیری از خطاهای منطقی و طراحی ساختار مناسب برنامه بسیار ضروری است. در این پیام، انواع Scope را بهصورت مرحلهای با مثالهای ساده تا پیشرفته بررسی میکنیم.
✅ ۱. Local Scope (محدوده محلی)
متغیرهایی که درون یک متد یا بلاک تعریف میشوند، فقط در همان بلاک قابل استفادهاند و پس از خروج از آن، از بین میروند.
🔹 نکته: متغیر
✅ ۲. Instance Scope (محدودهی شیء یا نمونه)
متغیرهایی که در سطح کلاس و خارج از متدها تعریف میشوند، اما بدون استفاده از کلیدواژه `static`، دارای Instance Scope هستند.
🔹 نکته: برای دسترسی به این متغیرها باید ابتدا یک شیء از کلاس ساخته شود.
✅ ۳. Static Scope (محدوده سراسری در کلاس)
وقتی متغیر یا متدی با
🔹 نکته: متغیر
✅ ۴. Block Scope (محدودهی بلوک کدی)
هر جایی که از
✅ ۵. Method Scope (محدودهی تابع)
پارامترهای ورودی یک متد و متغیرهای تعریفشده درون آن، فقط در همان متد قابل استفادهاند.
🔹 نکته: متغیر
✅ ۶. Nested Scope (محدودههای تو در تو)
در صورت تو در تو بودن بلوکها، بلوک داخلی به متغیرهای بلوک خارجی دسترسی دارد، ولی بالعکس آن صحیح نیست.
✅ ۷. Lambda Scope (محدوده در عبارات لامبدا)
در Java، عبارات Lambda برای تعریف توابع بدون نیاز به ایجاد کلاس جدید استفاده میشوند. درون لامبداها، فقط به متغیرهایی میتوان دسترسی داشت که effectively final باشند؛ یعنی یا صراحتاً
🔹 نکته مهم: اگر مقدار
در زبان برنامهنویسی Java، واژهی Scope به محدودهای اشاره دارد که یک متغیر، تابع یا شیء در آن قابل دسترسی و استفاده است. شناخت درست انواع Scope برای جلوگیری از خطاهای منطقی و طراحی ساختار مناسب برنامه بسیار ضروری است. در این پیام، انواع Scope را بهصورت مرحلهای با مثالهای ساده تا پیشرفته بررسی میکنیم.
✅ ۱. Local Scope (محدوده محلی)
متغیرهایی که درون یک متد یا بلاک تعریف میشوند، فقط در همان بلاک قابل استفادهاند و پس از خروج از آن، از بین میروند.
public class Example {
public static void main(String[] args) {
int x = 10; // x دارای Local Scope است
if (x > 5) {
int y = 20; // y فقط درون این بلوک if معتبر است
System.out.println("y: " + y);
}
// System.out.println(y); // خطا: y شناختهشده نیست
}
}
🔹 نکته: متغیر
y
خارج از بلاک if
وجود ندارد و دسترسی به آن باعث خطای کامپایل میشود.✅ ۲. Instance Scope (محدودهی شیء یا نمونه)
متغیرهایی که در سطح کلاس و خارج از متدها تعریف میشوند، اما بدون استفاده از کلیدواژه `static`، دارای Instance Scope هستند.
public class Person {
String name; // Instance variable
int age;
public void showInfo() {
System.out.println("Name: " + name + ", Age: " + age);
}
}
🔹 نکته: برای دسترسی به این متغیرها باید ابتدا یک شیء از کلاس ساخته شود.
Person p = new Person();
p.name = "Ali";
p.age = 25;
p.showInfo();
✅ ۳. Static Scope (محدوده سراسری در کلاس)
وقتی متغیر یا متدی با
static
تعریف شود، بدون نیاز به ساخت شیء و به صورت مستقیم از طریق نام کلاس قابل دسترسی خواهد بود.
public class Counter {
static int count = 0;
public static void increment() {
count++;
}
}
🔹 نکته: متغیر
count
بین تمام نمونهها مشترک است.
Counter.increment();
System.out.println(Counter.count); // خروجی: 1
✅ ۴. Block Scope (محدودهی بلوک کدی)
هر جایی که از
{}
استفاده شده باشد، مانند if
, for
, while
, و حتی یک بلوک ساده، میتواند محدودهی خاصی تعریف کند.
public class BlockScope {
public static void main(String[] args) {
{
int temp = 42;
System.out.println(temp);
}
// System.out.println(temp); // خطا: temp خارج از محدوده است
}
}
✅ ۵. Method Scope (محدودهی تابع)
پارامترهای ورودی یک متد و متغیرهای تعریفشده درون آن، فقط در همان متد قابل استفادهاند.
public class Calculator {
public int add(int a, int b) {
int result = a + b;
return result;
}
}
🔹 نکته: متغیر
result
فقط در متد add
وجود دارد و از بیرون آن قابل دسترسی نیست.✅ ۶. Nested Scope (محدودههای تو در تو)
در صورت تو در تو بودن بلوکها، بلوک داخلی به متغیرهای بلوک خارجی دسترسی دارد، ولی بالعکس آن صحیح نیست.
public class NestedScope {
public static void main(String[] args) {
int outer = 100;
{
int inner = 50;
System.out.println("outer: " + outer); // مجاز
System.out.println("inner: " + inner);
}
// System.out.println(inner); // خطا
}
}
✅ ۷. Lambda Scope (محدوده در عبارات لامبدا)
در Java، عبارات Lambda برای تعریف توابع بدون نیاز به ایجاد کلاس جدید استفاده میشوند. درون لامبداها، فقط به متغیرهایی میتوان دسترسی داشت که effectively final باشند؛ یعنی یا صراحتاً
final
تعریف شده باشند، یا بعد از مقداردهی، دیگر تغییر نکنند.
public class LambdaScopeExample {
public static void main(String[] args) {
String message = "Hello"; // این متغیر بعداً تغییر نکند
Runnable r = () -> {
System.out.println(message); // مجاز است
};
r.run();
}
}
🔹 نکته مهم: اگر مقدار
message
را بعد از لامبدا تغییر دهیم، کامپایلر خطا میدهد:
public class LambdaScopeError {
public static void main(String[] args) {
String msg = "Hi";
Runnable r = () -> {
System.out.println(msg);
};
msg = "Hello"; // ❌ خطا: msg باید final یا effectively final باشد
r.run();
}
}
👍5❤2🗿1
🔸 همچنین درون یک لامبدا نمیتوان متغیر جدیدی با همان نام متغیرهای بیرونی تعریف کرد:
🔹 اما میتوان از متغیرهای فیلد کلاس (instance یا static) بدون محدودیت در لامبدا استفاده کرد:
🧠 جمعبندی:
در زبان Java، تعیین محل تعریف متغیر و سطح دسترسی آن یکی از اصول مهم طراحی ساختار برنامه است. آشنایی با Scopeها به شما کمک میکند تا کدهای واضحتر، امنتر و قابل نگهداریتری بنویسید.
عبارات Lambda دارای قوانین خاصی برای Scope هستند که رعایت آنها برای جلوگیری از خطاهای زمان کامپایل ضروری است. درک اینکه چه متغیرهایی درون لامبدا قابل استفاده هستند، در طراحی کدهای مدرن بسیار اهمیت دارد.
public class LambdaNameConflict {
public static void main(String[] args) {
int x = 5;
Runnable r = () -> {
// int x = 10; ❌ خطا: متغیر x قبلاً در outer scope تعریف شده
System.out.println(x);
};
r.run();
}
}
🔹 اما میتوان از متغیرهای فیلد کلاس (instance یا static) بدون محدودیت در لامبدا استفاده کرد:
public class LambdaWithField {
static int counter = 0;
public static void main(String[] args) {
Runnable r = () -> {
counter++;
System.out.println("Counter: " + counter);
};
r.run();
}
}
🧠 جمعبندی:
در زبان Java، تعیین محل تعریف متغیر و سطح دسترسی آن یکی از اصول مهم طراحی ساختار برنامه است. آشنایی با Scopeها به شما کمک میکند تا کدهای واضحتر، امنتر و قابل نگهداریتری بنویسید.
عبارات Lambda دارای قوانین خاصی برای Scope هستند که رعایت آنها برای جلوگیری از خطاهای زمان کامپایل ضروری است. درک اینکه چه متغیرهایی درون لامبدا قابل استفاده هستند، در طراحی کدهای مدرن بسیار اهمیت دارد.
#کاربر_مبتدی
🆔 @javapro_ir
🆔 @group_javapro
👍6❤4
public class Main {
public static void main(String[] args) {
List<String> arr = SwapData.swapValues("a", "b");
System.out.println(arr); // [b, a]
}
}
class SwapData<T> {
public static <T> List<T> swapValues(T a, T b) {
List<T> arr = new ArrayList<>();
arr.add(b);
arr.add(a);
return arr;
}
}
🔍 چه اتفاقی در اینجا میافتد؟
ما از جنریکها در سطح متد (<T>) در یک متد استاتیک استفاده کردهایم. این کار به ما امکان میدهد دو مقدار از یک نوع را جابهجا کنیم و آنها را در یک لیست برگردانیم. ساده، تمیز و قابل استفاده برای هر نوع شیء.
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2
1. تفاوتهای Monolith و Microservices و زمان انتخاب هرکدام
2. طراحی یک مایکروسرویس از صفر
3. الگوی API Gateway و مزایای آن
4. ارتباط بین سرویسها: REST در مقابل Messaging
5. الگوی Circuit Breaker و پیادهسازی آن با Resilience4j
6. بالانس بار در مایکروسرویسها با استفاده از Spring Cloud Load Balancer
7. نقش Spring Cloud Config در مدیریت متمرکز تنظیمات
8. کشف سرویسها با استفاده از Eureka یا Consul
9. Feign Client در مقابل WebClient: کدام را انتخاب کنیم و چرا
10. معماری رویداد-محور و یکپارچهسازی با Kafka
11. پایگاهداده جداگانه برای هر سرویس در مقابل پایگاهداده مشترک: مزایا و معایب
12. الگوی Saga برای تراکنشهای توزیعشده در مایکروسرویسها
13. احراز هویت مبتنی بر JWT و OAuth2 در مایکروسرویسها
14. نحوه مدیریت امنیت در API Gateway
15. مشاهدهپذیری: بهترین روشها برای لاگبرداری، ردیابی و مانیتورینگ
16. نقش Prometheus و Grafana در مانیتورینگ مایکروسرویسها
17. استراتژیهای استقرار مایکروسرویسها با Kubernetes
18. استقرار Blue-Green و Canary در مایکروسرویسها
19. چه زمانی از WebFlux برای مایکروسرویسهای واکنشی استفاده کنیم
20. CQRS و Event Sourcing: چه زمانی و چرا از آنها استفاده کنیم
یاد بگیر، اعتمادبهنفس پیدا کن و به یک توسعهدهنده جاوا با توانایی فنی بالا تبدیل شو.
https://academyjavapro.com/product/creating-microservices-with-java-and-spring-boot/
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
#مثال_جاوا
🖊 چه در حال آمادگی برای یک مصاحبه فنی باشید و چه بخواهید مهارتهای برنامهنویسی خود را ارتقا دهید، این الگوها راهی عالی برای ایجاد عادتهای قوی در حل مسئله هستند.
➡️ اشتراک 👍 لایک 💬 کامنت
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ @javapro_ir💬 @group_javapro
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM