Bonjour,
Je suis actuellement en train de réaliser un petit questionnaire Java / Java EE. L'idée est de répertorier les points importants du langage Java.
Si certains d'entre vous pouvaient tout d'abord jeter un œil aux réponses afin de vérifier que je n'ai pas écrit trop d'âneries. Il y a surement des erreurs ainsi il ne faut pour l'instant pas se fier au réponses qui sont écrites avant qu'elles ne soient corrigées par des membres confirmés.
L'idée est ensuite d'étoffer ce questionnaire, donc si vous avez des idées de nouvelles questions plus poussées portant sur des thèmes non abordés (par exemple la généricité, la réflexivité etc...), ça serait sympa de les poster.
Voici le questionnaire pour l'instant :
1) Quand Java a-t-il été présenté pour la première fois ?
Java a été présenté pour la première fois en 1995
2) Qui sont les fondateurs de Java ?
James Gosling et Bill Joy.
3) Qui s’occupe actuellement du développement de Java ?
C’est la société Oracle qui a racheté Sun Microsytems en 2009.
4) Java est-il un langage compilé ou interprété ?
Java est à la fois un langage compilé et interprété.
Compilé car le code source est transformé en byte code durant la phase de compilation.
Interprété car c’est la JVM qui interprète le byte code en langage machine (je n'en suis pas certain). Cela permet notamment la portabilité d’une application sur différents OS.
5) Qu’est-ce qu’une classe ?
Une classe définit la structure d’un objet, elle contient des attributs et des méthodes.
6) Quelle est la différence entre une classe abstraite et une interface ?
La classe abstraite permet de factoriser du code.
Une interface permet de présenter un ensemble de services sans se préoccuper de comment ils seront implémentés.
7) Qu’est-ce que l’opérateur this ?
Le mot-clé this permet de désigner l’instance de la classe qui est manipulée.
8) Une interface peut-elle contenir une méthode statique ?
Non, une interface ne peut en aucun cas contenir une méthode statique.
Les méthodes déclarées dans une interface sont par défaut abstraite et publique.
9) Qu’est ce que le downcasting explicite et implicite ? Lequel est interdit ?
Le downcasting permet de caster une classe vers une de plus bas niveau (qui dérive ou implémente la classe initiale). Le downcasting implicite n’est pas autorisé, il faut toujours préciser le type de classe vers lequel on souhaite effectuer le cast.
10) Le downcasting explicit est-il toujours autorisé ?
Non, il faut que la classe qui fait l’objet du cast soit bien du type de l’objet référencé ou d’une classe dérivée.
11) Qu’est ce que l’upcasting ? Est-il toujours autorisé ?
L’upcasting permet de caster une classe en une classe de plus haut niveau. L’upcasting est toujours autorisé.
12) Qu’est qu’un wrapper ?
Un wrapper aussi appelé enveloppeur est la représentation d’un type primitif sous la forme d’une classe qui contient des méthodes facilitant sa manipulation.
13) Qu’est ce que l’autoboxing ?
C’est le mécanisme qui permet de transformer un type primitif en un wrapper. Le cheminement inverse est appelé unboxing.
14) Qu’est ce que la sérialisation ?
La sérialisation permet de transformer un objet en un flux de données binaires, permettant de faire transiter des objets à travers le réseau ou encore de les stocker sur disque dur afin de les récupérer à l’identique.
15) Que signifie le mot clé transient ?
Le mot clé transient permet d’indiquer à un attribut qu’il ne doit pas être sérialisé.
16) Qu’est ce qu’une variable de classe ?
Une variable de classe est une variable commune à toutes les instances de la classe.
17) Que signifie le mot clé finalize ?
La méthode finalize est appelée par le garbage collector avant qu’une instance ne soit détruite de la mémoire.
18) Quels sont les 4 types d’encapsulation en Java ?
Privée : attribut ou méthode accessible uniquement à l’intérieur de la classe.
Protégé : attribut ou méthode accessible au sein de la classe ainsi que dans les classes filles et également aux classes du package.
Publique : attribut ou méthode accessible aussi bien à l’intérieur qu’à l’extérieur de la classe.
Défaut : attribut ou méthode accessible par les classes présentes dans le même package.
19) Peut-on déclarer une classe statique ?
Uniquement si cette classe est définit à l’intérieur d’une classe.
20) Qu’est ce que la signature d’une méthode ?
La signature d’une méthode permet d’identifier une méthode dans une classe. Elle se compose du nom de la méthode, de son type de retour ainsi que le nombre et le type des paramètres de la méthode.
21) Qu’est ce que la surcharge de méthode ?
La surcharge de méthode intervient lorsque deux méthodes définies dans une même classe possèdent les mêmes noms mais un nombre ou des types d’arguments différents.
22) Qu’est ce que la redéfinition d’une méthode ?
La redéfinition d’une méthode intervient lorsqu’une classe dérivée redéfinit une méthode existante dans la classe mère. Elle doit avoir la même signature que la méthode définie dans la classe mère.
23) Qu’elle est la différence entre un int et un long ?
Un long permettra de représenter un nombre plus grand qu’un int. Un long est codé sur 8 octets tandis qu’un int est lui codé sur 4 octets.
24) Quels types de données peuvent être utilisés pour représenter un nombre réel ?
Les types float et double permettent de représenter un nombre réel.
25) Que signifient les mots-clés suivants : final, finally et finalize ?
Final permet de signifier pour une variable que sa valeur ne pourra pas être modifiée.
Finally est le bloc situé après un Try ou un Try/Catch dont les instructions seront toujours exécutées.
Finalize correspond à la fonction qui est appelée par le GC avant la destruction d’une instance de la mémoire.
26) Qu’est-ce qu’un EJB ?
Un EJB est une classe permettant d’exécuter la logique métier au sein d’une application Java EE.
27) Qu’est-ce qu’une servlet, une jsp ?
Une servlet est une classe qui s'exécute sur le serveur pour traiter une requête HTTP.
Une jsp (Java Server Pages) correspond à une page web dont le contenu est dynamique du fait qu’elle permet d’exécuter du code java côté serveur. Au moment de l’appel d’une page JSP, le moteur de JSP va transformer la page JSP en servlet qui sera ainsi exécutée côté serveur afin de renvoyer une page html au navigateur.
28) Une méthode non statique peut-elle manipuler des variables statiques ?
Oui, les variables statiques sont accessibles par toutes les instances de la classe.
29) En quoi consiste JNI ?
JNI (Java Native Interface) permet d’écrire du code natif (spécifique au matériel et au système d’exploitation de la machine)
30) L’héritage multiple est-il possible en Java ?
Non contrairement au C++, l’héritage multiple est interdit en Java.
31) Une HashMap accepte-t-elle deux clés identiques ?
Non une Map permet de stocker des tuples <clé, valeur> ou la clé doit obligatoirement être unique.
32) Qu’est-ce qu’une classe immuable ?
Une classe immuable est une classe qui définit des objets dont la valeur ne pourra être modifiée après l’initialisation. Exemple : les wrappers, la classe String.
33) Qu’elle est la différence entre String et StringBuffer ?
String est une classe immuable contrairement à StringBuffer.
34) Qu’elle classe est la plus adaptée pour concaténer plusieurs chaînes de caractères ?
La classe StringBuffer, car elle n’est pas immuable alors que la classe String renverra une nouvelle chaîne de caractères à chaque utilisation de l’opérateur +.
35) Est-il possible de faire un override sur une méthode statique ?
Faux, on ne peut pas redéfinir une méthode statique
36) Une méthode d’une interface est publique et abstraite par défaut ?
Oui, on ne peut déclarer une méthode privée ou protégée dans une interface.
37) Qu’est-ce qu’une inner class ?
Une inner classe (classe interne) correspond à une classe définie à l’intérieur d’une autre classe.
38) Une variable déclarée dans une interface est par défaut publique, statique et finale ?
Vrai, on ne peut pas modifier une variable déclarée au sein d’une interface.
39) Le passage de paramètre dans une méthode se fait par valeur ou par référence ?
En java, les paramètres pour les types primitifs sont passés par valeur. Pour les types objets c’est une copie de la référence Java qui est transmise. Ainsi lorsqu’on change la valeur de l’objet passé en paramètre, cela n’affecte pas l’objet qui a été passé en paramètre lors de l’appel de la méthode.
Exemple :
40) Quelles sont les étapes à effectuer pour créer une classe immuable ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public class TestParam { private int i; public TestParam(int i) { this.i = i; } public int getI() { return i; } public static void modifyTestParam (TestParam t) { t = new TestParam(5); } public static void main(String[] args) { TestParam t1 = new TestParam(1); TestParam.modifyTestParam(t1); System.out.println(t1.getI()); -> Retourne 1 } }
Il faut :
- Déclarer la classe en tant que final pour éviter la redéfinition de méthodes par une classe fille.
- Que tous les champs soient privés et final pour interdire toutes modifications après l’initialisation.
- Ne pas définir les setters, ni de méthodes permettant de modifier la valeur des données de la classe.
- Que pour une méthode dont le but est de modifier les valeurs de l’objet qu’elle renvoie une nouvelle instance de l’objet.
- Que les getters renvoient une valeur immuable ou une copie de l’objet.
- Ne pas implémenter l’interface Cloneable
41) Quelle API Java permet de se connecter à une base de données ?
JDBC
42) Quelle est la différence entre la méthode equals et == ?
== fait le test sur l’égalité des deux objets (si l’adresse en mémoire est identique).
equals fait le test sur l’égalité de la valeur (du contenu) de deux objets.
43) A quoi sert la méthode hashCode() ?
La fonction de hashCode sera utilisée pour retrouver des objets dans une table de hachage (HashMap par exemple) avec un temps de performance minimal.
Deux objets identiques doivent renvoyer la même valeur de hachage. Elle doit également être en cohérence avec la méthode equals, en effet deux objets dont la méthode equals retourne true doivent retourner la même valeur de hachage. Cependant deux objets n’ayant pas les mêmes valeurs peuvent très bien renvoyer la même valeur de hachage.
D’après ce que j’ai compris, une HashMap fonctionne comme un tableau de Vecteur d’une taille donnée T. Pour stocker un couple <clé, valeur>, on hache la clé, ce qui nous retourne un nombre que l’on calcule modulo T pour récupérer l’index i du tableau. On stocke le couple <clé, valeur> dans le vecteur situé à l’index i du tableau. Pour récupérer un couple, on fait le même processus pour récupérer l’index du tableau et on utilise la méthode equals pour retrouver la clé dans le vecteur.
On comprend donc que deux objets dont la méthode equals retourne true, doivent retourner la même valeur de hachage sinon dans le cas contraire on ne retrouvera pas le bon indice du tableau.
44) Différence entre Comparable et Comparator ?
Comparable permet de définir la comparaison la plus naturelle pour cet objet. Elle est implémentée directement au sein de la classe.
Comparator permet de définir une comparaison possible selon un besoin particulier. On implémente généralement l’interface Comparator dans une nouvelle classe.
45) Singleton est-il thread safe ?
Le design pattern est thread safe si l’on ajoute le mot-clé synchronized à la méthode getInstance().
46) Quels sont les différents types de classes internes ?
- Les classes statiques. Elles ne font référence à aucune instance de la classe englobante.
- Les classes membres qui sont des classes non statiques déclarées à l’intérieur d’une classe.
- Les classes locales. Elles sont déclarées à l’intérieur d’une méthode.
- Les classes anonymes. Elles sont déclarées directement au sein d’une instruction. Elles permettent directement d’implémenter une interface où d’étendre une classe.
47) Quelle est la différence entre JAR, WAR et EAR ?
War contient une application web (JSP/servlet).
Jar contient une application Java / EJB.
Ear peut contenir à la fois des Jars et des Wars.
48) A quoi sert l’opérateur instanceof ?
L’opérateur instanceof permet de vérifier si un objet correspond l’instance d’une classe particulière.
49) Différence entre throw et throws ?
Throw est utilisé pour lancer une exception.
Thows permet d’indiquer qu’une méthode est susceptible de lever une exception.
50) Expliquer le fonctionnement d’une exception contrôlée et d’une exception non-contrôlée.
Les exceptions contrôlées héritent de la classe Exception et doivent obligatoirement être gérées par l’utilisateur
Les exceptions non contrôlées héritent de RuntimeException et n’obligent pas l’utilisateur à la gestion de l’exception.
51) A quoi correspond l’opérateur ^ ?
Il correspond à l’opérateur OU exclusif.
Partager