Wisar
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'zingiz yozasiz (kitob falsafasi). Qotib qolsangiz, mos bobni qayta o'qing.
  • Belgilash: M<QISM>.<raqam> (masalan M2.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!
Mashqlar to'plami — har QISM uchun — Wisar