Simon CHABROL

Écriture et recherche indépendante (FR/EN)

Technicien de support IT

Si vous êtes (ou avez été) en recherche d’un emploi dans le domaine de la tech, vous serez sans aucun doute confronté à des questions techniques. Parfois très basiques, ces questions peuvent être déstabilisantes si on ne s’attend pas à devoir y répondre (ou si on manque d’occasions pour pratiquer sur certains sujets) : types de données, algorithmie, commandes réseaux, commandes de base Linux etc… Même s’ il est bien entendu impossible de couvrir toutes les questions et cas de figure possibles, on peut quand même identifier quelques axes essentiels. L’idée étant de couvrir un maximum de sujets pour éviter certains pièges et aborder plus sereinement vos futurs entretiens professionnels. Nous allons donc réviser ici principalement les types et formats de données, les requêtes HTTP, les requêtes SQL ou encore certaines bases sur Linux.

Table des matières :

  1. Les types de données
  2. Les formats de données
  3. Les méthodes et codes HTTP
  4. Les requêtes SQL
  5. Les bases de Linux
  6. Commandes réseaux
  7. Questions sur Javascript et Node JS
  8. HTML et CSS
  9. Conclusions

Les types de données

Par types de données, on entend par là que les données possèdent des attributs qui vont impacter la façon de les stocker et de les traiter. S’il existe des variations entre langages de programmation ou système d’exploitation sur la façon de gérer les données, on retrouve assez généralement les types suivants :

  • Non interprétés
  • Valeurs booléennes (“boolean” en anglais)
  • Données textuelles ou chaînes de caractères (“string”)
  • Nombres (“number”)
  • Ensembles composites (“composite types”)

Les données non interprétées sont celles qui doivent faire l’objet d’une interprétation par un microprocesseur ou un circuit électronique pour donner lieu à une action. C’est le type de données le plus primitif et élémentaire en informatique. On emploie parfois des termes comme assembleur ou code binaire pour parler de ces données qui désignent dans la pratique des instructions à exécuter. On parle assez souvent de bits, de bytes… qui désignent des façons de stocker ces données brutes. Les valeurs booléennes sont des données qui expriment une relation binaire : vrai ou faux, 0 ou 1… Il s’agit d’un type de données qui sert à exprimer des logiques, comme lorsque l’on vérifie une condition par exemple (Exemple : Est-ce que la valeur A est supérieure à la valeur B ?). Les données textuelles ou chaînes de caractères, comme le nom l’indique, servent à représenter du texte. Il peut s’agir d’un simple caractère (espace, signe de ponctuation, virgule etc…) ou d’une chaîne (comme une phrase complète par exemple). Les nombres désignent des valeurs numériques. Il en existe de plusieurs types. On distingue principalement :

  • Les entiers (“integer” en anglais”), qui sont des nombres non fractionnés. Exemples : 1, 290, 50 etc…
  • Les nombres à virgule flottante (“floating point”) et à virgule fixe (“fixed point”), qui désignent des nombres à virgule. Exemple : 1.34, 34.4625, 8648.27337 etc…

La différence entre les virgules flottantes et fixes se situe quant à la précision. Les virgules flottantes offrent plus de précision plus importante que les données à virgule fixe Enfin, il y a les ensembles composites qui désignent des types de données dont le but est de regrouper de la donnée. On va principalement retrouver dans ces ensembles composites :

  • Les tableaux (“array”) qui consistent à stocker des données sur plusieurs lignes et colonnes
  • Les listes (“list”) qui servent à stocker des valeurs ordonnées sur une seule dimension
  • Les objets (“object”), comme le JSON par exemple (voir les formats de données)

Les formats de données

