<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های yasamin ghaedinia</title>
        <link>https://virgool.io/feed/@yasamin-ghaedinia</link>
        <description>علاقه مند به دنیایی هوشمند تر :)</description>
        <language>fa</language>
        <pubDate>2026-06-16 12:02:08</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/4849065/avatar/iTDEea.jpg?height=120&amp;width=120</url>
            <title>yasamin ghaedinia</title>
            <link>https://virgool.io/@yasamin-ghaedinia</link>
        </image>

                    <item>
                <title>الگوریتم های جستجو یا Search Algorithms</title>
                <link>https://virgool.io/@yasamin-ghaedinia/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D9%87%D8%A7%DB%8C-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-%DB%8C%D8%A7-search-algorithms-sv944lnxdyij</link>
                <description>توی این پست بهتون ی دید کلی از الگوریتم های جستجو همراه با نمونه کد میگم :)خب باید بدونیم که Search Algorithms ستون فقرات بازیابی داده ها و پیمایش در ساختار های داده ای مختلف (مثل آرایه‌ها، درخت‌ها و گراف‌ها) هستن.الگوریتم‌های جستجو ابزارهایی هستن که برای پیدا کردن عنصر مورد نظر ما در یک ساختار داده (مثل آرایه یا لیست) استفاده میشن. انواع مختلفی از این الگوریتم‌ها وجود دارن که هر کدومشون ویژگی‌ها، مزایا و معایب خودشون رو دارن.در ادامه به معرفی چند الگوریتم جستجوی رایج، همراه با توضیح مختصر، ویژگی‌ها و نمونه کد به زبان پایتون و جاوااسکریپت می‌پردازیمبه این پایینیا میپردازیم :)1. جستجوی خطی (Linear Search)2. جستجوی دودویی (Binary Search)3. جستجوی درون‌یابی (Interpolation Search)4. جستجوی پرشی (Jump Search)دوسدارم اضافه کنم که اگر زمان اجرا رو متوجه نمیشید ایرادی نداره، برای کسایی که نمیخوان تخصصی مطالعه کنن واقعا ضروری نیست :)1. جستجوی خطی (Linear Search)➖جستجوی خطی چطور کار میکنه؟جستجوی خطی ساده ترین الگوریتم جستجو هستش. توی این روش، عنصر مورد نظر خودمون رو از اول ساختار داده، خونه به خونه مقایسش میکنیم تا زمانی که اون رو پیدا کنیم یا به انتهای ساختار داده برسیمویژگی‌ها:سادگی: پیاده‌سازی این الگوریتم خیلی راحته.کارایی: برای ساختارهای داده کوچیک یا نامرتب (unsorted) کاملا مناسبه.زمان اجرا: بدترین حالت زمان اجراش O(n) هست، که توی اون n تعداد عناصر هستش.python

def linear_search(data, target):
    for i in range(len(data)):
        if data[i] == target:
            return i  # Index of the target element
    return -1  # Target element not found

# Example usage:
my_list = [5, 2, 8, 12, 3, 9]
target_element = 12
index = linear_search(my_list, target_element)
if index != -1:
    print(f&quot;Element {target_element} found at index {index}&quot;)
else:
    print(f&quot;Element {target_element} not found&quot;)
javascript

function linearSearch(data, target) {
  for (let i = 0; i &lt; data.length; i++) {
    if (data[i] === target) {
      return i; // Index of the target element
    }
  }
  return -1; // Target element not found
}

// Example usage:
const myList = [5, 2, 8, 12, 3, 9];
const targetElement = 12;
const index = linearSearch(myList, targetElement);
if (index !== -1) {
  console.log(`Element ${targetElement} found at index ${index}`);
} else {
  console.log(`Element ${targetElement} not found`);
}
2. جستجوی دودویی (Binary Search)2️⃣2️⃣اول باید به این نکته توجه کنیم که فقط زمانی میتونیم از الگوریتم دودویی استفاده کنیم که ساختار دادمون مرتب یا sorted باشه.جستجوی دودویی چطور کار میکنه؟در هر مرحله میاد لیست مارو به دو قسمت تبدیل میکنه و عدد میانی رو میگیره، اگر با عنصر مورد نظر ما مساوی بود همون رو برمیگردونه. اگر عنصر مورد نظر کوچکتر بود، جستجو را در نیمه اول ادامه می‌دهیم و اگر بزرگتر بود، جستجو را در نیمه دوم ادامه می‌دهیم. این فرآیند تا زمانی که عنصر پیدا بشه یا محدوده جستجو به صفر برسه، تکرار میشه.ویژگی‌ها:کارایی بالا: برای ساختارهای داده مرتب بسیار سریع هستش.زمان اجرا: زمان اجرای آن O(log n) است که بسیار بهتر از جستجوی خطی برای داده‌های بزرگ هست.پیش‌نیاز: ساختار داده باید مرتب باشه.python

def binary_search(data, target):
    low = 0
    high = len(data) - 1
    while low &lt;= high:
        mid = (low + high) // 2
        if data[mid] == target:
            return mid  # Index of the target element
        elif data[mid] &lt; target:
            low = mid + 1
        else:
            high = mid - 1
    return -1  # Target element not found

# Example usage:
sorted_list = [2, 3, 5, 8, 9, 12]
target_element = 8
index = binary_search(sorted_list, target_element)
if index != -1:
    print(f&quot;Element {target_element} found at index {index}&quot;)
else:
    print(f&quot;Element {target_element} not found&quot;)
javascript

function binarySearch(data, target) {
  let low = 0;
  let high = data.length - 1;
  while (low &lt;= high) {
    const mid = Math.floor((low + high) / 2);
    if (data[mid] === target) {
      return mid; // Index of the target element
    } else if (data[mid] &lt; target) {
      low = mid + 1;
    } else {
      high = mid - 1;
    }
  }
  return -1; // Target element not found
}

