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