JavaScript souligne neuf questions d'entrevue pour vous aider à lisser jeu

thèse 6287 Les mots, lorsque l'apprentissage tout au long attendu 20 Minutes ou plus

Source: Irvan Smith / Unsplash

Il est considéré comme le plus approprié pour la langue débutants. Une partie de la raison est que l'utilisation étendue de JavaScript dans Internet et en partie en raison de ses caractéristiques propres à rendre le code même si écrit en moins que parfait peut encore fonctionner: Que ce soit ou non un point-virgule ou moins de problèmes de gestion de la mémoire, qui sont contrairement à beaucoup d'autres langues comme strict, mais avant de commencer à apprendre, assurez-vous que vous connaissez déjà les tenants et les aboutissants de JavaScript, y compris des choses qui peut être fait automatiquement et les opérations « dans les coulisses ».

Cet article décrit certaines questions d'entrevue commune sur JavaScript, ainsi que des problèmes inattendus. Bien sûr, chaque entrevue est différent, vous ne pouvez pas rencontrer de tels problèmes. Mais plus vous en savez, mieux préparé.

Partie I: puzzle burst

Si on vous demande tout à coup les questions suivantes dans l'interview, il semble difficile de répondre. Cependant, ces questions jouent encore un rôle dans la préparation: ils révèlent quelques caractéristiques intéressantes de JavaScript, et a souligné que certaines des décisions prises au moment de la langue de programmation, tout d'abord avoir à faire.

En savoir plus sur les fonctionnalités JavaScript, la visite proposée https://wtfjs.com.

1. Pourquoi Math.max () moins de Math.min ()?

Math.max () >  erreur de sortie Math.min () cette affirmation semble avoir un problème, mais est en réalité tout à fait raisonnable.

Si aucun argument ne donne, le rendement Math.min () l'infini (l'infini), les retours Math.max () -infinity (infinitésimal). Ceci est juste spécification de la méthode max () et la partie min (), mais la logique derrière la sélection est une valeur de discussion en profondeur. Comprendre la raison, considérez le code suivant:

Math.min (1) // 1 Math.min (1, infini) // 1 Math.min (1, -infini) // -infinity

Si -infinity (infinitésimal) comme paramètre par défaut Math.min (), chaque résultat est -infinity (infinitésimale), ce qui ne sert à rien! Cependant, si le paramètre par défaut est infini (infini), puis ajoutez tous les paramètres quel que soit le rendement sera numérique - qui est la façon dont nous voulons courir.

2. Pourquoi est pas égal à 0,1 + 0,20,3

En bref, cela est lié au degré de précision avec JavaScript stocké dans les nombres à virgule flottante binaire. Entrez la formule suivante sera dans la console Google Chrome:

0,1 + 0,2 // ,300000000000000040,1 + 0,2 à 0,2 // ,100000000000000030,1 + 0,7 // ,7999999999999999

Si elle est une simple équation de précision n'est pas nécessaire, il est peu probable que des problèmes de cause. Mais si vous avez besoin de test pour l'égalité, même pour des applications simples peuvent aussi causer des maux de tête des problèmes. Pour résoudre ces problèmes, il y a plusieurs options.

Point fixe point fixe

Par exemple, si vous connaissez la précision maximale souhaitée (par exemple, si en cours de traitement de la monnaie), peut être utilisé pour stocker la valeur du type entier. Ainsi, au lieu de 4,99 $ peuvent être stockés 499, et effectuer une base de cette équation, et peut utiliser un résultat similaire = (valeur / 100) Résultats d'expression .toFixed (2) à l'utilisateur final, qui renvoie l'expression une chaîne.

code BCD

Si la précision est très importante, une autre méthode consiste à utiliser un format décimal codé binaire (BCD), vous pouvez utiliser la bibliothèque BCD (https://formats.kaitai.io/bcd/javascript.html) JavaScript accès. Chaque valeurs décimales sont stockées dans un octet (8 bits). Étant donné les valeurs individuelles d'un magasin de 16 octets, et le système utilise seulement 0-9 bits, la faible efficacité de ce procédé. Cependant, si vous avez payé une grande attention à la précision, en utilisant les méthodes méritent d'être envisagées.

3. Pourquoi est-018 moins égal à 3017?

018-0173 renvoie le résultat de la conversion de type silencieux réelle. Ce cas, la discussion est un nombre octal.

profil octal

Vous savez probablement des calculs à l'aide binaire (base 2) et hexadécimaux (base 16) système de nombre, mais octal état (base 8) dans l'histoire informatique aussi donner plein poids pro: dans les années 1950 et entre les années 1960, octal, binaire utilisé pour simplifier, réduire les coûts matériels système de fabrication élevé.

Peu après hexadécimaux (Hex) a commencé la scène de l'histoire:

1965 IBM360 publié franchi une étape décisive de octal en hexadécimal. Ceux d'entre nous habitués à octal ont été choqués par le mouvement! Vaughan Pratt (Vaughan Pratt)

Le octal d'aujourd'hui

Mais dans les langages de programmation modernes, octal, quel rôle? Dans certains cas, octal, hexadécimal qu'un avantage, car il ne nécessite pas de non-numérique (0-7 au lieu de 0-F).

Une utilisation courante est le système d'autorisations de fichiers Unix, qui dispose de huit variantes autorisations:

 421

0 - - - aucune autorisation

1 - - x uniquement exécuter

2 - x - seulement écrire

3 - x x écriture et exécution

4 x - - seulement lire

5 x - x lecture et d'exécution

6 x x - lecture et écriture

7 x x x lecture, écriture et exécution

Pour des raisons similaires, mais aussi pour l'affichage numérique octal.

Retour à la question elle-même

En JavaScript, tous les numéros préfixés 0 à octal. Cependant, ne pas utiliser le numéro octal 8, contenant un nombre 8 sont automatiquement converties en nombre décimal régulier.

Par conséquent, le 018-017 est effectivement équivalent à une expression décimale: 18-15, parce que octal 017 et 018 en décimal.

Partie II: Foire aux questions

Source: pexels.com/@divinetechygirl

Cette section présentera quelques-unes des questions d'entrevue JavaScript plus courantes. Lors de la première JavaScript apprentissage, ces problèmes peuvent être facilement ignorés. Cependant, lors de l'écriture le meilleur code pour comprendre les questions suivantes considérablement l'utilité.

4. Quelles sont les différentes expressions de la fonction et les déclarations ont fonction?

Déclaration de fonction avec le nom de la fonction mot-clé, suivi par la fonction. Au lieu de cela, l'expression de la fonction commence var, ou encore const, suivi du nom de la fonction et l'opérateur d'affectation =. Considérez le code suivant:

// Déclaration de fonction somme de fonction (x, y) { retourner x + y; }; // Fonction Expression: ES5 var sum = fonction (x, y) { retourner x + y; }; // Expression Fonction: ES6 + somme const = (x, y) = >  {Return x + y};

Dans la pratique, la principale différence est que la déclaration de fonction doit être améliorée, mais il n'y a pas d'expression fonctionnelle. Cela signifie que l'interpréteur JavaScript va fonctionner déclaration au sommet de son champ d'application, il est possible de définir la déclaration de fonction et l'appeler partout dans votre code. En revanche, seul ordre linéaire appeler l'expression: Vous devez expliquer avant de l'appeler.

Aujourd'hui, de nombreux développeurs préfèrent l'expression de fonction pour plusieurs raisons:

En premier lieu, la mise en uvre d'une expression de fonction plus prévisible base de code structuré. Bien sûr, la déclaration de fonction utilise également une base de code structuré, seule une déclaration de fonction permet facile de se débarrasser d'un code désordre.

· En second lieu, il peut être la syntaxe ES6 pour l'expression de la fonction: Ceci est généralement plus concis, laissez-const et plus de contrôle pour savoir si les variables de réattribuer, l'une des questions que nous verrons par la suite.

5. var, et laissez-const quelle est la différence?

Depuis la version ES6, la grammaire moderne est entré dans tous les domaines de la vie, cela est une question d'entrevue très commune. Var est une déclaration de variable mots-clés première édition de JavaScript. Mais ses lacunes ont conduit à l'introduction de deux nouveaux mots-clés ES6 en: let et const.

Les trois mots-clés ont une distribution différente, la promotion et le domaine - par conséquent, nous discuterons séparément.

i) la distribution

