Engineering Notes
2.46K subscribers
137 photos
5 files
208 links
Kanalda asosan backend engineeringga oid postlar yozib boriladi.

Ba'zi postlarda xatoliklar bor.
Postlar foydali bo’lgan bo’lsa adminni duo qilib qo’ying. Rahmat.

Contact: @Bobosher_Musurmonov
LinkedIn: https://www.linkedin.com/in/bobosher-musurmonov
Download Telegram
Forwarded from Engineering Notes
Isolation – izolyatsiya

Hali tugallanmagan trakzaksiyadagi ma'lumotlar tashqaridan (boshqa tranzaksiyalardan va tranzaksiya tashqarisidagi boshqa operatsiyalardan) izolyatsiyalanishi kerak. Ya'ni tranzaksiya tugamagunicha ichkaridagi ma'lumot tashqariga ko'rinmasligi kerak.

Masalan, tepadagi misolda hisobingizdan pul yechildi, lekin hali do'stingizga tushmadi. Shu vaziyatda, hali tranzaksiya tugamasidan balansingiz tekshirilganida kamaygan qiymat emas, tranzaksiyadan tashqaridagi, oldingi qiymat ko'rinishi kerak.

To'liq izolyatsiya ko'p resurs va vaqt talab qilgani uchun va doim ham to'liq izolyatsiya zarur bo'lmagani uchun tranzaksiya izolyatsiyasining 4 ta standart darajalari bor. Ular tezlik, resurslar sarfi va xavfsizligi jihatidan bir-biridan farq qiladi. Endi bu boshqa kun uchun boshqa mavzu.

Durability – ishonchlilik

Tranzaksiya muvaffaqiyatli yakunlangani haqida xabar berilganida tranzaksiyadagi o'zgarishlar to'liq diskda saqlangan bo'lishi va ma'lumot yo'qotilmasligi kerak.

Masalan, do'stingizga muvaffaqiyatli pul o'tkazganingiz haqidagi xabar olganingiz va shu vaqtda serverda xatolik chiqib, o'chib qoldi. Qayta yoqilgandan keyin balansingizni tekshirganingizda esa pul o'tkazishdan oldingi, eski qiymatni ko'rdingiz. Demak, tranzaksiya muvaffaqiyatli deb belgilangan bo'lsa ham natijalar o'chib ketgan. Xuddi shu holat esa durability qoidasini buzadi.

Qisqasi, mana shu 4 ta qoida ma'lumotlar buzilishi bilan bog'liq ko'p bosh og'rig'idan saqlaydi.

Maqola foydali bo'lgan bo'lsa tanishlarga yuborib qo'ying.

@boboshersnotes
👍22🍾1
Code review, hamma testlar va staging serverda QAdan ham eson-omon o'tkazib production serverda bug chiqarish ham aslida bir san'at, sizga aytsam.
😁29👍8🍾6
SELECT nextval('year_seq');
👍35
One LeetCode a day
Keeps unemployment away.

Credit: @JR_TwitGram
👍36🍾8
Array

RAMda ordered collection saqlashning eng sodda usuli array.
Ko'p hollarda bu collection ustida bajariladigan ma'lum operatsiyalar tezligi boshqalaridan ko'ra muhimroq bo'ladi. Natijada faqatgina ma'lum operatsiyalarga ixtisoslashgan yangi data structurelar ishlab chiqishga ehtiyoj tug'iladi. Dynamic array, stack, queue, heap, va h.k. lar mana shu sabab paydo bo'lgan. Lekin asosida oddiy array yotadi. Masalan:

— Oddiy array razmerini band va bo'sh joylar nisbatiga qarab dinamik tarzda o'zgartirish (aniqrog'i, hamma ma'lumotni boshqa razmerli arrayga ko'chirish) orqali dynamic array hosil bo'ldi. Bu orqali oxiriga element qo'shish va oxirgi elementni o'chirish operatsiyalari O(n) dan amortized O(1) ga tushdi.

— Dynamic arrayning oxirgi elementini o'chirish va oxiriga element qo'shish O(1) bo'lgani uchun undan first-in last-out (oldin kelgan keyin ketadi) tartibini ta'minlaydigan collection – stack sifatida foydalanish mumkin.

— Ikkita stackni bir-biriga teskari qilib ulash va biroz matematikadan foydalanib ulangan joyni nazorat qilish orqali first-in first-out (oldin kelgan oldin ketadi) tartibini amortized O(1) vaqtda ta'minlaydigan collection – queue paydo bo'ldi.

Bu ro'yxatni hali uzoq davom ettirish mumkin...
Arrays, arrays everywhere ))

@boboshersnotes
👍7
OOP dasturlashdagi eng chiroyli paradigm deb hisoblayman.
Lekin afsuski, bu go'zallik hozir ko'plab dasturchilarning ko'zini ko'r qilib qo'ygan.

