1. Patience Sorting
1.1. دونه دونه از چپ شروع میکنی و کارت ها رو به صورت ستونی میچینی
1.2. شرط چینش اینکه که هر کارت باید از کارت بالاییش کوچیکتر باشه
1.3. آخرین کارت هر ستون رو نگاه میکنیم و بررسی میکنیم که آیا کارتی که قراره جایگذاری شه از اون کارت کوچیکتره
1.4. اگه ستونی با چنین شرایطی وجود نداشت یه ستون جدید درست میکنی
1.5. وقتی ستونی جدید ایجاد میشه آخرین کارت ستون آخر مارک میشه
1.6. تعداد ستونی که تشکیل شده میشه طول LIS
1.7. در نهایت مارکر ها رو از آخر به اول میخونیم و میشه LIS
2. microservice
2.1. چالش ها
2.1.1. ارتباط بین سرویس ها
2.1.1.1. راه حل
2.1.1.1.1. grpc
2.1.1.1.2. message brokers
2.1.2. کشف سرویس
2.1.2.1. باید بخونم
2.1.3. تست و مانیتورینگ سخت
2.1.4. مدیریت دیتا
2.1.4.1. راه حل
2.1.4.1.1. CQRS (Command Query Responsibility Segregation)
2.1.4.1.2. Event Sourcing یا Event-Driven Architecture
2.1.4.1.3. SAGA
2.1.4.1.4. Composition یا API Gateway
2.1.4.1.5. Event Store (ذخیرهسازی رویدادها)
2.1.4.1.6. سازگاری نهایی (Eventual Consistency)
2.1.4.1.7. Reconciliation
2.1.5. ترجیحات
2.1.5.1. هر سرویس دیتابیس مستقل خودش رو داشته باش
3. برخی از اصطلاحات
3.1. floating point error: مشکل ذخیره سازی اعداد اعشاری به صورت باینری در کامپیوتر وقتی پیش میاد که استرینگ رو به فلوت تبدیل میکنی
3.2. ORM: یه روشه که پروگرمر رو از کوئری خام و مستفیم به دیتابیس زدن بی نیاز میکنه
3.2.1. مزایا
3.2.1.1. جلوگیری از sql injection
3.2.1.2. ساده سازی کار با دیتابیس
4. Databases
4.1. Mysql
4.1.1. CHAR vs VARCHAR
4.1.1.1. CHAR 255 VARCHAR 4000
4.1.1.2. CHAR is faster than VARCHAR.
4.1.1.3. فرق بین char و varchar ــ> (fixed size)
4.1.2. diff beween ‘_’ and ‘%’
4.1.3. اگه بخوای فایل رو تو دیتابیس ذخیره کنی تایپش رو blob تعیین میکنی
4.1.4. یه جاهایی حتی میشه 1nf رو هم نقض کرد و از set استفاده کرد و همه ی اینا با توجه به شرایطه که تصمیم میگیری چیکار کنی
4.1.5. فرق بین float , double? دابل لارج تر و به تبعش دقیقتره
4.1.6. delete شرط میگیره ولی truncate نه
4.1.7. noramalization vs denormalization
4.1.8. **Constraints** are the rules that we can apply to the type of data in a table. NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - CHECK - DEFAULT
4.1.9. clustered and non clustered indicies
4.1.9.1. Non-Clustered Index
4.1.9.1.1. دادهها به صورت جداگانه ذخیره میشوند و ترتیب فیزیکی جدول را تغییر نمیدهد.
4.1.9.1.2. چندین Non-Clustered Index میتواند در هر جدول وجود داشته باشد.
4.1.9.1.3. کندتر است زیرا نیاز به Lookup برای دسترسی به دادهها دارد.
4.1.9.2. Clustered Index
4.1.9.2.1. دادهها در جدول بر اساس این ایندکس مرتب میشوند.
4.1.9.2.2. فقط یک Clustered Index در هر جدول مجاز است.
4.1.9.2.3. سریعتر است زیرا دادهها مرتب هستند.
4.1.10. انواع لاک
4.1.11. انواع ترنزکشن
4.1.12. Data Integrity
4.1.12.1. فرض کنید یک پایگاه داده فروشگاه آنلاین دارید. اگر مشتری سفارشی ثبت کند
4.1.12.1.1. مشتری در جدول مشتریان وجود داشته باشد (Referential Integrity).
4.1.12.1.2. شماره سفارش یکتا باشد (Entity Integrity).
4.1.12.1.3. مبلغ سفارش عدد مثبت باشد (Domain Integrity).
4.1.12.1.4. فیلدهای ضروری مانند نام مشتری یا آدرس خالی نباشد (Completeness).
4.1.13. stored procedure => مثل یه فانکشن عمل میکنه که اینپوت میگیره و DML های مختلف انجام میده
4.1.14. Union تکراری ها رو حذف میکنه ولی وقتی Union All میزنی تکراری ها رو هم میاره
4.1.15. INTERSECT وجه مشترک رو میاره
4.1.16. EXCEPT تفریق میکنه EXCEPT ALL به همون تعداد که در دسته ی دوم وجود داره حذف میکنه
4.1.17. اگه بخوای یه تیبل رو کپی کنی create like میکنیش
4.1.18. sql injection => SELECT * FROM users WHERE username = '' OR '1'='1';
4.1.19. index is a data structure