Mashqlar to'plami — har QISM uchun
"Dasturlash Kitobi"ga hamroh. Loyihalar — katta; mashqlar — kichik, ko'p takrorlanadigan drill. Fundamentni mustahkamlash uchun.
Qanday foydalanish
- Har bir mashq: vazifa + tekshirish/mezon + maslahat (qaysi bob).
- Yechim kodi yo'q — o'zing yozasan (kitob falsafasi). Qotib qolsang, mos bobni qayta o'qi.
- Belgilash:
M<QISM>.<raqam>(masalanM2.5— 2-QISM, 5-mashq). - Daraja: Oson · O'rta · Qiyin.
- Tartib bilan ishla: oson qiyin. Bittasi ishlamasa, keyingisiga o'tma — sababini top.
Mashq — bu "o'qish" emas, "yozish". Har bittasini kompyuterda haqiqatan yozib, ishlatib ko'r.
0-QISM — Tayyorgarlik
M0.1 — Bayt hisobi. 1.5 GB necha bayt? 1.5 GiB-chi? Farqini qo'lda hisobla, keyin kod bilan tekshir. (0.1-bob)
M0.2 — 255 sonini binary, octal, hex'da yoz. Keyin 0xFF ni o'nlikka aylantir. (0.1)
M0.3 — 0.1 + 0.2 === 0.3 nega false? Sababini 2 jumlada yoz va Number.EPSILON bilan to'g'ri taqqoslashni yoz. (0.1)
M0.4 — Terminalda: papka yarat, ichiga kir, fayl yarat, nomini o'zgartir, o'chir — faqat buyruqlar bilan. (0.3)
M0.5 — chmod 640 fayl.txt nima qiladi? Har raqamni rwx ga yoy va kim nima qila olishini yoz. (0.2)
M0.6 — URL'ni qismlarga ajrat: https://shop.uz:443/cart?id=5#top — protokol, host, port, path, query, fragment. (0.4)
M0.7 — Pseudokodda yoz: massivdagi eng katta sonni topish algoritmi. Keyin "minimaxni topish"ga moslashtir. (0.6)
1-QISM — HTML / CSS
M1.1 — Semantik HTML bilan blog maqolasi tuzilmasini yoz: header, article, section, footer. (1-QISM)
M1.2 — Forma yoz: ism, email, parol, tug'ilgan sana — to'g'ri input type va label bilan. (1-QISM)
M1.3 — Flexbox bilan 3 ustunli "kartalar" qatorini yoz; ekran kichrayganda 1 ustunga tushsin. (1-QISM)
M1.4 — CSS Grid bilan "holy grail" layout (header, sidebar, main, footer) yoz. (1-QISM)
M1.5 — Faqat CSS bilan dark/light mavzu (prefers-color-scheme) qo'sh. (1-QISM)
M1.6 — Responsive navbar yoz: katta ekranda gorizontal, telefonda "hamburger" menyu (faqat CSS + checkbox hiyla). (1-QISM)
M1.7 — CSS o'zgaruvchilari (--rang) bilan butun sahifaning rang palitrasini bitta joydan boshqar. (1-QISM)
M1.8 — Faqat CSS animatsiya bilan "loading spinner" yoz (@keyframes). (1-QISM)
2-QISM — JavaScript
M2.1 — let/const/var farqini kod bilan ko'rsat: scope va qayta tayinlashni sinab ko'r. (2-QISM)
M2.2 — Funksiya yoz: berilgan sonni Selsiydan Farengeyt va aksiga aylantirsin. (2-QISM)
M2.3 — ["olma","nok","olma","uzum"] massividan takrorlanmas elementlarni ol (Set bilan). (2-QISM)
M2.4 — map, filter, reduce bilan: sonlar massividan juftlarini ol, ikkiga ko'paytir, yig'indisini top — bitta zanjirda. (2.7)
M2.5 — Obyektlar massividan ({ism, yosh}) yosh bo'yicha saralangan ismlar ro'yxatini qaytar. (2.7)
M2.6 — Promise yoz: 1 sekunddan keyin "tayyor" qaytarsin; async/await bilan chaqir. (2.13)
M2.7 — fetch bilan ochiq API'dan ma'lumot ol, xatoni try/catch bilan ushla. (2.13)
M2.8 — Debounce funksiyasini o'zing yoz (kutubxonasiz): tez chaqiruvlarni N ms kechiktir. (2-QISM)
M2.9 — Chuqur nusxa (deep clone) funksiyasini yoz: ichma-ich obyekt/massivni rekursiv nusxala. (2-QISM)
M2.10 — Closure bilan "hisoblagich" yarat: next() har chaqirilganda 1 oshsin, tashqaridan o'zgartirib bo'lmasin. (2-QISM)
M2.11 — localStorage bilan to-do holatini saqlovchi mini-modul yoz (qo'shish/o'chirish/o'qish). (2-QISM)
M2.12 — DOM: tugma bosilganda ro'yxatga element qo'shadigan va o'chiradigan kod (event delegation bilan). (2-QISM)
3-QISM — Algoritmlar va ma'lumot tuzilmalari
M3.1 — Massivni teskari aylantir (reverse ishlatmasdan, tsikl bilan). (3-QISM)
M3.2 — So'z palindrommi tekshir ("level" true). (3-QISM)
M3.3 — Ikki saralangan massivni bitta saralangan massivga birlashtir (merge). (3.5)
M3.4 — Bubble sort va selection sortni o'zing yoz; har birining Big-O sini ayt. (3.1, 3.5)
M3.5 — Binary search yoz (saralangan massivda); Big-O — O(log n) ekanini tushuntir. (3.5)
M3.6 — Stack (push/pop/peek) ni massiv ustida o'z klass bilan yoz. (3-QISM)
M3.7 — Queue (enqueue/dequeue) yoz. Stack bilan farqini ayt. (3-QISM)
M3.8 — Rekursiya bilan faktorial va Fibonachchi yoz; keyin memoizatsiya qo'sh. (3.11)
M3.9 — Qavslar balansini tekshir: "({[]})" true, "([)]" false (stack bilan). (3-QISM)
M3.10 — Matnda har harf necha marta uchraganini sana (Map bilan), eng ko'pini top. (3-QISM)
M3.11 — Graf yoz (qo'shnilar ro'yxati) va BFS bilan ikki tugun orasida yo'l bormi tekshir. (3.13)
M3.12 — "FizzBuzz" ni yoz, keyin uni O(n) da, shartlarni kengaytiriladigan qilib qayta yoz. (3-QISM)
4-QISM — Git va vositalar
M4.1 — Yangi repo yarat, fayl qo'sh, commit qil, tarixni ko'r (git log). (4-QISM)
M4.2 — Branch yarat, unda o'zgartir, mainga merge qil. (4-QISM)
M4.3 — Ataylab merge konflikt yasab, uni qo'lda hal qil. (4-QISM)
M4.4 — Oxirgi 3 commit'ni git log --oneline bilan ko'r; bittasini revert qil. (4-QISM)
M4.5 — .gitignore yoz: node_modules, .env, *.log kuzatuvdan chiqsin. (4.5)
M4.6 — Conventional commit uslubida 5 ta ma'noli commit yoz (feat:, fix:, docs:). (4-QISM)
5-QISM — Node.js
M5.1 — fs bilan fayl o'qib, uning satrlar sonini chiqar. (5.3)
M5.2 — http moduli bilan "Hello" qaytaruvchi server yoz (Express'siz). (5-QISM)
M5.3 — Express bilan REST API: GET /tasks, POST /tasks (xotirada massiv). (5.7)
M5.4 — Yuqoridagi API'ga PUT va DELETE qo'sh; to'g'ri status kodlar bilan. (5.7)
M5.5 — Katta faylni stream bilan o'qib, boshqasiga ko'chir (RAM'ni to'ldirmasdan). (5.4)
M5.6 — Middleware yoz: har so'rovni vaqt belgisi bilan log qilsin. (5.7)
M5.7 — .env dan port o'qib server ishga tushir (dotenv). (5.8)
M5.8 — Xato ushlovchi (error handling) middleware yoz; noto'g'ri so'rovga 400 qaytar. (5.7)
M5.9 — Oddiy email yuboruvchi funksiya yoz (nazariy — SMTP sozlamasi bilan). (5.19)
6-QISM — Ma'lumotlar bazasi
M6.1 — users jadvali uchun CREATE TABLE yoz (id, ism, email, sana). (6-QISM)
M6.2 — INSERT, SELECT, UPDATE, DELETE — har biriga bittadan misol yoz. (6-QISM)
M6.3 — WHERE, ORDER BY, LIMIT bilan: eng yangi 5 foydalanuvchini ol. (6-QISM)
M6.4 — Ikki jadval (users, orders) orasida JOIN yoz: har buyurtma egasi ismi bilan. (6.15)
M6.5 — GROUP BY + COUNT: har foydalanuvchi nechta buyurtma berganini hisobla. (6-QISM)
M6.6 — Indeks qo'shish nega qidiruvni tezlashtiradi? EXPLAIN bilan ko'rsat. (6.9)
M6.7 — Tranzaksiya yoz: pul o'tkazmasi (bir hisobdan ayir, ikkinchisiga qo'sh) — atomik bo'lsin. (6.10)
M6.8 — Prisma (yoki tanlagan ORM) sxema yoz: User Post (bir-ko'pga). (6.12)
7-QISM — TypeScript
M7.1 — Funksiyaga tip qo'sh: (a: number, b: number): number. (7-QISM)
M7.2 — User uchun interface yoz (ism, yosh, ixtiyoriy email). (7-QISM)
M7.3 — Union tip: type Status = "active" | "banned" — noto'g'ri qiymatni TS ushlasin. (7-QISM)
M7.4 — Generic funksiya yoz: massivning birinchi elementini tipini saqlab qaytarsin. (7-QISM)
M7.5 — Partial, Pick, Omit utility tiplarini misolda ishlat. (7-QISM)
M7.6 — API javobi uchun tip yoz va unknown dan xavfsiz tor (narrow) qil. (7-QISM)
8-QISM — NestJS
M8.1 — Nest modul + controller + service yarat: GET /hello. (8-QISM)
M8.2 — DTO + validation pipe: POST /users noto'g'ri ma'lumotni rad etsin. (8-QISM)
M8.3 — Dependency Injection: service'ni controller'ga inject qil. (8-QISM)
M8.4 — Guard yoz: faqat token bor so'rovni o'tkazsin. (8-QISM, 13.9)
M8.5 — Interceptor yoz: har javobni {data, timestamp} ga o'rasin. (8-QISM)
M8.6 — Nest + Prisma: users CRUD'ni to'liq yoz. (8-QISM, 6.12)
9-QISM — Arxitektura
M9.1 — "God object" (hamma ishni qiladigan klass)ni Single Responsibility bo'yicha 3 klassga ajrat. (9-QISM, SOLID) M9.2 — Strategy pattern bilan to'lov usullarini (karta/naqd/transfer) almashtiriladigan qil. (9-QISM) M9.3 — Repository pattern: ma'lumotga kirishni servicedan ajrat (interfeys orqali). (9-QISM) M9.4 — Bitta monolit g'oyani (e-commerce) qog'ozda 4 mikroservisga bo'l; har biriga mas'uliyat ber. (9-QISM, 16.2) M9.5 — Observer pattern bilan "buyurtma yaratildi email + SMS" hodisa tizimini yoz. (9-QISM) M9.6 — Dependency Inversion: yuqori modul past moduldan emas, abstraksiyaga bog'lansin — misol yoz. (9-QISM)
10-QISM — DevOps
M10.1 — Node ilova uchun Dockerfile yoz; image qur, konteyner ishga tushir. (10.3)
M10.2 — docker-compose.yml yoz: app + PostgreSQL birga ko'tarilsin. (10.4)
M10.3 — Multi-stage build bilan image hajmini kichraytir. (10.4)
M10.4 — GitHub Actions workflow yoz: push'da test + lint ishlasin. (10.5)
M10.5 — Nginx reverse proxy konfiguratsiyasini yoz (port 80 app 3000). (10.2)
M10.6 — .env va secretlarni konteynerda xavfsiz uzatish usulini yoz. (10.11)
M10.7 — PM2 bilan ilovani "always-on" qilib ishga tushir; restart sinab ko'r. (10.7)
11-QISM — React
M11.1 — useState bilan hisoblagich komponent (+ / − / reset). (11-QISM)
M11.2 — Props bilan qayta ishlatiladigan Button komponenti (variant, onClick). (11-QISM)
M11.3 — Ro'yxatni map bilan render qil; key to'g'ri ber. (11-QISM)
M11.4 — useEffect bilan API'dan ma'lumot ol va loading/error holatini ko'rsat. (11-QISM)
M11.5 — Boshqariladigan forma (controlled form): kiritishni state'da saqla, validatsiya qo'sh. (11-QISM)
M11.6 — Custom hook yoz: useLocalStorage(key, default). (11-QISM)
M11.7 — useMemo/useCallback bilan keraksiz re-renderni kamaytir; farqini o'lcha. (11.11)
M11.8 — Context bilan global mavzu (dark/light) qo'sh. (11-QISM)
M11.9 — Kichik komponentni React.memo bilan optimallashtir; nega kerakligini ayt. (11.11)
12-QISM — State Management
M12.1 — useReducer bilan to-do holatini boshqar (add/toggle/remove). (12-QISM)
M12.2 — Zustand (yoki Redux Toolkit) bilan global savatcha holati yoz. (12-QISM)
M12.3 — TanStack Query bilan ma'lumot ol; loading/error/cache'ni ishlat. (12.4)
M12.4 — Optimistic update: layk bosilganda darrov ko'rsat, xato bo'lsa orqaga qaytar. (12.4)
M12.5 — Server holati va client holatini ajrat: qaysi biri qayerda turishi kerakligini yoz. (12-QISM)
13-QISM — Next.js
M13.1 — App Router bilan 3 sahifali sayt yoz (/, /about, /blog). (13.2)
M13.2 — Server Component'da ma'lumot ol (DB yoki API); Client Component'ni faqat kerakli joyda ishlat. (13.3)
M13.3 — Dinamik route: /blog/[slug] — generateStaticParams bilan. (13.4)
M13.4 — Server Action yoz: forma yuborilganda DB'ga yozsin. (13.5)
M13.5 — Route Handler yoz: GET/POST /api/tasks. (13.6)
M13.6 — Metadata API bilan SEO qo'sh (title, description, OG). (13.8)
M13.7 — Auth.js bilan Google kirish qo'sh; himoyalangan sahifa yarat. (13.9)
M13.8 — next/image va kesh bilan sahifani tezlashtir. (13.7)
14-QISM — Xavfsizlik
M14.1 — Parolni bcrypt bilan hash qil va tekshir; nega ochiq saqlanmaydi — yoz. (14.5)
M14.2 — XSS: zaif kodni ko'rsat, keyin escaping bilan tuzat. (14.2)
M14.3 — SQL injection: zaif so'rovni parametrlangan so'rovga aylantir. (14.3)
M14.4 — JWT yarat, imzola, tekshir; muddati o'tganini ushlash. (14.6)
M14.5 — Rate limiting middleware yoz: bir IP'dan 1 daqiqada 100 so'rovdan ko'p bo'lsa rad et. (14.8)
M14.6 — CORS va xavfsizlik sarlavhalarini (helmet) to'g'ri sozla. (14.7)
M14.7 — .envda kalit qoldirib ketilganini topadigan tekshiruv yoz (gitleaks g'oyasi). (14.9)
15-QISM — Kasbiy ko'nikmalar
M15.1 — Tartibsiz kodni (uzun funksiya) toza, kichik funksiyalarga refaktor qil. (15.1) M15.2 — ESLint + Prettier sozla; xatolarni avtomatik tuzattir. (15.3) M15.3 — Husky pre-commit hook qo'sh: commitdan oldin lint ishlasin. (15.3) M15.4 — Bir loyihaga aniq README yoz (o'rnatish, ishga tushirish, foydalanish). (15.6) M15.5 — Berilgan bug'ni tizimli debug qil: gipoteza tekshir tuzat yoz. (15.5) M15.6 — Bitta tizim uchun (URL qisqartiruvchi) system design yoz: API, DB, miqyos. (15.7)
16-QISM — Capstone (mini mashqlar)
M16.1 — SaaS uchun multi-tenancy sxema yoz: har so'rov jamoa tekshiruvini qanday qiladi? (16.1) M16.2 — Ikki mikroservis orasida asinxron aloqa (queue) g'oyasini diagramma qil. (16.2) M16.3 — WebSocket bilan "yozyapti" indikatorini qanday yasash — qadamlarni yoz. (16.3)
Maslahat: mashqlarni tugatgach, ularni 220 Loyiha bilan birlashtir — kichik mashq katta loyiha. Bosh sahifa: README.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!