Par formats de données, on entend la manière dont les informations sont échangées entre différents systèmes, et particulièrement les normes qui permettent de définir différents modes pour échanger de l’information. Il en existe une multitude, mais ce qui est important c’est de connaître les principaux. On distingue notamment les formats de données qui sont considérés comme lisibles par des êtres humains et ceux qui ne le sont pas (et nécessitent une forme de décodage). On retrouve donc principalement : Le JSON (lisible) Le XML (lisible) Le CSV (lisible) La Base64 (non-lisible) Le JSON est un format de données qui consiste à lier des valeurs à des identifiants. C’est un format de données facile à lire et comprendre, très utilisé lorsqu’il s’agit d’échanger des données via des requêtes API par exemple. Exemple d’un fichier JSON :

{ "nom":"NOM", "prenom":"PRENOM" }

Le XML est un format de données dans lequel les éléments sont identifiés à l’aide de balises, comme avec du HTML. C’est un format de données plus difficile à lire que la JSON, mais qui reste très utilisé dans de nombreuses applications (c’est par exemple le format utilisé par le gestionnaire de contenu WordPress pour exporter/importer des données). Exemple d’un fichier XML :

<Moi>
<Prenom>
PRENOM
</Prenom>
<Nom>
NOM
</Nom>
</Moi>

Le CSV désigne quant à lui un format de données où les éléments, séparés par des virgules ou points-virgules, sont envoyés sous forme d’un tableau. C’est un format facile à lire et très utilisé, notamment lorsqu’il s’agit de faire du transfert de données entre applications. Exemple d’un fichier CSV :

Nom;Prenom
Simon;TBH
Thomas;FGH

Enfin, il existe la base 64. Ce format de données permet de transférer des documents comme des PDF ou des images en les encodant à l’aide d’un mécanisme qui n’emploie que 64 caractères. On l’utilise très souvent quand on doit transférer des données binaires. Le transfert est ainsi facilité car ces données seront ainsi représentées dans un format textuel.

Les méthodes et codes HTTP

Maintenant que nous avons vu (ou revu) les formats de données, je vous propose de passer aux méthodes HTTP. Ces dernières sont indispensables car elles permettent de savoir quelle action est attendue lorsque nous faisons appel à un service. Elles constituent en quelque sorte une partie du socle indispensable à la compréhension des échanges numériques. On a particulièrement besoin de les connaître si l’on souhaite mettre en œuvre des API, réaliser une intégration, analyser des logs etc… Voici la liste des principales méthodes à connaître :

  • GET : obtenir une ressource
  • POST : envoyer de l’information
  • PUT : insérer de l’information
  • DELETE : supprimer de l’information
  • PATCH : modification partielle

Il est également important de connaître les principaux codes de réponse. Ces derniers nous renseignent sur la réussite des requêtes et/ou sur la nature des erreurs. En voici une liste :

  • 200 : succès
  • 301/302 : redirection
  • 401 : erreur d’authentification
  • 403 : accès refusé
  • 404 : ressource non trouvée
  • 500–503 : erreurs serveurs

Enfin, il est important de comprendre les notions autour des protocoles HTTP et HTTPS. Il est également possible que l’on vous pose des questions sur la façon de gérer ces requêtes, en vous posant des questions sur le long polling par exemple ou encore sur les webhooks.

Les requêtes SQL

Maîtriser les requêtes SQL est une compétence indispensable dans la mesure où de nombreuses sociétés informatiques adossent le traitement de leurs données à des bases de données. On peut en avoir besoin pour extraire de l’information, composer des rapports, chercher des anomalies etc… Les commandes les plus basiques à connaître sont les suivantes :

  • SELECT : pour sélectionner
  • UPDATE : pour mettre à jour
  • DELETE : pour supprimer
  • INSERT INTO : pour insérer

Sur le plan des fonctions dîtes d’agrégation (dont le but est de grouper des données), je vous invite à connaître la liste suivante :

  • SUM : somme des valeurs
  • AVG : moyenne des valeurs
  • MAX : maximum des valeurs
  • MIN : minimum des valeurs

