Par un traducteur: Nous avons publié pour vous un article de Maria Perna (Maria Antonietta Perna), qui parle de tâches typiques en JavaScript , le plus souvent proposé aux demandeurs d'emploi-développeurs lors des entretiens. L'article sera utile principalement aux programmeurs débutants. Vous trouverez ci-dessous des exemples de résolution de problèmes, s'il vous semble qu'ils ne sont pas trop bons, et qu'il existe une meilleure option - suggérez une alternative dans les commentaires.Les entrevues dans les entreprises technologiques sont depuis longtemps un synonyme. Cela n'est pas surprenant - une entrevue réussie vous donne la possibilité d'obtenir un bon emploi. Mais ce n'est pas si simple, car il est souvent nécessaire de résoudre des problèmes complexes.
Et le plus souvent, la plupart de ces tâches ne sont pas liées au travail que le demandeur effectuera, mais elles doivent encore être résolues. Parfois, vous devez le faire sur le tableau, sans vérifier avec Google ou toute autre source. Oui, la situation évolue progressivement et dans certaines entreprises, ils refusent de tels entretiens, mais de nombreux employeurs adhèrent toujours à cette tradition. Cet article est consacré à l'analyse des tâches JavaScript typiques, qui sont souvent utilisées comme tâches pour les candidats.
Nous vous rappelons: pour tous les lecteurs de «Habr» - une remise de 10 000 roubles lors de l'inscription à un cours Skillbox en utilisant le code promo «Habr».
Skillbox recommande: Cours pratique "Mobile Developer PRO" .
L'essentiel est une préparation minutieuse de votre entretien
Oui, avant de commencer à démonter les tâches, regardons les conseils généraux pour se préparer à un entretien.
L'essentiel est de se préparer à l'avance. Vérifiez dans quelle mesure vous vous souvenez des algorithmes et des structures de données et acquérez des connaissances dans des domaines que vous ne connaissez pas trop. Il existe de nombreuses plateformes en ligne qui aident à préparer les entretiens. Nous recommandons
GeeksforGeeks ,
Pramp ,
Interviewing.io et
CodeSignal .
Il vaut la peine d'apprendre à prononcer la décision à haute voix. Il est conseillé de dire aux candidats ce que vous faites, et pas seulement d'écrire au tableau (ou de taper du code sur l'ordinateur, également en silence). Ainsi, si vous faites une erreur dans le code, mais que le cours de la décision est généralement correct, vous pouvez augmenter vos chances de succès.
Le problème doit être compris avant de procéder à la solution. Dans certains cas, vous pouvez superficiellement comprendre la tâche, puis aller dans le mauvais sens. Il peut être utile de poser quelques questions de clarification à l'intervieweur.
Vous devez vous entraîner à écrire du code manuellement, pas sur un PC. Il arrive que lors des entretiens, le candidat reçoive un marqueur et un tableau où il n'y a pas de conseils ou de formatage automatique. Lorsque vous recherchez une solution, écrivez votre code sur une feuille de papier ou directement au tableau. Si vous gardez tout à l'esprit, vous pouvez oublier quelque chose d'important.
Tâches de modèle JavaScript
Certaines de ces tâches vous sont probablement déjà familières. Soit vous avez effectué des entretiens où vous avez dû résoudre quelque chose de similaire, soit vous vous êtes exercé sur eux tout en apprenant JavaScript. Eh bien, il est maintenant temps de les résoudre à nouveau, avec une explication détaillée du processus.
PalindromeUn palindrome est un mot, une phrase ou une séquence de caractères qui peuvent être lus exactement de la même manière, à la fois dans le sens habituel et dans le sens inverse. Par exemple, "Anna" est un palindrome, mais "table" et "John" ne le sont pas.
Mise en scèneÉtant donné une chaîne; vous devez écrire une fonction qui vous permet de retourner true si la chaîne est un palindrome et false sinon. Dans ce cas, vous devez tenir compte des espaces et des signes de ponctuation.
palindrome («voiture de course») === vrai
palindrome ('table') === falseNous démontons la tâcheL'idée principale ici est d'inverser la ligne dans la direction opposée. Si la ligne «inverse» est complètement identique à l'original, alors nous avons un palindrome et la fonction devrait retourner vraie. Sinon, faux.
SolutionVoici le code qui résout le palindrome.
const palindrome = str => {
La première étape consiste à convertir les caractères de la chaîne d'entrée en minuscules. C'est une garantie que le programme comparera exactement les caractères eux-mêmes, et non le cas ou autre chose.
La deuxième étape consiste à inverser la ligne. C'est facile à faire: vous devez le convertir en un tableau en utilisant la méthode .split () (bibliothèque de chaînes). Ensuite, nous inversons le tableau à l'aide de .reverse () (bibliothèque de tableaux). La dernière étape consiste à convertir le tableau inverse en une chaîne à l'aide de .join () (bibliothèque de tableaux).
Maintenant, tout ce qui est nécessaire est de comparer la chaîne "inverse" avec l'original, en retournant le résultat vrai ou faux.
FizzbuzzL'une des tâches d'entrevue les plus populaires.
Mise en scèneIl est nécessaire d'écrire une fonction qui affiche des nombres de 1 à n dans la console, où n est un entier que la fonction prend en paramètre, avec les conditions suivantes:
- sortie de fizz au lieu de multiples de 3;
- sortie buzz au lieu de multiples de 5;
- sortie fizzbuzz au lieu de nombres qui sont des multiples de 3 et 5.
ExempleFizzbuzz (5)Résultat// 1
// 2
// pétillant
// 4
// buzzNous démontons la tâcheL'essentiel ici est la façon de rechercher plusieurs numéros à l'aide de JavaScript. Il peut être implémenté en utilisant l'opérateur du module ou le reste -%, ce qui vous permet d'afficher le reste lors de la division de deux nombres. Si le reste est 0, cela signifie que le premier nombre est un multiple du second.
12% 5 // 2 -> 12 n'est pas un multiple de 5
12% 3 // 0 -> 12 est multiple de 3Donc, si nous divisons 12 par 5, nous obtenons 2 avec le reste 2. Si nous divisons 12 par 3, nous obtenons 4 avec le reste 0. Dans le premier cas, 12 n'est pas un multiple de 5, dans le second - 12 est un multiple de 3.
SolutionLa meilleure solution serait le code suivant:
const fizzBuzz = num => { for(let i = 1; i <= num; i++) {
La fonction effectue les vérifications nécessaires à l'aide d'instructions conditionnelles et produit le résultat dont l'utilisateur a besoin. La tâche doit prêter attention à l'ordre des instructions if ... else: commencez par une double condition (&&) et terminez par le cas où plusieurs nombres sont introuvables. En conséquence, nous couvrons toutes les options.
AnagrammeIl s'agit du nom d'un mot qui contient toutes les lettres d'un autre mot dans la même quantité, mais dans un ordre différent.
Mise en scèneVous devez écrire une fonction qui vérifie si deux lignes sont des anagrammes et la casse des lettres n'a pas d'importance. Seuls les caractères sont pris en compte; les espaces ou la ponctuation ne sont pas pris en compte.
anagramme ('chercheur', 'ami') -> vrai
anagramme ('bonjour', 'au revoir') -> fauxNous démontons la tâcheIl est important de considérer qu'il est nécessaire de vérifier chaque lettre sur deux lignes de saisie et leur numéro sur chaque ligne.
finder -> f: 1 ami -> f: 1
i: 1 r: 1
n: 1 i: 1
d: 1 e: 1
e: 1 n: 1
r: 1 d: 1Pour stocker des données d'anagramme, vous devez choisir une structure telle qu'un littéral d'objet JavaScript. La clé dans ce cas est le symbole de la lettre, la valeur est le nombre de ses répétitions dans la ligne courante.
Il y a d'autres conditions:
- Vous devez vous assurer que la casse des lettres n'est pas prise en compte lors de la comparaison. Convertissez simplement les deux chaînes en minuscules ou en majuscules.
- Nous excluons de la comparaison tous les non-caractères. Il est préférable de travailler avec des expressions régulières .
Solution
Notez l'utilisation d'
Object.keys () dans l'extrait ci-dessus. Cette méthode renvoie un tableau contenant les noms ou les clés dans le même ordre qu'ils apparaissent dans l'objet. Dans ce cas, le tableau sera comme ceci:
['f', 'i', 'n', 'd', 'e', 'r']Ainsi, nous obtenons les propriétés de l'objet sans avoir besoin d'effectuer un cycle de volume. Dans la tâche, vous pouvez utiliser cette méthode avec la propriété .length - pour vérifier si le même nombre de caractères est sur les deux lignes - c'est une caractéristique importante des anagrammes.
Recherche de voyelleUne tâche assez simple que l'on retrouve souvent lors des entretiens.
Mise en scèneVous devez écrire une fonction qui prend une chaîne en argument et renvoie le nombre de voyelles contenues dans la chaîne.
Les voyelles sont "a", "e", "i", "o", "u".
Un exemple:findVowels ('bonjour') // -> 2
findVowels ('pourquoi') // -> 0SolutionVoici l'option la plus simple:
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 }
Il est important de faire attention à l'utilisation de la méthode .includes (). Il est disponible pour les chaînes et les tableaux. Il doit être utilisé pour déterminer si un tableau contient une valeur spécifique. Cette méthode renvoie true si le tableau contient la valeur spécifiée et false dans le cas contraire.
Il existe une solution plus concise au problème:
const findVowels = str => { const matched = str.match(/[aeiou]/gi) return matched ? matches.length : 0 }
Cela implique la méthode .match (), qui vous permet d'implémenter une recherche efficace. Si l'expression régulière en tant qu'argument de la méthode se trouve dans la chaîne spécifiée, le tableau de caractères correspondants devient la valeur renvoyée. Eh bien, s'il n'y a pas de correspondance, alors .match () renvoie null.
FibonacciUne tâche classique que l'on retrouve dans les entretiens à différents niveaux. Il convient de rappeler que la séquence de Fibonacci est une série de nombres, où chacun des suivants est la somme des deux précédents. Ainsi, les dix premiers nombres sont les suivants: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.
Mise en scèneNous devons écrire une fonction qui retourne le nième enregistrement dans une certaine séquence, et n est le nombre qui est passé en argument à la fonction.
fibonacci (3) // -> 2Cette tâche implique de boucler autant de fois que spécifié dans l'argument, en retournant la valeur à la position appropriée. Cette méthode de définition du problème nécessite l'utilisation de cycles. Si vous utilisez plutôt la récursivité, l'intervieweur peut l'aimer et vous donner quelques points supplémentaires.
Solution const fibonacci = num => {
Dans le tableau de résultats, les deux premiers nombres sont contenus dans une ligne, car chaque enregistrement de la séquence se compose de la somme des deux nombres précédents. Au tout début, il n'y a pas deux nombres que vous pouvez prendre pour obtenir le numéro suivant, donc le cycle ne peut pas les générer en mode automatique. Mais, comme nous le savons, les deux premiers nombres sont toujours 0 et 1. Par conséquent, vous pouvez initialiser un tableau de résultats manuellement.
Quant à la récursivité, tout ici est plus simple et plus compliqué à la fois:
const fibonacci = num => {
Nous continuons d'appeler fibonacci (), en passant en nombres toujours plus petits comme arguments. Nous nous arrêtons lorsque l'argument passé est 0 ou 1.
Conclusion
Très probablement, vous avez déjà rencontré l'une de ces tâches si vous avez été interviewé pour le travail du développeur frontend ou JavaScript (surtout s'il s'agit du niveau junior). Mais s'ils ne vous sont pas parvenus, ils peuvent vous être utiles à l'avenir - du moins pour le développement général.
Skillbox recommande: