5 Fadhbanna Coitianta Agallaimh JavaScript: Anailís agus Réitigh

5 Fadhbanna Coitianta Agallaimh JavaScript: Anailís agus Réitigh

Ón aistritheoir: d'fhoilsigh sé alt duit Maria Antonietta Perna, a labhraíonn faoi thascanna tipiciúil JavaScript, is minic a thairgtear iad d'iarratasóirí ar fhorbróirí le linn agallaimh. Beidh an t-alt úsáideach, ar an gcéad dul síos, do ríomhchláraitheoirí novice.

Is fada caint an bhaile ag agallaimh i gcomhlachtaí teicneolaíochta. Ní haon ionadh é seo - mar gheall ar chríochnú rathúil an agallaimh is féidir post maith a fháil. Ach nach bhfuil sé seo chomh héasca, mar go minic tá sé riachtanach chun fadhbanna casta a réiteach.

Thairis sin, is minic nach mbaineann an chuid is mó de na tascanna seo leis an obair a dhéanfaidh an t-iarratasóir, ach ní mór iad a réiteach fós. Uaireanta caithfidh tú é a dhéanamh ar an gclár, gan seiceáil le Google nó le foinse ar bith eile. Sea, tá an scéal ag athrú de réir a chéile, agus i roinnt cuideachtaí diúltaíonn siad agallaimh den sórt sin, ach tá go leor fostóirí fós ag cloí leis an traidisiún seo. Tá an t-alt seo dírithe ar anailís a dhéanamh ar thascanna tipiciúla JavaScript a úsáidtear go minic mar thascanna d’iarratasóirí.

Meabhraímid: do léitheoirí uile "Habr" - lascaine de 10 rúbal nuair a chláraíonn siad in aon chúrsa Scilbox ag baint úsáide as an gcód bolscaireachta "Habr".

Molann Skillbox: Cúrsa praiticiúil "Forbróir Soghluaiste OCP".

Is é an rud is mó a ullmhú go cúramach le haghaidh do agallaimh.

Sea, sula dtosaímid ar na tascanna a bhriseadh síos, déanaimis féachaint ar roinnt leideanna ginearálta maidir le hullmhú don agallamh.

Is é an rud is mó ná ullmhú roimh ré. Déan tástáil ar cé chomh maith is a chuimhníonn tú ar algartaim agus ar struchtúir sonraí, agus feabhsaigh do chuid eolais i réimsí nach bhfuil ró-eolach ort. Tá go leor ardán ar líne ann a chabhróidh leat ullmhú le haghaidh agallaimh. Molaimid geeksforgeeks, Pramp, Agallamh.io и Comhartha Cód.

Is fiú a fhoghlaim an cinneadh a fhuaimniú os ard. Tá sé inmholta a insint d'iarratasóirí cad atá á dhéanamh agat, agus ní hamháin scríobh ar an gclár (nó clóscríobh cód ar an ríomhaire, freisin go ciúin). Mar sin, má dhéanann tú botún sa chód, ach go bhfuil an réiteach ceart go ginearálta, is féidir leat do sheansanna rathúlachta a mhéadú.

Ní mór an fhadhb a thuiscint sular féidir tús a chur leis an réiteach. I gcásanna áirithe, is féidir leat an tasc a thuiscint go superfially agus ansin dul síos an cosán mícheart. B’fhéidir gurbh fhiú roinnt ceisteanna soiléirithe a chur ar an agallóir.

Ní mór duit cleachtadh a dhéanamh ar chód a scríobh de láimh, ní ar ríomhaire. Tarlaíonn sé go dtugtar marcóir agus clár bán don iarratasóir le linn agallaimh, nuair nach mbíonn aon leideanna nó formáidiú uathoibríoch ann. Agus tú ag lorg réiteach, is fiú do chód a scríobh síos ar phíosa páipéir nó go díreach ar an gclár. Má choinníonn tú gach rud i do cheann, seans go ndéanfaidh tú dearmad ar rud éigin tábhachtach.

Teimpléad tascanna i javascript

Is dócha go bhfuil cur amach agat ar chuid de na tascanna seo cheana féin. Ghlac tú agallaimh ina raibh ort rud éigin cosúil leis a réiteach, nó rinne tú cleachtadh orthu agus JavaScript á fhoghlaim. Bhuel, anois tá sé in am iad a réiteach arís, agus le míniú mionsonraithe ar an bpróiseas.

Palindrome

Is éard is palindrome ann ná focal, abairt, nó seicheamh carachtair a léann díreach ar an mbealach céanna sa ghnáththreo agus sa treo eile. Mar shampla, is palindrome é "Anna", ach níl "tábla" agus "John".

Ag stáitse

Dar le teaghrán; ní mór duit feidhm a scríobh a ligeann duit filleadh fíor más palindrome an teaghrán, agus bréagach mura bhfuil. Sa chás seo, ní mór spásanna agus marcanna poncaíochta a chur san áireamh.

palindrome ('carr rás') === fíor
palindrome ('tábla') === bréagach

