Garbage Collection
Garbage collector odatda xotirani toza saqlash uchun kerak. U xuddi bir xizmatkorga o'xshaydi. Agar xonangizda keraksiz va ishlatilmaydigan narsalarni ko'rsangiz uni axlatga olib chiqib tashlaysiz. Xuddi shu ishni dasturlash tillarida Garbage Collectorlar bajaradi.
Hop Garbage collector qachon va qanday keraksiz object yoki data ni aniqlaydi?
Bu ishni amalga oshirish uchun inson qanday yo'l tutsa dastur ham deyarli o'shanday ish qiladi. Ya'ni reference count xisoblanadi. Inson biror narsani kim va necha marta ishlatishini ko'rib aniqlasa, dastur reference count xisoblaydi. Reference bu biror objectga yo'naltirilgan pointer ya'ni ko'rsatgich yo'l deb atasak bo'ladi.
Reference Count qanday ko'payadi yoki kamayadi?
Bilamizki biror o'zgaruvchi ochganimizda biz unga qiymat saqlamaymiz, balkim o'zgaruvchilar shunchaki bizni o'sha qiymatga kirishimiz uchun ko'rsatgich vazifasini o'taydi.
Bu huddi mahallada har bir nuqtaga odam qo'yib yashinmachoq o'ynashdek gap. Ya'ni qo'ygan odamlariz kim-qayerga ketganini ko'rsatib turadi va siz ko'p vaqt sarflamasdan ularni tez topishingiz mumkin (O(1) vaqtda desa ham bo'ladi 😅). O'zgaruvchilar ham shu vazifani bajaradi.
Qachon bir nechta o'zgaruvchi bitta object yoki dataga reference bo'lsa u yerda reference count oshadi. Agar ular keyin boshqa objectga reference qilinsa yoki o'chirib tashlansa, RC tushadi.
Misol uchun:
a = "hello" # "hello" objecti yaratildi va a unga reference bo'ldi
b = a # Ref. Count 1taga oshdi.
del a # Ref. Count 1taga tushdi
b = 17 # Ref. count 1taga kamaydi
Yuqoridagi misol Python dasturlash tiliga tegishli va u yerda reference count qachon oshishi va qachon tushishi ko'rsatilgan.
Kelin buni real ko'rish uchun mana bunday ish qilamiz. sys modulini getrefcount() funksiyasi bizga objectimiz nechta referencega egaligini ko'rishimiz mumkin. __del__() dunder methodi orqali esa object o'chirilganini ko'rishimiz mumkin, del statement objectni o'chirish uchun ishlatiladi.
@otabekswe
Garbage collector odatda xotirani toza saqlash uchun kerak. U xuddi bir xizmatkorga o'xshaydi. Agar xonangizda keraksiz va ishlatilmaydigan narsalarni ko'rsangiz uni axlatga olib chiqib tashlaysiz. Xuddi shu ishni dasturlash tillarida Garbage Collectorlar bajaradi.
Hop Garbage collector qachon va qanday keraksiz object yoki data ni aniqlaydi?
Bu ishni amalga oshirish uchun inson qanday yo'l tutsa dastur ham deyarli o'shanday ish qiladi. Ya'ni reference count xisoblanadi. Inson biror narsani kim va necha marta ishlatishini ko'rib aniqlasa, dastur reference count xisoblaydi. Reference bu biror objectga yo'naltirilgan pointer ya'ni ko'rsatgich yo'l deb atasak bo'ladi.
Reference Count qanday ko'payadi yoki kamayadi?
Bilamizki biror o'zgaruvchi ochganimizda biz unga qiymat saqlamaymiz, balkim o'zgaruvchilar shunchaki bizni o'sha qiymatga kirishimiz uchun ko'rsatgich vazifasini o'taydi.
Bu huddi mahallada har bir nuqtaga odam qo'yib yashinmachoq o'ynashdek gap. Ya'ni qo'ygan odamlariz kim-qayerga ketganini ko'rsatib turadi va siz ko'p vaqt sarflamasdan ularni tez topishingiz mumkin (O(1) vaqtda desa ham bo'ladi 😅). O'zgaruvchilar ham shu vazifani bajaradi.
Qachon bir nechta o'zgaruvchi bitta object yoki dataga reference bo'lsa u yerda reference count oshadi. Agar ular keyin boshqa objectga reference qilinsa yoki o'chirib tashlansa, RC tushadi.
Misol uchun:
a = "hello" # "hello" objecti yaratildi va a unga reference bo'ldi
b = a # Ref. Count 1taga oshdi.
del a # Ref. Count 1taga tushdi
b = 17 # Ref. count 1taga kamaydi
Yuqoridagi misol Python dasturlash tiliga tegishli va u yerda reference count qachon oshishi va qachon tushishi ko'rsatilgan.
Kelin buni real ko'rish uchun mana bunday ish qilamiz. sys modulini getrefcount() funksiyasi bizga objectimiz nechta referencega egaligini ko'rishimiz mumkin. __del__() dunder methodi orqali esa object o'chirilganini ko'rishimiz mumkin, del statement objectni o'chirish uchun ishlatiladi.
import sys
class MyClass:
def __init__(self):
print("Creating object")
def __del__(self):
print("Deleting object")
obj = MyClass()
print("Reference count:", sys.getrefcount(obj) - 1)
# Reference Coutni oshiramiz
obj2 = obj
print("Reference count:", sys.getrefcount(obj) - 1)
# obj2 referenceni o'chiramiz
del obj2
print("Reference count:", sys.getrefcount(obj) - 1)
# obj ni o'chiramiz
del obj
Umid qilaman qisqacha Garbage collection mavzusiga tushunib oldingiz deb. Keyingi postda chuqurroq yoritishga harakt qilaman. Xatolar bo'lsa oldindan uzur.@otabekswe
Classlar qanday yaratiladi?
Bir postga ko'zim tushib qoldi MetaClass haqida. Metaclassdan avval classlar qanday yaratilishi haqida qisqacha bo'lishib o'tmoqchiman.
type() orqali biz istalgan objectni turini tekshiramiz ammo aynan o'sha type() bizga class yaratib berishini bilarmidik?
Siz odatda classlarni shunday yaratasiz aslida esa orqa fonda boshqacha ishlar bo'ladi.
yuqorida ko'rsatilgan
1. Python classni tana qismidagi kodlarni string qilib oladi
2. Bo'sh bitta dictionary ochadi.
3. Va ularni type()ga berish orqali sizga typedan object qaytaradi.
Yana bir qoida "Pythonda hamma narsa object".
Keling endi amaliyotga o'tsak. 1-qadam:
class tanasi uchun class_body o'zgaruvchisini ochib oldik va tanasidagi kodni doc-string ichiga yozib oldik. 2-qadamga o'tamiz.
Classlardagi ma'lumotlar key value sifatida saqlanadi shuning uchun class_dict ochildi. 3-qadam
endi class_bodydagi elementlarni class_dict ga o'tkazish uchun python standart exec() dan foydalanamiz. Bu shunchaki string shakldagi kodni ishga tushirib beradi.
Endi class_dict ni print qilib ko'rsangiz ajoyib narsa ko'rasiz. Hop ammo keling keyingi qadam klass yaratishga o'tamiz. 3-qadam:
VOILA! Class tayyor. Endi
Qisqacha shunday ishlar bo'ladi ammo siz traditional yo'ldan yuravering bu ish sal bosh og'riqrog'u ammo endi bilasiz ular qanday yaratilishini.
@otabekswe
Bir postga ko'zim tushib qoldi MetaClass haqida. Metaclassdan avval classlar qanday yaratilishi haqida qisqacha bo'lishib o'tmoqchiman.
type() orqali biz istalgan objectni turini tekshiramiz ammo aynan o'sha type() bizga class yaratib berishini bilarmidik?
class Dog:
def __init__(self, name: str) -> None:
self.name = name
Siz odatda classlarni shunday yaratasiz aslida esa orqa fonda boshqacha ishlar bo'ladi.
type(Dog)
desangiz u <class 'type'>
classini objecti ekanligini ko'rishiz mumkin. Endi keling nimagaligni tushuntiray. Siz tepadagi traditional yo'l bilan class yaratganingizda u yerda mana bu narsalar bo'ladi.class Dog(object, metaclass=type):
def __init__(self, name: str) -> None:
self.name = name
yuqorida ko'rsatilgan
inheritance
va metaclass
qismlarini siz tashlab ketasiz ammo python uni run timeda shunday olib ketadi by default. Keling bu nima uchun undayligini gaplashsak. Qadamlarga bo'lamiz:1. Python classni tana qismidagi kodlarni string qilib oladi
2. Bo'sh bitta dictionary ochadi.
3. Va ularni type()ga berish orqali sizga typedan object qaytaradi.
Yana bir qoida "Pythonda hamma narsa object".
Keling endi amaliyotga o'tsak. 1-qadam:
class_body = '''
def __init__(self, name: str) -> None:
self.name = name
'''
class tanasi uchun class_body o'zgaruvchisini ochib oldik va tanasidagi kodni doc-string ichiga yozib oldik. 2-qadamga o'tamiz.
class_dict = {}
Classlardagi ma'lumotlar key value sifatida saqlanadi shuning uchun class_dict ochildi. 3-qadam
endi class_bodydagi elementlarni class_dict ga o'tkazish uchun python standart exec() dan foydalanamiz. Bu shunchaki string shakldagi kodni ishga tushirib beradi.
exec(class_dict globals(), class_body)
Endi class_dict ni print qilib ko'rsangiz ajoyib narsa ko'rasiz. Hop ammo keling keyingi qadam klass yaratishga o'tamiz. 3-qadam:
Dog = type('Dog', (object,), class_dict)
VOILA! Class tayyor. Endi
Person
dan object yaratishingiz mumkin. Keling kodlarni jamlaymiz:class_body = '''
def __init__(self, name: str) -> None:
self.name = name
'''
class_dict = {}
exec(class_body, globals(), class_dict)
Dog = type('Dog', (object,), class_dict)
bobik = Dog('Bobik')
print(bobik)
print(bobik.name)
Qisqacha shunday ishlar bo'ladi ammo siz traditional yo'ldan yuravering bu ish sal bosh og'riqrog'u ammo endi bilasiz ular qanday yaratilishini.
@otabekswe
🎉MusicCLI🎧
Endi musiqalarni shunchaki terminaldan qidiring va yuklab oling.
Uni qanday ishlataman?
Juda oddiy:
U sizga musiqa listini taqdim qiladi.
Siz biror musiqani tanlaysiz va uni Desktopda ko'rishingiz mumkin!
Version: 1.1.1
@otabekswe
Endi musiqalarni shunchaki terminaldan qidiring va yuklab oling.
Uni qanday ishlataman?
Juda oddiy:
pip install musiccli
python -m musiccli <Musiqani yozasiz>
U sizga musiqa listini taqdim qiladi.
Siz biror musiqani tanlaysiz va uni Desktopda ko'rishingiz mumkin!
Version: 1.1.1
@otabekswe
🥳 MusicCLI 1.2.0 🎧
⌚ Qulay va tezkroq
🎵 Milliondan ortiq musiqalar
💊 Xatoliklar tuzatildi!
Endi siz MusicCLI 1.2.0 da ko'plab musiqalarni oson, qulay va tezkor qidirishingiz mumkin!
O'rnatish uchun:
Ishlatish uchun:
To'liqroq ma'lumot va o'rnatish uchun bu yerga kiring
Loiha yoqgan bo'lsa uni qo'llab quvatlash uchun githubda star bosib qo'ying!
@otabekswe
⌚ Qulay va tezkroq
🎵 Milliondan ortiq musiqalar
💊 Xatoliklar tuzatildi!
Endi siz MusicCLI 1.2.0 da ko'plab musiqalarni oson, qulay va tezkor qidirishingiz mumkin!
O'rnatish uchun:
curl -sSL https://raw.githubusercontent.com/otabeknurmatov/MusicCLI/main/install.sh | bash
Ishlatish uchun:
mcli Shawn Mendes
To'liqroq ma'lumot va o'rnatish uchun bu yerga kiring
Loiha yoqgan bo'lsa uni qo'llab quvatlash uchun githubda star bosib qo'ying!
@otabekswe
Qiziqib ko'ring
O'zingiz ishlatadigan dasturlash tillini yaxshi bilishingiz eng muhim narsalardan biri, chunki ish qurolingizni qayerida nima kamchiligi bor yoki ustunligi bor bu sizni ancha ishizni yengillashtiradi. Qayerda nimani qo'llay olishni bilishlik bu tajriba degani o'zi aslida.
Misol uchun sizga kimdir Pythonda string methodlari orasidan
Bunday savollarga tayyor turishni bir yo'li o'zingiz ishlatadigan dasturlash tilidagi siz doim ishlatadigan funksiya yoki classlarni o'zingiz yasab ko'rishingizdir.
Bularni qanchalik yaxshi bilsangiz, qaysi birini qayerda qo'llasangiz qanday foyda yoki zarar borligini bilasiz. Kimdir aytganidek "To'g'ri data structure tanlash muammoni 50% yechadi, qolgan 50% ni esa Algorithm" 😉.
Siz ishlatadigan barcha narsalar o'zi aslida shu tushunchalar ustiga qurilgan, ularni o'rganing va kashf qiling.
@otabekswe
O'zingiz ishlatadigan dasturlash tillini yaxshi bilishingiz eng muhim narsalardan biri, chunki ish qurolingizni qayerida nima kamchiligi bor yoki ustunligi bor bu sizni ancha ishizni yengillashtiradi. Qayerda nimani qo'llay olishni bilishlik bu tajriba degani o'zi aslida.
Misol uchun sizga kimdir Pythonda string methodlari orasidan
lower()
yoki upper()
ni shu methodlarsiz yasab bera olasizmi desa nima qilasiz. Yokida JavaScriptdagi Array bilan Computer Sciencedagi Array o'rtasida nima farq bor desachi.Bunday savollarga tayyor turishni bir yo'li o'zingiz ishlatadigan dasturlash tilidagi siz doim ishlatadigan funksiya yoki classlarni o'zingiz yasab ko'rishingizdir.
Bularni qanchalik yaxshi bilsangiz, qaysi birini qayerda qo'llasangiz qanday foyda yoki zarar borligini bilasiz. Kimdir aytganidek "To'g'ri data structure tanlash muammoni 50% yechadi, qolgan 50% ni esa Algorithm" 😉.
Siz ishlatadigan barcha narsalar o'zi aslida shu tushunchalar ustiga qurilgan, ularni o'rganing va kashf qiling.
@otabekswe
This media is not supported in your browser
VIEW IN TELEGRAM
🥳Yaxshi va yomon xabar!🥲
18-May kuni Yandexdan job offer oldim Software Engineer G14 positionga, bollar biz yutdik. Ammo buni ketidan yomon xabar ham bor.
Bu offerni rejact qilishga to'g'ri keldi, hozirgi vaziyatdan kelib chiqib. Ota-onam ham bunga qarshilik qilishdi ...🥲
Ammo bu ham bizga bir tajriba bo'ldi va yaxshilikga. Hali hammasi oldinda.
Sababini qiling va ko'proq o'z ustingizda ishlang. Trust the process.
Interview process haqida post yozaymi?
@otabekswe
18-May kuni Yandexdan job offer oldim Software Engineer G14 positionga, bollar biz yutdik. Ammo buni ketidan yomon xabar ham bor.
Bu offerni rejact qilishga to'g'ri keldi, hozirgi vaziyatdan kelib chiqib. Ota-onam ham bunga qarshilik qilishdi ...🥲
Ammo bu ham bizga bir tajriba bo'ldi va yaxshilikga. Hali hammasi oldinda.
Sababini qiling va ko'proq o'z ustingizda ishlang. Trust the process.
Interview process haqida post yozaymi?
@otabekswe
DSA-Camp
Bugundan DSA-CAMP loihasiga start berdik. Bu loiha sizga Data Structure va Algorithm bilimlaringizni mustahkamlashda oz bo'lsa ham xissa qo'shadi degan umiddamiz.
Loiha davomida sizlar bilan DSAga doir turli xil bilim va ko'nikmalar ortiramiz, leetcode, codewars va codeforse dan muammolarni yechishni o'rganamiz.
Loihada qatnashish uchun quyidagi havola orqali o'zingizga qulay dasturlash tilini tanlang va berilgan muammolarni yeching.
Ro'yxatdan o'tishda google accountingizdan foydalanishingiz mumkin. Iltimos ism va familya degan joyga to'liq ismingiz va familyangizni kiritsangiz.
1-bosqich 3-iyun kuni tugatiladi.
2-bosqich shartlari 5-iyun kuni e'lon qilinadi.
Hammaga omad, bollar biz yutamiz!
Havola: DSA-CAMP
@unotech_log
Bugundan DSA-CAMP loihasiga start berdik. Bu loiha sizga Data Structure va Algorithm bilimlaringizni mustahkamlashda oz bo'lsa ham xissa qo'shadi degan umiddamiz.
Loiha davomida sizlar bilan DSAga doir turli xil bilim va ko'nikmalar ortiramiz, leetcode, codewars va codeforse dan muammolarni yechishni o'rganamiz.
Loihada qatnashish uchun quyidagi havola orqali o'zingizga qulay dasturlash tilini tanlang va berilgan muammolarni yeching.
Ro'yxatdan o'tishda google accountingizdan foydalanishingiz mumkin. Iltimos ism va familya degan joyga to'liq ismingiz va familyangizni kiritsangiz.
1-bosqich 3-iyun kuni tugatiladi.
2-bosqich shartlari 5-iyun kuni e'lon qilinadi.
Hammaga omad, bollar biz yutamiz!
Havola: DSA-CAMP
@unotech_log
Paradigms
Nima uchun paradigmalar ko'p degan savolga to'xtaladigan bo'lsak, chunki har bir paradigma qandaydir principle ni ilg'or suradi yokida qaysidir turdagi muammolarni yechishga ko'proq focus qaratadi. Misol uchun...
OOP:
keng, mashxur taralgan va deyarli ko'plab dasturlash tillari support qiladi. OOP qanday muammoni yechadi degan savolga qisqacha to'xtalsak, u siz qilmoqchi bo'lgan loihaga dasturlash tomonlama emas, balkim oddiy object sifatida qarashingizga imkon beradi.
Functional Programming:
Keng va ko'p ishlatiladiganlaridan xisoblanadi. Uning asosiy g'oyasi Functional Decomposition. Katta muammoga boricha emas balkim uni bo'laklarga bo'lish orqali qarashni ilg'or suradi. Misol uchun kir moshinani biror rejimga qo'yib kiringizni solib start bosdingiz, u har bir operatsiya uchun specific functinolarni ishlatadi, suv tortish, barabanni aylantirish va kirni siqish. Bu yerda ularning yig'indisi sizga bir mahsulotni taqdim etayabdi. Bu "easy to scale and maintain" dastur yasash imkonini beradi.
Parallel yoki concurrent programming:
Hozirda juda keng tarqalgan paradigma desak mubolag'a bo'lmaydi. Bu ikkisini bir xil deydiganlar ham topiladi. Ammo "parallelism" tushunchasi ikki va undan ortiq tasklarni bir vaqtda ishlashi bildirsa, "concurrency" bir nechta tasklarni noma'lum tartib va vaqtda boshlanib, ustida amallar qilib va tugashini bildiradi. Ovqatlanayotganda nonni tishlab uni yutishga ulgurmasdan choy xo'playsiz bu yerda concurrency ishlayabdi sizda, ammo uydagilar bilan gaplashib savuz to'g'rasangiz bu parallelism bo'ladi chunki ikki ishni bir vaqtda bajarayabsiz. Bu shunchaki sizda tushunchani uyg'otish uchun beirlgan misol bo'ldi ammo dasturlash tomonlama qaralganda 100% to'g'ri kelmaydi. Ular o'xshash ammo bir xil emas.
Yaxshi ular haqida qisqacha gaplashdik keling endi ulardagi kamchliklarni ham gaplashsak.
OOP:
OOP muammolarga object sifatida qarashni ilg'or suradi ammo biz uchratadigan muammolar doim ham object bo'lmasligi aniq. Misol uchun matematik formulalar va ko'plab misollarni olishimiz mumkin. Ular uchun class yaratish shunchaki kodni ko'paytirib ishni sekinlashtiradi. Joe Armstrong akani gapiga qo'shilaman
Functional Programming:
Oddiy va qulay ko'ringani bilan hamma muammoga yechim bo'la olmaydi. Agarda siz "action" o'yin yaratmoqchi bo'lsagniz siz uchun functional programming zo'r yechim emas. Bu yerda sizga OOP yordamga keladi. Chunki har bir personaj uchun specifi method va attribute berilish kerak. Ularni faqat method ya'ni functionlar bilan qilish ishni yanada chigallashtiradi.
Parallel yoki concurrent programming:
Bu ham ko'plab muammolarga yechim sifatida ko'rilishi mumkin ammo bu hamma muammo uchun yechim bo'la olmaydi. "Concurrency"da asosan shared memory bo'yicha ko'plab muammolar bo'lishi mumkin. Bu esa race condition keltirib chiqaradi. Ya'niki ikkita odam bitta xojatxonadan bir vaqtda foydalanmoqchi bo'lganidek gap. "Concurrency" single process, multi thread bo'lgani uchun ham ikki thread ham o'sha qiymat ustida qandaydir amal bajaradi. Ular kim oxiri qiymat yozish poygasini o'ynaydi. Kim oxiri bo'lib o'sha variableni o'zgartirgan bo'lsa demak o'shaniki qoladi. Bu yerda yana boshqa muammolar ham bor ularni qidirib o'rganib chiqishingiz mumkin.
"Parallelism"da esa muammo ba'zi ishlar step-by-step ishlashi talab qilinishi mumkin. Ya'ni sonni asosini topib olmaguncha uni ustida amal bajarish noto'g'ri calculationga olib kelish ehtimoli bor bu yerda u eng yomon yechim bo'lishi aniq. Yana ba'zi muammolar bu yerda synchronizing, locks, semaphores lar bilan ham uchraydi. Ularni google qilib ko'rishingiz mumkin )
Bu postdan olinadigan xulosa 2ta:
1. Hech qachon paradigmani dasturlash tiliga 100% bog'lamang, ular hech qachon 100% bir xil bo'la olmalik ehtimoli juda katta. Ba'zi holatlar bo'lishi mumkin.
2. Hech bir paradigma universal emas. Har xil muammo bo'lganidek ularga yechimlar ham har xil.
P.S: Xatolar bo'lsa uzur )
@otabekswe
Nima uchun paradigmalar ko'p degan savolga to'xtaladigan bo'lsak, chunki har bir paradigma qandaydir principle ni ilg'or suradi yokida qaysidir turdagi muammolarni yechishga ko'proq focus qaratadi. Misol uchun...
OOP:
keng, mashxur taralgan va deyarli ko'plab dasturlash tillari support qiladi. OOP qanday muammoni yechadi degan savolga qisqacha to'xtalsak, u siz qilmoqchi bo'lgan loihaga dasturlash tomonlama emas, balkim oddiy object sifatida qarashingizga imkon beradi.
Functional Programming:
Keng va ko'p ishlatiladiganlaridan xisoblanadi. Uning asosiy g'oyasi Functional Decomposition. Katta muammoga boricha emas balkim uni bo'laklarga bo'lish orqali qarashni ilg'or suradi. Misol uchun kir moshinani biror rejimga qo'yib kiringizni solib start bosdingiz, u har bir operatsiya uchun specific functinolarni ishlatadi, suv tortish, barabanni aylantirish va kirni siqish. Bu yerda ularning yig'indisi sizga bir mahsulotni taqdim etayabdi. Bu "easy to scale and maintain" dastur yasash imkonini beradi.
Parallel yoki concurrent programming:
Hozirda juda keng tarqalgan paradigma desak mubolag'a bo'lmaydi. Bu ikkisini bir xil deydiganlar ham topiladi. Ammo "parallelism" tushunchasi ikki va undan ortiq tasklarni bir vaqtda ishlashi bildirsa, "concurrency" bir nechta tasklarni noma'lum tartib va vaqtda boshlanib, ustida amallar qilib va tugashini bildiradi. Ovqatlanayotganda nonni tishlab uni yutishga ulgurmasdan choy xo'playsiz bu yerda concurrency ishlayabdi sizda, ammo uydagilar bilan gaplashib savuz to'g'rasangiz bu parallelism bo'ladi chunki ikki ishni bir vaqtda bajarayabsiz. Bu shunchaki sizda tushunchani uyg'otish uchun beirlgan misol bo'ldi ammo dasturlash tomonlama qaralganda 100% to'g'ri kelmaydi. Ular o'xshash ammo bir xil emas.
Yaxshi ular haqida qisqacha gaplashdik keling endi ulardagi kamchliklarni ham gaplashsak.
OOP:
OOP muammolarga object sifatida qarashni ilg'or suradi ammo biz uchratadigan muammolar doim ham object bo'lmasligi aniq. Misol uchun matematik formulalar va ko'plab misollarni olishimiz mumkin. Ular uchun class yaratish shunchaki kodni ko'paytirib ishni sekinlashtiradi. Joe Armstrong akani gapiga qo'shilaman
Functional Programming:
Oddiy va qulay ko'ringani bilan hamma muammoga yechim bo'la olmaydi. Agarda siz "action" o'yin yaratmoqchi bo'lsagniz siz uchun functional programming zo'r yechim emas. Bu yerda sizga OOP yordamga keladi. Chunki har bir personaj uchun specifi method va attribute berilish kerak. Ularni faqat method ya'ni functionlar bilan qilish ishni yanada chigallashtiradi.
Parallel yoki concurrent programming:
Bu ham ko'plab muammolarga yechim sifatida ko'rilishi mumkin ammo bu hamma muammo uchun yechim bo'la olmaydi. "Concurrency"da asosan shared memory bo'yicha ko'plab muammolar bo'lishi mumkin. Bu esa race condition keltirib chiqaradi. Ya'niki ikkita odam bitta xojatxonadan bir vaqtda foydalanmoqchi bo'lganidek gap. "Concurrency" single process, multi thread bo'lgani uchun ham ikki thread ham o'sha qiymat ustida qandaydir amal bajaradi. Ular kim oxiri qiymat yozish poygasini o'ynaydi. Kim oxiri bo'lib o'sha variableni o'zgartirgan bo'lsa demak o'shaniki qoladi. Bu yerda yana boshqa muammolar ham bor ularni qidirib o'rganib chiqishingiz mumkin.
"Parallelism"da esa muammo ba'zi ishlar step-by-step ishlashi talab qilinishi mumkin. Ya'ni sonni asosini topib olmaguncha uni ustida amal bajarish noto'g'ri calculationga olib kelish ehtimoli bor bu yerda u eng yomon yechim bo'lishi aniq. Yana ba'zi muammolar bu yerda synchronizing, locks, semaphores lar bilan ham uchraydi. Ularni google qilib ko'rishingiz mumkin )
Bu postdan olinadigan xulosa 2ta:
1. Hech qachon paradigmani dasturlash tiliga 100% bog'lamang, ular hech qachon 100% bir xil bo'la olmalik ehtimoli juda katta. Ba'zi holatlar bo'lishi mumkin.
2. Hech bir paradigma universal emas. Har xil muammo bo'lganidek ularga yechimlar ham har xil.
P.S: Xatolar bo'lsa uzur )
@otabekswe
#InterviewQuestions
Networking o'rganish qanchalik muhim degan savollarga tez-tez ko'zim tushadi.
Shaxsan o'zim Frontendchi ham Backendchi ham o'rganishi muhim deb bilaman.
Shaxsan o'zimda 6 ta interviewda quyidagi savollar tushganini aniq ayta olaman.
🔸 How DNS works?
🔸 Can you tell me what is the differences between Web Server vs Application Server?
🔸 What is Nginx? How it works?
🔸 Why use a single domain for the Backend and the Frontend?
Bu savollarga qanchalik yaxshi javob bera olasiz, o'zingizni sinab ko'ring.
Discussion ochiq deb e'lon qilaman )
Networking o'rganish qanchalik muhim degan savollarga tez-tez ko'zim tushadi.
Shaxsan o'zim Frontendchi ham Backendchi ham o'rganishi muhim deb bilaman.
Shaxsan o'zimda 6 ta interviewda quyidagi savollar tushganini aniq ayta olaman.
🔸 How DNS works?
🔸 Can you tell me what is the differences between Web Server vs Application Server?
🔸 What is Nginx? How it works?
🔸 Why use a single domain for the Backend and the Frontend?
Bu savollarga qanchalik yaxshi javob bera olasiz, o'zingizni sinab ko'ring.
Discussion ochiq deb e'lon qilaman )
Media is too big
VIEW IN TELEGRAM
#ChromeTabs
Deyarli ko'p dasturchilardagi muammoga ozgina yengillik bo'lishi uchun qisqa tutorial.
Bilmgan bo'lsangiz foydali bo'ldi deb o'ylayman.
Share qilishingiz mumkin )
@otabekswe
Deyarli ko'p dasturchilardagi muammoga ozgina yengillik bo'lishi uchun qisqa tutorial.
Bilmgan bo'lsangiz foydali bo'ldi deb o'ylayman.
Share qilishingiz mumkin )
@otabekswe
Tajriba != Yillar
Shu paytgacha juda ko’p postlar, e’lonlar va open vacancy larni ko’rdim. Deyarli barchasida yillar bilan tajribani berib ketishadi.
Orasida ba’zailariga topshirib ham ko’rdim. 75% laridan job offer qolganlaridan reject oldim. Menga bu nimani o’rgatdi?
Tajriba yillar bilan emas amaliyotlar bilan o’lchanishini o’rgandim. Agar sizda yillik tajriba kam ammo zo’r loihalarda yaxshi ishlar, amaliyotlar va yechimlar qilgan bo’lsangiz bunday ishlarga topshirishdan qo’rqmang.
Epamda 4 ta odamni taniyman, yaqindan suxbat qilib turaman. Ularni ichida 2 yilda Team Lead bo’lganiniyu 2 yildan beri Senior bo’la olmayotganini ham taniyman.
Tajriba yilda emas doim amaliyotlarda o’lchanadi. Qilayotgan ishingiz qancha mashaqqatli va katta bo’lsa, beradigan tajribasi ham shuncha bo’ladi.
Bollar biz yutamiz!
@otabekswe
Shu paytgacha juda ko’p postlar, e’lonlar va open vacancy larni ko’rdim. Deyarli barchasida yillar bilan tajribani berib ketishadi.
Orasida ba’zailariga topshirib ham ko’rdim. 75% laridan job offer qolganlaridan reject oldim. Menga bu nimani o’rgatdi?
Tajriba yillar bilan emas amaliyotlar bilan o’lchanishini o’rgandim. Agar sizda yillik tajriba kam ammo zo’r loihalarda yaxshi ishlar, amaliyotlar va yechimlar qilgan bo’lsangiz bunday ishlarga topshirishdan qo’rqmang.
Epamda 4 ta odamni taniyman, yaqindan suxbat qilib turaman. Ularni ichida 2 yilda Team Lead bo’lganiniyu 2 yildan beri Senior bo’la olmayotganini ham taniyman.
Tajriba yilda emas doim amaliyotlarda o’lchanadi. Qilayotgan ishingiz qancha mashaqqatli va katta bo’lsa, beradigan tajribasi ham shuncha bo’ladi.
Bollar biz yutamiz!
@otabekswe
Dasturchilar uchun 3 maslahat:
1. Chala qilishdan qilmagan avfzalroq, qadringiz va shaningizni saqlab qolasiz.
2. Qadringizni ko'p bilim emas katta tajriba oshiradi. Ko'p bilib qila olmaydiganlarni soni juda ko'p va ular hozir deyarli hech kimga kerak emas.
3. Faqat bir narsaga fokus qarating. JS o'rganayabsizmi faqat JS ni yaxshilab o'rganib ko'p amaliyot qiling.
Shaxsan o'zimda juda ko'p foyda keltirgan.
P.S: 2 va 3 Seniorlar va menejerlarimdan ko'p eshitganman.
@otabekswe
1. Chala qilishdan qilmagan avfzalroq, qadringiz va shaningizni saqlab qolasiz.
2. Qadringizni ko'p bilim emas katta tajriba oshiradi. Ko'p bilib qila olmaydiganlarni soni juda ko'p va ular hozir deyarli hech kimga kerak emas.
3. Faqat bir narsaga fokus qarating. JS o'rganayabsizmi faqat JS ni yaxshilab o'rganib ko'p amaliyot qiling.
Shaxsan o'zimda juda ko'p foyda keltirgan.
P.S: 2 va 3 Seniorlar va menejerlarimdan ko'p eshitganman.
@otabekswe
DSA Camp yohud bularni o'rganishdan nima foyda?
Dasturlashga yangi kirib kelayotgan deyarli 90% odamlar high-level dasturlash tillarida ishlashadi. Ularda deyarli barcha ishlar avtomatlashtirilgan va boshqalar uchun ko'plab imkoniyatlar abstraklashtirilgan. Bu narsa bizga ikki xil ta'sir qiladi, yo biz tayyor narsalarga o'rganib dangasa bo'lib qolamiz yo bunday narsalarni qanday ishlashiga qiziqib ular haqida o'rganib chiqamiz.
Misol uchun Nginx Tree (Radix tree)ni route matching va request dispatching maqsadida ishlatadi. Yokida Elasticsearch Balanced search tree (AVL tree)ni indekslash va ma'lumotlarni sortlash uchun ishlatadi. Bunday texnologiylarni juda ko'plab misollar bilan keltirish mumkin.
Algoritmlar va Data Structurelarni o'rganishdan maqsad faqat interviewdan muvaffaqiyatli o'tish emas balkim qilayotgan ishingizda siz ishlatadigan texnologiya inefficient bo'lib qolsa uning o'rniga to'g'ri va efficient yechim bera olishingiz bo'lishi ham kerak.
Siz ishlatayotgan barcha narsalarni asosi aslida shu tushunchalar va bilimlar asosida qurilganini tushunib yetishingiz shart. Hamma qurol ishlatishi mumkin ammo hamma ham qurol yasay olmaydi.
@otabekswe
Dasturlashga yangi kirib kelayotgan deyarli 90% odamlar high-level dasturlash tillarida ishlashadi. Ularda deyarli barcha ishlar avtomatlashtirilgan va boshqalar uchun ko'plab imkoniyatlar abstraklashtirilgan. Bu narsa bizga ikki xil ta'sir qiladi, yo biz tayyor narsalarga o'rganib dangasa bo'lib qolamiz yo bunday narsalarni qanday ishlashiga qiziqib ular haqida o'rganib chiqamiz.
Misol uchun Nginx Tree (Radix tree)ni route matching va request dispatching maqsadida ishlatadi. Yokida Elasticsearch Balanced search tree (AVL tree)ni indekslash va ma'lumotlarni sortlash uchun ishlatadi. Bunday texnologiylarni juda ko'plab misollar bilan keltirish mumkin.
Algoritmlar va Data Structurelarni o'rganishdan maqsad faqat interviewdan muvaffaqiyatli o'tish emas balkim qilayotgan ishingizda siz ishlatadigan texnologiya inefficient bo'lib qolsa uning o'rniga to'g'ri va efficient yechim bera olishingiz bo'lishi ham kerak.
Siz ishlatayotgan barcha narsalarni asosi aslida shu tushunchalar va bilimlar asosida qurilganini tushunib yetishingiz shart. Hamma qurol ishlatishi mumkin ammo hamma ham qurol yasay olmaydi.
@otabekswe
This media is not supported in your browser
VIEW IN TELEGRAM
Interviewni buzib tashlashni istaysizmi?
Istalgan savolga javob berishni istaysizmi?
Unda HashMap ni o’rganing.
Qayerdan qanday deysizmi?
Mana: https://youtu.be/JaUBDrCu6B4
@otabekswe
Istalgan savolga javob berishni istaysizmi?
Unda HashMap ni o’rganing.
Qayerdan qanday deysizmi?
Mana: https://youtu.be/JaUBDrCu6B4
@otabekswe
Balkim qiziqdir
Oldinlar barcha korxona va kompaniyalar mijozlar ma'lumotlarini saqlash uchun oddiy fayllardan foydalanishgan va buni "File-Based System" deb atashadi. Ammo bu yondashuvda juda ko'p muammolar yuzaga keladi.
1. Data redundancy - Universitet, Universitet yotoqxonasi va Sport Zalni olaylik. Ushbu 3 tizim ham ma'lumotlarni .txt (yoki boshqa) fayllarda saqlaydi. Ba'zi ma'lumotlar barchasida bir xil misol uchun 3 tomondagi kompyuterda sizni ismingiz, familyangiz, id raqamingiz va telefon raqamingiz bor va undan tashqari o'zlari bir-biriga tegishli bo'lmagan ma'lumotlarni saqlaydi. Ko'p gapirmay qisqa qilsak, bitta siz uchun 3taraf ham alohida fayl ochadi va bitta odam uchun 3ta ma'lumot bo'ladi. Bu esa ortiqcha ma'lumot muammosini olib keladi.
2. Data inconsistency - O'sha 3 tizimni olamiz. Nimadir bo'lib telefoningizni yo'qotdingiz. Yangi raqam va telefon oldingiz. Agar siz o'sha ular bilan doimiy aloqani ushlashni hohlasangiz 3 tomonga borib ma'lumotlarni yangilashini aytishingiz kerak bo'ladi. Bu esa inconsistent.
3. Difficult data access - Sizga o'xshagan nechta o'quvchi bor. Endi ular uchun ham fayllar ochilgan. Biror o'quvchini ma'lumotini ko'rish uchun uni ma'lumoti qayerdaligini bilmasa bormi... ehh qancha vaqt uvol. Bu ham bir muammo.
4. Security problems - Oddiy fayllar unauthorized access muammosini keltirib chiqaradi. Ya'ni kompyuteringizga kira olgan odam ma'lumotlarga ham kira oladi va o'zgartira oladi. Easy peasy.
5. Difficult concurrent access - Bir nechta o'quvchilar bir vaqtda o'zlarini ma'lumotlarini ko'ra olishmaydi va bu ham katta muammo.
Xullas aynan shu muammolarni oldini olish uchun DBMS ya'ni Data Base Management System ishlab chiqilgan. Shuning uchun ham buni oddiy Data Base deb emas Management System bilan qo'shib aytishadi. O'sha management system sizga authorization, consistency, accessibility imkoniyatlarini beradi.
P.S: Post shunchaki hikoya o'qish uchun yozildi 😉
@otabekswe
Oldinlar barcha korxona va kompaniyalar mijozlar ma'lumotlarini saqlash uchun oddiy fayllardan foydalanishgan va buni "File-Based System" deb atashadi. Ammo bu yondashuvda juda ko'p muammolar yuzaga keladi.
1. Data redundancy - Universitet, Universitet yotoqxonasi va Sport Zalni olaylik. Ushbu 3 tizim ham ma'lumotlarni .txt (yoki boshqa) fayllarda saqlaydi. Ba'zi ma'lumotlar barchasida bir xil misol uchun 3 tomondagi kompyuterda sizni ismingiz, familyangiz, id raqamingiz va telefon raqamingiz bor va undan tashqari o'zlari bir-biriga tegishli bo'lmagan ma'lumotlarni saqlaydi. Ko'p gapirmay qisqa qilsak, bitta siz uchun 3taraf ham alohida fayl ochadi va bitta odam uchun 3ta ma'lumot bo'ladi. Bu esa ortiqcha ma'lumot muammosini olib keladi.
2. Data inconsistency - O'sha 3 tizimni olamiz. Nimadir bo'lib telefoningizni yo'qotdingiz. Yangi raqam va telefon oldingiz. Agar siz o'sha ular bilan doimiy aloqani ushlashni hohlasangiz 3 tomonga borib ma'lumotlarni yangilashini aytishingiz kerak bo'ladi. Bu esa inconsistent.
3. Difficult data access - Sizga o'xshagan nechta o'quvchi bor. Endi ular uchun ham fayllar ochilgan. Biror o'quvchini ma'lumotini ko'rish uchun uni ma'lumoti qayerdaligini bilmasa bormi... ehh qancha vaqt uvol. Bu ham bir muammo.
4. Security problems - Oddiy fayllar unauthorized access muammosini keltirib chiqaradi. Ya'ni kompyuteringizga kira olgan odam ma'lumotlarga ham kira oladi va o'zgartira oladi. Easy peasy.
5. Difficult concurrent access - Bir nechta o'quvchilar bir vaqtda o'zlarini ma'lumotlarini ko'ra olishmaydi va bu ham katta muammo.
Xullas aynan shu muammolarni oldini olish uchun DBMS ya'ni Data Base Management System ishlab chiqilgan. Shuning uchun ham buni oddiy Data Base deb emas Management System bilan qo'shib aytishadi. O'sha management system sizga authorization, consistency, accessibility imkoniyatlarini beradi.
P.S: Post shunchaki hikoya o'qish uchun yozildi 😉
@otabekswe
What is Data?
Data Base haqida yozishdan oldin data haqida ham to'xtalishni istadim, chunki bu haqida hech ma'lumot uchratmadim.
Data turli xil formatdagi ma'lumotning ko'rinishi misol uchun: text, audio, video, photo, bytes, number, va h.k.z bo'lishi mumkin. Ko'rib turibsizki ularni barchasi bir xil turdagi ma'lumot emas va bir-biridan tubdan farq qiladi. Keling 3 xil data haqida gaplashib o'tsak.
1.Structured data - oldindan qandaydir maxsus tuzilmalar asosida tuzilgan ma'lumotlar bo'lib, search, analyze, sort va format qilish uchun qulaylashitirlgan bo'ladi. Bunday ma'lumotlar quantitive ya'ni cheklangan (xajmda, typeda va e.t.c.) bo'lishadi.
Misol uchun: SQLda saqlaydigan ma'lumotlarimiz ham aynan shu turga kiradi. Shuning uchun ham SQL ni Structured Query Language deb atashgan. Ularga ma'lumot kiritishda type, size va restriction (constraint) kiritishingiz kerak bo'ladi.
2.Unstructured data - bunday turdagi ma'lumotlar qualitative data ya'ni sifatli ma'lumotlar turkumiga kiradi, uni oddiy toollar va methodlar yordamida protseslash va analyze qilishni imkoni yo'q.
Misol uchun: audio, video, photo, blog postlar va h.k.z larni kiritish mumkin. Xattoki oddiy twitter posti ham unstructured data xisoblanadi. Biz unga hashtaglar, user mention, emoji va URLlar yozganimiz uchun. Ularni format va analyze qilish uchun standart yo'l yo'q bo'lgani uchun maxsus yo'llardan foydalaniladi.
3.Semi-structured data - yuqorida keltirilgan 2 turni o'rtasida yotuvchi data xisoblanib, ularni aniq bir shakli bo'lmasligi mumkin. Ular metadata yoki semantic taglardan tashkil topadi ammo qandaydir qat'iy strukturaga ega emas. Ularni ba'zi qismlari structured data bo'lgani bilan ba'zi qismi unday bo'lmaydi.
Misol uchun: XML va JSON. XML ham data ham taglarni o'z ichiga olib hierarchical structure xosil qiladi. Belgilangan format yoki ba'zi cheklovlar bor bo'lishiga qaramasdan, teglar ichidagi ma'lumotlar farqlanaveradi.
Metadata bu - "data about data" degani ya'ni "ma'lumot haqida ma'lumot". Unstructured data odatda metadataga ega bo'ladi (creator, location, shutter speed, date, file size va h.k.z)
@otabekswe
Data Base haqida yozishdan oldin data haqida ham to'xtalishni istadim, chunki bu haqida hech ma'lumot uchratmadim.
Data turli xil formatdagi ma'lumotning ko'rinishi misol uchun: text, audio, video, photo, bytes, number, va h.k.z bo'lishi mumkin. Ko'rib turibsizki ularni barchasi bir xil turdagi ma'lumot emas va bir-biridan tubdan farq qiladi. Keling 3 xil data haqida gaplashib o'tsak.
1.Structured data - oldindan qandaydir maxsus tuzilmalar asosida tuzilgan ma'lumotlar bo'lib, search, analyze, sort va format qilish uchun qulaylashitirlgan bo'ladi. Bunday ma'lumotlar quantitive ya'ni cheklangan (xajmda, typeda va e.t.c.) bo'lishadi.
Misol uchun: SQLda saqlaydigan ma'lumotlarimiz ham aynan shu turga kiradi. Shuning uchun ham SQL ni Structured Query Language deb atashgan. Ularga ma'lumot kiritishda type, size va restriction (constraint) kiritishingiz kerak bo'ladi.
2.Unstructured data - bunday turdagi ma'lumotlar qualitative data ya'ni sifatli ma'lumotlar turkumiga kiradi, uni oddiy toollar va methodlar yordamida protseslash va analyze qilishni imkoni yo'q.
Misol uchun: audio, video, photo, blog postlar va h.k.z larni kiritish mumkin. Xattoki oddiy twitter posti ham unstructured data xisoblanadi. Biz unga hashtaglar, user mention, emoji va URLlar yozganimiz uchun. Ularni format va analyze qilish uchun standart yo'l yo'q bo'lgani uchun maxsus yo'llardan foydalaniladi.
3.Semi-structured data - yuqorida keltirilgan 2 turni o'rtasida yotuvchi data xisoblanib, ularni aniq bir shakli bo'lmasligi mumkin. Ular metadata yoki semantic taglardan tashkil topadi ammo qandaydir qat'iy strukturaga ega emas. Ularni ba'zi qismlari structured data bo'lgani bilan ba'zi qismi unday bo'lmaydi.
Misol uchun: XML va JSON. XML ham data ham taglarni o'z ichiga olib hierarchical structure xosil qiladi. Belgilangan format yoki ba'zi cheklovlar bor bo'lishiga qaramasdan, teglar ichidagi ma'lumotlar farqlanaveradi.
Metadata bu - "data about data" degani ya'ni "ma'lumot haqida ma'lumot". Unstructured data odatda metadataga ega bo'ladi (creator, location, shutter speed, date, file size va h.k.z)
@otabekswe
(R)DBMS
Qachonki biz MySQL, PostgreSQL va ... lar haqida gapirganimizda biz database haqida emas balkim uning tizimi (system) haqida gapirayotgan bo'lamiz. Oddiyroq qilib gapirganda database management system haqida.
U software ya'ni dastur bo'lib foydalanuvchiga create, update, delete, read, qisqa qilib aytganda databaseni manipulate qilish imkoniyatini beradi. Qisqacha aytganda database va end-user o'rtasidagi interface desak bo'ladi. MySQL ham PostgreSQL ham Client-Server arxitekturasidan foydalanadi.
Misol uchun MySQL Application/Client, MySQL Server va Storage Engine qavatlaridan tashkil topgan.
1.Application/Client Layer - bu qavat client connection, authorization, authentication va security uchun javobgar.
2.MySQL Server Layer - bu qavat application layerdan kelayotgan buyruqlarni parse, analyze va optimize qilishga javobgar. Aynan shu qavat SQL kommandalarni databasega jo'natib uni boshqaruvini qiladi.
3.Storage Engine Layer - bu qavat ma'lumotlarni yozish va saqlash ishlarni bajaradi. Xolatga qarab turli xil engine tanlsh imkoniyatini ham tanlashingiz mumkin MySQLda. PostgreSQL faqat bitta storage engine support qiladi (ammo zheap ishlab chiqilmoqda hozircha heapam.c da ishlaydi lekin).
THE END!
@otabekswe
Qachonki biz MySQL, PostgreSQL va ... lar haqida gapirganimizda biz database haqida emas balkim uning tizimi (system) haqida gapirayotgan bo'lamiz. Oddiyroq qilib gapirganda database management system haqida.
U software ya'ni dastur bo'lib foydalanuvchiga create, update, delete, read, qisqa qilib aytganda databaseni manipulate qilish imkoniyatini beradi. Qisqacha aytganda database va end-user o'rtasidagi interface desak bo'ladi. MySQL ham PostgreSQL ham Client-Server arxitekturasidan foydalanadi.
Misol uchun MySQL Application/Client, MySQL Server va Storage Engine qavatlaridan tashkil topgan.
1.Application/Client Layer - bu qavat client connection, authorization, authentication va security uchun javobgar.
2.MySQL Server Layer - bu qavat application layerdan kelayotgan buyruqlarni parse, analyze va optimize qilishga javobgar. Aynan shu qavat SQL kommandalarni databasega jo'natib uni boshqaruvini qiladi.
3.Storage Engine Layer - bu qavat ma'lumotlarni yozish va saqlash ishlarni bajaradi. Xolatga qarab turli xil engine tanlsh imkoniyatini ham tanlashingiz mumkin MySQLda. PostgreSQL faqat bitta storage engine support qiladi (ammo zheap ishlab chiqilmoqda hozircha heapam.c da ishlaydi lekin).
THE END!
@otabekswe
SQL Execution order yoxud SQL Querylar qanday ishlaydi?
SQL Querylar 3ta bosqchida ishlaydi:
1. Row filtering - ushbu bosqichda FROM, WHERE, GROUP BY va HAVING lar ishga tushadi.
2. Column filtering - ustunlar odatda SELECT statement bilan filter qilinadi.
3. Row filtering - DISTINCT, ORDER BY va LIMIT lar ishga tushadi.
Ha, ha adashmadingiz row filtering 2 marta amalga oshiriladi agar siz yozadigan SQL query shuni talab qilsa.
Yuqoridagi SQL queryni keling tahlil qilib nimalar sodir bo'lishini kuzatib chiqamiz.
FROM, WHERE execution
Birinchi o'rinda FROM va WHERE ishga tushadi va student tabledan kimda gpa 3.00 dan katta bo'lsa o'sha foydalanuvchilarni tanlaydi. Ammo qanday tanlaydi, bu albatta loop bilan sodir bo'ladi. Har bir rowni filter qilib oladi, agar gpa > 3.00 bo'lsa ularni qoldiradi agar unday bo'lmasa ulardan keyingi rowlarni tekshiradi.
GROUP BY, HAVING execution
GPA 3.00dan katta qiymatlar tanlab olindi, loop tugadi. Keyingi bosqich agar siz ularni guruhlagan bo'lsangiz GROUP BY ishga tushadi. Guruhlangan elementlarga shart berish uchun esa HAVING ishlatasiz WHERE emas. Chunki WHERE guruhlashdan avval bajariladi. Guruhlashdan keyin esa ularni shart asosida tanlash uchun HAVING clause kerak.
SELECT execution
FROM va WHERE barcha rowlarni barcha columnlari bilan olib keladi ammo SELECT bu yerda qaysi columnlarni bizga ko'rsatishni hal qiladi xolos. Ya'ni siz SELECT deb qaysi columlarni kiritsangiz o'shalarni sizga ko'rsatadi.
ORDER BY, LIMIT execution
Demak bizda ko'rsatiladigan columnlar, table va rowlar aniq, endi ularni tartiblash kerak. Agar siz ORDER BY deya qaysidir columnni belgilagan bo'lsangiz u SELECT qilingan elementlarni siz aytgan column bo'yicha tartiblab chiqadi. Agar tartiblangan elementlarni limitini bergan bo'lsangiz demak tartiblab bo'lgandan keyin ularni siz aytgan LIMIT bo'yicha sizga taqdim etadi.
Ko'rib turibsizki SQL queryni qanchalik tezlashtirish yoki sekinlashtirish uni bosqichlari ko'pligi va qaysi bosqichdan qanchalik yaxshi foydalanishingizga ham bog'liqlik tomonlari bor.
@otabekswe
SQL Querylar 3ta bosqchida ishlaydi:
1. Row filtering - ushbu bosqichda FROM, WHERE, GROUP BY va HAVING lar ishga tushadi.
2. Column filtering - ustunlar odatda SELECT statement bilan filter qilinadi.
3. Row filtering - DISTINCT, ORDER BY va LIMIT lar ishga tushadi.
Ha, ha adashmadingiz row filtering 2 marta amalga oshiriladi agar siz yozadigan SQL query shuni talab qilsa.
SELECT id, full_name, university, gpa FROM student WHERE gpa > 3.00 ORDER BY full_name;
Yuqoridagi SQL queryni keling tahlil qilib nimalar sodir bo'lishini kuzatib chiqamiz.
FROM, WHERE execution
Birinchi o'rinda FROM va WHERE ishga tushadi va student tabledan kimda gpa 3.00 dan katta bo'lsa o'sha foydalanuvchilarni tanlaydi. Ammo qanday tanlaydi, bu albatta loop bilan sodir bo'ladi. Har bir rowni filter qilib oladi, agar gpa > 3.00 bo'lsa ularni qoldiradi agar unday bo'lmasa ulardan keyingi rowlarni tekshiradi.
GROUP BY, HAVING execution
GPA 3.00dan katta qiymatlar tanlab olindi, loop tugadi. Keyingi bosqich agar siz ularni guruhlagan bo'lsangiz GROUP BY ishga tushadi. Guruhlangan elementlarga shart berish uchun esa HAVING ishlatasiz WHERE emas. Chunki WHERE guruhlashdan avval bajariladi. Guruhlashdan keyin esa ularni shart asosida tanlash uchun HAVING clause kerak.
SELECT execution
FROM va WHERE barcha rowlarni barcha columnlari bilan olib keladi ammo SELECT bu yerda qaysi columnlarni bizga ko'rsatishni hal qiladi xolos. Ya'ni siz SELECT deb qaysi columlarni kiritsangiz o'shalarni sizga ko'rsatadi.
ORDER BY, LIMIT execution
Demak bizda ko'rsatiladigan columnlar, table va rowlar aniq, endi ularni tartiblash kerak. Agar siz ORDER BY deya qaysidir columnni belgilagan bo'lsangiz u SELECT qilingan elementlarni siz aytgan column bo'yicha tartiblab chiqadi. Agar tartiblangan elementlarni limitini bergan bo'lsangiz demak tartiblab bo'lgandan keyin ularni siz aytgan LIMIT bo'yicha sizga taqdim etadi.
Ko'rib turibsizki SQL queryni qanchalik tezlashtirish yoki sekinlashtirish uni bosqichlari ko'pligi va qaysi bosqichdan qanchalik yaxshi foydalanishingizga ham bog'liqlik tomonlari bor.
@otabekswe
SELECT * is bad yoxud SELECT *
1. Unnecessary I/O - Sizga doim ham barcha columnlarni tanlash kerakmas bo'lishi mumkin. Agar siz barcha columnlarni fetch qilib ularni ba'zilarini umumman ishlatmasangiz bu ham resursni uvol qilish xisoblanadi, chunki barcha page (bu haqida keyingi postlarda)lardagi ma'lumotlarni o'qishiyabsiz. BTW,
2. Increase network traffic - Demak keraksiz columnlarni ham olib kelayabsizmi bu degani ko'p network bandwidth sarflash degani.
3. Application memory - Ma'lumotlar ko'paygandan keyin dasturingiz ham kerakmas ma'lumoltarni ushlab turish uchun ko'proq memory talab qilishni boshlaydi.
4. Client Deserialization - Ma'lumotlar clientga jo'natilishdan oldin protocol qoidalariga muvofiq serialization bo'ladi. Demak qancha ko'p ma'lumot jo'natsangiz shuncha ko'p serialization operatsiyalari bajariladi va bu ko'p CPU yeydi. Endi jo'natdi ham deylik, client serialized datani qabul qilgandan keyin nima bo'ladi albatta uni deserialize qilishi kerak va boya aytganimizdek CPU yana isrof bo'ladi.
Conclusion: Ushbu postda
Yana nimalar qolib ketdi, commentda qoldiring. Menga ham yangilik bo'lardi...
@otabekswe
ning yomon tomonlariSELECT *
yomon va undan qochish kerakligi haqida ko'p postlarni o'qidim, aksariyatlari esa aynan nima uchunligi haqida yozishmagan. Keling bugun millionlab yoki minglab row yoki columnlar bilan ishlash davomida aynan nega SELECT *
dan foydalanish yaxshimasligi haqida gaplashamiz.1. Unnecessary I/O - Sizga doim ham barcha columnlarni tanlash kerakmas bo'lishi mumkin. Agar siz barcha columnlarni fetch qilib ularni ba'zilarini umumman ishlatmasangiz bu ham resursni uvol qilish xisoblanadi, chunki barcha page (bu haqida keyingi postlarda)lardagi ma'lumotlarni o'qishiyabsiz. BTW,
SELECT *
index-only scan qilishga to'siqlik qiladi.2. Increase network traffic - Demak keraksiz columnlarni ham olib kelayabsizmi bu degani ko'p network bandwidth sarflash degani.
3. Application memory - Ma'lumotlar ko'paygandan keyin dasturingiz ham kerakmas ma'lumoltarni ushlab turish uchun ko'proq memory talab qilishni boshlaydi.
4. Client Deserialization - Ma'lumotlar clientga jo'natilishdan oldin protocol qoidalariga muvofiq serialization bo'ladi. Demak qancha ko'p ma'lumot jo'natsangiz shuncha ko'p serialization operatsiyalari bajariladi va bu ko'p CPU yeydi. Endi jo'natdi ham deylik, client serialized datani qabul qilgandan keyin nima bo'ladi albatta uni deserialize qilishi kerak va boya aytganimizdek CPU yana isrof bo'ladi.
Conclusion: Ushbu postda
SELECT *
yomon deyilmagan aksincha uni qachon va qayerda ishlatishni bilmaslik yomon deyilgan. Shunchaki qilib ko'rish va o'rganishlar davomida ishlatavering ammo production levelda buni har yeda qo'llash sizga qimmatga tushishi mumkin.Yana nimalar qolib ketdi, commentda qoldiring. Menga ham yangilik bo'lardi...
@otabekswe