Big Tech - Coding Interviews

30.06.2024

cover

Barchani orzusiga aylanishga ulgurgan MAANG kompaniyalaridagi og'riqli jarayon haqida yozishga qaror qildim. Undan oldin esa turli xil shunday kompaniyalarda ishlaydigan do'stlarim bilan ko'p suxbat qildim va ushbu postda tayyorlanish, leetcode, yaxshi yechimlar, tushukunlik va boshqa kerakli ishlarni yozib o'tishga harakat qilaman.

Iltimos ushbu postni faqat o'qimang, balkim amal qiling. Agar amal qilmasangiz interviyuda sizni holatingiz  👇🏻

Interviewda shu ahvolga tushasiz

Coding rounds

Ushbu bosqichda sizni faqat algoritmik emas, balki bir necha skilllaringizni tekshirishadi. Misol uchu:

  • Technical competence: sizni texnik malakangizni, jumladan, toza (clean), samarali (efficient) va qo'llab-quvvatlanadigan (maintainable) kod yozish qobiliyatingizni baholashadi.
  • Problem Solving: sizni muammolarni hal qilish qobiliyatingiz, murakkab muammolarni kichikroq qismlarga ajrata olish qobiliyatingizni baholashga va samarali yechimlar topish imkon beradi. IT olamida muammolar juda ko'p va ularni yaxshi va samarali yecha olishingiz sizni yaxshi kandidat qilib ko'rsatadi.
  • Ability to work under pressure: sizni bosim ostida ishlay olishingizni tekshirishadi. Berilgan vaqtda va muhitda samarali ishlash qobiliyatingizni baholashadi.
  • Communication skills: shuningdek, kompaniyaga sizning muloqot qobiliyatlaringiz, fikrlash jarayoni, mulohazalarini ifodalash qobiliyatingiz, suhbatdoshingizni savollari va fikr-mulohazalariga javob berish qobiliyatlaringizni baholashadi.
  • High standards: ushbu 4 tamoylidan eng yaxshi feedback yoki katta ball olgan insonlarga offer berishadi. Chunki bunday gigantlar eng yaxshi kandidatlarni istashadi.

Your recruiter is your best friend

Menga aloqaga chiqgan recruiter

Xo'p, biroz bo'rttirilgandek eshitilishi mumkin ammo yuqoridagi rasm va shaxsiy tajribamdan kelib chiqib bu gap haqiqat deb ayta olaman (ba'zan bunday bo'lmasligi ham mumkin ammo ehtimol juda kam). Ish beruvchi sizni dushmaniz emas, balki siz bilan ishlaydiga odam. U sizni muvaffaqiyatli bo'lishingizni, barcha intervyu bosqichlaridan o'tishingizni, ko'ldan uy sotib olishingizni va orzuingizdagi kompaniyangizda turli xil ovqatlaru-qahvalardan tatib ko'rishignizni istaydi. Agar savollaringiz bo'lsa tortinmay berishingizni, tayyorgarlik uchun resurslar so'rashingizni tavsiya qilaman. Ko'pgina hollarda, recruiterlar sizga rol va intervyu bosqichlarini yaxshiroq tushunishga yordam berish uchun siz topshirayotgan rolda ishlaydigan odamni topib siz bilan bog'lab berishlari ham mumkin. Xullas savollaringizni tortinmay beravering, agar dardingiz bo'lsa tortinmay aytavering.

Actual coding round

Asabiylashyapsizmi? Oshqozoningizda kapalaklar uchayabdimi? Ko'p o'ylay olmayabsiz va miyangizga kelayotgan yagona narsa bu HashMapmi? Malades, hammasi endi boshlandi.

Sizda binary tree ni teskari qilish uchun 60 soniya vaqt bor

Sizda 45 daqiqa vaqt bo'ladi. Ba'zan sizni qizib olishingiz uchun interviewer 10 daqiqada ishlasa bo'ladigan oson savol bilan boshlashi mumkin. Ammo vaqtni tejash, muloqot qilish, muammoni aniqlashtirish uchun savollar so'rash, yechimlar taklif qilish va kod yozish uchun shug'ullanishingiz kerak. Bularni barchasi uchun 45 daqiqa vaqtingiz bor xolos.

Sizga savol berildi: Read a file and calculate frequency of every word in that file .

