Live coding prosesi
Live coding-də qiymətləndirilən şey düzgün cavab deyil, prosesdir. İntervyuer sənin gündəlik iş tərzini 40 dəqiqəlik nümunədə görmək istəyir: tələbləri necə aydınlaşdırırsan, riski necə qiymətləndirirsən, səhvi necə tapırsan, geri əlaqəni necə qəbul edirsən.
Təkrarlana bilən yeddi addımlı proses:
- 1. Məsələni aydınlaşdır — giriş formatı, ölçü hədləri, təkrarlar mümkündürmü, boş giriş gələ bilərmi, nə qaytarmalıyam (dəyər, indeks, yoxsa boolean)
- 2. Nümunə və edge case-ləri söylə — bir normal nümunə üzərində gözlənilən cavabı ucadan de, sonra sərhəd hallarını sadala. Bu addım gözlənilməz dərəcədə yüksək qiymətləndirilir
- 3. Brute force-u və mürəkkəbliyini de — "Ən sadə həll iki iç-içə döngə,
O(n²). Bu, başlanğıc nöqtəm." Bu, səni hər zaman işlək bir plana bağlayır - 4. Optimallaşdırmanı və NİYƏSİNİ təklif et — "Burada təkrarlanan əməliyyat axtarışdır; hash map onu
O(1)edir, ümumiO(n)." Səbəb olmadan deyilən optimallaşdırma yarım baldır - 5. Danışa-danışa kod yaz — nə yazdığını qısa şərh et: "indi
leftpointerini elan edirəm, pəncərənin sol sərhədi olacaq" - 6. Nümunə üzərində dry-run et — kodu yazdıqdan sonra kiçik bir girişlə əl ilə keç. Səhvi intervyuerdən əvvəl özün tapmaq güclü siqnaldır
- 7. Mürəkkəbliyi və güzəştləri müzakirə et — vaxt, yaddaş, alternativ həll, hansı halda nə dəyişərdi
| Addım | Təxmini vaxt (45 dəq. sessiya) | Nə qiymətləndirilir |
|---|---|---|
| Aydınlaşdırıcı suallar | 2-4 dəqiqə | Tələbləri yoxlamadan koda başlamamaq — real işdəki ən vacib vərdiş |
| Nümunələr və edge case-lər | 2-3 dəqiqə | Test təfəkkürü; sərhəd hallarını əvvəlcədən görmək |
| Brute force + mürəkkəblik | 2-3 dəqiqə | Həmişə işlək bir planın olması; mürəkkəbliyi düzgün adlandırmaq |
| Optimallaşdırma və əsaslandırma | 3-5 dəqiqə | Pattern tanıma; "niyə" sualına cavab |
| Kod yazmaq (danışa-danışa) | 15-20 dəqiqə | Kod təmizliyi, adlandırma, düşüncənin izlənə bilməsi |
| Dry-run | 3-5 dəqiqə | Öz səhvini özün tapmaq — ən güclü siqnallardan biri |
| Mürəkkəblik və güzəştlər | 3-5 dəqiqə | Mühəndis yetkinliyi: bir həll deyil, seçim |
İlişəndə nə etməli. Bu, hər namizədin başına gəlir və intervyuerlər buna hazırdır — qiymətləndirilən ilişməyin özü yox, ondan çıxma üsuludur.
Dörd taktika:
- Fikrini ucadan de — "İki yanaşma arasında qalmışam: sıralayıb two pointers, yoxsa hash map. Hash map
O(n)verir, amma indeksləri saxlamalıyam..." Bu, intervyuerə səni istiqamətləndirmək imkanı verir - Kiçildərək başla — konkret kiçik nümunə götür (
n = 3) və əl ilə həll et. Ümumi qayda çox vaxt konkret nümunədən çıxır - Məsələni sadələşdir — "Əvvəlcə bütün ədədlərin müsbət olduğunu fərz edim, sonra mənfini əlavə edərəm." Sadələşdirilmiş halı həll etmək tam ilişməkdən qat-qat yaxşıdır
- Brute force-a qayıt — vaxt azalırsa, işləyən
O(n²)həll yaz. İşləyən sadə həll, yarımçıq qalmış ağıllı həlldən yaxşıdır — bu, live coding-in ən vacib qaydasıdır və çox namizəd onu pozur
İpucunu necə qəbul etməli. İntervyuer ipucu verirsə, bu, uğursuzluq əlaməti deyil — o, səni irəli aparmaq istəyir, çünki sənin sonrakı davranışını görmək daha maraqlıdır. Düzgün reaksiya: dayan, dinlə, təşəkkür et, nəyi dəyişdiyini ucadan de. "Yaxşı, deməli sıralanmanı istifadə etməliyəm — onda iki pointer əks uclardan gedə bilər, çünki..." İpucunu eşitməzdən gəlmək və öz yolunda israr etmək ən pis reaksiyadır: bu, komandada geri əlaqəni qəbul etməyən adam siqnalıdır.
Susmaq ən pis uğursuzluq formasıdır. İntervyuer sənin başındakıları görmür — 60 saniyəlik səssizlik onun üçün "heç nə bilmir" kimi görünür, hətta sən əslində düzgün istiqamətdə düşünsən belə. Düşünmək üçün vaxt lazımdırsa, bunu elan et: "Bir dəqiqə fikirləşim, sonra yanaşmamı deyəcəyəm." Bu, tamamilə normaldır və səssizlikdən qat-qat yaxşıdır.
Interview məsləhəti: sessiyanın əvvəlində bu bir cümləni de — "İcazənizlə, əvvəl bir neçə sual verib yanaşmamı danışım, sonra koda keçim." Bu cümlə üç iş görür: sənə düşünmək üçün vaxt qazandırır, intervyuerə strukturlu işlədiyini göstərir və proses üzrə gözləntini razılaşdırır. Digər tərəfdən, ən çox rast gəlinən səhv — sualı eşidən kimi dərhal kod yazmağa başlamaqdır. Bu, sürət kimi görünmür; tələbləri yoxlamayan mühəndis kimi görünür.