On peut également citer des fonctions permettant de mieux organiser les résultats comme :

  • GROUP BY : grouper en fonction d’une valeur
  • ORDER BY : trier en fonction d’une valeur

Même si cela n’est pas forcément votre travail, il peut être utile de savoir comment réaliser une opération simple d’optimisation de la mémoire sur une table SQL. Imaginons que l’on supprime plusieurs centaines de lignes d’une table pour lesquelles la valeur “id” est inférieur à 100 avec cette commande :

DELETE FROM data WHERE id < 100

Le gain de mémoire et de performance ne sera pas immédiat car vous n’avez pas réorganisé la table. Pour ce faire, il faut utiliser la commande suivante :

OPTIMIZE TABLE data

La commande OPTIMIZE fonctionne comme une commande de défragmentation en reconstruisant notamment les index de la table. Pour réviser les requêtes basiques, je vous propose de partir de la table “ecole” suivante qui consigne les noms et prénoms des élèves d’une école avec leurs numéro de classe et la note obtenue au dernier examen :

Nom Prenom Classe Note
SIM Simon 1 10
VGH Virginie 1 12
EDF Elise 2 15
NDR Nordine 2 16
OTH Olivia 3 12
MCD Marc 3 10

Pour notre première requête, je vous propose de compter le nombre de classes en ne tenant pas compte des doublons avec la fonction DISTINCT :

SELECT COUNT(DISTINCT Classe) FROM ecole

Pour un comptage de l’ensemble des classes en tenant compte des doublons, on aurait pu utiliser la requête suivante :

SELECT COUNT(Classe) FROM ecole

Pour la seconde requête, faisons la moyenne de l’ensemble des notes avec la fonction AVG :

SELECT AVG(Note) FROM ecole

On pourra vouloir faire cette moyenne uniquement pour la classe numéro 2. On va donc jouer la requête suivante avec la fonction WHERE :

SELECT AVG(Note)
FROM ecole AS e
WHERE e.Classe = 2

Pour mettre en œuvre le DELETE, on pourrait imaginer la requête de suppression d’une ligne où la colonne “Nom” est égale à NDR :

DELETE FROM ecole AS e WHERE e.Nom = 'Ndr'

Et enfin, on peut mettre en œuvre le INSERT INTO avec cette commande :

INSERT INTO ecole (Nom,Prenom,Classe,Note) VALUES (VDR,Victoria,4,12)

Les bases de Linux

Si votre poste implique de beaucoup travailler avec des applications hébergées sur des serveurs Linux (ou tout autre distribution similaire), il peut être utile (voire nécessaire) de disposer de quelques connaissances relatives au fonctionnement de ce système d’exploitation. Même si l’intitulé et les missions du poste n’impliquent pas d’effectuer des opérations sur un serveur (comme pourrait le faire un administrateur système par exemple), on peut quand même vous poser des questions dans le but d’évaluer vos connaissances pratiques. Voici quelques commandes assez basiques à connaître :

  • ls : lister les fichiers d’un répertoire
  • cd : pour se déplacer dans un répertoire
  • grep : pour trouver une information dans un fichier qui correspond à une expression régulière (Exemple : grep ERROR app.log )
  • sudo : pour lancer des commandes avec des privilèges administrateur
  • pwd : obtenir le nom du répertoire dans lequel on se trouve
  • rm : supprimer un fichier ou le contenu d’un répertoire (Exemples : rm * pour supprimer tout le contenu d’un répertoire et ses sous-répertoires, ou rm DATA.csv pour supprimer un fichier spécifique)
  • mkdir : pour créer un répertoire (Exemple : mkdir FOLDER )
  • free -m : pour obtenir l’état de la mémoire (l’option -m permettant d’afficher ces valeurs en mégabytes)
  • apt-get : pour installer des packages
  • wget : utilitaire de téléchargement
  • ps aux : pour obtenir la liste des processus en cours avec les identifiants PID associés.