// Example usage:
const sortedList = [2, 3, 5, 8, 9, 12];
const targetElement = 8;
const index = binarySearch(sortedList, targetElement);
if (index !== -1) {
  console.log(`Element ${targetElement} found at index ${index}`);
} else {
  console.log(`Element ${targetElement} not found`);
}
3. جستجوی درون‌یابی (Interpolation Search)برای استفاده از این الگوریتم باید ساختار داده هامون طور یکنواخت توزیع شده باشن.جستجوی درون‌یابی چطور کار میکنه؟این الگوریتم شبیه به جستجوی دودویی هستش، اما با این تفاوت که به جای انتخاب نقطه میانی، موقعیت عنصر احتمالی را بر اساس توزیع داده‌ها تخمین می‌زند. اگر داده‌ها به طور یکنواخت توزیع شده باشند، این الگوریتم سریع‌تر از جستجوی دودویی عمل می‌کند.توی توزیع یکنواخت، داده‌ها با فواصل قابل پیش‌بینی (مثل ۵ تا ۵ تا، یا ۱۰ تا ۱۰ تا) کنار هم قرار گرفته‌اند.ویژگی‌ها:کارایی: برای داده‌های مرتب و با توزیع یکنواخت، خیلی سریع‌تر از جستجوی دودویی هستش.زمان اجرا: میانگین زمان اجرا O(log log n) هست، اما در بدترین حالت میتونه O(n) باشد.پیش‌نیاز: ساختار داده باید مرتب و با توزیع نسبتاً یکنواخت باشد.python

def interpolation_search(data, target):
    low = 0
    high = len(data) - 1
    while low &lt;= high and target &gt;= data[low] and target &lt;= data[high]:
        if low == high:
            if data[low] == target:
                return low
            return -1

        # Estimate position
        pos = low + int(((float(high - low) / (data[high] - data[low])) * (target - data[low])))

        if data[pos] == target:
            return pos
        elif data[pos] &lt; target:
            low = pos + 1
        else:
            high = pos - 1
    return -1

# Example usage:
sorted_uniform_list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
target_element = 70
index = interpolation_search(sorted_uniform_list, target_element)
if index != -1:
    print(f&quot;Element {target_element} found at index {index}&quot;)
else:
    print(f&quot;Element {target_element} not found&quot;)
javascript

function interpolationSearch(data, target) {
  let low = 0;
  let high = data.length - 1;
  while (low &lt;= high &amp;&amp; target &gt;= data[low] &amp;&amp; target &lt;= data[high]) {
    if (low === high) {
      if (data[low] === target) return low;
      return -1;
    }

    // Estimate position
    const pos = low + Math.floor(((high - low) / (data[high] - data[low])) * (target - data[low]));

    if (data[pos] === target) {
      return pos;
    } else if (data[pos] &lt; target) {
      low = pos + 1;
    } else {
      high = pos - 1;
    }
  }
  return -1; // Target element not found
}

// Example usage:
const sortedUniformList = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
const targetElement = 70;
const index = interpolationSearch(sortedUniformList, targetElement);
if (index !== -1) {
  console.log(`Element ${targetElement} found at index ${index}`);
} else {
  console.log(`Element ${targetElement} not found`);
}
4. جستجوی پرشی (Jump Search)مفهوم: این الگوریتم برای لیست‌های مرتب استفاده می‌شود. ایده اصلی این است که به جای بررسی هر عنصر، عناصر را با گام‌های مشخصی (مثلاً هر √n عنصر) بررسی کنیم. اگر عنصری که به دنبال آن هستیم از گام فعلی بزرگتر بود، به گام بعدی می‌پرویم. اگر از گام فعلی کوچکتر بود، آنگاه در بازه بین گام قبلی و فعلی، جستجوی خطی انجام می‌دهیم.اگه بخوام ی سناریو ساده بگم برای درکش فرض کن دنبال شماره پلاک ۷۵ در یک خیابان هستی که پلاک خانه‌های اون از ۱ تا ۱۰۰ به ترتیب شماره گذاری شدن، اما تو نمی‌خوای جلوی تک‌تک خونه ها توقف کنی (چون خیلی زمان‌بره)روش کار:پرش‌های بزرگ: تصمیم می‌گیری هر ۱۰ خونه یک‌بار توقف کنی و شماره پلاک رو نگاه کنی. (یعنی پلاک ۱۰، ۲۰، ۳۰، …).پیدا کردن محدوده: همین‌طور که داری می‌پری، به پلاک ۷۰ می‌رسی و خانه بعدی پلاک ۸۰ است.توقف: چون ۷۵ بین ۷۰ و ۸۰ است، می‌فهمی که خونه مورد نظرت توی همین بلوک ۱۰ خونه‌ای (بین ۷۰ تا ۸۰) مخفی شده.جستجوی نهایی: حالا فقط همین ۱۰ خونه رو با دقت و به صورت تک‌تک (خطی) چک می‌کنی تا پلاک ۷۵ رو پیدا کنی.ویژگی‌ها:کارایی: سریع‌تر از جستجوی خطی و کندتر از جستجوی دودویی در حالت کلی هستش.زمان اجرا: زمان اجراش O(√n) است.پیش‌نیاز: ساختار داده باید مرتب باشه.مفید: برای زمانی که جستجوی دودویی به دلیل عدم دسترسی تصادفی سریع به عناصر (مثل لینک لیست‌ها) کارآمد نیست، میتونه مفید باشد.python

import math

def jump_search(data, target):
    n = len(data)
    step = int(math.sqrt(n))
    prev = 0

    # Finding the block where element is present
    while data[min(step, n) - 1] &lt; target:
        prev = step
        step += int(math.sqrt(n))
        if prev &gt;= n:
            return -1

    # Doing a linear search for target in block beginning with prev.
    while data[prev] &lt; target:
        prev += 1
        # If we reached next block or end of array, element is not present.
        if prev == min(step, n):
            return -1

    # If element is found
    if data[prev] == target:
        return prev
    return -1

# Example usage:
sorted_list_jump = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
target_element = 55
index = jump_search(sorted_list_jump, target_element)
if index != -1:
    print(f&quot;Element {target_element} found at index {index}&quot;)
else:
    print(f&quot;Element {target_element} not found&quot;)
