WisarWisar
Hamroh materiallar/Mashqlar10 daqiqa

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> (masalan M2.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!
Mashqlar to'plami — har QISM uchun — Wisar