Intervijas tehnoloÄ£iju uzÅÄmumos jau sen ir bijuÅ”as pilsÄtas runas. Tam nevajadzÄtu bÅ«t pÄrsteidzoÅ”am ā sekmÄ«ga intervijas nokÄrtoÅ”ana sniedz iespÄju iegÅ«t labu darbu. Bet tas nav tik vienkÄrÅ”i, jo bieži vien ir jÄatrisina sarežģītas problÄmas.
TurklÄt visbiežÄk lielÄkÄ daļa Å”o uzdevumu nav saistÄ«ti ar darbu, ko pretendents veiks, bet tie joprojÄm ir jÄatrisina. Dažreiz jums tas jÄdara uz tÄfeles, nepÄrbaudot Google vai kÄdu citu avotu. JÄ, situÄcija pamazÄm mainÄs, un daži uzÅÄmumi atsakÄs no Å”ÄdÄm intervijÄm, taÄu daudzi darba devÄji joprojÄm pieturas pie Ŕīs tradÄ«cijas. Å is raksts ir veltÄ«ts tipisku JavaScript uzdevumu analÄ«zei, kas bieži tiek izmantoti kÄ uzdevumi darba meklÄtÄjiem.
Galvenais ir sagatavoties iepriekÅ”. PÄrbaudiet, cik labi atceraties algoritmus un datu struktÅ«ras, un uzlabojiet savas zinÄÅ”anas jomÄs, kuras nepÄrzinÄt. Ir daudzas tieÅ”saistes platformas, kas var palÄ«dzÄt sagatavoties intervijÄm. MÄs konsultÄjam GeeksforGeeks, Pramp, IntervÄÅ”ana.io Šø KodsSignÄls.
Ir vÄrts iemÄcÄ«ties skaļi pateikt lÄmumu. Ieteicams pretendentiem pastÄstÄ«t par to, ko darÄt, nevis tikai rakstÄ«t uz tÄfeles (vai ierakstÄ«t kodu datorÄ, arÄ« klusi). TÄdÄ veidÄ, ja kļūdÄties kodÄ, bet risinÄjums kopumÄ ir pareizs, varat palielinÄt savas izredzes gÅ«t panÄkumus.
Pirms sÄkat to risinÄt, jums ir jÄsaprot problÄma. Dažos gadÄ«jumos jÅ«s varat saprast uzdevumu virspusÄji un pÄc tam noiet nepareizo ceļu. IespÄjams, ir vÄrts uzdot intervÄtÄjam dažus precizÄjoÅ”us jautÄjumus.
Jums ir jÄpraktizÄ koda rakstÄ«Å”ana ar roku, nevis datorÄ. GadÄs, ka interviju laikÄ pretendentam tiek izdalÄ«ts marÄ·ieris un tÄfele, kur nav nekÄdu mÄjienu vai automÄtiskas formatÄÅ”anas. MeklÄjot risinÄjumu, ir vÄrts pierakstÄ«t savu kodu uz papÄ«ra lapas vai tieÅ”i uz tÄfeles. Ja visu paturÄsi savÄ galvÄ, vari aizmirst kaut ko svarÄ«gu.
VeidÅu uzdevumi JavaScript
IespÄjams, ka daži no Å”iem uzdevumiem jums jau ir pazÄ«stami. JÅ«s vai nu esat bijuÅ”as intervijas, kurÄs jums bija jÄatrisina kaut kas lÄ«dzÄ«gs, vai arÄ« praktizÄjÄt tÄs, mÄcoties JavaScript. Nu, tagad ir pienÄcis laiks tos atrisinÄt vÄlreiz un detalizÄti izskaidrot procesu.
Palindroms
Palindroms ir vÄrds, teikums vai rakstzÄ«mju secÄ«ba, kas tiek lasÄ«ta tieÅ”i vienÄdi gan parastajÄ virzienÄ, gan pretÄjÄ virzienÄ. PiemÄram, āAnnaā ir palindroms, bet āgaldsā un āJÄnisā nav.
IestudÄjums
Dota virkne; jums ir jÄuzraksta funkcija, kas ļauj atgriezt patieso vÄrtÄ«bu, ja virkne ir palindroms, un false, ja tÄ nav. Å ajÄ gadÄ«jumÄ jums ir jÄÅem vÄrÄ atstarpes un pieturzÄ«mes.
GalvenÄ ideja Å”eit ir apgriezt virkni. Ja āapgrieztÄā virkne ir pilnÄ«gi identiska oriÄ£inÄlajai, tad esam saÅÄmuÅ”i palindromu un funkcijai ir jÄatgriež patiesa. Ja nÄ, tad viltus.
Å Ä·Ä«dums
Å eit ir kods, kas atrisina palindromu.
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('')
}
Pirmais solis ir pÄrveidot ievades virknes rakstzÄ«mes uz mazajiem burtiem. TÄ ir garantija, ka programma salÄ«dzinÄs paÅ”us rakstzÄ«mes, nevis lietu vai ko citu.
Otrais solis ir mainÄ«t lÄ«niju. Tas nav grÅ«ti izdarÄms: tas ir jÄpÄrvÄrÅ” masÄ«vÄ, izmantojot .split() metodi (String bibliotÄka). PÄc tam mÄs apgriežam masÄ«vu, izmantojot .reverse() (masÄ«va bibliotÄka). PÄdÄjais solis ir pÄrvÄrst reverso masÄ«vu par virkni, izmantojot .join() (masÄ«va bibliotÄka).
Tagad viss, kas jums jÄdara, ir salÄ«dzinÄt āapgrieztoā virkni ar sÄkotnÄjo virkni, atgriežot rezultÄtu patiess vai nepatiess.
FizzBuzz
Viens no populÄrÄkajiem uzdevumiem intervijÄs.
IestudÄjums
Jums ir jÄraksta funkcija, kas konsolÄ drukÄ skaitļus no 1 lÄ«dz n, kur n ir vesels skaitlis, ko funkcija izmanto kÄ parametru, ar Å”Ädiem nosacÄ«jumiem:
izejas fizz, nevis reizinÄtÄju 3;
izvadīt buzz, nevis skaitļus, kas ir 5 reizes;
fizzbuzz izvade, nevis skaitļi, kas ir gan 3, gan 5 reizinÄtÄji.
PiemÄrs
Fizzbuzz (5)
PiedzÄ«vojiet efektÄ«vu rezultÄtu spÄku
1
2
// fizz
4
//baumas
AnalizÄsim uzdevumu
Galvenais Å”eit ir veids, kÄ atrast reizinÄtÄjus, izmantojot JavaScript. To var realizÄt, izmantojot moduļa operatoru vai atlikumu - %, kas ļauj parÄdÄ«t atlikumu, sadalot divus skaitļus. Ja atlikums ir 0, tas nozÄ«mÄ, ka pirmais skaitlis ir otrÄ reizinÄts.
12% 5 // 2 -> 12 nav 5 reizinÄjums
12% 3 // 0 -> 12 ir 3 reizinÄjums
TÄtad, ja jÅ«s dalÄt 12 ar 5, jÅ«s iegÅ«stat 2 ar atlikumu 2. Ja dalÄt 12 ar 3, jÅ«s iegÅ«stat 4 ar atlikumu 0. PirmajÄ gadÄ«jumÄ 12 nav reizinÄts ar 5, otrajÄ gadÄ«jumÄ. , 12 ir 3 reizinÄjums.
Å Ä·Ä«dums
OptimÄlais risinÄjums bÅ«tu Å”Äds kods:
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)
}
}
}
Funkcija veic nepiecieÅ”amÄs pÄrbaudes, izmantojot nosacÄ«jumu paziÅojumus, un rada lietotÄjam nepiecieÅ”amo rezultÄtu. ProblÄmÄ ir vÄrts pievÄrst uzmanÄ«bu if...else priekÅ”rakstu secÄ«bai: sÄciet ar dubultu nosacÄ«jumu (&&) un beidziet ar gadÄ«jumu, kad nevarÄja atrast vairÄkus skaitļus. RezultÄtÄ mÄs aptveram visas iespÄjas.
Anagramma
Å is ir vÄrda nosaukums, kurÄ ir visi cita vÄrda burti vienÄ un tajÄ paÅ”Ä ciparÄ, bet citÄ secÄ«bÄ.
IestudÄjums
Mums ir jÄraksta funkcija, kas pÄrbauda, āāvai divas virknes ir anagrammas, un reÄ£istram nav nozÄ«mes. Tiek skaitÄ«tas tikai rakstzÄ«mes; atstarpes vai pieturzÄ«mes netiek Åemtas vÄrÄ.
Lai saglabÄtu anagrammas datus, jÄizvÄlas tÄda struktÅ«ra kÄ JavaScript objekta literÄls. Galvenais Å”ajÄ gadÄ«jumÄ ir burta raksturs, vÄrtÄ«ba ir tÄ atkÄrtojumu skaits paÅ”reizÄjÄ rindÄ.
Ir arī citi nosacījumi:
Jums ir jÄpÄrliecinÄs, ka, salÄ«dzinot, netiek Åemts vÄrÄ burtu reÄ£istrs. MÄs vienkÄrÅ”i pÄrvÄrÅ”am abas virknes uz mazajiem vai lielajiem burtiem.
MÄs izslÄdzam no salÄ«dzinÄjuma visas personas, kas nav rakstzÄ«mes. VislabÄk strÄdÄt ar regulÄras izteiksmes.
Å Ä·Ä«dums
// 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
}
PievÄrsiet uzmanÄ«bu lietoÅ”anai Object.keys() augstÄk esoÅ”ajÄ fragmentÄ. Å Ä« metode atgriež masÄ«vu, kurÄ ir nosaukumi vai atslÄgas tÄdÄ paÅ”Ä secÄ«bÄ, kÄdÄ tie parÄdÄs objektÄ. Å ajÄ gadÄ«jumÄ masÄ«vs bÅ«s Å”Äds:
['f', 'i', 'n', 'd', 'e', āā"r"]
TÄdÄ veidÄ mÄs iegÅ«stam objekta Ä«paŔības, neveicot lielapjoma cilpu. ProblÄmÄ varat izmantot Å”o metodi ar rekvizÄ«tu .length, lai pÄrbaudÄ«tu, vai abÄs virknÄs ir vienÄds rakstzÄ«mju skaits ā tÄ ir svarÄ«ga anagrammu iezÄ«me.
MeklÄt patskaÅus
Diezgan vienkÄrÅ”s uzdevums, kas bieži parÄdÄs intervijÄs.
IestudÄjums
Jums ir jÄraksta funkcija, kas izmanto virkni kÄ argumentu un atgriež virknÄ ietverto patskaÅu skaitu.
PatskaÅi ir āaā, āeā, āiā, āoā, āuā.
PiemÄrs:
atrast PatskaÅus('sveiki') // ā> 2
atrast PatskaÅus('kÄpÄc') // ā> 0
Ir svarÄ«gi pievÄrst uzmanÄ«bu metodes .includes() lietoÅ”anai. Tas ir pieejams gan virknÄm, gan masÄ«viem. Tas jÄizmanto, lai noteiktu, vai masÄ«vÄ ir noteikta vÄrtÄ«ba. Å Ä« metode atgriež true, ja masÄ«vÄ ir norÄdÄ«tÄ vÄrtÄ«ba, un false, ja tÄ nav.
Tas izmanto .match() metodi, kas ļauj Ä«stenot efektÄ«vu meklÄÅ”anu. Ja regulÄrÄ izteiksme kÄ metodes arguments tiek atrasta norÄdÄ«tajÄ virknÄ, tad atgrieÅ”anas vÄrtÄ«ba ir atbilstoÅ”u rakstzÄ«mju masÄ«vs. Nu, ja nav atbilstÄ«bas, tad .match() atgriež nulli.
FibonaÄi
Klasisks uzdevums, ko var atrast intervijÄs dažÄdos lÄ«meÅos. Ir vÄrts atcerÄties, ka FibonaÄi secÄ«ba ir skaitļu virkne, kur katrs nÄkamais ir iepriekÅ”Äjo divu summa. TÄtad pirmie desmit skaitļi izskatÄs Å”Ädi: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.
IestudÄjums
Jums ir jÄraksta funkcija, kas atgriež n-to ierakstu noteiktÄ secÄ«bÄ, kur n ir skaitlis, kas tiek nodots funkcijai kÄ arguments.
fibonaÄi(3) // ā> 2
Å is uzdevums ietver cilpas izstaigÄÅ”anu argumentÄ norÄdÄ«to reižu skaitu, atgriežot vÄrtÄ«bu attiecÄ«gajÄ pozÄ«cijÄ. Å is problÄmas izvirzÄ«Å”anas veids prasa izmantot cilpas. Ja tÄ vietÄ izmantojat rekursiju, tas var iepriecinÄt intervÄtÄju un dot jums dažus papildu punktus.
Å Ä·Ä«dums
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]
}
RezultÄtu masÄ«vÄ pirmie divi skaitļi ir ietverti sÄrijÄ, jo katrs ieraksts secÄ«bÄ ir iepriekÅ”Äjo divu skaitļu summa. PaÅ”Ä sÄkumÄ nav divu skaitļu, kurus var Åemt, lai iegÅ«tu nÄkamo numuru, tÄpÄc cilpa nevar tos Ä£enerÄt automÄtiski. Bet, kÄ zinÄms, pirmie divi skaitļi vienmÄr ir 0 un 1. TÄpÄc rezultÄtu masÄ«vu var inicializÄt manuÄli.
Kas attiecas uz rekursiju, viss ir vienkÄrÅ”Äk un vienlaikus sarežģītÄk:
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)
}
MÄs turpinÄm izsaukt fibonaÄi (), kÄ argumentus nododot arvien mazÄkus skaitļus. MÄs apstÄjamies, kad nodotais arguments ir 0 vai 1.
secinÄjums
VisticamÄk, jÅ«s jau esat saskÄries ar kÄdu no Å”iem uzdevumiem, ja esat intervÄts par frontend vai JavaScript izstrÄdÄtÄja darbu (it Ä«paÅ”i, ja tas ir junioru lÄ«menÄ«). Bet, ja jÅ«s ar tiem neesat saskÄries, tie var bÅ«t noderÄ«gi nÄkotnÄ - vismaz vispÄrÄjai attÄ«stÄ«bai.