javascript

function jumpSearch(data, target) {
  const n = data.length;
  let step = Math.floor(Math.sqrt(n));
  let prev = 0;

  // Finding the block where element is present
  while (data[Math.min(step, n) - 1] &lt; target) {
    prev = step;
    step += Math.floor(Math.sqrt(n));
    if (prev &gt;= n) {
      return -1;
    }
  }

  // Doing a linear search for target in block beginning with prev.
  while (data[prev] &lt; target) {
    prev += 1;
    // If we reached next block or end of array, element is not present.
    if (prev === Math.min(step, n)) {
      return -1;
    }
  }

  // If element is found
  if (data[prev] === target) {
    return prev;
  }
  return -1; // Target element not found
}

// Example usage:
const sortedListJump = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610];
const targetElement = 55;
const index = jumpSearch(sortedListJump, targetElement);
if (index !== -1) {
  console.log(`Element ${targetElement} found at index ${index}`);
} else {
  console.log(`Element ${targetElement} not found`);
}
میدونم یکم وقفه افتاد اما تلاشم رو میکنم هرزمان تایمم آزاده براتون سری مقاله های الگوریتم هارو تکمیل کنم :)اگه دوسدارین مثل گذینه ی اخر برای یادگیری بهترتون سناریو بنویسم برای درک بهتر برام کامنت بزارید و بگید، چون نمیدونم برای هر الگوریتم چقدر حوصله دارین بخونید، من تا حد امکان کوتاه مینویسم و ساده( البته فعلا☺️🙂 )خوشحال میشم فیدبک هاتون رو برام بنویسید💕</description>
                <category>yasamin ghaedinia</category>
                <author>yasamin ghaedinia</author>
                <pubDate>Wed, 27 May 2026 19:32:01 +0330</pubDate>
            </item>
                    <item>
                <title>رابطه ی برنامه نویسی و ریاضی</title>
                <link>https://virgool.io/@yasamin-ghaedinia/%D8%B1%D8%A7%D8%A8%D8%B7%D9%87-%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%88-%D8%B1%DB%8C%D8%A7%D8%B6%DB%8C%F0%9F%A4%BC-lrcq8xdoraco-lrcq8xdoraco-lrcq8xdoraco-lrcq8xdoraco</link>
                <description>خیلی می‌شنویم که میگن یادگیری برنامه‌نویسی نیاز به دانش ریاضی نداره… :/?کاملاً، کاملاً، کاملاً می‌تونم براتون تکذیبش کنم 🙂برنامه‌نویسی پایه و اساسش کدهای منطقیه؛محاسبات دقیق برای نوشتن کدهای بهینه و حتی ساختن فرمول‌هایی در همین راستا.به نظر من برنامه‌نویسی و ریاضی دو تا پارتنر عاشقن که هیچ‌جوره نمی‌شه از هم جداشون کرد 🤝💕برنامه‌نویسی کلاً توی «حل مسئله» خلاصه میشه.شما قبل از اینکه حتی یه خط کد بزنی، داری مسئله رو تحلیل می‌کنی، خردش می‌کنی، براش راه‌حل می‌سازی…و این روند تا زمانی ادامه داره که مسئله‌ت کامل حل بشه 🙂حالا می‌خوام به رسم مثال (نه شکل 😄) توضیح بدم ریاضیات چقدر نقش پررنگی توی دنیای برنامه‌نویسی داره:وقتی توی پایتون یا جاوااسکریپت یه حلقه for می‌نویسیم تا چیزی رو جمع‌بندی یا فیلتر کنیم، عملاً داریم با مفهوم دنباله و تکرار ریاضی کار می‌کنیم.نوشتن الگوریتم‌های مرتب‌سازی یعنی کار با مقایسه‌ها، روابط ترتیبی و تحلیل پیچیدگی زمانی؛که همش منطق و ریاضی خالصانه و مخلصانه‌ست 🙂طراحی ساختار داده‌هایی مثل آرایه، درخت یا گراف، مستقیم به نظریه‌ی مجموعه‌ها و گراف‌ها وصله.توی یادگیری ماشین و هوش مصنوعی، پای جبر خطی، ماتریس‌ها و حسابان وسطه.توی رمزنگاری، الگوریتم‌های امنیتی بر پایه‌ی اعداد اول و نظریه‌ی اعداد ساخته می‌شن.یعنی هر جا پای تحلیل، منطق یا بهینه‌سازی وسط باشه، پای ریاضی هم درمیون هستش🙂الان شاید با خوندن اینا بترسین و بگین پس باید دکترای ریاضی بگیرم؟نه 🙂ناگفته نماند که یکسری فرمول های پر استفاده رو باید بلد باشیم اما در کل استفاده از ریاضیات در برنامه نویسی بیشتر به قسمت منطق ریاضی برمیگرده.یعنی چی؟ :)یعنی اینکه ریاضی توی برنامه‌نویسی بیشتر از جنس منطق، الگویابی، و بهینه‌سازیه تا فرمول و عدد.به شخصه اینو قبول دارم که اگر شخصی ریاضی خونده باشه برنامه نویسی خیلی براش ساده تر پیش میره و شخصی که اصلا ریاضیات بلد نباشه و تجربه ی قابل قبولی توی حل مسئله نداشته باشه قراره خیلی توی مسیر یادگیریش بالا پایین رو تجربه بکنه.قسمت امیدوار کننده ی ماجرا رو هم داریم :)این مهارت چیزی نیست که نشه تقویتش کرد، با تمرین و تکرار و حل مسائل مختلف و خوندن درمورد الگوریتم ها میتونید (نمیگم به سادگی) طرز کارش و منطقش رو بفهمید.نیاز به تلاش هم داره اما این از اون چیزاییه که هرچی بیشتر بخونید براتون راحت تر میشه، چون ذهنتون تحلیلی میشه و عادت میکنه به این سبک فکر کردن.در اخر هم هرکی گفت برنامه‌نویسی ربطی به ریاضی نداره، بهش یه الگوریتم بازگشتی بدین تا بفهمه چی گفتم 🙂🤝به هرحال این پست برای شفاف سازی بود نه ناامید کردنتوندوسداشتم پستم بیشتر خودمونی باشه تا حرفه ای وگرنه خیلی مثال ها و حرف های بیشتری داشتم درمورد این مسئله تا برای کسایی که اول راه هستن قشنگ و درست جا بیفته، اما راستش بیشتر طرفدار ساده و کوتاه توضیح دادنم چون خودم از کسایی که زیاد کش میدن توضیح ی چیزی رو خوشم نمیاد :)منتظر نظراتتون هستم :)حالا شما بگید:پست‌های تخصصی و طولانی رو بیشتر دوست دارین یا همین مدل خودمونی و کوتاه؟ 🙂💌بنظرتون چون از ایموجی استفاده میکنم شبیه chatgpt شدم؟ایموجی رو توی نوشتن پست دوسدارم، حسو حالم رو میتونم به خواننده هام بفهمونم، ی جوری باهاش کنار بیاین :)💕</description>
                <category>yasamin ghaedinia</category>
                <author>yasamin ghaedinia</author>
                <pubDate>Wed, 29 Apr 2026 17:41:35 +0330</pubDate>
            </item>
                    <item>
                <title>کلمات کلیدی برای frontEnd developer ها :)</title>
                <link>https://virgool.io/@yasamin-ghaedinia/%DA%A9%D9%84%D9%85%D8%A7%D8%AA-%DA%A9%D9%84%DB%8C%D8%AF%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-frontend-developer-%D9%87%D8%A7-cdc66sdons1x</link>
                <description>زمان یادگیری یا قرار گرفتن توی جامعه ی دولوپر ها و زمان مصاحبه ممکنه یک سری کلمات به گوشتون بخوره که جدید باشن و حتی مفهومشون خیلی عمیق تر از معنی خود اون کلمه باشه.اینجا سعی کردم براتون کلمات کلیدی مربوط به حوزه ی فرانت اند رو بیارم که توی مصاحبه هم خیلی به کارتون میاد و مباحث مهمی هستن.میتونید درموردشون سرچ کنید و یاد بگیرید.من تلاش کردم تا توی دسته بندی های جدا گانه قرارشون بدم تا براتون راحت تر باشه :)🧠 مفاهیم پایه جاوااسکریپت (Core JS Concepts)ClosureHoistingExecution ContextCall StackHeap MemoryLexical ScopeTemporal Dead Zonethis KeywordGlobal Objectbind(), call(), apply()strict modeIIFE (Immediately Invoked Function Expression)Prototypal Inheritance⚙️ کنترل حافظه و عملکرد (Memory &amp; Performance)Garbage CollectionWeakMapWeakSetWeakRefFinalizationRegistrySharedArrayBufferAtomics (تمام متدهای مربوطه)TypedArrays, DataView, ArrayBufferBinary Data🧮 مفاهیم تابعی و فانکشنال (Functional Programming Patterns)CurryingHigher-Order FunctionsMemoizationTail Call OptimizationDebouncingThrottlingFunctional ProgrammingCallback HellPromisify⌛ مدیریت زمان و ناهم‌زمانی (Async / Event Loop)Asynchronous ProgrammingPromisesAsync/AwaitPromises/A+Event LoopEvent Loop PhasesMicrotasks / Macrotasks / Microtask Queue / Macrotask QueueNon-blocking I/OSingle-threadedAsync IteratorsAsync GeneratorsGenerator Delegation / ReturnGenerator Functions / Iterators🧩 ماژول‌ها و سیستم‌های بارگذاری (Modules &amp; Compilation)ES ModulesCommonJSAMDUMDDynamic Import()Export MapsModule NamespaceImport.metaModule ResolutionModule GraphsImport Maps / Import AssertionsTranspiling / TranspilationPolyfill / Polyfilling / ShimmingPolyfills for Built-ins / Async-Await PolyfillJIT Compilation💎 ویژگی‌های ECMAScript جدید (ESNext Features)Spread Operator / Rest ParametersDestructuring AssignmentTemplate Literals / Tagged TemplatesProxy / Reflect / Reflect APIDecorators (و Experimental Decorators)Weak ReferencesNullish CoalescingOptional ChainingLogical Assignment OperatorsPipeline Operator (پیشنهاد TC39)Top-Level AwaitNumeric SeparatorsBigIntAggregateErrorString.replaceAll()Array.prototype.at()Relative Indexing MethodFinalizationRegistryTemporal ProposalECMAScript (و TC39 Proposals)🧠 Symbols و اهداف تعریف‌شده (ES6 Symbols &amp; Meta)SymbolSymbol.iteratorSymbol.asyncIteratorSymbol.hasInstanceSymbol.isConcatSpreadableSymbol.match / matchAll / replace / search / splitSymbol.speciesSymbol.toPrimitive / toStringTag / unscopables🧱 ساختار داده‌ها (Data Structures)Set / Map / WeakMap / WeakSetTyped Arrays / SharedArrayBuffer / AtomicsDataView / ArrayBufferBinary Data🧬 TypeScript و تایپینگ (TypeScript Type System)Structural Typing / Duck TypingType Guards / Type Inference / Type AssertionUnion / Intersection / Conditional / Mapped / Lookup / Recursive / Discriminated UnionType Aliases / Utility Types / Template Literal Types / Indexed Access / Keyof / Infer / Never / UnknownFunction Overloading / Type Compatibility / Contextual TypingModule Augmentation / Declaration Files / Ambient Declarations / Global Scope AugmentationJSX Integration / Decorators / Partial / Readonly / Pick / Omit / Record / NonNullable / Exclude / Extract / Awaited🌐 Web APIs پایه (Browser &amp; Web APIs)Fetch API / XMLHttpRequestCache API / Blob / File API / URL API / FormDataIndexedDB / LocalStorage / SessionStorage / CookieRequestAnimationFrame / CancelAnimationFrameWebSockets / EventSourceService WorkersWeb Components / Shadow DOM / Custom ElementsDOMParser / XMLSerializer / DocumentFragment / Range / Selection / TreeWalker / NodeFilterNodeList / HTMLCollectionEvent Delegation / Propagation / Bubbling / Capturing / Pointer Events / Touch Events / Drag and Drop / Clipboard API / Focus Management🪄 Media &amp; Graphics APIsWeb Audio API / Canvas API / WebGLMediaStream / MediaRecorder / MediaStreamTrack / MediaSource / MediaSource ExtensionsVideo Processing / OffscreenCanvas / ImageBitmapRenderingContextDOMMatrix / DOMPoint / DOMRectCSS Typed OM / CSS Houdini / Worklets (Animation, Paint, Layout, AudioWorklet)🌍 APIs سیستمی و دستگاهی (Device &amp; System APIs)Geolocation APIBattery Status APINetwork Information APIDevice Memory APIWeb Share APIScreen Wake Lock APICredential Management APIPayment Request / Handler / Web PaymentsWeb NFC / Web Bluetooth / Web USB / Web Serial🧱 WebAssembly (WASM)WebAssembly Threads / SIMD / GC / ES Modules / Reference Types / Tail CallsException Handling / Bulk Memory / Multi-value / Memory64 / Mutable GlobalsNon-trapping Float-to-Int / Sign-extension Ops📊 Performance &amp; Metrics APIsPerformanceObserverLong Tasks API / User Timing API / Navigation Timing / Resource Timing / PerformanceResourceTimingPaint Timing / Element Timing / First Input Delay (FID) / Largest Contentful Paint (LCP) / Cumulative Layout Shift (CLS)Performance.now() / mark() / measure()High Resolution Time / User Timing Level 3 / Server-TimingReporting API / ReportingObserverVisibilityState / document.visibilityState / Page Lifecycle APIFeature Policy🌐 Node.js &amp; سرورNode.js ESMStreams Promises APIFetch in Node.jsQUIC ProtocolAbortController / AbortSignalStructured Clone Algorithm / Transferable Streams🔬 ECMAScript Internal Records &amp; Realm ConceptsRealm API / Realm CompartmentsECMAScript Module Records / Function Records / Global Recordsویرگول رو دوسدارم اما پست کردن مطالب رو خیلی برام سخت میکنه و خیلی گیر میدهمثلا چون نوشته بودم دوسدارم نظراتتون رو بدونم ، دو روز گذاشتن این پست طول کشید از بس که تغییرش دادم تا بفهمم چرا پستم تبلیغاتی شناخته شده :)اگر جاییش اشتباه هست بهم بگید تا حتما درستش کنم، و البته اگر کلمه یا مفهوم مهمی جا مونده بگید تا اضافش کنم :)</description>
                <category>yasamin ghaedinia</category>
                <author>yasamin ghaedinia</author>
                <pubDate>Mon, 27 Apr 2026 21:20:25 +0330</pubDate>
            </item>
                    <item>
                <title>کلمات کلیدی برای BackEnd developer ها :)</title>
                <link>https://virgool.io/@yasamin-ghaedinia/%DA%A9%D9%84%D9%85%D8%A7%D8%AA-%DA%A9%D9%84%DB%8C%D8%AF%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-backend-developer-%D9%87%D8%A7-j3mubvk8h0qr</link>
                <description>زمان یادگیری یا قرار گرفتن توی جامعه ی دولوپر ها و زمان مصاحبه ممکنه یک سری کلمات به گوشتون بخوره که جدید باشن و حتی مفهومشون خیلی عمیق تر از معنی خود اون کلمه باشه.اینجا سعی کردم براتون کلمات کلیدی مربوط به حوزه ی بک اند رو بیارم که توی مصاحبه هم خیلی به کارتون میاد و مباحث مهمی هستن.میتونید درموردشون سرچ کنید و یاد بگیرید.من تلاش کردم تا توی دسته بندی های جدا گانه قرارشون بدم تا براتون راحت تر باشه :)۱. زبان‌ها و فریم‌ورک‌های اصلی (Languages &amp; Frameworks)زبان‌ها: Pythonفریم‌ورک‌ها: Django, FastAPI, Flask, PyramidORMها: Django ORM, SQLAlchemy۲. پایگاه داده‌ها و مدیریت داده (Databases &amp; Data Management)SQL: PostgreSQL, MySQL, SQLiteNoSQL: MongoDB, Graph Databasesمفاهیم: ORM, Database Migration, Data Migration, ORM Queries, Data Validation, Data SerializationACID Transactions, Indexing Strategies, Database NormalizationRedis (به عنوان دیتابیس)Elasticsearch (برای جستجوی متن)۳. معماری و طراحی سیستم (System Architecture)الگوها: Microservices, REST API, RESTful Services, GraphQL, API-first Developmentارتباطات: Middleware, URL Routing, WebSockets, HTTP/HTTPSEvent-Driven Architecture, Message Queues (RabbitMQ), Serverless Functions,Design Patterns (Repository, Factory, etc.)Domain-Driven Design (DDD)۴. احراز هویت و امنیت (Authentication &amp; Security)امنیت: Authentication, Authorization, JWT, OAuth, SSL Certificates, CORS, API Rate LimitingOWASP Top 10, CSRF Protection, Password Hashing (Bcrypt/Argon2), Role-Based Access Control (RBAC)۵. مدیریت سرور و استقرار (Deployment &amp; Infrastructure)وب‌سرورها و اینترفیس‌ها: Nginx, Gunicorn, WSGI, ASGIکانتینر و کلاود: Docker, AWS, Google Cloud Platform, Azure, Heroku, Beanstalkمفاهیم: Deployment, Load Balancing, Environments (Dev, Test, Production)Kubernetes (K8s)Infrastructure as Code (Terraform)CI/CD PipelinesReverse Proxying۶. مدیریت وظایف و صف‌ها (Task Queues &amp; Caching)ابزارها: Celery, Redisمفاهیم: CachingTask Scheduling, Distributed LockingCaching Strategies (Write-through, Cache-aside)۷. تست، کیفیت و مانیتورینگ (Testing &amp; Monitoring)تست: Unit Testing, TDDمانیتورینگ: Logging, Monitoring, Sentry, Prometheus, GrafanaIntegration Testing, Load Testing (Locust/JMeter), Distributed Tracing۸. ابزارها و فرآیندها (Tooling &amp; Best Practices)مدیریت وابستگی: Pipenv, Virtualenv, Poetryتوسعه: Version Control (Git), CLI, Agile Development, Scrum, Kanbanمستندات: API Documentation, Swagger, PostmanLinters &amp; Formatters (Black, Flake8), Pre-commit Hooks, Logging Best Practices (Structured Logging)این موارد برای حرفه ای تر شدنتون کاربردیه اما اضافی هستش و سرچ کردن درموردشون برای مبتدی ها الزامی نیست :) :Distributed Systems (سیستم‌های توزیع شده):فهمیدن مباحثی مثل CAP Theorem (ثبات، در دسترس بودن و تحمل خطای شبکه) برای مقیاس‌پذیری سیستم‌ها حیاتی هستش.Concurrency &amp; Parallelism:در پایتون، مفاهیم AsyncIO و Threading / Multiprocessing برای بهینه‌سازی کدهای بک‌اند خیلی مهم هستن.API Versioning:گرچه بهش بالاتر اشاره کردم، اما یادگیری متدهای مختلفِ ورژن‌دهی (URL-based, Header-based) و استراتژی‌های Deprecation خیلی به کیفیت API شما کمک می‌کنه.Security Best Practices:جدا از مواردی که بالاتر گفتم، مطالعه API Security (مثل جلوگیری از SQL Injection و نوشتن کدهای امن) یکی از ستون‌های اصلی بک‌اند هستش و از نظر من یادگیری این یکی الزامیه :)شاید در اینده درمورد نوشتن کد های امن یک پست بنویسم، اگه دوسدارین بگید که در الویت قرارش بدم :)💕</description>
                <category>yasamin ghaedinia</category>
                <author>yasamin ghaedinia</author>
                <pubDate>Mon, 27 Apr 2026 20:40:18 +0330</pubDate>
            </item>
                    <item>
                <title>الگوریتم‌های مرتب‌سازی یا Sorting Algorithm</title>
                <link>https://virgool.io/@yasamin-ghaedinia/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D9%87%D8%A7%DB%8C-%D9%85%D8%B1%D8%AA%D8%A8-%D8%B3%D8%A7%D8%B2%DB%8C-%DB%8C%D8%A7-sorting-algorithm-lexvchnpybny</link>
                <description>الگوریتم‌ها ستون فقرات دنیای برنامه‌نویسی هستن و درک اون‌ها به شما کمک می‌کنه که برنامه‌های کارآمدتر و بهینه‌تری بنویسید. اینکه کدوم الگوریتم‌ها “پُراستفاده‌تر” هستند، بستگی به زمینه‌ی کاری شما داره (مثلاً وب، داده‌کاوی، هوش مصنوعی، بازی‌سازی و …) اما می‌تونیم به دسته‌های کلی و پرکاربرد اشاره کنیم که توی این بخش قراره درمورد الگوریتم‌های مرتب‌سازی بخونیم :برای هر الگوریتم با دو زبان javascript و python کدش رو میبینیم :)این الگوریتم‌ها برای مرتب کردن مجموعه‌ای از داده‌ها بر اساس یک معیار مشخص استفاده می‌شن.در این بخش الگوریتم های زیر رو یادمیگیریم:1) Bubble Sort2) Insertion Sort3) Merge Sort4) Quick Sort5) Counting Sort6) Bucket Sortمرتب‌سازی حبابی (Bubble Sort):Bubble Sort یکی از ساده‌ترین الگوریتم‌های مرتب‌سازی هستش. در هر مرحله، عناصری که کنار هم هستن مقایسه می‌کنه و اگر اشتباه بودن جابه‌جا می‌کنه.این کارو تا زمانی تکرار می‌کنه که لیست کاملاً مرتب بشه.پیچیدگی زمانی: O(n²) → یعنی برای داده های زیاد مناسب نیست و کند عمل میکنهبیشتر برای اموزش دادن و لیست های کوچیک استفاده میشهpython


