Qu'est-ce qu'un deadlock ? En quoi diffère-t-il d'une condition de course ? Comment éviter un deadlock, même si il est impossible de déterminer l'ordre de prise des verrous à l'avance ?
Java
Si vous conceviez un GC, quelles approches de collecte des déchets connaissez-vous en plus de la traversée du graphe de reachabilité?
Implémentez RecommenderService avec les méthodes getTop(User user, int limit) et addDocument(Document document), en utilisant un stockage en mémoire
Quel est le poids d'un pointeur ? Qu'est-ce que c'est ?
À quoi sert une pile et à quoi sert un tas ? Quelle est la différence ?
Qu'est-ce qu'un heap (tas) ?
Pourquoi le test échouait-il avec une NullPointerException et comment le corriger?
Comment la suppression d'objets du heap se fait-elle en Java ? Parlez du Garbage Collector.
Comparez les performances des extraits de code suivants qui copient des éléments d’un tableau d’Integer vers un tableau d’int et vice versa, y compris le cas où de nouveaux objets Integer sont créés à partir de valeurs int: ```java int SIZE = 1000000; int[] x = new int[SIZE]; Integer[] y = new Integer[SIZE]; for (;;) { for (int i = 0; i < SIZE; ++i) { x[i] = y[i]; } } ``` ```java int SIZE = 1000000; int[] x = new int[SIZE]; Integer[] y = new Integer[SIZE]; for (;;) { for (int i = 0; i < SIZE; ++i) { y[i] = x[i]; } } ``` ```java int SIZE = 1000000; int[] x = new int[SIZE]; Integer[] y = new Integer[SIZE]; for (;;) { for (int i = 0; i < SIZE; ++i) { y[i] = new Integer(x[i]); } } ``` Analysez et expliquez les différences de performance et de comportement entre ces approches.
Quel principe SOLID est violé dans l'implémentation actuelle, où le service est fortement couplé à une implémentation spécifique de stockage (ArrayList) ?
Quels moyens de communication inter-processus (IPC) connaissez-vous au niveau des interfaces du système d'exploitation Unix?
Quel problème peut survenir en environnement de production lors de l'accès simultané à un service par plusieurs requêtes REST?
int SIZE = 1000000; int[] x = new int[SIZE]; Integer[] y = new Integer[SIZE]; for (;;) { for (int i = 0; i < SIZE; ++i) { y[i] = new Integer(x[i]); } }
À quoi sert synchronized ? Que utiliserais-tu pour implémenter un compteur thread-safe au lieu de synchronized ?
Comment un primitif apparaît-il dans la pile et comment dans le tas?
/** * Recherche de deux nombres dans un tableau dont la somme est égale à un nombre donné * <p> * Écris une fonction qui prend en premier argument un tableau de nombres positifs non triés * et en second argument un nombre positif. La fonction doit retourner true si dans le tableau * il y a 2 nombres dont la somme donne le second argument. * <p> * Entrée : ([10, 15, 3, 7], 17) * Sortie : true */
Quels sont les inconvénients de l'approche actuelle consistant à trier toute la liste à chaque appel de getTop?
Déchiffrez l'abréviation ACID et expliquez chaque propriété.
Comment bien implémenter les dépendances (Injection de Dépendances) dans un service — quelle approche est préférée?
Qu'est-ce que l'appel système fork dans les systèmes d'exploitation de la famille Unix?