Skip to content

Latest commit

 

History

History
132 lines (98 loc) · 8.79 KB

Glossary.md

File metadata and controls

132 lines (98 loc) · 8.79 KB
Concurrency

همروندی در برنامه‌نویسی به معنای قابلیت اجرای همزمان چندین فرآیند و یا چندین نخ از یک برنامه است. اما برای استفاده بهینه از Concurrency باید از قفل گذاری و سایر مفاهیم مرتبط با همروندی نیز آگاهی داشته باشیم.

FMP ( First Meaningful Paint )

اولین لحظه ای کاربر میتوان محتوای صفحه را ببیند.

TTI ( Time to Interactive )

اولین لحظه ای که کاربر میتوان از صفحه استفاده کند.

KISS (keep it simple and stupid)

ساده ترین روش ممکن کد بزنید و از پیچیدگی اجتناب کنید

YANGI (You ain't gonna need it)

شما به آن نیاز نخواهید داشت. چه دلیلی داره کدی بنویسید که به آن نیاز ندارید کدی اضاف نشود تا وقتی که نیاز آن احساس نشده

DRY ( Don’t repeat yourself )

خودت را تکرار نکن اگر پروژه ای را که آغاز کرده اید بسیار مهم است که هیچ وقت چیزی را دوبار تکرار نکنید.

Shallow Copy VS Deep Copy

مشابه رفرنس تایپ و وریبل تایپ است.

LOD ( Law of Demeter )

قانون دمیتر - هر واحد باید تنها دانش اندکی در مورد واحدهای دیگر داشته باشد و این واحدها صرفاً شامل واحدهای کاملاً مرتبط به واحد کنونی باشند.

SOC ( Separation of Concerns )

تفکیک دغدغه ها - تفکیک کردن حوزه های مختلف نرم افزار می باشد

SOLID

Single Responsibility

هر کلاس یا ماژول باید مسئولیت یک وظیفه مشخص را داشته باشد

Open closed

یک کلاس باید در برابر تغییرات بسته باشد ولی باید قابلیت توسعه را داشته باشد

Liskov

اگر کلاس A از کلاس B ارث‌بری کرده باشد، در همه‌ی موارد می‌توان از شی‌ء‌های کلاس A به جای شیء‌های کلاس B استفاده کرد، بدون داشتن هیچ تفاوتی در عملکرد برنامه.

Dependency inversion

کلاس سطح بالاتر نباید به کلاس های سطح پایینتر وابسته باشند هر دو باید به انتزاعات وابسته باشد.

Interface Segregation

اینترفیس ها اینقدر کوچک شوند که از برنامه نویس فقط به قسمتی که نیاز دارد دسترسی داشته باشد

SSL (Secure Sockets Layer) OR TLS (Transport Layer Security)

یک پروتکل امنیتی است که در اینترنت برای ارتباطات امن بین مرورگر و سرور استفاده می‌شود. SSL با استفاده از الگوریتم‌های رمزنگاری قوی، اطلاعاتی که بین مرورگر و سرور رد و بدل می‌شوند را محافظت می‌کند.

JIT (Just-In-Time) VS AOT (Ahead-of-Time)

  • در جیت کد برنامه در زمان اجرا کامپایل می شود مثلا ما در مرورگر فایل های تایپ اسکریپت را داریم و و در محیط دولوپ بیشتر کاربرد دارد و تغییرات را میتونیم ببینم انعطاف پذیری بیشتری دارد.
  • در AOT کد برنامه کامپایل شده است و بیشتر در محیط ها production کاربرد دارد و سرعت و عملکرد بیشتری دارد

Parallelism vs Concurrency

پارالل یعنی این زبان می‌تونه چندین کار رو به صورت هم‌زمان و مجزا شروع و پردازش کنه. ولی همزمانی

Currying technique

با این تکنیک می‌تونیم بجای داشتن یک تابع با چندین پارامتر، چند تابع (تو در تو) با یک پارامتر داشته باشیم.

function logger(level, message) {
  console.log(`${level}: ${message}`);
}

logger('warning', 'This is a warning message');
logger('warning', 'This is another warning message');

function logger(level) {
  return function (message) {
    console.log(`${level}: ${message}`);
  }
}

const infoLog = logger('info');

infoLog('This is an info message #1');
infoLog('This is an info message #2');

Sharding techniques

شاردینگ یعنی تقسیم داده‌ها به قطعه‌های کوچک و ذخیره آنها در سرورهای مختلف برای بهبود عملکرد و ظرفیت سیستم.

Microservices vs Monolithic

Microservices Advantages
Microservices Disadvantages
  • Developer Productivity
  • Complex Interactions
  • Deployment
  • Monitoring

ACID Properties in DBMS

  • Atomicity یک تراکنش باید یا به طور کامل انجام شود و تغییرات آن به پایگاه داده اعمال شود، یا هیچ تغییری در پایگاه داده اعمال نشود.
  • Consistency پس از اجرای یک تراکنش، پایگاه داده باید از یک حالت معتبر به حالت دیگری معتبر برود، بدون اینکه در وسط راه به یک حالت نامعتبر برسد
  • Isolation این ویژگی به معنای جدا بودن تراکنش‌ها از یکدیگر است. به این معنا که یک تراکنش نباید توسط تراکنش‌های دیگر تحت تأثیر قرار گیرد و تأثیری بر آنها بگذارد
  • Durability پایداری به معنای این است که هر تغییری که توسط یک تراکنش در پایگاه داده اعمال شود، باید برای همیشه در پایگاه داده باقی بماند و حتی در صورت بروز خطا یا قطع برق، این تغییرات از دست نروند.

Distributed systems

  1. Scaling

مقیاس‌پذیری به افزایش قابلیت‌های سیستم با افزایش ترافیک و بار کاری اشاره دارد. این کار با دو روش عمودی و افقی انجام می‌شود. در مقیاس‌پذیری عمودی، منابع یک سرور یا نود افزایش می‌یابند، مثلاً پردازنده و حافظه. اما در مقیاس‌پذیری افقی، به جای افزایش قدرت یک نود، تعداد نودها افزایش می‌یابد.

  1. Availability

دسترسی‌پذیری به این معناست که سیستم به کاربران خدمات خود را حتی در صورت بروز مشکل، ادامه می‌دهد. این مفهوم با میزان زمانی که سیستم در دسترس بوده (uptime) و زمانی که در دسترس نبوده (downtime) سنجیده می‌شود.

  • Replication and Redundancy تکرار و تکثیر به معنای داشتن کپی از یک نود که در صورت خرابی نود به سرعت جایگزین شود
  • Load Balancing توزیع بار بین نود های مختلف که هیچ نودی تحت فشار زیاد نرود
  • Distributed Data Storage ذخیره داده در نقاط مختلف جغرافیایی که اگر یک دیتاسنتر مشکل بخورد بقیه دیتاسنتر ها در دسترس باشند
  • Consistency Models ییکپارچگی مشخص می‌کند که در چه میزان عملیات‌های سیستم هماهنگ با یکدیگر باشند. دو مدل معروف یکپارچگی، یعنی قوی و ضعیف، به ما این تفاوت را نشان می‌دهند. در یکپارچگی قوی، همه کلاینت‌ها همواره دیدگاه یکسانی از داده‌ها دارند، در حالی که در یکپارچگی ضعیف، ممکن است دیدگاه داده‌ها بین کلاینت‌ها تفاوت داشته باشد.
  1. Latency and performance تاخیر یعنی زمانی که طول می‌کشد یک عملیات انجام شود، در حالی که عملکرد به کارایی و کیفیت کلی انجام دادن کارها در سیستم یا برنامه اشاره دارد. برای این پارامتر راهکارهای زیر وجود دارد.

    • Data Locality این معناست که وقتی که یک برنامه داده‌ای را می‌خواند یا مورد استفاده قرار می‌دهد، سعی می‌کند از داده‌هایی استفاده کند که در نزدیکی فرآیند اجرایی یا منبع ذخیره‌سازی قرار دارند
    • Load Balancing
    • Cashing Strategies
  2. Concurrency and Coordination

  3. Monitoring and Observability

  4. Resilience and Error Handling