@boboshersnotes
😢20👍5😁2
How to create a good mobile application with Python:

Step 1. Don't do that.

Step 2. Jump to the step 1.
😁50👍1
Asosiy servislarimizdan biri bilan bitta third-party service o'rtasida ma'lumot almashish uchun pollingdan foydalanamiz (nega webhook emas deb so'ramang). O'tgan juma kuni productionga bugi bor featureni release qilish sabab serverdagi ba'zi configurationlar o'zgarib ketibdi. Natijada dam olish kunlari bizning serverimiz ularning serveriga yaxshigina RPS bilan to'xtovsiz request yuboribdi. 2+ kun davomida, to'xtovsiz.

Ularning ham DDoSga qarshi himoyasi yo'q shekilli, blok qilishmabdi. Yaxshi-ki, dam olish kunlari sabab ularning serverida boshqa load kam bo'lgan. Bo'lmasa serveri o'chib qolib boshimiz baloga qolishi mumkin edi 😅.

Behavioural interviewda "Qovun tushirgan vaqtingni gapirib ber" deb so'rab qolishsa aytib beradigan story bo'ldi.

O'rgangan darslarim:
1. Third-party toollar ixtiyoriy vaqtda kutilmagan natija berishi mumkin. Hatto eng ishonchlilari ham.
2. Serverni monitoring qilish uchun ketgan resurslar o'zini oqlaydi.
3. Testlar hech qachon yetarli emas.
4. Juma kuni kechki vaqt deploy qilish yaxshi fikr emas.
👍24😁10
If you know what I mean
😁10👍1
Meme explained
👍8
Engineering Notes
Meme explained
Instance methodlar boshqa tillarda qanday implement qilingan?
Biladiganlar commentda qisqacha ma'lumot bersangiz xursand bo'lardim.
What is the output of the following code?
What is the output of the following code?
Engineering Notes
What is the output of the following code?
Mana bu kod error chiqaradi.
Bunga sabab esa Python Method Resolution Order(MRO)ni aniqlash uchun ishlatadigan algorithm – C3 Linearization.

C3 Linearization algorithmining vazifasi biror classning hamma ancestor(ajdod)larini ma'lum qonuniyat asosida chiziqli tartiblash (bu orqali method overriding/overloading hal qilinadi).
Bu algorithm biroz murakkab bo'lsa-da, u monolith xususiyatini saqlab qola oladi. Bundan oldin ishlatilgan "Depth-first, left to right" (Python 2.2 gacha ishlatilgan) algorithmi tuzilishi jihatdan juda sodda bo'lsa-da, u monotonic emas edi (ya'ni multiple inheritance vaqtida order almashib ketishi mumkin edi).

Yuqoridagi misolda algorithm E classning ancestorlarini linearize qilishda dead lockga o'xshash muammoga duch keladi va TypeError chiqaradi.

C3 ning qanday ishlashi haqida esa hali yana gaplashamiz.

Manbaa:
https://www.python.org/download/releases/2.3/mro/

@boboshersnotes
👍15
Ertalabdan (USda deyarli yarim tun) production serverimizda muammo chiqqan. Yarim soat loglar bilan (test qilingan) kodlarni yonma-yon analiz qilib aniqladim-ki, bug biz yozgan kodlarda emas, biz background tasklar uchun ishlatadigan open-source software – Celeryda ekan.

Umuman olganda, bu birinchi marta Celery bilan bog'liq muammoga duch kelishim emas. Mana bu va ishdan tashqari yana bir nechta vaziyatlarda ham Celery pand bergandi. Umuman olganda, ko'p vazifalarni qoyillatib bajarsa-da, ba'zi eng oddiy vazifalarni bajarishda oqsaydi.

P.S. Menimcha Celeryga contribute qilib undagi buglarni fix qilishdan ko'ra yangi soddaroq alternativ yozib chiqish osonroq bo'lsa kerak.

P.S.S. Interviewlarda aybni boshqa birovning bo'yniga ilib qo'ygan vaqting haqida gapirib ber deb so'rashsa aytib beradigan story bo'ldi 😅.

@boboshersnotes
👍29😁8
Birinchi marta Leetcodeda hard darajadagi masalani yarim soatdan kam vaqtda yechdim. Menimcha bu masala harddan ko'ra ko'proq mediumga tortadi.

Link: https://leetcode.com/problems/reverse-nodes-in-k-group/
👍22
Mana bu savol xuddi language grammarga o'xshash ekan.
Yaqinda universitetda shu haqida o'rgangandik. Baribir 40 minut ketdi.

Link: https://leetcode.com/problems/valid-number/
Leetcodeda bugungi daily challengeni O(n) time, O(k) space complexityda yechdim.
Biladiganlar "fisht" deb yuboringlar, shuni O(1) space complexityda yechish mumkinmi?
😁13👍3