CodeCrafters
前往频道在 Telegram
Software Engineer and IT Group: https://t.me/code_crafters_chat Github: https://github.com/CodeCrafters-ir Site: https://codecrafters.ir
显示更多710
订阅者
无数据24 小时
无数据7 天
无数据30 天
帖子存档
710
خب سلام دوستان. تصمیم گرفتم تو یکسری پست سریالی(دوره) درمرد فناوری های نوین و جدید و آینده دار که در ایران متاسفانه کمتر بهشون پرداخته شده بپردازیم و چیزای جدید رو یاد بگیریم.
فناوریه ای نوین مثل بلاکچین، وب 3 و کامپیوترهای کوانتومی که در حال تغییر جهان اینده هستند. در این دوره قصد داریم ا با این سه فناوری آشنا بشیم و بهمون کمک کنه تا درک عمیقی از آنها پیدا کنیم.
بخش اول: بلاکچین - انقلاب در دنیای دیجیتال
ما این دوره را با بلاکچین آغاز میکنیم، فناوریای که با تمرکززدایی، امنیت و شفافیت خود، تحولات عظیمی در ارزهای دیجیتال، قراردادهای هوشمند و مدیریت زنجیره تأمین ایجاد کرده است.
چرا بلاکچین؟
بلاکچین پایه و اساس ارزهای دیجیتال مانند بیتکوین و اتریوم است و کاربردهای فراتر از ارزهای دیجیتال دارد. در این بخش، شما با اصول پایهای بلاکچین، نحوه کارکرد و کاربردهای متنوع آن آشنا خواهید شد.
ساختار دوره
این دوره به 4 فصل کلیدی تقسیم شده است:
فصل 1: بلاکچین چیست و چگونه کار میکند
1-بلاکچین چیست 2-بلاکچین چگونه کار میکند 3-کاربردهای بلاکچین 4-اولین بلاکچین و معروفترینها 5-فصل 2: رابطه بلاکچین با ارزهای دیجیتالفصل 2: مفاهیم پایه ارز دیجیتال
1-بلاکچینهای معروف در حوزه ارزهای دیجیتال 2-استخراج (Mining) 3-کیف پولهای دیجیتال و امنیتفصل 3: کاربردهای پیشرفته بلاکچی
ن 1-قراردادهای هوشمند 2-دپس (DApps) و وب 3.0 3-بلاکچین در صنایع مختلف 4-آینده بلاکچین فصل 4: ابزارها و تکنولوژیهای مرتبط با بلا
ک چین 1-زبانهای برنامهنویسی بلاکچین 2-پلتفرمهای توسعه و ابزارهای کاربردی 3-تحلیل دادههای بلاکچین 4-آموزش و منابع یادگیری ادامه مسیر: وب 3 و کامپیوترهای کوانتومی پس از تسلط بر بلاکچین، به سراغ وب 3 و سپس کامپیوترهای کوانتومی خواهیم رفت تا شما را برای آیندهای دیجیتالی و هوشمند آماده کنیم. همچنین مطالب مرتبط با بلاکچین و وب3 رو و مطالب مرتبط با کامپیوتر های کوانتومی رو با هشتگ های زیر ازین پس در چنل پیدا کنید. #blockchain #web3 #quantum_computing
710
4. جستجو در آرایه¹:
ما میتوانیم روی یک آرایه پیمایش کنیم و یک عنصر را جستجو کنیم یا به عبارتی یافتن ایندکس یک عنصر در یک آرایه. در زیر اجرای حذف عنصر در یک آرایه آمده است:
// Function to implement search operation
int findElement(int arr[], int n, int key)
{
int i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;
// If the key is not found
return -1;
}
// Function to implement search operation
int findElement(int arr[], int n, int key)
{
int i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;
// If the key is not found
return -1;
}
// Function to implement search operation
int findElement(int arr[], int n, int key)
{
for (int i = 0; i < n; i++)
if (arr[i] == key)
return i;
// If the key is not found
return -1;
}
# Python program for searching in
# unsorted array
def findElement(arr, n, key):
for i in range(n):
if (arr[i] == key):
return i
# If the key is not found
return -1
// Function to implement
// search operation
int findElement(int[] arr, int n, int key)
{
for (int i = 0; i < n; i++)
if (arr[i] == key)
return i;
// If the key is not found
return -1;
}
// Function to implement search operation
function findElement( arr, n, key)
{
let i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;
return -1;
}
پانوشت:
1. Searching in Array
#data_structures
#algorithm
@code_crafters710
// function to search a key to
// be deleted
static int findElement(int arr[], int n, int key)
{
int i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;
// Return -1 if key is not found
return -1;
}
// Function to delete an element
static int deleteElement(int arr[], int n, int key)
{
// Find position of element to be
// deleted
int pos = findElement(arr, n, key);
if (pos == -1) {
System.out.println("Element not found");
return n;
}
// Deleting element
int i;
for (i = pos; i < n - 1; i++)
arr[i] = arr[i + 1];
return n - 1;
}
// function to search a key to be deleted
function findElement(arr,n,key)
{
let i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;
return -1;
}
// Function to delete an element
function deleteElement(arr,n,key)
{
// Find position of element to be deleted
let pos = findElement(arr, n, key);
if (pos == -1)
{
document.write("Element not found");
return n;
}
// Deleting element
let i;
for (i = pos; i< n - 1; i++)
arr[i] = arr[i + 1];
return n - 1;
}
#data_structures
#algorithm
@code_crafters710
3. حذف در آرایه¹:
ما میتوانیم یک عنصر را در هر ایندکسی در یک آرایه حذف کنیم. در زیر اجرای حذف عنصر در یک آرایه آمده است:
// To search a key to be deleted
int findElement(int arr[], int n, int key);
// Function to delete an element
int deleteElement(int arr[], int n, int key)
{
// Find position of element to be deleted
int pos = findElement(arr, n, key);
if (pos == -1) {
cout << "Element not found";
return n;
}
// Deleting element
int i;
for (i = pos; i < n - 1; i++)
arr[i] = arr[i + 1];
return n - 1;
}
// Function to implement search operation
int findElement(int arr[], int n, int key)
{
int i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;
// Return -1 if key is not found
return -1;
}
// C program to implement delete operation in a
// unsorted array
#include <stdio.h>
// To search a key to be deleted
int findElement(int arr[], int n, int key);
// Function to delete an element
int deleteElement(int arr[], int n, int key)
{
// Find position of element to be deleted
int pos = findElement(arr, n, key);
if (pos == -1) {
printf("Element not found");
return n;
}
// Deleting element
int i;
for (i = pos; i < n - 1; i++)
arr[i] = arr[i + 1];
return n - 1;
}
// Function to implement search operation
int findElement(int arr[], int n, int key)
{
int i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;
// Return -1 if key is not found
return -1;
}
from array import array
# Function to search for a key in the array
def findElement(arr, n, key):
for i in range(n):
# Return the index if key is found
if arr[i] == key:
return i
# Return -1 if key is not found
return -1
# Function to delete an element from the array
def deleteElement(arr, n, key):
# Find position of element to be deleted
pos = findElement(arr, n, key)
if pos == -1:
print("Element not found")
return n
# Deleting element
for i in range(pos, n - 1):
arr[i] = arr[i + 1]
return n - 1
int findElement(int[] arr, int n, int key)
{
int i;
for (i = 0; i < n; i++)
if (arr[i] == key)
return i;
return -1;
}
// Function to delete an element
int deleteElement(int[] arr, int n, int key)
{
// Find position of element
// to be deleted
int pos = findElement(arr, n, key);
if (pos == -1) {
Console.WriteLine("Element not found");
return n;
}
// Deleting element
int i;
for (i = pos; i < n - 1; i++)
arr[i] = arr[i + 1];
return n - 1;
}
پانوشت:
1. Deletion in Array
#data_structures
#algorithm
@code_crafters710
سیاستهای نظارت بر عملکرد:
واحد پشتیبانی باید در لحظه بتواند سرویس را نظارت کند و قبل از وقوع اتفاق این امکان نظارت را داشته باشد، معمولا واحد پشتیبانی بعد از رخ داد برای سرویس متوجه ان میشود(درخواست مدیر پشتیبانی)
بیانیه: همه خدمات باید در زمان واقعی نظارت شوند.
منطق بیانیه: اگر بخواهیم بتوانیم خدمات خود را به طور موثر نظارت کنیم و به هر مشکلی در اسرع وقت پاسخ دهیم، باید خدمات خود را در زمان واقعی نظارت کنیم.
پیامدهای بیانیه: همه خدمات ما باید تغییر کنند تا رویدادها را ارسال کنند. رویدادها باید توسط یک راه حل BAM (نرم افزار مانیتورینگ تجاری) در زمان واقعی پردازش شوند. داشبوردی مورد نیاز است که تحلیلگران تجاری و بخش پشتیبانی محصول می توانند از آن برای نظارت بر استفاده از خدمات استفاده کنند.
اطلاعات آماری بخشهای پر بازدید سیستم:
هر سیستم از یک یل چند بیزنس کور و دومین تشکیل میشه که قلب تپنده سیستم محسوب میشه، اطلاعات اماری در خصوص تحلیل و بازدید میتونه در برنامههای آینده در خصوص چگونگی پیشبرد توسعه و درامدزایی به سازمان کمک کند(درخواست تحلیلگر اصلی و مدیر فروش)
بیانیه: خدمات باید یک نمای قابل تنظیم از رویدادهای خاص ارائه دهد.
منطق بیانیه: اگر بتوانیم ببینیم مشتریان چگونه از خدمات ما استفاده می کنند، بهتر می توانیم به آنها کمک کنیم. در صورت نیاز به زمان خرابی، می توانیم این کار را در حالی انجام دهیم که کمترین تعداد مصرف کنندگان از خدمات ما استفاده می کنند. اگر خطاهای زیادی در یک سرویس خاص مشاهده کنیم، می توانیم توجه خود را روی آن مشکل متمرکز کنیم. این به ما این امکان را می دهد که تلاش خود را در جایی که بیشترین تأثیر را دارد متمرکز کنیم
پیامدهای بیانیه: داشبوردهایی را تنظیم کنید که عملکرد خاص خدمات ما را نظارت کنند. اجازه پردازش پیچیده رویدادها را برای ایجاد نمای مورد نیاز تحلیلگران تجاری.
سیاست مقیاس کردن پروژه:
در طی سالیان انتظار رشد زیاد پروژه رو دارند ازین بابت نیازمند رویکردی کم هزینه هستیم (درخواست مدیر عامل و مدیر فروش)
بیانیه: همه خدمات ما باید بتوانند به صورت افقی مقیاس شوند. برای پایین نگه داشتن هزینه ها، باید امکان اجرای خدمات خود در یک محیط ابری وجود داشته باشد
منطق بیانیه: انتظار می رود استفاده از خدمات به شدت رشد کند. اما سرمایه گذاری در حال حاضر در منابع سخت افزاری امکان پذیر نیست. برای پایین نگه داشتن هزینه ها و اینکه بتوانیم به راحتی منابع محاسباتی را افزایش دهیم، خدمات ما باید بتوانند در فضای ابری اجرا شوند.
پیامدهای بیانیه: ارائه دهندگان ابری زیادی در دسترس هستند. یک ارائه دهنده ابر باید انتخاب شود که عملکرد مورد نیاز خدمات ما را ارائه دهد(در پستهای قبلی در خصوص پارامترهای انتخابی در این خصوص صحبت کردیم). باید یک پیاده سازی مرجع جدید از خدمات ما ایجاد شود که از عملکرد ارائه شده توسط پلتفرم ابری استفاده کند.محیط نظارت باید اضافه شود تا بتواند خدماتی را که در فضای ابری اجرا می شوند، به جای خدماتی که در محیط خودمان اجرا می کنند، نظارت کند.
سیاست بررسی و نظارت بر توسعه سیستم:
هر سیستم بخشهایی از آن به دلایلی ممکن است دچار خطا شوند این زمانی معضل میشه که تعداد آنها بسیار بالا باشد و بخش پشتیبانی رو با حجم زیادی از درخواست روبرو کند، از این رو نظارت بر توسعه سیستم بوجود میاد(درخواست مدیر توسعه)
بیانیه: همه خدمات ما باید قبل از ارسال آزمایش شوند. این سرویس ها باید روی تمام لایه های مختلف تست شوند. علاوه بر این تست ها، باید از بررسی خودکار برای تعیین کیفیت کد و پوشش تست برای یک سرویس خاص استفاده شود.
منطق بیانیه: اگر لایه های مختلف را آزمایش نکنیم، یافتن سریع مشکلات کد بسیار سخت خواهد بود. با آزمایش هر لایه میتوانیم مطمئن باشیم که کد کاری را که باید انجام دهد انجام میدهد و به سرعت اشکالات را شناسایی میکنیم. برای سهولت بررسی کیفیت و پوشش آزمایشی کد، باید از یک ابزار خودکار استفاده شود. با استفاده از این ابزار می توانیم یک نمای کلی از کیفیت کد داشته باشیم و ببینیم که آیا به اندازه کافی تست کرده ایم یا خیر.
پیامدهای بیانیه: هر لایه از هر سرویس باید آزمایش شود. برای این ما باید تصمیم بگیریم که چگونه می توانیم این کار را به بهترین نحو انجام دهیم. ما باید تصمیم بگیریم که به چه پوشش آزمایشی می خواهیم برسیم. معیارهای زیادی وجود دارد که می توان از آنها برای تعیین کیفیت کد استفاده کرد. ما باید معیارهایی را که می خواهیم اندازه گیری کنیم انتخاب کنیم. (ادامه) خط مشی: per_pol_4 خدمات را در فضای ابری اجرا کنید.
#microservice
#soa
@code_crafters
710
منطق بیانیه: دلیل این خطمشی این است که نمیتوانیم انتظار داشته باشیم که مصرفکنندگان خدمات ما فوراً به نسخه جدیدی از سرویسی که استفاده میکنند بهروزرسانی کنند. تغییر در حال شکستن همچنین مستلزم تغییراتی در سمت مشتری است. برای اینکه به مصرف کنندگان ما اجازه دهیم به راحتی به نسخه جدیدی از یک سرویس بروند، به آنها اجازه می دهیم یک نسخه اصلی را پشت سر بگذارند.
سیاست implication: ما باید مطمئن شویم که فضاهای نام استفاده شده منعکس کننده نسخه صحیح یک سرویس یا پیام هستند. سرویس های REST نیز باید نسخه شوند. این بدان معنی است که در توصیف نوع محتوای آنها باید شماره نسخه وجود داشته باشد. چرخه عمر سرویس باید وجود داشته باشد که به مصرف کننده وضعیتی که سرویس در آن است اطلاع دهد. مخزن باید بتواند چندین نسخه از یک سرویس را پشتیبانی کند و کاربران مخزن باید بتوانند به راحتی نسخه سرویس مورد نظر خود را تشخیص دهند.
سیاستهای امنیتی:
برخی از سرویسها شامل دادههای حساسی هستند و ممکن است قوانین جامعی برای انها منتشر شود
بیانیه: کلیه داده های حساس در مورد افراد و مجوزها باید قبل از ارسال به مشتری رمزگذاری شوند. این نه تنها برای وب سایت هایی که ما ارائه می دهیم صدق می کند، بلکه باید در سطح خدمات نیز اعمال شود.
منطق بیانیه: ما نمی توانیم اعتماد مشتریان خود را نسبت به خدماتی که ارائه می کنیم از دست بدهیم.اگر اطلاعات حساس به بیرون درز کند، مطبوعات منفی باعث فرار مشتریان به سایر ارائه دهندگان خدمات می شود. با ارائه دسترسی رمزگذاری شده به خدمات خود، به مشتریان خود اطمینان می دهیم که هیچ شخص ثالثی نمی تواند داده ها را استراق سمع کند.
پیامدهای بیانیه: وقتی سرویسی توسعه مییابد که با اطلاعات حساس سروکار دارد، این سرویس باید از طریق HTTPS افشا شود. برای مقابله با چرخه عمر گواهینامه های سرور باید فرآیندی تنظیم شود. اگر از گواهی های مشتری استفاده می شود، باید فرآیندی تنظیم شود که به مدیریت و ثبت این گواهی ها می پردازد.
سیاستهای ثبت تغییرات و جعل داده:
سیستم ما در حال بزرگ شدن هستش و تغییرات در ان یک مسئله مرسوم هستش، بالاخص زمانیکه واحد پشتیبانی بزرگی داشته باشیم که دسترسی نسبتا جامعی داشته باشند (یا یک کاربر بخواهد غیرمجاز رفتار کند) ما نیازمند سیستم ثبت وقایع هستیم تا در صورت لزوم متخلف شناسایی گردد(درخواست تحلیلگر اصلی)
بیانیه: ما باید مطمئن باشیم که همه پیامهایی که اطلاعاتی را در سیستمهای ما ایجاد یا بهروزرسانی میکنند، میتوانند از نظر یکپارچگی و عدم انکار پیام بررسی شوند.
منطق بیانیه: اگر مشتریان بتوانند داده های جعلی ارسال کنند، محاسبات نادرست خواهد بود و سازمان ضرر خواهد کرد.
پیامدهای بیانیه: ما باید راهی را تعریف کنیم که پیام ما می تواند امضا شود.این باید به ما امکان دهد تشخیص دهیم که آیا پیام دستکاری شده است یا خیر. مشتریان ما باید به هر پیامی که می فرستند یک امضا اضافه کنند. باید سرویسهای خود را تغییر دهیم تا هر پیام قبل از پردازش تأیید شود.
بیانیه(دوم): همه برنامه ها و سرویس ها از یک سیستم مرکزی استفاده می کنند که نقش ها و حقوق کاربران سیستم ها و برنامه های ما را تعیین می کند.
منطق بیانیه: اجرای مجوز اغلب به شیوه ای بسیار خاص برای برنامه انجام می شود.
هر سرویس و برنامه ای طرح های مجوز خود را ابداع می کند که باید به طور جداگانه توسعه و مدیریت شوند. ما با یک سیستم مجوز واحد، شیوه برخورد برنامهها با مجوز را استاندارد میکنیم و میتوانیم مدیریت نقشها، حقوق و کاربران را متمرکز کنیم.
پیامدهای بیانیه: یک سیستم هویت فدرال برای مجوزها باید راه اندازی شود و در اختیار سرویس های مختلف قرار گیرد. برای استفاده از این سیستم فدرال جدید، همه سرویس هایی که نیاز به مجوز دارند باید تغییر کنند. فرآیندهایی باید برای ایجاد و اداره حقوق و نقش های ذخیره شده در این سیستم فدرال وجود داشته باشد.
سیاستهای تست و افزایش کارایی:
مشتریان سازمان ما متفاوت هستند، گاها یک مستری نسبت به خدمات ما تقاضای شخصی خود را نیز دارد، که منجر به نوشتن یک قرارداد سطح خدمات (SLA) میشود مشتری از ما اطمینان پاسخ دهی سریع سرویس را میخواهد(درخواست مدیر فروش)
بیانیه: میانگین زمان پردازش پیام ها باید کمتر از 10 میلی ثانیه باشد
پیامدهای منطقی: برای اینکه بتواند با بار فزاینده کنار بیاید، سرویسی که با داده های سروکار دارد باید بتواند پیام ها را در عرض 10 میلی ثانیه پردازش کند.
پیامدهای بیانیه: برای مشاهده میانگین زمان پردازش باید محیط را زیر نظر داشته باشیم. ما باید تست های استرس را اجرا کنیم تا ببینیم سیستم تحت افزایش بار چگونه عمل می کند.
#microservice
#soa
@code_crafters
710
در ادامه مباحث میکروسرویس و حاکمیت soa میرسیم به سیاستهای ادغام سازی
منشا موضوع از جایی هستش که سازمان ما در حال توسعه یک برنامه هستش و ما تنها سازمان موجودی نیستیم که سعی در نوشتن این پروژه رو داره یا حداقل بخشهایی از سیستم ما قبلا موجود هستش یا قوانین جامع و یکپارچه و شناخته شدهای برای اون بخش وجود داره
بیایید با یک مثال اندکی بیشتر راجبش صحبت کنیم، فرض کنید که ما یک پروژه داریم که قراره از خدمات بانکی استفاده کنه یا به بانکها خدمات ارائه بده، سیستم بانکی در سرتاسر کشور یکسان هستش و قوانین مشخص شدهای داره که کا باید از این قوانین پیروی کنیم در صورت عدم پیروی از این قوانین پروژه ما با شکست مواجه میشه، از طرفی دیگه هم پروژه ما باید توانایی ادغام با سیستم بانکی رو هم داشته باشه و مشابه کاری که ما میخوایم انجام بدیم هم توسط سازمانهای دیگه صورت گرفته، اینجاست که یکسری سیاستهای حاکمیتی soa به شکل زیر به میان میاد:
سیاستهای دیتا مدل:
بیانیه: اگر استانداردهای ملی(جامع) برای نهادهایی که ما مبادله می کنیم تعریف شده است، حداقل باید رابطی ارائه دهیم که بتواند با این نهادها کار کند. همچنین باید مطمئن شویم که قبل از شروع تعریف مدل داخلی خود، به مدل های موجود نگاه می کنیم تا ببینیم آیا می توانیم از یک مدل موجود استفاده کنیم یا آن را گسترش دهیم.
منطق بیانیه: اگر از این استانداردها پیروی کنیم، ادغام با طرف های دیگر سریعتر و مقرون به صرفه تر خواهد بود. ما میتوانیم راحتتر با این طرفهای دیگر وارد بازار شویم و از خدماتی که بر اساس این مدلها تعریف میکنیم استفاده مجدد بیشتری ببریم.
پیامدها بیانیه: قبل از تعریف مدل های خاص، باید استانداردهای موجود را بررسی کنیم. اگر استانداردی مطابق با الزامات ما در حال حاضر موجود است، باید از آن استاندارد پیروی کنیم.
■ اگر استانداردی در دسترس نباشد، یا استاندارد مطابقت نداشته باشد، ما مدل خود را تعریف خواهیم کرد.
■ اگر مدل ما ابرمجموعهای از استانداردی باشد که در دسترس است، همچنان یک رابط برای سیستمهای خود بر اساس آن استاندارد ارائه میکنیم.
سیاستهای استفاده مجدد از طراحی:
سازمان ما بصورت مداوم در حال توسعه برنامه و سرویسها هستش، ذینفعان و مالکان پروژه نیازمندیهای خود رو بیان میکنن و سیستم روز به روز بزرگتر میشود، تصور کنید چند سرویس وجود دارد که یک کار را انجام میدهند چه اتفاقی میافتد، رهگیری کاربران بشدت پیچیده خواهد شد و صرف هزینه زیاد میگردد(درخواست مدیر توسعه)
بیانیه: تمام خدمات با توضیحات آنها باید به صورت مرکزی ثبت شود. قبل از اینکه یک سرویس جدید ایجاد شود، این رجیستری باید بررسی شود تا ببیند آیا قبلاً سرویسی وجود دارد که این عملکرد را ارائه می دهد یا اینکه آیا این قابلیت باید به جای معرفی یک سرویس جدید به یک سرویس موجود اضافه شود.
منطق بیانیه: ما می خواهیم از ایجاد سرویس های جدید در زمانی که عملکرد از قبل در یکی از سرویس های موجود موجود است، اجتناب کنیم. با معرفی یک مخزن مرکزی که در آن همه خدمات به صورت یکسان ذخیره می شوند، استفاده مجدد از خدمات موجود را آسان تر می کنیم و از تکرار غیر ضروری جلوگیری می کنیم. این به ما این امکان را می دهد که با سرعت بیشتری عملکرد جدیدی را برای مصرف کنندگان خود ارائه کنیم.
پیامدها بیانیه: قبل از ایجاد یک سرویس، تحلیلگران و توسعه دهندگان کسب و کار باید در مخزن جستجو کنند تا ببینند آیا سرویس مشابهی از قبل در دسترس است یا خیر. مخزن متمرکز باید در زمان طراحی در دسترس باشد تا بتوان از آن برای کشف سرویس استفاده کرد. خدمات باید به گونه ای مشخص و ثبت شوند که با جستجو در مخزن به راحتی قابل کشف باشند.
سیاستهای نگهداری چند نسخه بصورت همزمان:
در سیستمهای بزرگ بروز رسانی موضوعی همیشگی هستش، اما این برای مشتریان سیستم نه شاید جالب باشد تصور کنید نسخهای از سیستم ارائه شده و مشتریان در حال استفاده از اون هستند اندکی بعد نسخه جدید ارائه میگردد و مشتریان باید خود رو با نسخه جدید هماهنگ کنن، در نهایت تصمیم برخی مشتریان ماندن در نسخه قبلی میباشد(درخواست مدیر فروش)
بیانیه: ما باید بتوانیم دو نسخه از سیستم را همزمان پشتیبانی کنیم.مشتریان ما مجاز به اجرای یک نسخه قبلی هستند. هنگامی که یک نسخه جدید را ارائه می کنیم، همچنین باید بررسی کنیم که آیا این یک تغییر شکسته است، که یک شماره نسخه جدید را معرفی می کند یا یک تغییر سازگار با قبلی است، که نسخه جدید را تضمین نمی کند.
#microservice
#soa
@code_crafters
710
2. درج در آرایه¹:
ما میتوانیم یک یا چند عنصر را در هر موقعیتی در آرایه وارد کنیم یا به عبارتی در یک ایندکس خاص. در زیر پیادهسازی درج در آرایه به زبانهای مختلف برنامهنویسی آورده شده است:
// Function to insert element
// at a specific position
void insertElement(int arr[], int n, int x, int pos)
{
// shift elements to the right
// which are on the right side of pos
for (int i = n - 1; i >= pos; i--)
arr[i + 1] = arr[i];
arr[pos] = x;
}
// Function to insert element
// at a specific position
void insertElement(int arr[], int n, int x, int pos)
{
// shift elements to the right
// which are on the right side of pos
for (int i = n - 1; i >= pos; i--)
arr[i + 1] = arr[i];
arr[pos] = x;
}
static void insertElement(int arr[], int n, int x, int pos)
{
// shift elements to the right
// which are on the right side of pos
for (int i = n - 1; i >= pos; i--)
arr[i + 1] = arr[i];
arr[pos] = x;
}
# python Program to Insert an element
# at a specific position in an Array
def insertElement(arr, n, x, pos):
# shift elements to the right
# which are on the right side of pos
for i in range(n-1, pos-1, -1):
arr[i + 1] = arr[i]
arr[pos] = x
static void insertElement(int[] arr, int n, int x, int pos)
{
// shift elements to the right
// which are on the right side of pos
for (int i = n - 1; i >= pos; i--)
arr[i + 1] = arr[i];
arr[pos] = x;
}
// javascript Program to Insert an element
// at a specific position in an Array
function insertElement(arr, n, x, pos)
{
// shift elements to the right
// which are on the right side of pos
var i = n - 1;
for (i; i >= pos; i--)
{
arr[i + 1] = arr[i];
}
arr[pos] = x;
}
پانوشت:
1. Insertion in Array
#data_structures
#algorithm
@code_crafters710
عملیات روی آرایه
1. پیمایش آرایه¹:
پیمایش آرایه شامل یک بار بازدید از تمام عناصر آرایه به ترتیب خاصی است (به عنوان مثال: متوالی²، معکوس³). در زیر پیادهسازی پیمایش آرایه در زبانهای مختلف آورده شده است:
int arr[] = { 1, 2, 3, 4, 5 };
int len = sizeof(arr) / sizeof(arr[0]);
// Traversing over arr[]
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
int arr[] = { 1, 2, 3, 4, 5 };
// Traversing over arr[]
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
import array
arr = array.array('i', [1, 2, 3, 4, 5])
# Traversing over arr[]
for x in arr:
print(x, end=" ")
int[] arr = { 1, 2, 3, 4, 5 };
// Traversing over arr[]
for (int i = 0; i < arr.Length; i++)
Console.Write(" " + arr[i]);
let arr = [1, 2, 3, 4, 5]
// Traversing over arr[]
for (let x of arr)
console.log(x)
int arr[] = { 1, 2, 3, 4, 5 };
int len = sizeof(arr) / sizeof(arr[0]);
// Traversing over arr[]
for (int i = 0; i < len; i++) {
cout << arr[i] << " ";
}
پانوشت:
1. Array Traversal
2. sequential
3. reverse
#data_structures
#algorithm
@code_crafters710
دوستان مشکلی در قرار دادن تصاویر مربوطه به دو پست اول اخیر پیش آمده بود...
که در حال حاضر ارجاعات لینکی تصاویر مربوطه آن دو پست اول به صورت درست قرار داده شده و ویرایش و به روز رسانی شد.
و ادامهی سری این مبحث در روزهای آتی برای شما عزیزان قرار داده میشود.
با معذرت 🙏🏼❤️
710
2. آرایههای پویا¹:
در این نوع آرایه، حافظه در زمان اجرا تخصیص داده میشود اما اندازه ثابتی² ندارد. فرض کنید، کاربر میخواهد هر اندازه تصادفی³ یک آرایه را اعلام کند، پس از آرایه ایستا استفاده نمیکنیم، به جای آن از یک آرایه پویا استفاده میشود. این نوع تخصیص حافظه به عنوان تخصیص حافظه پویا یا زمانِ اجرا⁴ نیز شناخته میشود. برای تعیین اندازه آن در طول زمان اجرای هر برنامه استفاده میشود.
// Dynamic Integer Array
int* arr = new int[5];
// Dynamic Integer Array
int* arr = malloc(sizeof(int) * 5);
// Dynamic Integer Array
ArrayList<Integer> arr = new ArrayList<>();
# Dynamic Array
arr = []
// Dynamic Integer Array
int[] arr = new int[5];
// Dynamic Array
let arr = new Array(5);
پانوشت:
1. Dynamic Arrays
2. fixed size
3. random
4. run-time
#data_structures
#algorithm
@code_crafters710
اهمیت آرایه
فرض کنید کلاسی متشکل از 5 دانش آموز وجود دارد و اگر باید سوابق نمرات آنها را در امتحان نگهداریم، میتوانیم این کار را با اعلام مجزا پنج متغیر و نگهداری پیگیری سوابق انجام دهیم، اما اگر تعداد دانشآموزان بسیار زیاد شود، چه میشود. دستکاری و نگهداری دادهها چالشبرانگیز خواهد بود.
معنی آن این است که ما میتوانیم از متغیرهای عادی (... ,v1, v2, v3) زمانی که تعداد اشیاء کمی داریم استفاده کنیم. اما اگر بخواهیم تعداد زیادی نمونه را ذخیره کنیم، مدیریت آنها با متغیرهای عادی مشکل می شود. ایده آرایه این است که نمونههای زیادی را در یک متغیر نشان دهد.
3_تصویر مربوطه
انواع آرایهها
آرایهها را میتوان به دو صورت طبقهبندی کرد:
- بر اساس تخصیص حافظه¹
- بر اساس ابعاد²
4_تصویر مربوطه
انواع آرایهها بر اساس ابعاد:
دو نوع اصلی آرایه وجود دارد که به انواع آرایهها بر اساس ابعاد تقسیمبندی میشوند:
- 1. آرایههای تکبُعدی (آرایه 1 بُعدی)³: میتوانید یک آرایه 1 بُعدی را به عنوان یک ردیف تصور کنید که در آن عناصر یکی پس از دیگری ذخیره میشوند یا به عبارتی این آرایهها یک ردیف از عناصر را ذخیره میکنند.
5_تصویر مربوطه
- 2. آرایههای چندبُعدی⁴: آرایه چند بُعدی آرایهای با بیش از یک بُعد است. ما میتوانیم از آرایه چند بُعدی برای ذخیره دادههای پیچیده در قالب جداول و غیره استفاده کنیم. میتوانیم آرایههای 2 بُعدی⁵، آرایههای 3 بُعدی⁶، آرایههای 4 بُعدی⁷ و از این قبیل داشته باشیم و به عبارتی این آرایهها چندین ردیف از عناصر را ذخیره میکنند.
+ آرایه دو بُعدی (آرایه 2 بُعدی یا ماتریس)⁸: آرایههای چندبُعدیِ 2 بُعدی را میتوان به عنوان آرایهای از آرایهها یا به عنوان ماتریسی متشکل از ردیفها و ستونها در نظر گرفت.
6_تصویر مربوطه
+ آرایه سه بُعدی (آرایه 3 بُعدی)⁹: یک آرایه چند بُعدیِ 3 بُعدی شامل سه بُعد است، بنابراین میتوان آن را آرایهای از آرایههای دو بُعدی در نظر گرفت.
7_تصویر مربوطه
انواع آرایهها بر اساس تخصیص حافظه:
1. آرایههای ایستا¹⁰:
در این نوع آرایه، حافظه در زمان کامپایل با اندازه ثابتی از آن تخصیص مییابد. ما نمیتوانیم اندازه این آرایه را تغییر دهیم یا به روز کنیم. این نوع تخصیص حافظه به عنوان تخصیص حافظه ثابت¹¹ یا زمانِ کامپایل¹² نیز شناخته میشود. در اینجا فقط یک اندازه ثابت (یعنی اندازه ای که در پرانتز [] ذکر شده است) از حافظه برای ذخیرهسازی اختصاص داده میشود. در صورتی که اندازه آرایه را ندانیم، اگر اندازه بزرگتر را اعلام کنیم و تعداد عناصر کمتری را ذخیره کنیم باعث هدر رفتن حافظه میشود یا اندازه کمتری را نسبت به تعداد عناصر اعلام میکنیم، در این صورت حافظه کافی برای ذخیره همه عناصر نخواهیم داشت. در چنین مواردی، تخصیص حافظه ثابت ترجیح داده نمیشود.
// Static Integer Array
int arr[5] = {1, 2, 3, 4, 5};
// Static Integer Array
int arr[5] = {1, 2, 3, 4, 5};
// Static Array
int[] arr = { 1, 2, 3, 4, 5 };
import array
# Static Array
arr = array.array('i', [1, 2, 3, 4, 5])
// Static array
int[] arr = { 1, 2, 3, 4, 5 };
let arr[] = {1, 2, 3, 4, 5}
پانوشت:
1. Memory Allocation 2. Dimensions
3. One-dimensional Array(1-D Array)
4. Multi-dimensional Array
5. 2-D arrays 6. 3-D arrays
7. 4-D arrays
8. Two-Dimensional Array(2-D Array or Matrix)
9. Three-Dimensional Array(3-D Array)
10. Static Arrays 11. static
12. compile-time
#data_structures
#algorithm
@code_crafters710
اهمیت آرایه
فرض کنید کلاسی متشکل از 5 دانش آموز وجود دارد و اگر باید سوابق نمرات آنها را در امتحان نگهداریم، میتوانیم این کار را با اعلام مجزا پنج متغیر و نگهداری پیگیری سوابق انجام دهیم، اما اگر تعداد دانشآموزان بسیار زیاد شود، چه میشود. دستکاری و نگهداری دادهها چالشبرانگیز خواهد بود.
معنی آن این است که ما میتوانیم از متغیرهای عادی (... ,v1, v2, v3) زمانی که تعداد اشیاء کمی داریم استفاده کنیم. اما اگر بخواهیم تعداد زیادی نمونه را ذخیره کنیم، مدیریت آنها با متغیرهای عادی مشکل می شود. ایده آرایه این است که نمونههای زیادی را در یک متغیر نشان دهد.
3_تصویر مربوطه
انواع آرایهها
آرایهها را میتوان به دو صورت طبقهبندی کرد:
- بر اساس تخصیص حافظه¹
- بر اساس ابعاد²
4_تصویر مربوطه
انواع آرایهها بر اساس ابعاد:
دو نوع اصلی آرایه وجود دارد که به انواع آرایهها بر اساس ابعاد تقسیمبندی میشوند:
- 1. آرایههای تکبُعدی (آرایه 1 بُعدی)³: میتوانید یک آرایه 1 بُعدی را به عنوان یک ردیف تصور کنید که در آن عناصر یکی پس از دیگری ذخیره میشوند یا به عبارتی این آرایهها یک ردیف از عناصر را ذخیره میکنند.
5_تصویر مربوطه
- 2. آرایههای چندبُعدی⁴: آرایه چند بُعدی آرایهای با بیش از یک بُعد است. ما میتوانیم از آرایه چند بُعدی برای ذخیره دادههای پیچیده در قالب جداول و غیره استفاده کنیم. میتوانیم آرایههای 2 بُعدی⁵، آرایههای 3 بُعدی⁶، آرایههای 4 بُعدی⁷ و از این قبیل داشته باشیم و به عبارتی این آرایهها چندین ردیف از عناصر را ذخیره میکنند.
+ آرایه دو بُعدی (آرایه 2 بُعدی یا ماتریس)⁸: آرایههای چندبُعدیِ 2 بُعدی را میتوان به عنوان آرایهای از آرایهها یا به عنوان ماتریسی متشکل از ردیفها و ستونها در نظر گرفت.
6_تصویر مربوطه
+ آرایه سه بُعدی (آرایه 3 بُعدی)⁹: یک آرایه چند بُعدیِ 3 بُعدی شامل سه بُعد است، بنابراین میتوان آن را آرایهای از آرایههای دو بُعدی در نظر گرفت.
7_تصویر مربوطه
انواع آرایهها بر اساس تخصیص حافظه:
1. آرایههای ایستا¹⁰:
در این نوع آرایه، حافظه در زمان کامپایل با اندازه ثابتی از آن تخصیص مییابد. ما نمیتوانیم اندازه این آرایه را تغییر دهیم یا به روز کنیم. این نوع تخصیص حافظه به عنوان تخصیص حافظه ثابت¹¹ یا زمانِ کامپایل¹² نیز شناخته میشود. در اینجا فقط یک اندازه ثابت (یعنی اندازه ای که در پرانتز [] ذکر شده است) از حافظه برای ذخیرهسازی اختصاص داده میشود. در صورتی که اندازه آرایه را ندانیم، اگر اندازه بزرگتر را اعلام کنیم و تعداد عناصر کمتری را ذخیره کنیم باعث هدر رفتن حافظه میشود یا اندازه کمتری را نسبت به تعداد عناصر اعلام میکنیم، در این صورت حافظه کافی برای ذخیره همه عناصر نخواهیم داشت. در چنین مواردی، تخصیص حافظه ثابت ترجیح داده نمیشود.
// Static Integer Array
int arr[5] = {1, 2, 3, 4, 5};
// Static Integer Array
int arr[5] = {1, 2, 3, 4, 5};
// Static Array
int[] arr = { 1, 2, 3, 4, 5 };
import array
# Static Array
arr = array.array('i', [1, 2, 3, 4, 5])
// Static array
int[] arr = { 1, 2, 3, 4, 5 };
let arr[] = {1, 2, 3, 4, 5}
پانوشت:
1. Memory Allocation 2. Dimensions
3. One-dimensional Array(1-D Array)
4. Multi-dimensional Array
5. 2-D arrays 6. 3-D arrays
7. 4-D arrays
8. Two-Dimensional Array(2-D Array or Matrix)
9. Three-Dimensional Array(3-D Array)
10. Static Arrays 11. static
12. compile-time710
Array¹
آرایه²
ساختمان داده آرایه³ای یک مفهوم اساسی در علوم کامپیوتر است که مجموعهای از عناصر⁴ را در یک قطعه⁵ پیوسته از حافظه ذخیره میکند. این امکان دسترسی موثر به عناصر را با استفاده از اندیسها⁶ فراهم میکند و به طور گسترده در برنامهنویسی برای سازماندهی⁷ و دستکاری⁸ دادهها استفاده میشود.
آرایه چیست؟
آرایه یک ساختمان داده خطی⁹ است که در آن همه عناصر به صورت متوالی¹⁰ مرتب شدهاند. این مجموعهای از عناصر از نوع داده یکسان یا مواردی از همان نوع متغیر¹¹ است که در مکانهای حافظه به هم پیوسته ذخیره میشوند. این یکی از محبوبترین و سادهترین ساختمانهای داده است و اغلب برای پیادهسازی سایر ساختمانهای داده استفاده میشود. هر مورد¹² در یک آرایه با شروع از 0 ایندکس میشود. هر عنصر در یک آرایه از طریق ایندکس آن قابل دسترسی است.
1_تصویر مربوطه
برای سادگی، میتوانیم آرایهای را بهعنوان تعدادی پله در نظر بگیریم که روی هر پله یک مقدار قرار میگیرد (مثلاً یکی از دوستان شما). در اینجا، شما میتوانید مکان هر یک از دوستان خود را به سادگی با دانستن تعداد پلکانی که در آن قرار دارند شناسایی کنید.
این کار محاسبه موقعیت هر عنصر را به سادگی با افزودن یک افست¹³ به یک مقدار پایه، یعنی مکان حافظه اولین عنصر آرایه (که معمولاً با نام آرایه مشخص میشود) آسانتر میکند. مقدار پایه ایندکس 0 است و تفاوت بین این دو ایندکسها افست است.
📌 به یاد داشته باشید: "مکان ایندکس بعدی به نوع دادهای که استفاده میکنیم بستگی دارد".
آیا اندازه آرایه همیشه ثابت است؟
در زبان برنامهنویسی ¹⁴C، آرایه دارای یک اندازه ثابت است، به این معنی که وقتی اندازه به آن داده میشود، نمی توان آن را تغییر داد، یعنی نمیتوانید آن را کاهش دهید و نمیتوانید آن را گسترش دهید. دلیل آن این بود که برای گسترش اگر اندازه را تغییر دهیم، نمیتوانیم مطمئن باشیم (هر بار امکان ندارد) که مکان حافظه بعدی را به صورت رایگان در اختیارمان قرار دهد. کاهش یافتن کار نخواهد کرد زیرا آرایه، زمانی که اعلام شود، حافظه به صورت ایستا¹⁵ تخصیص مییابد، و بنابراین کامپایلر¹⁶ تنها کسی است که میتواند آن را از بین ببرد.
اصطلاحات پایه آرایه
- ایندکس آرایه¹⁷: در یک آرایه، عناصر با ایندکسهایشان شناسایی میشوند. ایندکس آرایه از 0 شروع میشود.
- عنصر آرایه¹⁸: عناصر، مواردی هستند که در یک آرایه ذخیره میشوند و با ایندکس آنها میتوان به آنها دسترسی داشت.
- طول آرایه¹⁹: طول یک آرایه با تعداد عناصری که می تواند داشته باشد تعیین میشود.
نمایش حافظه آرایه
در یک آرایه، تمام عناصر در مکانهای حافظه به هم پیوسته ذخیره میشوند. بنابراین، اگر یک آرایه را مقداردهی اولیه کنیم:
2_تصویر مربوطه
پانوشت:
1. به فارسی: آرایه
2. Array 3. Array Data Structure
4. elements 5. block
6. indices 7. organizing
8. manipulating 9. Linear Data Structure
10. sequential 11. Variable
12. item 13. offset
14. C Programming Language
15. Static
16. Compiler
یا کامپایلر نرمافزاری برای تبدیل کُد منبع (Source Code) به کُد شی (Object Code) است. به عبارت دیگر میتوان گفت که کامپایلر کُدهای نوشته شده به زبان سطح بالا (نزدیک به زبان انسان) توسط برنامهنویسان را به زبان دودویی ماشین تبدیل میکند.
17. Array Index 18. Array element
19. Array Length
#data_structures
#algorithm
@code_crafters
710
بخش product development: تمام توسعه محصول در بخش توسعه محصول متمرکز است که دارای سه بخش فرعی است. هر یک از این بخش ها بر روی یک منطقه خاص تمرکز می کنند
بخش analytics: بخش تجزیه و تحلیل نحوه استفاده از خدمات و محصولات را تجزیه و تحلیل می کند.روندها را رصد می کند و به مشتریان کمک می کند تا نحوه استفاده از خدمات و محصولات ارائه شده را بهینه کنند.
بخش sales: نقش بخش فروش یافتن مشتریان جدید و بهبود تعداد نهادهای نیازمند به محضول هستند
بخش product support:بخش پشتیبانی محصول در این زمینه ها پشتیبانی می کند:پشتیبانی مشتری، پشتیبانی فنی و پشتیبانی پیاده سازی
بخش Core Services : یک بخش فرعی توسعه محصول است. این بخش بر توسعه و گسترش خدمات اصلی ارائه شده توسط محصول تمرکز دارد. این خدمات شامل ارائه آمار، بازگرداندن اطلاعات ساکنان، و ارائه اطلاعات در مورد خود نهادهای مصرف کننده محصول است
بخش domain service: توسعه محصولات و خدمات خاص را مدیریت می کند. به عنوان مثال، سیستم کاهش ترافیک، توسعه یافته و توسط این بخش نگهداری می شود
بخش Mobile Services: توسعه همه برنامه های تلفن همراه را انجام می دهد
بخش customer product: پشتیبانی مشتری به سوالات مربوط به استفاده از محصولات و خدمات رسیدگی می کند
بخش technical support: پشتیبانی فنی با مسائل اتصال، ادغام فنی و مسائل مربوط به امنیت سر و کار دارد
بخش implementation support: پشتیبانی پیاده سازی، به مشتریان محصول کمک می کند تا متصل شوند
بخش مدیران و ذینفعان و سهامداران سازمان، در نهایت ذینفعان سازمان سیاستهای سازمانی رو تعریف میکنند اندکی راجب نگرش انها بدانیم
مدیر عامل CEO: "من می خواهم این شرکت رشد کند. ما در حال حاضر عدهای به عنوان مشتری داریم. من می خواهم در دو سال آینده مشتریان افزایش پیدا کند.ما باید هزینه های IT را در یک راستا نگه داریم، زیرا آنها در چند سال گذشته به طور پیوسته در حال افزایش بوده اند
مدیر فروش sales manager: «مشتریان ما گزینه های مختلف استقرار را می خواهند. برخی در حال حاضر ابر خصوصی خود را دارند و نمی خواهند در ابر ما اجرا شوند.علاوه بر این، آنها خواهان دسترسی آسانتر به دادهها هستند تا بتوانند آنها را در برنامههای کاربردی خود بگنجانند»
مدیر توسعه development manager: «ما باید توسعه خدمات را ادغام کنیم. سرویس ها از انواع مختلفی از مدل ها استفاده می کنند. ما همچنین متوجه شدهایم که برخی از سرویسها تقریباً عملکرد مشابهی را ارائه میکنند، و میخواهیم تعدادی از خدمات را برای حذف این تکرار اصلاح کنیم.»
مدیر پشتیبانی محصول product support manager: «ما نسخههای بسیار زیادی در حال تولید داریم که پشتیبانی از آنها سخت است و نظارت خوبی نداریم. ما یک نسخه واحد می خواهیم که همه مشتریان از آن استفاده کنند. ما همچنین سوالات زیادی در مورد نحوه استفاده از خدمات دریافت می کنیم که باید در جایی مستند شود.
تحلیلگر اصلی lead analyst: «ما باید بتوانیم گزارشهای سفارشی ایجاد کنیم تا به مشتریان خود کمک کنیم. میخواهم ببینم فرآیند درخواست مجوز چه زمانی و توسط چه کسی و چه مدت اجرا میشود، از کدام سرویسها استفاده میشود.»
این نقشهای تعریف شده در یک سازمان کوچک است که هر دپارتمان اهداف خاص خود را دنبال میکند
#microservice
#soa
@code_crafters