Déanaimis anailís ar an tasc

Is é an príomh-smaoineamh anseo ná an sreang a smeach ar gcúl. Má tá an teaghrán "droim ar ais" go hiomlán comhionann leis an gceann bunaidh, ansin fuair muid palindrome agus ba chóir go mbeadh an fheidhm ar ais fíor. Mura bhfuil, bréagach.

cinneadh

Seo é an cód a ligeann duit an palindrome a réiteach.

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('')
}

Is é an chéad chéim ná na carachtair teaghrán ionchuir a thiontú go cás íochtair. Is ráthaíocht é seo go ndéanfaidh an clár comparáid dhíreach idir na carachtair iad féin, agus ní cás nó rud éigin eile.

Is é an dara céim ná an líne a aisiompú. Tá sé seo éasca a dhéanamh: ní mór duit é a thiontú go eagar ag baint úsáide as an modh .split() (leabharlann teaghrán). Ansin aisiompóimid an t-eagar ag baint úsáide as .reverse() (Leabharlann Eagar). Is í an chéim dheireanach ná an t-eagar droim ar ais a thiontú go teaghrán ag baint úsáide as .join() (Leabharlann Eagar).

Anois ní gá ach an teaghrán “droim ar ais” a chur i gcomparáid leis an gceann bunaidh, agus an toradh a thabhairt ar ais fíor nó bréagach.

fizzbuzz

Ceann de na tascanna is coitianta in agallaimh.

Ag stáitse

Tá sé riachtanach feidhm a scríobh a thaispeánann uimhreacha ó 1 go n don chonsól, áit ar slánuimhir é n a ghlacann an fheidhm mar pharaiméadar, leis na coinníollacha seo a leanas:

  • fizz aschuir in ionad iolraí de 3;
  • buzz aschuir in ionad uimhreacha ar iolraí de 5 iad;
  • aschur fizzbuzz in ionad uimhreacha atá ina iolraí de 3 agus 5 araon.

Sampla

Fizzbuzz(5)

Toradh

//1
//2
// fizz
//4
//buzz

Déanaimis anailís ar an tasc

Is é an rud is mó anseo an bealach chun iolraithe a aimsiú ag baint úsáide as JavaScript. Is féidir é a chur i bhfeidhm ag baint úsáide as an oibreoir modulus nó an chuid eile -%, a ligeann duit a thaispeáint ar an chuid eile nuair a roinnt dhá uimhir. Más é 0 an fuílleach, ciallaíonn sé gur iolra den dara uimhir an chéad uimhir.

12% 5 // 2 -> Ní iolraí de 12 é 5
12% 3 // 0 -> Is iolraí de 12 é 3

Mar sin, má roinneann tú 12 ar 5, gheobhaidh tú 2 agus fuílleach 2. Má roinneann tú 12 ar 3, gheobhaidh tú 4 agus fuílleach 0. Sa chéad chás, ní iolraí de 12 é 5, sa dara cás. Is iolraí de 12 é , 3.

cinneadh

Is é an cód seo a leanas an réiteach is fearr:

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)
    }
  }
}

Déanann an fheidhm na seiceálacha riachtanacha ag baint úsáide as ráitis choinníollach agus cuireann sé an toradh a theastaíonn ón úsáideoir ar fáil. Sa fhadhb, is fiú aird a thabhairt ar ord na ráiteas más rud é...eile: tosú le coinníoll dúbailte (&&) agus cuir deireadh leis an gcás nach bhféadfaí iluimhreacha a fháil. Mar thoradh air sin, clúdaímid na roghanna go léir.

Anagram

Seo ainm focal a bhfuil litreacha uile fhocail eile san uimhir chéanna, ach in ord eile.

Ag stáitse

Ní mór dúinn feidhm a scríobh a sheiceálann an bhfuil dhá theaghrán anagraim, agus ní hionann cás na litreacha. Ní áirítear ach carachtair; ní chuirtear spásanna nó marcanna poncaíochta san áireamh.

anagram ('aimsitheoir', 'Cara') --> fíor
anagram ('hello', 'beannacht') --> bréagach

Déanaimis anailís ar an tasc

Anseo tá sé tábhachtach a mheas go bhfuil sé riachtanach gach litir a sheiceáil ina dhá líne ionchuir agus a n-uimhir i ngach líne.

aimsitheoir -> f: 1 chara -> f:1
i: 1 r:1
n:1 i:1
d:1 e:1
e: 1 n:1
r:1 d:1

Chun sonraí anagram a stóráil, ba cheart duit struchtúr a roghnú mar réad JavaScript litriúil. Is í an eochair sa chás seo ná carachtar na litreach, is é an luach líon na n-athrá sa líne reatha.

Tá coinníollacha eile ann:

  • Ní mór duit a chinntiú nach gcuirtear cás na litreacha san áireamh agus tú ag déanamh comparáide. Níl le déanamh againn ach an dá theaghrán a thiontú go cás íochtair nó cás uachtair.
  • Eisiatar gach neamhcharachtair ón gcomparáid. Is fearr a bheith ag obair leis nathanna rialta.