def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] &gt; arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

print(bubble_sort([5, 3, 8, 4, 2]))javascript


function bubbleSort(arr) {
    for (let i = 0; i &lt; arr.length; i++) {
        for (let j = 0; j &lt; arr.length - i - 1; j++) {
            if (arr[j] &gt; arr[j + 1]) {
                [arr[j], arr[j+1]] = [arr[j+1], arr[j]];
            }
        }
    }
    return arr;
}

console.log(bubbleSort([5, 3, 8, 4, 2]));مرتب‌سازی درجی (Insertion Sort):Insertion Sort یک الگوریتم مرتب‌سازی ساده است که روش عملکرد آن مشابه روشی است که افراد کارت‌های بازی را در دست خود مرتب می‌کنند.یک بخش مرتب داریم و عنصر جدید را به مکان درست در آن وارد می‌کنیم.• پیچیدگی: O(n²) این هم مثل Bubble Sort کند هستش و برای لیست های کوچک مناسب تر هستشبرای لیست هایی که تقریبا مرتب هستن خیلی خوب کار میکنهInsertion Sort به این شکل کار میکنهpython


def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1

        while j &gt;= 0 and key &lt; arr[j]:
            arr[j + 1] = arr[j]
            j -= 1

        arr[j + 1] = key

    return arr