Combinée avec “grep” par exemple, il est possible d’obtenir le PID d’une application précise (Exemple : ps aux | grep firefox ) Plusieurs autres petites choses sont utiles pour témoigner de votre maîtrise, même basique, du système Linux. On peut d’abord citer le chaînage des commandes avec les pipes “|”. Exemple d’une telle commande :

ps aux | grep firefox

On obtient donc d’abord la liste des processus en cours avec la commande “ps aux”, puis on utilise directement ce résultat avec la commande “grep firefox” pour obtenir l’identifiant du processus. Utile également, les notions de redirection des résultats d’une commande vers un fichier. Exemple de commandes :

ps aux | grep firefox > result.txt

Si on utilise le “>”, le contenu du fichier de destination est écrasé. Avec le “>>” on ajoute le contenu à la fin. N’hésitez pas également à réviser quelques commandes pour utiliser l’éditeur de texte “vi” sur Linux. Je cite aussi les différentes façons de mettre fin à un processus avec la commande “kill”. Exemple :

kill -15 NUMERO_PROCESS

La commande “kill” permet d’envoyer différents signaux à une application. Le 9 étant le plus brutal, car il ne peut être ignoré par le processus en question et correspond à une forme d’arrêt forcé du processus. Pour faire les choses de façon plus douce, on peut utiliser le 15, qui est la façon normale de terminer un processus. Par contre, celui-ci peut être ignoré si le processus en question est en panne ou ne fonctionne pas normalement.

On peut également vous poser des questions sur la façon d’accéder à une machine à distance. Vous pouvez citer “SSH” ou “Telnet”, même si ce dernier est très peu utilisé aujourd’hui. La différence essentielle étant la sécurité : “SSH” est par défaut crypté, quand “Telnet” ne l’est pas. Il est également conseillé de connaître un peu le protocole “FTP” pour l’envoi de fichier, et sa version beaucoup plus sécurisée le “sFTP”. N’hésitez pas également à vous renseigner sur “SELinux” et “firewalld” qui permettent de sécuriser un serveur. Pour faire assez simple, “SELinux” sert à définir la politique de sécurité au niveau de la machine alors que firewalld est, comme son nom l’indique, un pare-feu dont le rôle est de sécuriser le réseau en filtrant les requêtes entrantes et sortantes. Ces deux outils sont complémentaires.

Commandes réseaux

Je ne reviens sur les bases des réseaux ici (comme les adresses IP ou les serveurs DNS), mais je vous propose par contre de revoir plusieurs commandes (très basiques) à connaître lorsqu’il s’agit de travailler sur ce sujet :

  • ping : cette commande permet de tester l’envoi et la réception d’informations sur un hôte distant, on l’utilise notamment pour faire du diagnostic (Exemple d’usage : ping mylittleneuron.com )
  • traceroute/tracert : cette commande permet de suivre une requête à travers les différentes couches du réseaux (routeurs, machines etc…) et ainsi vérifier que le réseau fonctionne normalement (Exemple d’usage : tracert mylittleneuron.com )
  • curl : il s’agit d’un utilitaire permettant de réaliser des requêtes HTTP depuis un terminal, on utilise souvent cette commande pour réaliser des tests (Exemple d’usage : CURL -X GET WEBSITE )
  • ipconfig : pour disposer de toutes les informations relatives à la configuration du réseau
  • nslookup : pour obtenir des informations sur le serveur (Exemple d’usage : nslookup WEBSITE)
  • netstat : pour voir toutes les connexions entrantes et sortantes

Concernant curl, il peut être utile de connaître quelques paramètres avancés comme :

  • H pour définir une entête
curl -X GET -H "Accept: application/json" WEBSITE
  • O pour télécharger
curl -O WEBSITE/file.txt
  • X pour préciser le type de méthode utilisé et parfois même modifier la méthode qui devrait être utilisée, exemple pour faire un HEAD sur une requête qui devrait produire un GET
curl -X HEAD WEBSITE

