L-intervisti f'kumpaniji tat-teknoloġija ilhom li jitkellmu fil-belt. Dan m'għandux ikun sorprendenti - jekk tgħaddi b'suċċess intervista jagħtik l-opportunità li tikseb impjieg tajjeb. Iżda dan mhux daqshekk sempliċi, peress li spiss jeħtieġ li jiġu solvuti problemi kumplessi.
Barra minn hekk, ħafna drabi, ħafna minn dawn il-kompiti mhumiex relatati max-xogħol li l-applikant se jwettaq, iżda xorta jridu jiġu solvuti. Xi drabi trid tagħmel dan fuq il-bord, mingħajr ma tiċċekkja ma 'Google jew kwalunkwe sors ieħor. Iva, is-sitwazzjoni qed tinbidel gradwalment, u xi kumpaniji qed jabbandunaw tali intervisti, iżda ħafna min iħaddem għadu jaderixxi ma 'din it-tradizzjoni. Dan l-artikolu huwa ddedikat għall-analiżi tal-kompiti JavaScript tipiċi li spiss jintużaw bħala kompiti għal dawk li qed ifittxu xogħol.
Infakkrukom:għall-qarrejja kollha ta '"Habr" - skont ta' 10 rublu meta tirreġistra fi kwalunkwe kors ta 'Skillbox billi tuża l-kodiċi promozzjonali "Habr".
Il-ħaġa prinċipali hija li tipprepara sewwa għall-intervista tiegħek.
Iva, qabel ma nibdew inħarsu lejn il-kompiti, ejja nħarsu lejn xi suġġerimenti ġenerali għat-tħejjija tal-intervisti.
Il-ħaġa prinċipali hija li tipprepara minn qabel. Ittestja kemm tiftakar l-algoritmi u l-istrutturi tad-dejta, u ttejjeb l-għarfien tiegħek f'oqsma li m'intix familjari wisq magħhom. Hemm ħafna pjattaformi online li jistgħu jgħinuk tipprepara għall-intervisti. Nagħtu parir geeksforgeeks, Pramp, Interviewing.io и KodiċiSinjal.
Ta’ min jitgħallem ngħid id-deċiżjoni b’leħen għoli. Huwa rakkomandabbli li tgħid lill-applikanti dwar dak li tagħmel, u mhux biss tikteb fuq il-bord (jew ittajpja kodiċi fil-kompjuter, ukoll fis-skiet). Dan il-mod, jekk inti tagħmel żball fil-kodiċi, iżda s-soluzzjoni hija ġeneralment korretta, inti tista 'żżid iċ-ċansijiet tiegħek ta' suċċess.
Trid tifhem il-problema qabel tibda ssolviha. F'xi każijiet, tista 'tifhem biċċa xogħol superfiċjalment u mbagħad tmur fit-triq ħażina. Jista 'jkun ta' min jistaqsi ftit mistoqsijiet ta 'kjarifika lill-intervistatur.
Trid tipprattika l-kitba tal-kodiċi bl-idejn, mhux fuq PC. Jiġri li waqt l-intervisti l-applikant jingħata marker u whiteboard, fejn ma jkunx hemm ħjiel jew ifformattjar awtomatiku. Meta tfittex soluzzjoni, ta 'min tikteb il-kodiċi tiegħek fuq biċċa karta jew direttament fuq il-bord. Jekk iżżomm kollox f’rasek, tista’ tinsa xi ħaġa importanti.
Ħidmiet ta' mudell f'JavaScript
Xi wħud minn dawn il-kompiti probabbilment huma diġà familjari għalik. Int jew kellek intervisti fejn kellek issolvi xi ħaġa simili, jew ipprattikajt fuqhom waqt li tgħallem JavaScript. Ukoll, issa wasal iż-żmien li ssolvihom mill-ġdid, u bi spjegazzjoni dettaljata tal-proċess.
Palindromu
Palindromu huwa kelma, sentenza jew sekwenza ta’ karattri li tinqara eżattament l-istess kemm fid-direzzjoni tas-soltu kif ukoll fid-direzzjoni opposta. Pereżempju, "Anna" hija palindromu, iżda "mejda" u "John" mhumiex.
Twaqqif
Mogħtija spaga; trid tikteb funzjoni li tippermettilek li tirritorna vera jekk is-sekwenza hija palindromu, u falza jekk le. F'dan il-każ, trid tqis l-ispazji u l-marki tal-punteġġjatura.
palindrome('racecar') === veru
palindrome('tabella') === falza
Ejja nanalizzaw il-kompitu
L-idea prinċipali hawnhekk hija li ireġġa' lura s-sekwenza. Jekk is-sekwenza "reverse" hija kompletament identika għal dik oriġinali, allura rċevejna palindromu u l-funzjoni għandha tirritorna vera. Jekk le, falza.
deċiżjoni
Hawn hu l-kodiċi li jsolvi l-palindrom.
const palindrome = str => {
// turn the string to lowercase
str = str.toLowerCase()
// reverse input string and return the result of the
// comparisong
return str === str.split('').reverse().join('')
}
L-ewwel pass huwa li tikkonverti l-karattri fis-sekwenza tad-dħul f'ittri żgħar. Din hija garanzija li l-programm se jqabbel il-karattri nfushom, u mhux każ jew xi ħaġa oħra.
It-tieni pass huwa li taqleb il-linja. Dan mhux diffiċli li tagħmel: għandek bżonn tikkonvertih f'firxa billi tuża l-metodu .split() (Librerija String). Imbagħad inreġġgħu lura l-array billi tuża .reverse() (Librerija Array). L-aħħar pass huwa li tikkonverti l-firxa tar-reverse għal string billi tuża .join() (Librerija Array).
Issa kull ma trid tagħmel hu li tqabbel is-sekwenza "reverse" mal-sekwenza oriġinali, u tirritorna r-riżultat veru jew falz.
FizzBuzz
Wieħed mill-aktar kompiti popolari fl-intervisti.
Twaqqif
Ikollok bżonn tikteb funzjoni li tipprintja numri minn 1 sa n fuq il-console, fejn n huwa numru sħiħ li l-funzjoni tieħu bħala parametru, bil-kundizzjonijiet li ġejjin:
output fizz minflok multipli ta '3;
output buzz minflok numri li huma multipli ta '5;
output fizzbuzz minflok numri li huma multipli kemm ta’ 3 kif ukoll ta’ 5.
Eżempju
Fizzbuzz(5)
Riżultat
// 1
// 2
// fizz
// 4
//buzz
Ejja nanalizzaw il-kompitu
Il-ħaġa prinċipali hawnhekk hija mod kif issib multipli billi tuża JavaScript. Jista 'jiġi implimentat bl-użu tal-operatur tal-modulu jew il-bqija - %, li jippermettilek turi l-bqija meta taqsam żewġ numri. Jekk il-bqija huwa 0, dan ifisser li l-ewwel numru huwa multiplu tat-tieni.
12% 5 // 2 -> 12 mhuwiex multiplu ta' 5
12% 3 // 0 -> 12 huwa multiplu ta' 3
Allura, jekk taqsam 12 b'5, ikollok 2 b'bqija ta' 2. Jekk taqsam 12 bi 3, ikollok 4 b'bqija ta '0. Fl-ewwel każ, 12 mhuwiex multiplu ta' 5, fit-tieni. , 12 huwa multiplu ta' 3.
deċiżjoni
L-aħjar soluzzjoni tkun il-kodiċi li ġej:
const fizzBuzz = num => {
for(let i = 1; i <= num; i++) {
// check if the number is a multiple of 3 and 5
if(i % 3 === 0 && i % 5 === 0) {
console.log('fizzbuzz')
} // check if the number is a multiple of 3
else if(i % 3 === 0) {
console.log('fizz')
} // check if the number is a multiple of 5
else if(i % 5 === 0) {
console.log('buzz')
} else {
console.log(i)
}
}
}
Il-funzjoni twettaq il-kontrolli meħtieġa billi tuża dikjarazzjonijiet kundizzjonali u tipproduċi r-riżultat meħtieġ mill-utent. Fil-problema, ta 'min joqgħod attent għall-ordni tad-dikjarazzjonijiet if... else: ibda b'kundizzjoni doppja (&&) u tispiċċa bil-każ fejn ma setgħux jinstabu numri multipli. Bħala riżultat, aħna nkopru l-għażliet kollha.
Anagramma
Dan huwa l-isem għal kelma li fiha l-ittri kollha ta 'kelma oħra fl-istess numru, iżda f'ordni differenti.
Twaqqif
Għandna bżonn niktbu funzjoni li tivverifika jekk żewġ kordi humiex anagrammi, u l-każ ma jimpurtax. Il-karattri biss jingħaddu; spazji jew marki tal-punteġġjatura mhumiex ikkunsidrati.
anagramma('finder', 'Ħabib') —> veru
anagramma('hello', 'bye') —> falza
Ejja nanalizzaw il-kompitu
L-importanti li għandek tikkonsidra hawnhekk hija li trid tiċċekkja kull ittra fiż-żewġ linji ta' input u n-numru tagħhom f'kull linja.
Biex taħżen id-dejta tal-anagramma, għandek tagħżel struttura bħal oġġett JavaScript litterali. Iċ-ċavetta f'dan il-każ hija l-karattru tal-ittra, il-valur huwa n-numru tar-repetizzjonijiet tagħha fil-linja kurrenti.
Hemm kundizzjonijiet oħra:
Trid tiżgura li l-każ tal-ittri ma jitqiesx meta tqabbel. Aħna sempliċiment nikkonvertu ż-żewġ kordi f'ittri żgħar jew kbar.
Aħna neskludu n-non-karattri kollha mit-tqabbil. L-aħjar biex taħdem magħhom espressjonijiet regolari.
deċiżjoni
// helper function that builds the
// object to store the data
const buildCharObject = str => {
const charObj = {}
for(let char of str.replace(/[^w]/g).toLowerCase()) {
// if the object has already a key value pair
// equal to the value being looped over,
// increase the value by 1, otherwise add
// the letter being looped over as key and 1 as its value
charObj[char] = charObj[char] + 1 || 1
}
return charObj
}
// main function
const anagram = (strA, strB) => {
// build the object that holds strA data
const aCharObject = buildCharObject(strA)
// build the object that holds strB data
const bCharObject = buildCharObject(strB)
// compare number of keys in the two objects
// (anagrams must have the same number of letters)
if(Object.keys(aCharObject).length !== Object.keys(bCharObject).length) {
return false
}
// if both objects have the same number of keys
// we can be sure that at least both strings
// have the same number of characters
// now we can compare the two objects to see if both
// have the same letters in the same amount
for(let char in aCharObject) {
if(aCharObject[char] !== bCharObject[char]) {
return false
}
}
// if both the above checks succeed,
// you have an anagram: return true
return true
}
Oqgħod attent għall-użu Object.keys() fis-snippet hawn fuq. Dan il-metodu jirritorna firxa li fiha ismijiet jew ċwievet fl-istess ordni li jidhru fl-oġġett. F'dan il-każ l-array se jkun bħal dan:
['f', 'i', 'n', 'd', 'e', 'r']
B'dan il-mod inġibu l-proprjetajiet tal-oġġett mingħajr ma jkollna nagħmlu linja bl-ingrossa. Fi problema, tista 'tuża dan il-metodu bil-proprjetà .length biex tivverifika jekk iż-żewġ kordi għandhomx l-istess numru ta' karattri - din hija karatteristika importanti tal-anagrammi.
Fittex vokali
Kompitu pjuttost sempliċi li ħafna drabi joħroġ fl-intervisti.
Twaqqif
Ikollok bżonn tikteb funzjoni li tieħu sekwenza bħala argument u tirritorna n-numru ta 'vokali li jinsabu fis-sekwenza.
Il-vokali huma “a”, “e”, “i”, “o”, “u”.
Huwa importanti li tingħata attenzjoni għall-użu tal-metodu .includes(). Huwa disponibbli kemm għall-kordi kif ukoll għall-arrays. Għandu jintuża biex jiddetermina jekk array fihx ċertu valur. Dan il-metodu jirritorna vera jekk il-firxa fiha l-valur speċifikat, u falza jekk le.
Dan juża l-metodu .match(), li jippermettilek li timplimenta tfittxija effiċjenti. Jekk espressjoni regolari bħala argument ta' metodu tinstab ġewwa s-sekwenza speċifikata, allura l-valur tar-ritorn huwa firxa ta' karattri li jaqblu. Ukoll, jekk ma jkunx hemm logħbiet, allura .match() jirritorna null.
fibonacci
Kompitu klassiku li wieħed jista’ jsib f’intervisti f’diversi livelli. Ta’ min ifakkar li s-sekwenza ta’ Fibonacci hija serje ta’ numri fejn kull wieħed sussegwenti huwa s-somma tat-tnejn ta’ qabel. Allura, l-ewwel għaxar numri jidhru hekk: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.
Twaqqif
Ikollok bżonn tikteb funzjoni li tirritorna r-rekord nth f'ċerta sekwenza, b'n ikun in-numru li jiġi mgħoddi bħala argument għall-funzjoni.
fibonacci(3) // —> 2
Dan il-kompitu jinvolvi l-mixi permezz ta 'linja n-numru ta' drabi speċifikat fl-argument, ir-ritorn tal-valur fil-pożizzjoni xierqa. Dan il-mod kif toħloq il-problema jeħtieġ l-użu ta 'linji. Jekk tuża r-rikors minflok, tista' togħġob lill-intervistatur u tagħtik ftit punti żejda.
deċiżjoni
const fibonacci = num => {
// store the Fibonacci sequence you're going
// to generate inside an array and
// initialize the array with the first two
// numbers of the sequence
const result = [0, 1]
for(let i = 2; i <= num; i++) {
// push the sum of the two numbers
// preceding the position of i in the result array
// at the end of the result array
const prevNum1 = result[i - 1]
const prevNum2 = result[i - 2]
result.push(prevNum1 + prevNum2)
}
// return the last value in the result array
return result[num]
}
Fil-firxa tar-riżultati, l-ewwel żewġ numri jinsabu fis-serje minħabba li kull entrata fis-sekwenza hija s-somma taż-żewġ numri preċedenti. Fil-bidu nett m'hemm l-ebda żewġ numri li jistgħu jittieħdu biex jiksbu n-numru li jmiss, għalhekk il-linja ma tistax tiġġenerahom awtomatikament. Iżda, kif nafu, l-ewwel żewġ numri huma dejjem 0 u 1. Għalhekk, tista 'iniżżalizza l-firxa tar-riżultati manwalment.
Fir-rigward tar-rikors, kollox huwa aktar sempliċi u aktar ikkumplikat fl-istess ħin:
const fibonacci = num => {
// if num is either 0 or 1 return num
if(num < 2) {
return num
}
// recursion here
return fibonacci(num - 1) + fibonacci(num - 2)
}
Nibqgħu nsejħu lil fibonacci(), ngħaddu numri dejjem iżgħar bħala argumenti. Nieqaf meta l-argument mgħoddi jkun 0 jew 1.
Output
X'aktarx, diġà ltqajt ma' xi wieħed minn dawn il-kompiti jekk ġejt intervistat għal xogħol ta' iżviluppatur frontend jew JavaScript (speċjalment jekk ikun fil-livell junior). Imma jekk ma ltqajtx magħhom, jistgħu jkunu utli fil-futur - għall-inqas għall-iżvilupp ġenerali.