print(insertion_sort([9, 5, 1, 3, 7]))javascript


function insertionSort(arr) {
    for (let i = 1; i &lt; arr.length; i++) {
        let key = arr[i];
        let j = i - 1;
        while (j &gt;= 0 &amp;&amp; arr[j] &gt; key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
    return arr;
}

console.log(insertionSort([9, 5, 1, 3, 7]));مرتب‌سازی ادغامی (Merge Sort):کارآمد، پایدار و مناسب برای مجموعه داده‌های بزرگ.الگوریتم Merge Sort از روش تقسیم و حل (Divide and Conquer) استفاده می‌کند:یعنی چی؟لیست را نصف می‌کنددو نیمه را مرتب می‌کنددو نیمه مرتب شده را ادغام می‌کندپیچیدگی : O(n log n) → بسیار سریع هست و برای لیست های بزرگ مناسب هستشMerge Sort پایدار هستش و مناسب برای داده‌های زیاد اما نیاز به حافظه اضافی دارد :)python
def merge_sort(arr):
    if len(arr) &lt;= 1:
        return arr
    
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    
    result = []
    i = j = 0
    
    while i &lt; len(left) and j &lt; len(right):
        if left[i] &lt; right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1

    result.extend(left[i:])
    result.extend(right[j:])
    return result

print(merge_sort([8, 3, 5, 9, 1]))javascript
function mergeSort(arr) {
    if (arr.length &lt;= 1) return arr;

    const mid = Math.floor(arr.length / 2);
    const left = mergeSort(arr.slice(0, mid));
    const right = mergeSort(arr.slice(mid));

    let result = [];
    let i = 0, j = 0;

    while (i &lt; left.length &amp;&amp; j &lt; right.length) {
        if (left[i] &lt; right[j]) result.push(left[i++]);
        else result.push(right[j++]);
    }

    return result.concat(left.slice(i)).concat(right.slice(j));
}

console.log(mergeSort([8, 3, 5, 9, 1]));مرتب‌سازی سریع (Quick Sort):🏃🏻‍♀️اکثر توضیحاتی که درمورد Quick Sort میخونم میبینم که خیلی پیچیدش کردن درحالی که خیلی سادست :)Quick Sort از همون روش تقسیم و حل (Divide and Conquer) استفاده می‌کنه دقیقا مثل Merge Sort؛ یعنی مسئله‌ی بزرگ را به چند مسئله‌ی کوچک‌تر تقسیم می‌کند و هر قسمت را جداگانه مرتب میکند تا در نهایت کل مجموعه به‌صورت منظم در بیاید.فرایند کار Quick Sort به زبان ساده اینطوری میشه :یک محور انتخاب میکنیم (Pivot):از بین داده‌ها یکی را به عنوان «محور» انتخاب می‌کنیم. این عدد معیار ما برای مقایسه بقیه‌ی عناصر است که به طور پیش فرض عنصر اول ارایه هستش.در اصل یکی از اعداد ارایه رو انتخاب میکنیم که بقیه ی اعداد لیست رو باهاش مقایسه کنیم که بهش میگیم Pivot :)تقسیم داده‌ها:تمام عناصر لیست را با محور مقایسه می‌کنیم.آن‌هایی که کوچکتر از محور هستند در سمت چپ قرار می‌گیرند،و آن‌هایی که بزرگتر از محور هستند در سمت راست.اجرای بازگشتی (Recursive):سپس همین کار را برای دو بخشِ چپ و راست تکرار می‌کنیم تا هر بخش خودش کاملاً مرتب شود.در پایان، وقتی هیچ بخش دیگه ای برای تقسیم باقی نموند، همه‌ی داده‌هارو به‌ صورت منظم از کوچک به بزرگ (یا برعکس، بسته به نوع مرتب‌سازی) پشت سر هم قرار می‌گیرند.سرعت بالا در عمل (میانگین زمان اجرا: O(n log n))Quick Sort در حالت معمول پیچیدگی زمانی ثابتی نداره و بدترین حالتش ( O(n²) ) وقتی اتفاق میفته که لیست از قبل مرتب باشه :/ !استفاده‌ی هوشمند از حافظهمناسب برای داده‌های بزرگروش بازگشتی و مبتنی بر منطق تقسیم و غلبهاگه دیدین جایی نوشته سریع ترین الگوریتم در عمل منظورشون اینه در دنیای واقعی و هنگام اجرا، خیلی کم پیش میاد الگوریتم سریع‌تری از این پیدا بشه :)python