La différence la plus fondamentale est que let et var peuvent être réaffectés, mais const ne peut pas. Cela en fait un excellent choix pour les variables de const inchangées, et elle permet d'éviter des erreurs telles que la redistribution accidentelle de la classe. Notez que lorsque la variable représente un tableau ou un objet, ne const permet des modifications variables, mais ne peut pas être réaffecté variable elle-même.

Laissez var et peut être réaffectés, mais les points suivants doivent être aussi clair que, sinon tous les cas nécessitent des variables de modification, la plupart des choix, laissez un avantage significatif sur le var.

ii) améliorer la

Et les déclarations de fonction et autres expressions similaires à la différence entre (décrite ci-dessus), les variables instruction var est toujours promu leur haut et utiliser des variables const respectives et laissez-déclaration est soulevée, mais si vous essayez de déclarer avant visite, vous obtiendrez une erreur de TDZ (temps mort). Depuis var peut être plus sujettes à l'erreur, comme réallouées accidentelle, l'opération est utile. Considérez le code suivant:

var x = "portée globale"; fonction foo () { var x = "portée fonctionnelle"; console.log (x); } foo (); // "portée fonctionnelle" console.log (x); // "portée globale"

Ici, foo cohérente () et console.log (x) les résultats attendus. Toutefois, si vous supprimez la deuxième variable est ce qui se passera alors?

var x = "portée globale"; fonction foo () { x = "portée fonctionnelle"; console.log (x); } foo (); // "portée fonctionnelle" console.log (x); // "portée fonctionnelle"

Bien que la fonction définie, mais x = « périmètre fonctionnel » a couvert les variables globales. Répétez mot-clé var pour spécifier la seconde variable x est limitée à foo ().

iii) Domaine

