14 questions d’entretien d’embauche sur Java

Questions d’entretien pour recruter un développeur Java

Généralement, lorsque l’on parle de préparation pour l’entretien d’embauche d’un développeur Java, l’accent est mis sur le point de vue de la personne recrutée. Les candidats veulent savoir à quels types de questions ils doivent s’attendre afin de se préparer au mieux. Pourtant, en prenant un angle différent, on peut se demander : quelles questions un recruteur à la recherche d’un développeur Java doit-il poser aux candidats afin d’évaluer au mieux leurs compétences techniques ?

Dans une entreprise développant des logiciels, que le langage de programmation Java ou la programmation orientée objet en général soit un standard ou non, il est facile de trouver des questions de programmation et leurs réponses. Il est chose aisée d’utiliser Google pour rechercher la syntaxe du langage en question afin de faciliter la rédaction d’un entretien d’embauche sur Java.

Avant de commencer, voici une définition rapide du terme Java qui devrait vous aider si ce langage ne vous est pas entièrement familier :

Java is a high-level programming language developed by Sun Microsystems. It was originally designed for developing programs for set-top boxes and handheld devices, but later became a popular choice for creating web applications.

The Java syntax is similar to C++, but is strictly an object-oriented programming language. For example, most Java programs contain classes, which are used to define objects, and methods, which are assigned to individual classes. Java is also known for being more strict than C++, meaning variables and functions must be explicitly defined. This means Java source code may produce errors or “exceptions” more easily than other languages, but it also limits other types of errors that may be caused by undefined variables or unassigned types.

Christensson, P., Définition Java, techterms.com

Java définit une classe String pour représenter des tableaux de caractères. Répondez aux questions suivantes :

Un constructeur initialise un objet lors de sa création. Cependant, les constructeurs n'ont pas de type de retour explicite.

En général, vous utiliserez un constructeur pour donner des valeurs initiales aux variables d'instance définies par la classe, ou pour effectuer toute autre procédure de démarrage nécessaire pour créer un objet entièrement formé.

Toutes les classes ont des constructeurs, que vous en définissiez un ou non, car Java fournit automatiquement un constructeur par défaut qui initialise toutes les variables membres à zéro. Cependant, une fois que vous avez défini votre propre constructeur, le constructeur par défaut n'est plus utilisé.

Pourriez-vous citer quelques cadres de travail Java ?

Cette question d'entretien est une question de base : tout développeur Java compétent est en mesure de nommer quelques frameworks écrits en langage Java.
Au cours de l'entretien, le candidat interrogé doit mentionner au moins trois frameworks Java parmi cette liste :

  • JSF (Java Server Faces), un cadre web Java qui facilite la construction d'interfaces utilisateur pour les applications basées sur des serveurs
  • GWT (Google Web Toolkit), un ensemble d'outils open-source qui aide les programmeurs à créer et à maintenir des applications JavaScript dans Java Spring, un framework Java qui n'impose aucun modèle de programmation spécifique
  • Struts
  • Hiberner
  • Grails
  • Jouez !
  • Vaadin
  • Maven

Questions d'entretien sur la programmation mixte

Java définit une classe String pour représenter des tableaux de caractères. Répondez aux questions suivantes :

- Par quoi faut-il remplacer le "XXX" pour pouvoir comparer les deux principaux arcs de cordes ? Si les arguments sont : "Sun Microsystems" et "Sun microsystems", quel sera le résultat de l'exécution ? Y a-t-il un moyen de garantir qu'il les déclarera comme étant identiques ?
- Si les arguments sont plutôt : "Sun Microsystems" et "Sun Microsystems", quel sera le résultat de l'exécution ? "Sun Microsystem" et "Sun Microsystems", quel sera le résultat de l'exécution ?