def quick_sort(arr):
    if len(arr) &lt;= 1:
        return arr
    
    pivot = arr[len(arr)//2]
    left = [x for x in arr if x &lt; pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x &gt; pivot]
    
    return quick_sort(left) + middle + quick_sort(right)

print(quick_sort([6, 3, 8, 1, 7, 2]))javascript


function quickSort(arr) {
    if (arr.length &lt;= 1) return arr;

    const pivot = arr[Math.floor(arr.length / 2)];
    const left = arr.filter(x =&gt; x &lt; pivot);
    const middle = arr.filter(x =&gt; x === pivot);
    const right = arr.filter(x =&gt; x &gt; pivot);

    return [...quickSort(left), ...middle, ...quickSort(right)];
}

console.log(quickSort([6, 3, 8, 1, 7, 2]));مرتب‌سازی شمارشی (Counting Sort): 🔢Counting Sort یک الگوریتم مرتب‌سازی غیر مقایسه‌ای هستش. این یعنی برخلاف الگوریتم‌هایی مثل Quick Sort یا Bubble Sort که عناصر را با هم مقایسه می‌کنند، Counting Sort از روش دیگه ای استفاده می‌کند، شمارش تعداد تکرار هر عنصر.الگوریتم Counting Sort زمانی مناسب هستش که دسته بندی های مشخصی وجود داشته باشهمثلا 3 رنگ سیب ، 7 مدل مبل ، 4 مدل تختفرض کن می‌خوایم تعدادی سیب که روی زمین ریخته‌اند را بر اساس رنگ اون ها (مثلاً قرمز، زرد، سبز) مرتب کنیم.۱. یک سبد برای سیب‌های قرمز، یک سبد برای زرد و یک سبد برای سبز برمیداریم.۲. هر سیبی را که برمی‌داریم، در سبد رنگ خودش می‌اندازیم.۳. در آخر، ابتدا همه‌ی سیب‌های سبد اول (مثلاً قرمز)، بعد همه‌ی سیب‌های سبد دوم (مثلاً زرد) و سپس سبد سوم (مثلاً سبز) را برمی‌داریم. به همین سادگی مرتب شدند!فرایند کار Counting Sort به زبان ساده اینطوری میشه :پیدا کردن بزرگترین عدد:ابتدا بزرگترین عدد در مجموعه‌ی ورودی را پیدا می‌کنیم. این کار به ما کمک می‌کند تا اندازه‌ی آرایه کمکی مورد نیاز را تعیین کنیم.ایجاد آرایه شمارنده:یک آرایه جدید (آرایه شمارنده) به اندازه‌ی «بزرگترین عدد + ۱» می‌سازیم و همه‌ی خانه‌های آن را با صفر پر می‌کنیم. این آرایه قرار است تعداد تکرار هر عدد را نگه دارد.شمارش تکرارها:در این مرحله، به هر عدد در مجموعه‌ی ورودی نگاه می‌کنیم و در آرایه شمارنده، خانه‌ی مربوط به آن عدد را یکی زیاد می‌کنیم. برای مثال، اگر عدد 5 سه بار تکرار شده باشد، خانه‌ی شماره 5 در آرایه شمارنده مقدار 3 را خواهد داشت.توزیع عناصر مرتب شده:حالا آرایه شمارنده را پیمایش می‌کنیم. به ازای هر عدد در آرایه شمارنده، آن عدد را به تعداد دفعات مشخص شده در آن خانه، در مجموعه‌ی خروجی قرار می‌دهیم. برای مثال، اگر خانه‌ی شماره 5 مقدار 3 را دارد، عدد 5 را سه بار در خروجی می‌نویسیم.در پایان، مجموعه‌ی خروجی شامل تمام اعداد ورودی خواهد بود که به ترتیب مرتب شده‌اند.Counting Sort بسیار سریع وقتی محدوده‌ی اعداد کوچک است (زمان اجرا: O(n + k) که n تعداد عناصر و k محدوده‌ی اعداد است).غیر مقایسه‌ای است.برای مرتب‌سازی رشته‌ها (با حروف الفبا) یا داده‌هایی با محدوده‌ی مشخص نیز قابل استفاده است.برای محدوده‌های بزرگ اعداد، کارایی خود را از دست می‌دهد و فضای حافظه‌ی زیادی نیاز دارد.python


def counting_sort(arr):
    max_val = max(arr)
    count = [0] * (max_val + 1)

    for num in arr:
        count[num] += 1

    result = []
    for num, c in enumerate(count):
        result.extend([num] * c)

    return result

print(counting_sort([4, 2, 2, 8, 3, 3, 1]))javascript


function countingSort(arr) {
    const max = Math.max(...arr);
    const count = Array(max + 1).fill(0);

    for (let num of arr) count[num]++;

    const result = [];
    for (let i = 0; i &lt; count.length; i++) {
        while (count[i]--) result.push(i);
    }

    return result;
}

console.log(countingSort([4, 2, 2, 8, 3, 3, 1]));مرتب‌سازی سطلی (Bucket Sort)🪣🚮تصور کن کلی توپ داری که اعداد مختلفی روشون نوشته شده و می‌خوای اون‌ها رو مرتب کنی. مرتب‌سازی سطلی شبیه اینه که:چند تا سطل (Bucket) آماده می‌کنی. تعداد سطل‌ها معمولاً به تعداد داده‌ها یا کمی بیشتر از اونه.هر توپ رو برمی‌داری و بر اساس عددی که روش نوشته شده، می‌ندازی توی سطل مناسب. مثلاً اگه سطل‌ها برای بازه‌های ۰-۹، ۱۰-۱۹، ۲۰-۲۹ و… باشن، توپ با عدد ۲۳ رو می‌ندازی توی سطل ۲۰-۲۹.داخل هر سطل، توپ‌ها رو با یه الگوریتم مرتب‌سازی دیگه مرتب می‌کنی. معمولاً از مرتب‌سازی درجی (Insertion Sort) استفاده میشه چون اگه تعداد توپ‌ها توی هر سطل کم باشه، سریع‌تر عمل می‌کنه.در نهایت، توپ‌های مرتب شده‌ی داخل سطل‌ها رو به همون ترتیب سطل‌ها، پشت سر هم می‌ریزی :)یا ساده تر :)داده‌ها در سطل‌ها (bucket) قرار میگیرنهر سطل با الگوریتمی مثل insertion sort مرتب میشههمه سطل‌ها کنار هم قرار می‌گیرنکارآمد برای توزیع یکنواخت: وقتی اعداد در بازه‌های مشخصی پخش شده باشند (مثلاً 0 تا 1).نیاز به مرتب‌سازی داخلی: برای مرتب کردن سطل‌ها از الگوریتم دیگری (مثل Insertion Sort) استفاده می‌کند.python

