Python: Memory Management
Ushbu postda siz:
・ Garbage collector
・ Reference count
・ Finalizer
・ Cyclic reference
・ Weak reference
・ Stack Tracer
... haqida o'rganasiz.
Postni yaxshilab o'qisangiz, keyingi interview`laringizni qiyqiriq feedback bilan o'tasiz.
Postni o'qish
@otabekswe
Ushbu postda siz:
・ Garbage collector
・ Reference count
・ Finalizer
・ Cyclic reference
・ Weak reference
・ Stack Tracer
... haqida o'rganasiz.
Postni yaxshilab o'qisangiz, keyingi interview`laringizni qiyqiriq feedback bilan o'tasiz.
Postni o'qish
@otabekswe
Python Interview Questions
Ushbu postda:
・Qiziq savollar
・Javoblar
・Best practice`lar
・Python internals
... va h.k.z advanced mavzularni qo'shdim. Bilimingizni sinab ko'rish vaqti keldi.
O'qing, o'qish foydali!
Postni o'qish
@otabekswe
Ushbu postda:
・Qiziq savollar
・Javoblar
・Best practice`lar
・Python internals
... va h.k.z advanced mavzularni qo'shdim. Bilimingizni sinab ko'rish vaqti keldi.
O'qing, o'qish foydali!
Postni o'qish
@otabekswe
Welcome to Functional World
Ushbu postda:
・Functional Programming nimaligi
・Procedural vs Functionl farqi
・Rekursiya Loopdan qimmatroq
・First-class va High-order funksiyalar
...va nima uchun FP zo'rligini yozib o'tdim.
Bu postdan keyin ko'plab dasturlashdagi tushunchalarni oson tushunasiz degan umiddaman.
Postni o'qish
@otabekswe
Ushbu postda:
・Functional Programming nimaligi
・Procedural vs Functionl farqi
・Rekursiya Loopdan qimmatroq
・First-class va High-order funksiyalar
...va nima uchun FP zo'rligini yozib o'tdim.
Bu postdan keyin ko'plab dasturlashdagi tushunchalarni oson tushunasiz degan umiddaman.
Postni o'qish
@otabekswe
FAANG'ga sayohat
2021: Facebookdagi amaliyot (internship) haqida eshitib qiziqishim juda oshgandi
2022: Amazon, Intel va Cloudflare dan rad javobi oldim
2023: Intel, BNY Mellon, Deloitte dan rad javobi
2024: Google (universitetdan keyin qaytaman), IBM, Dropbox va Meta offer.
2025: Loading…
Mana Linkedin, menga ergashib (follow qilib) qo'ying.
Yaxshi maqolalar: otabek.io
@otabekswe
2021: Facebookdagi amaliyot (internship) haqida eshitib qiziqishim juda oshgandi
2022: Amazon, Intel va Cloudflare dan rad javobi oldim
2023: Intel, BNY Mellon, Deloitte dan rad javobi
2024: Google (universitetdan keyin qaytaman), IBM, Dropbox va Meta offer.
2025: Loading…
Mana Linkedin, menga ergashib (follow qilib) qo'ying.
Yaxshi maqolalar: otabek.io
@otabekswe
Inson bilgan bor bilimini gapirib bera olmaydi. Gapirib tushuntira olgan narsasini esa, yozib tushuntirishi qiyin.
Anchadan beri blog yozib kelaman, oldin ingliz tilida yozardim, hozir faqat O’zbek tilida yozaman. Bunga asosiy sabab O’zbek tilida ham bunday foydali kontentlarni ko’paytirish.
Blog yozish qiyin. Unga yetarlicha bilim, tajriba va sabr kerak. Chunki uni o’qigan insonlar sizni tushunishi uchun maksimal soddaroq tilda boshlab, keyin ilmiyroq tushunchani yetkazib berib yakunlashingiz kerak.
Yaqin kunlarda yaxshi bloglarni sizlar bilan bo’lishib o’taman. Undan oldin esa bloglar haqida fikr va takliflaringizni so’ramoqchiman.
Men yozgan maqolalar sizga yoqsa, avtorni qo’llab turishingiz, bizga ko’proq blog yozishda va uni ostidagi xizmatkor serverlar xarajatiga katta yordam bo’ladi.
O'z xissangizni qo'shing: tirikchilik.uz/otabek
Anchadan beri blog yozib kelaman, oldin ingliz tilida yozardim, hozir faqat O’zbek tilida yozaman. Bunga asosiy sabab O’zbek tilida ham bunday foydali kontentlarni ko’paytirish.
Blog yozish qiyin. Unga yetarlicha bilim, tajriba va sabr kerak. Chunki uni o’qigan insonlar sizni tushunishi uchun maksimal soddaroq tilda boshlab, keyin ilmiyroq tushunchani yetkazib berib yakunlashingiz kerak.
Yaqin kunlarda yaxshi bloglarni sizlar bilan bo’lishib o’taman. Undan oldin esa bloglar haqida fikr va takliflaringizni so’ramoqchiman.
Men yozgan maqolalar sizga yoqsa, avtorni qo’llab turishingiz, bizga ko’proq blog yozishda va uni ostidagi xizmatkor serverlar xarajatiga katta yordam bo’ladi.
O'z xissangizni qo'shing: tirikchilik.uz/otabek
Testing in Action
Yaxshi dasturchi doim dasturini test qiladi. Test qilish uchun test yozishni o'rganing. Qanday test yozishingizni esa ushbu post orqali kashf qiling.
Maqolani o'qish
@otabekswe
Yaxshi dasturchi doim dasturini test qiladi. Test qilish uchun test yozishni o'rganing. Qanday test yozishingizni esa ushbu post orqali kashf qiling.
Maqolani o'qish
@otabekswe
Trustober
Bu oy Dropbox uchun Trustober ya'ni HackMonth hisoblanadi. Barcha jamoalar turli xil yo'nalishlarda tayyorlangan muammolarni yechib chiqishadi va tizimdagi xatoliklarni qidirishadi. Tizimdagi xatolik darajasiga qarab score berishadi. Qancha ko'p tizimni buza olsangiz shuncha yaxshi.
Bu an’ananing yoqqan tomoni, juda ko'p o'rganasiz. Ko'plab zaifliklarni topish, tez fikrlash, qarorlar qabul qilish va ularni yechishni o'rganasiz.
"Tajribang ko'p ekan" deb captain qilib saylashdi, aslida unday emas. Lekin men imkoniyatdan foydalanib qoldim, o'z lavozimimni suv iste'mol qilgan holda jamoa nomini o'zim berdim. Ular baribir tushunishmaydi, bo'laveradi.
JPRQlar, biz yutamiz!
Bu oy Dropbox uchun Trustober ya'ni HackMonth hisoblanadi. Barcha jamoalar turli xil yo'nalishlarda tayyorlangan muammolarni yechib chiqishadi va tizimdagi xatoliklarni qidirishadi. Tizimdagi xatolik darajasiga qarab score berishadi. Qancha ko'p tizimni buza olsangiz shuncha yaxshi.
Bu an’ananing yoqqan tomoni, juda ko'p o'rganasiz. Ko'plab zaifliklarni topish, tez fikrlash, qarorlar qabul qilish va ularni yechishni o'rganasiz.
"Tajribang ko'p ekan" deb captain qilib saylashdi, aslida unday emas. Lekin men imkoniyatdan foydalanib qoldim, o'z lavozimimni suv iste'mol qilgan holda jamoa nomini o'zim berdim. Ular baribir tushunishmaydi, bo'laveradi.
JPRQlar, biz yutamiz!
2024 Recap
Ushbu maqola texnik emas ammo men uchun eng yaxshi bloglardan.
Odatda bunday blog yozmasdim, ammo bu yil olgan yaxshi tajriba va xuloslarni bo'lishishga qaror qildim.
Maqolani o'qish
@otabekswe
Ushbu maqola texnik emas ammo men uchun eng yaxshi bloglardan.
Odatda bunday blog yozmasdim, ammo bu yil olgan yaxshi tajriba va xuloslarni bo'lishishga qaror qildim.
Maqolani o'qish
@otabekswe
Keling tanishamiz!
Anchadan beri auditoryia bilan jonli suxbat qilish uchun vaziyat izlab kelaman. Ushbu onlar keldi deb o'ylayman.
Sizlar uchun sessiya yaratdim, va ushbu sessiya davomida dasturlashga tegishli bo'lgan ba'zi mavzular haqida gaplashamiz. Joyingizni hoziroq band qiling!
Joylar soni: 30 ta
Mavzu: Habits & Algorithms
🔗 Sessiyaga yozilish
Anchadan beri auditoryia bilan jonli suxbat qilish uchun vaziyat izlab kelaman. Ushbu onlar keldi deb o'ylayman.
Sizlar uchun sessiya yaratdim, va ushbu sessiya davomida dasturlashga tegishli bo'lgan ba'zi mavzular haqida gaplashamiz. Joyingizni hoziroq band qiling!
Joylar soni: 30 ta
Mavzu: Habits & Algorithms
🔗 Sessiyaga yozilish
Tayyormisiz?
FAANGda intervyu olish jarayoniga doim qiziqardim. Senior Software Engineer bo’lganim uchun bu yildan intervyu olishim kerakligni aytishdi (Technical va System Design). Yaxshi intervyu uchun nimalar kerak:
• STAR metodi bo’yicha javob berishni mashq qiling
• Muloyim bo’ling
• Texnik bilimlaringizni sayqallang
• Muammoni yechishdan oldin aniqlashtiruvchi savollar so’rang
• Muammoni va yechimni shoshilmay, yaxshi tushuntirib bering
• Eng asosiysi shashilmang!
Intervyudan o’tish sirini sizga fosh qilib qo’ydim. Agar bu ma’lumotlar sizga foydali bo’lib offer olsangiz, menga ham yozib qo’ying.
Haqiqiy askar intervyuga tayyorlanmaydi, doim intervyuga tayyor turadi.
Intervyuda ko’rishguncha.
FAANGda intervyu olish jarayoniga doim qiziqardim. Senior Software Engineer bo’lganim uchun bu yildan intervyu olishim kerakligni aytishdi (Technical va System Design). Yaxshi intervyu uchun nimalar kerak:
• STAR metodi bo’yicha javob berishni mashq qiling
• Muloyim bo’ling
• Texnik bilimlaringizni sayqallang
• Muammoni yechishdan oldin aniqlashtiruvchi savollar so’rang
• Muammoni va yechimni shoshilmay, yaxshi tushuntirib bering
• Eng asosiysi shashilmang!
Intervyudan o’tish sirini sizga fosh qilib qo’ydim. Agar bu ma’lumotlar sizga foydali bo’lib offer olsangiz, menga ham yozib qo’ying.
Haqiqiy askar intervyuga tayyorlanmaydi, doim intervyuga tayyor turadi.
Intervyuda ko’rishguncha.
Strawberry Test
Dropbox'da Core Teamda ishlayman. Bizni jamoa butun kompaniyani infrastrukturasini ko'tarish uchun dastur ishlab chiqadi va maintain qiladi. Undan tashqari jamoa AI ustida ham ishlashadi.
Suniy intelektda tokenization jarayoni mavjud. Siz AI'ga matn yozganingizda, matnni kichik bo'laklarga bo'lib oladi va har bir bo'lakni token deb xisoblaydi. Misol uchun "Salom mening ismim Otabek" -> ["Salom", "mening", "ismim", "Otabek"]. Bu jarayon faqat matn uchun emas balki so'z uchun ham, harflar uchun ham ishlaydi. "AI" -> ["A", "I"]. Machine learning modelingiz bu matnni tezroq tahlil qila olishi uchun shunday qilinadi. (Bu qisqacha ma'lumot)
Ayanan shu tokenization jarayonni qanchalik yaxshi qilinayotganini Strawberry test orqali aniqlashar ekan. Ha, AI tokenization jarayoni uchun ham test yoziladi. Siz AI'ga "How many r's in strawberry" deysiz. U esa sizga to'g'ri javob berishi kerak. Ammo nimaga aynan "strawberry"?
"strawberry" so'zi o'zi juda qiziq so'z ekan. Tahminan shunday ["straw", "berry"] token bo'lar ekan. Bu degani ikki so'z ham nimanidir anglatadi va AI aynan shu yerda aldanadi. Yaxshi tokenizatsiya qiluvchi AI model esa buni bitta so'z sifatida ham qaray olishi kerak. Agar siz yaratgan AI model "r" lar soni 1ta desa demak yaxshi tokenizatsiya qilmayabdi ekan.
Dropbox'da Core Teamda ishlayman. Bizni jamoa butun kompaniyani infrastrukturasini ko'tarish uchun dastur ishlab chiqadi va maintain qiladi. Undan tashqari jamoa AI ustida ham ishlashadi.
Suniy intelektda tokenization jarayoni mavjud. Siz AI'ga matn yozganingizda, matnni kichik bo'laklarga bo'lib oladi va har bir bo'lakni token deb xisoblaydi. Misol uchun "Salom mening ismim Otabek" -> ["Salom", "mening", "ismim", "Otabek"]. Bu jarayon faqat matn uchun emas balki so'z uchun ham, harflar uchun ham ishlaydi. "AI" -> ["A", "I"]. Machine learning modelingiz bu matnni tezroq tahlil qila olishi uchun shunday qilinadi. (Bu qisqacha ma'lumot)
Ayanan shu tokenization jarayonni qanchalik yaxshi qilinayotganini Strawberry test orqali aniqlashar ekan. Ha, AI tokenization jarayoni uchun ham test yoziladi. Siz AI'ga "How many r's in strawberry" deysiz. U esa sizga to'g'ri javob berishi kerak. Ammo nimaga aynan "strawberry"?
"strawberry" so'zi o'zi juda qiziq so'z ekan. Tahminan shunday ["straw", "berry"] token bo'lar ekan. Bu degani ikki so'z ham nimanidir anglatadi va AI aynan shu yerda aldanadi. Yaxshi tokenizatsiya qiluvchi AI model esa buni bitta so'z sifatida ham qaray olishi kerak. Agar siz yaratgan AI model "r" lar soni 1ta desa demak yaxshi tokenizatsiya qilmayabdi ekan.
#experience
Kecha qiziq ishlar bo'ldi. Jamoada ansible bilan file transferda muammo bo'layotgani, bandwith oshib ketgani haqida aytishdi. Ya'ni muammo juda ko'p fayllar tarmoqda transfer bo'lsa bandwith oshib ketayotgan ekan. Bu muammoni o'z zimmamga oldim. Ozgina research qilib, bergan yechimim jamoani qiziqtirdi. Muammoga yechimni juda oddiy tilda yozdim:compress (archive all files) before sending
Yechimni discuss qildik va ba'zi pointlarga to'xtalib o'tdim. Bir nechta fayllarni yuborish o'rniga barchasini (compress) archive qilib yuborish yaxshi idea bo'ldi. Jarayonni to'liq test qilib ko'rdik, natija 1 minutdan -> 20 sekundga tushdi. Boshida HTTPS beradigan TLS xavfsizligi yaxshi deb turgandim. Ammo bu faqat file transfer vaqtidagina xavfsiz, fayl manzilga tushgandan keyin u ochiq bo'lishini aytishdi. Ba'zi fayllarni hech kim ocholmasligi kerakligi uchun uni Private (va Public) keydan tashqari encrypt/decrypt qilish uchun imkoniyat qo'shdim.
Kattaroq va ko'proq fayllar bilan sinab ko'rdik (log, va juda ko'p config fayllar bilan), natija juda zo'r. Eski holatdagi o'tkazish uslubi 3 minut oldi. Yangi xolatdagi o'tkazish esa 43.12 sekund. Compression algoritmlari haqida yana ham ko'proq narsa o'rganib chiqdim, qiziq tajriba bo'ldi.
Qiziq narsa eshitdim: Lucerne shahridan Zurich shahrigacha har kuni poyezd orqali 1TB ma'lumot berib yuborilar ekan. (Esimda qolmadi nomi) Qanaqadir labaratoriya va uni tahlil qiladigan korpuslar boshqa-boshqa joyda joylashgani uchun, tarmoq orqali ma'lumotni yuborgandan, uni poyezda yuborish tezroq bo'lar ekan. Chunki uni hali process ham qilish kerak, unga ham vaqt oladida.
Updated:
Katta Data Center levelda ham test qilib ko'rdik, natija 1000x bo'ldi. Ya'ni bu yerda time complexity O(days) -> O(minutes) o'zgardi.
Kecha qiziq ishlar bo'ldi. Jamoada ansible bilan file transferda muammo bo'layotgani, bandwith oshib ketgani haqida aytishdi. Ya'ni muammo juda ko'p fayllar tarmoqda transfer bo'lsa bandwith oshib ketayotgan ekan. Bu muammoni o'z zimmamga oldim. Ozgina research qilib, bergan yechimim jamoani qiziqtirdi. Muammoga yechimni juda oddiy tilda yozdim:
Yechimni discuss qildik va ba'zi pointlarga to'xtalib o'tdim. Bir nechta fayllarni yuborish o'rniga barchasini (compress) archive qilib yuborish yaxshi idea bo'ldi. Jarayonni to'liq test qilib ko'rdik, natija 1 minutdan -> 20 sekundga tushdi. Boshida HTTPS beradigan TLS xavfsizligi yaxshi deb turgandim. Ammo bu faqat file transfer vaqtidagina xavfsiz, fayl manzilga tushgandan keyin u ochiq bo'lishini aytishdi. Ba'zi fayllarni hech kim ocholmasligi kerakligi uchun uni Private (va Public) keydan tashqari encrypt/decrypt qilish uchun imkoniyat qo'shdim.
Kattaroq va ko'proq fayllar bilan sinab ko'rdik (log, va juda ko'p config fayllar bilan), natija juda zo'r. Eski holatdagi o'tkazish uslubi 3 minut oldi. Yangi xolatdagi o'tkazish esa 43.12 sekund. Compression algoritmlari haqida yana ham ko'proq narsa o'rganib chiqdim, qiziq tajriba bo'ldi.
Qiziq narsa eshitdim: Lucerne shahridan Zurich shahrigacha har kuni poyezd orqali 1TB ma'lumot berib yuborilar ekan. (Esimda qolmadi nomi) Qanaqadir labaratoriya va uni tahlil qiladigan korpuslar boshqa-boshqa joyda joylashgani uchun, tarmoq orqali ma'lumotni yuborgandan, uni poyezda yuborish tezroq bo'lar ekan. Chunki uni hali process ham qilish kerak, unga ham vaqt oladida.
Updated:
Katta Data Center levelda ham test qilib ko'rdik, natija 1000x bo'ldi. Ya'ni bu yerda time complexity O(days) -> O(minutes) o'zgardi.
Xabarchi botga keladigan, eng ko'p so'ralgan savol bu:
Nimaga aynan Dropbox'ni tanladingiz?
Mening javobim:
Ko'p kompaniyalar ichidan aynan Dropbox'ni taklifi qiziqroq bo'ldi. Doim katta bosim (high load)ni ko'taruvchi tizimlar qurishda qatnashishga, high-level dan low-level ga o'tishga qiziqib kelganman. Biz bilgan o'sha mashxur data structure va algorithm bilimlarni amaliyotda qo'llashga qiziqqanman. Dropbox bu imkoniyatni qaysidir ma'noda berayabdi. Keyinchalik olayotgan tajribalarimdan ba'zilarini bo'lishib borishga harakat qilaman.
Bilaman ko'p joylardan ishga taklif oldim. Google'ga ishga taklifim hali ham o'z kuchida, Sentyabrgacha bir qarorga kelishimni kutishayabdi. Meta ishga taklifimni internshipga o'zgartirishga harakat qilib ko'rdim, o'xshamadi, rad javob oldim, taklif kuyib ketdi. Undan tashqari yaqinda Atlassian'dan ham ishga taklif oldim Polshadagi jamoaga (Compass mahsuloti & jamoasi uchun), shunchaki qiziqishga topshirib ko'rgandim, o'xshab ketdi.
Olgan xulosalarimdan biri bu:
zo'r kopaniyada ishlashni emas, zo'r mahsulot ustida ishlashni tanlang, yutqazmaysiz. Yo'q degandan zerikmaysiz.
Nimaga aynan Dropbox'ni tanladingiz?
Mening javobim:
Ko'p kompaniyalar ichidan aynan Dropbox'ni taklifi qiziqroq bo'ldi. Doim katta bosim (high load)ni ko'taruvchi tizimlar qurishda qatnashishga, high-level dan low-level ga o'tishga qiziqib kelganman. Biz bilgan o'sha mashxur data structure va algorithm bilimlarni amaliyotda qo'llashga qiziqqanman. Dropbox bu imkoniyatni qaysidir ma'noda berayabdi. Keyinchalik olayotgan tajribalarimdan ba'zilarini bo'lishib borishga harakat qilaman.
Bilaman ko'p joylardan ishga taklif oldim. Google'ga ishga taklifim hali ham o'z kuchida, Sentyabrgacha bir qarorga kelishimni kutishayabdi. Meta ishga taklifimni internshipga o'zgartirishga harakat qilib ko'rdim, o'xshamadi, rad javob oldim, taklif kuyib ketdi. Undan tashqari yaqinda Atlassian'dan ham ishga taklif oldim Polshadagi jamoaga (Compass mahsuloti & jamoasi uchun), shunchaki qiziqishga topshirib ko'rgandim, o'xshab ketdi.
Olgan xulosalarimdan biri bu:
zo'r kopaniyada ishlashni emas, zo'r mahsulot ustida ishlashni tanlang, yutqazmaysiz. Yo'q degandan zerikmaysiz.
#experience
Bizning jamoa infrastrukturadagi dasturlarni maintain (qo'llab quvatlab turadi) qiladi. Ish boshlaganimdan 3 oy o'tib menga ham networking'da bir qiziq loyiha berildi va loyiha kodi asosan Rust'da yozilgan ekan (undan oldin asosan C++ da bo'lgan ekan yechim). Loyihani tushunib olishga va Rustga ko'nikishga biroz vaqt ketdi.
Loyiha maqsadi asosan kuniga bir necha ming terabaytlab ma'lumot almashadigan serverlar o'rtasida reliable (ishonchli) yechim qilish bo'lgan. Bu juda katta masshtabli loyiha. Loyihada socket connection, encoding/decoding, async support, va juda ko'p boshqa omillar ro'l o'ynashini juda qiziq dokumentatsiya qilib yozib chiqishgan ekan.
Ushbu loyiha uchun, Go GC (Garbage collector) bor tillardan xisoblangani uchun unda latency (kechikish) tez-tez uchragan ekan (GC spikes), ayniqsa uni grafana bilan monitoring qilganda juda bilindi. Xotiradan ishlatilmayotgan ma'lumotlar darhol o'chishini o'rniga GC ni uyg'onib xotirani scan qilishini kutadi va natijada latency baydo bo'ladi.
Rust meni lol qoldirgan tomoni bu CC (Concurrency Control) bo'ldi. Race condition dan Compile-time da qutilish imkoniyatini berar ekan. Yana bir tomoni Go'da Goroutine'lar runtime-managed, Rust esa sizga threading model tanlash va boshqarishni manually imkon beradi (o'z tabingizga qarab ishlatasiz degani). Data sharing bo'yicha ham Send va Sync yechimlari o'ta go'zal ishlagan, sizga resourslar aro ma'lumotni bo'lishishni ham o'zingiz tanlaysiz (o'zingiz boshqarasiz).
Rust'ni maqtash emas shunchaki undagi xotira bilan ishlash (Memory control) tizimi shunchalik yaxshi ishlaganini va nima uchun ayan Rust memory safe ekanligini qisman, aniqroq tushunib oldim deb o'ylayman.
Misol uchun Go dasturlash tilida mana bunday ish qilsangiz nimalar bo'ladi:
Hozir siz:
- gorutine'lar (map, slices, counters, ...) o'rtasida state share qildingiz
- Agar to'g'ri lock qila olmasangiz, data race yuzaga keladi.
- Channel buffer juda kichik bo'lsa, deadlock'ga sabab bo'ladi
- Goroutine leak bo'lsa, silent memory bloat (dastur siz o'ylagandan ko'ra ko'proq resurs yeyishni boshlaydi) sodir bo'ladi
Bunday ishlarni to'liq o'z nazoratingizga olishingiz uchun sizga low-level til kerak bo'ladi, misol uchun Rust yoki C++. O'sha loyihani 25-30% hali ham C++ da turadi, Rust'ni tanlashganini yana bir tomoni aynan o'sha modellarni extend (kengaytirib) qilib ishlatish bo'lgan bo'lsa kerak.
Post ancha uzunroq va sizga tushunarsizroq bo'lgan bo'lishi mumkin. Ammo xavotir olmang, otabek.io da bunday postlarni tushunishingiz uchun ko'proq soddaroq postlar yozishga harakat qilaman. Rust'ni doim ishlatmasakda ammo o'rganayabmiz sekin-asta. Shuning uchun xatolar bo'lsa tushunasiz deb o'ylayman.
Bizning jamoa infrastrukturadagi dasturlarni maintain (qo'llab quvatlab turadi) qiladi. Ish boshlaganimdan 3 oy o'tib menga ham networking'da bir qiziq loyiha berildi va loyiha kodi asosan Rust'da yozilgan ekan (undan oldin asosan C++ da bo'lgan ekan yechim). Loyihani tushunib olishga va Rustga ko'nikishga biroz vaqt ketdi.
Loyiha maqsadi asosan kuniga bir necha ming terabaytlab ma'lumot almashadigan serverlar o'rtasida reliable (ishonchli) yechim qilish bo'lgan. Bu juda katta masshtabli loyiha. Loyihada socket connection, encoding/decoding, async support, va juda ko'p boshqa omillar ro'l o'ynashini juda qiziq dokumentatsiya qilib yozib chiqishgan ekan.
Ushbu loyiha uchun, Go GC (Garbage collector) bor tillardan xisoblangani uchun unda latency (kechikish) tez-tez uchragan ekan (GC spikes), ayniqsa uni grafana bilan monitoring qilganda juda bilindi. Xotiradan ishlatilmayotgan ma'lumotlar darhol o'chishini o'rniga GC ni uyg'onib xotirani scan qilishini kutadi va natijada latency baydo bo'ladi.
Rust meni lol qoldirgan tomoni bu CC (Concurrency Control) bo'ldi. Race condition dan Compile-time da qutilish imkoniyatini berar ekan. Yana bir tomoni Go'da Goroutine'lar runtime-managed, Rust esa sizga threading model tanlash va boshqarishni manually imkon beradi (o'z tabingizga qarab ishlatasiz degani). Data sharing bo'yicha ham Send va Sync yechimlari o'ta go'zal ishlagan, sizga resourslar aro ma'lumotni bo'lishishni ham o'zingiz tanlaysiz (o'zingiz boshqarasiz).
Rust'ni maqtash emas shunchaki undagi xotira bilan ishlash (Memory control) tizimi shunchalik yaxshi ishlaganini va nima uchun ayan Rust memory safe ekanligini qisman, aniqroq tushunib oldim deb o'ylayman.
Misol uchun Go dasturlash tilida mana bunday ish qilsangiz nimalar bo'ladi:
go handleConnection(conn)
Hozir siz:
- gorutine'lar (map, slices, counters, ...) o'rtasida state share qildingiz
- Agar to'g'ri lock qila olmasangiz, data race yuzaga keladi.
- Channel buffer juda kichik bo'lsa, deadlock'ga sabab bo'ladi
- Goroutine leak bo'lsa, silent memory bloat (dastur siz o'ylagandan ko'ra ko'proq resurs yeyishni boshlaydi) sodir bo'ladi
Bunday ishlarni to'liq o'z nazoratingizga olishingiz uchun sizga low-level til kerak bo'ladi, misol uchun Rust yoki C++. O'sha loyihani 25-30% hali ham C++ da turadi, Rust'ni tanlashganini yana bir tomoni aynan o'sha modellarni extend (kengaytirib) qilib ishlatish bo'lgan bo'lsa kerak.
Post ancha uzunroq va sizga tushunarsizroq bo'lgan bo'lishi mumkin. Ammo xavotir olmang, otabek.io da bunday postlarni tushunishingiz uchun ko'proq soddaroq postlar yozishga harakat qilaman. Rust'ni doim ishlatmasakda ammo o'rganayabmiz sekin-asta. Shuning uchun xatolar bo'lsa tushunasiz deb o'ylayman.
Vohid aka yangi podcast chiqaribdilar.
Ularni aytishi bo’yicha, bu yigit eng yosh Seniorlardan emish. Siz ko’rishingiz kerak bo’lgan eng yaxshi podcast shu bo’lishi mumkin emish:
https://www.youtube.com/watch?v=UKUHx5P3ISk
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Podcast: FAANG, Computer Science, Chet elda ta'lim, Tajriba to'plash va Suniy intelekt
Keyingi podcast ishtirokchimiz Otabek Nurmuhammad. Otabek Polshaning Lodz universitetida Computer Science yo'nalishida o'qib Dropbox kompaniyasida Senior Software Engineer lavozimida ishlaydilar. Otabek bilan quyidagi qiziqarli mavzularni yoritdik:
00:00…
00:00…
otabek.io v2.0 🎉
- Podcast va Talklar uchun sahifa [Talks]
- Kodlarni yuritib ko'rish (execute) imkoniyati
- Yanada tezroq va interaktivroq
- Bloglar endi Ingliz va O'zbek tilida
Shunchaki blog o'qish va undagi kodlarni ko'rib o'tib ketish juda zerikarli. Ammo endi bunday bo'lmaydi. Sinab ko'ring😉
Sahifani yanada interaktive qilishga xissa qo'shing:
Tirikchilik | Buymeacoffee
- Podcast va Talklar uchun sahifa [Talks]
- Kodlarni yuritib ko'rish (execute) imkoniyati
- Yanada tezroq va interaktivroq
- Bloglar endi Ingliz va O'zbek tilida
Shunchaki blog o'qish va undagi kodlarni ko'rib o'tib ketish juda zerikarli. Ammo endi bunday bo'lmaydi. Sinab ko'ring
Sahifani yanada interaktive qilishga xissa qo'shing:
Tirikchilik | Buymeacoffee
Please open Telegram to view this post
VIEW IN TELEGRAM