Unchalik ham qiyin emas, shundaymi? Ammo birdan sizni hayajon bosib turli xil o'ylar o'z domiga torta boshladi:

DP, hashmap, Linked List, RAM, Directed Graph, Mom, MOM!!! why am I so dumb

O'zizga bo'lgan ishonch birdan so'nib, panika qilishni boshladingiz:

Uni o'rniga siz o'zingizni tinchlantiring va tayyorlang.

Confirm your understanding

Suhbatdoshingiz sizni katta muammoni ichiga tashlamaydi. Har doim muammo qandaydir noaniq bayonot bilan boshlanadi va keyin aniq savollar berish orqali aniqlashtirish sizga bog'liq. Yuqorida aytib o'tilgan savolda juda oddiy ko'rinadi, lekin aslida unday emas, chunki suhbatdosh buni xohlagancha murakkablashtira oladi.

Bu, shuningdek, to'g'ri savollar berish san'ati va nomzod sifatida siz o'zingiz haqingizda ko'p narsalarni aytib berasiz. Suhbatdoshingizdan so'rashingiz mumkin bo'lgan ba'zi misol savollar:

  • “Input fayl qaysi turda beriladi? JSONmi yoki CSVmi?” Tahmin qilish bu yerda yaramaydi. Uning o'rniga suhbatdoshingizdan aniqlashtirib so'rashingiz sizni yana bir bor yaxshi kandidat qilib ko'rsatadi.
  • “Ushbu fayldagi maʼlumotlar qanday turda? Uni satr-ma-satr o‘qish mumkinmi?” Agar siz suhbatdoshingiz bilan oldindan tasdiqlamasdan kod yozishni boshlasangiz, bu natijaga salbiy ta'sir ko'rsatadigan taxminlarga olib kelishi mumkin, masalan, fayl juda katta bo'lsa, kichik hajmni qabul qilish. Tasavvur qiling-a, 30 Gb hajmli fayl faqat bitta satrga ega va ular orasida yangi satr belgilari bo'lmaydi. Agar savol so'ramasangiz, sizning operativ xotirangiz WAAAATTTTTTTTT!!!! deb yuboradi yoki kompyuteringiz yonadi.
  • Katta fayllar bilan ishlashda xotira cheklovlarini hisobga olishingiz kerak. Kodlashni boshlashdan oldin, fayl hajmi haqida so'rang va uning xotiraga to'liq sig'ishi mumkinligini aniqlang. Agar fayl juda katta bo'lsa, uni satr bilan o'qib chiqing. Bunday hollarda generatorlardan foydalanish yaxshi yechim bo'lishi mumkin va suhbatdoshga chekka holatlar haqida tanqidiy fikr yuritayotganingizni va xotirani boshqarishni yaxshi tushunganingizni ko'rsatadi.
  • Output formatini aniqlang. Biz output fayliga yozyapmizmi, REST API-ga yozyapmizmi yoki funksiyangizdan shunchaki lug'atni qaytaryapmizmi? Compressedmi? Siz har doim qaytariladigan output turini aniqlashingiz kerak. Bizning savolimizda, output lug'at (hashmap) bo'lishi mumkinligini taxmin qilish osonroq, lekin ba'zida bu unchalik aniq emas. Misol uchun, ikkita massivni solishtiring va berilgan ikkita element ikkalasida ham bor yoki yo'qligini tekshiring. Endi bu muammoning natijasi nima ekanligi aniq emas: ikkala massivdagi elementlarning mantiqiy yoki indekslari?

Check bounds of your input

Input va output chegaralarini tushunishingiz ham shart! Misol uchun, agar sizga raqamni topish uchun butun sonlar ro'yxati berilgan bo'lsa, siz har doim massiv tartiblanganmi yoki yo'qligini so'rashingiz mumkin:

  • Ro'yxatdagi ma'lumotlarni turi bir xilmi yoki turliximi?
  • Manfiy raqamlar bo'ladimi?
  • Bo'sh bo'lishi mumkinmi?
  • Ushbu faylda unicode belgilar bormi?
  • Ushbu massivda singed yoki unsigned integerlar bormi?

Suhbat davomida ular haqida so'rashni unutmaslik uchun biror joyga chegaralarni yozib qo'yish yaxshi. Muayyan intervyu savolingizga qaysi chegaralar tegishli ekanligini aniqlashingiz va kerak bo'lganda sozlashingiz kerak bo'ladi.

Describe Your Solution Out Loud

Yechimni og'zaki o'ylang. Biroz g'alati eshitilishi mumkin ammo suhbatdoshingizga sizni nimalarni o'ylayotganingiz qiziq bo'ladi. Agar o'ylaringizni ovoz chiqarib gapirsangiz u sizga qayerda adashayotganingizni eshitib yordam ham beradi (ko'p xollardan). Kod yozishdan oldin reja qiling va yechimlarni taklif qiling. Suhbatda noqulay, jimlik bilan yechimni yozishga kirishish juda keng tarqalgan, ammo bu faqat negativ baho berishga sabab bo'ladi xolos.

Kandidat jim kod yozishga kirishganda interviewer

Discuss the limitations your solutions might have

Masalan, katta hajmli fayldan o'qish paytida generator funktsiyalaridan foydalanish xotiradan maksimal darajada emas, balki ehtiyotkorlik bilan foydalanishga yordam beradi, lekin generatorlarni bilgan dasturchilar bilishadiki, ular bilan orta qaytish imkoni yo'q. Foydalanish holatingiz fayl tarkibidan qayta foydalanishni talab qiladimi yoki yo'qligini tekshiring va shunga mos ravishda yechimingizni tanlang.

Start Coding

Va nihoyat, kodni endi yozishni boshlashingiz mumkin.

Yechimingizni optimallashtirganingizdan va suhbatdoshingizdan uni kodlashni boshlashingiz uchun green flag berganidan keyin yozishni boshlang. Sizga IDE emas oddiy text editor beriladi. Shuning uchun kod yozishda bu narsaga diqqat bilan yondashing.

Siz o'zingiz uchun qulay bo'lgan tilni tanlashingiz kerak va unda asosiy ma'lumotlar tuzilmalarini osongina implement qila olishingiz kerak. Sizdan data structureni noldan tuzishni so'rashlari juda kam uchraydi, shuning uchun tanlagan tilingizni yaxshi o'rganing. Agar mavjud bo'lmasa tuzishni o'rganing.

Yordamchi funksiyalarni tuzing yoki borida foydalaning. Agar muammoda Arrayda berilgan har bir so'zni hashlash kerak bo'lsa shunday yordamchi funksiya tuzganingiz yoki boridan foydalishingiz yaxshiroq. Xullas takrorlanadigan ishlarni alohida yordamchi funksiya sifatida yartish best practice. Bu suhbatdoshga fikrlash jarayoni va kod mantiqiga amal qilishni osonlashtiradi.

Maslahat: Oʻzgaruvchilarga chiroyli nomlar bering va funksiyalaringizga commentlar qoʻshing.

Preparing process

Leetcode masalalarni ishlashdan oldin data structure va algoritm bilimlaringizni yaxshilab olishni masalahat beraman. Ularni implement qilishingizga 5-10 minutgacha vaqt sarflashingiz perfect bo'ladi. Boshida tushunishga harakat qiling. Tushunish uchun esa har bir qator kod nima vazifani bajarishini yaxshilab analiz qiling. Agar tushunish qiyin tuyilayotgan bo'lsa shoshilmang va qayta-qayta analiz qiling. Kod yod bo'lmaguncha uni yozishga harakat qiling.

Endi algoritmlaringizni juda kam daqiqa ichida implement qila olasiz. Endi sizga logika kerak. Logika doim ham ishlamaydi. Ba'zan logika ishlashi uchun turtki kerak bo'ladi. Yechimga uzog'i 1 soat sarflang. Agar yechim chiqmasa eng yaxshi yechimlarni kirib o'qing va analiz qiling (leetcodeda bunday imkoniyat mavjud). Keyin esa o'sha yechimni o'zingiz implement qiling va o'sha masalani har 4-5 kunda qaytib kelib turli xil yechimlar bilan ishlang. 1-oyda siz o'zingizni juda erkin xis qila boshlaysiz.

Ha ba'zan yechimlarni yodlash kerak bo'ladi. Bu yomon emas, ishonavering.

Agar post foydali bo'lsa uni share qilishni unutmang.

© Foydalanilgan manbalar:

Kofe olib bermoqchimisiz?