Sparround

Sürətli texniki suallar (rapid-fire)

Bir çox interview "rapid-fire" mərhələsi ilə başlayır: 10-15 qısa sual, ardıcıl, hər birinə 20-40 saniyə. Məqsəd dərin bilik yoxlamaq deyil — əsasların oturuşub-oturuşmadığını və sənin özünü rahat hiss edib-etmədiyini görməkdir.

Necə cavab vermək lazımdır:

  • Qısa və birbaşa — 2-3 cümlə. Uzun cavab burada mənfi siqnaldır: sualın sadə olduğunu görmədiyini göstərir
  • Sonra dərinlik təklif et: "...istəsəniz, detallara girə bilərəm" — intervyuer maraqlanırsa, özü soruşacaq
  • Nümunə əlavə et (bir cümlə ilə) — konkret nümunə cavabı əzbərdən fərqləndirir
  • Bilmirsənsə — "Bunu dəqiq bilmirəm, amma güman edirəm ki..." və ya sadəcə "Bilmirəm, öyrənərəm." Uydurmaq ən pis variantdır: intervyuer bunu demək olar ki, həmişə hiss edir və ondan sonra bütün cavablarına şübhə ilə yanaşır

Ritm məsələsi: 15 sualdan 2-3-nə "bilmirəm" demək tamamilə normaldır. 15-in 15-nə cavab vermək gözlənilmir; təmkinli və dürüst davranmaq gözlənilir.

SualModel cavab (20-30 saniyə)
Playwright-da auto-waiting nədir?Hər action-dan əvvəl Playwright elementin actionable olmasını gözləyir: görünür, aktiv, stabil, hadisə qəbul edir. Ona görə `sleep` yazmağa ehtiyac yoxdur.
`locator` ilə `ElementHandle` fərqi?Locator lazy-dir — hər istifadədə elementi yenidən tapır, ona görə DOM yenilənəndə sınmır. ElementHandle konkret DOM elementinə bağlanır və köhnəlir (stale olur); müasir kodda istifadə olunmur.
`toBeVisible()` ilə `isVisible()` fərqi?`expect(...).toBeVisible()` web-first assertion-dır — şərt ödənənə qədər gözləyir. `isVisible()` isə həmin anın boolean cavabını qaytarır, gözləmir — testdə şərt kimi istifadə etmək flakiness mənbəyidir.
Strict mode nədir?Locator birdən çox elementə uyğun gələndə Playwright xəta atır — səssiz səhv seçimin qarşısını alır. Həlli: locator-u dəqiqləşdirmək, `filter()`, və ya niyyət varsa `first()`/`nth()`.
`page` və `context` fərqi?`context` izolyasiya olunmuş brauzer profilidir — öz cookie-ləri və storage-ı var; `page` onun içindəki bir tab-dır. İki fərqli istifadəçi üçün iki context lazımdır, iki tab yox.
storageState nə üçündür?Login-i bir dəfə setup-da edib cookie/localStorage-ı fayla yazır; bütün testlər həmin state ilə başlayır. Hər testdə 5-10 saniyə qənaət edir.
Fixture teardown harada yazılır?`await use(...)` sətrindən sonrakı kodda. Test fail olsa belə icra olunur — buna görə cleanup üçün ən etibarlı yerdir.
Sharding nədir?Suite-i bir neçə maşına bölmək: `--shard=1/4`. 4 maşın ümumi müddəti təxminən 4 dəfə azaldır. Şərt: testlər tam müstəqil olmalıdır.
iframe içindəki elementə necə çatırsan?`page.frameLocator('iframe[title="..."]')` ilə frame kontekstinə keçirəm; içəridə adi locator-lar işləyir. Adi locator frame sərhədini keçmir.
Yeni tab açılırsa nə edirsən?Klikdən ƏVVƏL `context.waitForEvent('page')` ilə gözləməni qururam, sonra klik edirəm və `await` ilə yeni `page` obyektini alıram.
Fayl yükləməsini necə test edirsən?`setInputFiles('path/to/file')` — OS dialoqu açılmır. Gizli input-lu custom düymə varsa, `page.waitForEvent('filechooser')` ilə tuturam.
API-ni Playwright-da necə çağırırsan?`request` fixture-i ilə: `await request.post('/api/orders', { data })`. Test datasını hazırlamaq üçün UI əvəzinə bunu istifadə edirəm — sürətli və stabildir.
SualModel cavab
`==` ilə `===` fərqi?`===` tip çevirməsi etmir; `==` edir (`'1' == 1` → true). Testlərdə həmişə `===`.
Promise nədir, `async/await` nə edir?Promise gələcəkdə tamamlanacaq əməliyyatın nəticəsidir. `await` onun həllini gözləyir və kodu ardıcıl oxunan formada saxlayır. Playwright API-si bütünlüklə async-dır — `await` unutmaq testi səssizcə yalan yaşıl edir.
`let`, `const`, `var` fərqi?`const` və `let` block scope-ludur; `var` function scope-lu və hoisting-lidir — istifadə etmirəm. Default `const`, dəyər dəyişəcəksə `let`.
TypeScript-in test kodunda faydası nədir?Səhvlərin işə salmadan tapılması, IDE avtotamamlaması (Playwright API-si üçün böyük fərq), fixture və test datası üçün tiplər. Həm də `no-floating-promises` kimi typed lint qaydalarını mümkün edir.
Flaky test nədir?Kod dəyişmədən gah keçən, gah sınan test. Tipik səbəblər: yarış vəziyyətləri, sabit sleep-lər, paylaşılan data. Ən böyük zərəri suite-ə inamı öldürməsidir.
Smoke ilə regression fərqi?Smoke — ən kritik axınların sürətli yoxlanması (build ümumiyyətlə işləkdirmi?), hər PR-da. Regression — geniş əhatə, mövcud funksionallığın sınmadığını təsdiqləyir, adətən nightly.
Test piramidası nədir?Çoxlu sürətli unit, orta qədər integration/API, az sayda E2E UI. Prinsip: yoxlamanı mümkün olan ən aşağı səviyyədə et.
Git-də `merge` ilə `rebase` fərqi?`merge` tarixçəni saxlayır və birləşdirmə commit-i yaradır; `rebase` commit-ləri yenidən yazaraq xətti tarixçə verir. Paylaşılan branch-ı rebase etmək təhlükəlidir.

Ən vacib məsləhət: uydurma. "Bilmirəm" cavabı bir sualı itirir; uydurulmuş cavab isə bütün müsahibəyə şübhə salır, çünki intervyuer artıq hər cavabını yoxlamağa başlayır. Ən güclü variant: "Bunu istifadə etməmişəm, amma prinsipi belə təsəvvür edirəm... — düzdürmü?" Bu, həm dürüstlük, həm düşünmə qabiliyyəti, həm də öyrənməyə açıqlıq göstərir.