Test bazasi
423 savol ā 345 variantli, 78 yopiq (qisqa javob).
Javoblar har savoldan keyin yopiq blokda. Avval o'zingiz javob bering, keyin oching.
A qism ā Variantli savollar
JavaScript / TypeScript
45 savol
Asoslar (JavaScript)
1. Junior ā Nima chiqadi?
console.log(a);
var a = 1;
console.log(a);
- A)
null, keyin1 - B)
1, keyin1 - C)
undefined, keyin1 - D)
ReferenceError
Javob
C ā undefined, keyin 1
var hoisting bilan ko'tariladi va undefined qiymat oladi. let/const bo'lganda TDZ tufayli ReferenceError bo'lardi.
2. Junior ā Nima bo'ladi?
console.log(b);
let b = 2;
- A)
undefinedā var kabi hoisting - B)
ReferenceErrorā TDZ - C)
2ā e'lon avval bajariladi - D)
nullā default qiymat
Javob
B ā ReferenceError ā TDZ
let va const block scope'ga ega va Temporal Dead Zone (TDZ) da bo'ladi ā e'londan oldin murojaat qilib bo'lmaydi.
3. Junior ā const bilan e'lon qilingan obyektning property'sini o'zgartirish mumkinmi?
const user = { name: 'Ali' };
user.name = 'Vali'; // ?
user = {}; // ?
- A) Ha ā
constfaqat bog'lanishni muzlatadi - B) Faqat strict mode'dan tashqarida
- C) Yo'q ā
constobyekt ichini ham muzlatadi - D) Faqat
Object.freezeqo'shilgan bo'lsa
Javob
A ā Ha ā const faqat bog'lanishni muzlatadi
const bog'lanishni (binding) muzlatadi. user.name = 'x' ā
ishlaydi, user = {} ā TypeError beradi.
4. Junior ā Nima chiqadi?
for (var i = 0; i < 3; i++) setTimeout(() => console.log(i), 0);
for (let j = 0; j < 3; j++) setTimeout(() => console.log(j), 0);
- A)
3 3 3va3 3 3 - B)
3 3 3va0 1 2 - C)
0 1 2va3 3 3 - D)
0 1 2va0 1 2
Javob
B ā 3 3 3 va 0 1 2
var funksiya scope'ida ā barcha callback bitta i ni ko'radi (sikl tugagach 3). let har iteratsiyada yangi bog'lanish yaratadi.
5. Junior ā Closure nima?
- A) Har chaqiruvda scopeni tozalaydigan funksiya
- B) O'zini qayta chaqiruvchi rekursiv funksiya
- C) Tashqi lexical scopeni eslab qoluvchi funksiya
- D)
thisni doimiy bog'lab qo'yuvchi funksiya
Javob
C ā Tashqi lexical scopeni eslab qoluvchi funksiya
Closure ā funksiya tashqi scope'dagi o'zgaruvchiga havolani ushlab turadi. Shuning uchun u xotirada qoladi (memory leak manbai bo'lishi mumkin).
6. Junior ā Nima chiqadi?
const [a, b, ...rest] = [1, 2, 3, 4, 5];
console.log(a, b, rest);
- A)
1 2 [3, 4, 5] - B)
1 2 [4, 5] - C)
1 2 3 - D)
1 2 undefined
Javob
A ā 1 2 [3, 4, 5]
Destructuring bilan birinchi ikkita element olinadi, ...rest qolganini massiv sifatida yig'adi.
7. Junior ā Nima chiqadi?
const a = { x: 1, y: 2 };
const b = { ...a, y: 5, z: 3 };
console.log(b);
- A)
{ x: 1, y: 2, z: 3 } - B)
{ y: 5, z: 3 } - C)
{ x: 1, y: 5, z: 3 } - D) TypeError
Javob
C ā { x: 1, y: 5, z: 3 }
Spread'da keyingi qiymat oldingisini bosadi. y: 5 y: 2 dan keyin turibdi.
8. Junior ā Nima chiqadi?
const v = 0;
console.log(v ?? 'default');
console.log(v || 'default');
- A)
0 'default' - B)
'default' 0 - C)
'default' 'default' - D)
0 0
Javob
A ā 0 'default'
?? faqat null/undefined da ishlaydi ā 0 haqiqiy qiymat. || esa har qanday falsy (0, '', false) da ishlaydi.
9. Junior ā Nima chiqadi?
const user = { profile: null };
console.log(user.profile?.address?.city);
- A)
undefined - B)
TypeError: Cannot read properties of undefined - C)
null - D)
{}
Javob
A ā undefined
Optional chaining ?. zanjirdagi null/undefined da to'xtaydi va undefined qaytaradi, xato tashlamaydi.
10. Junior/Middle ā Nima chiqadi?
const arr = [1, [2, [3, [4]]]];
console.log(arr.flat(2));
- A)
[1, 2, 3, 4] - B)
[1, 2, [3, [4]]] - C)
[1, 2, 3, [4]] - D)
[1, [2, [3, [4]]]]
Javob
C ā [1, 2, 3, [4]]
flat(2) ikki darajaga tekislaydi. Uchinchi darajadagi [4] massiv bo'lib qoladi. flat(Infinity) hammasini tekislaydi.
11. Junior/Middle ā Nima chiqadi?
console.log([1, 2, 3].reduce((a, b) => a + b));
console.log([].reduce((a, b) => a + b));
- A) TypeError va TypeError
- B)
6vaundefined - C)
6va TypeError - D)
6va0
Javob
C ā 6 va TypeError
Boshlang'ich qiymatsiz reduce birinchi elementni boshlang'ich sifatida oladi. Bo'sh massivda oladigan narsa yo'q ā TypeError: Reduce of empty array with no initial value. Har doim boshlang'ich qiymat bering.
12. Junior/Middle ā Nima chiqadi?
console.log([NaN].includes(NaN), [NaN].indexOf(NaN));
- A)
false -1 - B)
true 0 - C)
false 0 - D)
true -1
Javob
D ā true -1
indexOf === bilan solishtiradi, NaN === NaN ā false. includes esa SameValueZero ishlatadi va NaN ni topadi. Tekshirish uchun Number.isNaN().
13. Junior/Middle ā Nima chiqadi?
const o = { z: 1, a: 2, 2: 'x', 1: 'y' };
console.log(Object.keys(o));
- A)
['z', 'a', '2', '1'] - B)
['1', '2', 'z', 'a'] - C)
['1', '2', 'a', 'z'] - D)
['a', 'z', '1', '2']
Javob
B ā ['1', '2', 'z', 'a']
Butun songa o'xshash kalitlar o'sish tartibida oldinga chiqadi, qolgan satr kalitlar qo'shilish tartibida qoladi. Tartib muhim bo'lsa Map ishlating.
14. Junior/Middle ā Object.entries({a:1, b:2}) nima qaytaradi?
- A)
[['a', 'b'], [1, 2]] - B)
[['a', 1], ['b', 2]] - C)
{ a: 1, b: 2 } - D)
['a', 1, 'b', 2]
Javob
B ā [['a', 1], ['b', 2]]
keys ā kalitlar massivi Ā· values ā qiymatlar massivi Ā· entries ā [kalit, qiymat] juftliklari massivi.
15. Middle ā Nima chiqadi?
const grid = new Array(3).fill([]);
grid[0].push('x');
console.log(grid);
- A)
[['x'], [], []] - B)
[['x'], ['x'], ['x']] - C)
[[], [], []] - D)
['x', [], []]
Javob
B ā [['x'], ['x'], ['x']]
fill argumentni bir marta hisoblaydi va bitta massiv referencesini uch uyaga qo'yadi. To'g'ri yo'l: Array.from({length:3}, () => []).
Asinxronlik
16. Middle ā Konsolga qanday tartibda chiqadi?
console.log('A');
queueMicrotask(() => console.log('B'));
Promise.resolve().then(() => console.log('C'));
setTimeout(() => console.log('D'), 0);
console.log('E');
- A)
A E B C D - B)
A E D B C - C)
A B C D E - D)
A E C B D
Javob
A ā A E B C D
Sinxron: A, E. Keyin microtask navbati FIFO: queueMicrotask(B) avval yozilgan, keyin .then(C). Oxirida macrotask: D.
17. Middle ā JS event loop'ida quyidagilardan qaysi biri microtask navbatiga tushmaydi?
- A)
queueMicrotask - B)
Promise.then - C)
setTimeout(fn, 0) - D)
awaitdan keyingi kod
Javob
C ā setTimeout(fn, 0)
Microtask: Promise oilasi + queueMicrotask + MutationObserver. Qolgan hammasi (timer, DOM event, I/O) ā macrotask.
18. Middle ā Brauzer event loop'ida requestAnimationFrame callback'i qaysi navbatga tushadi?
- A) Render fazasiga ā macrotask'lar orasida
- B) Sinxron ā chaqirilgan joyda darrov
- C) Macrotask navbatiga ā
setTimeoutbilan birga - D) Microtask navbatiga ā
Promisebilan birga
Javob
A ā Render fazasiga ā macrotask'lar orasida
rAF render'dan darrov oldin ishlaydi va alohida faza ā na microtask, na macrotask navbati. ResizeObserver va IntersectionObserver ham shu fazada. Shuning uchun animatsiya uchun setTimeout emas, rAF ishlatiladi.
19. Junior/Middle ā Promise.all da bitta promise reject bo'lsa, qolganlari bekor qilinadimi?
- A) Ha ā
Promise.allqolganlarini bekor qiladi - B) Yo'q ā qolganlari ishlashda davom etadi
- C) Faqat
AbortControllerberilgan bo'lsa bekor bo'ladi - D) Faqat
Promise.allSettledda davom etadi
Javob
B ā Yo'q ā qolganlari ishlashda davom etadi
JS promise'lari bekor qilinmaydi: reject bo'lganda Promise.all faqat natijani tashlaydi, ishlar davom etaveradi. Haqiqiy bekor qilish uchun AbortController (fetch) yoki RxJS switchMap/takeUntil kerak.
20. Junior/Middle ā Qaysi biri birinchi fulfilled natijani qaytaradi (reject'larni o'tkazib yuborib)?
- A)
Promise.all - B)
Promise.race - C)
Promise.any - D)
Promise.allSettled
Javob
C ā Promise.any
any ā birinchi muvaffaqiyatli. Hammasi reject bo'lsa AggregateError. race esa birinchi tugaganni oladi ā reject ham bo'lishi mumkin.
21. Senior ā Bu kod nega ortiqcha sekin va qanday tuzatiladi?
async function f() {
return Promise.resolve(1);
}
- A) Sekin emas ā
asyncqo'shimcha tick qo'shmaydi - B) Promise qaytarish +2 microtask tick qo'shadi
- C)
Promise.resolveoqimni sinxron bloklaydi - D)
asynchar doim yangi mikro-oqim ochadi
Javob
B ā Promise qaytarish +2 microtask tick qo'shadi
Spec bo'yicha thenable bilan resolve qilish ichki NewPromiseResolveThenableJob yaratadi ā 2 qo'shimcha tick. Yechim: return 1 yoki return await p ā return await yana try/catch da xatoni ushlaydi.
22. Junior/Middle ā await aslida nima qiladi?
- A) Funksiyani bo'ladi ā davomi microtask'ga ko'chadi
- B) Oqimni bloklab, promise natijasini kutadi
- C) Alohida thread ochib, parallel bajaradi
- D) Promise'ni sinxron qiymatga aylantiradi
Javob
A ā Funksiyani bo'ladi ā davomi microtask'ga ko'chadi
await ā yashiringan .then(). Funksiya await ga yetganda stack'dan tushadi, davomi microtask sifatida navbatga tushadi.
Prototip va OOP
23. Middle ā Nima chiqadi?
function Animal(name) { this.name = name; }
Animal.prototype.speak = function() { return this.name + ' ovoz chiqardi'; };
const it = new Animal('Sharik');
console.log(it.speak());
console.log(it.hasOwnProperty('speak'));
- A) TypeError
- B)
undefinedĀ·false - C)
Sharik ovoz chiqardiĀ·false - D)
Sharik ovoz chiqardiĀ·true
Javob
C ā Sharik ovoz chiqardi Ā· false
speak prototipda, obyektning o'zida emas. hasOwnProperty faqat o'z xossalarini ko'radi; butun zanjir uchun 'speak' in it ishlatiladi.
24. Middle ā Object.create(null) va {} farqi?
- A) Faqat muzlatilgan (frozen) obyekt yaratadi
- B)
nullqiymat qaytaradi, obyekt emas - C) Ikkalasi ham
Object.prototypedan meros oladi - D) Prototipsiz obyekt yaratadi ā meros metodlarsiz
Javob
D ā Prototipsiz obyekt yaratadi ā meros metodlarsiz
Prototipsiz obyekt ā toza lug'at (dictionary): toString, hasOwnProperty kabi meros metodlar yo'q. Kalit nomlari ular bilan to'qnashmaydi.
25. Middle ā call, apply, bind farqi?
- A)
callā massiv,applyā alohida arg,bindā yangi funksiya - B)
bindā massiv oladi,callvaapplyā funksiya qaytaradi - C)
callā alohida arg,applyā massiv,bindā yangi funksiya - D) Uchtasi ham
thisni bog'lab, funksiyani darrov chaqiradi
Javob
C ā call ā alohida arg, apply ā massiv, bind ā yangi funksiya
call(this, a, b) Ā· apply(this, [a, b]) Ā· bind(this, a) ā keyinroq chaqiriladigan yangi funksiya.
26. Junior/Middle ā Nima bo'ladi?
class Counter {
count = 0;
increment() { this.count++; }
}
const c = new Counter();
const inc = c.increment;
inc();
- A)
count1 ga oshadi,thissaqlanadi - B)
NaNācounttopilmaydi - C)
thiswindowbo'ladi, xato chiqmaydi - D) TypeError ā
thisundefined
Javob
D ā TypeError ā this undefined
Metod obyektdan uzildi ā chaqiruvda chap tomonda nuqta yo'q. Klass tanasi doim strict mode ā this = undefined. Yechim: arrow property yoki .bind(c).
27. Junior/Middle ā Nima chiqadi?
class Base {
constructor() { this.type = 'base'; }
hello() { return 'Base'; }
}
class Child extends Base {
constructor() { super(); this.type = 'child'; }
hello() { return super.hello() + ' ā Child'; }
}
console.log(new Child().hello(), new Child().type);
- A)
Base ā ChildĀ·child - B)
ChildĀ·base - C)
BaseĀ·child - D) Xato ā
super.hello()mumkin emas
Javob
A ā Base ā Child Ā· child
super.hello() ota-onaning metodini chaqiradi. this.type konstruktorda super() dan keyin yozilgani uchun 'child' bo'lib qoladi.
28. Middle ā JS'da extends bilan meros olgan klass konstruktorida super() chaqirilmasa nima bo'ladi?
- A)
ReferenceErrorāthisdan oldinsuper()kerak - B) Faqat TypeScript kompilyatsiyada ogohlantiradi
- C) Ota-ona konstruktori avtomatik chaqiriladi
- D) Hech narsa ā
thisbo'sh obyekt bo'ladi
Javob
A ā ReferenceError ā this dan oldin super() kerak
Meros olgan klassda this faqat super() chaqirilgandan keyin mavjud bo'ladi.
TypeScript
29. Junior ā unknown va any farqi?
- A)
unknownni ishlatishdan oldin toraytirish shart - B)
anyni ham ishlatishdan oldin toraytirish shart - C)
unknownfaqat obyekt tiplariga beriladi - D)
unknownāanyning yangi nomi, farqi yo'q
Javob
A ā unknown ni ishlatishdan oldin toraytirish shart
any tipni tekshiruvni butunlay o'chiradi ā 'menga ishon'. unknown ga hamma narsani berish mumkin, lekin toraytirmaguncha hech narsa qilib bo'lmaydi ā 'avval isbotla'. catch (e) da useUnknownInCatchVariables bilan e ā unknown.
30. Junior ā TypeScript'da never tipi qachon ishlatiladi?
- A) Funksiya qiymatsiz qaytganda ā
voido'rniga - B) Funksiya hech qachon qaytmaganda yoki imkonsiz tipda
- C)
nullvaundefinedo'rniga bo'sh qiymat sifatida - D) Bo'sh obyekt
{}tipini bildirish uchun
Javob
B ā Funksiya hech qachon qaytmaganda yoki imkonsiz tipda
never ā funksiya umuman qaytmaydi (xato tashlaydi yoki cheksiz sikl) yoki tip imkonsiz. void ā funksiya qaytaradi, lekin qiymatsiz. Exhaustive check'da ham ishlatiladi.
31. Junior/Middle ā interface va type farqi ā qaysi javob noto'g'ri?
- A)
interfacedeclaration merging ni qo'llab-quvvatlaydi (bir nom bilan ikki marta e'lon ā birlashadi) - B)
typeunion va tuple yasashi mumkin,interfaceā yo'q - C) Ikkalasi ham
extendsbilan kengaytiriladi - D)
typeruntime'da mavjud bo'ladi,interfaceā yo'q
Javob
D ā type runtime'da mavjud bo'ladi, interface ā yo'q
Ikkalasi ham kompilyatsiyadan keyin yo'qoladi. Shuning uchun ikkalasi ham DI token bo'la olmaydi ā abstract class yoki InjectionToken kerak.
32. Junior/Middle ā A tipi nima bo'ladi?
type X = { id: number };
type Y = { name: string };
type A = X & Y;
- A)
{ id: number; name?: string } - B)
neverā tiplar mos kelmaydi - C)
{ id: number } | { name: string } - D)
{ id: number; name: string }
Javob
D ā { id: number; name: string }
& (intersection) ikkala tipni birlashtiradi. | (union) esa 'yo u, yo bu' degani.
33. Middle ā K extends keyof T nima beradi?
function getProp<T, K extends keyof T>(obj: T, key: K): T[K] {
return obj[key];
}
- A)
Khar qandaystringbo'lishi mumkin - B)
KTning qiymat tiplaridan biri bo'ladi - C)
Kruntime'da kalit borligini tekshiradi - D)
KfaqatTning mavjud kalitlaridan biri bo'ladi
Javob
D ā K faqat T ning mavjud kalitlaridan biri bo'ladi
Generic constraint: noto'g'ri kalit kompilyatsiya xatosi beradi. getProp(user, 'email') ā agar user da email bo'lmasa, TS xato beradi.
34. Middle ā TypeScript utility type'laridan qaysi biri obyekt tipidan maydonni olib tashlaydi?
- A)
Partial<T> - B)
Record<K, V> - C)
Omit<T, K> - D)
Pick<T, K>
Javob
C ā Omit<T, K>
Pick ā TANLASH Ā· Omit ā OLIB TASHLASH (teskari juftlik) Ā· Record<K,V> ā noldan kalitāqiymat tipi Ā· Partial ā hamma maydon ixtiyoriy.
35. Middle ā T nima bo'ladi?
interface User { id: number; name: string; email: string; }
type T = Omit<User, 'email'> & { role: string };
- A)
{ id, name, email, role } - B)
{ id, name, role } - C)
{ role } - D)
{ email, role }
Javob
B ā { id, name, role }
Omit<User,'email'> ā {id, name}. Keyin & { role } qo'shiladi.
36. Middle ā Type predicate x is string olib tashlansa (: boolean qolsa) nima buziladi?
function isString(x: unknown): x is string {
return typeof x === 'string';
}
- A)
xifichida avtomatikanybo'lib qoladi - B) Hech narsa ā TS tipni funksiya tanasidan chiqaradi
- C)
ifichida narrowing yo'qoladi āxunknownqoladi - D) Kompilyatsiya xatosi ā
booleanqaytarib bo'lmaydi
Javob
C ā if ichida narrowing yo'qoladi ā x unknown qoladi
TS funksiya ichiga qaramaydi. x is string ā kompilyatorga berilgan va'da: 'true qaytarsam, argument string'.
37. Middle ā TypeScript'da quyidagilardan qaysi biri type guard emas?
- A)
typeof x === 'string' - B)
x instanceof Date - C)
'name' in obj - D)
x as string
Javob
D ā x as string
as ā type assertion (majburlash), tekshiruv emas. U runtime'da hech narsa qilmaydi va xato bo'lsa ham o'tkazib yuboradi.
38. Senior ā R nima bo'ladi?
type NonNull<T> = T extends null | undefined ? never : T;
type R = NonNull<string | null | number>;
- A)
never - B)
unknown - C)
string | number | null - D)
string | number
Javob
D ā string | number
Conditional type union bo'ylab tarqaladi (distributive): har a'zo alohida tekshiriladi va null never ga aylanib tushib qoladi.
39. Senior ā TypeScript standart kutubxonasida Partial<T> qanday yozilgan?
- A)
T | undefined - B)
{ [K in keyof T]?: T[K] } - C)
Omit<T, keyof T> - D) Built-in, TS ichida C++ da
Javob
B ā { [K in keyof T]?: T[K] }
Mapped type. keyof T ā kalitlar Ā· [K in ...] ā aylanish Ā· T[K] ā indexed access Ā· ? ā ixtiyoriy qilish. Required<T> da -? bilan modifikator olib tashlanadi.
40. Senior ā R nima bo'ladi?
type EventName<T extends string> = `on${Capitalize<T>}`;
type R = EventName<'click' | 'focus'>;
- A)
'onclick' | 'onfocus' - B)
'onClick' | 'onFocus' - C)
stringā literal yo'qoladi - D)
'onClick'ā faqat birinchisi
Javob
B ā 'onClick' | 'onFocus'
Template literal type + Capitalize. Union bo'ylab tarqaladi.
41. Middle/Senior ā Angular dekoratorlari (@Component, @Injectable) aslida nima?
- A) Klassni boshqa klass bilan almashtiruvchi tiplar
- B) Faqat kompilyatsiya vaqtidagi TS annotatsiyalari
- C) Klassga metadata biriktiruvchi oddiy funksiyalar
- D) JS standartining rasmiy qismi bo'lgan sintaksis
Javob
C ā Klassga metadata biriktiruvchi oddiy funksiyalar
Dekoratorlar oddiy funksiya ā runtime'da bajariladi va metadata saqlanadi, Angular uni o'qiydi. experimentalDecorators + emitDecoratorMetadata bilan metadata Reflect orqali saqlanadi.
42. Middle/Senior ā strictNullChecks: true nima o'zgartiradi?
- A)
nullvaundefinedendi har tipga sig'maydi - B) Runtime'da
nulltekshiruvini qo'shib beradi - C)
nullqiymatidan foydalanishni butunlay taqiqlaydi - D) Faqat
strict: truebilan birga yoqilsa ishlaydi
Javob
A ā null va undefined endi har tipga sig'maydi
Endi string | null oshkora yozilishi kerak. strict ā bu to'plam: strictNullChecks, noImplicitAny, strictFunctionTypes, strictBindCallApply va boshqalar.
Performance
43. Senior ā WeakMap kaliti nega faqat obyekt bo'lishi mumkin?
- A) Primitiv kalitlar hash qilinmaydi, tezlik tushadi
- B) Primitivlar
Mapda allaqachon qo'llab-quvvatlanadi - C) Zaif havola faqat GC yig'adigan qiymatga ma'noli
- D) Bu TypeScript tiplash cheklovi, JS'da mumkin
Javob
C ā Zaif havola faqat GC yig'adigan qiymatga ma'noli
Primitivning identikligi va umri yo'q, shuning uchun zaif havola ma'nosiz. Map kalitni kuchli ushlaydi ā leak. WeakMap da obyekt o'lsa yozuv ham o'ladi. Aylanib bo'lmaydi (size, keys() yo'q). ES2023 dan Symbol ham mumkin.
44. Senior ā Web Worker qanday muammoni hal qiladi va asosiy cheklovi nima?
- A) Tarmoq so'rovlarini tezlashtiradi; cheklov ā faqat HTTPS
- B) Og'ir hisobni alohida oqimda bajaradi; cheklov ā DOM yo'q
- C) Xotirani tejaydi; cheklov ā faqat Chrome'da ishlaydi
- D) Kodni avtomatik parallellaydi; cheklovi yo'q
Javob
B ā Og'ir hisobni alohida oqimda bajaradi; cheklov ā DOM yo'q
Worker UI oqimini muzlatmaydi. document, window, localStorage worker'da mavjud emas. Ma'lumot nusxalanadi (structured clone). zone.js ham worker ichida ishlamaydi.
45. Senior ā Closure qanday memory leak keltirib chiqaradi?
- A) Eski brauzerlarda GC closure'ni tanimaydi
- B) Tashqi o'zgaruvchiga havolani ushlab turadi
- C) Faqat rekursiv chaqiruvlarda stack to'lib ketadi
- D) Har chaqiruvda scope nusxasi klonlanib qoladi
Javob
B ā Tashqi o'zgaruvchiga havolani ushlab turadi
Havola ushlanib turgani uchun GC uni yig'a olmaydi. Katta obyektni ushlagan closure uzoq yashasa (masalan event listener ichida), o'sha obyekt ham xotirada qoladi.
Algoritmlash
40 savol
Murakkablik tahlili
1. Junior/Middle ā Murakkabligi?
function f(arr) {
for (let i = 0; i < arr.length; i++) {
if (arr.includes(arr[i] * 2)) return true;
}
return false;
}
- A) O(n)
- B) O(n log n)
- C) O(n²)
- D) O(1)
Javob
C ā O(n²)
Tashqarida tsikl O(n), ichida includes ā u ham massivni birma-bir ko'radi, O(n). Jami O(n²).
2. Junior/Middle ā O(n² + 3n + 100) ni soddalashtiring.
- A) O(n² + 3n)
- B) O(n²)
- C) O(n)
- D) O(100n²)
Javob
B ā O(n²)
Doimiylar va kichik hadlar tashlanadi ā faqat eng tez o'suvchi had qoladi.
3. Junior/Middle ā Murakkabligi?
for (let i = 0; i < n; i++) console.log(i);
for (let j = 0; j < n; j++) console.log(j);
- A) O(log n)
- B) O(2n)
- C) O(n²)
- D) O(n)
Javob
D ā O(n)
Yonma-yon tsikllar qo'shiladi: O(n+n)=O(2n)=O(n). Ichma-ich bo'lganda ko'paytirilardi.
4. Middle ā Murakkabligi?
const seen = new Set();
for (const x of arr) {
if (seen.has(x)) return true;
seen.add(x);
}
- A) O(n²)
- B) O(n)
- C) O(n log n)
- D) O(1)
Javob
B ā O(n)
Set.has va Set.add ā O(1) (hash). Tsikl O(n). Jami O(n). Hash tuzilmada yashirin tsikl yo'q.
5. Middle ā Murakkabligi?
function f(a, b) {
return a.filter(x => b.some(y => y.id === x.id));
}
- A) O(n)
- B) O(n log n)
- C) O(nĀ·m)
- D) O(1)
Javob
C ā O(nĀ·m)
Ikki xil massiv ā hajmlari boshqa. O(n²) faqat bir xil massiv ustida ikki marta yurilganda. Optimallashtirish: b dan Set yasang ā O(n+m).
6. Middle ā Kod murakkabligini baholaganda javob qaysi holatda O(n log n) bo'ladi?
- A) Har qanday ichma-ich ikki tsikl bo'lganda
- B) Har qanday rekursiv chaqiruv mavjud bo'lganda
- C) Saralash yoki har qadamda yarimlash bo'lganda
- D) Har elementda hash bo'yicha qidiruv bajarilganda
Javob
C ā Saralash yoki har qadamda yarimlash bo'lganda
Belgisi aniq: sort() bormi yoki har qadamda hajm ikkiga bo'linadimi (mid=(lo+hi)/2)? Ikkalasi yo'q bo'lsa ā javob O(n log n) emas.
7. Middle ā Space complexity qanday?
function sum(arr) {
let total = 0;
for (const x of arr) total += x;
return total;
}
- A) O(n²)
- B) O(n)
- C) O(1)
- D) O(log n)
Javob
C ā O(1)
Faqat bitta o'zgaruvchi yaratildi ā massiv qancha katta bo'lsa ham o'zgarmaydi. Kirish massivi hisoblanmaydi.
8. Middle ā Space complexity qanday?
function f(arr) {
const seen = new Set();
for (const x of arr) seen.add(x);
return seen.size;
}
- A) O(n²)
- B) O(log n)
- C) O(1)
- D) O(n)
Javob
D ā O(n)
Set ichiga n tagacha element tushadi ā xotira kirish hajmiga proporsional o'sadi. Nazorat savoli: 'men yangi narsa yaratdimmi, u n bilan o'sadimi?'
9. Middle ā Chuqurligi n bo'lgan rekursiv funksiyaning space complexity'si nega O(n)?
- A) Call stackda n ta freym turadi
- B) Har chaqiruv massivning yangi nusxasini yaratadi
- C) Har qadam natijasi keshda saqlanib boradi
- D) O(1) ā stack freymlari hisobga olinmaydi
Javob
A ā Call stackda n ta freym turadi
Har rekursiv chaqiruv stack'da joy egallaydi. Chuqurlik = space. Shuning uchun chuqur rekursiya RangeError beradi.
Ma'lumot tuzilmalari
10. Junior ā JS massivida quyidagi amallardan qaysi biri O(1) emas?
- A)
arr.push(x) - B)
arr.pop() - C)
arr[500] - D)
arr.shift()
Javob
D ā arr.shift()
Massivda oxir arzon, bosh qimmat: push/pop O(1), shift/unshift/splice O(n) ā hamma element suriladi.
11. Junior ā arr.splice(1, 2) nima qaytaradi va arr qanday bo'ladi?
const arr = [1, 2, 3, 4, 5];
const result = arr.splice(1, 2);
- A)
[1,2]Ā·[3,4,5] - B)
[2,3]Ā·[1,4,5] - C)
[2,3]Ā·[1,2,3,4,5] - D)
[1,2,3]Ā·[4,5]
Javob
B ā [2,3] Ā· [1,4,5]
splice(boshlanish, nechta) ā o'chirilganlarni qaytaradi va asl massivni o'zgartiradi. slice esa nusxa oladi, o'zgartirmaydi.
12. Junior/Middle ā Nega [...new Set(arr)] arr.filter((x,i)=>arr.indexOf(x)===i) dan tezroq?
- A)
Setā O(1) hash,indexOfā element boshiga O(n) - B)
indexOfham hash ishlatadi, farqi faqat sintaksisda - C)
filtermetodi har doimSetdan sekinroq ishlaydi - D)
Setmassivni avval saralab oladi ā O(n log n)
Javob
A ā Set ā O(1) hash, indexOf ā element boshiga O(n)
O(n) va O(n²) farqi. Hash funksiya kalitni to'g'ridan-to'g'ri xotira manziliga aylantiradi ā qidirish yo'q.
13. Junior/Middle ā Object va Map farqi ā qaysi javob noto'g'ri?
- A)
Objectkaliti ham har qanday tip bo'la oladi - B)
map.sizeā O(1),Object.keys(o).lengthā O(n) - C)
Mapkaliti har qanday tip bo'la oladi (obyekt ham) - D)
Mapqo'shilish tartibini saqlaydi
Javob
A ā Object kaliti ham har qanday tip bo'la oladi
Obyekt kalitlari satrga aylantiriladi: o[1] va o['1'] bir xil. Map da esa 1 va '1' alohida kalitlar.
14. Middle ā Stack va Queue farqi?
- A) Stack ā FIFO, Queue ā LIFO
- B) Stack ā LIFO, Queue ā FIFO
- C) Ikkalasi ham FIFO, farqi metod nomlarida
- D) Stack ā indeksli kirish, Queue ā LIFO
Javob
B ā Stack ā LIFO, Queue ā FIFO
Stack ā oxirgi kirgan birinchi chiqadi (undo, call stack, brauzer 'orqaga'). Queue ā birinchi kirgan birinchi chiqadi (chop etish navbati, Event Loop navbatlari).
15. Middle/Senior ā Linked List va Array ā boshiga element qo'shish?
- A) Linked List O(1), Array O(n)
- B) Ikkalasi O(1)
- C) Ikkalasi O(n)
- D) Linked List O(n), Array O(1)
Javob
A ā Linked List O(1), Array O(n)
Massivda elementlar ketma-ket yotadi ā hammasini surish kerak. Linked list'da faqat havola o'zgaradi. Lekin indeks bo'yicha o'qishda teskarisi: Array O(1), List O(n).
16. Senior ā BST da qaysi traversal saralangan ketma-ketlik beradi?
- A) Pre-order (tugun ā chap ā o'ng)
- B) In-order (chap ā tugun ā o'ng)
- C) Post-order (chap ā o'ng ā tugun)
- D) Level-order (qavatma-qavat, BFS)
Javob
B ā In-order (chap ā tugun ā o'ng)
BST qoidasi: chapda kichik, o'ngda katta. Chap shoxdan boshlab yurilsa ā eng kichiklardan. Pre-order ā nusxa olish, Post-order ā o'chirish.
17. Senior ā BST da qidiruv qachon O(log n) emas, O(n) bo'ladi?
- A) Daraxt muvozanatsiz ā zanjirga aylanib qolsa
- B) Daraxtda takroriy qiymatlar ko'p bo'lsa
- C) Daraxtdagi tugunlar soni juda ko'payib ketsa
- D) Daraxt to'liq balanslangan holatga kelsa
Javob
A ā Daraxt muvozanatsiz ā zanjirga aylanib qolsa
Saralangan ma'lumot ketma-ket qo'shilsa, BST bir tomonlama zanjir bo'lib qoladi. Yechim: AVL, Red-Black tree.
18. Senior ā Graf uchun adjacency list va matrix ā qaysi javob to'g'ri?
- A) Matrix har doim afzal ā xotirasi kam va tezroq
- B) Ikkalasi ham O(V²) xotira, farqi qidiruv tezligida
- C) List ā O(V²) xotira; Matrix ā O(V+E), tekshiruv O(n)
- D) List ā O(V+E) xotira; Matrix ā O(V²), tekshiruv O(1)
Javob
D ā List ā O(V+E) xotira; Matrix ā O(V²), tekshiruv O(1)
List kam bog'lanishli grafda afzal, Matrix'da esa 'A va B bog'langanmi?' savoli O(1). Amalda deyarli doim adjacency list ishlatiladi ā real graflar siyrak (sparse) bo'ladi.
Qidiruv va Saralash
19. Junior/Middle ā Binary search ishlashi uchun asosiy shart?
- A) Shart yo'q
- B) Uzunlik 2 darajasi bo'lishi
- C) Massiv saralangan bo'lishi
- D) Elementlar unikal bo'lishi
Javob
C ā Massiv saralangan bo'lishi
Har qadamda yarmi tashlanadi ā bu faqat tartib ma'lum bo'lganda ishlaydi.
20. Junior/Middle ā Binary search 1 000 000 elementda maksimal necha qadam qiladi?
- A) ~1000
- B) 1 000 000
- C) ~10
- D) ~20
Javob
D ā ~20
logā(1 000 000) ā 20. Har qadamda hajm ikki barobar kamayadi.
21. Junior/Middle ā Bubble, Selection, Insertion Sort ā murakkabligi?
- A)
O(n log n)ā uchtasi ham - B)
O(n)ā bitta o'tish yetarli - C)
O(n log n), faqat Bubble SortO(n²) - D)
O(n²)ā uchtasi ham
Javob
D ā O(n²) ā uchtasi ham
Uchtasida ham ichma-ich ikki tsikl. Istisno: Insertion Sort deyarli saralangan kichik massivda O(n) ga yaqin ā shuning uchun TimSort ichida ishlatiladi.
22. Middle ā Merge Sort va Quick Sort ā qaysi javob to'g'ri?
- A) Ikkalasi ham barqaror (stable) saralash hisoblanadi
- B) Quick har doim Merge'dan tezroq va barqaror
- C) Merge qo'shimcha xotira ishlatmaydi (in-place)
- D) Merge kafolatli
O(n log n), Quick āO(n²)xavfi
Javob
D ā Merge kafolatli O(n log n), Quick ā O(n²) xavfi
Merge: kafolatlangan O(n log n), barqaror, O(n) xotira. Quick: o'rtacha O(n log n), in-place O(log n) xotira, barqaror emas.
23. Senior ā Quick Sort qachon O(n²) ga tushadi?
- A) Massivda takroriy qiymatlar juda ko'p bo'lganda
- B) Massiv juda katta bo'lib xotiraga sig'masa
- C) Pivot random tanlanganda ā bo'linish notekis bo'ladi
- D) Pivot doim eng katta yoki eng kichik element bo'lsa
Javob
D ā Pivot doim eng katta yoki eng kichik element bo'lsa
Masalan allaqachon saralangan massivda birinchi element pivot bo'lsa, bo'linish 1 va n-1 bo'lib ketadi. Davo: random pivot yoki median-of-three.
24. Middle ā Array.prototype.sort() haqida qaysi javob noto'g'ri?
- A) Barqaror (stable)
- B) Yangi massiv qaytaradi
- C) O(n log n)
- D) Asl massivni o'zgartiradi
Javob
B ā Yangi massiv qaytaradi
sort() o'sha massivning o'zini qaytaradi: a.sort() === a ā true. Nusxa uchun [...a].sort() yoki a.toSorted().
25. Middle ā Nima chiqadi?
console.log([10, 9, 100, 1].sort());
- A)
[1, 10, 100, 9] - B)
[1, 9, 10, 100] - C)
[100, 10, 9, 1] - D)
[10, 9, 100, 1]
Javob
A ā [1, 10, 100, 9]
Sukut bo'yicha sort() elementlarni satrga aylantirib solishtiradi: '1' < '10' < '100' < '9'. Sonlar uchun: sort((a,b) => a-b).
26. Middle ā JS'da Array.prototype.sort() ning murakkabligi implementatsiyaga bog'liqmi?
- A) Ha ā dvigatelga qarab
O(n)danO(n²)gacha - B) Faqat V8 da
O(n log n), boshqalardaO(n²) - C) Kichik massivda
O(n)ā Insertion Sort tanlanadi - D) Yo'q ā taqqoslashli saralash
O(n log n)dan tez emas
Javob
D ā Yo'q ā taqqoslashli saralash O(n log n) dan tez emas
Bu matematik quyi chegara. V8 TimSort ishlatadi ā Merge + Insertion aralashmasi, O(n log n). Kodda sort() ko'rsangiz ā javob kamida O(n log n).
Algoritmik paradigmalar
27. Middle ā Bu kodda nima yetishmayapti?
function countdown(n) {
console.log(n);
return countdown(n - 1);
}
- A)
nkamaytirilmayapti ā qiymat o'zgarmaydi - B)
returnyo'q ā funksiyaundefinedqaytaradi - C) Base case yo'q ā
RangeErrorberadi - D) Hech narsa ā rekursiya to'g'ri yozilgan
Javob
C ā Base case yo'q ā RangeError beradi
To'xtash sharti bo'lmagani uchun RangeError: Maximum call stack size exceeded. Har rekursiv funksiyada ikki qism shart: ā to'xtash sharti (base case) ā” muammoni kichraytirib o'ziga murojaat.
28. Middle ā Oddiy rekursiv Fibonachchi funksiyasida fib(40) nega memoizatsiyasiz juda sekin ishlaydi?
- A) JS dvigateli rekursiyani optimallashtirmaydi
- B) Xotira
O(n²)ā freymlar saqlanib qoladi - C)
O(2āæ)ā bir xil qiymatlar qayta hisoblanadi - D) Call stack limiti oshadi ā chuqurlik 40 ta
Javob
C ā O(2āæ) ā bir xil qiymatlar qayta hisoblanadi
Har qadamda tarmoq ikkiga bo'linadi. fib(3) bir necha marta, fib(2) yanada ko'p marta hisoblanadi.
29. Middle/Senior ā Memoizatsiyalangan rekursiv Fibonachchi fib(n) ning vaqt va xotira murakkabligi?
- A) O(2āæ) / O(n)
- B) O(log n) / O(n)
- C) O(n) / O(1)
- D) O(n) / O(n)
Javob
D ā O(n) / O(n)
Har qiymat bir marta hisoblanadi (O(n) vaqt), kesh n ta yozuv saqlaydi (O(n) xotira). Savdo: xotirani berib, vaqtni sotib olasiz.
30. Senior ā Dinamik dasturlashda (DP) Memoization va Tabulation farqi?
- A) Tabulation ā rekursiv, Memoization ā tsiklli
- B) Tabulation sekinroq ā keshni har safar o'qiydi
- C) Ikkalasi ham bir xil, faqat nomlari boshqa
- D) Memoization ā rekursiv, Tabulation ā tsikl bilan
Javob
D ā Memoization ā rekursiv, Tabulation ā tsikl bilan
Memoization call stack ishlatadi, Tabulation esa pastdan yuqoriga tsikl bilan yuradi. Tabulation'da stack overflow xavfi yo'q va odatda tezroq. Memoization yozish osonroq.
31. Senior ā Grafda eng qisqa yo'l (og'irliksiz) uchun qaysi algoritm va tuzilma?
- A) DFS, rekursiya
- B) DFS, Stack
- C) Ikkalasi ham bir xil
- D) BFS, Queue
Javob
D ā BFS, Queue
BFS qavat-qavat tarqaladi ā manzilga birinchi yetgan yo'l eng qisqasi. DFS bitta shoxni oxirigacha yuradi, topgan yo'li eng qisqa bo'lishi shart emas.
32. Senior ā Grafni aylanib chiqishda DFS qaysi ma'lumot tuzilmasidan foydalanadi?
- A) Min-heap ā prioritet navbat
- B) Hash map ā ko'rilganlar to'plami
- C) Queue ā navbat (FIFO)
- D) Stack yoki rekursiya
Javob
D ā Stack yoki rekursiya
Ikkalasi ham O(V+E). Yodlash: BFS ā Boshida navbat (Queue) Ā· DFS ā Deep, stack.
Amaliy masalalar
33. Middle ā Two Sum ā hash map bilan qanday O(n) bo'ladi?
- A) Massivni saralab, ikki tomondan kursor yurgizish
- B) Ikki ichma-ich tsikl, lekin juftlarni map'da saqlash
- C) Har elementda
target - xni map'dan qidirish - D) Barcha juftliklarni rekursiv tekshirib chiqish
Javob
C ā Har elementda target - x ni map'dan qidirish
Topilmasa x ni map'ga qo'shib ketiladi. G'oya: 'juftlikni qidirish' o'rniga 'menga nima yetishmayapti' deb so'rang va uni O(1) da tekshiring.
34. Middle/Senior ā Sliding Window qaysi masalaga mos?
- A) Ikki saralangan massivni bittaga birlashtirish
- B) Grafda ikki tugun orasidagi eng qisqa yo'l
- C) Ketma-ket k ta elementning eng katta yig'indisi
- D) Daraxtda berilgan qiymatni qidirib topish
Javob
C ā Ketma-ket k ta elementning eng katta yig'indisi
Oynani surganda bitta element qo'shiladi, bittasi ayiriladi ā qaytadan sanalmaydi. O(nĀ·k) ā O(n). Belgisi: 'ketma-ket', 'uzluksiz qism', 'eng uzun substring'.
35. Middle/Senior ā Two Pointers qachon ishlatiladi?
- A) Har qanday massivda universal ā saralash shart emas
- B) Faqat linked list'da tsiklni aniqlash uchun
- C) Faqat rekursiv bo'linadigan masalalarda
- D) Saralangan massivda ikki tomondan juftlik topishda
Javob
D ā Saralangan massivda ikki tomondan juftlik topishda
Bir yo'nalishda ikki kursor ko'rinishi ham bor. O(n) vaqt, O(1) xotira ā hash map'dan afzalligi shu. Palindrom tekshirishda ham ishlatiladi.
36. Middle/Senior ā Massiv saralanmagan, yig'indisi target bo'lgan juftlik kerak. Qaysi naqsh?
- A) Hash Map
- B) Sliding Window
- C) Two Pointers
- D) Binary search
Javob
A ā Hash Map
Two Pointers saralangan massivni talab qiladi. Saralanmagan bo'lsa ā hash map (O(n) vaqt, O(n) xotira). Saralash O(n log n) qo'shardi.
37. Middle ā Bu kodda qanday xato bor?
function findDuplicates(arr) {
const result = new Set();
for (const x of arr) {
if (!result.has(x)) result.add(x);
}
return [...result];
}
- A)
O(n²)āSet.hashar safar massivni skanerlaydi - B) Dublikatlarni emas, unikallarni qaytaradi
- C)
Setbu masalaga mos emas,Mapkerak - D) Xato yo'q ā dublikatlar to'g'ri topiladi
Javob
B ā Dublikatlarni emas, unikallarni qaytaradi
Set.add o'zi takrorni qabul qilmaydi, shuning uchun if (!result.has(x)) sharti hech narsa qilmaydi. Ikkita Set kerak: seen va dups. Optimallashtirish natijani o'zgartirmasligi kerak.
38. Senior ā Binary search'da bu qatorning xatosi nima?
while (lo <= hi) {
const mid = Math.floor((lo + hi) / 2);
if (sorted[mid] === x) return mid;
if (sorted[mid] < x) lo = mid;
else hi = mid - 1;
}
- A)
hi = mid - 1xato āhi = midbo'lishi kerak - B)
lo = midā cheksiz sikl,lo = mid + 1kerak - C)
midhisoblashda toshib ketish (overflow) bor - D) Xato yo'q ā sikl
lo <= hibilan to'g'ri tugaydi
Javob
B ā lo = mid ā cheksiz sikl, lo = mid + 1 kerak
lo va hi qo'shni bo'lganda mid o'zgarmaydi va sikl abadiy davom etadi. Ikkinchi klassik bug: while (lo < hi) ā oxirgi element tekshirilmaydi, <= bo'lishi kerak.
39. Middle ā Bu kodda qanday muammo bor?
const arr = [1, 2, 4, 5];
arr.forEach((x, i) => {
if (x % 2 === 0) arr.splice(i, 1);
});
- A) Iteratsiya paytida massiv o'zgaryapti ā indeks suriladi
- B)
forEachichidasplicechaqirish TypeError beradi - C) Cheksiz sikl ā
forEachuzunlikni qayta o'qiydi - D) Xato yo'q ā juft sonlar to'g'ri o'chiriladi
Javob
A ā Iteratsiya paytida massiv o'zgaryapti ā indeks suriladi
4 o'chirilgach indekslar suriladi va 5 o'tkazib yuboriladi. To'g'ri yo'l: arr = arr.filter(x => x % 2 !== 0) yoki teskari yo'nalishda yurish.
40. Middle ā Bu funksiyada qanday yon ta'sir bor?
function getTop3(arr) {
return arr.sort((a, b) => b - a).slice(0, 3);
}
- A)
slice()asl massivdan elementlarni kesib oladi - B)
sort()asl massivni o'zgartiradi (mutatsiya) - C) Har chaqiruvda yangi massiv yaratiladi ā xotira sarfi
- D) Yon ta'sir yo'q ā
sortnusxa qaytaradi
Javob
B ā sort() asl massivni o'zgartiradi (mutatsiya)
Chaqiruvchining scores massivi tartibi buziladi. Mutatsiya qiladigan metodlar: sort Ā· reverse Ā· splice Ā· push/pop Ā· shift/unshift Ā· fill. Yechim: [...arr].sort(...) yoki arr.toSorted(...).
Angular ā Boshlang'ich
35 savol
Component
1. Junior ā selector: 'app-user' bilan e'lon qilingan komponentni <div app-user> ko'rinishida ishlatsa bo'ladimi?
- A) Yo'q ā bu element selektor, atribut uchun
'[app-user]'kerak - B) Ha, faqat standalone komponentda ruxsat etilgan
- C) Ha, Angular element va atribut ko'rinishini ham qabul qiladi
- D) Ha, lekin
@Inputbog'lanishlari ishlamaydi
Javob
A ā Yo'q ā bu element selektor, atribut uchun '[app-user]' kerak
'app-user' ā <app-user> Ā· '[app-user]' ā atribut Ā· '.app-user' ā klass. Direktivalar deyarli doim atribut selektor bilan.
2. Junior ā Angular template'da data binding turlarini to'g'ri moslang: {{x}} Ā· [x] Ā· (x) Ā· [(x)]
- A) interpolation Ā· property Ā· event Ā· two-way
- B) property Ā· interpolation Ā· two-way Ā· event
- C) two-way Ā· property Ā· event Ā· interpolation
- D) interpolation Ā· event Ā· property Ā· two-way
Javob
A ā interpolation Ā· property Ā· event Ā· two-way
{{ }} interpolation (komponentāview) Ā· [prop] property binding (komponentāview) Ā· (event) event binding (viewākomponent) Ā· [(ngModel)] two-way (banana in a box).
3. Junior/Middle ā Standalone komponentda imports massiviga nima tushadi?
- A) Faqat boshqa standalone komponentlar
- B) Faqat
CommonModulevaFormsModule - C) Faqat NgModule'lar va ularning eksportlari
- D) Modul, komponent, direktiva va pipe ā hammasi
Javob
D ā Modul, komponent, direktiva va pipe ā hammasi
Standalone komponent o'zi 'mini-modul'. Klassik NgModule'da esa imports ga faqat modul tushadi.
4. Junior/Middle ā Angular komponent lifecycle hook'larining to'g'ri tartibi?
- A)
ngOnInitāngAfterViewInitāngOnChangesāngOnDestroy - B)
ngOnChangesāngAfterViewInitāngOnInitāngOnDestroy - C)
ngOnChangesāngOnInitāngAfterViewInitāngOnDestroy - D)
ngOnInitāngOnChangesāngAfterViewInitāngOnDestroy
Javob
C ā ngOnChanges ā ngOnInit ā ngAfterViewInit ā ngOnDestroy
ngOnChanges ngOnInit dan oldin ā chunki ngOnInit ga kirganda @Input qiymatlari tayyor bo'lishi kerak.
5. Junior/Middle ā Komponent constructor ida @Input qiymatini o'qish mumkinmi?
- A) Ha, DI bilan bir vaqtda o'rnatiladi
- B) Yo'q ā u yerda qiymat hali
undefined - C) Faqat
required: trueberilgan bo'lsa - D) Faqat
input()signal shaklida bo'lsa
Javob
B ā Yo'q ā u yerda qiymat hali undefined
@Input qiymatlari ngOnChanges da o'rnatiladi, u esa constructor dan keyin. Konstruktorga faqat DI yoziladi.
6. Junior/Middle ā @Output bilan ota-onaga xabar yuborish uchun nima kerak?
- A)
EventEmitteryaratibemit()chaqirish - B)
@Inputorqali callback funksiya uzatish - C)
window.dispatchEventbilan custom event - D) Ota-onada
@ViewChildbilan bolani o'qish
Javob
A ā EventEmitter yaratib emit() chaqirish
@Output() saved = new EventEmitter<User>() ā this.saved.emit(user). Ota-onada: <app-x (saved)="onSaved($event)">. Ota-onada: <app-x (saved)="onSaved($event)">. v17.1+ da funksional shakli ā output().
7. Middle ā @Input({ required: true }) nima qiladi?
- A) Template'da berilmasa kompilyatsiya xatosi
- B) Birinchi CD siklida qiymat borligini tekshiradi
- C) Qiymat
nullbo'lsa runtime'da xato tashlaydi - D) Konstruktorda ham qiymat borligini kafolatlaydi
Javob
A ā Template'da berilmasa kompilyatsiya xatosi
Angular 16+. Bu user!: User dagi ! (non-null assertion) ni xavfsizroq qiladi ā kompilyator tekshiradi.
8. Middle/Senior ā input.required<User>() va @Input({required:true}) user!: User farqi?
- A)
input()faqat zoneless rejimda ishlaydi - B)
input()ikki tomonlama bog'lanish beradi ā[(user)]ishlaydi - C) Faqat sintaksis farqi, natija bir xil
- D)
input()signal qaytaradi āuser()deb o'qiladi
Javob
D ā input() signal qaytaradi ā user() deb o'qiladi
Angular 17.1+. input() faqat o'qish uchun signal, model() esa ikki tomonlama ([(value)]). Signal bo'lgani uchun computed/effect ichida kuzatiladi va CD ga o'zi xabar beradi.
Template
9. Junior ā Angular template'da #ref template o'zgaruvchisi uch xil holatda nimaga ishora qiladi?
- A) Element ā DOM node, komponent ā instansiya,
exportAsā direktiva - B) Uchala holatda ham DOM elementga ishora qiladi
- C) Har doim komponent yoki direktiva instansiyasi qaytadi
- D) Komponentda ham
nativeElement, direktivadaundefinedqaytadi
Javob
A ā Element ā DOM node, komponent ā instansiya, exportAs ā direktiva
Element'da ā nativeElement. Komponent'da ā komponent klassi instansiyasi. exportAs bilan ā o'sha direktiva.
10. Junior/Middle ā Angular template'da user?.address?.city va user!.address yozuvlarining farqi?
- A)
!qiymatnullbo'lsa uniundefinedga aylantiradi - B) Ikkalasi ham runtime'da
nulldan himoya qiladi - C)
?.runtime'da tekshiradi,!ā faqat TypeScript uchun - D)
!runtime'da tekshiradi,?.ā faqat TypeScript uchun
Javob
C ā ?. runtime'da tekshiradi, ! ā faqat TypeScript uchun
! ā non-null assertion, va'da. Yolg'on bo'lsa runtime'da baribir crash bo'ladi.
11. Middle ā ng-template, ng-container, ng-content ā qaysi javob to'g'ri?
- A)
ng-templatechaqirilmasa chizilmaydi,ng-containerDOM'da yo'q - B)
ng-contento'z bolalarining-templatega o'raydi - C)
ng-containerDOM'da oddiy<div>bo'lib chiziladi, qolgani xuddi shu - D) Uchalasi ham DOM'da o'z elementini yaratib chiziladi
Javob
A ā ng-template chaqirilmasa chizilmaydi, ng-container DOM'da yo'q
ng-template ā 'chizilmagan chizma'. Uni *ngTemplateOutlet yoki strukturaviy direktiva chaqiradi. *ngIf ichkarida aynan ng-template ga aylanadi. ng-content esa parent'dan kelgan kontentni proyeksiya qiladi.
12. Middle ā ng-content select nima uchun?
- A) Proyeksiya qilingan kontentga CSS selektor qo'llaydi
- B) Named slot ā kontentni selektor bo'yicha taqsimlaydi
- C) Proyeksiya qilingan kontentni shart bo'yicha filtrlaydi
- D) Proyeksiya tartibini alifbo bo'yicha saralaydi
Javob
B ā Named slot ā kontentni selektor bo'yicha taqsimlaydi
<ng-content select="[header]"> va <ng-content select=".body"> ā parent <div header> va <div class="body"> yozadi, ular tegishli joyga tushadi. selectsiz <ng-content> ā qolgan hammasi.
13. Middle ā @ViewChild bilan olingan element birinchi marta qayerda mavjud bo'ladi?
- A)
constructor - B)
ngOnChanges - C)
ngOnInit - D)
ngAfterViewInit
Javob
D ā ngAfterViewInit
ngOnInit da template hali qurilmagan. { static: true } bilan ngOnInit da ham olish mumkin ā lekin faqat *ngIf ichida bo'lmagan elementlar uchun.
14. Middle ā @ViewChild va @ContentChild farqi?
- A)
@ViewChildā o'z template'i,@ContentChildā proyeksiya - B)
@ViewChildā komponentlar,@ContentChildā DOM elementlar - C) Ikkalasi ham o'z template'ida qidiradi, farq ā tayyor bo'lish vaqti
- D)
@ContentChildā o'z template'i,@ViewChildā proyeksiya
Javob
A ā @ViewChild ā o'z template'i, @ContentChild ā proyeksiya
Shuning uchun @ContentChild ngAfterContentInit da tayyor bo'ladi ā u ngAfterViewInit dan oldin. @ContentChild ā <ng-content> orqali parent'dan kelgan element.
15. Middle ā @ViewChildren nima qaytaradi?
- A)
Observable<Element[]>ā har CD'da yangi qiymat - B)
Arrayā oddiy massiv, o'zgarishini kuzatib bo'lmaydi - C)
QueryListā.changesobservable'i bor to'plam - D)
NodeListā brauzerning jonli DOM to'plami
Javob
C ā QueryList ā .changes observable'i bor to'plam
QueryList ā forEach, map, toArray() bor. .changes.subscribe() bilan ro'yxat o'zgarishini kuzatish mumkin.
Change Detection
16. Junior/Middle ā Angular'ning default change detection strategiyasida CD qachon ishga tushadi?
- A) Faqat
detectChanges()qo'lda chaqirilganda - B) Faqat
@Inputreference o'zgarganda - C)
zone.jsushlagan har async hodisadan keyin - D) Har animatsiya freym'ida (
requestAnimationFrame)
Javob
C ā zone.js ushlagan har async hodisadan keyin
Va u butun daraxtni yuqoridan pastga tekshiradi. Shuning uchun katta ilovada qimmat. Manbalar: setTimeout, Promise, DOM event, HTTP ā hammasi zone.js tomonidan patch qilingan.
17. Middle ā ChangeDetectionStrategy.OnPush komponentni 'iflos' qiladigan 4 ta narsa?
- A) Yangi
@Inputreference Ā·setTimeoutĀ·.subscribe()Ā· getter - B) Har qanday property o'zgarishi Ā· event Ā· HTTP javobi Ā· timer
- C)
@Inputreference Ā·detectChangesĀ·tick()Ā·NgZone.run - D) Yangi
@Inputreference Ā· event Ā·asyncpipe Ā·markForCheck
Javob
D ā Yangi @Input reference Ā· event Ā· async pipe Ā· markForCheck
Bu ro'yxatda yo'q narsa = yangilanmaydi. arr.push() (reference o'zgarmadi), qo'lda .subscribe(), setTimeout ichida property ā hech biri ishlamaydi.
18. Middle ā ChangeDetectionStrategy.OnPush komponentga @Input() user obyekti berilgan. Ota-onada shu obyektning property'si mutatsiya qilindi ā ekran yangilanadimi?
- A) Ha, chunki CD template ifodalarini baribir qayta hisoblaydi
- B) Yo'q ā reference o'zgarmadi, OnPush uni o'tkazib yuboradi
- C) Ha, agar
@Inputuchun setter e'lon qilingan bo'lsa - D) Ha, lekin bir CD sikli kechikish bilan ko'rinadi
Javob
B ā Yo'q ā reference o'zgarmadi, OnPush uni o'tkazib yuboradi
OnPush reference'ni === bilan solishtiradi. To'g'ri yo'l: this.user = { ...this.user, name: 'Vali' } ā mutatsiya emas, almashtirish.
19. Middle/Senior ā ChangeDetectorRef ning markForCheck() va detectChanges() metodlari farqi?
- A) Ikkalasi ham darhol tekshiradi, farq ā qamrov kengligida
- B)
markForCheckfaqat OnPush'da,detectChangesesa faqat Default'da - C)
markForCheckā belgilaydi, keyingi siklda;detectChangesā darhol - D)
detectChangesā belgilaydi,markForCheckā darhol tekshiradi
Javob
C ā markForCheck ā belgilaydi, keyingi siklda; detectChanges ā darhol
Ildizgacha belgilash kerak, chunki CD yuqoridan pastga yuradi ā oradagi toza OnPush ota-ona butun shoxni kesib o'tadi. markForCheck komponentdan ildizgacha bo'lgan zanjirni iflos belgilaydi; detectChanges shu komponent va bolalarini o'sha zahoti tekshiradi.
20. Middle/Senior ā Komponentda ChangeDetectorRef.detach() qachon foydali?
- A) SSR'da serverdagi ortiqcha renderni to'xtatish uchun
- B) Katta ro'yxatni birinchi renderdan oldin to'liq tayyorlab olishda
- C) Juda tez yangilanadigan komponentda ā CD ni o'zingiz boshqarasiz
- D) Komponent yo'q qilinishidan oldin xotirani bo'shatishda
Javob
C ā Juda tez yangilanadigan komponentda ā CD ni o'zingiz boshqarasiz
Masalan setInterval ichida sekundiga bir marta detectChanges() ā 60 marta o'rniga. Masalan 60fps grafik yoki katta jadval: CD dan uzib, kerakli paytda detectChanges() chaqiriladi.
21. Senior ā Angular zoneless rejimda quyidagilardan qaysi biri DOM'ni yangilaydi?
- A)
setTimeout(() => this.name = 'Ali') - B)
this.nameSignal.set('Ali') - C)
http.get().subscribe(v => this.name = v) - D)
setInterval(() => this.count++)
Javob
B ā this.nameSignal.set('Ali')
Zoneless ā 'kuzatuv' emas, 'xabar berish'. 4 manba: signal Ā· async pipe Ā· template event Ā· markForCheck. Oddiy property yozish hech kimga xabar bermaydi.
22. Senior ā Mavjud Angular ilovasini zoneless rejimga o'tkazishning birinchi qadami?
- A) Signal'ga o'tish
- B)
zone.jsni o'chirish - C) Butun ilovani OnPush ga o'tkazish
- D) Barcha
setTimeoutni olib tashlash
Javob
C ā Butun ilovani OnPush ga o'tkazish
OnPush va zoneless bir xil narsani talab qiladi: aniq xabar berish. Ilova OnPush da to'g'ri ishlasa, zoneless deyarli og'riqsiz o'tadi.
23. Middle ā ExpressionChangedAfterItHasBeenCheckedError nega chiqadi va uch yechimi?
- A) Template'da bir xil ifoda ikki marta yozilgani uchun
- B) Prod build'da ham chiqadi ā CD sikli cheksiz aylanib qolgan
- C) Faqat OnPush komponentlarda uchraydigan reference xatosi
- D) Dev rejimdagi ikkinchi tekshiruv ā qiymat CD'dan keyin o'zgargan
Javob
D ā Dev rejimdagi ikkinchi tekshiruv ā qiymat CD'dan keyin o'zgargan
Prod'da bu xato chiqmaydi ā ikkinchi tekshiruv o'chirilgan. Ya'ni buzuq kod prod'ga chiqib ketishi va DOM eski qiymatda qotishi mumkin. Odatda ngAfterViewInit da property o'zgartirilgani sabab. Yechim: setTimeout Ā· Promise.then Ā· cdr.detectChanges().
Advanced Component
24. Senior ā Dinamik komponentni kod orqali yaratish uchun nima ishlatiladi?
- A)
document.createElement - B)
ViewContainerRef.createComponent() - C)
new MyComponent() - D)
ComponentFactoryResolver(v13 dan olib tashlangan)
Javob
B ā ViewContainerRef.createComponent()
v13 dan ComponentFactoryResolver kerak emas: this.vcr.createComponent(MyComponent). Natija ComponentRef ā instance, destroy(), setInput() bor.
25. Senior ā Angular'da AOT va JIT kompilyatsiyaning farqi?
- A) Ivy'dan keyin ikkalasi birlashgan, endi farqi qolmagan
- B) AOT ā build paytida, JIT ā brauzerda runtime'da kompilyatsiya
- C) JIT ā build paytida, AOT ā brauzerda runtime'da kompilyatsiya
- D) AOT prod uchun, JIT dev uchun ā bugun ham shunday ishlaydi
Javob
B ā AOT ā build paytida, JIT ā brauzerda runtime'da kompilyatsiya
Angular 9 (Ivy) dan boshlab AOT ā default, hatto dev rejimda ham. JIT deyarli ishlatilmaydi. AOT tezroq start, kichikroq bundle va build vaqtida template xatolarini beradi.
26. Senior ā Angular Elements nima?
- A) DOM elementlariga kirish uchun yangi
ElementRefAPI'si - B) Angular CDK ichidagi uslubsiz UI primitivlari to'plami
- C) Web Component'ni Angular komponentiga o'rash mexanizmi
- D) Angular komponentini Web Component sifatida eksport qilish
Javob
D ā Angular komponentini Web Component sifatida eksport qilish
createCustomElement(MyComponent, {injector}) ā customElements.define('my-el', el). Micro-frontend va legacy loyihalarga integratsiya uchun.
27. Senior ā Angular Ivy (v9) renderer nima berdi?
- A) Faqat kompilyatsiya tezligini oshirgan renderer yangilanishi
- B) Kichikroq bundle, tezroq qayta build, soddaroq debug
- C) Template'ga yangi sintaksis olib kelgan kompilyator
- D) SSR va hydration imkoniyatini birinchi bo'lib qo'shgan
Javob
B ā Kichikroq bundle, tezroq qayta build, soddaroq debug
Ivy v9 dan default, v12 da View Engine butunlay olib tashlandi. Locality prinsipi: har komponent mustaqil kompilyatsiya qilinadi. Yaxshi tree-shaking hisobiga bundle kichrayadi; View Engine olib tashlandi.
Component
28. Middle ā ViewEncapsulation.Emulated (default) stillarni qanday izolyatsiya qiladi?
- A) Stillar global
<style>ga tushadi, izolyatsiya yo'q - B) Stillar shablon ichiga inline
stylebo'lib yoziladi - C) Element va CSS'ga
_ngcontent-xxxatributi qo'shiladi - D) Shadow DOM yaratadi, izolyatsiyani brauzer ta'minlaydi
Javob
C ā Element va CSS'ga _ngcontent-xxx atributi qo'shiladi
Emulated ā Shadow DOM'siz taqlid: Angular har komponentga unikal atribut beradi va selektorlarni .title[_ngcontent-abc] ko'rinishida qayta yozadi. None ā hech qanday qayta yozish yo'q, stil global bo'lib butun ilovaga tarqaladi. ShadowDom ā haqiqiy brauzer Shadow DOM'i: tashqi global stillar ham ichkariga kirmaydi.
29. Middle/Senior ā :host va :host-context() farqi nima?
:host { display: block; }
:host(.active) { border: 1px solid; }
:host-context(.dark-theme) { background: #222; }
- A)
:hostā komponent ildizi,:host-context()ā ota kontekst - B)
:hostā ichki elementlar,:host-context()ā host teg - C) Ikkalasi ham host elementini tanlaydi, sintaksis farqi bor
- D)
:host-context()faqatViewEncapsulation.Noneda ishlaydi
Javob
A ā :host ā komponent ildizi, :host-context() ā ota kontekst
:host komponentning o'z host elementini tanlaydi (qavs ichida shart berish mumkin: :host(.active)). :host-context(.dark-theme) esa yuqoriga ā ota elementlar zanjiriga qaraydi: agar biror ajdodda shu klass bo'lsa, stil qo'llanadi. Tema almashtirish uchun aynan shu ishlatiladi.
30. Middle/Senior ā ::ng-deep nima qiladi va nega deprecated?
- A) Stilni bola komponentlarga o'tkazadi; standart emas
- B) Stilni faqat host elementiga qo'llaydi; o'rniga
:hostbor - C) Barcha stillarni global qiladi; Angular 17 da olib tashlandi
- D) Shadow DOM chegarasini buzadi; faqat
Nonebilan ishlaydi
Javob
A ā Stilni bola komponentlarga o'tkazadi; standart emas
::ng-deep dan keyingi selektorga Angular _ngcontent atributini qo'shmaydi ā natijada stil bola komponentlar ichiga o'tadi. U aslida global bo'lib qoladi, shuning uchun deyarli doim :host ::ng-deep .x ko'rinishida cheklanadi. Deprecated, chunki bu W3C'ning tark etilgan /deep/ taklifiga asoslangan; muqobil ā CSS o'zgaruvchilari yoki bola komponentga @Input orqali klass berish.
Advanced Component
31. Middle ā NgComponentOutlet nima uchun ishlatiladi?
<ng-container *ngComponentOutlet="widget; inputs: { title: 'Salom' }">
</ng-container>
- A)
router-outleto'rnini bosadigan yangi marshrut chiqishi - B) Komponent shablonini alohida faylga ko'chirish uchun
- C) Shablonda dinamik komponent yaratish ā deklarativ yo'l
- D)
ng-contentbilan proyeksiya qilingan kontentni olish
Javob
C ā Shablonda dinamik komponent yaratish ā deklarativ yo'l
NgComponentOutlet ā ViewContainerRef.createComponent() ning deklarativ muqobili: klassni bersangiz, Angular komponentni o'zi yaratadi va almashtirilganda eskisini yo'q qiladi. v16.2 dan inputs, shuningdek injector, content va ngComponentOutletNgModule opsiyalari bor. Imperativ API kerak bo'ladi, agar ComponentRef ustida to'liq nazorat zarur bo'lsa.
Change Detection
32. Senior ā afterNextRender() ngAfterViewInit() dan nimasi bilan farq qiladi?
- A) Faqat brauzerda, DOM to'liq render bo'lgach ishlaydi
- B) Har change detection siklidan so'ng qayta chaqiriladi
- C) Faqat SSR serverida ishlaydi, brauzerda chaqirilmaydi
- D) Bir xil,
afterNextRenderā uning yangi nomi xolos
Javob
A ā Faqat brauzerda, DOM to'liq render bo'lgach ishlaydi
v17 dagi afterRender/afterNextRender serverda umuman ishlamaydi va faqat butun ilova DOM'ga yozilgach chaqiriladi ā shuning uchun offsetWidth o'lchash yoki chart kutubxonasini ulash uchun xavfsiz. ngAfterViewInit esa SSR'da ham ishlaydi va u paytda hali brauzer layout'i yo'q. afterRender har renderdan keyin, afterNextRender ā faqat bir marta.
Template
33. Middle ā CUSTOM_ELEMENTS_SCHEMA qachon kerak bo'ladi?
@Component({
selector: 'app-root',
template: '<my-widget [value]="x"></my-widget>',
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
- A) Web Component ishlatganda
NG0304xatosini o'chiradi - B) Standalone komponentni NgModule ichiga ulaganda kerak
- C) Har qanday shablon xatosini o'chirib qo'yish uchun
- D) Yangi HTML atributlari va event'larni ro'yxatga olish uchun
Javob
A ā Web Component ishlatganda NG0304 xatosini o'chiradi
Angular tanimagan tegni ko'rsa NG0304: 'my-widget' is not a known element beradi. CUSTOM_ELEMENTS_SCHEMA ichida - bo'lgan teglarni va ularning atributlarini tekshirmasdan o'tkazib yuboradi ā Angular Elements yoki tashqi Web Component'lar uchun. Narxi: o'z komponentingiz nomidagi xato ham endi jimgina o'tib ketadi. NO_ERRORS_SCHEMA yanada kengroq va xavfliroq.
34. Senior ā DomSanitizer.bypassSecurityTrustHtml() nima qiladi?
this.html = this.sanitizer.bypassSecurityTrustHtml(userInput);
<div [innerHTML]="html"></div>
- A) CSP sarlavhasiga ruxsat qo'shadi, HTML'ga tegmaydi
- B) HTML'ni tozalab,
<script>teglarini olib tashlaydi - C) Sanitizatsiyani o'chiradi ā XSS javobgarligi sizda
- D) HTML'ni matn sifatida ekranga chiqaradi, teglarsiz
Javob
C ā Sanitizatsiyani o'chiradi ā XSS javobgarligi sizda
Angular [innerHTML] ga tushgan qiymatni default holda avtomatik sanitizatsiya qiladi: <script>, onerror va shu kabi xavfli joylarni olib tashlaydi. bypassSecurityTrust* esa qiymatni 'ishonchli' deb belgilaydi va tekshiruvni butunlay chetlab o'tadi. Uni faqat o'zingiz yaratgan, foydalanuvchidan kelmagan HTML uchun ishlating.
Change Detection
35. Junior/Middle ā Dev rejimda Angular prod'dan farqli ravishda nima qiladi?
- A) Har bir komponentni ikki marta qayta render qiladi
- B) Barcha
console.logchaqiruvlarini o'chirib tashlaydi - C) CD dan keyin qo'shimcha tekshiruv sikli yuritadi
- D) Change detection'ni butunlay o'chirib qo'yadi
Javob
C ā CD dan keyin qo'shimcha tekshiruv sikli yuritadi
Dev rejimda Angular har change detection'dan keyin binding'larni yana bir bor tekshiradi va qiymat o'zgargan bo'lsa ExpressionChangedAfterItHasBeenCheckedError beradi ā bu render paytida holatni o'zgartirishni ushlab qoladi. isDevMode() shu rejimni bildiradi; ng build prod rejimida ikkinchi sikl va ko'p ogohlantirishlar bundle'dan chiqarib tashlanadi.
Angular ā Service va DI
26 savol
Service asoslari
1. Junior ā @Injectable() dekoratori nima uchun kerak?
- A) Faqat
providedInyozish imkonini beradi - B) Klassni service turiga aylantiradi ā busiz service emas
- C) Klassni singleton qilib ro'yxatdan o'tkazadi
- D) Angular'ga DI metadata beradi ā bog'liqlik inject qilinadi
Javob
D ā Angular'ga DI metadata beradi ā bog'liqlik inject qilinadi
Agar service hech narsa inject qilmasa, texnik jihatdan @Injectable()siz ham ishlaydi ā lekin har doim yozish tavsiya etiladi.
2. Junior ā providedIn: 'root' ning NgModule.providers dan asosiy afzalligi?
- A) Faqat qisqaroq yozuv, natija esa bir xil
- B) Service ilova ishga tushishida darhol yaratiladi
- C) Tree-shakable ā ishlatilmasa bundle'ga tushmaydi
- D) NgModule'siz standalone ilovada yagona yo'l
Javob
C ā Tree-shakable ā ishlatilmasa bundle'ga tushmaydi
NgModule.providers da e'lon qilingan service ishlatilmasa ham bundle'ga tushardi.
3. Middle ā providedIn: 'root', 'platform', 'any' farqi?
- A)
anyā bitta,rootā har modulga,platformā brauzer bo'ylab - B)
rootā bitta,platformā ilovalararo,anyā har injectorga - C) Uchalasi ham bitta instansiya beradi, farq ā yaratilish vaqti
- D)
rootā bitta,platformā har lazy modulga,anyā ilovalararo
Javob
B ā root ā bitta, platform ā ilovalararo, any ā har injectorga
platform micro-frontend yoki bir sahifada bir nechta bootstrapApplication bo'lganda kerak. any ā har lazy modul (environment injector) uchun alohida instansiya.
4. Middle ā Angular'da inject() funksiyasini qayerda chaqirish mumkin?
- A) Faqat injection context'da ā field,
constructor, factory - B) Faqat
constructorparametrida, boshqa joyda emas - C)
ngOnInitva undan keyingi barcha lifecycle hook'larda - D) Komponent va service ichida istalgan metodda
Javob
A ā Faqat injection context'da ā field, constructor, factory
ngOnInit yoki oddiy metodda chaqirilsa ā NG0203. Chegara: inject() = DI qurilish payti, lifecycle = undan keyin. Funksional guard/interceptor va useFactory ham injection context hisoblanadi.
5. Middle ā inject() ning konstruktor DI dan afzalligi?
- A) Bundle hajmini kamaytiradi, dekorator metadata kerak emas
- B) Bog'liqlikni kerak bo'lgan paytda lazy yuklaydi
- C) Konstruktor DI'dan tezroq ā reflection ishlatmaydi
- D) Merosda qulay ā bola
super()ga bog'liqlik uzatmaydi
Javob
D ā Merosda qulay ā bola super() ga bog'liqlik uzatmaydi
export class Base { protected http = inject(HttpClient); } ā bola klass hech narsa yozmaydi.
HTTP
6. Junior ā HttpClient metodi chaqirilganda so'rov qachon ketadi?
- A)
ngOnInittugagach, birinchi CD siklida - B)
asyncpipe ishlatilgandagina jo'natiladi - C)
subscribe()qilinganda ā observable cold - D) Metod chaqirilishi bilan darhol jo'natiladi
Javob
C ā subscribe() qilinganda ā observable cold
Shuning uchun ikki marta subscribe = ikkita HTTP so'rov. Yechim: shareReplay(1) yoki *ngIf="x$ | async as x".
7. Junior/Middle ā HttpClient so'roviga query parametr qanday to'g'ri qo'shiladi?
- A)
{ headers: { q: term } }orqali uzatiladi - B)
{ body: { q: term } }ā GET'da ham ishlaydi - C)
{ params: new HttpParams().set('q', term) } - D)
'/api?q=' + encodeURIComponent(term)bilan
Javob
C ā { params: new HttpParams().set('q', term) }
Satr birlashtirish maxsus belgilarda (&, bo'shliq, +) URL'ni buzadi. HttpParams avtomatik encode qiladi. HttpParams immutable ā set yangi obyekt qaytaradi.
8. Junior/Middle ā HttpClient bilan JSON emas, fayl (blob) yuklab olish uchun nima kerak?
- A) Alohida metod
- B)
{ responseType: 'blob' } - C)
headers: {Accept: 'blob'} - D)
fetchishlatish
Javob
B ā { responseType: 'blob' }
responseType: 'json' (default) Ā· 'text' Ā· 'blob' Ā· 'arraybuffer'.
9. Middle ā Interceptor'da nega req.clone() kerak?
- A) Nusxa asl obyektdan tezroq serializatsiya qilinadi
- B)
HttpRequestimmutable ā mutatsiya qilinmasligi kerak - C) Har interceptor o'z so'rovini alohida yuborishi uchun
- D) TypeScript
readonlymaydonlarga yozishni taqiqlaydi
Javob
B ā HttpRequest immutable ā mutatsiya qilinmasligi kerak
Bu OnPush dagi 'mutatsiya emas, almashtirish' qoidasining aynan o'zi, boshqa joyda. Mutatsiya qilinsa retry yoki keyingi interceptor'da header ikki marta qo'shilib qolishi mumkin.
10. Middle/Senior ā Angular 15+ funksional interceptor qanday ro'yxatdan o'tkaziladi?
- A)
provideHttpClient(withInterceptorsFromDi())bilan - B)
provideInterceptors([authInterceptor])bilan - C)
{provide: HTTP_INTERCEPTORS, useValue: authInterceptor} - D)
provideHttpClient(withInterceptors([authInterceptor]))
Javob
D ā provideHttpClient(withInterceptors([authInterceptor]))
Tur: HttpInterceptorFn = (req, next) => next(req.clone(...)). Eski klass interceptor'lar uchun withInterceptorsFromDi().
11. Middle ā HTTP xatolarini bir joyda boshqarish uchun interceptor'da nima yoziladi?
- A)
next(req)chaqiruvinitry/catchblokiga o'rash - B)
next(req).pipe(catchError(...))operatori orqali - C)
next(req).subscribe()ichida xatoni ushlash - D) Global
ErrorHandlerprovayderini almashtirish
Javob
B ā next(req).pipe(catchError(...)) operatori orqali
Bir joyda 401 ā login sahifasi, 500 ā toast xabar. Xatoni yuqoriga uzatish uchun throwError qaytariladi.
12. Senior ā Muvaffaqiyatsiz HTTP so'rovni exponential backoff bilan qayta urinish qanday yoziladi?
- A)
repeat({ count: 3, delay: 1000 })operatori bilan - B)
catchErrorichidasetTimeoutbilan qayta chaqirish - C)
retry({ count: 3, delay: (e, i) => timer(i * 1000) }) - D)
retry(3)ā RxJS kechikishni o'zi oshirib boradi
Javob
C ā retry({ count: 3, delay: (e, i) => timer(i * 1000) })
Darhol 3 marta urinish yuklangan serverga qo'shimcha yuk beradi. Kutish nafas beradi. 4xx da retry mantiqsiz ā faqat 5xx va tarmoq xatolarida.
Hierarchical DI
13. Middle ā DI qidiruvi qaysi yo'nalishda ketadi?
- A) Komponent injector'idan yuqoriga, root'gacha
- B) Root injector'dan pastga, komponentgacha
- C) Avval root'da, topilmasa komponentda qidiradi
- D) Faqat komponentning o'z injector'ida qidiradi
Javob
A ā Komponent injector'idan yuqoriga, root'gacha
Har komponent instansiyasining o'z element injector'i bor. Topilmasa NullInjectorError. Har komponent instansiyasining o'z element injector'i bor.
14. Middle ā Quyidagi sozlamada CartService ning nechta instansiyasi yaratiladi?
@Injectable({ providedIn: 'root' })
export class CartService {}
@Component({ selector: 'app-cart', providers: [CartService] })
export class CartComponent {}
// ota template: <app-cart></app-cart> Ć 3
- A) 1 ā
providedIn: 'root'ustunlik qiladi - B) Xato ā bir service ikki joyda provide qilinmaydi
- C) 4 ā root'dagi bittasi va uchta komponentniki
- D) 3 ā har komponent instansiyasi o'zinikini oladi
Javob
D ā 3 ā har komponent instansiyasi o'zinikini oladi
providedIn: 'root' ā qat'iy qonun emas, standart qiymat. Komponentdagi providers uni bekor qiladi va har komponent instansiyasi o'zining CartService ini oladi. Klassik bug: providers: [AuthService].
15. Senior ā Angular DI'da bola komponent ota-onasining service instansiyasini olishi kerak. Qaysi dekorator?
- A)
@Host() - B)
@Optional() - C)
@SkipSelf() - D)
@Self()
Javob
C ā @SkipSelf()
@SkipSelf ā 'o'zimni o'tkazib yubor, yuqoridan qidir'. @Self ā faqat o'zimda qidir. @Host ā host komponentgacha.
16. Senior ā Bu kodda @Optional() nima uchun kerak?
@NgModule({ providers: [AuthService] })
export class CoreModule {
constructor(@Optional() @SkipSelf() parent: CoreModule) {
if (parent) throw new Error('CoreModule faqat AppModule da!');
}
}
- A) To'g'ri import'da yuqorida hech narsa topilmaydi ā
nullkerak - B) Lazy modul o'z injector'ida qidirmasligi uchun
- C)
@SkipSelfbilan birga yozilishi TypeScript talabi - D)
CoreModuleikki marta import qilinsa xato bermasligi uchun
Javob
A ā To'g'ri import'da yuqorida hech narsa topilmaydi ā null kerak
@SkipSelf ā 'menda tashqari yana biri bormi?'. @Optional ā 'topilmasa null qaytar'. Ikkalasi birga ikki marta import'ni aniqlaydi.
Advanced DI
17. Senior ā Nega interfeys DI token bo'la olmaydi?
- A) Angular faqat
abstract classtokenlarini qo'llaydi - B) Interfeys bir nechta klass tomonidan implement qilinadi
- C) Interfeys kompilyatsiyadan keyin runtime'da qolmaydi
- D) Interfeysga
@Injectabledekoratori yozib bo'lmaydi
Javob
C ā Interfeys kompilyatsiyadan keyin runtime'da qolmaydi
Yechim: abstract class (JS'da klass sifatida qoladi) yoki InjectionToken.
18. Senior ā Angular DI'da InjectionToken qachon kerak?
- A) Klass bo'lmagan bog'liqlik uchun ā config, satr, funksiya
- B) Har qanday service'ni provide qilishda tavsiya etiladi
- C) Bir nechta instansiya kerak bo'lganda ajratish uchun
- D) Faqat testda haqiqiy service'ni mock bilan almashtirishda
Javob
A ā Klass bo'lmagan bog'liqlik uchun ā config, satr, funksiya
export const API_URL = new InjectionToken<string>('api.url') ā { provide: API_URL, useValue: '...' } ā inject(API_URL).
19. Senior ā Provider turlarini moslang: useClass Ā· useValue Ā· useFactory Ā· useExisting
- A) qiymat Ā· almashtirish Ā· taxallus Ā· hisoblash
- B) hisoblash Ā· tayyor qiymat Ā· almashtirish Ā· taxallus
- C) almashtirish Ā· taxallus Ā· qiymat Ā· hisoblash
- D) almashtirish Ā· tayyor qiymat Ā· hisoblash Ā· taxallus
Javob
D ā almashtirish Ā· tayyor qiymat Ā· hisoblash Ā· taxallus
useClass ā mock/platform almashtirish Ā· useValue ā config, konstanta Ā· useFactory ā deps bilan hisoblab Ā· useExisting ā alias (bir instansiya, ikki token).
20. Senior ā Angular DI'da config qiymati environment ga qarab hisoblanishi kerak. Qaysi provider turi?
- A)
useClass - B)
useValue - C)
useFactory - D)
useExisting
Javob
C ā useFactory
{ provide: CONFIG, useFactory: () => environment.production ? prodCfg : devCfg, deps: [] }. useValue statik qiymat uchun.
21. Senior ā Angular provider'idagi multi: true nima qiladi?
- A) Tokenni bir nechta injector'da qayta ishlatishga ruxsat
- B) Bitta token ostida massiv yig'iladi ā hammasi qaytadi
- C) Service'ning bir nechta instansiyasini yaratadi
- D) Keyingi provider oldingisini almashtiradi
Javob
B ā Bitta token ostida massiv yig'iladi ā hammasi qaytadi
HTTP_INTERCEPTORS, APP_INITIALIZER, NG_VALUE_ACCESSOR ā hammasi multi provider.
22. Senior ā Angular'da APP_INITIALIZER tokeni nima qiladi?
- A) Har route navigatsiyasida qaytadan ishga tushadi
- B) Root injector qurilganda, kutmasdan ishlaydi
- C) Birinchi komponent render bo'lib bo'lgandan keyin ishlaydi
- D) Bootstrap'dan oldin ishlaydi ā Angular Promise'ni kutadi
Javob
D ā Bootstrap'dan oldin ishlaydi ā Angular Promise'ni kutadi
Config yuklash, feature flag olish, auth holatini tiklash uchun. Angular 19 dan provideAppInitializer() ā soddaroq shakli.
23. Senior ā Angular'da ENVIRONMENT_INITIALIZER (v14+) nima uchun?
- A) SSR'da server environment'ini sozlash uchun
- B)
environment.tsfayllarini yuklab, config'ni tarqatadi - C)
APP_INITIALIZERning v14 dagi yangi nomi - D) Environment injector qurilganda bir marta yon ta'sir
Javob
D ā Environment injector qurilganda bir marta yon ta'sir
APP_INITIALIZER ā bootstrap'ni kutadi. ENVIRONMENT_INITIALIZER ā kutmaydi, shunchaki injector qurilganda ishlaydi. Kutubxonalar o'zini ro'yxatdan o'tkazishi uchun ishlatiladi.
State management (service)
24. Middle ā Angular service'ida local state saqlash uchun qaysi RxJS Subject turi mos?
- A)
ReplaySubject(1)ā oxirgi qiymatni takrorlaydi - B)
Subjectā faqat yangi qiymatlarni tarqatadi - C)
AsyncSubjectā faqat yakuniy qiymatni beradi - D)
BehaviorSubjectā boshlang'ich qiymati bor
Javob
D ā BehaviorSubject ā boshlang'ich qiymati bor
Komponent qachon yuklanishidan qat'i nazar qiymat oladi. .value bilan sinxron o'qish ham mumkin. Yangi subscriber darhol joriy qiymatni oladi; ReplaySubject(1) esa boshlang'ich qiymat bermaydi va .value yo'q.
25. Middle ā BehaviorSubject state pattern'ida nega asObservable() ishlatiladi?
- A) TypeScript tur xatolarining oldini oladi
- B) Tashqaridan
next()chaqirishning oldini oladi - C) Subscriber'lar sonini cheklab, xotira tejaydi
- D) Observable'ni cold'dan hot'ga o'tkazadi
Javob
B ā Tashqaridan next() chaqirishning oldini oladi
private state$ = new BehaviorSubject(init); readonly value$ = this.state$.asObservable(); ā o'zgartirish faqat service metodlari orqali. Holat faqat o'qish uchun ochiladi ā o'zgartirish faqat service metodlari orqali.
26. Middle/Senior ā Signal-based store (v17+) BehaviorSubject'dan nimasi bilan afzal?
- A) Faqat sintaksis qulayligi, ishlash prinsipi bir xil
- B) Asinxron oqimlarni (HTTP, debounce) yaxshiroq boshqaradi
- C) Sinxron o'qish,
computedhosila, unsubscribe kerak emas - D) RxJS'ni butunlay almashtiradi ā operatorlar kerak emas
Javob
C ā Sinxron o'qish, computed hosila, unsubscribe kerak emas
private _items = signal<Item[]>([]); readonly items = this._items.asReadonly(); readonly total = computed(() => ...). Zoneless rejim bilan ham to'g'ridan-to'g'ri ishlaydi.
Angular ā Directive
27 savol
Built-in directives
1. Junior ā *ngIf da else bloki qanday yoziladi?
- A)
*ngIf="x"va qo'shni elementda*ngElse - B)
*ngIf="x"yonida*ngIfElse="tpl"qo'shiladi - C)
*ngIf="x; else tpl"+<ng-template #tpl> - D)
*ngIf="x; otherwise tpl"+<ng-template>
Javob
C ā *ngIf="x; else tpl" + <ng-template #tpl>
then ham bor: *ngIf="x; then a else b". v17+ da soddaroq: @if (x) {...} @else {...}.
2. Junior ā *ngFor da mavjud lokal o'zgaruvchilar qaysilar?
- A)
index,first,last,even,odd,count - B)
index,even,oddā qolganlari@forda bor - C)
index,first,last,count,length,key - D)
$index,$first,$last,$even,$odd,$count
Javob
A ā index, first, last, even, odd, count
*ngFor="let x of items; let i = index; let isFirst = first". v17+ da @for da to'g'ridan-to'g'ri: $index, $first, $last, $even, $odd, $count.
3. Junior ā *ngFor da trackBy berilmasa, ro'yxat yangilanganda nima bo'ladi?
- A) Faqat sekinroq ishlaydi, DOM elementlari saqlanadi
- B) Angular xato beradi ā
trackBymajburiy maydon - C) Angular DOM elementlarni qayta yaratadi ā fokus yo'qoladi
- D) Ro'yxat elementlarining tartibi tasodifiy buzilib ketadi
Javob
C ā Angular DOM elementlarni qayta yaratadi ā fokus yo'qoladi
Angular reference bo'yicha solishtiradi. Serverdan kelgan yangi obyektlar boshqa reference'ga ega. v17+ @for da track majburiy.
4. Junior ā [ngClass] qaysi shakllarni qabul qiladi?
- A) Faqat satr va massiv, obyekt
[class]uchun - B) Faqat boolean qaytaradigan ifodalar
- C) Satr, massiv va obyekt ā uchalasi ham
- D) Faqat obyekt ā
{a: true, b: false}
Javob
C ā Satr, massiv va obyekt ā uchalasi ham
Klass nomi ham dinamik bo'lganda ngClass kerak. Nom ma'lum bo'lsa [class.active]="x" ā tezroq va import kerak emas.
5. Junior ā [ngStyle] va [style.width.px] farqi?
- A) Ikkalasi ham
NgStyledirektivasiga kompilyatsiya bo'ladi - B)
[style.width.px]ā native binding,ngStyleā direktiva - C)
ngStyletezroq ā obyektni bir marta qo'llaydi - D)
[style.width.px]faqat statik qiymat bilan ishlaydi
Javob
B ā [style.width.px] ā native binding, ngStyle ā direktiva
[style.width.px]="100" ā width: 100px. Ko'p style dinamik bo'lsa ngStyle, aks holda native binding. Native binding birlik bilan yoziladi va tezroq; ko'p style dinamik bo'lsa ngStyle qulay.
6. Junior ā ngSwitch to'g'ri sintaksisi?
- A)
[ngSwitch]+[ngSwitchCase]+[ngSwitchDefault] - B)
*ngSwitch+[ngSwitchCase]+[ngSwitchDefault] - C)
*ngSwitch+*ngSwitchCase+*ngSwitchDefault - D)
[ngSwitch]+*ngSwitchCase+*ngSwitchDefault
Javob
D ā [ngSwitch] + *ngSwitchCase + *ngSwitchDefault
ngSwitch ā property binding (kvadrat qavs), ngSwitchCase/ngSwitchDefault ā strukturaviy (yulduzcha). v17+: @switch (x) { @case ('a') {...} @default {...} }.
7. Middle ā @if/@for va *ngIf/*ngFor ā asosiy texnik farq?
- A) Yangilari
ng-templatega aylanmaydi ā to'g'ridan-to'g'ri kod - B) Eskilari v17 dan deprecated, v19 da olib tashlangan
- C) Faqat sintaksis farqi ā kompilyator natijasi aynan bir xil
- D) Yangilari
CommonModuleimport qilinishini talab qiladi
Javob
A ā Yangilari ng-template ga aylanmaydi ā to'g'ridan-to'g'ri kod
*ngIf ā NgIf direktivasiga muhtoj, demak import kerak. @if ā til konstruksiyasi. Shuning uchun @if/@for tezroq va ular uchun CommonModule kerak emas.
Custom Attribute Directive
8. Junior/Middle ā Angular'da custom direktiva yozilmoqda ā uning selector i odatda qanday shaklda beriladi?
- A)
'app-x'ā element - B)
'[appX]'ā atribut - C)
'.app-x'ā klass - D) Farqi yo'q
Javob
B ā '[appX]' ā atribut
Direktiva mavjud elementga xatti-harakat qo'shadi, yangi element yaratmaydi. Shuning uchun atribut selektor.
9. Middle ā Direktivada @Input nomi selektor bilan bir xil bo'lsa (selector: '[appColor]', @Input() appColor), template'da qaysi shaklni ishlatish to'g'ri?
- A) Faqat
<p [appColor]="color">ā qavsli shakl - B) Faqat
<p appColor="red">ā qavssiz shakl - C) Ikkalasi ham xato ā
@Inputnomi boshqa bo'lishi kerak - D) Ikkalasi ham ā qavssiz satr, qavs bilan ifoda
Javob
D ā Ikkalasi ham ā qavssiz satr, qavs bilan ifoda
Angular'ning o'zi shu naqshni ishlatadi: routerLink="/home" va [routerLink]="path".
10. Middle ā Angular direktivasida DOM bilan ishlashda ElementRef qachon o'rinli, qachon yo'q?
- A) Faqat
ngAfterViewInitdan keyin, SSR'da esa hech qachon - B) Faqat direktivada ā komponentda
@ViewChildishlatiladi - C) O'qish uchun ha, yozish uchun
Renderer2afzal - D) Har qanday DOM manipulyatsiyasi uchun to'g'ri vosita
Javob
C ā O'qish uchun ha, yozish uchun Renderer2 afzal
nativeElement ga to'g'ridan-to'g'ri yozish SSR/Web Worker'da crash beradi va innerHTML orqali XSS ochadi. O'qish: offsetWidth, getBoundingClientRect. Yozish uchun Renderer2 yoki @HostBinding.
11. Middle ā Direktivada DOM'ni o'zgartirishda Renderer2 nega el.nativeElement ga to'g'ridan-to'g'ri yozishdan afzal?
- A) Kodni qisqartiradi ā bir chaqiruvda bir nechta amal
- B) Platformadan mustaqil ā SSR va Web Worker'da ishlaydi
- C) DOM'ga to'g'ridan-to'g'ri yozgani uchun tezroq ishlaydi
- D) Yangi API ā
nativeElementv15 dan deprecated
Javob
B ā Platformadan mustaqil ā SSR va Web Worker'da ishlaydi
SSR'da document yo'q. Renderer2 abstraksiya ā brauzerda DOM, serverda HTML satriga yozadi. createText orqali XSS himoyasini ham beradi.
12. Middle ā @HostListener ishlatilganda removeEventListener yozish kerakmi?
- A) Faqat OnPush komponentlarda kerak bo'ladi
- B) Faqat
window:/document:prefiksli hodisalar uchun kerak - C) Ha,
ngOnDestroyda qo'lda olib tashlash kerak - D) Yo'q ā direktiva yo'q qilinganda Angular o'zi tozalaydi
Javob
D ā Yo'q ā direktiva yo'q qilinganda Angular o'zi tozalaydi
@HostListener('document:keydown.escape') va @HostListener('window:resize') ham avtomatik tozalanadi.
13. Middle ā Direktivada @HostBinding va Renderer2 orasidagi chegara qayerda ā qaysi biri qachon ishlatiladi?
- A) Ikkalasi bir xil ā
@HostBindingichidaRenderer2chaqiriladi - B)
@HostBindingā host element,Renderer2ā boshqa elementlar - C)
@HostBindingā deklarativ,Renderer2ā faqat SSR uchun - D)
@HostBindingv15 dan deprecated,hostobyekti almashtirgan
Javob
B ā @HostBinding ā host element, Renderer2 ā boshqa elementlar
Savol 'deklarativmi?' emas ā avvalo 'qaysi element?'. Host bo'lsa @HostBinding texnik jihatdan yagona yo'l emas, lekin eng to'g'risi. @HostBinding deklarativ ā CD uni o'zi qo'llaydi; Renderer2 imperativ.
14. Middle ā @HostBinding('class.active') isActive = false nima qiladi?
- A) Host
classatributini butunlayactivega almashtiradi - B)
activeklassi bo'lgan host elementlarni tanlab beradi - C) Host elementga
activeklassini faqat init'da qo'yadi - D)
isActiveo'zgargandaactiveklassini qo'shadi/oladi
Javob
D ā isActive o'zgarganda active klassini qo'shadi/oladi
Bu [class.active]="isActive" bilan aynan bir xil, faqat host element uchun. attr., style., class. prefikslari mavjud.
15. Middle ā Direktiva dekoratoridagi host obyekti bilan @HostBinding/@HostListener dekoratorlari farqi?
- A) Dekoratorlar tezroq ā kompilyator ularni inline qiladi
- B)
hostfaqat komponentda, dekoratorlar faqat direktivada - C)
hostobyekti eskirgan, dekoratorlar uni almashtirgan - D) Funksional jihatdan bir xil ā
hostyozuvi tavsiya etiladi
Javob
D ā Funksional jihatdan bir xil ā host yozuvi tavsiya etiladi
Eski kodda dekoratorlar, yangi kodda host obyekti uchraydi ā ikkalasini ham bilish kerak. host: {'[class.x]': 'isX', '(click)': 'onClick()'} ā hammasi bir joyda turadi.
Custom Structural Directive
16. Middle/Senior ā Strukturaviy direktiva konstruktoriga qaysi ikkitasi inject qilinadi?
- A)
ViewContainerRefvaElementRef - B)
ElementRefvaRenderer2 - C)
TemplateRefvaViewContainerRef - D)
TemplateRefvaChangeDetectorRef
Javob
C ā TemplateRef va ViewContainerRef
ElementRef foydasiz ā direktiva <ng-template> da turadi, u DOM'da <!--container--> izohi. Element yo'q ā ElementRef ham yo'q. TemplateRef ā nima chiziladi, ViewContainerRef ā qayerga chiziladi.
17. Middle/Senior ā *ngIf kabi custom strukturaviy direktiva yozilmoqda. @Input setter'ida hasView flagi nima uchun kerak?
- A)
ViewContainerRefbo'shligini tekshirishning yagona yo'li - B) Performance ā
createEmbeddedViewqimmat operatsiya - C) TypeScript setter'da qiymatni saqlashni talab qiladi
- D) Setter qayta chaqirilsa dublikat view yaratilmasligi uchun
Javob
D ā Setter qayta chaqirilsa dublikat view yaratilmasligi uchun
Angular'ning o'z NgIf manbasi ham aynan shunday yozilgan. Umumiy naqsh: DOM'ga element qo'shadigan har joyda 'allaqachon bormi?' tekshiruvi. Setter har CD'da qayta chaqirilishi mumkin.
18. Senior ā Angular template'da <div *ngIf="show"> yozilganda oldidagi yulduzcha aslida nima?
- A) Sintaktik shakar ā Angular uni
<ng-template>ga ochadi - B) Strukturaviy direktiva belgisi, undan boshqa ma'nosi yo'q
- C) Maxsus operator ā direktivani lazy chaqiradi
- D) Selektorni
[ ]o'rniga yozishning qisqa shakli
Javob
A ā Sintaktik shakar ā Angular uni <ng-template> ga ochadi
<div *ngIf="x"> ā <ng-template [ngIf]="x"><div></div></ng-template>. Shuning uchun bir elementda ikkita strukturaviy direktiva bo'lmaydi ā yechim ng-container.
19. Middle/Senior ā Direktiva dekoratoridagi exportAs: 'tooltip' nima beradi?
- A) Direktivani modul
exportsro'yxatiga avtomatik qo'shadi - B) Direktivani boshqa fayldan import qilishdagi nomini belgilaydi
- C) Tree-shaking uchun direktivaga unikal nom beradi
- D) Template'da direktiva instansiyasiga
#t="tooltip"bilan kirish
Javob
D ā Template'da direktiva instansiyasiga #t="tooltip" bilan kirish
#t (exportAs'siz) DOM elementga ishora qiladi, #t="tooltip" esa direktiva klassiga. Shundan keyin t.show() kabi metodlarni template'dan chaqirish mumkin.
20. Senior ā Komponent yoki direktiva dekoratoridagi hostDirectives (v15+) nima qiladi?
- A) Direktivalarni template'da import'siz ishlatishga ruxsat
- B) Host elementdagi direktivalarni o'qishga imkon beradi
- C) Komponent host elementiga direktivalarni biriktiradi
- D) Direktivalarni kerak bo'lganda lazy yuklaydi
Javob
C ā Komponent host elementiga direktivalarni biriktiradi
hostDirectives: [CdkDrag, {directive: TooltipDirective, inputs: ['tooltipText: text']}]. Input/output'larni qayta nomlash mumkin. Meros o'rniga kompozitsiya: xatti-harakat direktivalar orqali qo'shiladi.
21. Senior ā Angular CDK direktivalari (cdkDrag, cdkOverlay) nima?
- A) Faqat Material bilan birga ishlaydigan yordamchi direktivalar
- B) Angular jamoasi qo'llab-quvvatlamaydigan uchinchi tomon paketi
- C) Uslubsiz xatti-harakat primitivlari ā drag, overlay, a11y
- D) Angular Material komponentlarining tayyor to'plami
Javob
C ā Uslubsiz xatti-harakat primitivlari ā drag, overlay, a11y
CDK ā Material'ning poydevori, lekin mustaqil ishlatiladi. O'z dizayn tizimingizni qurishda foydali.
Advanced
22. Middle ā *ngComponentOutlet nima qiladi?
<ng-container *ngComponentOutlet="cmp; inputs: { title: 'Salom' }"></ng-container>
- A) Berilgan klassdan komponentni shu joyda yaratadi
- B) Komponent template'ini boshqa joyga ko'chirib qo'yadi
- C) Komponentni lazy chunk sifatida alohida yuklab beradi
- D) Komponent selektorini template'da dinamik almashtiradi
Javob
A ā Berilgan klassdan komponentni shu joyda yaratadi
Dinamik komponentni template'dan, ViewContainerRef bilan qo'l mehnatisiz yaratish usuli. ngComponentOutletInputs (v16.2+) ā input'larni obyekt sifatida uzatadi va obyekt o'zgarganda ularni yangilaydi; Injector, Content (ng-content proyeksiyasi) va ngModule opsiyalari ham bor. Cheklov: @Output larga to'g'ridan-to'g'ri obuna bo'lib bo'lmaydi ā buning uchun ViewContainerRef.createComponent va ComponentRef.instance kerak.
23. Middle ā let-item (qiymatsiz) context'ning qaysi kalitini oladi?
<ng-template #row let-item let-i="index">{{ i }}: {{ item.name }}</ng-template>
<ng-container *ngTemplateOutlet="row; context: { $implicit: user, index: 3 }"></ng-container>
- A)
itemnomli kalitni ā nomlar mos kelishi kerak - B) Context obyektining birinchi kalitini tartib bo'yicha
- C)
valuedeb nomlangan maxsus kalitni oladi - D)
$implicitkalitini ā standart qiymatni
Javob
D ā $implicit kalitini ā standart qiymatni
let-x ā context'dagi $implicit ni oladi, nomi ixtiyoriy. Qolgan kalitlar aniq ko'rsatiladi: let-i="index". Shuning uchun *ngFor da let item ishlaydi va index, first, even alohida yoziladi. Context obyekti o'zgarsa template avtomatik yangilanadi.
Built-in directives
24. Middle/Senior ā *ngFor ga beriladigan TrackByFunction qanday argumentlarni qaysi tartibda oladi?
- A)
(index: number, item: T)ā kalit qaytaradi - B) Eski va yangi elementni solishtirish uchun oladi
- C)
(item: T, index: number)shu tartibda oladi - D) Faqat element obyektini oladi va kalit qaytaradi
Javob
A ā (index: number, item: T) ā kalit qaytaradi
Tipi: type TrackByFunction<T> = (index: number, item: T) => any; ā index birinchi, bu eng ko'p yanglishiladigan joy. Qaytgan qiymat === bo'yicha solishtiriladi, shuning uchun odatda item.id qaytariladi (obyektning o'zini qaytarish trackBy'ni ma'nosiz qiladi). Yangi @for blokida bu track item.id ifodasiga aylandi va u majburiy.
Custom Attribute Directive
25. Middle/Senior ā @HostListener('document:click') haqida nima to'g'ri?
@HostListener('document:click', ['$event.target'])
onOutside(target: HTMLElement) { /* ... */ }
- A) Angular direktiva yo'q qilinganda listener'ni o'zi oladi
- B) Bu ishlamaydi ā faqat host hodisalari qo'llab-quvvatlanadi
- C) Faqat host element ichidagi click'larni ushlaydi
- D) Listener'ni qo'lda
ngOnDestroyda olib tashlash shart
Javob
A ā Angular direktiva yo'q qilinganda listener'ni o'zi oladi
document:, window: va body: prefikslari qo'llab-quvvatlanadi ā 'tashqariga bosish' (click outside), global keydown.escape, window:resize shu tarzda yoziladi. Tozalash Angular zimmasida: direktiva destroy bo'lganda listener avtomatik olib tashlanadi. Kamchiligi ā har bir hodisa zone ichida CD ni ishga tushiradi, shuning uchun scroll va mousemove uchun renderer.listen ni runOutsideAngular ichida ishlatgan ma'qul.
Advanced
26. Senior ā @ViewChild(X, { static: true }) qachon o'rinli bo'ladi?
- A) Element shartli ā natija
ngAfterViewInitda o'qilganda - B) Faqat
ContentChildbilan birga ishlatilganda - C) Element
*ngIfsiz āngOnInitda kerak bo'lganda - D) Bir nechta element topilishi kerak bo'lgan holatda
Javob
C ā Element *ngIfsiz ā ngOnInit da kerak bo'lganda
static: true ā natija birinchi change detection'gacha, ya'ni ngOnInit da tayyor bo'ladi, lekin element *ngIf/*ngFor ichida bo'lmasligi shart (aks holda undefined). static: false (v9+ dan default) ā shartli elementlar uchun, qiymat ngAfterViewInit da (@ContentChild uchun ngAfterContentInit da) paydo bo'ladi va shart o'zgarganda yangilanib turadi. Signal'li viewChild() (v17.3+) bu bayroqni umuman talab qilmaydi.
Built-in directives
27. Middle ā ngSwitch da birorta *ngSwitchCase mos kelmasa nima bo'ladi?
- A) Oxirgi mos kelgan case eskicha qolib ketadi
- B) Konsolga ogohlantirish chiqadi va blok tashlanadi
- C) Birinchi case standart sifatida ko'rsatiladi
- D)
*ngSwitchDefaultbo'lsa u, bo'lmasa hech nima
Javob
D ā *ngSwitchDefault bo'lsa u, bo'lmasa hech nima
ngSwitchDefault ixtiyoriy: u bo'lmasa hech qanday shox render qilinmaydi ā bu xato emas, 'jim' bo'sh holat. Taqqoslash === bo'yicha, shuning uchun '1' va 1 mos kelmaydi (URL'dan kelgan parametrlarda tez-tez uchraydigan xato). Bir nechta case bir vaqtda mos kelsa, hammasi ko'rsatiladi ā switch dagi break mantig'i yo'q. [ngPlural] xuddi shu sxemada ishlaydi: *ngPluralCase="'=0'", '=1', va 'other' ā bu yerda other default rolini bajaradi.
Angular ā Pipe
25 savol
Built-in pipes
1. Junior ā async pipe nima qiladi?
- A) Subscribe qiladi, lekin unsubscribe'ni o'zingiz yozishingiz kerak
- B) Observable'ni Promise'ga aylantirib
awaitqiladi - C) Subscribe qiladi, view yo'q qilinganda o'zi unsubscribe qiladi
- D) Faqat birinchi qiymatni oladi va oqimni yopadi
Javob
C ā Subscribe qiladi, view yo'q qilinganda o'zi unsubscribe qiladi
Unsubscribe AsyncPipe ning ngOnDestroy ida ā pipe'larda ham lifecycle hook bo'ladi. Har emisiyada markForCheck() ham chaqiradi ā shuning uchun OnPush bilan ishlaydi.
2. Junior ā {{ today | date:'dd/MM/yyyy' }} ā date pipe qanday formatlarni qabul qiladi?
- A) Faqat
dd/MM/yyyykabi maxsus format satrini - B) Faqat ISO 8601 satri, boshqa format qo'llanmaydi
- C) Faqat tayyor nomlar ā
short,medium,longyokifull - D) Maxsus format satri va tayyor nomlar (
short,medium)
Javob
D ā Maxsus format satri va tayyor nomlar (short, medium)
Uchinchi argument ā timezone, to'rtinchisi ā locale: date:'short':'+0500':'uz'. Locale uchun registerLocaleData kerak. Tayyor nomlar ro'yxati: short, medium, long, full, shortDate, mediumTime va h.k.
3. Junior ā {{ 1234.5 | currency:'UZS' }} nima qiladi?
- A) Sonni valyuta formatiga o'giradi ā belgi va ajratkichlar
- B) Joriy kursga qarab UZS ga konvertatsiya qilib formatlaydi
- C) Sonni satrga aylantirib, kasr qismini yaxlitlaydi
- D) Faqat son oldiga valyuta belgisini qo'shadi
Javob
A ā Sonni valyuta formatiga o'giradi ā belgi va ajratkichlar
Argumentlar: currency:'UZS':'symbol':'1.0-0':'uz' ā kod, ko'rinish (code/symbol/symbol-narrow), raqam formati, locale. Kurs konvertatsiya qilmaydi. Format ichiga mingliklar ajratkichi va kasr raqamlari ham kiradi.
4. Junior ā {{ 0.256 | percent:'1.1-1' }} nima chiqaradi?
- A)
0.3% - B)
25.6% - C)
0.256% - D)
26%
Javob
B ā 25.6%
percent qiymatni 100 ga ko'paytiradi. '1.1-1' = minInteger.minFraction-maxFraction. number pipe ham shu formatni ishlatadi: {{ 3.14159 | number:'1.2-2' }} ā 3.14.
5. Junior ā json pipe nima uchun?
- A) Kelgan JSON satrni obyektga parse qilib beradi
- B) Debug uchun obyektni
JSON.stringifybilan chiqaradi - C) Obyektni API ga yuborish uchun JSON satrga o'girib beradi
- D) Obyektni chiroyli jadval ko'rinishida formatlaydi
Javob
B ā Debug uchun obyektni JSON.stringify bilan chiqaradi
{{ user | json }}. Faqat ishlab chiqish uchun ā prod'da qoldirilmaydi. [object Object] o'rniga to'liq tuzilmani ko'rsatadi.
6. Junior ā {{ [1,2,3,4,5] | slice:1:3 }} nima chiqaradi?
- A)
[1,2] - B)
[2,3] - C)
[2,3,4] - D)
[1,2,3]
Javob
B ā [2,3]
slice:boshlanish:tugash ā tugash kirmaydi. Satr bilan ham ishlaydi. Array.prototype.slice bilan bir xil semantika. Manbani o'zgartirmaydi.
7. Junior ā titlecase pipe nima qiladi?
- A) Barcha harflarni katta qiladi ā
uppercasebilan bir xil ishlaydi - B) So'zlarni bosh harf bo'yicha alifboga saralaydi
- C) Har so'zning birinchi harfini katta, qolganini kichik qiladi
- D) Faqat satrning birinchi harfini katta qiladi
Javob
C ā Har so'zning birinchi harfini katta, qolganini kichik qiladi
'salom DUNYO' | titlecase ā 'Salom Dunyo'. Boshqalari: uppercase, lowercase.
8. Middle ā keyvalue pipe obyektni qanday tartibda chiqaradi?
- A) Sonli kalitlarni oldin, matn kalitlarni keyin joylaydi
- B) Kalitlar bo'yicha alifbo tartibida saralab chiqaradi
- C) Obyektda e'lon qilingan tartibni o'zgarishsiz qoldiradi
- D) Qiymatlar bo'yicha o'sish tartibida saralaydi
Javob
B ā Kalitlar bo'yicha alifbo tartibida saralab chiqaradi
Tartibni saqlash uchun taqqoslash funksiyasi: keyvalue: keepOrder bilan keepOrder = () => 0. Uni class property qilib yozing ā template'da inline yozsangiz har CD'da yangi funksiya yaratiladi.
Custom Pipe
9. Middle ā Custom pipe yaratish uchun nima kerak?
- A)
@Directive+PipeTransforminterfeysini implement qilish - B)
@Pipe({name:'x'})+PipeTransform(transformmetodi) - C)
@Injectablevatransformnomli metod yozish - D)
transformnomli oddiy funksiya eksport qilish
Javob
B ā @Pipe({name:'x'}) + PipeTransform (transform metodi)
transform(value: T, ...args: any[]): R. Template'da: {{ value | x:arg1:arg2 }}.
10. Middle ā Angular'da pure pipe qachon qayta ishlaydi (transform chaqiriladi)?
- A) Har change detection siklida, o'zgarish bo'lmasa ham
- B) Faqat asosiy input o'zgarganda, argumentlar hisobga olinmaydi
- C) Obyekt ichidagi maydon o'zgarganda ham qayta ishlaydi
- D) Input yoki argumentlardan biri reference bo'yicha o'zgarsa
Javob
D ā Input yoki argumentlardan biri reference bo'yicha o'zgarsa
{{ price | currency:code }} ā code o'zgarsa ham qayta ishlaydi. Lekin arr.push() ā reference o'zgarmadi ā ishlamaydi.
11. Middle/Senior ā pure: false (impure pipe) nima qiladi?
- A) Har change detection siklida qayta ishlaydi, kesh yo'q
- B) Natijani keshlab qo'yadi, shuning uchun tezroq ishlaydi
- C) Pipe'ni faqat async oqimlar bilan ishlashga majburlaydi
- D) Pipe faqat komponent init bo'lganda bir marta ishlaydi
Javob
A ā Har change detection siklida qayta ishlaydi, kesh yo'q
5000 qatorli jadvalda impure pipe = 5000 chaqiruv/sikl. async pipe ataylab impure ā chunki Observable qachon emit qilishini pipe bilmaydi.
12. Middle ā Standalone pipe (v14+) qanday e'lon qilinadi va ishlatiladi?
- A)
standalone: trueā komponentimportsmassiviga qo'shiladi - B) Komponentning
providersmassiviga qo'shiladi - C) E'lon qilingach global bo'ladi, hech qayerga import qilinmaydi
- D)
@NgModuleningdeclarationsmassiviga qo'shiladi
Javob
A ā standalone: true ā komponent imports massiviga qo'shiladi
Angular 19 dan standalone: true ā default qiymat, yozish shart emas.
Performance
13. Middle/Senior ā Angular'da pure pipe keshlash mexanizmi qanday ishlaydi?
- A) Natijani
localStorageda saqlab, qayta o'qiydi - B) Obyektlarni chuqur (deep) solishtirib keshni yangilaydi
- C) Natijalarni ichki
Mapda kalit bo'yicha saqlaydi - D) Oldingi input va argumentlarni
===bilan solishtiradi
Javob
D ā Oldingi input va argumentlarni === bilan solishtiradi
Shuning uchun immutable ma'lumot muhim ā push reference'ni o'zgartirmaydi, kesh 'eski' natijani qaytaraveradi. O'zgarish topilmasa transform umuman chaqirilmaydi.
14. Senior ā Qimmat hisob uchun getter, pure pipe va computed() ā qaysi biri eng yomon?
- A) Hech biri ā Angular uchalasini ham keshlab qo'yadi
- B) Getter ā har CD siklida qayta chaqiriladi, kesh yo'q
- C)
computed()ā har o'qishda qiymatni qaytadan hisoblaydi - D) Pure pipe ā har CD siklida
transformqayta chaqiriladi
Javob
B ā Getter ā har CD siklida qayta chaqiriladi, kesh yo'q
computed() ā signal o'zgarganda, keshlanadi (komponentga xos hisob uchun). Pure pipe ā input o'zgarganda (umumiy transformatsiya uchun).
15. Senior ā Impure pipe'ning performance oqibati nima?
- A) Har CD Ć har element ā katta ro'yxatda ilova qotadi
- B) Faqat birinchi renderda sekinlik, keyin keshdan olinadi
- C) Xotira sizadi, chunki natijalar to'planib boraveradi
- D) Sezilarli ta'siri yo'q, Angular chaqiruvlarni birlashtiradi
Javob
A ā Har CD Ć har element ā katta ro'yxatda ilova qotadi
Muqobil: ma'lumot kelganda bir marta hisoblab qo'yish, computed(), yoki pure pipe + immutable ma'lumot. Sichqoncha harakati ham CD ni ishga tushiradi ā chaqiruvlar soni portlaydi.
Built-in pipes
16. Middle ā Nima chiqadi?
{{ 'hello WORLD from-angular' | titlecase }}
- A) hello World from-angular
- B) Hello WORLD From-angular
- C) Hello World From-Angular
- D) Hello World From-angular
Javob
D ā Hello World From-angular
TitleCasePipe ichida /\w\S*/g regex: har so'zning birinchi harfi katta, qolgani kichik. - belgisi so'z chegarasi hisoblanmaydi, shuning uchun from-angular ā From-angular, WORLD ā World.
17. Middle/Senior ā keyvalue pipe Map bilan ishlaydimi va natija tartibi qanday?
m = new Map([['b', 2], ['a', 1]]);
<div *ngFor="let e of m | keyvalue">{{ e.key }}={{ e.value }}</div>
- A) Faqat obyekt bilan;
MapuchunObject.fromEntrieskerak - B) Ha, lekin faqat
compareFnberilgan holatda ishlaydi - C) Ha,
Mapqo'llanadi ā default kalit bo'yicha saralanadi - D) Ha,
Mapqo'llanadi ā qo'shilish tartibi saqlab qolinadi
Javob
C ā Ha, Map qo'llanadi ā default kalit bo'yicha saralanadi
KeyValuePipe Object, Map va ReadonlyMap ni qabul qiladi va {key, value} massivini qaytaradi. Default defaultComparator kalitni o'sish bo'yicha saralaydi ā tartibni saqlash uchun ikkinchi argument sifatida o'z compareFningizni bering: | keyvalue: myCmp, yoki | keyvalue: null.
18. Middle ā i18nPlural pipe nima qiladi?
map = {'=0': 'Xabar yo\'q', '=1': '1 ta xabar', 'other': '# ta xabar'};
{{ n | i18nPlural: map }}
- A) Songa qarab ko'plik shaklini tanlaydi,
#ā son o'rni - B) Obyekt kalitiga qarab matn tanlaydi ā
i18nSelectkabi - C) Sonni mahalliy format bilan yozadi (
1 000) - D) Matnni tanlangan tilga avtomatik tarjima qiladi
Javob
A ā Songa qarab ko'plik shaklini tanlaydi, # ā son o'rni
i18nPlural sonni ICU plural qoidalari bilan solishtiradi: =0, =1, few, many, other. Natijadagi # haqiqiy son bilan almashadi. Uning juftligi i18nSelect ā u son emas, matn kaliti bo'yicha tanlaydi ({male: 'Janob', female: 'Xonim', other: '...'}). Shablon varianti ā [ngPlural] + *ngPluralCase.
19. Middle ā Nima chiqadi?
{{ 3.14159 | number:'1.2-2' }}
{{ 5 | number:'1.2-2' }}
- A)
3.14va5.00 - B)
3.1va5.0 - C)
3.142va5.00 - D)
3.14va5
Javob
A ā 3.14 va 5.00
digitsInfo formati ā {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}. '1.2-2': butun qismda kamida 1 raqam, kasr qismda aniq 2 raqam. Shuning uchun 3.14159 yaxlitlanadi, 5 esa 5.00 bo'lib to'ldiriladi.
20. Junior/Middle ā Nima chiqadi?
arr = [1, 2, 3, 4, 5];
{{ arr | slice:-3:-1 }}
- A)
3,4 - B)
3,4,5 - C)
2,3,4 - D)
4,5
Javob
A ā 3,4
SlicePipe ichida Array.prototype.slice ishlaydi, ya'ni manfiy indeks oxiridan sanaladi: -3 ā 3-element (3), -1 ā oxirgi element chegarasi (kirmaydi). Natija ā [3, 4].
21. Middle/Senior ā date pipe argumentlari qanday tartibda beriladi?
{{ createdAt | date:'short':'+0500':'uz-Latn' }}
- A)
format,locale,timezoneā locale ikkinchi o'rinda - B)
format,timezoneā locale faqatLOCALE_IDorqali - C)
format,timezone,localeā bu tartib to'g'ri - D)
locale,format,timezoneā locale birinchi keladi
Javob
C ā format, timezone, locale ā bu tartib to'g'ri
Imzo: date:format:timezone:locale. Timezone '+0500' yoki 'UTC' ko'rinishida; berilmasa foydalanuvchi brauzerining zonasi olinadi. en-US dan boshqa locale uchun uni oldindan ro'yxatdan o'tkazish shart: registerLocaleData(localeUz) ā aks holda NG0701 xatosi chiqadi.
22. Middle ā async pipe Promise bilan ishlaydimi?
user$ = fetch('/api/me').then(r => r.json());
{{ (user$ | async)?.name }}
- A) Yo'q ā faqat
ObservablevaSignalbilan ishlaydi - B) Ha, lekin avval
from()bilan Observable'ga o'rash shart - C) Ha, lekin
rejectbo'lsa eski qiymat ko'rinib turadi - D) Ha ā
resolveqiymatini bir marta chiqaradi
Javob
D ā Ha ā resolve qiymatini bir marta chiqaradi
AsyncPipe Observable, Promise va (v16+) Signal ni qabul qiladi. Promise hal bo'lguncha null qaytaradi, resolve bo'lgach qiymatni chiqarib markForCheck() chaqiradi. reject bo'lsa xato template'ga uloqtiriladi. Observable uchun unsubscribe avtomatik ā pipe ngOnDestroy da o'zi uzadi.
23. Junior ā json pipe haqida qaysi fikr to'g'ri?
- A) Obyektni chuqur nusxalaydi va shaklini tekshiradi
- B)
JSON.parseqiladi ā matndan obyekt hosil qiladi - C) Faqat massiv va
Mapbilan ishlaydi, obyekt bilan yo'q - D) Debug uchun; prodda tavsiya etilmaydi, qimmat
Javob
D ā Debug uchun; prodda tavsiya etilmaydi, qimmat
json pipe ā JSON.stringify(value, null, 2) ustidagi ingichka qobiq va u impure: har change detection siklida butun obyektni qaytadan matnga aylantiradi. Shuning uchun u faqat <pre>{{ data | json }}</pre> ko'rinishidagi debug uchun; prod UI'da tayyor formatlangan maydonlarni chiqarish kerak.
24. Middle/Senior ā Nima chiqadi?
{{ 1234.5 | number:'1.2-2' | slice:0:4 }}
- A)
1,234.50 - B)
1,23 - C)
1234 - D)
1.23
Javob
B ā 1,23
Zanjir chapdan o'ngga bajariladi: avval number 1234.5 ni '1,234.50' matniga aylantiradi, keyin slice shu matnning dastlabki 4 belgisini oladi ā 1,23. Tartibni almashtirsangiz natija butunlay boshqacha bo'ladi, chunki slice allaqachon son emas, matn ustida ishlaydi.
Custom Pipe
25. Junior/Middle ā Quyidagi PadPipe ga template'da len = 8 va ch = '-' argumentlari qanday uzatiladi?
@Pipe({ name: 'pad' })
export class PadPipe implements PipeTransform {
transform(v: string, len: number, ch = '*'): string {
return v.padStart(len, ch);
}
}
- A)
{{ v | pad(8, '-') }} - B)
{{ v | pad:[8, '-'] }} - C)
{{ v | pad:8:'-' }} - D)
{{ v | pad 8 '-' }}
Javob
C ā {{ v | pad:8:'-' }}
transform(value, ...args) ā birinchi parametr har doim pipe'dan chapdagi qiymat, qolgan argumentlar esa ikki nuqta bilan ketma-ket beriladi: value | name:arg1:arg2. Qavs yoki vergul sintaksisi shablonda ishlamaydi.
Angular ā RxJS
38 savol
Observable asoslari
1. Junior ā Observable va Promise farqi ā qaysi javob noto'g'ri?
- A) Promise eager, Observable lazy
- B) Observable har doim asinxron, Promise sinxron bo'lishi mumkin
- C) Promise 1 qiymat, Observable ko'p qiymat
- D) Promise bekor qilinmaydi, Observable
unsubscribebilan bo'ladi
Javob
B ā Observable har doim asinxron, Promise sinxron bo'lishi mumkin
Teskarisi to'g'ri: of(1,2,3) sinxron chiqaradi, Promise.then esa har doim microtask (asinxron).
2. Middle ā Cold va Hot observable farqi?
- A) Cold faqat HTTP uchun, Hot faqat
Subjectuchun - B) Cold ā ijro ulashiladi; Hot ā har subscriber o'z ijrosini oladi
- C) Cold sinxron ishlaydi, Hot esa har doim asinxron
- D) Cold ā har subscriber o'z ijrosini oladi; Hot ā ijro ulashiladi
Javob
D ā Cold ā har subscriber o'z ijrosini oladi; Hot ā ijro ulashiladi
Metafora: Cold = Netflix (har kishi boshidan ko'radi) Ā· Hot = jonli efir (kech qo'shilgan boshini o'tkazib yuboradi). Cold: HTTP, of, interval. Hot: Subject, fromEvent.
3. Middle ā Nechta HTTP so'rov ketadi?
const users$ = this.http.get<User[]>('/api/users');
users$.subscribe(u => console.log('a', u));
users$.subscribe(u => console.log('b', u));
- A) 2 ta ā
HttpClientcold, har subscribe yangi ijro - B) 0 ta ā
subscribeHTTP so'rovni ishga tushirmaydi - C) 1 ta ā observable bitta marta ijro etiladi
- D) 2 ta, lekin ikkinchisi brauzer keshidan olinadi
Javob
A ā 2 ta ā HttpClient cold, har subscribe yangi ijro
Yechim: .pipe(shareReplay(1)) yoki *ngIf="users$ | async as users".
4. Junior ā of(1,2,3) va from([1,2,3]) farqi?
- A)
offaqat bitta qiymat qaytaradi,fromesa butun massivni beradi - B)
fromfaqat Promise bilan,offaqat massiv bilan ishlaydi - C)
ofargumentlarni ketma-ket,fromiterable'ni ochib chiqaradi - D)
ofiterable'ni ochadi,fromargumentlarni ketma-ket beradi
Javob
C ā of argumentlarni ketma-ket, from iterable'ni ochib chiqaradi
of([1,2,3]) ā bitta massiv chiqaradi. from([1,2,3]) ā uchta son. from(promise) va from(string) ham ishlaydi.
5. Junior ā interval(1000) va timer(1000) farqi?
- A)
intervaltakroriy,timer(1000)ā 1s dan keyin bir marta - B)
timer(1000)ā har 1s takroran;intervalā faqat bir marta - C) Ikkalasi ham takrorlanadi,
timershunchaki kechikish qo'shadi - D)
intervaldarhol 0 chiqaradi, keyin har 1s da takrorlaydi
Javob
A ā interval takroriy, timer(1000) ā 1s dan keyin bir marta
interval hech qachon complete bo'lmaydi ā memory leak manbai. timer(1000, 500) ā 1s dan keyin boshlab, keyin har 500ms.
6. Junior ā RxJS'da subscribe ga uzatiladigan observer'ning uch kanali qaysilar va har biri necha marta chaqirilishi mumkin?
- A)
next(0..ā),error(0-1, oxirgi),complete(0-1, oxirgi) - B)
next(0..ā), keyinerrorvacompleteketma-ket keladi - C)
start,datavaendā oqim boshlanishi, qiymatlari va oxiri - D)
success,fail,finallyā Promise bilan bir xil nomlar
Javob
A ā next (0..ā), error (0-1, oxirgi), complete (0-1, oxirgi)
error va complete ā oqimning o'limi. Ikkalasidan keyin hech narsa kelmaydi. Marble: # va |.
7. Junior/Middle ā Qaysi kodda memory leak bor?
- A)
http.get().subscribe(...)ā javob kelgach complete bo'ladi - B)
source$.pipe(take(1)).subscribe(...)ā bir qiymatdan keyin yopiladi - C) Template'dagi
data$ | asyncā view bilan birga tozalanadi - D)
interval(1000).subscribe(...)ā hech qachon complete bo'lmaydi
Javob
D ā interval(1000).subscribe(...) ā hech qachon complete bo'lmaydi
Qoida: oqim o'zi tugaydimi? Tugasa leak yo'q. interval, fromEvent, service'dagi Subject ā tugamaydi.
Asosiy operatorlar
8. Junior ā Konsolga qanday tartibda chiqadi?
of(1, 2).pipe(
map(x => x * 2),
tap(x => console.log('tap', x))
).subscribe(x => console.log('sub', x));
- A)
tap 2, tap 4, sub 2, sub 4 - B)
tap 2, sub 2, tap 4, sub 4 - C)
sub 2, tap 2, sub 4, tap 4 - D)
tap 1, sub 2, tap 2, sub 4
Javob
B ā tap 2, sub 2, tap 4, sub 4
Har qiymat quvurni yolg'iz o'zi oxirigacha o'tadi, keyin keyingisi kiradi. Operatorlar massiv metodlari emas.
9. Junior ā RxJS'da source$.pipe(take(2)).subscribe(...) dan keyin qo'lda unsubscribe() yozish kerakmi?
- A) Faqat
intervalkabi cheksiz manbalar ustida ishlaganda kerak - B) Faqat OnPush strategiyasidagi komponentlarda kerak
- C) Yo'q ā
takeikkinchi qiymatdan keyin o'zi complete qiladi - D) Ha ā
takeoqimni yopmaydi, qo'lda unsubscribe shart
Javob
C ā Yo'q ā take ikkinchi qiymatdan keyin o'zi complete qiladi
take, first, takeWhile, takeUntil ā hammasi oqimni tugatadi, demak subscription o'zi yopiladi.
10. Junior ā first() va take(1) farqi?
- A)
first()bo'sh oqimdaEmptyErrorberadi,take(1)ā jimgina - B)
first()oqim complete bo'lishini kutadi,take(1)kutmaydi - C)
first()barcha qiymatlarni kutadi,take(1)darhol tugatadi - D)
take(1)bo'sh oqimda xato tashlaydi,first()jimgina tugaydi
Javob
A ā first() bo'sh oqimda EmptyError beradi, take(1) ā jimgina
first(predicate) bilan shart ham berish mumkin. Xato kerak bo'lmasa take(1) xavfsizroq.
11. Junior/Middle ā debounceTime va throttleTime farqi?
- A) debounce ā jimlikni kutadi; throttle ā muntazam ritmda chiqaradi
- B) debounce faqat scroll uchun, throttle faqat qidiruv uchun
- C) Ikkalasi ham oxirgi qiymatni kechikish bilan chiqaradi
- D) debounce ā muntazam ritmda chiqaradi; throttle ā jimlikni kutib turadi
Javob
A ā debounce ā jimlikni kutadi; throttle ā muntazam ritmda chiqaradi
Uzluksiz scroll paytida jimlik yo'q ā debounce hech narsa chiqarmaydi. throttle esa muntazam chiqaradi. debounce = sabr ('tugadimi?') ā qidiruv Ā· throttle = ritm ('vaqt keldimi?') ā scroll, resize.
12. Junior/Middle ā distinctUntilChanged() nima qiladi?
- A) Obyektlarni maydonlari bo'yicha chuqur solishtiradi
- B) Qiymatlarni saralab, keyin takrorlarni olib tashlaydi
- C) Barcha takrorlangan qiymatlarni olib tashlaydi:
a a b b aāa b - D) Faqat ketma-ket takrorlarni o'tkazmaydi:
a a b b aāa b a
Javob
D ā Faqat ketma-ket takrorlarni o'tkazmaydi: a a b b a ā a b a
Obyektlar uchun komparator berish kerak: distinctUntilChanged((a,b) => a.id === b.id). Barcha takrorlar uchun distinct().
13. Middle ā delay(1000) va debounceTime(1000) farqi?
- A)
delayqiymatlarni tashlaydi,debounceTimekechiktirmaydi - B)
debounceTimehar qiymatni 1s suradi;delayfaqat oxirgisini - C) Ikkalasi ham oraliqdagi qiymatlarni tashlab yuboradi
- D)
delayhar qiymatni 1s suradi;debounceTimefaqat oxirgisini
Javob
D ā delay har qiymatni 1s suradi; debounceTime faqat oxirgisini
delay ā vaqt siljishi, debounceTime ā filtrlash.
Higher-order operatorlar
14. Middle ā Qidiruv maydonida har harf yozilganda HTTP so'rov yuboriladi. Bo'sh joyga qaysi higher-order mapping operatori to'g'ri keladi?
input$.pipe(
debounceTime(300),
/* ??? */(term => this.api.search(term))
).subscribe(r => this.results = r);
- A)
mergeMapā barcha so'rovlarni parallel yuboradi - B)
exhaustMapā joriy so'rov tugamaguncha yangisini olmaydi - C)
concatMapā so'rovlarni navbat bilan bajaradi - D)
switchMapā yangi harfda oldingi so'rovni bekor qiladi
Javob
D ā switchMap ā yangi harfda oldingi so'rovni bekor qiladi
Eski natija endi keraksiz. switchMap XHR.abort() chaqiradi ā so'rov haqiqatan to'xtaydi.
15. Middle ā Login tugmasi ketma-ket 3 marta bosildi. Serverga faqat 1 ta so'rov ketishi uchun ??? o'rniga qaysi operator qo'yiladi?
clicks$.pipe(
/* ??? */(() => this.api.login(form.value))
).subscribe();
- A)
switchMap - B)
mergeMap - C)
concatMap - D)
exhaustMap
Javob
D ā exhaustMap
exhaust = tugat (ekzoz). Hozirgisi tugamaguncha yangisini qabul qilmaydi ā navbatga ham qo'ymaydi.
16. Middle ā Har bir chat xabari uchun HTTP so'rov ketadi va ular serverga yuborilgan tartibda yetishi kerak. ??? o'rniga qaysi operator?
message$.pipe(
/* ??? */(msg => this.api.send(msg))
).subscribe();
- A)
concatMap - B)
exhaustMap - C)
switchMap - D)
mergeMap
Javob
A ā concatMap
concatMap navbat yaratadi ā oldingisi tugagach keyingisi boshlanadi. mergeMap parallel yuboradi, tartib buziladi.
17. Middle ā mergeMap ning asosiy xavfi?
- A) Tartib kafolatlanmaydi va parallel so'rov soni cheklanmaydi
- B) Oldingi so'rovni bekor qilib, kelgan natijani yo'qotib yuboradi
- C) So'rovlarni navbatga qo'yadi, shuning uchun sekinlashadi
- D) Ichki oqimlardan unsubscribe qilmaydi, xotira sizadi
Javob
A ā Tartib kafolatlanmaydi va parallel so'rov soni cheklanmaydi
Cheklash: mergeMap(fn, 3) ā bir vaqtda maksimal 3 ta. mergeMap ni 'default' sifatida ishlatmang. 100 qiymat = bir vaqtda 100 so'rov. Cheklash: mergeMap(fn, 3).
18. Middle ā YOZISH operatsiyasida (POST/PUT/DELETE) nega switchMap ishlatilmaydi?
- A)
switchMapPOST so'rovlarini umuman qo'llab-quvvatlamaydi - B) Ikkinchi bosish birinchi saqlashni yarim yo'lda uzib qo'yadi
- C) So'rovlar navbatga tushib, oxirgisi eng kech yetib boradi
- D) Har bosishda yangi so'rov ketib, dublikat yozuv hosil bo'ladi
Javob
B ā Ikkinchi bosish birinchi saqlashni yarim yo'lda uzib qo'yadi
switchMap = bekor qilish. O'qishda xavfsiz, yozishda xavfli. Yozish uchun exhaustMap yoki concatMap. Server ma'lumotni qisman yozib qo'ygan bo'lishi mumkin.
19. Middle ā switchMap HTTP so'rovni bekor qilganda serverda nima bo'ladi?
- A) So'rov umuman yuborilmaydi, chunki oldin bekor qilinadi
- B) Server ham darhol so'rovni bekor qilib, boshlagan ishini to'xtatadi
- C) Ulanish yopiladi, lekin server ishni tugatib qo'yishi mumkin
- D) Server 499 qaytarib, tranzaksiyani orqaga qaytaradi
Javob
C ā Ulanish yopiladi, lekin server ishni tugatib qo'yishi mumkin
Bekor qilish ā bu faqat 'javobni kutishni to'xtatish'. Xavfsizlik uchun idempotency key ishlatiladi. XHR.abort() faqat javobni kutishni to'xtatadi ā POST uchun xavfli.
Combination operatorlar
20. Middle ā forkJoin va combineLatest farqi?
- A)
combineLatestā hammasi complete bo'lgach bir marta chiqaradi - B)
forkJoinā istalgan biri qiymat berganda har safar chiqaradi - C)
forkJoinfaqat 2 ta oqim oladi,combineLatestā istalgancha - D)
forkJoinā hammasi complete bo'lgach bir marta chiqaradi
Javob
D ā forkJoin ā hammasi complete bo'lgach bir marta chiqaradi
forkJoin da bittasi complete bo'lmasa (masalan interval) ā natija hech qachon kelmaydi. combineLatest esa istalgan biri yangi qiymat berganda har safar chiqaradi (parallel HTTP uchun forkJoin).
21. Middle/Senior ā zip, merge, concat farqi?
- A)
zipketma-ket,mergejuftlaydi,concatparallel aralashtiradi - B)
zipparallel aralashtiradi,mergejuftlaydi,concatketma-ket - C) Uchalasi ham qiymatlarni kelish tartibida aralashtirib beradi
- D)
zipjuftlaydi,mergeparallel aralashtiradi,concatketma-ket
Javob
D ā zip juftlaydi, merge parallel aralashtiradi, concat ketma-ket
zip eng sekin manbaga qarab kutadi. concat da birinchi oqim complete bo'lmasa, ikkinchisi hech qachon boshlanmaydi. zip indeks bo'yicha juftlaydi; concat da birinchisi tugagach ikkinchisi boshlanadi.
22. Middle/Senior ā withLatestFrom combineLatest dan nimasi bilan farq qiladi?
- A) Istalgan oqim chiqarganda ishlaydi, boshqasidan oxirgi qiymat
- B) Ikkala oqim ham yangi qiymat berishini kutib turadi, keyin juftlaydi
- C) Faqat ikkita oqim bilan ishlaydi, ko'pini qabul qilmaydi
- D) Faqat asosiy oqim chiqarganda ishlaydi, qolganidan oxirgi qiymat
Javob
D ā Faqat asosiy oqim chiqarganda ishlaydi, qolganidan oxirgi qiymat
Tipik holat: tugma bosilganda forma qiymatini olish ā clicks$.pipe(withLatestFrom(form$)). Forma o'zgarishi hech narsa qilmaydi.
Subject turlari
23. Middle ā RxJS'da Subject nima?
- A) Faqat Observable ā tinglash mumkin,
next()chaqirib bo'lmaydi - B) Faqat Observer ā
next()bor, lekin subscribe qilib bo'lmaydi - C) Oddiy cold observable ā har subscriber o'z alohida ijrosini oladi
- D) Ham Observable, ham Observer ā tinglash ham,
next()ham mumkin
Javob
D ā Ham Observable, ham Observer ā tinglash ham, next() ham mumkin
Kech qo'shilgan subscriber o'tmishni ko'rmaydi ā faqat undan keyingi qiymatlarni oladi. Subject hot: kech qo'shilgan subscriber o'tmishni ko'rmaydi.
24. Middle ā Angular service'da ilova state'ini saqlash uchun qaysi Subject turi mos keladi?
- A)
Subjectā subscriber darhol joriy qiymatni oladi - B)
ReplaySubject(1)ā boshlang'ich qiymat majburiy - C)
AsyncSubjectā joriy qiymatni har subscriber'ga beradi - D)
BehaviorSubjectā boshlang'ich qiymat va.valuebor
Javob
D ā BehaviorSubject ā boshlang'ich qiymat va .value bor
Komponent qachon yuklanishidan qat'i nazar qiymat oladi ā state uchun aynan shu kerak. Subscriber obuna bo'lishi bilan joriy qiymatni oladi, .value bilan sinxron o'qish ham mumkin.
25. Middle ā BehaviorSubject va ReplaySubject(1) ā asosiy farq?
- A)
BehaviorSubjectda boshlang'ich qiymat majburiy va.valuebor - B)
ReplaySubject(1)da boshlang'ich qiymat majburiy va.valuebor - C)
BehaviorSubjectcomplete'dan keyin ham oxirgi qiymatni beradi - D)
ReplaySubject(1)faqat yangi qiymatlarni beradi, o'tmishni yo'q
Javob
A ā BehaviorSubject da boshlang'ich qiymat majburiy va .value bor
Yana bir farq: complete() dan keyin subscribe qilinsa ā BehaviorSubject hech narsa bermaydi, ReplaySubject oxirgi qiymatni beradi. ReplaySubject(1) da boshlang'ich qiymat yo'q ā hali next() bo'lmagan bo'lsa hech narsa bermaydi.
26. Middle ā Nima chiqadi?
const s = new BehaviorSubject(0);
s.next(1);
s.next(2);
s.subscribe(v => console.log('A', v));
s.next(3);
- A)
A 2 - B)
A 2vaA 3 - C)
A 0, A 1, A 2, A 3 - D)
A 3
Javob
B ā A 2 va A 3
subscribe ā bir martalik o'qish emas, doimiy ulanish. Joriy qiymat (2) darhol, keyin yangi qiymat (3).
27. Senior ā AsyncSubject nima qiladi?
- A) Qiymatlarni asinxron ā keyingi microtask'da chiqaradi
- B) Faqat oxirgi qiymatni va faqat
complete()bo'lganda beradi - C) Har qiymatni beradi,
complete()da oxirgisini takrorlaydi - D) Boshlang'ich qiymatni saqlab, yangi subscriber'ga darhol beradi
Javob
B ā Faqat oxirgi qiymatni va faqat complete() bo'lganda beradi
Kam ishlatiladi. complete bo'lmasa hech narsa chiqmaydi.
Xato va xotira
28. Middle ā switchMap bilan qurilgan qidiruv oqimida catchError nega ichki (inner) oqim ichida turishi kerak?
// ā
to'g'ri
switchMap(t => api.search(t).pipe(catchError(() => of([]))))
// ā noto'g'ri
switchMap(t => api.search(t)), catchError(() => of([]))
- A) Tashqi
catchErrorxatoni yutib, tugagan oqimni tiklaydi - B) Ichkarida yozilsa
switchMapbekor qilishdan saqlanadi - C) Tashqarida bo'lsa bitta xato butun oqimni o'ldiradi
- D) Tashqi
catchErrorichki oqim xatosini umuman ko'rmaydi
Javob
C ā Tashqarida bo'lsa bitta xato butun oqimni o'ldiradi
catchError reanimator emas, o'rinbosar. Xato ko'tarilganda RxJS manbadan unsubscribe qiladi. Nazorat savoli: 'xato tashqi oqimga yetib bora oladimi?' Oqim o'lgach keyingi qidiruvlar umuman ishlamaydi.
29. Middle ā catchError ichida return yozilmasa nima bo'ladi?
- A) Oqim xatodan oldingi qiymat bilan davom etaveradi
- B) Xato jimgina yutiladi, oqim hech narsa chiqarmay davom etadi
- C)
TypeErrorā oqim kutilgan joydaundefinedqaytdi - D)
catchErrorEMPTYqaytargan deb hisoblanadi
Javob
C ā TypeError ā oqim kutilgan joyda undefined qaytdi
Uch to'g'ri variant: of([]) (almashtiruvchi qiymat) Ā· throwError(() => err) (yuqoriga uzatish) Ā· EMPTY (jimgina tugatish).
30. Middle ā Qaysi HTTP xatolarida retry mantiqsiz?
- A) 4xx (401, 403, 404) ā mijoz xatosi, takror urinish behuda
- B) 5xx ā server xatosi, qayta urinish holatni yomonlashtiradi
- C) Tarmoq uzilishlarida ā ulanish tiklanmaguncha foydasiz
- D) 429 (Too Many Requests) ā limit tugagach so'rov o'tmaydi
Javob
A ā 4xx (401, 403, 404) ā mijoz xatosi, takror urinish behuda
Faqat 5xx va tarmoq uzilishida retry. Va exponential backoff bilan: retry({count: 3, delay: (e,i) => timer(i*1000)}).
31. Middle ā Komponent subscription'ini tozalash uchun ishlatilgan takeUntil(this.destroy$) pipe zanjirining qayerida turishi kerak?
- A)
subscribechaqiruvidan keyin zanjirga qo'shiladi - B) Har doim pipe'ning oxirgi operatori bo'lishi kerak
- C) Har doim pipe'ning birinchi operatori bo'lishi kerak
- D)
switchMapdan oldin ā aks holda ichki oqim uzilmaydi
Javob
B ā Har doim pipe'ning oxirgi operatori bo'lishi kerak
Boshida bo'lsa, undan keyingi operatorlar (masalan switchMap ichidagi oqim) uzilmay qolishi mumkin.
32. Middle ā takeUntilDestroyed() (v16+) qayerda chaqirilishi kerak?
- A)
ngOnDestroyichida, tozalash paytida chaqiriladi - B)
ngOnInitichida, komponent tayyor bo'lgandan keyin - C) Injection context'da ā
constructoryoki field initializer - D) Istalgan joyda ā u kerakli
DestroyRefni o'zi topib oladi
Javob
C ā Injection context'da ā constructor yoki field initializer
ngOnInit da ishlatish uchun DestroyRef uzatiladi: takeUntilDestroyed(inject(DestroyRef)).
33. Junior/Middle ā async pipe subscription'ni qachon yopadi?
- A) Komponentning
ngOnDestroyida, view yo'q qilingach - B) Oqim
completebo'lganda ā undan oldin yopilmaydi - C) Yopmaydi ā subscription'ni brauzerning GC mexanizmi o'zi tozalaydi
- D)
AsyncPipening o'zngOnDestroyida ā pipe'da lifecycle bor
Javob
D ā AsyncPipe ning o'z ngOnDestroy ida ā pipe'da lifecycle bor
Tozalash view hayot sikliga bog'langan. Va har next da markForCheck() chaqiradi ā shuning uchun OnPush bilan ishlaydi.
34. Middle/Senior ā shareReplay(1) nima qiladi va xavfi nima?
- A) Oqimni 1 soniyaga kechiktiradi; xavfi ā tartib buziladi
- B) Cold'ni hot qiladi;
refCount: falseda obuna tirik qoladi - C) Xatoda 1 marta qayta uradi; xavfi ā dublikat so'rov ketadi
- D) Natijani keshlaydi; xavfi ā kesh hech qachon yangilanmay qoladi
Javob
B ā Cold'ni hot qiladi; refCount: false da obuna tirik qoladi
Cheksiz oqim uchun majburiy: shareReplay({ bufferSize: 1, refCount: true }). HTTP (o'zi complete bo'ladi) uchun shareReplay(1) xavfsiz. Bitta manba ijrosi ulashiladi va oxirgi qiymat kech subscriber'ga beriladi.
35. Middle/Senior ā share() va shareReplay(1) farqi?
- A)
share()faqat cheksiz oqim uchun,shareReplayā HTTP uchun - B)
share()o'tmishni bermaydi,shareReplay(1)oxirgisini beradi - C)
shareReplay(1)o'tmishni bermaydi,share()oxirgisini beradi - D)
share()har subscriber'ga alohida ijro, ikkinchisi ā bitta
Javob
B ā share() o'tmishni bermaydi, shareReplay(1) oxirgisini beradi
share() = multicast(() => new Subject()) + refCount. shareReplay = ReplaySubject bilan.
Advanced
36. Senior ā RxJS'da custom operator qanday yoziladi?
- A)
Observableklassidan meros olgan yangi klass - B) Observable qabul qilib Observable qaytaruvchi funksiya
- C)
@Operatordekoratori bilan belgilangan metod - D)
Observable.prototypega qo'shiladigan yangi prototip metodi
Javob
B ā Observable qabul qilib Observable qaytaruvchi funksiya
export function debug<T>(tag: string) { return (src: Observable<T>) => src.pipe(tap(v => console.log(tag, v))); } ā .pipe(debug('x')). Odatda mavjud operatorlardan pipe() bilan tuziladi.
37. Senior ā RxJS Scheduler nima uchun?
- A) Emisiya qachon va qaysi kontekstda bo'lishini boshqaradi
- B) Operatorlar bajarilish tartibini pipe ichida o'zgartiradi
- C) Faqat test muhitida vaqtni sun'iy tezlashtirish uchun
- D) Vazifalarni belgilangan vaqtda ishga tushiradi (cron kabi)
Javob
A ā Emisiya qachon va qaysi kontekstda bo'lishini boshqaradi
observeOn(animationFrameScheduler) ā animatsiya uchun. observeOn(asyncScheduler) ā og'ir ishni keyingi tick'ga surish. Turlari: asyncScheduler, animationFrameScheduler, queueScheduler, asapScheduler.
38. Senior ā RxJS'da marble testing nima?
- A) Oqimni diagramma ko'rinishida vizual chizib ko'rsatish
- B) Oqim operatorlari tezligini o'lchash va solishtirish
- C)
TestSchedulerbilan vaqtni boshqarib oqimni testlash - D) Brauzer devtools'da oqim qiymatlarini jonli kuzatish
Javob
C ā TestScheduler bilan vaqtni boshqarib oqimni testlash
testScheduler.run(({cold, expectObservable}) => {...}). Real vaqt kutilmaydi ā 1000ms bir zumda 'o'tadi'. '--a--b--|' sintaksisi bilan yoziladi.
Angular ā Forms
34 savol
Template-driven Forms
1. Junior ā Template-driven forma uchun qaysi modul import qilinadi?
- A)
FormsModule - B)
ReactiveFormsModule - C)
CommonModule - D)
NgModule
Javob
A ā FormsModule
FormsModule ā ngModel, ngForm, ngModelGroup. ReactiveFormsModule ā formControl, formGroup, formControlName. Ikkalasi alohida.
2. Junior ā [(ngModel)] nima qiladi?
- A) Faqat
(ngModelChange)hodisasiga obuna bo'ladi - B) Two-way binding ā
[ngModel]+(ngModelChange)qisqartmasi - C) Maydonni
FormControlga bog'lab, validatsiya qo'shadi - D) One-way binding ā faqat model'dan view'ga qiymatni uzatadi xolos
Javob
B ā Two-way binding ā [ngModel] + (ngModelChange) qisqartmasi
[(x)] ā 'banana in a box'. [(ngModel)]="user.name" = [ngModel]="user.name" (ngModelChange)="user.name=$event".
3. Junior ā <form #f="ngForm"> ā f orqali nimalarga kirish mumkin?
- A)
f.getRawValue()vaf.patchValue()ā reactive API - B)
f.value,f.valid,f.dirty,f.touched,f.controls - C) Faqat
f.valueā qolgan holat bayroqlari control darajasida - D) Faqat
f.ngSubmithodisasi vaf.reset()metodi
Javob
B ā f.value, f.valid, f.dirty, f.touched, f.controls
ngForm ā exportAs: 'ngForm' bilan e'lon qilingan direktiva. #f="ngForm" uning instansiyasini beradi.
4. Junior ā Template-driven'da built-in validatorlar qanday qo'shiladi?
- A) Avtomatik ā
ngModelmaydon turiga qarab o'zi qo'shadi - B) HTML atributlari ā
required,minlength,pattern,email - C) Kodda
Validators.requiredkabi funksiyalar massivi orqali beriladi - D)
[validators]input'iga massiv sifatida uzatiladi
Javob
B ā HTML atributlari ā required, minlength, pattern, email
Angular bu atributlarni direktiva sifatida ushlaydi. Reactive Forms'da esa Validators.required kodda beriladi.
5. Junior ā Template-driven'da xato qanday ko'rsatiladi?
- A)
name.errorsnipristinebayrog'i bilan birga tekshirish orqali - B)
form.errorsobyektini to'g'ridan-to'g'ri o'qish orqali - C) Angular xato matnini maydon ostida o'zi chiqarib beradi
- D)
#name="ngModel"+name.errorsvaname.touchedtekshiruvi
Javob
D ā #name="ngModel" + name.errors va name.touched tekshiruvi
touched tekshiruvi shart ā aks holda sahifa ochilishi bilan hamma maydon qizarib ketadi.
Reactive Forms
6. Middle ā Reactive Forms uchun qaysi modul?
- A) Modul kerak emas
- B) Ikkalasi ham
- C)
ReactiveFormsModule - D)
FormsModule
Javob
C ā ReactiveFormsModule
Standalone komponentda imports: [ReactiveFormsModule].
7. Middle ā FormControl va FormGroup farqi?
- A)
FormControlā bitta maydon;FormGroupā nomlangan to'plam - B)
FormControlā nomlangan to'plam;FormGroupā bitta maydon - C)
FormGroupā indeksli ro'yxat,FormControlā uning elementi - D)
FormControlfaqat matn,FormGrouphar qanday tur uchun
Javob
A ā FormControl ā bitta maydon; FormGroup ā nomlangan to'plam
Uchinchisi ā FormArray: indeksli, dinamik uzunlikdagi ro'yxat.
8. Middle ā Reactive Forms'da FormArray qachon kerak bo'ladi?
- A) Ichma-ich guruhlar kerak bo'lganda,
FormGroupo'rniga - B) Har doim ā
FormGroupo'rniga tavsiya etilgan zamonaviy API - C) Control qiymati massiv bo'lganda ā masalan checkbox'lar ro'yxati
- D) Maydonlar soni dinamik bo'lganda ā telefonlar, teglar ro'yxati
Javob
D ā Maydonlar soni dinamik bo'lganda ā telefonlar, teglar ro'yxati
this.fb.array([]) ā .push(this.fb.group({...})), .removeAt(i). Template'da formArrayName + [formGroupName]="i".
9. Middle ā FormBuilder nima beradi?
- A) Yangi imkoniyat ā
FormGroupda yo'q validatsiya turlari - B) Qisqartma ā
fb.group({name: ['']})sintaksisini beradi - C) Katta formalar uchun optimallashtirilgan tezroq API
- D) Formani template'dan avtomatik yig'ib, kodda tuzadi
Javob
B ā Qisqartma ā fb.group({name: ['']}) sintaksisini beradi
fb.group(), fb.control(), fb.array(). v14+ da fb.nonNullable.group() ā typed forms uchun.
10. Middle ā Reactive Forms'da control'ga updateOn: 'blur' berilsa nima o'zgaradi?
new FormControl('', {
validators: [Validators.required],
updateOn: 'blur',
});
- A) Xato xabari faqat maydondan chiqqanda ko'rinadigan bo'ladi
- B) Validatorlar faqat bir marta ā birinchi blur'da ishlaydi
- C) Forma qiymati faqat
submitbosilganda yangilanadi - D)
valueChangesva validatsiya maydondan chiqqanda ishlaydi
Javob
D ā valueChanges va validatsiya maydondan chiqqanda ishlaydi
Qiymatlar: 'change' (default), 'blur', 'submit'. Og'ir validatsiya (ayniqsa async) uchun foydali.
11. Middle ā Nima chiqadi?
const form = this.fb.group({
name: ['Ali'],
role: [{ value: 'admin', disabled: true }],
});
console.log(Object.keys(form.value).length, form.valid);
- A)
2 false - B)
2 true - C)
1 false - D)
1 true
Javob
D ā 1 true
disabled control form.value ga tushmaydi (getRawValue() bilan olinadi) va validatsiyadan ham chiqadi ā shuning uchun forma valid.
12. Middle ā Reactive Forms'da FormControl konstruktoriga qiymat o'rniga beriladigan holat obyektida nechta kalit tan olinadi?
- A) Faqat ikkitasi ā
valuevadisabled - B) Uchtasi ā
value,disabled,readOnly - C) Uchtasi ā
value,disabled,updateOn - D) To'rttasi ā
value,disabled,errors,updateOn
Javob
A ā Faqat ikkitasi ā value va disabled
{ value: '', readOnly: true } ā readOnly jimgina e'tiborsiz qoldiriladi. readonly ā HTML atributi, template'da yoziladi.
13. Middle ā Foydalanuvchi forma maydoniga bosdi va matn yozdi, lekin hali maydondan chiqmadi (blur bo'lmagan). Control'ning holati qanday?
- A)
touched: true, dirty: true - B)
touched: true, dirty: false - C)
touched: false, dirty: true - D) Ikkalasi
false
Javob
C ā touched: false, dirty: true
Ikki mustaqil o'q: touched = blur bo'ldimi Ā· dirty = qiymat o'zgardimi. Bayroqlar yopishqoq ā bir marta true bo'lsa qaytmaydi.
14. Middle ā patchValue() va setValue() farqi?
- A)
setValuefaqatFormGroupda,patchValuefaqat control'da - B)
setValuebarcha maydonlarni talab qiladi,patchValueā yo'q - C)
patchValuebarcha maydonlarni talab qiladi,setValueā yo'q - D)
setValuedirtyqiladi,patchValueholatni o'zgartirmaydi
Javob
B ā setValue barcha maydonlarni talab qiladi, patchValue ā yo'q
Ikkalasi ham dirty qiladi, lekin touched qilmaydi. setValue da maydon yetishmasa xato tashlanadi.
Validators
15. Middle ā Angular'da custom validator funksiyasi null qaytarsa bu nima degani?
- A) Validator xato topdi, lekin nomini bermadi
- B) Control qiymati bo'sh, tekshiruv o'tkazilmadi
- C) Validator o'tkazib yuborildi, keyingisi ishlaydi
- D) Validatsiya muvaffaqiyatli o'tdi, xato yo'q
Javob
D ā Validatsiya muvaffaqiyatli o'tdi, xato yo'q
Xato bo'lsa obyekt qaytariladi: { forbidden: true } yoki { minAge: { required: 18, actual: 15 } }.
16. Middle ā Angular formalarida async validator sync validatordan nimasi bilan farq qiladi?
- A)
Observable/Promiseqaytaradi, ishlaganda holatPENDING - B) Sync validatorlar bilan birga ishlatib bo'lmaydi
- C) Faqat
asynckalit so'zi bilan yozilishi bilan farqlanadi xolos - D) Faqat
FormGroupdarajasida ishlatilishi mumkin
Javob
A ā Observable/Promise qaytaradi, ishlaganda holat PENDING
Uchinchi argumentda beriladi: new FormControl('', [syncValidators], [asyncValidators]). Async validator faqat sync'lar o'tgandan keyin ishlaydi.
17. Middle/Senior ā Reactive Forms'da parol va uni tasdiqlash maydoni mos kelishini tekshiruvchi validator qayerga qo'yiladi?
- A) Tasdiqlash control'iga ā
fb.control('', [matchFn])ko'rinishida - B) Template'da
[ngModel]orqali solishtirib tekshiriladi - C)
FormGroupdarajasiga āfb.group({...}, { validators: fn }) - D) Har ikkala control'ga alohida-alohida qo'yiladi
Javob
C ā FormGroup darajasiga ā fb.group({...}, { validators: fn })
Control'ga qo'yilsa password o'zgarganda qayta ishlamaydi ā forma noto'g'ri valid ko'rinadi. Xato guruhda: form.hasError('mismatch').
18. Middle ā Validators.compose([a, b]) nima qiladi?
- A) Bir nechta control'ning xatolarini bitta obyektga yig'adi
- B) Bir nechta validatorni bitta validator funksiyaga birlashtiradi
- C) Validatorlarni parallel ishga tushirib, natijani kutadi
- D) Faqat birinchi bo'lib xato topgan validator natijasini qaytaradi
Javob
B ā Bir nechta validatorni bitta validator funksiyaga birlashtiradi
Amalda kamdan-kam kerak ā massiv berish yetarli: [Validators.required, Validators.email]. compose custom validator ichida boshqalarini birlashtirishda foydali. composeAsync ā async uchun.
Advanced
19. Senior ā Custom komponentni formControlName bilan ishlatish uchun nima kerak?
- A) Komponentni
FormControlklassidan meros qilib olish yetarli - B)
@InjectablebilanNgControlni inject qilish - C)
@Input() valueva@Output() valueChangejuftligi - D)
ControlValueAccessor+NG_VALUE_ACCESSORmulti provider
Javob
D ā ControlValueAccessor + NG_VALUE_ACCESSOR multi provider
4 metod: writeValue (tashqaridan qiymat) Ā· registerOnChange (o'zgarishni xabar qilish) Ā· registerOnTouched Ā· setDisabledState.
20. Middle/Senior ā Typed Reactive Forms (v14+) nima berdi?
- A) Formalar ishlashini sezilarli tezlashtirdi, CD chaqiruvlari kamaydi
- B) Validatorlarni tur bo'yicha avtomatik qo'shishni qo'shdi
- C) SSR'da forma holatini serverdan uzatish imkonini berdi
- D)
form.value.nameendistring, xato nom kompilyatsiyada tutiladi
Javob
D ā form.value.name endi string, xato nom kompilyatsiyada tutiladi
nonNullable: true bilan reset() null emas, boshlang'ich qiymatga qaytaradi. fb.nonNullable.group({...}). Avval form.value any edi.
21. Senior ā Dinamik forma (JSON konfiguratsiyadan) qanday quriladi?
- A) Konfiguratsiya massivi bo'ylab yurib
FormGroupni kodda qurish - B) Template-driven'da
*ngFor+ngModelbilan qurish - C)
FormBuilderga JSON'ni to'g'ridan-to'g'ri uzatish - D) Har bir konfiguratsiya uchun alohida komponent generatsiya qilish
Javob
A ā Konfiguratsiya massivi bo'ylab yurib FormGroup ni kodda qurish
config.forEach(f => group.addControl(f.name, this.fb.control('', this.buildValidators(f)))). Template'da control turini @switch bilan tanlanadi.
22. Senior ā Yuzlab control'li katta Reactive Form'da performance uchun nima qilinadi?
- A)
updateOn: 'blur',valueChangesgadebounceTime,OnPush - B) Har
valueChangesdadetectChanges()ni qo'lda chaqirish - C) Barcha validatorlarni async qilib,
PENDINGholatda ushlab turish - D) Formani
ngModelga o'tkazish ā u yengilroq ishlaydi
Javob
A ā updateOn: 'blur', valueChanges ga debounceTime, OnPush
Default updateOn: 'change' ā har harfda barcha validatorlar ishlaydi va CD trigger bo'ladi. Og'ir validatsiyani async qilish ham yordam beradi.
Reactive Forms
23. Junior ā FormControl, FormGroup va FormArray uchun umumiy bazaviy klass qaysi?
- A)
ControlContainerā guruh va massiv uchun umumiy baza - B)
AbstractControlā value, status va metodlarni beradi - C)
NgControlā barcha forma klasslarining ota klassi - D)
FormControlDirectiveā control xulqining asosiy manbai
Javob
B ā AbstractControl ā value, status va metodlarni beradi
AbstractControl ā value, status, errors, valueChanges, statusChanges, setValidators, markAsDirty kabilar shu yerdan keladi. NgControl ā direktivalar uchun, ControlContainer ā formGroup/formArray direktivalari uchun.
Validators
24. Middle ā Ishlayotgan control'ga setValidators([...]) qo'yildi. Keyin nima shart?
ctrl.setValidators([Validators.required, Validators.email]);
// ???
- A) Control'ni
reset()qilish ā validator o'shanda o'qiladi - B) Hech narsa ā yangi validator darhol qayta ishga tushadi
- C)
ctrl.markAsDirty()ā shundan keyin holat yangilanadi - D)
ctrl.updateValueAndValidity()ni chaqirish kerak
Javob
D ā ctrl.updateValueAndValidity() ni chaqirish kerak
setValidators faqat validatorlar ro'yxatini almashtiradi, statusni qayta hisoblamaydi. updateValueAndValidity() validatorlarni qayta yurgizib, status, errors va ota guruh holatini yangilaydi.
25. Middle ā Reactive Forms'da control'ga clearValidators() chaqirildi, lekin u hali ham invalid ā nega?
- A) Eski xatolarni
setErrors(null)bilan qo'lda o'chirish kerak - B) Template'dagi
requiredatributi validatorni qaytaradi - C) Status qayta hisoblanmagan ā
updateValueAndValidity()yo'q - D)
clearValidators()faqat async validatorlarni tozalaydi
Javob
C ā Status qayta hisoblanmagan ā updateValueAndValidity() yo'q
Ro'yxat bo'shatildi, ammo oldingi errors obyekti va status joyida qoladi. clearValidators(); updateValueAndValidity(); juftligi ā standart pattern.
Reactive Forms
26. Middle ā statusChanges observable'i nimani emit qiladi?
- A) Faqat
trueyokifalseā control yaroqli yoki yaroqsiz - B) Yangi status satrini ā
VALID,INVALID,PENDING - C) Har bir xato obyektini ā
{ required: true }ko'rinishida - D) Qiymat va status juftligini massiv sifatida birga beradi
Javob
B ā Yangi status satrini ā VALID, INVALID, PENDING
To'rtta status bor: VALID, INVALID, PENDING, DISABLED. statusChanges har hisoblashdan keyin yangi satrni beradi ā valueChanges bilan birga combineLatest qilinadi. disable() ham emit qiladi.
27. Junior ā Reactive Forms'da control'ga async validator qo'yilgan. Javob kutilayotgan paytda uning statusi qanday bo'ladi?
- A)
PENDINGā natija kelmaguncha shu holatda turadi - B)
INVALIDā javob kelmaguncha xato deb hisoblanadi - C)
VALIDā kutish davrida forma yuborilaverishi mumkin - D)
DISABLEDā control javob kelguncha bloklanadi
Javob
A ā PENDING ā natija kelmaguncha shu holatda turadi
PENDING ā valid ham, invalid ham false. Shuning uchun Submit tugmasini [disabled]="form.invalid || form.pending" bilan bloklash kerak, aks holda kutish paytida yuborib yuborish mumkin.
28. Middle ā Reactive Forms'da saqlash muvaffaqiyatli tugadi, ammo form.dirty hamon true. Nima qilinadi?
- A)
form.updateValueAndValidity()bayroqlarni ham tiklaydi - B)
form.reset()ā boshqa yo'l yo'q, qiymatlar ham tozalanadi - C)
form.setValue(saqlangan)ā qiymat tenglashsa dirty tushadi - D)
form.markAsPristine()vaform.markAsUntouched()
Javob
D ā form.markAsPristine() va form.markAsUntouched()
Qiymatni saqlab, formani 'toza' holatga qaytarish kerak bo'lganda shu ikki metod ishlatiladi ā reset() esa qiymatlarni ham o'chiradi. canDeactivate guard'i aynan dirty ga tayanadi.
29. Middle ā Reactive Forms'da ctrl.setValue('x') dasturiy chaqirildi ā control'ning dirty bayrog'iga nima bo'ladi?
- A) Faqat
emitEvent: trueberilgan holatdadirtytruebo'ladi - B)
truebo'ladi ā qiymat o'zgargani bayroqni ko'taradi - C)
touchedbilan birgalikda avtomatiktruebo'ladi - D)
pristineqoladi ā kerak bo'lsamarkAsDirty()chaqiriladi
Javob
D ā pristine qoladi ā kerak bo'lsa markAsDirty() chaqiriladi
dirty/touched ā foydalanuvchi harakatining belgisi: ularni faqat UI qatlami (ngModel, formControlName) o'rnatadi. Dasturiy o'zgartirishda kerak bo'lsa markAsDirty()/markAsTouched() qo'lda chaqiriladi.
Advanced
30. Senior ā valueChanges obunasi ichida setValue() chaqirilgani cheksiz sikl berdi. Yechim?
this.form.get('a')!.valueChanges.subscribe(v => {
this.form.get('b')!.setValue(v * 2); // -> yana valueChanges
});
- A)
setValue(v, { emitEvent: false })ko'rinishida chaqirish - B)
patchValue()ga o'tish ā bu metod hodisa yubormaydi - C)
distinctUntilChanged()qo'shish ā u siklni butunlay to'xtatadi - D) Obunani
take(1)bilan cheklash ā bir marta ishlab to'xtaydi
Javob
A ā setValue(v, { emitEvent: false }) ko'rinishida chaqirish
emitEvent: false ā valueChanges va statusChanges emit qilinmaydi, status esa yangilanadi. patchValue ham xuddi shunday emit qiladi; distinctUntilChanged faqat qiymat tasodifan teng bo'lgandagina qutqaradi.
Reactive Forms
31. Middle ā Reactive Forms'da ichki control'dan uni o'rab turgan FormGroup ga qanday chiqiladi?
- A)
ctrl.get('..')ā yo'lda bir daraja yuqoriga ko'taradi - B)
ctrl.ownerā control'ning bevosita egasi shu yerda saqlanadi - C)
ctrl.parentā bevosita ota,ctrl.rootesa ildiz forma - D)
ctrl.rootā bu har doim bevosita ota guruhni beradi
Javob
C ā ctrl.parent ā bevosita ota, ctrl.root esa ildiz forma
Cross-field validatorda control.parent?.get('password') juda ko'p ishlatiladi. Diqqat: validator birinchi marta ishlaganda control hali guruhga qo'shilmagan bo'lishi mumkin ā parent null bo'ladi.
32. Middle ā Reactive Forms'da form.get('address.city') nima qaytaradi?
- A) Xato ā nuqtali yo'l faqat
FormArrayindeksi uchun ishlaydi - B)
addressguruhi ichidagicitycontrol'i, topilmasanull - C) Har doim
AbstractControlā topilmasa bo'sh control quriladi - D)
citymaydonining qiymatini ā satr ko'rinishida qaytaradi
Javob
B ā address guruhi ichidagi city control'i, topilmasa null
get nuqtali yo'l yoki massiv qabul qiladi: get(['address','city']). FormArray uchun indeks: get('items.0.qty'). Topilmasa null ā shuning uchun ! yoki tekshiruv kerak.
Advanced
33. Senior ā Reactive Forms'da server javobiga qarab control'ga xatoni qo'lda qo'yish uchun nima ishlatiladi?
- A)
ctrl.updateValueAndValidity({ error })orqali uzatiladi - B)
ctrl.setValidators(fn)ā xato shu yo'l bilan paydo bo'ladi - C)
ctrl.markAsInvalid()ā status darholINVALIDga o'tadi - D)
ctrl.setErrors({ taken: true })chaqiriladi
Javob
D ā ctrl.setErrors({ taken: true }) chaqiriladi
O'qishda hasError('taken') va getError('taken') ishlatiladi. Ogohlantirish: keyingi updateValueAndValidity() qo'lda qo'yilgan xatoni o'chirib yuboradi ā markAsInvalid() degan metod umuman yo'q.
Validators
34. Senior ā Angular'da AsyncValidatorFn qaysi natijani qaytarsa control yaroqli deb sanaladi?
- A)
of({ valid: true })ā status obyekt orqali beriladi - B)
of(null)ā xato yo'qligi aynan shu tarzda bildiriladi - C)
of(true)ā muvaffaqiyat belgisi sifatida qaytariladi - D)
of({})ā bo'sh obyekt, ya'ni xatolar ro'yxati bo'sh qaytdi
Javob
B ā of(null) ā xato yo'qligi aynan shu tarzda bildiriladi
Sinxron validator kabi: null ā xato yo'q, obyekt ā xato ({} ham obyekt, demak invalid). Oqim tugashi shart (first()), aks holda control PENDING da qotib qoladi.
Angular ā NgModule
27 savol
NgModule asoslari
1. Junior ā Klassik @NgModule da declarations massiviga nima tushadi?
- A) Import qilingan modullar ro'yxati
- B) Faqat komponentlar, direktiva va pipe emas
- C) Component, Directive va Pipe klasslari
- D) Modul va service'lar to'plami
Javob
C ā Component, Directive va Pipe klasslari
declarations ā 'menda yashaydi' ro'yxati. Bitta komponent faqat bitta modulning declarations ida bo'la oladi ā aks holda xato.
2. Junior ā imports ga nima tushadi (klassik NgModule'da)?
- A) Service'lar
- B) Faqat modullar
- C) Komponentlar
- D) Pipe'lar
Javob
B ā Faqat modullar
ā ļø Standalone'da teskari ā u yerda imports ga komponent, direktiva, pipe ham tushadi.
3. Junior ā SharedModule dagi komponentni boshqa modulda ishlatish uchun nima kerak?
- A)
exportsga qo'shish ā boshqalarga ochib beradi - B)
importsro'yxatiga qo'shib qo'yishning o'zi kifoya - C)
providersga qo'shib qo'yish kerak - D)
declarationsda bo'lsa yetarli
Javob
A ā exports ga qo'shish ā boshqalarga ochib beradi
exportssiz declarations ā bu 'shaxsiy' komponent, modul ichida ishlaydi, tashqarida ko'rinmaydi.
4. Junior ā Klassik @NgModule da providers massiviga nima tushadi?
- A) Injectable service klasslari
- B) Komponent va pipe klasslari
- C) Import qilinadigan modullar
- D) Faqat root komponent klassi
Javob
A ā Injectable service klasslari
Zamonaviy yondashuv ā providedIn: 'root' (tree-shakable). NgModule.providers da e'lon qilingan service ishlatilmasa ham bundle'ga tushadi.
5. Junior ā @NgModule dagi bootstrap massivi nima uchun?
- A) Lazy yuklanadigan modullar ro'yxati
- B) Ilova start'ida chaqiriladigan service'lar
- C) Ilova ishga tushganda yaratiladigan root komponent
- D) Router tomonidan dinamik yaratiladigan komponentlar
Javob
C ā Ilova ishga tushganda yaratiladigan root komponent
Odatda AppComponent. Faqat root modulda (AppModule) bo'ladi. Standalone'da bootstrapApplication(AppComponent) bu vazifani bajaradi.
Module arxitekturasi
6. Middle ā Angular'da feature module nima?
- A) Faqat lazy yuklanadigan har qanday modul
- B) Bitta funksionallikni qamrab oluvchi modul
- C) Umumiy pipe va direktivalar moduli
- D) Ilovaning root moduli,
AppModule
Javob
B ā Bitta funksionallikni qamrab oluvchi modul
Masalan OrdersModule ā o'z komponent, service va route'lari bilan. Odatda lazy yuklanadi va RouterModule.forChild() ishlatadi.
7. Middle ā SharedModule nima uchun va nimani o'z ichiga olmasligi kerak?
- A) Service'lar uchun; komponent va pipe bo'lmasligi kerak
- B) Route'lar uchun; direktiva bo'lmasligi kerak
- C) Umumiy UI uchun; singleton service bo'lmasligi kerak
- D) Umumiy UI uchun; pipe'lar bo'lmasligi kerak
Javob
C ā Umumiy UI uchun; singleton service bo'lmasligi kerak
SharedModule da service bo'lsa, lazy modul uni import qilganda alohida instansiya paydo bo'ladi. Shuning uchun service'lar CoreModule ga (yoki providedIn: 'root' ga) ajratiladi.
8. Middle ā CoreModule nima uchun?
- A) Lazy modullar uchun umumiy routing konfiguratsiyasi
- B) Faqat
AppModuleda import qilinadigan singleton service - C) Uchinchi tomon kutubxonalarini qayta eksport qilish
- D) Har bir feature modulda import qilinadigan umumiy pipe'lar
Javob
B ā Faqat AppModule da import qilinadigan singleton service
Auth, logger kabi butun ilova bo'ylab bitta bo'lishi kerak bo'lgan service'lar uchun. providedIn: 'root' keng tarqalgach CoreModule kamroq ishlatiladi.
9. Senior ā CoreModule ikki marta import qilinishining oldini olish uchun?
- A) Konstruktorda
@Optional() @SkipSelf()tekshiruvi - B) Service'larni
providedIn: 'root'bilan e'lon qilish - C) Modulni faqat
forRoot()orqali import qilish - D)
@NgModulegaidxossasini berib qo'yish
Javob
A ā Konstruktorda @Optional() @SkipSelf() tekshiruvi
constructor(@Optional() @SkipSelf() parent: CoreModule) ā @SkipSelf yuqoridan qidiradi (topilsa ā allaqachon import qilingan), @Optional esa to'g'ri holatda null qaytaradi.
Lazy Loading
10. Middle ā loadChildren qanday yoziladi (v14+)?
- A)
() => import('./x.module').then(m => m.XModule) - B)
() => require('./x.module').XModule - C)
'./x.module#XModule'ko'rinishidagi satr - D)
XModuleklassini to'g'ridan-to'g'ri qiymat sifatida
Javob
A ā () => import('./x.module').then(m => m.XModule)
Satr sintaksisi ('./x#XModule') v9 dan olib tashlangan. Dinamik import() webpack'ga alohida chunk yaratishni aytadi.
11. Middle ā loadComponent (v14+) qachon ishlatiladi?
- A) Faqat root komponentni bootstrap qilishda
- B) NgModule ichidagi komponentni yuklashda
- C) Standalone komponentni lazy yuklashda
- D) Komponentni
ViewContainerRefga qo'shishda
Javob
C ā Standalone komponentni lazy yuklashda
NgModule kerak emas: { path: 'profile', loadComponent: () => import('./profile.component').then(m => m.ProfileComponent) }.
12. Middle ā RouterModule.forRoot() va forChild() farqi?
- A)
forChildRouter provider'larini qayta yaratadi - B)
forRootfaqat root route'larni,forChildbolalarini oladi - C)
forRootRouter provider'larini ham ro'yxatdan o'tkazadi - D)
forChildlazy modulda route'larni asinxron yuklaydi
Javob
C ā forRoot Router provider'larini ham ro'yxatdan o'tkazadi
forChild esa faqat route'larni qo'shadi. forRoot ikki marta chaqirilsa ikkita Router instansiyasi paydo bo'ladi va navigatsiya buziladi.
13. Middle ā Lazy modulning providers idagi service ā root'dagi bilan bir xilmi?
- A) Ha ā modul provider'lari root injector'ga tushadi
- B) Yo'q ā lazy modul o'z child injector'ini yaratadi
- C) Ha, agar
providedIn: 'root'ishlatilmagan bo'lsa - D) Yo'q ā lazy modul provider'lari umuman ishlamaydi
Javob
B ā Yo'q ā lazy modul o'z child injector'ini yaratadi
Alohida instansiya paydo bo'ladi. Bu providedIn: 'any' bilan bir xil samara beradi. Singleton kerak bo'lsa providedIn: 'root'.
14. Middle/Senior ā PreloadAllModules nima qiladi?
- A) Asosiy sahifa yuklangach fonda lazy modullarni yuklaydi
- B) Lazy modullarni parallel ravishda darhol yuklaydi
- C) Foydalanuvchi link ustiga sichqoncha olib kelganda yuklaydi
- D) Barcha lazy modullarni asosiy bundle'ga qo'shadi
Javob
A ā Asosiy sahifa yuklangach fonda lazy modullarni yuklaydi
provideRouter(routes, withPreloading(PreloadAllModules)). Custom strategiya bilan faqat kerakli modullarni oldindan yuklash mumkin.
15. Senior ā Webpack Bundle Analyzer nima uchun?
- A) Build vaqtida sintaksis xatolarini topib beradi
- B) Bundle ichida nima ko'p joy egallaganini ko'rsatadi
- C) Runtime'da sahifa yuklanish tezligini o'lchaydi
- D) Ishlatilmayotgan kodni bundle'dan avtomatik olib tashlaydi
Javob
B ā Bundle ichida nima ko'p joy egallaganini ko'rsatadi
Keraksiz kutubxonalarni topishga yordam beradi: ng build --stats-json ā npx webpack-bundle-analyzer dist/stats.json. source-map-explorer ham shu vazifani bajaradi.
Standalone vs NgModule
16. Middle ā bootstrapApplication() va platformBrowserDynamic().bootstrapModule() farqi?
- A)
bootstrapApplicationfaqat SSR uchun mo'ljallangan - B)
platformBrowserDynamicstandalone'ni qo'llab-quvvatlaydi - C)
bootstrapApplicationstandalone komponentdan boshlaydi - D) Ikkalasi ham
AppModulemavjudligini talab qiladi
Javob
C ā bootstrapApplication standalone komponentdan boshlaydi
AppModule kerak emas. Provider'lar ikkinchi argumentda: bootstrapApplication(App, { providers: [provideRouter(routes), provideHttpClient()] }).
17. Middle ā Standalone ilovada eski NgModule provider'larini olish uchun?
- A)
inject(SomeModule)orqali olish - B)
SomeModule.forRoot()niimportsga qo'shish - C)
importProvidersFrom(SomeModule) - D)
provideFromModule(SomeModule)
Javob
C ā importProvidersFrom(SomeModule)
Vaqtinchalik ko'prik ā u modulning butun provider to'plamini tortadi, tree-shaking yomonlashadi. Imkon bo'lsa provideX() afzal.
18. Senior ā NgModule'dan standalone'ga migratsiya uchun rasmiy vosita?
- A)
ng generate @angular/core:standalone - B)
ng update @angular/core --standalone - C)
ng migrate --to=standalone - D)
ng generate @schematics/angular:standalone
Javob
A ā ng generate @angular/core:standalone
Uch bosqichli schematic: ā komponentlarni standalone qilish ā” keraksiz NgModule'larni olib tashlash ⢠bootstrapApplication ga o'tish.
19. Senior ā Module Federation nima?
- A) Webpack 5 imkoniyati ā micro-frontend uchun asos
- B) Bir nechta lazy modulni bitta chunk'ga yig'ish usuli
- C) Angular'ning NgModule'larni birlashtirish mexanizmi
- D) Monorepo'da modullarni ulashish uchun Nx plugini
Javob
A ā Webpack 5 imkoniyati ā micro-frontend uchun asos
Mustaqil deploy qilingan ilovalar runtime'da bir-birining kodini yuklaydi. @angular-architects/module-federation paketi bilan: host ilova remote ilovaning komponentini runtime'da yuklaydi.
NgModule asoslari
20. Middle ā BrowserModule va CommonModule orasidagi asosiy farq nima?
- A)
CommonModulefaqat server-side rendering uchun kerak - B) Ikkalasi bir xil ā
BrowserModuleeski, deprecated nomi - C)
BrowserModuleāCommonModule+ brauzer provider'lari - D)
BrowserModulefaqatngIfvangFordirektivalarini beradi
Javob
C ā BrowserModule ā CommonModule + brauzer provider'lari
CommonModule ā ngIf, ngFor, ngSwitch, DatePipe va h.k. Uni har qanday feature modulda import qilish mumkin. BrowserModule esa shularning ustiga DomRenderer, sanitizer, ErrorHandler kabi global provider'larni qo'shadi ā shuning uchun faqat root modulda (AppModule) import qilinadi, feature modulda takrorlash xato beradi. BrowserModule.withServerTransition({appId}) esa SSR paytida serverda render qilingan DOM'ni brauzerda qayta ishlatish (hydration'gacha bo'lgan davr) uchun ishlatilgan ā v16+ da provideClientHydration() bilan almashtirildi.
Module arxitekturasi
21. Senior ā ApplicationRef.tick() nima qiladi?
- A) Faqat joriy komponentni qayta render qiladi
- B) Butun ilova bo'ylab change detection'ni ishga tushiradi
- C) Barcha kutilayotgan HTTP so'rovlar tugashini kutib turadi
- D) Zone.js ni o'chirib, keyingi taymerni kutadi
Javob
B ā Butun ilova bo'ylab change detection'ni ishga tushiradi
tick() ā barcha attach qilingan view'lar bo'yicha CD sikli. Zone.js odatda uni o'zi chaqiradi; zoneless yoki runOutsideAngular dan keyin qo'lda chaqiriladi. attachView(viewRef) / detachView(viewRef) ā dinamik yaratilgan komponentni CD daraxtiga ulash yoki uzish. isStable ā Observable<boolean>, ilovada kutilayotgan mikro/makro task qolmaganida true beradi (SSR shu signalni kutib HTML'ni serialize qiladi).
22. Senior ā Lazy modulni qo'lda yuklaganda NgModuleRef nima beradi?
- A) Modul injektori va komponent yaratish imkoniyatini
- B) Modul route'larini avtomatik ro'yxatdan o'tkazadi
- C) Modul template'lariga to'g'ridan-to'g'ri kirish imkonini
- D) Modul
declarationsro'yxatini massiv ko'rinishida
Javob
A ā Modul injektori va komponent yaratish imkoniyatini
ref.injector ā shu modul provider'lari bilan yangi injector (ota injector bilan bog'langan). ref.createComponent(Cmp) (yoki eskicha componentFactoryResolver) ā komponentni shu injector kontekstida yaratadi. ref.destroy() ā modul provider'laridagi barcha ngOnDestroy larni chaqiradi va undan yaratilgan view'larni yo'q qiladi; destroy'dan keyin ref'dan foydalanib bo'lmaydi. ref.instance ā modul klassining o'zi.
NgModule asoslari
23. Middle ā Ivy'gacha bo'lgan entryComponents qaysi muammoni hal qilgan?
- A) Komponent selektorlari to'qnashuvining oldini olgan
- B) Template'da yo'q komponentga fabrika yaratishni
- C) Komponentlarni lazy chunk'larga bo'lib yuborgan
- D) Dinamik komponentlarga DI provider'larini ulagan
Javob
B ā Template'da yo'q komponentga fabrika yaratishni
ViewEngine'da kompilyator faqat template'da uchragan komponentlar uchun ComponentFactory generatsiya qilardi. Dialog, popup kabi dinamik komponentlar hech qaysi template'da yozilmagani uchun ular entryComponents ga qo'lda qo'shilardi ā aks holda 'No component factory found' xatosi. Ivy'da har bir komponent o'zining ɵcmp definitsiyasini olib yuradi (locality principle), shuning uchun fabrikani oldindan ro'yxatga olish keraksiz bo'ldi: v9 da deprecated, v13 da butunlay olib tashlandi.
Module arxitekturasi
24. Senior ā APP_BOOTSTRAP_LISTENER tokeni nima uchun kerak?
- A) Root modul provider'larini almashtirish uchun
- B) Bootstrap'ni Promise bajarilguncha kechiktirish uchun
- C) Bootstrap paytidagi xatolarni ushlab qolish uchun
- D) Root komponent bootstrap bo'lgach callback chaqirish
Javob
D ā Root komponent bootstrap bo'lgach callback chaqirish
Bu multi: true token: har bir callback bootstrap qilingan komponentning ComponentRef ini argument sifatida oladi va root komponent yaratilib, DOM'ga qo'yilgandan keyin ishlaydi. APP_INITIALIZER bilan aralashtirmang ā u aksincha bootstrap'dan oldin ishlaydi va Promise/Observable qaytarsa ilova start'ini kutib turadi. Amaliyotda: analytics init, dastlabki telemetriya, splash screen'ni yopish.
NgModule asoslari
25. Middle ā CUSTOM_ELEMENTS_SCHEMA va NO_ERRORS_SCHEMA farqi nimada?
- A) Birinchisi runtime'da, ikkinchisi kompilyatsiyada ishlaydi
- B) Ikkalasi ham faqat noma'lum atributlarga ruxsat beradi
- C) Birinchisi barcha teglarni, ikkinchisi faqat
-liklarni - D) Birinchisi
-li teglarga, ikkinchisi hammasiga ruxsat
Javob
D ā Birinchisi - li teglarga, ikkinchisi hammasiga ruxsat
schemas ā kompilyatorga template tekshiruvini yumshatish ko'rsatmasi. CUSTOM_ELEMENTS_SCHEMA ā nomida - bo'lgan teglarni (Web Components: <my-widget>) va ularning propertylarini noma'lum deb hisoblamaydi. NO_ERRORS_SCHEMA ā istalgan teg va atributga ruxsat beradi, ya'ni template tekshiruvini deyarli o'chiradi; xato yozilgan selektor ham sezilmay ketadi, shuning uchun uni faqat oxirgi chora sifatida ishlatish kerak.
Module arxitekturasi
26. Middle ā SharedModule exports: [CommonModule, FormsModule] yozsa nima bo'ladi?
- A) Uni import qilgan modul ularni ham qo'shimcha oladi
- B) Bu xato ā
exportsga faqat deklaratsiyalar tushadi - C) Ular ikki marta yuklanib, provider dublikatlari paydo bo'ladi
- D) Faqat
SharedModuleichida ular ishlatilishi mumkin bo'ladi
Javob
A ā Uni import qilgan modul ularni ham qo'shimcha oladi
exports ga nafaqat o'z declarations, balki modulni ham qo'yish mumkin ā bu re-export. Natijada SharedModule ni import qilgan har bir feature modul ngIf, ngFor, ngModel ni alohida import'siz oladi. Modullar singleton bo'lgani uchun takroriy provider yaratilmaydi. Diqqat: bu qulaylik ā modul kimga nima berayotganini yashiradi, shuning uchun standalone davrida to'g'ridan-to'g'ri imports afzal ko'riladi.
27. Senior ā Ikki modul bir-birini import qilsa qanday simptom kuzatiladi?
- A) Lazy modullar eager'ga aylanib, start sekinlashadi
- B) Runtime'da modul
undefinedāforwardRefyordam beradi - C) Ilova ishlaydi, faqat bundle hajmi ikki barobar oshadi
- D) Kompilyator to'g'ridan-to'g'ri 'circular import' xatosi beradi
Javob
B ā Runtime'da modul undefined ā forwardRef yordam beradi
Aylanma importda ES modullardan biri hali to'liq yuklanmagan bo'ladi va dekorator metadatasi baholanayotganda undefined ko'rinadi: 'Unexpected value undefined imported by the module X'. Vaqtinchalik yechim ā imports: [forwardRef(() => BModule)], bu havolani kechiktirib baholaydi. To'g'ri yechim esa arxitekturaviy: umumiy qismni uchinchi (SharedModule) modulga chiqarish yoki bog'liqlik yo'nalishini bir tomonlama qilish.
Angular ā Sintaksis va Clean Code
27 savol
Template sintaksisi
1. Junior ā Template reference variable #input qanday ishlatiladi?
- A) Komponent maydonini template'ga bog'laydi
- B) Template ichidan elementga murojaat qilish uchun
- C) Elementga CSS klass sifatida biriktiriladi
- D) Butun ilova bo'ylab global o'zgaruvchi yaratadi
Javob
B ā Template ichidan elementga murojaat qilish uchun
#i ā i.value, i.focus(); TS'da @ViewChild('i'). Element'da ā DOM element Ā· komponentda ā komponent instansiyasi Ā· #x="exportAs" ā direktiva.
2. Junior ā Safe navigation ?. template'da nima qiladi?
- A)
null/undefinedda to'xtabundefinedqaytaradi - B) Qiymat mavjudligini
booleanqilib tekshiradi - C) Xatoni ushlab konsolga log qilib qo'yadi
- D)
nullbo'lsa uning o'rniga default qiymatni qaytaradi
Javob
A ā null/undefined da to'xtab undefined qaytaradi
TypeError o'rniga undefined: {{ user?.address?.city }}. Ma'lumot async kelganda majburiy ā aks holda birinchi renderda crash.
3. Junior/Middle ā Angular template'da (click)="onSave($event)" yozilganda $event nima?
- A) Angular beradigan global hodisa obyekti
- B) Event binding'da uzatiladigan hodisa qiymati
- C) DOM'ning
window.eventxossasiga taxallus - D)
EventEmitterklassining o'zi
Javob
B ā Event binding'da uzatiladigan hodisa qiymati
(click)="f($event)" ā MouseEvent. (userSaved)="f($event)" ā EventEmitter emit qilgan qiymat.
4. Junior/Middle ā Angular template'da $any() nima uchun ishlatiladi?
- A) Qiymatni
anytipiga runtime'da o'zgartiradi - B) O'sha ifoda uchun template tip tekshiruvini o'chiradi
- C)
nullvaundefineddan himoya qiladi - D)
strictTemplatesni butun fayl bo'ylab o'chirib qo'yadi
Javob
B ā O'sha ifoda uchun template tip tekshiruvini o'chiradi
strictTemplates da kompilyatsiya xatosining oldini oladi: {{ $any(user).newField }}. Vaqtinchalik yechim ā asosiysi tipni to'g'rilash.
5. Middle ā *ngIf bilan else pattern qanday yoziladi?
- A)
*ngIf="x"+<ng-template #else> - B)
*ngIf="x; else tpl"+<ng-template #tpl> - C)
*ngIf="x"va yonidagi elementda*ngElse="tpl" - D)
*ngIf="x; then tpl"+<div #tpl>
Javob
B ā *ngIf="x; else tpl" + <ng-template #tpl>
as sintaksisi ham foydali: *ngIf="user$ | async as user" ā bitta subscription va lokal o'zgaruvchi.
6. Middle ā ng-container nima uchun?
- A) DOM'ga ortiqcha element qo'shmasdan guruhlash
- B) Kontentni ota komponentdan proyeksiya qilish
- C) Shartli render uchun
<ng-template>taxallusi - D) Dinamik komponent joylashtiriladigan nuqta
Javob
A ā DOM'ga ortiqcha element qo'shmasdan guruhlash
Ayniqsa ikkita strukturaviy direktiva kerak bo'lganda: <div *ngIf *ngFor> ā mumkin emas, <ng-container *ngIf><div *ngFor> ā
.
Angular 17+ yangi sintaksis
7. Middle ā Angular 17+ dagi @if bloki va *ngIf ā asosiy texnik farq?
- A)
@iffaqat standalone komponentlarda ishlaydi - B)
@ifng-templateyaratmaydi,CommonModulekerak emas - C)
@ifng-templateyaratadi, lekin uni keshlaydi - D)
@ifishlatilganda hamCommonModuleimport qilish shart
Javob
B ā @if ng-template yaratmaydi, CommonModule kerak emas
Kompilyator to'g'ridan-to'g'ri kodga o'giradi. @if (x) {...} @else if (y) {...} @else {...} ā else if ham bor, *ngIf da yo'q edi.
8. Middle ā Angular 17+ @for blokida track majburiymi va nega?
- A) Ixtiyoriy ā berilmasa Angular
$indexni oladi - B) Majburiy ā
tracksiz DOM elementlar qayta yaratiladi - C) Faqat 100 dan ortiq elementli katta ro'yxatlarda majburiy
- D) Faqat obyektlar massivi uchun majburiy
Javob
B ā Majburiy ā tracksiz DOM elementlar qayta yaratiladi
Qayta yaratilganda fokus, scroll va animatsiya yo'qoladi. @for (u of users; track u.id) {...} @empty { <p>Bo'sh</p> } ā @empty *ngFor da yo'q edi.
9. Middle ā Angular 17+ @for blokida track $index qachon xavfli?
- A) Ro'yxat elementlari
idmaydoniga ega bo'lmaganda - B) Ro'yxat faqat oxiriga element qo'shilganda
- C) Ro'yxat
asyncpipe orqali kelganda - D) Ro'yxat o'rtasiga element qo'shilganda/o'chirilganda
Javob
D ā Ro'yxat o'rtasiga element qo'shilganda/o'chirilganda
Indekslar suriladi, noto'g'ri DOM qayta ishlatiladi ā input qiymatlari aralashadi. Barqaror id bo'lsa har doim track item.id; $index faqat o'zgarmaydigan ro'yxat uchun.
10. Middle ā Angular 17+ @switch bloki qanday yoziladi?
- A)
@switch (x) { @case 'a': ... @default: ... } - B)
@switch (x) { @case ('a') {...} @else {...} } - C)
@switch (x) { @case ('a') {...} @default {...} } - D)
@switch x { @case a {...} @default {...} }
Javob
C ā @switch (x) { @case ('a') {...} @default {...} }
*ngSwitchCase dan farqli ā qiymat qavs ichida va blok {} bilan. break kerak emas.
11. Middle/Senior ā Angular 17+ @defer blokining barcha triggerlari qaysilar?
- A)
on idleĀ·on viewportĀ·on hoverĀ·on scrollĀ·when - B)
on idleĀ·on viewportĀ·on interactionĀ·on timerĀ·when - C)
on loadĀ·on viewportĀ·on interactionĀ·on hoverĀ·when - D)
on idleĀ·on viewportĀ·on clickĀ·on immediateĀ·if
Javob
B ā on idle Ā· on viewport Ā· on interaction Ā· on timer Ā· when
To'liq ro'yxat: on idle (default) Ā· on viewport Ā· on interaction Ā· on hover Ā· on immediate Ā· on timer(500ms) Ā· when shart. on scroll, on load, on click mavjud emas ā on viewport IntersectionObserver bilan scroll'ni qoplaydi.
12. Middle/Senior ā @defer bloki ichidagi komponent baribir asosiy bundle'ga tushib qoldi. Nega?
- A)
@deferfaqat v18 dan boshlab chunk ajratadi - B) Komponent shu template'da
@deferdan tashqarida ham bor - C)
@placeholderbloki berilmagan, shuning uchun ajratilmagan - D)
on viewporttrigger'i build vaqtida hisobga olinmaydi
Javob
B ā Komponent shu template'da @defer dan tashqarida ham bor
Shart: komponent standalone va @defer dan tashqarida ishlatilmagan bo'lishi kerak. Standalone bo'lmasa ham chunk ajratilmaydi.
13. Middle/Senior ā Angular 17+ @defer bloki ichidagi @placeholder qachon ko'rinadi?
- A) Yuklashda xato yuz berganda ko'rsatiladi
- B) Chunk yuklanayotgan payt, spinner o'rnida
- C) Yuklash tugab, komponent chizilgandan keyin qisqa vaqt
- D) Trigger ishlamaguncha ā yuklash boshlanishidan oldin
Javob
D ā Trigger ishlamaguncha ā yuklash boshlanishidan oldin
@loading ā yuklash paytida (minimum 500ms bilan miltillashning oldi olinadi) Ā· @error ā xatoda.
Komponent arxitekturasi
14. Middle ā Dumb (Presentation) komponent nima qilmasligi kerak?
- A)
OnPushchange detection ishlatish - B)
@Outputorqali hodisa chiqarish - C)
@Inputorqali tashqaridan ma'lumot qabul qilish - D) Service inject qilib ma'lumotni o'zi olish
Javob
D ā Service inject qilib ma'lumotni o'zi olish
U faqat kelgan ma'lumotni ko'rsatadi. Dumb komponent: @Input + @Output + OnPush. Qayta ishlatiladigan, test qilish oson, holati yo'q.
15. Middle ā Angular komponentlar daraxtida unidirectional data flow nima degani?
- A) Ma'lumot pastga
@Input, hodisa yuqoriga@Output - B) Ma'lumot faqat
@Inputorqali,@Outputishlatilmaydi - C) Bola ota-ona obyektini to'g'ridan-to'g'ri o'zgartiradi
- D) Ma'lumot faqat service orqali yuqoriga ko'tariladi
Javob
A ā Ma'lumot pastga @Input, hodisa yuqoriga @Output
Bola ota-onaning obyektini o'zgartirmaydi. Bola @Input obyektini mutatsiya qilsa ā OnPush buziladi va manba nomaʼlum bo'ladi.
16. Middle ā Angular ilovasida bir-biridan uzoqda joylashgan ikki komponent orasida ma'lumot almashish uchun eng yaxshi usul?
- A)
localStoragega yozib, boshqasida o'qish - B) Ota komponentda
@ViewChildorqali to'g'ridan-to'g'ri murojaat - C) Umumiy service ā
BehaviorSubjectyoki signal store - D)
@Input/@Outputzanjirini oxirigacha uzatish
Javob
C ā Umumiy service ā BehaviorSubject yoki signal store
@Input/@Output zanjiri 3 darajadan chuqur bo'lsa ā 'prop drilling' muammosi. Service yoki state management kerak.
Performance pattern'lar
17. Middle ā Nega OnPush + async pipe eng tez juftlik?
- A)
asyncpipemarkForCheck()chaqirib CD ni uyg'otadi - B)
asyncpipe obyekt referensini har safar yangilaydi - C)
asyncpipe natijani keshlab CD ni butunlay to'xtatadi - D) OnPush
asyncpipe uchundetectChangesni chaqiradi
Javob
A ā async pipe markForCheck() chaqirib CD ni uyg'otadi
markForCheck() ā OnPush ning 4 triggeridan biri: OnPush cheklaydi, async pipe kerak bo'lganda ruxsat beradi. Yolg'iz OnPush + qo'lda subscribe = buzuq ekran; yolg'iz async pipe = ishlaydi, lekin ortiqcha CD.
18. Middle ā Angular template'da komponent metodini chaqirish ({{ hisobla() }}) nega yomon?
- A) Faqat
OnPushkomponentlarda xatoga olib keladi - B) Metod natijasi keshlanadi va eskirib qoladi
- C) Angular metodlarni template'da qo'llab-quvvatlamaydi
- D) Har change detection siklida qayta chaqiriladi
Javob
D ā Har change detection siklida qayta chaqiriladi
Kesh yo'q; hatto sichqoncha harakati ham CD ni ishga tushiradi. Muqobil: pure pipe Ā· computed() signal Ā· ma'lumot kelganda bir marta hisoblash.
19. Senior ā Angular'da 10 000 qatorli jadvalni ko'rsatish uchun eng samarali yechim?
- A)
OnPush+trackBybilan chizishni tezlashtirish - B) Ma'lumotni
Web Workerda qayta ishlash - C) Jadvalni
@deferichiga olib lazy yuklash - D) CDK Virtual Scrolling ā faqat ko'rinadigan qatorlar
Javob
D ā CDK Virtual Scrolling ā faqat ko'rinadigan qatorlar
<cdk-virtual-scroll-viewport [itemSize]="50"> ā faqat ko'rinadigan qatorlar DOM'da bo'ladi. Pagination ham to'g'ri yechim ā foydalanuvchi skanerlaydimi (virtual scroll) yoki qidiradimi (pagination).
20. Junior/Middle ā Angular komponent template'ida rasmga yozilgan loading="lazy" nima qiladi?
- A) Native HTML atributi ā rasm yaqinlashguncha kutadi
- B) Angular direktivasi ā
CommonModuledan keladi - C) CSS xususiyati ā rasm yuklashni kechiktiradi
- D) Rasmni past sifatda yuklab, keyin almashtiradi
Javob
A ā Native HTML atributi ā rasm yaqinlashguncha kutadi
<img src="x.jpg" loading="lazy">. Angular'ning NgOptimizedImage (ngSrc) direktivasi buni va boshqa optimizatsiyalarni avtomatlashtiradi.
21. Senior ā Tree shaking nima va uni nima buzadi?
- A) Ishlatilmagan kodni bundle'dan olib tashlash
- B) Bundle faylini gzip bilan siqib yuborish
- C) Kodni chunk'larga bo'lib lazy yuklash
- D) O'zgaruvchi nomlarini qisqartirish (minifikatsiya)
Javob
A ā Ishlatilmagan kodni bundle'dan olib tashlash
Tree shaking'ni buzadi: barrel export'lar, side-effect'li import'lar va NgModule.providers. providedIn: 'root' tree-shakable, NgModule.providers esa yo'q. import '@shared' barrel'i butun to'plamni tortadi.
SOLID va Clean Code
22. Middle ā Angular komponentida Single Responsibility buzilganini qaysi belgilar ko'rsatadi?
- A) Template 100 qatordan uzun bo'lib ketgani va o'qilmasligi
- B) Komponentda beshtadan ortiq
@Inputborligi - C) HTTP so'rov, biznes mantiq va ko'rsatish bitta klassda
- D) Komponent bir nechta service inject qilgani
Javob
C ā HTTP so'rov, biznes mantiq va ko'rsatish bitta klassda
Filter/sort/hisob-kitob va DOM manipulyatsiyasi ham shu klassda bo'lsa ā mas'uliyat buzilgan. Mezon: komponentda if/for/hisob-kitob ko'p bo'lsa ā mantiq service'ga ko'chsin.
23. Senior ā Open/Closed prinsipini Angular'da qanday amalga oshiriladi?
- A) Bazaviy komponentdan meros olib kerakli metodni override qilish
- B)
ng-content,hostDirectives,InjectionTokenstrategiya - C) Komponentni
anytipi bilan universal qilish - D) Yangi holat uchun
if/elseshoxlarini qo'shib borish
Javob
B ā ng-content, hostDirectives, InjectionToken strategiya
Content projection Ā· kompozitsiya Ā· InjectionToken bilan strategiya almashtirish. Kengaytirish uchun ochiq, o'zgartirish uchun yopiq ā mavjud klassni tahrirlamasdan yangi xatti-harakat qo'shish.
24. Senior ā Liskov Substitution buzilishiga misol?
- A) Bola klass ota-ona metodini
throwqilib qo'yishi - B) Bola klass ota-onaga yangi metod qo'shishi
- C) Bir klassning bir nechta interfeys implement qilishi
- D) Abstract klassdan bevosita instansiya yaratish
Javob
A ā Bola klass ota-ona metodini throw qilib qo'yishi
Masalan class Penguin extends Bird { fly() { throw new Error() } }. Bola ota-onaning o'rnini hech narsa buzilmasdan bosa olishi kerak. Buzilsa ā meros noto'g'ri qurilgan.
25. Senior ā Angular DI'da Dependency Inversion uchun nega interfeys emas, abstract class ishlatiladi?
- A) Interfeys faqat bitta implementatsiyaga ruxsat beradi
- B) Interfeysga
@Injectable()qo'yib bo'lmaydi - C) Interfeys orqali DI sekinroq ishlaydi
- D) Interfeys runtime'da yo'qoladi, DI token qolmaydi
Javob
D ā Interfeys runtime'da yo'qoladi, DI token qolmaydi
abstract class esa JS'da klass sifatida qoladi va token bo'la oladi. Muqobil ā InjectionToken. Angular DI runtime'da ishlaydi, unga haqiqiy obyekt kerak.
26. Middle ā Angular Style Guide bo'yicha fayl nomlash?
- A)
UserListComponent.ts - B)
userList.component.ts - C)
user-list.component.ts - D)
user_list.component.ts
Javob
C ā user-list.component.ts
Fayl kebab-case.tur.ts Ā· klass PascalCase + tur suffiksi. auth.service.ts ā AuthService Ā· truncate.pipe.ts ā TruncatePipe.
27. Middle/Senior ā Barrel export (index.ts) ning ikkita zarari?
- A) Tree-shaking buzilishi va circular dependency xavfi
- B) Kompilyatsiya sekinlashuvi va tip xatolari ko'payishi
- C) Circular dependency va import yo'llarining uzayishi
- D) Tree-shaking buzilishi va NgModule bilan mos kelmasligi
Javob
A ā Tree-shaking buzilishi va circular dependency xavfi
Bitta narsa uchun butun barrel yuklanadi. Circular dep xato xabari chalg'ituvchi bo'ladi (undefined is not a constructor). Barrel kutubxona chegarasida (public-api.ts) o'rinli, ilova ichida ā yo'q.
Angular ā Versiyalar
21 savol
Angular 12ā13
1. Middle ā Ivy nima berdi?
- A) Kichikroq bundle, tezroq qayta kompilyatsiya, sodda debug
- B) Yangi template sintaksisi va control flow bloklari
- C) Server-side rendering va hydration qo'llab-quvvatlashi
- D) Zone.js o'rniga signal asosidagi change detection
Javob
A ā Kichikroq bundle, tezroq qayta kompilyatsiya, sodda debug
Yaxshi tree-shaking hisobiga. View Engine v12 da butunlay olib tashlandi. Locality prinsipi: har komponent mustaqil kompilyatsiya qilinadi, global metadata kerak emas.
2. Middle ā strict: true (tsconfig) nimalarni yoqadi?
- A)
strictNullChecks,noImplicitAnyva boshqa strict flaglar - B) Faqat
strictNullChecksvanoImplicitAnyjuftligini - C) Faqat
strictPropertyInitializationtekshiruvini - D) Barcha TypeScript strict flaglari va
strictTemplatesni birga
Javob
A ā strictNullChecks, noImplicitAny va boshqa strict flaglar
To'plamga strictBindCallApply, strictPropertyInitialization ham kiradi. Angular CLI yangi loyihalarda strict: true ni default qiladi. strictTemplates esa angularCompilerOptions da alohida.
Angular 14
3. Middle ā Standalone komponent nima?
- A) NgModule'siz komponent ā bog'liqliklari o'z
importsida - B) Lazy yuklanishi mumkin bo'lgan maxsus komponent turi
- C) Angular'dan tashqarida ham ishlaydigan native Web Component
- D) Faqat bitta modulda e'lon qilinadigan komponent
Javob
A ā NgModule'siz komponent ā bog'liqliklari o'z imports ida
Afzalliklar: bog'liqliklar oshkora, tree-shaking yaxshiroq, loadComponent bilan lazy. v19 dan standalone: true default.
4. Middle ā Angular 14 da kiritilgan Typed Reactive Forms nima o'zgartirdi?
- A) Template-driven formalar ham tiplashtirildi
- B)
FormGroupruntime'da tiplarni tekshiradi - C) Validatorlar endi tip xatolarini ham tekshiradi
- D)
form.valueendi aniq tipda, avvalanyedi
Javob
D ā form.value endi aniq tipda, avval any edi
Noto'g'ri field nomi endi kompilyatsiya xatosi. nonNullable: true bilan reset() null emas, boshlang'ich qiymatga qaytaradi.
5. Middle ā inject() funksiyasi (v14+) qayerda ishlaydi?
- A) Komponentning istalgan metodida, jumladan
ngOnInitda - B) Injection context'da: field initializer, konstruktor, factory
- C) Istalgan TypeScript funksiyasi ichida, hech qanday cheklovsiz
- D) Faqat
@Injectable()bilan belgilangan klasslar ichida
Javob
B ā Injection context'da: field initializer, konstruktor, factory
Funksional guard/interceptor ham injection context'da. Metodlarda chaqirilsa NG0203. Asosiy afzalligi ā meros oson (super() ga parametr uzatish kerak emas).
Angular 15
6. Middle/Senior ā hostDirectives nima beradi?
- A) Host elementga direktiva biriktirish ā kompozitsiya usuli
- B) Direktivalarni lazy, kerak bo'lgandagina yuklash
- C) Bir direktivadan ikkinchisiga meros olish usuli
- D) Template ichidagi istalgan elementga direktiva biriktirish
Javob
A ā Host elementga direktiva biriktirish ā kompozitsiya usuli
Input/output qayta nomlash bilan: hostDirectives: [CdkDrag, {directive: Tooltip, inputs: ['tooltipText: text']}].
7. Middle ā Funksional guard klass guard'dan nimasi bilan afzal?
- A)
inject()bevosita ishlaydi, kompozitsiya va test oson - B) Navigatsiyani sinxron tekshirgani uchun tezroq
- C) Faqat funksional guard
ObservableyokiPromiseqaytaradi - D) Klass guard'lar v15 dan butunlay olib tashlangan
Javob
A ā inject() bevosita ishlaydi, kompozitsiya va test oson
Oddiy funksiya bo'lgani uchun. ā ļø Klass CanActivate v15.1 dan deprecated, lekin ishlaydi. 'Deprecated' ā 'ishlamaydi' ā Angular ~2 major versiya ushlaydi.
8. Middle ā provideRouter, provideHttpClient nima uchun kiritildi?
- A) Standalone uchun NgModule'siz, tree-shakable provider berish
- B)
forRoot()chaqiruviga qaraganda qisqaroq yozuv bo'lgani uchun - C) NgModule versiyalari deprecated qilingani uchun
- D) Router va HttpClient'ni tezroq ishga tushirish uchun
Javob
A ā Standalone uchun NgModule'siz, tree-shakable provider berish
provideHttpClient(withInterceptors([...]), withFetch()) ā funksiya bilan sozlash. importProvidersFrom dan afzal.
Angular 16
9. Middle ā signal(), computed(), effect() ā qaysi javob noto'g'ri?
- A)
effectinjection context talab qiladi - B)
signal.set()vasignal.update()mavjud - C)
effectichida signal yozish tavsiya etiladi - D)
computedlazy va memoized
Javob
C ā effect ichida signal yozish tavsiya etiladi
effect ichida .set() ā NG0600. Hosila holat uchun computed(). effect ā Angular'dan tashqariga chiqadigan ishlar uchun (localStorage, log, 3-tomon).
10. Middle ā @Input({ required: true }) nima qiladi?
- A) Kompilyatsiya vaqtida majburiy qiladi ā berilmasa xato
- B) Runtime'da qiymat yo'qligini tekshirib xato tashlaydi
- C) Qiymat berilmasa
undefinedo'rniganullberadi - D) Faqat signal
input.required()bilan birga ishlaydi
Javob
A ā Kompilyatsiya vaqtida majburiy qiladi ā berilmasa xato
Template'da berilmasa kompilyator xato beradi. user!: User dagi ! ni xavfsizroq qiladi.
11. Middle ā takeUntilDestroyed() va eski takeUntil(destroy$) farqi?
- A) Service yo'q qilinganda unsubscribe qiladi, komponentda emas
- B) Faqat signal asosidagi oqimlar bilan ishlaydi
- C)
DestroyReforqali avtomatik āSubjectyozish kerak emas - D) Xuddi shu narsa, faqat qisqaroq yozilgan taxallus
Javob
C ā DestroyRef orqali avtomatik ā Subject yozish kerak emas
ngOnDestroy, next()/complete() ham kerak emas. Injection context kerak; ngOnInit da: takeUntilDestroyed(inject(DestroyRef)).
12. Senior ā SSR hydration nima?
- A) Klientda DOM'ni o'chirib qaytadan qurish
- B) Serverdan kelgan ma'lumotni klientda keshlash
- C) Sahifani serverda to'liq render qilib klientga yuborish
- D) Serverdagi HTML'ni qayta chizmasdan 'jonlantirish'
Javob
D ā Serverdagi HTML'ni qayta chizmasdan 'jonlantirish'
DOM saqlanadi, faqat event listener'lar ulanadi. Avval Angular butun DOM'ni o'chirib qayta chizardi (miltillash). provideClientHydration() bilan yoqiladi.
Angular 17
13. Middle ā Angular 17 dagi yangi control flow (@if, @for, @switch) ning asosiy afzalligi?
- A)
ng-templateyaratmaydi āCommonModulekerak emas - B)
*ngIfva*ngForni to'liq almashtirib, ularni o'chiradi - C) Faqat o'qishga qulayroq sintaksis, ichki mexanizm bir xil
- D) Change detection'ni zonasiz rejimga majburan o'tkazadi
Javob
A ā ng-template yaratmaydi ā CommonModule kerak emas
Kompilyator to'g'ridan-to'g'ri o'giradi ā tezroq ham. Qo'shimcha: @for da @empty bloki, @if da @else if.
14. Middle ā @defer nima uchun?
- A) SSR'da blokni serverda render qilmaslik uchun
- B) Komponent chizilishini animatsiya bilan kechiktirish
- C) Route darajasida modulni lazy yuklash uchun
- D) Template blokini alohida chunk'ga chiqarib lazy yuklash
Javob
D ā Template blokini alohida chunk'ga chiqarib lazy yuklash
Trigger bo'lganda yuklanadi. Route darajasidagi lazy loading'dan farqli ā template darajasida. Og'ir komponentlar (grafik, xarita, izohlar) uchun.
15. Middle ā Signals v17 da qanday holatga keldi?
- A)
input()/output()bilan birga stable bo'ldi - B) Faqat zoneless rejimda ishlatish mumkin
- C) Developer preview bosqichida qoldi
- D) Stable ā production uchun tayyor
Javob
D ā Stable ā production uchun tayyor
v16 da preview, v17 da stable. input()/output()/model() esa v17.1 da qo'shildi.
16. Middle/Senior ā input(), output(), model() farqi?
- A)
input()o'qish Ā·output()hodisa Ā·model()ikki tomonlama - B)
input()o'qish Ā·output()signal Ā·model()faqat forma uchun - C)
input()ikki tomonlama Ā·output()hodisa Ā·model()o'qish - D) Uchalasi ham signal qaytaradi, faqat nomlari farq qiladi
Javob
A ā input() o'qish Ā· output() hodisa Ā· model() ikki tomonlama
output() EventEmitter o'rniga, model() esa [(value)] uchun. input.required<T>() ā majburiy input. Signal bo'lgani uchun computed/effect da avtomatik kuzatiladi.
17. Senior ā viewChild() signal query @ViewChild dan nimasi bilan farq qiladi?
- A) Faqat standalone komponentlarda ishlatsa bo'ladi
- B) Bir nechta elementni bitta so'rovda qaytaradi
- C) Signal qaytaradi ā
ngAfterViewInitkutish shart emas - D)
ngAfterViewInitda o'qish shart, faqat sintaksisi boshqa
Javob
C ā Signal qaytaradi ā ngAfterViewInit kutish shart emas
computed/effect da ishlatilaveradi. viewChild.required<ElementRef>('ref') va viewChildren() ham bor. v17.2+.
Angular 18+
18. Senior ā Angular'da zoneless change detection (v18+) nimani o'zgartiradi?
- A) Model 'kuzatuv'dan 'xabar berish'ga o'tadi
- B) Faqat
zone.jsolib tashlanadi, qolgani o'zgarmaydi - C) Change detection daraxt bo'ylab tezroq aylanadi
- D) CD faqat
setTimeoutvaPromiseda ishga tushadi
Javob
A ā Model 'kuzatuv'dan 'xabar berish'ga o'tadi
4 manba: signal Ā· async pipe Ā· template event Ā· markForCheck. setTimeout ichida oddiy property yozish DOM'ni yangilamaydi. v18 da experimental, v20 da provideZonelessChangeDetection() sifatida stable.
19. Senior ā Signal nega zone.js ni keraksiz qiladi?
- A) Signal o'zini kim o'qiganini biladi ā nuqtaviy yangilaydi
- B) Signal o'zgarishlarni
zone.jsga xabar qilib turadi - C) Signal qiymatlarni keshlab, ortiqcha CD ni kamaytiradi
- D) Signal barcha async operatsiyalarni o'zi patch qiladi
Javob
A ā Signal o'zini kim o'qiganini biladi ā nuqtaviy yangilaydi
Signal iste'molchilar ro'yxatini yuritadi; zone.js esa 'nimadir bo'ldi, hammasini tekshir' deydi. Natija: nuqtaviy yangilash, daraxt bo'ylab aylanish yo'q.
20. Middle/Senior ā Angular ilovasini v15 dan v18 ga ko'tarish uchun to'g'ri strategiya?
- A)
ng updatebilan bittadan versiya oshirish (15ā16ā17ā18) - B)
ng update @angular/core@18bilan to'g'ridan-to'g'ri o'tish - C)
package.jsonda versiyalarni qo'lda 18 ga yozish - D) Loyihani v18 da noldan yaratib, kodni ko'chirish
Javob
A ā ng update bilan bittadan versiya oshirish (15ā16ā17ā18)
Har qadamda schematic'lar ishlaydi. Har major versiyaning o'z migration schematic'i bor; sakrab o'tilsa ular ishlamaydi. update.angular.io ā rasmiy qo'llanma.
21. Senior ā Signal-based component (RFC) nima taklif qiladi?
- A) Komponent holatini butunlay signal'lar bilan ifodalash
- B) NgModule'larni signal asosidagi modul bilan almashtirish
- C)
zone.jsni signal kutubxonasi bilan kengaytirish - D) Signal'lar uchun alohida yangi framework yaratish
Javob
A ā Komponent holatini butunlay signal'lar bilan ifodalash
@Input/@Output o'rniga input()/output(), lifecycle o'rniga effect. Hali RFC bosqichida ā input(), output(), model(), viewChild() shu yo'nalishdagi birinchi qadamlar.
B qism ā Yopiq savollar (qisqa javob)
78 savol. Javobni o'z so'zingiz bilan yozing, keyin kalit so'zlar bilan solishtiring.
JavaScript / TypeScript
1. Junior ā JavaScript'da var, let, const ā uchtasining asosiy farqini ayting.
Javob
var ā funksiya scope, hoisting bilan undefined bo'lib ko'tariladi. let/const ā block scope, TDZ da. const reference'ni muzlatadi, obyekt ichini emas.
Kalit so'zlar: funksiya scope Ā· block scope Ā· TDZ Ā· reference
2. Junior ā Closure nima va u qanday memory leak keltirib chiqaradi?
Javob
Closure ā funksiya o'zi yaratilgan lexical scope'ni eslab qolishi. U tashqi o'zgaruvchiga havolani ushlab turadi, shuning uchun GC uni yig'a olmaydi.
Kalit so'zlar: lexical scope Ā· havola Ā· GC Ā· yig'a olmaydi
3. Middle ā JavaScript'da ?? va || operatorlari farqi nimada?
Javob
?? faqat null/undefined da o'ng tomonni oladi. || esa har qanday falsy qiymatda (0, '', false, NaN) ham oladi.
Kalit so'zlar: null Ā· undefined Ā· falsy
4. Middle ā JavaScript event loop'ida microtask va macrotask farqini bir jumlada ayting va har biriga 2 tadan misol keltiring.
Javob
Macrotask ā tashqi dunyodan kelgan YANGI ish (setTimeout, DOM event). Microtask ā boshlangan ishning DUMI (Promise.then, await davomi, queueMicrotask). Microtask navbati to'liq bo'shatiladi, macrotask'dan bittadan olinadi.
Kalit so'zlar: yangi ish Ā· dum Ā· Promise Ā· setTimeout Ā· to'liq bo'shatiladi
5. Middle ā JavaScript'da quyidagi kodning konsolga chiqish tartibini yozing va nega shunday ekanini tushuntiring.
console.log('A');
queueMicrotask(() => console.log('B'));
Promise.resolve().then(() => console.log('C'));
setTimeout(() => console.log('D'), 0);
console.log('E');
Javob
A E B C D. Avval sinxron kod to'liq tugaydi (A, E). Keyin microtask navbati FIFO: queueMicrotask(B) oldin yozilgan, keyin .then(C). Oxirida macrotask: D.
Kalit so'zlar: A E B C D Ā· sinxron Ā· FIFO Ā· microtask
6. Senior ā JavaScript'da quyidagi async funksiya nega ortiqcha sekin va qanday tuzatiladi?
async function f() {
return Promise.resolve(1);
}
Javob
Async funksiya o'z promise'ini thenable bilan resolve qilganda spec 2 qo'shimcha microtask tick sarflaydi. Tuzatish: return 1 yoki return await p (bu yana try/catch da xatoni ushlaydi).
Kalit so'zlar: 2 tick Ā· qo'shimcha Ā· return await
7. Middle ā JavaScript'da funksiya chaqirilganda this qachon yo'qoladi? Bitta qoida bilan ayting.
Javob
Chap tomonda nuqta bormi? c.inc() ā this = c. inc() ā this = undefined (klass tanasi va modul doim strict). Yechim: arrow property yoki .bind(c).
Kalit so'zlar: nuqta Ā· undefined Ā· strict Ā· bind Ā· arrow
8. Middle ā JavaScript'da obyekt xossasini tekshirishda hasOwnProperty() va in operatori farqi nimada?
Javob
hasOwnProperty ā faqat obyektning o'z xossalarini ko'radi. in ā butun prototip zanjirini tekshiradi.
Kalit so'zlar: o'z Ā· prototip zanjiri
9. Middle ā TypeScript'da unknown va any turlari farqini bir jumlada ayting.
Javob
any ā tekshiruvni o'chiradi ('menga ishon'). unknown ā unga hamma narsani berish mumkin, lekin toraytirmaguncha hech narsa qilib bo'lmaydi ('avval isbotla').
Kalit so'zlar: tekshiruv o'chadi Ā· toraytirish Ā· narrowing
10. Senior ā Nega interfeys DI token bo'la olmaydi? Muqobili nima?
Javob
Interfeys ā TypeScript konstruksiyasi, kompilyatsiyadan keyin yo'qoladi. Angular DI runtime'da ishlaydi, unga haqiqiy token kerak. Muqobil: abstract class yoki InjectionToken.
Kalit so'zlar: kompilyatsiya Ā· yo'qoladi Ā· runtime Ā· abstract class Ā· InjectionToken
11. Senior ā TypeScript'ning standart Partial<T> utility type'i ichkarida qanday yozilgan? Har qismini tushuntiring.
Javob
type Partial<T> = { [K in keyof T]?: T[K] }. keyof T ā kalitlar birlashmasi Ā· [K in ...] ā mapped type, har kalit bo'ylab aylanish Ā· ? ā ixtiyoriy qilish Ā· T[K] ā indexed access.
Kalit so'zlar: keyof Ā· mapped Ā· indexed access
12. Senior ā JavaScript'da WeakMap kaliti nega faqat obyekt bo'lishi mumkin?
Javob
Zaif havola faqat GC yig'a oladigan narsaga ma'noli. Primitivning identikligi va umri yo'q ā u hech qachon yig'ilmaydi. Map kalitni kuchli ushlaydi ā leak, WeakMap da obyekt o'lsa yozuv ham o'ladi.
Kalit so'zlar: zaif havola Ā· GC Ā· identiklik Ā· leak
13. Senior ā Brauzerda Web Worker qanday muammoni hal qiladi va uning asosiy cheklovi nima?
Javob
JS bitta oqimda ishlaydi ā og'ir hisob UI ni muzlatadi. Worker uni alohida oqimga chiqaradi. Asosiy cheklov: worker'da DOM yo'q (document, window, localStorage mavjud emas). Ma'lumot nusxalanadi.
Kalit so'zlar: bitta oqim Ā· alohida oqim Ā· DOM yo'q
Algoritmlash
14. Junior/Middle ā O(4n² + 100n + 7) ni soddalashtiring va qoidani ayting.
Javob
O(n²). Doimiy koeffitsientlar va kichik hadlar tashlanadi ā faqat eng tez o'suvchi had qoladi.
Kalit so'zlar: O(n²) · doimiy · eng tez o'suvchi
15. Middle ā Koddan Big O (vaqt murakkabligi) ni o'qishning 4 ta qoidasini ayting.
Javob
ā Tsikllarni sanang ā ichma-ich ko'paytiriladi, yonma-yon qo'shiladi ā” Yashirin tsikllarni toping (includes, indexOf, find, filter) ⢠Yarimlash bormi ā log n ⣠Doimiylarni tashlang.
Kalit so'zlar: ichma-ich Ā· yashirin tsikl Ā· yarimlash Ā· doimiy
16. Middle ā Algoritmning space complexity'sini aniqlash uchun kodga beriladigan nazorat savolini ayting.
Javob
'Men yangi narsa yaratdimmi, u n bilan birga o'sadimi?' Kirish massivi hisoblanmaydi. let sum = 0 ā O(1) Ā· new Set() yoki arr.map() ā O(n) Ā· rekursiya chuqurligi n ā O(n) call stack.
Kalit so'zlar: yangi Ā· n bilan o'sadi Ā· kirish hisoblanmaydi
17. Junior/Middle ā JavaScript massivida qaysi amallar O(1), qaysilari O(n)? Sababini ayting.
Javob
O(1): arr[i], push, pop ā oxirda ishlaydi. O(n): unshift, shift, splice, indexOf ā hamma element suriladi yoki qidiriladi. Oxir arzon, bosh qimmat.
Kalit so'zlar: oxir arzon Ā· bosh qimmat Ā· suriladi
18. Middle ā JavaScript'da nega Set.has() O(1), arr.includes() esa O(n)?
Javob
Set hash ishlatadi ā kalitni to'g'ridan-to'g'ri xotira manziliga aylantiradi, qidiruv yo'q. Massivda esa elementlarni birma-bir taqqoslash kerak.
Kalit so'zlar: hash Ā· manzil Ā· qidiruv yo'q Ā· birma-bir
19. Senior ā Ikkilik qidiruv daraxtida (BST) qaysi traversal saralangan ketma-ketlik beradi va nega?
Javob
In-order (chap ā tugun ā o'ng). BST qoidasi: chapda kichik, o'ngda katta. Chap shoxni to'liq yurib chiqsangiz ā eng kichiklardan boshlaysiz.
Kalit so'zlar: in-order Ā· chap Ā· o'ng Ā· kichik
20. Middle ā JavaScript'ning Array.prototype.sort() metodi haqida 4 ta faktni ayting.
Javob
ā Asl massivni o'zgartiradi ā” O(n log n) (TimSort) ⢠Barqaror (stable, ES2019 dan kafolatlangan) ⣠Sukut bo'yicha elementlarni satrga aylantirib solishtiradi. Va u yangi massiv emas, o'shaning o'zini qaytaradi.
Kalit so'zlar: o'zgartiradi Ā· n log n Ā· barqaror Ā· satr
21. Senior ā Quick Sort algoritmi qachon O(n²) ga tushadi va bunday holatning qanday oldi olinadi?
Javob
Pivot doim eng katta/kichik element bo'lganda ā masalan allaqachon saralangan massivda birinchi element pivot qilinsa. Bo'linish 1 va n-1 bo'lib ketadi. Davo: random pivot yoki median-of-three.
Kalit so'zlar: pivot Ā· saralangan Ā· random
22. Middle/Senior ā Memoization fib ning murakkabligini qanday o'zgartiradi va evaziga nima beriladi?
Javob
O(2āæ) ā O(n) vaqt. Evaziga xotira O(1) dan O(n) ga chiqadi. Savdo: xotirani berib, vaqtni sotib olasiz.
Kalit so'zlar: 2āæ Ā· O(n) Ā· xotira Ā· savdo
23. Senior ā Grafni aylanib chiqishda BFS va DFS ā har biri qaysi ma'lumot tuzilmasiga tayanadi va qaysi masalalar uchun mos?
Javob
BFS ā Queue (FIFO), qavat-qavat, eng qisqa yo'l (og'irliksiz graf). DFS ā Stack yoki rekursiya, shoxni oxirigacha, yo'l bor-yo'qligi / sikl topish / topologik saralash. Ikkalasi O(V+E).
Kalit so'zlar: Queue Ā· Stack Ā· eng qisqa Ā· O(V+E)
24. Middle ā Two Sum masalasini brute-force O(n²) dan O(n) ga tushirish g'oyasi nima?
Javob
'Juftlikni qidirish' o'rniga 'menga nima yetishmayapti' deb so'raysiz: har elementda target - x ni hash map'dan O(1) da tekshirasiz, topilmasa x ni map'ga qo'shasiz.
Kalit so'zlar: target - x Ā· hash map Ā· O(1)
25. Middle/Senior ā Massiv masalasini ko'rganda Hash Map, Two Pointers va Sliding Window naqshlaridan qaysi birini tanlashni ajratib beruvchi savol nima?
Javob
Massiv saralanganmi? Ha ā Two Pointers (O(1) xotira). Yo'q ā Hash Map (O(n) xotira). Masalada 'ketma-ket' yoki 'eng uzun qism' bo'lsa ā Sliding Window.
Kalit so'zlar: saralangan Ā· Two Pointers Ā· Hash Map Ā· ketma-ket
Angular ā Boshlang'ich
26. Junior/Middle ā Angular komponentining lifecycle hook'lari tartibini yozing va nega ngOnChanges ngOnInit dan oldin ekanini tushuntiring.
Javob
constructor ā ngOnChanges ā ngOnInit ā ngDoCheck ā ngAfterContentInit ā ngAfterViewInit ā ngOnDestroy. ngOnInit ga kirganda @Input qiymatlari tayyor bo'lishi kerak ā ularni aynan ngOnChanges o'rnatadi.
Kalit so'zlar: constructor Ā· ngOnChanges Ā· ngOnInit Ā· ngAfterViewInit Ā· Input tayyor
27. Middle ā Angular'da @ViewChild va @ContentChild farqi nimada, va har biri qaysi lifecycle hook'da tayyor bo'ladi?
Javob
@ViewChild ā komponentning o'z template'idagi element, ngAfterViewInit da tayyor. @ContentChild ā <ng-content> orqali parentdan kelgan element, ngAfterContentInit da tayyor (u oldinroq).
Kalit so'zlar: o'z template Ā· parent Ā· ngAfterViewInit Ā· ngAfterContentInit
28. Middle ā Angular template'da ng-template, ng-container, ng-content ā har biriga bir jumla.
Javob
ng-template ā chizilmagan shablon, kimdir chaqirmaguncha DOM'da yo'q. ng-container ā DOM element qo'shmasdan guruhlash. ng-content ā parent bergan kontentni shu joyga proyeksiya qilish.
Kalit so'zlar: chizilmaydi Ā· guruhlash Ā· proyeksiya
29. Middle ā Angular'da ChangeDetectionStrategy.OnPush qo'yilgan komponentni 'iflos' qilib, qayta tekshirishga majbur qiladigan 4 ta narsani sanang.
Javob
ā Yangi @Input reference ā” Template'dagi event ((click)) ⢠async pipe yangi qiymat ⣠cdr.markForCheck(). Bu ro'yxatda yo'q narsa ā ekran yangilanmaydi.
Kalit so'zlar: reference Ā· event Ā· async pipe Ā· markForCheck
30. Middle/Senior ā markForCheck() nega faqat o'z komponentini emas, ildizgacha butun yo'lni belgilaydi?
Javob
CD daraxt bo'ylab yuqoridan pastga yuradi. Oradagi toza OnPush ota-ona butun shoxni kesib o'tadi va komponentgacha yetib bormaydi ā shuning uchun yo'lni ochib chiqish kerak.
Kalit so'zlar: yuqoridan pastga Ā· kesib o'tadi Ā· yo'l
31. Senior ā Zoneless rejimda Angular DOM'ni qachon yangilashni qayerdan biladi?
Javob
Model 'kuzatuv'dan **'xabar berish'**ga o'tadi. To'rt manba: ā signal o'zgarishi ā” async pipe ⢠template'dagi event binding ⣠markForCheck(). setTimeout ichida oddiy property yozish hech kimga xabar bermaydi.
Kalit so'zlar: xabar berish Ā· signal Ā· async pipe Ā· event Ā· markForCheck
32. Middle ā Angular'da ExpressionChangedAfterItHasBeenCheckedError nega chiqadi va uning 3 ta yechimi qanday?
Javob
Dev rejimda CD ikki marta tekshiradi; ngAfterViewInit da property o'zgartirilgan. Yechim: setTimeout Ā· Promise.resolve().then() Ā· cdr.detectChanges(). Prod'da bu xato chiqmaydi ā DOM eski qiymatda qotadi.
Kalit so'zlar: ikki marta Ā· ngAfterViewInit Ā· setTimeout Ā· detectChanges Ā· prod'da chiqmaydi
Angular ā Service va DI
33. Middle ā Angular'da inject() funksiyasi qayerda ishlaydi, qayerda yo'q? Chegarani bir jumlada ayting.
Javob
Faqat injection contextda: field initializer, constructor, useFactory, funksional guard/interceptor. ngOnInit va oddiy metodlarda ishlamaydi ā NG0203. Chegara: inject() = DI qurilish payti, lifecycle = undan keyin.
Kalit so'zlar: injection context Ā· constructor Ā· NG0203 Ā· lifecycle
34. Middle ā Komponentda providers: [X] yozilsa nima bo'ladi? providedIn: 'root' bilan qanday bog'lanadi?
Javob
Har komponent instansiyasi o'z injector'ini oladi ā 3 ta komponent = 3 ta service. providedIn: 'root' ā qat'iy qonun emas, standart qiymat; komponent uni bekor qiladi. Klassik bug: providers: [AuthService].
Kalit so'zlar: har instansiya Ā· standart qiymat Ā· bekor qiladi
35. Senior ā Angular DI'da @SkipSelf() va @Optional() dekoratorlari birga nima uchun ishlatiladi?
Javob
@SkipSelf ā 'o'zimni o'tkazib yubor, yuqoridan qidir'. @Optional ā 'topilmasa null qaytar'. Birgalikda 'menda tashqari yana biri bormi?' savolini beradi ā CoreModule ikki marta import qilinishini aniqlaydi.
Kalit so'zlar: yuqoridan Ā· null qaytar Ā· ikki marta import
36. Senior ā Angular DI'da provider obyektida beriladigan to'rt xil provider turini nomlab, har birining vazifasini ayting.
Javob
useClass ā boshqa klass bilan almashtirish (mock/platform) Ā· useValue ā tayyor qiymat (config) Ā· useFactory ā shart asosida hisoblab yaratish (deps bilan) Ā· useExisting ā mavjud provider'ga taxallus (alias).
Kalit so'zlar: useClass Ā· useValue Ā· useFactory Ā· useExisting Ā· alias
37. Middle ā Angular HTTP interceptor'ida so'rovni o'zgartirish uchun nega req.clone() kerak?
Javob
HttpRequest immutable. Retry yoki bir nechta interceptor bir so'rovni qayta ishlashi mumkin ā mutatsiya qilinsa header ikki marta qo'shilib ketadi. Bu OnPush dagi 'mutatsiya emas, almashtirish' qoidasining o'zi.
Kalit so'zlar: immutable Ā· retry Ā· ikki marta
38. Senior ā Angular'da HTTP so'rovni retry qilishda qaysi xatolarda qayta urinmaslik kerak va nega backoff ishlatiladi?
Javob
4xx (401, 403, 404) ā mijoz xatosi, qayta urinish yordam bermaydi. Faqat 5xx va tarmoq xatolarida. Backoff kerak, chunki darhol 3 marta urinish yuklangan serverga qo'shimcha yuk beradi: retry({count: 3, delay: (e,i) => timer(i*1000)}).
Kalit so'zlar: 4xx Ā· 5xx Ā· backoff Ā· yuk
Angular ā Directive
39. Middle ā Angular direktivasida DOM'ni o'zgartirishda @HostBinding va Renderer2 o'rtasidagi chegarani ayting ā qaysi biri qachon?
Javob
Savol 'deklarativmi?' emas ā avvalo 'qaysi element?'. @HostBinding ā host element, deklarativ, CD o'zi qo'llaydi. Renderer2 ā boshqa har qanday element (siz yaratganlar), imperativ.
Kalit so'zlar: qaysi element Ā· host Ā· deklarativ Ā· imperativ
40. Middle ā Angular direktivasida DOM'ga tegishda nega Renderer2 elementRef.nativeElement dan afzal?
Javob
Platformadan mustaqil ā SSR va Web Workerda ishlaydi (u yerda document yo'q). Va createText bilan XSS himoyasi beradi ā innerHTML sanitizatsiyani chetlab o'tadi.
Kalit so'zlar: SSR Ā· Web Worker Ā· XSS Ā· document yo'q
41. Middle/Senior ā Angular'da strukturaviy direktiva konstruktoriga nima inject qilinadi va nega ElementRef emas?
Javob
TemplateRef (nima chiziladi) va ViewContainerRef (qayerga chiziladi). ElementRef foydasiz ā direktiva <ng-template> da turadi, u DOM'da element emas, <!--container--> izohi.
Kalit so'zlar: TemplateRef Ā· ViewContainerRef Ā· ng-template Ā· izoh
42. Middle/Senior ā Angular'da strukturaviy direktiva yozganda view yaratishdan oldin qo'yiladigan hasView flagi nima uchun kerak?
Javob
@Input setter har CD siklida chaqirilishi mumkin. Flagsiz bir xil view qayta-qayta yaratiladi ā dublikat. Umumiy naqsh: DOM'ga element qo'shadigan har joyda 'allaqachon bormi?' tekshiruvi + ngOnDestroy tozalash.
Kalit so'zlar: setter Ā· har CD Ā· dublikat Ā· allaqachon bormi
43. Senior ā Angular template'da <div *ngIf="show"> yozilganda kompilyator uni nimaga aylantiradi? Shundan strukturaviy direktivalarga qanday cheklov kelib chiqadi?
Javob
<ng-template> ga. <div *ngIf="x"> ā <ng-template [ngIf]="x"><div></div></ng-template>. Shundan: bir elementda ikkita strukturaviy direktiva bo'lmaydi ā yechim ng-container.
Kalit so'zlar: ng-template Ā· ikkita Ā· ng-container
Angular ā RxJS
44. Junior ā Observable va Promise farqini 4 nuqtada ayting.
Javob
ā Promise 1 qiymat, Observable ko'p ā” Promise eager, Observable lazy ⢠Promise bekor qilinmaydi, Observable unsubscribe bilan bo'ladi ⣠Promise har doim asinxron, Observable sinxron ham bo'la oladi (of).
Kalit so'zlar: 1 qiymat Ā· lazy Ā· unsubscribe Ā· har doim asinxron
45. Middle ā Cold va Hot observable farqi? Metafora bilan.
Javob
Cold ā har subscriber o'z ijrosini oladi (Netflix: har kishi boshidan ko'radi): of, interval, HttpClient. Hot ā hamma bitta ijroni ulashadi (jonli efir): Subject, fromEvent, share() dan keyingi hamma narsa.
Kalit so'zlar: o'z ijrosi Ā· ulashadi Ā· Netflix Ā· jonli efir
46. Middle ā RxJS oqim (stream) modelini bir jumlada ayting ā qiymatlar quvurdan qanday o'tadi?
Javob
Har qiymat quvurni yolg'iz o'zi oxirigacha o'tadi, keyin keyingisi kiradi. Operatorlar massiv metodlari emas ā shuning uchun cheksiz oqim bilan ham ishlaydi.
Kalit so'zlar: har qiymat Ā· yolg'iz Ā· oxirigacha Ā· massiv emas
47. Junior/Middle ā RxJS'da debounceTime va throttleTime operatorlari farqi nimada va har biriga misol keltiring.
Javob
debounce = sabr ('tugadimi?') ā qidiruv maydoni. throttle = ritm ('vaqt keldimi?') ā scroll, resize, mousemove. Uzluksiz scroll paytida jimlik yo'q, shuning uchun debounce hech narsa chiqarmaydi.
Kalit so'zlar: sabr Ā· ritm Ā· qidiruv Ā· scroll
48. Middle ā RxJS'da to'rt higher-order map operatorini bir-biridan ajratib beruvchi savol nima? Har biriga holat keltiring.
Javob
Oldingisi tugamagan bo'lsa nima qilamiz? switchMap ā bekor qil (qidiruv) Ā· mergeMap ā parallel (fayl yuklash) Ā· concatMap ā navbatga qo'y (chat) Ā· exhaustMap ā rad et (login, ikki marta bosish).
Kalit so'zlar: bekor Ā· parallel Ā· navbat Ā· rad et
49. Middle ā RxJS'da nega YOZISH (POST/PUT/DELETE) so'rovi uchun switchMap ishlatilmaydi?
Javob
switchMap = bekor qilish. Ikkinchi bosish birinchi saqlashni yarim yo'lda uzadi ā server ma'lumotni qisman yozgan bo'lishi mumkin. O'rniga exhaustMap (ikki marta bosishdan himoya) yoki concatMap (hammasi, tartib bilan).
Kalit so'zlar: bekor Ā· yarim yo'lda Ā· exhaustMap Ā· concatMap
50. Middle ā RxJS'da forkJoin va combineLatest farqi nimada?
Javob
forkJoin ā hammasi complete bo'lganda bir marta chiqaradi (parallel HTTP uchun). combineLatest ā istalgan biri yangi qiymat berganda har safar chiqaradi. forkJoin da bittasi complete bo'lmasa natija hech qachon kelmaydi.
Kalit so'zlar: complete Ā· istalgan biri Ā· parallel HTTP
51. Middle ā RxJS'da BehaviorSubject va ReplaySubject(1) ā 3 ta farqni ayting.
Javob
ā BehaviorSubject da boshlang'ich qiymat majburiy, ReplaySubject da yo'q ā” Hali next() bo'lmagan bo'lsa BehaviorSubject boshlang'ichni beradi, ReplaySubject hech narsa ⢠.value faqat BehaviorSubject da ⣠complete() dan keyin ReplaySubject oxirgi qiymatni beradi, BehaviorSubject yo'q.
Kalit so'zlar: boshlang'ich majburiy Ā· .value Ā· complete
52. Middle ā RxJS quvurida catchError qayerda turishi kerak va nega? Bir jumlalik qoida ayting.
Javob
Ichki oqim ichida ā switchMap(x => api.get(x).pipe(catchError(...))). catchError qaysi darajada tursa, o'sha daraja o'ladi. Tashqarida bo'lsa bitta xato butun oqimni o'ldiradi va keyingi qiymatlar ishlanmaydi.
Kalit so'zlar: ichki Ā· daraja Ā· o'ladi Ā· butun oqim
53. Middle ā RxJS'da qaysi oqimlar memory leak beradi, qaysilari yo'q? Qoidani ayting.
Javob
Qoida: oqim o'zi tugaydimi? Tugasa leak yo'q ā http.get() (complete bo'ladi), take(n), first(). Tugamasa tozalash shart ā interval, timer, fromEvent, service'dagi Subject.
Kalit so'zlar: o'zi tugaydimi Ā· complete Ā· interval Ā· fromEvent
54. Middle/Senior ā RxJS'da shareReplay(1) nima qiladi va uning xavfi nima?
Javob
Cold'ni hot'ga aylantiradi: bitta manba ijrosi + oxirgi qiymat kech subscriber'ga. Xavf: default refCount: false ā hamma subscriber ketsa ham ichki subscription tirik qoladi. Cheksiz oqim uchun shareReplay({bufferSize: 1, refCount: true}).
Kalit so'zlar: cold hot Ā· refCount Ā· tirik qoladi
55. Junior/Middle ā async pipe unsubscribe'ni qayerda qiladi va yana nima qiladi?
Javob
AsyncPipe ning o'z ngOnDestroy ida ā pipe'larda ham lifecycle hook bo'ladi. Va har next da markForCheck() chaqiradi ā shuning uchun OnPush bilan ishlaydi.
Kalit so'zlar: ngOnDestroy Ā· pipe lifecycle Ā· markForCheck
Angular ā Pipe
56. Middle ā Angular'da pure va impure pipe farqi nimada va impure pipe'ning xavfi nima?
Javob
Pure ā input yoki argumentlardan biri reference bo'yicha o'zgarganda ishlaydi, natija keshlanadi. Impure (pure: false) ā har CD siklida ishlaydi. Xavf: 5000 qatorli jadvalda 5000 chaqiruv/sikl.
Kalit so'zlar: reference Ā· keshlanadi Ā· har CD Ā· 5000
57. Middle ā Angular template'da nega arr.push() dan keyin pure pipe qayta ishlamaydi?
Javob
Pure pipe reference'ni === bilan solishtiradi. push massiv ichini o'zgartiradi, lekin reference o'sha-o'sha. To'g'ri yo'l: this.items = [...this.items, x].
Kalit so'zlar: reference Ā· === Ā· spread
58. Middle ā Angular'ning keyvalue pipe'i obyekt kalitlarini qanday tartibda chiqaradi va asl tartibni qanday saqlash mumkin?
Javob
Kalitlarni alifbo bo'yicha saralaydi. Tartibni saqlash uchun: keyvalue: keepOrder bilan keepOrder = () => 0. Uni class property qilib yozing ā template'da inline yozilsa har CD'da yangi funksiya yaratiladi va kesh buziladi.
Kalit so'zlar: alifbo Ā· keepOrder Ā· class property
59. Senior ā Angular komponentida qimmat hisob uchun getter, pure pipe va computed() ā qaysi biri qachon?
Javob
Getter ā hech qachon: har CD siklida chaqiriladi, kesh yo'q. Pure pipe ā template'da qayta ishlatiladigan umumiy transformatsiya. computed() ā komponentga xos hisob, signal ustida, avtomatik keshlanadi.
Kalit so'zlar: getter hech qachon Ā· pure pipe umumiy Ā· computed
Angular ā Forms
60. Middle ā Angular Reactive Forms'da control'ning touched va dirty bayroqlari farqi nimada? Foydalanuvchi maydonga kirdi-chiqdi, lekin yozmadi ā holat qanday bo'ladi?
Javob
Ikki mustaqil o'q: touched = blur bo'ldimi Ā· dirty = qiymat o'zgardimi. Kirdi-chiqdi-yozmadi ā touched: true, dirty: false. Bayroqlar yopishqoq ā bir marta true bo'lsa qaytmaydi (faqat reset() tozalaydi).
Kalit so'zlar: blur Ā· qiymat Ā· yopishqoq Ā· reset
61. Middle ā Angular Reactive Forms'da disabled control form.value ga tushadimi? To'liq qiymatni qanday olasiz?
Javob
Tushmaydi ā va u validatsiyadan ham chiqadi (required bo'lsa ham forma valid). To'liq qiymat: form.getRawValue(). Maydon ko'rinsin-u tahrirlanmasin va yuborilsin desangiz ā disabled emas, HTML readonly atributi.
Kalit so'zlar: tushmaydi Ā· validatsiyadan chiqadi Ā· getRawValue Ā· readonly
62. Middle/Senior ā Angular Reactive Forms'da cross-field validator (masalan parol tasdig'i) qayerga qo'yiladi va nega? Xato qayerda paydo bo'ladi?
Javob
FormGroup darajasiga: fb.group({...}, { validators: fn }). Control'ga qo'yilsa faqat o'z qiymati o'zgarganda ishlaydi ā password o'zgarganda qayta ishlamaydi. Xato guruhda: form.hasError('mismatch'), control'da emas.
Kalit so'zlar: FormGroup Ā· validators Ā· hasError Ā· qayta ishlamaydi
63. Senior ā Angular'da custom form control ([(ngModel)]/formControlName bilan ishlaydigan komponent) yozish uchun nima kerak? Metodlarini sanang.
Javob
ControlValueAccessor interfeysi + NG_VALUE_ACCESSOR multi provider. To'rt metod: writeValue (tashqaridan qiymat) Ā· registerOnChange (o'zgarishni xabar qilish) Ā· registerOnTouched Ā· setDisabledState.
Kalit so'zlar: ControlValueAccessor Ā· NG_VALUE_ACCESSOR Ā· writeValue Ā· registerOnChange
Angular ā NgModule
64. Junior ā Angular @NgModule dekoratorida declarations, imports, exports, providers ā har biriga bir jumla.
Javob
declarations ā 'menda yashaydi' (component/directive/pipe) Ā· imports ā 'boshqadan olaman' (faqat modullar) Ā· exports ā 'boshqalarga beraman' Ā· providers ā service'lar. ā ļø Standalone'da imports ga komponent ham tushadi.
Kalit so'zlar: menda yashaydi Ā· faqat modullar Ā· boshqalarga beraman Ā· standalone
65. Middle ā RouterModule.forRoot() va forChild() farqi va forRoot ikki marta chaqirilsa nima bo'ladi?
Javob
forRoot Router provider'larini ham ro'yxatdan o'tkazadi, forChild faqat route'larni qo'shadi. Ikki marta chaqirilsa ikkita Router instansiyasi paydo bo'ladi va navigatsiya buziladi.
Kalit so'zlar: provider Ā· route Ā· ikkita Router
66. Middle ā Lazy modulning providers idagi service root'dagi bilan bir xilmi?
Javob
Yo'q ā lazy modul o'z child injectorini yaratadi, alohida instansiya bo'ladi. Bu providedIn: 'any' bilan bir xil samara. Singleton kerak bo'lsa providedIn: 'root'.
Kalit so'zlar: child injector Ā· alohida Ā· providedIn root
67. Middle ā Angular standalone ilovada importProvidersFrom nima uchun kerak va nega u vaqtinchalik yechim hisoblanadi?
Javob
Eski NgModule provider'larini standalone dunyoga olib o'tuvchi ko'prik. Vaqtinchalik, chunki u modulning butun provider to'plamini tortadi ā tree-shaking yomonlashadi. Imkon bo'lsa provideX() funksiyalari afzal.
Kalit so'zlar: ko'prik Ā· butun to'plam Ā· tree-shaking Ā· provideX
Angular ā Sintaksis va Clean Code
68. Middle ā Angular 17+ dagi @if/@for blokining eski *ngIf/*ngFor direktivalaridan asosiy texnik farqi nimada?
Javob
Yangilari ng-template ga aylanmaydi ā kompilyator to'g'ridan-to'g'ri kodga o'giradi. Natijada tezroq, bundle kichikroq va CommonModule import qilish kerak emas (ular direktiva emas, til konstruksiyasi).
Kalit so'zlar: ng-template ga aylanmaydi Ā· kompilyator Ā· CommonModule
69. Middle/Senior ā Angular'ning @defer blokidagi triggerlarni sanang. Ro'yxatda ko'p adashiladigan qaysi trigger aslida mavjud emas?
Javob
on idle (default) Ā· on viewport Ā· on interaction Ā· on hover Ā· on immediate Ā· on timer(500ms) Ā· when shart. on scroll mavjud emas ā uni on viewport qoplaydi (IntersectionObserver bilan).
Kalit so'zlar: idle Ā· viewport Ā· interaction Ā· hover Ā· timer Ā· on scroll yo'q
70. Middle ā Nega OnPush va async pipe juftlik hisoblanadi?
Javob
async pipe har emisiyada markForCheck() chaqiradi ā u OnPush ning 4 triggeridan biri. OnPush = 'meni keraksiz tekshirma', async pipe = 'kerak bo'lganda men aytaman'. Yolg'iz OnPush + qo'lda subscribe = buzuq ekran.
Kalit so'zlar: markForCheck Ā· trigger Ā· buzuq ekran
71. Middle ā Angular @for blokida track bo'lmasa nima bo'ladi va track $index qachon xavfli?
Javob
tracksiz Angular barcha DOM elementni yo'q qilib qayta yaratadi ā fokus, scroll, animatsiya yo'qoladi. track $index xavfli: ro'yxat o'rtasiga element qo'shilsa indekslar suriladi va noto'g'ri DOM qayta ishlatiladi (input qiymatlari aralashadi).
Kalit so'zlar: qayta yaratadi Ā· fokus Ā· indeks suriladi Ā· aralashadi
72. Senior ā Open/Closed prinsipini Angular'da amalga oshirishning 3 vositasini ayting.
Javob
ā <ng-content> ā content projection ā” hostDirectives ā kompozitsiya bilan xatti-harakat qo'shish ⢠InjectionToken/abstract class bilan strategiya almashtirish. Mavjud klassni tahrirlamasdan kengaytirish.
Kalit so'zlar: ng-content Ā· hostDirectives Ā· InjectionToken Ā· strategiya
73. Middle/Senior ā Angular loyihasida barrel export (index.ts) ning ikkita zarari nima?
Javob
ā Tree-shaking buziladi ā bitta narsa import qilinsa butun barrel yuklanadi ā” Circular dependency xavfi (A ā index ā B ā index ā A), xato xabari chalg'ituvchi bo'ladi. Barrel kutubxona chegarasida o'rinli, ilova ichida ā yo'q.
Kalit so'zlar: tree-shaking Ā· circular dependency
Angular ā Versiyalar
74. Middle ā Angular signal'lari bilan ishlaganda computed() va effect() ā qachon qaysi biri? Oltin qoidani ayting.
Javob
Signaldan signal chiqaryapsizmi ā computed(). Angular'dan tashqariga chiqyapsizmi ā effect(). effect ichida .set() yozish taqiqlangan ā NG0600. effect uchun to'g'ri ishlar: localStorage, log, analitika, 3-tomon kutubxona.
Kalit so'zlar: computed Ā· effect Ā· NG0600 Ā· localStorage
75. Middle/Senior ā Angular'ning signal asosidagi input(), output(), model() funksiyalari farqi nimada?
Javob
input() ā faqat o'qish uchun signal (user()) Ā· output() ā hodisa chiqarish (EventEmitter o'rniga) Ā· model() ā ikki tomonlama bog'lanish ([(value)]). input.required<T>() ā majburiy input.
Kalit so'zlar: faqat o'qish Ā· hodisa Ā· ikki tomonlama
76. Senior ā Signal nega zone.js ni keraksiz qiladi?
Javob
zone.js: 'nimadir bo'ldi, nima o'zgarganini bilmayman ā hammasini tekshir'. Signal: 'men o'zgardim, meni kim o'qiganini aniq bilaman ā faqat o'shalarni yangila'. Signal iste'molchilar ro'yxatini yuritadi ā nuqtaviy yangilash.
Kalit so'zlar: nima o'zgardi Ā· kim o'qigan Ā· iste'molchilar Ā· nuqtaviy
77. Middle ā 'Deprecated' nimani anglatadi? Klass guard'lar misolida tushuntiring.
Javob
'Ishlamaydi' EMAS. Angular deprecated narsani odatda ~2 major versiya ushlab turadi. Klass CanActivate v15.1 dan deprecated, lekin hali ishlaydi. Funksional guard afzal ā inject() to'g'ridan-to'g'ri ishlaydi, kompozitsiya va test oson.
Kalit so'zlar: ishlamaydi emas Ā· 2 major Ā· funksional afzal
78. Middle/Senior ā Angular ilovasini v15 dan v18 ga ko'tarish strategiyasi qanday?
Javob
ng update bilan bittadan versiya oshirish: 15ā16ā17ā18. Har major versiyaning o'z migration schematic'i bor ā sakrab o'tilsa ular ishlamaydi. Rasmiy qo'llanma: update.angular.io.
Kalit so'zlar: ng update Ā· bittadan Ā· schematic
