« Celui qui aime apprendre est bien près du savoir » Confucius Note : Pour chaq

« Celui qui aime apprendre est bien près du savoir » Confucius Note : Pour chaque QCM de cette épreuve, une réponse juste égale 0,5 pt et une réponse fausse égale -0,25 pt. Une totalité de points inférieure à zéro revient à une note nulle. Pour chaque QCM, indiquer la(les) bonne(s) réponse(s) dans votre feuille de composition. Exercice 1 : Questions d’ordre général Q01) Expliquez succinctement le procédé de création d’un client et d’un serveur interagissant grâce à la technologie RMI. Vous pourrez par exemple, décrire la mise en œuvre d’une calculatrice dont les opérations (addition et multiplication) sont réalisées par des objets distants. 2pts Q02) Soit la classe Java suivante : public class TestThread { private int compte = 0; public TestThread() { Thread t = new Thread(new ComportementThread(Thread.currentThread().getName()) ); t.start(); try { t.join(); System.out.println("Compte = " + compte); } catch(Exception e) {} } private void incCompte(String threadName){ System.out.println(threadName + " : Ajout de 2000 au compte"); for(int i = 1; i <= 100; i++) compte += 20; } public class CrediterCompte extends Thread{ @Override public void run() { incCompte(Thread.currentThread().getName()); } } public class ComportementThread implements Runnable{ private String parent; ComportementThread(String parent){ this.parent = parent; } private void incCompte(){ CrediterCompte c1 = new CrediterCompte(); CrediterCompte c2 = new CrediterCompte(); CrediterCompte c3 = new CrediterCompte(); c1.start(); c2.start(); c3.start(); try {c1.join(); c2.join(); c3.join();} catch(Exception e) {} } @Override public void run() { final String me = Thread.currentThread().getName(); for(int i = 0; i < 5; i++){ final int num = i; Thread t = new Thread(){ public void run() { if(num % 2 == 0) try {Thread.sleep(1000 * (num + 2));} catch(Exception e) {} System.out.println(Thread.currentThread().getName() + " : Mon géniteur est " + me); } }; t.start(); try {if(num % 2 != 0) t.join();} catch(Exception e) {} } System.out.println(Thread.currentThread().getName() + « Celui qui aime apprendre est bien près du savoir » Confucius " : Mon géniteur est " + parent); incCompte(); } } public static void main(String[] args) { new TestThread(); } } 1- Quel est le résultat de l’exécution de la classe TestThread ci-dessus ? 3pts 2- L’exécution de TestThread fournit-elle toujours le même résultat ? Si non, quelle en est la cause et comment peut-on y remédier ? 2pts 3- Quel est le temps minimal d’exécution complète de la classe TestThread ? 1pt Exercice 2 : Conception d’un mini jeu vidéo (8pts) Pour votre entretien d’embauche dans une startup de haut rang, il vous est demandé de concevoir en langage Java, un jeu vidéo consistant à réunir plusieurs joueurs autour d’une série de Question à Choix Multiple (QCM). Les différents joueurs pourront être situés sur des machines distantes, pouvant communiquer via une connexion réseau dont le signal est supposé excellent. Le comportement de votre jeu sera le suivant : Lorsqu’un joueur démarrera l’application installée sur son poste, il lui sera demandé (à travers une boite de dialogue standard) de fournir un alias. Ensuite, un identifiant permettant de le distinguer des autres joueurs lui sera attribué. Une fois que le joueur sera identifié, il aura deux possibilités : (1) Il pourra démarrer une nouvelle partie en cliquant sur un bouton prévu à cet effet. (2) Il pourra aussi se connecter à une partie existante et en attente de compétiteurs ; pour cela, il devra sélectionner ladite partie puis valider. Chaque partie sera identifiée de manière unique et devra mettre en compétition 02 joueurs qui répondront à 10 QCM. Une partie démarrera lorsqu’elle comptera 02 participants et s’achèvera après le dénouement de sa dixième QCM. Durant la partie, chaque QCM sera proposée au même instant aux participants. Ces derniers auront alors 10 secondes pour y répondre. Pour une QCM donnée, chaque participant n’aura droit qu’à une seule proposition de réponse ; le point sera emporté par le candidat ayant répondu, le premier, correctement à ladite QCM. A l’issue d’une partie, le vainqueur sera le candidat qui aura enregistré le plus de points et les différents scores seront stockés dans un fichier (score.txt). Pour ce jeu, l’ingénieur en chef vous suggère de créer deux applications fonctionnant en mode client-serveur : (1) QCM Generator, le serveur, qui hébergera les différentes parties et contrôlera leur déroulement. (2) QCM Game, qui sera installé chez chaque gamer (joueur) pour leur permettre de créer et/ou de rejoindre des parties. Q01) L’application QCM Generator est-elle un intergiciel (middleware) ? Justifier votre réponse. 1pt Q02) En quel langage de programmation devrez-vous coder QCM Game si QCM Generator est codé en Java avec la technologie RMI ? Justifier votre réponse. 1pt Q03) Sera-t-il possible de coder QCM Game en un autre langage (le C par exemple) sachant que QCM Generator est codé en Java avec la technologie socket ? Justifier votre réponse. 1pt « Celui qui aime apprendre est bien près du savoir » Confucius Q04) L’ingénieur en chef vous propose d’utiliser la technologie socket en Java pour coder QCM Generator. Décrivez, de manière concise, une mise en œuvre de QCM Generator et de QCM Game satisfaisant les objectifs attendus. 3pts Q05) L’ingénieur en chef vous propose d’utiliser la technologie RMI en Java pour coder QCM Generator. Décrivez, de manière concise, une mise en œuvre de QCM Generator et de QCM Game satisfaisant les objectifs attendus. 2pts Exercice 3 : Un mini serveur http (4pts) Il vous est proposé de simuler un serveur http en Java en utilisant la technologie socket. Pour cela, vous devez créer une classe dénommée HTTPServerSimulator. Une fois votre serveur démarré sur un poste X (d’adresse IP 192.168.0.1), il devra être accessible en même temps par plusieurs clients http (navigateurs). L’accès au serveur se fera via une URL de la forme http://192.168.0.1:80/[Ressource]. Le serveur devra toujours être en attente d’une requête http. A l’arrivée d’une telle requête, il devra récupérer toutes les lignes de celle-ci via un Thread ; puis il répondra en fournissant un document html contenant comme corps la ressource demandée par le client. Par exemple, à la requête suivante, GET /MonSite HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 6.2; rv:47.0) Gecko/20100101 Firefox/47.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: ja_elastica_tpl=ja_elastica Connection: keep-alive le serveur fournira la réponse suivante : HTTP/1.1 200 OK Date: Thu Jun 30 09:24:39 CEST 2016 Server: HTTPServerSimulator/1.0 Content-Type: text/html Content-Length: 163 Expires: Thu Jun 30 10:24:39 CEST 2016 <html> <head> <title>Ressource demandée</title> <meta charset="utf-8" /> </head> <body> <h1>Vous avez demandé la ressource /MonSite</h1> </body> </html> Proposer une implémentation de la classe HTTPServerSimulator utilisant le protocole TCP/IP pour communiquer. 4pts Une bonne présentation de la copie est conseillée ! Bon courage !!! uploads/Sports/ exam-intergiciel-de-base 1 .pdf

  • 27
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Jui 08, 2022
  • Catégorie Sports
  • Langue French
  • Taille du fichier 0.2419MB