Ajouter -X à vos commandes peut être superficiel mais cela n’est pas en soi un problème. L’important étant de bien comprendre l’impact de cette commande. Enfin :

  • d pour envoyer de la donnée sous forme d’un JSON par exemple :
curl -d {\"Content\":\"TXT\"} -H "Content-Type: application/json" -X POST "WEBSITE"

Questions sur Javascript et Node JS

Pour conclure, je vous propose de voir ensemble quelques questions basiques que l’on peut vous poser lors d’un entretien technique portant sur votre maîtrise de Javascript/Node JS :

Est-ce que Java est lié à Javascript ? Non, Java et Javascript sont deux langages distincts sans aucun rapport


Qu’est-ce que Node JS ? Node JS est un moteur d’exécution du Javascript côté serveur. Ce n’est ni un module ni un framework


Quelle est la différence entre ‘==’ et ‘===’ ? Le double égal (ou égalité faible) effectue une conversion pour comparer les deux valeurs, alors que le triple égal (égalité forte) va partir du principe que les deux valeurs ont le même format


Comment obtenir la version de Node JS ? Avec la commande “node -v”


Node JS est-il un moteur d’exécution single threaded ou multithreaded ? Node JS fonctionne par défaut sur un seul fil d’exécution


Sur quoi est basé Node JS pour exécuter du Javascript ? Node JS utilise une version du moteur V8 pour permettre l’exécution de Javascript hors d’un navigateur


Comment paralléliser des opérations avec Node JS ? En utilisant les “worker threads” par exemple


Comment obtenir le type de données d’une valeur en Javascript ? Avec typeof , exemple “ typeof 1 “ qui donnera number


Est-ce que le langage Javascript est sensible à la casse ? Oui, par exemple “ var OD = “1” console.log(oD) “, renverra le message undefined


Comment créer un objet en Javascript ? Avec les accolades, exemple “ var list = { value:1 } “


Comment convertir un objet en JSON ? Avec la fonction “JSON.stringify “, exemple “ console.log(JSON.stringify({a:1})) “ qui retournera “ ‘{“a”:1}’ “


Quels sont les évènements connus avec Javascript ? On peut citer “onclick “ lorsque l’utilisateur clique sur un élément HTML, “onchange “lorsqu’un élément HTML est modifié, “onkeydown “ lorsque l’utilisateur utilise le clavier ou encore “onmouseover “ lorsque la souris passe sur un élément


La différence entre “null” et “undefined” ? “null” désigne un élément qui a une valeur égale à null (Exemple “var a = null”), alors que “undefined” désigne un élément qui est indéfini (“var b console.log(b)”)


La différence entre “var” et “const” ? La différence essentielle tient au fait qu’un élément “const”ne peut pas faire l’objet d’une modification ultérieure, alors qu’un élément “var” peut changer à tout moment


Quelle est la différence entre “setInterval” et “setTimeout” ? La fonction “setInterval” provoque la répétition d’une action à l’aide d’un minuteur, alors que la fonction “setTimeout” implique l’exécution d’une tâche après un intervalle de temps.


Comment augmenter la mémoire allouée à une application Node JS ? Avec l’argument “ — max-old-space-size” qui permet de spécifier, en mégabytes, la mémoire que l’on souhaite allouer à une application au moment de la lancer. Exemple pour allouer 50 GB à une application : “node MyApp.js — max-old-space-size=50000”


Quels sont les modules importants avec Node JS ? On peut notamment citer “http” pour gérer des requêtes et construire des serveurs, “fs” pour lire et écrire des fichiers, “events” pour la gestion des événements, “path” pour la gestion des chemins des fichiers, “crypto” pour les fonctionnalités de cryptographie, “os” pour interagir avec le système d’exploitation

HTML et CSS

On peut également, avec Javascript, vous poser des questions sur votre maîtrise du HTML et du CSS. On pourrait donc rassembler les quelques questions suivantes :

Pouvez-vous citer les principales balises HTML ? On peut citer par exemple : “head”pour les en-têtes, “h1”à “h6”pour les titres, “p” pour les paragraphes, “title”pour les titres, “body” pour le contenu principal de la page HTML, “div”pour une division de contenu, “ul”/”ol”pour les listes désordonnées et ordonnées, “form” pour les formulaires


Comment identifier un élément d’une page HTML ? On peut identifier un élément via un : “id”(identifiant unique), une “class” (souvent utilisée pour l’application de règles de CSS) ou un “name”


Comment créer une table ? Avec la balise “ table “. On utilise les balises “ tr “ pour les rangs, “ th “ pour les titres des colonnes et “ td “ pour les valeurs des cellules


Pouvez-vous décrire le fonctionnement des méthodes GET et POST sur les formulaires ? Les formulaires HTML embarquent deux composants : une valeur d’action (URL à utiliser) et une valeur de méthode (GET ou POST). Avec un GET, les données du formulaire sont passées des paramètres de l’URL. Ces données sont donc visibles en clair. Avec un POST, ces données sont envoyées via le corps de la requête. Elles ne sont pas directement visibles.


Comment se décompose une règle de CSS ? Une règle se décompose avec une logique “élément { caractéristique : valeur attendue } “. Exemple : p { color : red } qui indique que les paragraphes sont en rouge.


Citer quelques règles de CSS ? On peut citer par exemple “ color “ pour la couleur de l’élément, “ font-size “ pour la taille du texte, “ width “ pour la largeur, “ border “ pour les bordures.


Quelles sont les règles de sélection avec les CSS ? Pour une classe, on désigne l’élément avec un point devant. Exemple : .classe { color : red } Pour un id, on utilise le signe dièse. Exemple : # id { color : red } On peut également appliquer cette logique à des ensembles composites. Exemple pour sélectionner un paragraphe rattaché à la classe “center” : p.center { color : red } On peut sélectionner plusieurs éléments en les listant tout simplement, exemple : p, h1, div { color : red } Pour sélectionner l’ensemble des éléments, on peut utiliser le wildcard, exemple : * { color : red }

Avec Node JS, les employeurs seront sans aucun doute curieux de connaître vos compétences sur des sujets avancés comme la clusterisation ou la parallélisation des opérations. Avoir des bases en cryptographie est également un plus non négligeable. La programmation modulaire fait également partie des compétences très utiles voire indispensables. Ensuite, il est important de connaître et de savoir mettre en œuvre un certain nombre de frameworks ou librairies avec Node JS. On peut citer à cet effet des librairies comme Express pour la construction de serveurs HTTP, de drivers comme SQLite et MongoDB pour les bases de données SQL et NoSQL, ou encore les librairies de visualisation comme chart.js par exemple. On peut aussi citer les librairies spécialisées dans le traitement des images : jimp, pngjs, node-canvas etc… Parmi les acquis, on peut également vous demander de maîtriser le direct avec Socket.io. Enfin, connaître des librairies/frameworks comme PM2 pour la mise en production d’une application est plus indispensable dans certains cas.

Conclusions

Nous avons donc pu voir (ou revoir) ensemble plusieurs des sujets possiblement évoqués lors d’un entretien technique : types de données, formats de données, requêtes SQL, réseaux, commandes Linux, programmation en Javascript/Node JS, HTML et CSS… Nous avons également vu quelques exemples de questions assez typiques pour évaluer une maîtrise de base en Javascript, ainsi que quelques plus à maîtriser pour parfaire sa connaissance de Node JS. Nous ne l’avons pas vu ici, mais il peut être très utile de maîtriser plusieurs technologies de cloud comme Google Cloud, la suite Office 365 ou encore les services AWS, car cela permettra de témoigner d’une maîtrise de technologies couramment utilisées dans de nombreuses aujourd’hui.

Laisser un commentaire