Bien que var est une fonction scope (champ de fonction), mais encore et const sont scope bloc (champ de bloc: En général, tout code bloc est accolades {}, la fonction, y compris, pour les instructions conditionnelles et boucle clarifier la différence, regardez le code suivant:

var a = 0; let b = 0; const c = 0; si (true) { var a = 1; laisser b = 1; const c = 1; } console.log (a); // 1 console.log (b); // 0 console.log (c); // 0

Dans le bloc conditionnel, une portée globale var été redéfinie, la portée globale let b et c const pas. En général, pour faire en sorte que les restes de tâches locales dans l'exécution locale, rend le code plus clair et réduire les erreurs.

6. Que faire si aura lieu l'affectation variable sans un mot-clé?

Si vous ne l'utilisez pas les mots clés pour définir des variables, comment? Techniquement, si x n'a pas été défini, x = 1 est un raccourci window.x = 1.

Pour éliminer complètement ce raccourci, vous pouvez écrire le mode strict - introduit dans la plus-ES5 - l'utilisation d'écriture stricte en haut du document ou une fonction particulière. Après, quand vous ne tentez pas de déclarer un mot-clé variable, vous recevrez une erreur de syntaxe du rapport: Uncaught SyntaxError: indentifier inattendue.

7. Quelle est la différence entre la programmation orientée objet (POO) et la programmation fonctionnelle (FP) oui?

JavaScript est un langage multi-paradigme qu'il prend en charge une variété de différents styles de programmation, y compris orientée événements, orientée objet et la fonction.

paradigme de programmation varient, mais dans les calculs, les plus populaires programmation fonctionnelle et la programmation orientée objet - et deux types peuvent exécuter JavaScript.

Programmation orientée objet

OOP à des « objets » basé sur le concept d'une structure de données comprenant un champ de données (désigné en tant que classe JavaScript) et d'un programme (méthode JavaScript).

Certaines comprennent le Math JavaScript intégré dans des objets (par sin aléatoire, max, et analogues), JSON (JSON pour analyser les données) et des types de données primitives, par exemple sous forme de chaîne, Array, Number et Boolean.

Chaque fois utilisé intégré méthode, le prototype ou la classe, sont essentiellement en utilisant la programmation orientée objet.

programmation fonctionnelle

FP (programmation fonctionnelle), le concept de base « fonctionnelle pure », afin d'éviter l'état partagé, les données variables et les effets secondaires. Cela peut sembler beaucoup de jargon, mais peut avoir créé de nombreuses fonctions pures dans votre code.

Entrez les mêmes données pure fonction retournera toujours la même sortie. De cette façon, il n'y a aucun effet secondaire: En plus de retourner des résultats que, par exemple la console de connexion ou modifier des variables externes et ainsi ne se produira pas.

En l'état partagé, il est un exemple simple, même si l'entrée est le même, changer l'état de sortie peut encore en fonction. Elle est munie d'un code pour deux fonctions: un convertisseur numérique plus 5, plus multiplié par le nombre 5.

const num = { val: 1 }; const add5 = () = >  num.val + = 5; const multiply5 = () = >  num.val * = 5;

Si le premier appel dans le add5 d'appel multiplié par 5, le résultat global est de 30. Cependant, si la fonction est exécutée de la manière opposée et enregistrer les résultats, le rendement est de 10, et avant que les résultats sont contradictoires.

Cela est contraire au principe de la programmation fonctionnelle, parce que le résultat de la fonction varie selon les méthodes d'appel Contexte. Réécrire le code ci-dessus, des résultats plus prévisibles:

const num = { val: 1 }; const add5 = () = >  Object.assign ({}, num, {val: num.val + 5}); const multiply5 = () = >  Object.assign ({}, num, {val: num.val * 5});

Maintenant, la valeur est toujours num.val 1, Contexte Indépendamment de l'appel de méthode sera toujours sortie le même résultat add5 (num) et multiply5 (num).

8. Quelle est la différence entre la programmation impérative et déclarative?

Sur la différence entre la programmation impérative et la programmation déclarative, il peut être POO (programmation orientée objet), et FP (Programmation fonctionnelle) comme référence.

Les deux sont décrits dans un certain nombre de programmes différents paradigmes caractéristiques générales dans la terminologie commune. FP (programmation fonctionnelle) est un exemple de programmation déclarative et de la POO (programmation orientée objet) est un exemple de la programmation impérative.

A partir du niveau de signification de base, le souci de la programmation impérative est de savoir comment faire quelque chose. Il illustre les principales étapes d'une manière, et pour tout et boucles, si le commutateur et analogues est caractérisé déclaratif.

const sumArray = array = >  { laissez résultat = 0; pour (soit i = 0; i <  Array.length; i ++) { entraîner + = array }; résultat retour; }

En revanche, la programmation déclarative axée sur ce qu'il faut faire, comment il se fera en se fiant à l'expression extrait. Cela se traduit généralement par un code plus concis de, mais en termes d'échelle, en raison de la faible transparence, de débogage plus difficile.

Ceci est la méthode décrite ci-dessus énoncés fonction sumArray ().

const sumArray = array = >  {Retour array.reduce ((x, y) = >  x + y)};

Source: pexels.com/@rawpixel

9. Qu'est-ce qu'un héritage basé sur un prototype?

Enfin, je veux aborder est l'héritage basé sur un prototype. La programmation orientée objet Il existe plusieurs types différents, JavaScript en utilisant l'héritage basé sur le prototype. Le système comme un prototype en utilisant un objet existant, ce qui permet le fonctionnement de répétition.

Même d'abord rencontré le prototype de concept, le prototype rencontrera lors de l'utilisation des méthodes intégrées. Par exemple, les fonctions (par exemple, carte, réduire, épissures, etc.) pour faire fonctionner le tableau est objet Array.prototype. En fait, chaque instance du tableau (les crochets est définie, ou - new Array inhabituel ()) sont héritées de Array.prototype, ce qui explique pourquoi la carte, réduire et raison spliceare d'autres méthodes sont disponibles par défaut.

La quasi-totalité de ces objets sont construits, tels que les chaînes et Boolean: quelques, comme Infinity, NaN, null et non défini aucune autre classe ou méthode.

A la fin du prototype de la chaîne, Object.prototype se trouve, dans un exemple, presque tous les objets JavaScript Object. Par exemple, Array. Prototype et String. Prototype héritent des classes et des méthodes Objet.prototype.

Pour ajouter une classe d'objets et de méthodes en utilisant la syntaxe prototype, simplement en fonction de l'objet démarrer et utiliser le mot-clé prototype pour ajouter des classes et méthodes:

Fonction personne () {}; Person.prototype.forename = "John"; Person.prototype.surname = "Smith";

Ou si elle devrait couvrir prototype opérationnel?

Vous pouvez utiliser l'opération de changement construit dans les prototypes mêmes Manner et créer une extension, mais la plupart des développeurs (et la plupart des entreprises) ne sont pas recommandées.

Si vous souhaitez effectuer la même opération plusieurs objets, vous pouvez créer un objet personnalisé (ou définir votre propre « classe » ou « sous-classe »), ces objets Hériter prototype construit sans changer le prototype lui-même. Si vous avez l'intention de collaborer avec d'autres développeurs, ils ont certaines attentes du comportement par défaut de JavaScript, modifier ce comportement par défaut peut facilement conduire à des erreurs.

Dans l'ensemble, ces questions vous aideront à mieux comprendre JavaScript, y compris ses fonctionnalités de base et d'autres caractéristiques moins connues, et l'espoir pour vous aider à préparer la prochaine entrevue.

pouces Message attention

Ensemble, nous partageons l'apprentissage et le développement de l'IA sec

Amnesty International salue l'attention de la pendaison toute la plate-forme de la classe médiatique « lecture technique de base »

Aujourd'hui Intriguant: Dudley a forcé un changement d'esprit causé par la tempête
Précédent
Assemblée super téléobjectif unique déblocage de l'objectif Sony Micro SEL600F40GM et SEL200600G
Prochain
« TFBOYS » « Partager » Wang Yuan 190,623 personnages heureux, vraiment heureux de voler
Turing remplacer Watt billets en sterling PC, pourquoi côté « criminels » côte à côte avec la reine d'Angleterre?
confinement Sud Ning Sanhao suivi de la voiture de taxi: propriétaires de Rolls-Royce a présenté ses excuses
Denon (Denon) X Series a ajouté un nouveau récepteur AV deux
« TFBOYS » « Partager » super Meng Wang Junkai 190623 selon frappé un petit frère adorable doux
Allemagne Ultrasone (extrême) bouchons d'oreille tout aussi extrême
Réserve Throw Daily | ChuBeiMian Aubaine cette semaine a augmenté le prix moyen du taux de rotation moyen de près de 95%
Technica (Audio-Technica) ATH-G1, casque de jeu ATH-PDG1a
basse pour déferlant charme puissant audio-visuel de Sony (Sony) chuchotant galerie premier marché chinois
« Red Velvet », « partager » Qi astringent 190,623 copies selon les États-Unis aujourd'hui mis à jour cuter à cent pour cent
première extension complète Perth (Pass) INT-25 pure classe A d'une classe amplificateur intégré
Sony (SONY) machine disque vinyle PS-LX310BT cotées en Chine