5 ta ish taklifini olish uchun muvaffaqiyatsiz texnik suhbatlardan olgan darslarimni qanday qo'lladim

Bu deyarli tush kabi edi. Men 6 oylik ta'tilga chiqib, qiz do'stim bilan kodlash va Avstraliyaga ko'chib o'tdim, nihoyat Norvegiyaga qaytganimda - ish topdim.

Bu deyarli hech qanday muammosiz o'tdi. Menda hammasi bor edi. Men o'zimning tadbirkorlik tajribam haqida bir oz ma'lumot berishdan boshlayman.

So'nggi 6 oyni men o'z portfelim va shaxsiy loyihalarim ustida tinimsiz o'tkazdim. Eng muhimi, Crypto valyutalarini va portfel qiymatlarini real vaqtda kuzatib borish uchun vosita bo'lgan CryptoDasher-ni yaratdim. Men shuningdek, Loopring deb nomlangan Xitoyning blockchain kompaniyasi uchun veb-dizayn tanloviga ariza topshirdim.

Men o'zimni tayyor his qildim. Men Norvegiyadagi yirik konsalting kompaniyasida ishlab chiqaruvchiga ish topshirish uchun murojaat qildim va ularning e'tiborini jalb qildim - yoki hech bo'lmaganda shunday deb o'yladim.

Uy vazifasini topshirganimdan va birinchi davra suhbatidan so'ng meni texnik suhbatga taklif qilishdi.

Asosiy voqea.

Men asabiylashdim.

Texnik suhbatga qanday tayyorgarlik ko'rmoqdasiz? - deb o'zimdan so'radim. Men atrofga savol berdim va Internetni aqldan ozgan kabi qidirdim. YouTube’da soxta intervyularni tomosha qildim. Mana men foydalangan ba'zi manbalar:

  • Intervyu oldidan chiqish (freeCodeCamp Medium Article)
  • Devid Shariff 2017-yilda veb-saytlarni ishlab chiqish bo'yicha intervyu olishga tayyorgarlik ko'rmoqda
  • Har bir JavaScript dasturchisini bilishi kerak bo'lgan 10 ta intervyu savollari
  • Toptal-ning JavaScript-ga oid suhbatlariga oid savollar ro'yxati
  • Mozilla dasturchilar tarmog'i (MDN)
  • Pramp - boshqalar bilan masxara qilish uchun vosita
  • Github Frontend dasturchilariga tegishli savollar to'plami
  • YouTube JS masxara intervyu # 1
  • YouTube JS masxarali intervyu # 2

Men o'zimni iloji boricha yaxshiroq tayyorlashga harakat qilib, ushbu materialga ko'p soat va soat sarfladim. Agar tushunganingizga ishonchingiz komil bo'lsa, intervyu oldidan qo'limdan kelganini qilmasam, o'zimni yaxshi his qilmasdim.

Suhbat kuni keldi.

Men 4 kun uyda edim. Avstraliyadan 36 soatlik parvozdan so'ng, men har kuni ertalab soat 5 da uyg'ongan edim.

O'sha kuni ertalab soat 4 da uyg'ongan edim.

Hali ham qo'rqinchli, lekin qiziquvchan, hayajonli.

Men suhbatdoshni kompaniyaning qabulxonasida uchratdim va biz ularning ofislariga bordik.

Yaxshi suhbat qildik va darhol ulana boshladik. Men yumshoq mahoratni yaxshi bilaman, shuning uchun bu kuchni erta namoyish etishni umid qilgandim. Qisqa vaqt ichida boshqa suhbatdosh bilan uchrashdik va majlislar zaliga bordik.

Suhbatning boshlanishi juda yaxshi o'tdi. Biz har birimiz o'zimizni tanishtirdik va ular menga kelib chiqishi haqida ba'zi savollarni berishni boshlashdi. Mendan kodlashni boshlashning eng qiyin qismi nima deb o'ylaganim, qanday texnologiyani o'rganishni istayman, qanday texnologiyani boshqalarga o'rgatmoqchiman va bu menga nimani yoqtiradi, deb so'rashdi.

Shu payt intervyu juda yaxshi o'tayotganini his qildim. Kompaniya haqida ko'proq bilishga qiziqib qoldim va suhbatdoshlarim bilan bog'lanib qolganimni his qildim.

Keyin texnik qism boshlandi.

Birinchidan, uy vazifasidan mening kodimni tushuntirishni so'rashdi. Vazifasi ma'lumotlar to'plami uchun sahifani yaratish va uni ro'yxatda ko'rsatish edi. Men uni React-dan foydalanib yozgan edim va kodni o'rganishni boshladim. Kodni o'rganib chiqqach, mening suhbatdoshlarim menga bu haqda savol berishadi. Men quyida keltirilgan savollarni va intervyu beruvchilar nima bo'lganini aytib berishga harakat qilaman.

Birlikni tekshirish nima ekanligini bilasizmi? Kodning qaysi qismini birlik tomonidan sinovdan o'tkazish mumkin?

Rostini aytsam, men bunga noto'g'ri javob berdim. Birlik testi - bu kod yoki blokning ma'lum bir qismi mo'ljallangan maqsadni istalmagan nojo'ya ta'sirlarsiz bajarishini tasdiqlovchi qism. Javob berganimni eslay olmayman, lekin uni integratsiya sinovlari bilan aralashtirib yuborgan bo'lishim mumkin. Intervyu oldidan men test sinovlari va TDD haqida ozgina ma'lumotga ega edim, ammo shu zahoti bu meni chetlab o'tdi.

Oldin va orqada bir necha munozaralardan so'ng, men dasturning mantiqiy qismi uchun javobgar bo'lganligi sababli, pagatsiya funktsiyasini sinab ko'rishim mumkin degan xulosaga keldim.

Siz dasturni qanday takomillashtirar edingiz?

Men bu savolni biroz chalkash deb topdim. Uy vazifasini topshirganimda (bir necha hafta oldin), mendan dasturni yaxshilashim mumkin bo'lgan narsalar ro'yxatini kiritishni so'rashdi. Intervyuer ular haqida allaqachon bilgan deb faraz qilar ekanman, o'zim kiritganlardan ko'ra boshqa yaxshilanish sohalarini izlashga harakat qildim.

Tez orada menga ma'lum bo'ldiki, suhbatdoshim mening elektron pochtamda aytib o'tgan narsalarim haqida eshitishdan manfaatdor edi va shu sababli men barcha fikrlarni - xatolarni qayta ishlash, mobil optimallashtirish, Ajax qo'ng'iroqlarini yuklash paytida foydalanuvchi fikrlari va sahifani eslatib o'tishni boshladim. katta ma'lumotlar bazasi mavjud bo'lganda boshqaruv.

BEM nima ekanligini bilasizmi? Siz foydalanadigan BEM kodimi?

Men BEM nima ekanligini bilaman deb javob berdim. Bu CSS loyihalarida ishlashga bag'ishlangan konventsiya va Blok, Element, Modifikator degan ma'noni anglatadi. Shuningdek, men CEM-klass nomlanishida BEM-dan ilhomlanganligimga javob berdim, lekin u BEM-ning aniq emasligi, chunki u BEM-ning barcha qoidalariga rioya qilmagan.

Qanday qilib siz ushbu saytni mobil qilib do'stona qilishingiz mumkin?

CSS Media so'rovlari. Bu erda asosiysi. Ular men saytlarni ta'sirchan qilish uchun media so'rovlari bilan qanday ishlashni bilganimni bilishni xohlashdi.

Haligacha. Juda yaxshi. Men savollarga adolatli javob berganimni his qildim, garchi intervyu beruvchini aynan nimadan olishni tushunmasdan oldin savollarni muhokama qilishim kerak edi.

Kodlashda qiyinchilik

Keyin mendan funktsiyani uzaytirishni so'rashdi. Mendan varaqlangan ma'lumotlar to'plamini oladigan va ularni nomlari va raqamlari bo'yicha qayta tartibga soladigan saralash mexanizmini joriy etishni so'rashdi. Menga muammo haqida o'ylash uchun bir necha daqiqa vaqt berildi.