cinneadh

// 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
}

Tabhair aird ar an úsáid eochracha.object() sa ghearrthóg thuas. Tugann an modh seo ar ais eagar ina bhfuil na hainmneacha nó eochracha san ord céanna agus atá siad sa réad. Sa chás seo, beidh an t-eagar mar seo:

['f', 'i', 'n', 'd', 'e', ​​'r']

Ar an mbealach seo faigheann muid airíonna an ruda gan lúb mór a dhéanamh. I dtasc, is féidir leat an modh seo a úsáid leis an maoin .length - chun a sheiceáil an bhfuil an líon céanna carachtair ag an dá teaghrán - is gné thábhachtach é seo d'anagramanna.

Cuardach guta

Tasc simplí go leor a thagann chun cinn go minic in agallaimh.

Ag stáitse

Ní mór duit feidhm a scríobh a ghlacann teaghrán mar argóint agus a thugann ar ais líon na ngutaí atá sa téad.
Is iad na gutaí “a”, “e”, “i”, “o”, “u”.

Sampla:

findVowels('hello') // --> 2
findVowels('why') // —> 0

cinneadh

Seo an rogha is éasca:

const findVowels = str => {
  let count = 0
  const vowels = ['a', 'e', 'i', 'o', 'u']
  for(let char of str.toLowerCase()) {
    if(vowels.includes(char)) {
      count++
    }
  }
  return count
}

Tá sé tábhachtach aird a thabhairt ar úsáid an mhodha .includes(). Tá sé ar fáil le haghaidh teaghráin agus eagair araon. Ba cheart é a úsáid chun a fháil amach an bhfuil luach áirithe in eagar. Filleann an modh seo fíor má tá an luach sonraithe san eagar agus bréagach ar shlí eile.

Tá réiteach níos giorra ar an bhfadhb ann freisin:

const findVowels = str => {
  const matched = str.match(/[aeiou]/gi)
  return matched ? matches.length : 0
}

Úsáidtear an modh .match() anseo, a ligeann duit cuardach éifeachtach a chur i bhfeidhm. Má aimsítear slonn rialta mar argóint mhodha laistigh den teaghrán sonraithe, ansin is sraith de charachtair a mheaitseálann an luach tuairisceáin. Bhuel, mura bhfuil aon chluiche ann, filleann .match() ar neamhní.

Fibonacci

Tasc clasaiceach is féidir a chomhlíonadh ag agallaimh ar leibhéil éagsúla. Is fiú a thabhairt chun cuimhne gur sraith uimhreacha é seicheamh Fibonacci, agus is ionann gach ceann ina dhiaidh sin agus suim an dá cheann roimhe sin. Mar sin, tá cuma mar seo ar na chéad deich uimhir: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Ag stáitse

Ní mór duit feidhm a scríobh a thugann an nú taifead ar ais i seicheamh áirithe, agus is uimhir í n a chuirtear ar aghaidh mar argóint don fheidhm.

Fibonacción(3) // —> 2

Is éard atá i gceist leis an tasc seo ná lúbadh tríd an líon uaireanta a shonraítear san argóint, agus an luach a thabhairt ar ais ag an suíomh cuí. Éilíonn an bealach seo chun an fhadhb a shocrú go n-úsáidfear lúba. Má úsáideann tú atarlú ina ionad sin, seans go dtaitníonn an t-agallóir leis agus go dtabharfaidh sé cúpla pointe breise duit.

cinneadh

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]
}

San eagar torthaí, tá an chéad dá uimhir i ndiaidh a chéile mar go bhfuil gach iontráil sa seicheamh comhdhéanta de shuim an dá uimhir roimhe sin. Níl aon dhá uimhir ag an tús is féidir a ghlacadh chun an chéad uimhir eile a fháil, mar sin ní féidir leis an lúb iad a ghiniúint go huathoibríoch. Ach, mar is eol dúinn, is iad 0 agus 1 an chéad dá uimhir i gcónaí. Dá bhrí sin, is féidir leat an t-eagar torthaí a thúsú de láimh.

Maidir le hathchúrsaíocht, tá gach rud níos simplí agus níos casta ag an am céanna:

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)
}

Coinneoimid ag glaoch Fibonacción(), ag dul i líon níos lú agus níos lú mar argóintí. Stopaimid nuair is é 0 nó 1 an argóint a ritheadh.

Aschur

Is dócha go bhfuil tú tar éis tabhairt faoi aon cheann de na tascanna seo cheana féin má bhí tú ag déanamh agallaimh le haghaidh poist mar fhorbróir tosaigh nó JavaScript (go háirithe más leibhéal sóisearach é). Ach murar tháinig tú trasna orthu, b’fhéidir go mbeidh siad áisiúil sa todhchaí - ar a laghad d’fhorbairt ghinearálta.

Molann Skillbox:

Foinse: will.com

Add a comment