def bucket_sort(arr):
    buckets = [[] for _ in range(10)]

    for num in arr:
        index = int(num * 10)
        buckets[index].append(num)

    for i in range(10):
        buckets[i].sort()

    result = []
    for bucket in buckets:
        result.extend(bucket)

    return result

print(bucket_sort([0.42, 0.32, 0.23, 0.52, 0.25]))
javascript


function bucketSort(arr) {
    const buckets = Array.from({ length: 10 }, () =&gt; []);

    for (let num of arr) {
        const index = Math.floor(num * 10);
        buckets[index].push(num);
    }

    buckets.forEach(b =&gt; b.sort());

    return buckets.flat();
}

console.log(bucketSort([0.42, 0.32, 0.23, 0.52, 0.25]));امیدوارم که مطالب رو واضح و ساده بیان کرده باشم :)برام بنویسید که بیشتر ترجیح میدین پست های طولانی مثل این رو بزارم یا نکته های کوچیک برنامه نویسی رو توی هر پست توضیح بدماگر سوالی داشتین یا پیشنهادی برای بهتر کردن مطالب داشتین توی کامنت ها باهام به اشتراک بزارید، حتما لحاظشون میکنم :)💕</description>
                <category>yasamin ghaedinia</category>
                <author>yasamin ghaedinia</author>
                <pubDate>Sun, 26 Apr 2026 22:50:38 +0330</pubDate>
            </item>
            </channel>
</rss>