Men o'zimga o'rnatilgan JavaScript tartiblash funktsiyasidan foydalanishim kerakmi yoki o'zimnikini qurishim kerakmi yoki yo'qmi kabi aniqlashtiruvchi savollarni berdim (keyinroq ko'rib chiqamiz, bu katta xato edi). Paginal ma'lumotlar ob'ektlar qatori sifatida mavjud bo'lib, unda har bir ob'ekt ro'yxatdagi har bir elementni ko'rsatadigan 20 ta ob'ektdan iborat ma'lumotlar qatori mavjud. Men quyidagi algoritmni o'ylab topdim:

  1. Har bir pagination ob'ektlari ma'lumotlarini yangi qatorga birlashtirish.
  2. Yangi qatorni tartiblang
  3. Saralangan qatorni joylashtiring va yangi tartiblangan qatorga komponentning holatini o'rnating.

Yaxshi algoritm edi. Va men nima qilishni tezda anglab etdim. Endi yagona muammo uni amalga oshirish edi. Bu erda men xato qildim.

Birinchidan, men seriallarni qanday birlashtirishni uzoq vaqt davomida bilib oldim. Tan olaman, menimcha, bu erda vaziyatning ba'zi bosimi paydo bo'ldi. Chunki men har xil g'alati narsalarni qildim, qachonki ularni oddiy qisqartirish bilan hal qilsam. Rostini aytsam, hozirgi holatdagi kabi qisqartirish menga unchalik qulay bo'lmagan.

// Men nima qilishim kerak edi
const pageData = pages.reduce ((boshlang'ich qiymat, sahifa) => boshlanuvchiValue.concat (sahifa.data), [])
// Men nima qilishni tugatdim
const sahifalari = this.state.pages;
const pageData = [];
pages.forEach (sahifa => pageData = pageData.concat (sahifa.data));

Endi menda barcha ma'lumotlar to'plami bor edi, shuning uchun uni tartiblash uchun mantiqni yozishim kerak edi. Mening dasturlash tajribam asosan o'z loyihalarimni yaratish bilan bog'liq bo'lganligi sababli, men uzoq vaqt davomida JavaScript tartiblash funktsiyasi bilan bog'liq bo'lgan narsalar. Men buni qidirishim kerak edi va men uni amalga oshirishdan oldin uni haqiqatan ham tushunish uchun MDN va namunalarni toshib toshish bo'yicha tekshirishga ko'p vaqt sarfladim.

Men saralashni qisman ishladim. Bu erda biroz turib qoldim. Massivdagi ko'pgina nomlar to'g'ri tartiblangan, ammo tepada tartibsiz bo'lgan ba'zi nomlar mavjud edi. Shu payt men tinchlanishga harakat qilardim, lekin xayolimda aqldan ozayapman. To'g'ri saralanmaganligi uchun boshimni o'rashga harakat qilardim. Bu erda tan olishni istaganimdan ko'proq vaqt qolib ketdim.

Biroz munozaradan va intervyu oluvchilarni qo'shgandan keyin. Oxir oqibat, satrlar ASCII qiymatlari bo'yicha tartiblanganligini esladim. Katta harflar 65 dan 90 gacha, kichik harflar esa 97 - 122 dan baholanadi. To'g'ri tartiblanmagan yuqori natijalar katta harfga ega edi, birinchi navbatda ularni tartiblash effekti bor edi, chunki ularning ASCII qiymati kichik harflarga qaraganda pastroq. . Bu men hech qachon qaytarmayman xato.

Muammo aniqlanganda, men darhol .toLowerCase () yordamida saralanayotgan nomlar bo'yicha uni hal qildim.

Endi faqat bitta narsa qoldi.

Tartibga solingan ma'lumotlarni paginatsiya funktsiyasiga o'tkazish.

Mana, men ham hushtak chaldim.

Pagatsiya funktsiyasi Ajax javobini kutdi va har bir elementni formatData funktsiyasiga o'tkazdi, ular tegishli qismlarni ajratib olib, yangi ob'ektni qaytarishdi. Ammo, men ushbu funktsiyaga ajratilgan ob'ektlarning yangi qatorini topshirishga harakat qilganimda, endi asl xususiyat nomlari bo'lmaydi va funktsiya xatoga yo'l qo'yadi.

Buni formatlash ma'lumotlarini paginasyon funktsiyasidan tashqariga ko'chirishim va ma'lumotni paginasyon funktsiyasiga o'tkazmasdan oldin uni javob ma'lumotlari asosida bajarishim kerakligini anglashimdan oldin biroz vaqt ishladim.

Ushbu va yana bir oz kichik o'zgarishlar kiritilgandan so'ng kod nihoyat ishlay boshladi. Bu biroz vaqt talab qildi, ammo oxirida men uni hal qildim.

Shu payt texnik suhbatning kodlash qismi tugadi.

Va men quriganimni his qilardim.

Suhbatni yana bir nechta suhbat bilan yakunladik. Ular menga o'zlarining shirkatlari haqida ko'proq gapirib berishdi va men ikkalamiz bir-birimizdan ayrilishimizdan oldin bir nechta savol berdim.

Biroq, suhbat shu bilan to'xtamadi.

Intervyu haqida o'yladim, xato qilganim haqida o'ylab, uxlab, keyin ishga o'tdim.

Ertasi kuni echimni yaxshilash uchun uch soat sarfladim va shundan so'ng men ushbu elektron xabarni yubordim:

Salom X va suhbatdosh Y.
Kecha men bilan gaplashishga rozi bo'lganingiz uchun sizga rahmat aytaman. Men yechim haqida ko'p o'yladim va bugun uni yaxshilash ustida biroz ishlashga qaror qildim. Men kecha ishlagan narsalarimizning yaxshilangan versiyasi kodini taqdim etdim. Men shunday qildim:
Agar natija ikkinchi marta bosilsa natijani qaytarish uchun saralash funktsiyasini kengaytirdim.
Saralash funktsiyasini barcha sarlavhalarga kengaytirdim.
Saralash sarlavhalariga piktogramma qo'shdim.
Men paginatsiya funktsiyasini qayta tikladim, birliklarni sinovdan o'tkazish asoslarini bilib oldim va Jest-dan uning ishlashini sinab ko'rdim.
Qayta yuklash va ulanish boshqa sahifaga tashrif buyurganingizda to'g'ri ma'lumotlarni ko'rsatishi uchun men sahifani qo'llab-quvvatlash uchun so'rovlar qatorini qo'llab-quvvatladim.
Men tarkibiy qismni uyali qilish uchun media-so'rov uslubini qo'shdim.
Men API qo'ng'iroq amalga oshirilayotgan paytda ko'rsatiladigan yuklagichni qo'shdim
Men xato bilan ishlov berishni qo'shdim, foydalanuvchiga API qo'ng'iroqini qayta boshlash imkoniyati paydo bo'ldi.
Tanlash oynasi bilan ishlash uchun men mobil qurilmadagi tartiblash funktsiyasini o'zgartirdim.
Men xatoni lig yorlig'ini o'rab turgan joyda aniqladim.
Bu biroz oshib ketgan bo'lishi mumkin, lekin men ilhomlanib, echimni yaxshilashni xohladim.
Yaxshi tilaklar,
Fredrik Strand Oseberg

Bu etarli emas edi. Ammo hech bo'lmaganda qo'limdan kelganini qildim. Biroz vaqt o'tgach, men ushbu elektron xabarni oldim:

Salom!
Suhbatning yoqimli bosqichlari uchun sizga rahmat aytamiz, lekin biz sizga ushbu lavozimni taklif qilmaymiz, degan xulosaga kelishimiz kerak, chunki siz texnik qismda bizning taxminlarimizga intilmadingiz.
Biz sizning bilimlaringiz va sizning jamiyatimizga yaxshi moslasha olishingizga ishonamiz, shuning uchun siz yana bir marta dasturlash tajribasiga ega bo'lganingizdan keyin yana murojaat qilishingizga umid qilib, texnik suhbatingiz haqida batafsil mulohazangizni beramiz.

Qayerda xato qildim?

Yaxshiyamki, men teskari aloqa haqida batafsil hisobot oldim. Keling, buni ko'rib chiqaylik va men siz bilan muhokama qilaman.

Fikr-mulohaza №1: "Massivlarni qanday birlashtirish kerakligini bilib olishga ko'p vaqt sarflaydi. Avvalo JavaScript uchun hujjatlarni tekshirish o'rniga Internetni qidiradi (masalan: "js array doc" w3schools yoki mdn, qaerda funktsiyalar ro'yxati berilgan) va misollardan noto'g'ri foydalanadi (array.concat yangi qatorni beradi). Hech kim API-dagi hamma narsani eslay olmaydi, shuning uchun JS yoki kutubxona uchun hujjatlardan foydalanish qulay bo'lishi muhimdir. "

Takeaway: Intervyu beruvchilar avval MDN (yoki boshqa tegishli hujjatlar) ga erishishingizni ko'rishlarini xohlashadi. Ular siz hujjatlarni topishingiz va o'qishingiz va u erdagi ma'lumotlarga asoslanib amalga oshirishingiz mumkinligini ko'rishni xohlashadi.

Fikr-mulohaza № 2: "Saralash topshirig'ida nomzod avval g'alati qo'llanma algoritmini taklif qiladi. Yaxshiyam u JavaScript ichida o'rnatilgan tartiblash funktsiyasidan foydalanishni afzal ko'radi, lekin bu qanday ishlashini bilmaydi va hujjatlarni qayta-qayta tekshirishi kerak. "

Tashlab ketish: muloqotda aniq bo'ling. Bunday holda, men intervyuerlardan o'rnatilgan JavaScript tartiblash funktsiyasidan foydalanishim kerakmi yoki yo'qmi, qo'lda turgan vazifa chegaralarini / chegaralarini aniqlab olishim va bilmasdan kodlashdan sakrab chiqmaganligimni namoyish etishim haqida so'radim. men boshqargan shartlar. Afsuski, men o'z saralash algoritmimdan foydalanishni taklif qilayotganda, bu noto'g'ri talqin qilingan, deb o'ylayman, agar bunday qilishni istamagan bo'lsam, lekin agar ular vazifadan tashqarida bo'lishni istamasa.

Bu men aytmoqchi bo'lgan narsaning teskari ta'siriga olib keldi. O'zingizning savollaringizni ochmoqchi bo'lgan narsani aniq aytib berganingizga ishonch hosil qiling. Chunki ular siz uchun mukammal ma'noga ega bo'lishi mumkin, ammo sizning suhbatdoshlaringiz buni boshqacha qabul qilishi mumkin.

Fikr-mulohazalar № 3: "Kod ishlayotganda, matn klassik stsenariy bo'yicha" katta-kichik holatlarga "tartiblangan."

Afsuski, muammoni tushunish uchun nomzod ko'p vaqt sarflaydi, ammo aniqlangandan so'ng darhol hal qilinadi.

Qaytish: Tezlikning mohiyati. Dasturlarni yozishda har doim xatolar paydo bo'ladi, ammo ularni iloji boricha tezroq hal qilishga harakat qiling. Muammoning mohiyatini toping va agar uni aniqlay olmasangiz, tezda hujjatlar bilan murojaat qiling.

Fikr-mulohazalar 4: "Format-formatni nega refaktor ostida paginatsiya qilinmaganligini tushunish uchun biroz vaqt sarflang."

Qaytish: Yana tezlikni mohiyati bor.

Fikr-mulohaza № 5: "array.map yoki array.reduce ishlatilishi mumkin bo'lgan juda ko'p oldingi ko'chadan. Funktsional dasturlash haqida ko'proq ma'lumot olish foydali bo'ladi. "

Takeaway: array.map, array.filter va array.reduce-ni o'rganing va ularni yaxshilab o'rganing. Men buning orqasida funktsional dasturlashni o'rganib chiqdim va bu juda qiyin vazifa. Ammo barchasini hozir o'rganishingiz shart emas, shunchaki asoslarni aniqlab olganingizga ishonch hosil qiling.

Fikr-mulohazalar № 6: Nomzodni birlik sinovlari haqida ko'proq ma'lumotga ega bo'lishlarini istardim.

Takeaway: Bu juda ravshan ko'rinadi, ammo uni yaxshi o'lchash uchun bir necha marta yozib qo'yaylik: Sinov juda muhim. Sinov muhim. Sinov muhim. Buni bilib oling. Unga qo'shing. Buni ishlat.

Hujjatning qolgan qismi maqtovdir. Men bu qadar tafsilotlarni bilmayman, chunki bu unchalik muhim emas. Ammo buning mohiyati:

  • U muharriridan yaxshi foydalanadi
  • U Chrome-da tuzatuvchidan foydalanadi (tuzatishning ilg'or vositalarini bilish muhim)
  • U ishlashdan oldin narsalar ishlashini tekshiradi (console.log-dan foydalanib)
  • U kodni kamroq mantiqiy qismlarga ajratishga harakat qiladi
  • U sharhlar o'rniga nomlari bilan o'zgaruvchilardan foydalanadi, bu kodni o'qishga imkon beradi.
  • U Reaktni yaxshi biladi
  • Avvalgi loyihalar juda ta'sirli
  • Dasturlashdan tashqari boshqa ijobiy fazilatlarga ega (dizayn / vizual)

Men tayyorgarlikda boshqacha yo'l tutgan bo'lardimmi?

Hindsight 20/20. Yo'q bo'lsa, siz boshqacha qilib qo'yishingiz mumkin bo'lgan narsalar haqida o'ylash uchun muqarrar vaqt sarf qilasiz.

Uy vazifasini bajarish kodini batafsilroq tekshiring.

Men JavaScript bilimlarim ustida ishlashga ko'p vaqt sarfladim. Men o'zimning kodimdan, hatto men qilganimdan ham ko'proq o'tishim kerak edi. Men buni yozgan bo'lsam ham, yozish vaqti va intervyu o'rtasida bir necha hafta o'tganda, siz orqaga qaytib, xotirangizni yangilashingiz kerak. Javob berish uchun noaniq savollarga qaraganda ko'proq vaqt sarflashimni istardim.

Ko'proq amaliy JavaScript topshiriqlarini bajaring.

Men suhbatga qadar juda ko'p nazariy ishlarni qildim. Endi ko'proq vaqt sarflaganimni yoki hech bo'lmaganda amaliy topshiriqlarni bajarishni istagan bo'lardim. Hackerrank yoki Code Wars-da algoritmlarni yeching. Yoki saralangan ro'yxat, pastga tushadigan menyu, varaqlash va boshqalar kabi umumiy qism qismlarini yarating.

Intervyu yakunlandi

Birinchi texnik suhbatdan keyin o'zimni qanday his qilyapman? Rostini aytsam, juda yaxshi tajriba bo'ldi. Men bilan suhbatlashganimdan, menga shunday batafsil mulohazalarni bergani va keyingi intervyu oldidan xatolarimni tuzatishga imkon bergani uchun juda minnatdorman. Garchi men bu ishni ololmagan bo'lsam ham, birinchi ishlab chiqaruvchi sifatida ish topishga bir qadam yaqinlashdim.

Shuningdek, intervyu bema'ni narsa ekanligini bildim. Ehtimol, agar men o'z loyihalarimda saralash mexanizmini yaratgan bo'lsam yoki oldin qilgan ishimga yaqinroq topshiriq olgan bo'lsam, u umuman boshqacha bo'lar edi.

Mening eng katta kuchim shundaki, men o'tgan yil davomida JavaScript-ni o'rganishga ko'p vaqt sarflaganman va men yangi g'oyalarni tezda o'rganib, o'zlashtira olaman. Afsuski, men bu safar bu bilimlarni namoyish eta oldim deb o'ylamayman. Men borolmadim:

  • Ularga JavaScript prototiplari zanjiri to'g'risida bilimlarimni va bu ob'ektlar o'rtasida usullarni oson va tezkor almashish uchun qanday imkoniyat yaratishini ko'rsating.
  • Yopilish haqida va JavaScript ichki funktsiyalari tashqi doiradagi o'zgaruvchini yopib, tashqi funktsiyani qaytgandan keyin keyinroq kirish imkoniga ega bo'lish haqida gaplashing - va bu axlat yig'ilishini qanday oldini oladi.
  • JavaScript ko'lami haqidagi bilimlarimni baham ko'ring va qanday qilib JavaScript o'zgaruvchini topish uchun global miqyosgacha bo'lgan darajada mahalliy miqyosning har bir darajasini tekshiradi.
  • O'zgarish haqida va mening qanday qilib === qanday qilib konversiya qilmasdan tenglikni va == tenglik va turdagi konversiyani tekshirishni bilishim bilan o'rtoqlashing.
  • Yuk ko'tarish haqida va JavaScript funktsiyasidagi funktsiyalar va o'zgaruvchilar (ruxsat berilgan va konst) tashqari, yuqoridagi kodni ishlatib, ularni yuqoriga ko'tarish haqida gaplashing.
  • Ushbu kalit so'z haqida gapiring va uning qiymati qanday qilib funktsiyaning chaqirilishiga (qo'ng'iroq qilish saytiga) bog'liq.

Men xohlagan narsaga (pun mo'ljallangan).

Muvaffaqiyatga yo'l

Endi o'zimga o'zim shunday deyishim mumkin: “Men unchalik yaxshi emasman. Men 3-4 oyni ko'proq o'rganishga sarflashim kerak va keyin yana urinib ko'ring. "

Men qilmadim.

Ikki hafta ichida imkon qadar ko'proq ish joylariga murojaat etishga qaror qildim. Men Norvegiyadagi eng yirik IT firmalariga murojaat qildim.

Men osmonga qarab oldim.

Ikki hafta o'tgach, men bir nechta kompaniyalar bilan intervyu oldim va yana texnik intervyu oldim.

Ikkinchi bosqich tayyorgarlik

Agar birinchi texnik suhbatlarimdan bir narsani bilib olgan bo'lsam, bu tayyorgarlik juda muhimdir. Bu texnik suhbatni imtihon deb o'ylash orqali yordam beradi va sizning o'tishingizni ta'minlash uchun zarur choralarni ko'radi.

Sinovlar singari, intervyu kabi, ular nomzodning to'liq bilim doirasini qamrab ololmaydilar. Xo'sh, nima qilishingiz mumkin?

Bilim doirangizni kengaytiring.

O'q o'tkazmaydigan bo'ling. Neo bo'ling.

Men uchun 8 soat ichida 100 dan ortiq intervyu savollariga javoblarni yodlash uchun ilg'or xotira texnikasidan foydalandim. Savollarni ushbu omborda topish mumkin.

Men buni qanday amalga oshirganim ushbu maqolaning doirasiga kirmaydi, lekin agar siz uning qanday ishlashini bilsangiz, quyida sharh qoldiring va men bu haqda boshqa maqola yozaman.

Bundan tashqari, vaqtni Code Wars va Hackerrank-ning amaliy misollariga sarfladim. Aslida qurilish uchun vaqt sarflash bilan bir qatorda.

Texnik intervyu №2

So'nggi muvaffaqiyatsiz intervyuimning saboqlariga boy bo'lib, men o'zimning tirishqoqligimni qildim.

Ushbu intervyu ko'proq oldingi g'oyalarni muhokama qilish mavzusiga qaratilgan edi. Bu keng qamrovli intervyu edi va men intervyu oluvchilar haqiqatdan ham bilimlarimni xaritaga kiritishni va kuchli va kuchsiz tomonlarimni o'rganishni xohlayotganlarini his qildim.

Suhbat bu safar taxminan ikki soat davom etdi va men suhbatdoshlar o'zlarining sinchkovlik bilan va sinchkovlik bilan harakat qilganliklaridan juda minnatdorman.

Bu erda biz ko'rib chiqqan barcha mavzular ro'yxati:

  • JS, CSS va HTML-ning keng qirralari
  • Hujjatlar tuzilishi
  • Loyihaning tuzilishi
  • Git
  • Ishlash
  • Xavfsizlik
  • Kirish imkoniyati
  • SEO
  • Javob beradigan veb-dizayn

Kodlashda qiyinchilik vanil Javascriptga asoslangan edi. Menga vanil Javascript-dan foydalanib divga oddiy sinf qo'shish juda qiyin bo'ldi. Endi, agar siz JS-da asosan freymlardan foydalangan bo'lsangiz, unda siz ClassList API bilan tanish bo'lmasligingiz mumkin. Yaxshiyamki, men ko'p vaqtimni vanilla JS bilan freeCodeCamp loyihalarini amalga oshirganman. Bu quyidagicha ko'rinadi:

const btn = document.querySelector ('. btn');
const menyu = document.querySelector ('. menyu');
funktsiya addClassNameToDiv () {
 if (! menyu.classList.contains ('new-class')) {
     menyu.classList.add ('yangi-sinf');
 } else {
     menyu.classList.remove ('yangi-sinf');
 }
}
btn.addEventListener ('chertish', addClassNameToDiv)

Shu bilan bir qatorda, siz bitta laynerga qo'shish uchun classList.toggle ('yangi-sinf') dan foydalanishingiz mumkin. Agar siz ochiladigan menyudan tashqariga bossangiz, menyuni yopish uchun uni kengaytirishni so'rashdi:

windows.addEventListener ('chertish', () => menu.classList.remove ('yangi-sinf'));

Kodlashda qiyinchiliklardan qochish:

  • Qisqartirilgan yaxshiroq, chunki uni har doim o'qish mumkin.
  • Ishlash oqilona, ​​so'rovni tanlagichlarni voqea tinglovchilariga qo'ng'iroqni qaytarish funktsiyasidan tashqarida qo'yish yaxshidir (tinglovchilar har safar yoqilganda bir marta chaqiriladi).
  • Oqilona ishlash, getElementById va getElementByClassName so'rovlar to'plagichiga qaraganda ancha samarali.

Ertasi kuni menejer chaqirdi. Men intervyu berdim, ular menga taklif qilishni taklif qilishdi.

Bu erda to'xtashim mumkin edi. Aytishim mumkin edi: "Men bitta texnikani topshirdim, bu juda yaxshi".

Men aksini qildim.

Men o'sha paytda suhbatlashayotgan har bir kompaniyaga qo'ng'iroq qilib, stolda bir taklifim borligini aytdim va jarayonni tezlashtirishimiz mumkinmi, deb so'radim, chunki hozir ko'rib chiqishga vaqtim bor.

Intervyu va ayniqsa texnik intervyu qattiq ruhiy sinovdir. Siz ekrandagi barcha vaqtlardasiz, barcha kutilgan vaqtlar va kutganingizdan oshib ketdingiz. Bu qiyin. Xo'sh, nega bunday qildim?

To'rt sabab.

  1. Omadim yo'qligini o'zimga isbotlamoqchi edim.
  2. Men suhbatda bo'lgan har bir kishiga hurmat bilan munosabatda bo'lishni va ularga adolatli imkoniyat berishni xohlardim.
  3. Men ishlab chiquvchi sifatida o'sib, ulg'ayishim uchun eng munosib va ​​eng yaxshi jamoani topganimga ishonch hosil qilishni xohlardim.
  4. Yigitlar. Bu jamoa menga juda ko'p yordam berdi va men texnik xatlovdan iloji boricha ko'proq ma'lumot to'plashga yordam berishni xohladim, shunda siz mening xatolarimdan saboq olishingiz va shunga mos ravishda tayyorgarlik ko'rishingiz mumkin.

FreeCodeCamp-dan olgan yordamim va yordamimdan xijolatdaman va qaytarib berishni xohladim.

Texnik intervyu № 3

Boshqa kompaniyalar bilan aloqada bo'lganimdan va menda yuqori darajadagi firma tomonidan taklif qilinganligini tushuntirganimdan so'ng, ko'plab kompaniyalar meni bosib o'tishga tayyor edilar. Bir hafta ichida men bir nechta intervyu oldim va ko'proq texnik intervyu oldim.

Mana mening uchinchi texnik interviyumdan intervyuga oid ba'zi savollar:

  • Qanday munosabatda bo'ldingiz? Nega unga kirdingiz? Xo'sh, nima yaxshi?
  • Redux qanday ishlaydi? API nimadan iborat? O'zgarmaslik nima? O'zgarmaslikka nima yaxshi?
  • Qanday qilib bizning veb-sahifamizni qayta loyihalashtirasiz?
  • Ilovaning chuqur qatlamlari bilan ishlashga qanday munosabatda bo'lasiz? Masalan, belgi
  • O'zingizning sinovingizni qilasizmi? Birlik sinovi nima?
  • Siz uchun yaxshi foydalanuvchi tajribasi nima?
  • Foydalanuvchi tajribasini qanday sinovdan o'tkazasiz?

Ushbu suhbatdagi kodlash muammosi CSS-ga asoslangan edi. Menga bir necha CSS qoidalari bo'lgan qog'ozni quyidagicha ko'rsatdi:

// HTML element
// CSS qoidalari
#menyu {
   rang: qora;
}
.peshat-menyu {
   rang: yashil;
}
div {
   rang: ko'k;
}

Mening vazifam ko'rganlarimni tushuntirish edi. Men darhol HTML elementini aniqladim va suhbatdoshlarga elementning id va sinfidan HTML elementini tanlash uchun CSS-da foydalanish mumkinligini aytdim. U erdan men CSS kaskad ekanligini tushuntirdim, ya'ni odatda oxirgi qoida qo'llaniladi. Biroq, bu holda selektsionerlar turli xil og'irliklarga ega. Og'irlik tartibi quyidagicha bo'ladi: id> class> element.

Bu degani, yuqoridagi misolda HTML elementiga qora rang qo'llaniladi.

Texnik intervyu № 4

Bu mening so'nggi texnik suhbatim. Hali asabiy tortishish paytida men hozir unga ko'nikib qolgan edim. Bu erda biz muhokama qilgan narsalarning qisqasi:

  • Asosiy veb-saytni yaratish. Komponentlarni aniqlang.
  • Qanday javob berardingiz?
  • Matnni vertikal va gorizontal ravishda qanday markazga o'tkazasiz?
  • CSS qutisi modeli nima? Kontent qutisi va chegara qutisi o'rtasidagi farq nima?
  • Ikki va uchlik tenglik o'rtasidagi farq nima?
  • React nima yaxshi?
  • Massiv.forEach for for loopdan nima foyda? Siz ko'chadan foydalanishingiz kerak bo'lgan holatlar mavjudmi?

Kodlashda qiyinchilik turli darajadagi so'zlarni terish funktsiyasini yaratish edi. Tasavvur qiling-a, siz faqat 20 ta belgini ekranda joylashtirasiz va agar siz uning tepasidan chiqsangiz, siz yangi qatorda boshlashingiz kerak.

Bu savolga mening asl echimim qatorni ajratish, hisoblagich va modulli operator yordamida sonning 20 bo'lganligini aniqlash, keyin qatorga yangi satr belgi qo'yish va qatorga qo'shilishni o'z ichiga oldi.

Keyinchalik vazifa faqat to'liq so'zlarni bitta satrda bo'lishiga imkon berish uchun kuchaytirildi. Agar bitta so'z umumiy sonning 20 tadan oshib ketishiga olib kelsa, siz ushbu so'zdan oldin yangi qator kiritishingiz kerak bo'ladi.

Men intervyuda hammasini hal qilmadim, lekin to'g'ri yo'ldan ketdim. Men noaniq bo'lganimda MDN dan foydalandim va men yaxshi o'sishga erishdim.

Va bu etarli edi.

Shunga qaramay men buni yozib qo'ya olmadim, agar sizni qiziqtirsa, mana bu erda echilgan variant:

wordWrap (str) {funktsiyasi
 ruxsat totalCount = 0;
 const arr = str.split (''), formatlanganStr = [];
 
 arr.forEach ((so'z, indeks) => {
  totalCount + = word.length;
  if (totalCount> = 20) {
     formattedStr.push ('\ n', so'z, '');
     totalCount = word.length;
  } else {
     formattedStr.push (so'z, '');
  }
 });
 return formattedStr.join ('');
}

Xulosa

Agar buni shu yerda oxirigacha qilgan bo'lsangiz, tabriklaymiz. Bu uzoq edi. Men buni sizga o'xshagan kishiga yordam berishiga umid qilib, iloji boricha ma'lumotga ega bo'lishga harakat qildim.

Buning natijasi men hech qachon o'ylaganimdek hech qanday vaziyatga tushmadi. Oxirida stolda 5 ta taklifni oldim. Hatto bitta yirik kompaniya menga raqibning taklifiga asoslanib, menga "ko'r" taklif qildi. Texnikani birinchi bo'lib topshirgan kompaniyani tanladim, chunki bu menga eng mos keladi deb o'ylardim.

Texnik intervyu og'ir ruhiy sinov bo'lishi mumkin. Sizga qarshi chiqishadi, sizni konfor zonangizdan chiqarishadi va bu juda yaxshi narsa. Bu sizning o'sishingizga yordam beradi. Bu sizni yaxshilaydi.

Va agar tayyorgarlik ko'rsangiz, bunga tayyor bo'lasiz.

Shunday qilib, o'z tajribamdan kelib chiqib, texnik suhbatdan uyalmang. Uni qo'ymang, chunki siz muvaffaqiyatsiz bo'lgan. Bu sizning ishlab chiquvchingiz ekanligingizning o'lchovi deb o'ylamang. Bunday emas. Bu shunchaki kompaniyangiz unumdorligini o'lchashingiz kerak bo'lgan eng past asbobdir.

Ish uchun murojaat qiling. Yaxshi tayyorlang. Texnik suhbatlarga qatnashing. Xatolardan o'rganing. Takrorlang.

Agar buni qilsangiz, sizga kafolat beraman, muvaffaqiyatga erishasiz.

Men siz uchun ildiz otmoqdaman.