10 questions concrètes d’entretien en Scala

Thomas Zuk
4 min readOct 23, 2021

--

De plus en plus d’entreprises se tournent vers l’utilisation de Scala, notamment dans le domaine du Big Data, mais également celui du micro-service. Résultat : les entretiens sur ces technologies explosent et les niveaux sont très disparates ! 😨

Je suis Développeur Spark/Scala et validateur technique de Data Engineer depuis 2016. Au cours de ma carrière, j’ai répertorié de nombreuses questions que j’ai pu entendre ou poser en fonction de leurs pertinences. Ainsi, cet article s’adresse à vous si :

  • Vous êtes développeur(euse)s Spark/Scala et/ou Data Engineer (débutant(e)s ou confirmé(e)s), vous souhaitez tester vos connaissances et vous améliorer afin de réussir tous vos entretiens techniques. Le but n’est pas de faire du “par coeur” mais plutôt d’orienter vos révisions sur les domaines que vous maitrisez le moins afin de maximiser vos chances de réussite.
  • Vous êtes validateur/recruteurs techniques en manque d’inspiration, un peu perdus dans la masse d’informations disponibles pour ces technologies et vous souhaitez obtenir des questions claires et précises, adaptables à tous les niveaux de compétences, et des propositions de réponses.

Alors, prêt pour l’entretien ?

1. Qu’est-ce qu’une case class ?

Réponse : Il s’agit d’une classe pour laquelle plusieurs fonctions ont été automatiquement générées lorsque le mot-clé case a été ajouté. Ces fonctions sont très variées, en voici quelques exemples :

  • les getters pour les val en paramètres d’une classe,
  • la fonction apply() qui évite ainsi d’utiliser le mot-clé new lors de l’instanciation,
  • unapply() qui va servir au pattern matching,
  • hashCode(),
  • la classe est rendue sérialisable
  • etc.

2. Expliquez le principe d’immutabilité en programmation fonctionnelle.

Réponse : L’immutabilité est un concept dans lequel il est fortement privilégié de déclarer des variables non mutables (que l’on ne peut pas modifier après assignation) au lieu des variables mutables. Les intérêts sont multiples car cela permet notamment d’isoler les zones de code où les assignations se feront, ce qui aura pour effet de limiter les zones d’erreur du code liées à des assignations multiples ou de mauvaises assignations. On peut alors détecter plus rapidement d’où proviennent les erreurs d’attributions de valeurs d’une variable.

Cela a également pour conséquence de faciliter la gestion de plusieurs processus qui s’exécutent en parallèle et qui accèdent à la même ressource. En effet, aucune variable ne peut être modifiée par deux processus au même moment. On appelle cela la gestion de la concurrence (lorsque plusieurs processus accèdent à la même ressource au même moment). Si une variable est immuable, il ne peut pas y avoir de verrouillage de la ressource (pour une écriture d’un processus A) lorsque le processus B tente d’y accéder.

Scala favorise l’immutabilité tandis que Java favorise la mutabilité.

3. Que crée-t-on avec le mot-clé object ?

Réponse : Cela permet de déclarer un singleton, c’est-à-dire un objet unique dont l’instance n’existe qu’une et une seule fois dans le code d’une application.

4. Donnez des exemples de type monadique.

Réponse : Option, Either, List, Seq, Try…

5. Quel type de retour puis-je utiliser si j’ai besoin, dans certains cas, de retourner une String et dans tous les autres cas un Int ?

Réponse : Il s’agit du type Either (Either[String, Int]).

6. Quelle collection peut-on utiliser lorsque l’on ne veut ni doublon ni ordre dans nos données ?

Réponse : Il s’agit de la collection Set.

7. Qu’est ce qu’un Companion Object ?

Réponse : Il s’agit d’un object ayant le même nom qu’une classe, dans lequel on peut ajouter des méthodes et des variables statiques. Souvent, on l’utilise pour définir de nouvelles méthodes apply(), permettant de changer la façon dont nous souhaitons instancier la classe (en faisant varier le nombre de paramètres ou leurs types par exemple).

8. Quelle est la particularité d’une variable définie comme “lazy” ?

Réponse : Une variable lazy ne sera définie qu’au moment où elle sera appelée dans le code (et non au moment de sa déclaration).

9. Citez quelques exemples de classes que vous utilisez pour ScalaTest.

Réponse : FunSpec, FunSuite, FlatSpec

10. Qu’est-ce qu’un trait en Scala ?

Réponse : Il s’agit d’un type d’objet en Scala, situé entre l’interface et la classe abstraite. On peut en effet y déclarer des méthodes et des variables abstraites (ou choisir de les implémenter), mais aussi leur faire étendre d’autres classes ou traits. Une classe peut étendre plusieurs traits (qui peuvent être vus par le compilateur comme étant des « sous-classes »).

J’espère sincèrement que cet article vous donnera un avant-goût de ce qu’il est possible de rencontrer lors d’un entretien, et qu’il aura pu vous aider à maximiser vos chances de réussite.

Bientôt, vous entendrez :

A bientôt dans un prochain article !👋

--

--

Thomas Zuk

Développeur Big Data, formateur et rédacteur de contenu sur les bonnes pratiques et le quotidien d'un Développeur Big Data !