1/ Après la création d'une chaîne, est-il possible de la modifier ? Considérez ce qui suit :
public static void main(String[] args) { String name = "James gosling"; // I want to change the 'g' to a 'G'. // Will this work at compile time? name.charAt(6) = 'G'; // Print with the standard system println to see “James Gosling” System.out.println(name); } 

Cela va-t-il fonctionner ? Si ce n'est pas le cas, quelles modifications faudrait-il apporter pour obtenir la chaîne souhaitée ?

2/ La classe String a plus d'un Comparateur. Considérez le code suivant :

public static void main(String[] args) { // This program received 2 arguments. We want to // determine if those two strings are equal. // Compare the first argument to the second argument boolean compareResult = (XXX); if (compareResult) { System.out.println("The Strings are the same."); } else { System.out.println("The Strings are not the same."); } // Print the main string args System.out.println(args[0]); System.out.println(args[1]); } 

- Par quoi faut-il remplacer le "XXX" pour pouvoir comparer les deux principaux arcs de cordes ? Si les arguments sont : "Sun Microsystems" et "Sun microsystems", quel sera le résultat de l'exécution ? Y a-t-il un moyen de garantir qu'il les déclarera comme étant identiques ?
- Si les arguments sont plutôt : "Sun Microsystems" et "Sun Microsystems", quel sera le résultat de l'exécution ? "Sun Microsystem" et "Sun Microsystems", quel sera le résultat de l'exécution ?

3/ Qu'est-ce que le pool de constantes de la chaîne Java ? (ou pool de chaînes de caractères Java) ? Il réside dans la mémoire de la pile ?

Justification

L'utilisation de représentations de chaînes de caractères est courante dans de nombreux langages, et Java ne fait pas exception. Il est important de comprendre comment les chaînes de caractères sont créées, analysées, imprimées et manipulées. C'est un sujet important qui constitue une question d'entretien importante pour les développeurs Java.   

Bonne réponse

  1. Non, cela échouera au moment de la compilation car il n'est pas possible de modifier une chaîne une fois qu'elle a été initialisée. Cette propriété est dite immuable. Pour que cela fonctionne, il faudrait recréer la chaîne contenant "James gosling". Une approche consiste à utiliser un tableau de caractères intermédiaires (en appelant la méthode toCharArray() sur le "nom"), à remplacer le "g" par la lettre majuscule, puis à recréer la chaîne avant de l'imprimer. Un bonus pour le candidat qui souligne que la fonction string replace(...) existe pour remplacer les caractères, mais ne peut pas être utilisée car toutes les instances de "g" minuscules seraient remplacées.
  2. Le comparateur exact dans cet exemple est soit égal(...) soit égalIgnoreCase(...). Le type de retour de ces deux méthodes est une valeur booléenne. Si la personne interrogée répond compareTo(...) ou compareToIgnoreCase(...), alors le crédit devrait être accordé, bien que le type de retour de ces méthodes soit un int, donc techniquement incorrect. Il n'en reste pas moins qu'elle démontre une connaissance de la langue.

    Dans le premier exemple, les chaînes sont identiques sous equalsIgnoreCase(...), mais différentes sous equals(...). Dans le deuxième exemple, il y a un "s" à la fin, ce qui fait que les chaînes sont différentes dans tous les cas.

  3. Le Java Constant String Pool est une zone de la mémoire du Heap (donc, pas de la mémoire de la pile) où sont stockées les chaînes de caractères. Cette approche est à l'origine de la raison pour laquelle les chaînes sont immuables en java.

  4. Par exemple :

    chaîne x = "chaîne principale" ;
    chaîne de caractères y = "machine virtuelle" ;
    chaîne z = "chaîne principale" ; 

    Les trois cordes ci-dessus sont stockées dans le pool de cordes, mais la partie intéressante est l'efficacité. x et y pointent tous deux vers la même zone dans la réserve de cordes, ce qui ne nécessite pas de duplication de l'espace. Sachant cela, il doit être clair que la modification de la valeur de x n'est pas autorisée car elle aurait l'effet secondaire non voulu de modifier z.

Quelles sont les différences entre la mémoire Stack et l'espace Heap ?

Justification

Afin d'améliorer l'efficacité, la JVM organise la mémoire pour que les applications puissent s'exécuter. Elle crée de l'espace de pile et de l'espace de tas, chacun étant utilisé par des opérations différentes. Comprendre l'allocation de la mémoire à ce niveau peut conduire à un ramassage des déchets plus prévisible et, en fin de compte, à une efficacité accrue.

Bonne réponse

La mémoire en pile est utilisée pour l'allocation de mémoire statique, comme les valeurs primitives à l'intérieur d'une méthode. Elle est toujours utilisée pour l'exécution d'un thread. La pile s'agrandit lorsque les méthodes sont appelées, et se réduit lorsqu'elles reviennent. Si la mémoire allouée pour la pile est dépassée, l'exception java.lang.StackOverFlowError est lancée.

La mémoire de tas est utilisée pour l'allocation de mémoire dynamique, comme les objets java. Plus précisément, l'objet est stocké dans le tas, tandis que la référence à l'objet est stockée dans la pile. Les classes JRE sont également stockées dans le tas au moment de l'exécution. L'accès aux données dans le tas est plus lent que dans la mémoire de la pile. Le tas requiert l'action du collecteur de déchets afin de libérer les objets inutilisés. Si la mémoire allouée au tas est dépassée, l'exception java.lang.OutOfMemoryError est lancée.

Mauvaise réponse

Le fait de n'avoir jamais entendu parler de la pile ou du tas indiquerait une connaissance superficielle du langage de programmation java. De plus, la terminologie est typique d'une culture générale de programmation. Le diagnostic des erreurs liées à la mémoire, telles qu'un débordement de pile causé par un comportement incorrect d'une fonction récursive, serait plus facile avec cette compréhension.

Deux termes liés à la classe utilisés dans la programmation java sont "subclass" et "nested class". Expliquez les différences entre ces deux termes. Pourquoi choisir l'une plutôt que l'autre ? Laquelle est parfois appelée "classe intérieure" ?

Justification

Dans la conception orientée objet, il y a souvent une confusion sur le placement des classes dans la hiérarchie. Les classes imbriquées sont relativement rares par rapport aux sous-classes, mais leur utilisation est bénéfique dans de nombreuses situations. La connaissance de leur existence et de leur mode d'utilisation doit être considérée comme un atout.

Bonne réponse

Une sous-classe est une extension d'une autre classe, et est souvent une spécialisation de l'original. Les sous-classes héritent des membres publics et protégés de leur super-classe. Les sous-classes peuvent être instanciées indépendamment de la superclasse, et en fait, c'est toujours le cas lorsque la superclasse est une classe abstraite.

Une classe imbriquée est une classe à l'intérieur d'une classe, qui dans certains cas est une classe intérieure. Le champ d'application de la classe intérieure comprend tous les membres de sa classe extérieure, ce qui lui donne accès à ces variables et méthodes. Comme le corps existe entièrement au sein de la classe englobante, il ne peut pas être instancié indépendamment, sans elle.

L'utilisation d'une classe interne peut améliorer la conception orientée objet en organisant davantage le code. L'objectif est limité dans la mesure où il existe pour servir sa classe englobante. Si la classe interne offre des fonctionnalités utiles à une plus grande échelle, il serait plus logique de l'avoir comme classe de haut niveau. Les classes internes sont couramment utilisées comme fonctions de rappel pour les composants de l'interface graphique.

Bonus

Il existe deux types de classes imbriquées. Plus précisément, il existe une classe imbriquée statique, qui n'a pas directement accès aux autres membres de la classe englobante. Celles-ci ne sont pas souvent utilisées, c'est pourquoi le fait de les connaître est un bonus par opposition à l'ignorance qui peut entraîner une pénalité. L'autre type est une classe imbriquée non statique, qui est la version que l'on appelle une classe intérieure. Ceux-ci ont en effet accès à tous les membres de la classe englobante, y compris aux méthodes privées.

Mauvaise réponse

Le candidat doit être pardonné de n'avoir jamais utilisé une classe imbriquée. Bien qu'utile, et susceptible d'être vu si l'on maintient une base de code existante, le concept est simple. Les classes imbriquées rendent souvent le code plus élégant et plus facile à maintenir, mais certains concepteurs considèrent que c'est une question de style. Les sous-classes, d'autre part, sont un élément fondamental de la programmation orientée objet que tout développeur java devrait connaître. Ne pas pouvoir discuter facilement des sous-classes au sein d'une hiérarchie de classes est un sérieux signal d'alarme.

Deux classes de collection sont disponibles en programmation java : Array et List. En quoi les méthodes diffèrent-elles entre ces deux objets conteneurs, et dans quelles circonstances choisiriez-vous l'une plutôt que l'autre ?

Justification

L'utilisation de conteneurs est courante en Java et dans d'autres langages de programmation. La liste est une structure de données dynamique, tandis que le tableau est statique. Il est important de reconnaître que chacun d'entre eux est mieux adapté à certaines applications, et à ce titre, le candidat doit les connaître. Avoir une connaissance approfondie des types de données et des classes de conteneurs disponibles permettra en fin de compte de gagner du temps de développement.

Bonne réponse

Array

  1. Les tableaux sont de taille statique, ils ne peuvent donc ni croître ni diminuer en termes de nombre d'éléments. Cela signifie qu'il existe des méthodes pour accéder aux éléments et les modifier, mais pas pour les insérer ou les supprimer.
  2. Java fournit des méthodes pour effectuer une recherche binaire ou un tri sur un tableau. De plus, un tableau peut être initialisé en utilisant la méthode fill(), ou comparé en utilisant le comparateur equals().
  3. La taille d'un tableau est fixée lors de sa création.
  4. L'accès aléatoire d'un élément dans un tableau est très efficace.
  5. Les tableaux sont plus adaptés à des collections d'éléments de longueur fixe.
  6. Tous les éléments sont du même type, par exemple :

int[] interviewArray = new int[5];
or
int[] arrayForInterview = {3, 1, 4, 1, 5}; 

Ces deux tableaux contiennent cinq entiers.

Vecteur

Les candidats doivent savoir quand il est approprié et possible d'utiliser ces mots clés. En particulier, ils doivent savoir que l'asynchronisation ne peut être placée avant le mot-clé de fonction sur une définition de fonction. La fonction est alors considérée comme un retour de promesse. Le mot-clé "await" ne peut être utilisé qu'à l'intérieur d'une telle fonction asynchrone et doit être placé avant un appel à une fonction qui rendra une Promesse.

  1. Les éléments d'une liste peuvent être ajoutés ou supprimés, ce qui signifie que la taille de la liste peut changer. Les méthodes permettent de nombreux types de manipulations, y compris l'insertion ou la suppression dans un index spécifique. Les plages peuvent également être manipulées.
  2. La Liste est une interface, donc quand on manipule une Liste, une vraie classe, généralement ArrayList, est utilisée en coulisse
  3. Une liste repose sur les méthodes de tri de Collections, telles que Collections.sort().
  4. Les méthodes de recherche contain(), indexOf(), et lastIndexOf() sont des exemples qui peuvent être utilisés pour rechercher les éléments. Cependant, pour effectuer une recherche binaire, il faut appeler la méthode plus générale : Collections.binarySearch(...)
  5. Les listes peuvent contenir des objets de type mixte, par exemple :

List interviewList = new ArrayList();
interviewList.add(3);
interviewList.add(1415);
interviewList.add(“Pi”); 

Bonus

Les tableaux peuvent stocker des objets, il existe donc une solution de rechange pour ceux qui sont enclins à mélanger les types dans un tableau. De plus, le candidat doit être crédité de savoir que les Listes remplacent les Vecteurs qui ne sont plus couramment utilisés en Java. La raison est liée à la simultanéité et à la synchronisation des opérations. Il est clair qu'une explication plus détaillée dépasse la portée de cette question - cependant, la mention de ce point est digne d'intérêt.

Mauvaise réponse

Les tableaux et les listes, parmi d'autres classes et interfaces intégrées, y compris les collections, sont très courants dans la programmation Java et le développement d'applications. Un candidat qui n'est pas à l'aise avec ces fonctionnalités manque presque certainement d'expérience avec le langage.

Contrairement au C++, Java ne prend pas en charge l'héritage multiple. Comment la programmation avec une interface apportera-t-elle une réponse à ce problème ? Une interface fait-elle partie de la hiérarchie des classes ?

Justification

S'il existe des points communs entre les langues que de nombreux programmeurs connaissent bien, il existe aussi des distinctions qui permettent de les définir. Dans un entretien en Java, il y aura des questions de base en Java qui aideront à évaluer dans quelle mesure le candidat connaît les spécificités du langage de programmation Java. Étant donné la question du problème du diamant en C++, il est intéressant de tester les connaissances du candidat dans une perspective java.

Bonne réponse

Une interface est similaire à une classe en ce sens qu'elle peut contenir différents types de méthodes, mais différente parce qu'elle ne détient pas l'état. Les interfaces sont intrinsèquement abstraites, et leurs méthodes doivent être implémentées par une classe. L'interface n'est pas instanciée, elle est implémentée. Contrairement au C++, une classe ne peut étendre qu'un seul parent (c'est-à-dire qu'elle ne peut avoir qu'une seule superclasse). Une interface, en revanche, est capable d'étendre plus d'une interface parent. Par exemple :

public interface CheckerBoard {
    public void setSize(int rowCount, int columnCount); 
}
public interface Game {
public void setNumberOfPlayers();
public void play();
}
public interface ChessGame extends CheckerBoard, Game {} 

Dans cet exemple, l'interface ChessGame hérite à la fois de CheckerBoard et de Game.

Mauvaise réponse

Si la personne interrogée ne sait pas ce qu'est l'héritage multiple, cela suggère un manque d'expérience en matière de conception orientée objet. Cela n'est pas essentiel pour toutes les applications, bien qu'il soit important de reconnaître que java est intrinsèquement OO.

Qu'est-ce que la machine virtuelle Java ? Quel en est l'objectif principal et avec quel type de code fonctionne-t-elle ?

Justification

Aucune interview en Java ne serait complète sans une question sur le thème de la machine virtuelle. La JVM est un élément clé de Java, et les programmeurs java l'apprennent très tôt. Si la JVM est capable d'exécuter du bytecode généré par d'autres langages, tels que JRuby et Jython, cela n'enlève rien au fait qu'elle est essentielle à la java elle-même.

Bonne réponse

La JVM est une machine virtuelle qui permet à l'ordinateur d'exécuter des programmes Java qui ont été compilés en bytecode. Le bytecode est indépendant de la plateforme, et s'exécute sur tout ordinateur qui héberge une JVM. Il comprend un compilateur juste à temps (JIT) qui convertit le bytecode en instructions en langage machine, permettant aux applications de s'exécuter aussi rapidement qu'un exécutable natif.

Mauvaise réponse

La JVM est l'un des principaux composants qui font de Java ce qu'il est. Le fait de ne pas connaître la JVM indique probablement un manque d'expérience avec le langage.

Quelles sont les méthodes et les classes finales ? Une classe abstraite supportera-t-elle les méthodes finales ?

Justification

Le dernier mot-clé est commun et doit être bien compris par les programmeurs java. Au cours de la phase de conception OO, il est normalement décidé si les classes doivent être extensibles. Si ce n'est pas le cas, elles sont marquées comme finales afin de limiter les effets secondaires potentiels de sous-classes qui n'ont pas été envisagées. Il s'agit d'une caractéristique importante qui devrait être utilisée pour un code plus robuste et plus facile à maintenir.

Bonne réponse

Une méthode qui est déclarée avec le mot-clé final ne peut pas être annulée dans les sous-classes. Cette méthode est utilisée dans les hiérarchies où la mise en œuvre de la méthode doit être cohérente dans l'ensemble. La déclaration finale d'une classe interdit totalement le sous-classement. Oui, il est possible d'inclure des méthodes finales dans une classe abstraite. Cela permet de s'assurer que les sous-classes ne peuvent pas passer outre la méthode.

Mauvaise réponse

Si le candidat n'est pas familier avec le mot-clé final, qu'il soit utilisé au niveau de la classe ou de la méthode, alors cela suggère une relative inexpérience de la langue. Même pour les programmeurs inexpérimentés qui ont participé à la conception orientée objet, le concept de classe finale devrait être familier.

La programmation Java permet de créer un fil de discussion de différentes manières. Quelles sont-elles et quelle est la méthode préférée ? Expliquez.

Justification

Contrairement au C++, java contient un support intégré pour le multithreading. C'est une fonctionnalité riche et puissante qui est à la fois pertinente et utile dans de nombreuses applications. En tant que tel, le candidat doit être familier avec les bases.

Bonne réponse

Que se passe-t-il dans le cas où la réduction est appelée sur un tableau vide sans fournir la valeur initiale facultative de l'accumulateur ?

public class JavaInterviewClass implements Runnable {
    public void run() {
    System.out.println(“My example public class prints this line from a thread.”);
    }
}    
Pour exécuter la méthode run(), passez une instance de la classe dans un Thread, comme suit :
Thread interviewThread = new Thread(new JavaInterviewClass ());
interviewThread.start(); 
La deuxième façon de créer un fil de discussion est d'étendre la classe de fil de discussion. La sous-classe remplacera la méthode run(). Après cela, il suffit de créer une instance de la classe.
public class JavaInterviewClass extends Thread {
    public void run() {
    System.out.println(“My example public class extends the Thread class.”);
    }
} 
Pour exécuter le fil de discussion, il suffit d'instancier la classe et d'appeler start(), comme suit :
JavaInterviewClass myInterview = new JavaInterviewClass (); myInterview.start(); 

Bonus

Bien que l'implémentation de l'interface exécutable et l'extension de la classe Thread soient deux moyens populaires de créer un thread, il est également possible d'utiliser le framework Executor. Celui-ci permet de travailler directement avec les threads, mais il est moins connu. Il comprend des méthodes telles que newSingleThreadExecutor(), newFixedThreadPool() et submit() pour créer des tâches d'exécution. La connaissance de l'utilisation du framework Executor implique que le candidat soit très à l'aise avec la création et l'utilisation de threads en java.

Mauvaise réponse

Si le candidat n'est pas à l'aise avec l'utilisation des fils de discussion, il passe à côté d'une caractéristique puissante et importante de la langue. C'est important car comprendre le multithreading ne se limite pas à rechercher la syntaxe de quelques commandes. Il s'agit plutôt d'une approche qui doit être envisagée lors de la conception et du développement d'une application.

Le code Java a un support intégré pour la concurrence dans sa classe Thread. La simultanéité a son propre ensemble de problèmes tels que l'impasse et les conditions de course. Décrivez brièvement les variables Atomic en Java et leur utilisation. Ensuite, il est indiqué que la méthode start() est utilisée pour créer une pile d'appels séparée avant que la méthode run() ne soit utilisée pour exécuter un thread. Que font les méthodes yield(), sleep() et join() ?

Justification

La prise en charge du multithreading par Java peut entraîner des problèmes liés à la concurrence. Les connaissances du candidat concernant ces problèmes doivent être évaluées et prises en compte.

Bonne réponse

  1. Une variable atomique est une variable "mise à jour atomique", ce qui signifie que l'intégrité des données est assurée par l'utilisation d'algorithmes non bloquants. Cette fonctionnalité est généralement mise en œuvre au niveau du code machine. Java prend en charge plusieurs variables atomiques, le plus souvent AtomicBoolean, AtomicInteger, AtomicLong et AtomicReference. Il existe également plusieurs méthodes qui permettent de récupérer et de modifier ces variables, notamment get(), set(), lazySet(), compareAndSet() et weakCompareAndSet(). Utilisées correctement, les variables atomiques peuvent être utilisées pour mettre en œuvre des méthodes "thread safe" (multithreading safe) qui traitent efficacement certains problèmes liés à la concurrence.
  2. rendement() : Cette méthode informe l'environnement que le fil de discussion actuel n'est pas en train d'achever une tâche de haute priorité, et est prêt à en interrompre l'exécution. À condition que l'environnement sous-jacent supporte l'ordonnancement préventif, elle suspendra le fil s'il y en a un autre qui doit s'exécuter. S'il n'y a pas de deuxième fil, ou si le deuxième fil se termine, le fil en cours reprendra le contrôle et continuera à s'exécuter.
  3. sommeil() : Cette méthode fait dormir le fil courant, ou met en pause son exécution, pendant un nombre de millisecondes déterminé. Il est également possible de combiner un certain nombre de millisecondes et de nanosecondes. Pendant que le fil courant est en sommeil, un autre fil sera exécuté, ou sinon le CPU restera inactif. Sous réserve de la précision de l'horloge du système et des minuteurs, le fil de discussion reprendra le contrôle une fois le compte à rebours terminé.
  4. join() : Cette méthode est utilisée pour joindre deux l'exécution de deux fils ensemble. Pour clarifier, si le fil A appelle join() sur le fil B, alors A commencera à attendre. Une fois que B a terminé, ou qu'un délai prédéfini a expiré, A reprendra le contrôle et continuera l'exécution.

Mauvaise réponse

Le fait de connaître les fils de discussion Java, mais de ne pas être conscient des problèmes liés à la concurrence peut entraîner de graves erreurs. La majorité des appareils, des ordinateurs de bureau aux appareils mobiles en passant par les ordinateurs à carte unique, prennent désormais généralement en charge le multithreading et la concurrence. Il est important de comprendre la bonne utilisation des threads, et d'être conscient des méthodes fournies par java pour les prendre en charge.

Conclusion

Les questions de cet article sont utiles pour évaluer les compétences d'un futur programmeur Java. En ce qui concerne les questions d'entretien à préparer pour un développeur Java, il est important de se rappeler que les spécificités du langage peuvent être facilement référencées en utilisant l'aide et la documentation en ligne. Les points subtils d'un langage ne sont pas aussi importants que la façon dont on applique la logique. Cela dit, les candidats à ce poste sont censés connaître le langage et ne pas avoir besoin d'une formation approfondie avant que le travail réel ne commence. Les compétences requises seront dictées par le travail à effectuer, et la variation des questions données ci-dessus aidera à faire cette évaluation. N'oubliez pas que l'une des meilleures façons d'évaluer les compétences du candidat pour votre projet est d'effectuer une évaluation pratique de la programmation, ce qui est bien plus efficace que des questions d'entretien orales pour engager un programmeur Java hautement qualifié.

Java définit une classe String pour représenter des tableaux de caractères. Répondez aux questions suivantes :

Un constructeur initialise un objet lors de sa création. Cependant, les constructeurs n'ont pas de type de retour explicite.

En général, vous utiliserez un constructeur pour donner des valeurs initiales aux variables d'instance définies par la classe, ou pour effectuer toute autre procédure de démarrage nécessaire pour créer un objet entièrement formé.

Toutes les classes ont des constructeurs, que vous en définissiez un ou non, car Java fournit automatiquement un constructeur par défaut qui initialise toutes les variables membres à zéro. Cependant, une fois que vous avez défini votre propre constructeur, le constructeur par défaut n'est plus utilisé.

Pourriez-vous citer quelques cadres de travail Java ?

Cette question d'entretien est une question de base : tout développeur Java compétent est en mesure de nommer quelques frameworks écrits en langage Java.
Au cours de l'entretien, le candidat interrogé doit mentionner au moins trois frameworks Java parmi cette liste :

  • JSF (Java Server Faces), un cadre web Java qui facilite la construction d'interfaces utilisateur pour les applications basées sur des serveurs
  • GWT (Google Web Toolkit), un ensemble d'outils open-source qui aide les programmeurs à créer et à maintenir des applications JavaScript dans Java Spring, un framework Java qui n'impose aucun modèle de programmation spécifique
  • Struts
  • Hiberner
  • Grails
  • Jouez !
  • Vaadin
  • Maven

Questions d'entretien sur la programmation mixte

Java définit une classe String pour représenter des tableaux de caractères. Répondez aux questions suivantes :