100% ont trouvé ce document utile (2 votes)
2K vues131 pages

Codingame-Angular 2, Hibernate, Java, Spring Framework - Senior-670320

Transféré par

Kais Trabelsi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (2 votes)
2K vues131 pages

Codingame-Angular 2, Hibernate, Java, Spring Framework - Senior-670320

Transféré par

Kais Trabelsi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 131

Afin d'éviter la fuite de questions, ce rapport ne doit pas être partagé avec les candidats.

Islem Ghouma ([email protected])

Campagne : Angular 2+, Hibernate, Java, Spring Framework - Senior Domaine(s) : Angular 2+, Hibernate, Java, Spring Framework

Langage : Français Date : 01/02/2023

MEILLEUR QUE
RANG 1/1

41% DURÉE 1h58 / 2h42

des professionnels SCORE 2 223 / 3 990 (56%)

Angular 2+ 340 / 720pts (47%) MEILLEUR QUE 34% des professionnels

Connaissance du langage 340 / 720pts

Hibernate 230 / 440pts (52%) MEILLEUR QUE 46% des professionnels

Batching 0 / 40pts

Entity 20 / 60pts

Lazy vs eager 60 / 100pts

Persistence 40 / 60pts

Relationship 110 / 180pts

1 / 131
Islem Ghouma ([email protected])
Java 1 160 / 1 910pts (61%) MEILLEUR QUE 42% des professionnels

Connaissance du langage 640 / 1 147pts

Fiabilité 153 / 236pts

Modélisation 180 / 180pts

Résolution de problèmes 187 / 347pts

Spring Framework
493 / 920pts (54%) MEILLEUR QUE 42% des professionnels

Connaissance du langage 260 / 540pts

Other 40 / 80pts

Spring Boot 20 / 40pts

Spring Core 40 / 60pts

Spring Data 33 / 40pts

Spring Security 60 / 80pts

Spring Web 40 / 80pts

Accéder au rapport détaillé

2 / 131
Islem Ghouma ([email protected])
Question 1: [Core] Détection de bean
Spring Framework 00:23 / 00:45 20 / 20 pts

Question
Vous souhaitez que la classe suivante soit détectée par un scan Spring et enregistrée en tant que bean.
Quelle annotation utiliseriez-vous ?

Réponse

Component

Bean

Scannable

Register

Résultat
Réponse correcte
Connaissance du langage +20pts

3 / 131
Islem Ghouma ([email protected])
Question 2: [Data] Requêtes personnalisées
Spring Framework 00:10 / 00:45 40 / 40 pts

Question
Quelle est l'annotation Spring utilisée pour ajouter une méthode associée à une requête SQL
personnalisée vers un repository JPA ( XXXXXX dans le code ci-dessous) ?

Réponse

query

sql

autosql

select

Résultat
Réponse correcte
Connaissance du langage +40pts

4 / 131
Islem Ghouma ([email protected])
Question 3: [Data] @ManyToOne(mappedBy = "user")
Spring Framework 00:53 / 01:30 20 / 20 pts

Question
Examinez la relation entre les deux entités ci-dessous :

@Entity
public class User {
@XXX
private Address address;

// getters and setters ...


}

@Entity
public class Address {
@ManyToOne
private User user

// getters and setters ...


}

Quelle annotation devrait remplacer @XXX pour que la relation soit bidirectionnelle ?

Réponse

@OneToMany(mappedBy = "user")

@OneToMany(useParentId = true)

@OneToMany(mappingRelationshipOwner = Address.class)

@OneToMany(mappingRelationshipOwner = User.class)

5 / 131
Islem Ghouma ([email protected])
Résultat
Réponse correcte
Spring Data +20pts

Question 4: [Web] @ControllerAdvice


Spring Framework 01:30 / 01:30 0 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quel est le rôle de la classe ci-dessous dans une application web Spring ?

@ControllerAdvice
public class ExceptionAdvice {
@ExceptionHandler({UserNotFoundException.class})
public final ResponseEntity<String> handleException(UserNotFoundException ex, WebRequest
request) {
return new ResponseEntity<>(null, new HttpHeaders(), HttpStatus.NOT_FOUND);
}
}

6 / 131
Islem Ghouma ([email protected])
Réponse

Intercepter les exceptions UserNotFoundException non capturées et


traduire le statut HTTP 500 par défaut en un statut plus descriptif

Empêcher les exceptions UserNotFoundException d'être lancées par les


contrôleurs

Définir UserNotFoundException et le rendre disponible pour que d'autres


classes puissent l'utiliser

Fournir des logs supplémentaires lorsqu'une exception


UserNotFoundException est lancée

Résultat
Réponse incorrecte
Spring Web +20pts

7 / 131
Islem Ghouma ([email protected])
Question 5: [Data] find by Id
Spring Framework 01:00 / 01:00 1x (4 sec) 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
On considère une entitée User et l'interface UserRepository associée, héritée de CrudRepository
, qui permet son accès depuis la base.

Quelle méthode devriez-vous définir pour permettre de récupérer un objet User à partir de son id ?

Écrivez le nom de la méthode.

Réponse
findById

Résultat
Réponse correcte
Connaissance du langage +20pts

Réponse(s) correcte(s)
.*findUserById.*
.*getUserById.*
.*readUserById.*
.*findById.*

8 / 131
Islem Ghouma ([email protected])
Question 6: [Core] Singleton par défaut
Spring Framework 00:30 / 00:30 1x (9 sec) 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Par défaut, combien d'instances d'un bean Spring trouveriez-vous dans le contexte d'application ?

Réponse

Une instance (singleton)

Une instance par classe qui le spécifie comme dépendance

Une instance par requête web

Une instance par thread

Résultat
Réponse correcte
Spring Core +20pts

9 / 131
Islem Ghouma ([email protected])
Question 7: [Rest] RestController
Spring Framework 00:06 / 00:30 20 / 20 pts

Question
Comment déclare-t-on des endpoints REST dans Spring ?

Réponse

@RestEndpoint

@RestController

@Rest

@REST

Résultat
Réponse correcte
Connaissance du langage +20pts

10 / 131
Islem Ghouma ([email protected])
Question 8: [Web] @RequestMapping
Spring Framework 00:48 / 01:00 20 / 20 pts

Question
Quelle annotation doit être ajoutée à la place de @XXX dans la classe ci-dessous pour exposer un
endpoint GET à /api/widget ?

@Controller
@XXX
public class WidgetController {

@GetMapping(produces = "application/json")
public @ResponseBody Collection<Widget> getAllWidgets() {
return findAll()
}

private Collection<Widget> findAll() {


// ...
}
}

Réponse

@RequestMapping("api/widget")

@ApiEndpoint("widget")

@GetMapping("api/widget")

@RestEndpoint("api/widget")

Résultat
Réponse correcte
Spring Web +20pts

11 / 131
Islem Ghouma ([email protected])
Question 9: [Core] Dépendance circulaire
Spring Framework 01:14 / 01:45 20 / 20 pts

Question
Quelle exception serait causée par le démarrage d'une application Spring qui contient les définitions de
classe suivantes ?

@Component
class AccessControlService {

private RoleService roleService;

@Autowired
public AccessControlService(RoleService roleService) {
this.roleService = roleService;
}
}

@Component
class RoleService {

private AccessControlService accessControlService;

@Autowired
public RoleService(AccessControlService accessControlService) {
this.accessControlService = accessControlService;
}
}

12 / 131
Islem Ghouma ([email protected])
Réponse

CannotAcquireLockException à cause d'un blocage de thread (thread


deadlock condition)

BeanCurrentlyInCreationException à cause d'une dépendance


circulaire

UnsatisfiedDependencyException à cause d'une dépendance autowired


qui n'existe pas

ConflictingBeanDefinitionException à cause de deux définitions de


classe différentes portant le même nom

Résultat
Réponse correcte
Spring Core +20pts

13 / 131
Islem Ghouma ([email protected])
Question 10: [Core] Injection
Spring Framework 00:38 / 00:45 20 / 20 pts

Question
Quelle annotation peut-on utiliser pour injecter un bean Spring ?

Réponse

@Autowired

@PostConstruct

@Bean

@Component

@InjectBean

Résultat
Réponse correcte
Connaissance du langage +20pts

14 / 131
Islem Ghouma ([email protected])
Question 11: [Web] Cycle de vie des requêtes
Spring Framework 00:30 / 00:30 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Lorsqu'un objet requête quitte le client, son premier arrêt lorsqu'il entre dans une application Spring est :

Réponse

ViewResolver

DispatcherServlet

La page JSP index

Le premier Spring Controller qu'il peut trouver

Résultat
Réponse correcte
Spring Web +20pts

15 / 131
Islem Ghouma ([email protected])
Question 12: [Core] Order
Spring Framework 01:00 / 01:00 3x (23 sec) 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Vous avez un certain nombre de bean injectés (autowired) dans une List d'objets, sans que cette liste
soit explicitement déclarée. Vous souhaitez définir leurs positions respectives dans cette liste, c-à-d
lequel est premier, lequel est second, etc.

Quelle annotation Spring peut vous aider dans cette tâche ?

Réponse

@Position

@Number

@Sort

@Order

Résultat
Réponse correcte
Connaissance du langage +40pts

16 / 131
Islem Ghouma ([email protected])
Question 13: [Boot] Exécution d'un projet
Spring Framework 00:45 / 00:45 1x (12 sec) 0 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Pour exécuter un projet Spring Boot à partir de la ligne de commande, nous pouvons utiliser la
commande mvnw , comme indiqué ci-dessous :

./mvnw package spring-boot:XXX

Que devriez-vous écrire à la place de XXX ?

Réponse

Résultat
Réponse incorrecte
Spring Boot +20pts

Réponse(s) correcte(s)
run
(?i).*run.*

17 / 131
Islem Ghouma ([email protected])
Question 14: [Security] PreFilter, PostFilter
Spring Framework 00:44 / 00:45 0 / 40 pts

Question
@PreFilter et @PostFilter s'appliquent à ...

Plusieurs réponses attendues.

Réponse

@PreFilter s'applique aux paramètres d'entrée de la méthode annotée

@PostFilter s'applique aux valeurs de retour de la méthode annotée

@PreFilter s'applique aux requêtes de servlet

@PostFilter s'applique aux requêtes de servlet

Résultat
Réponse incorrecte
Connaissance du langage +40pts

18 / 131
Islem Ghouma ([email protected])
Question 15: [Security] OAuth2
Spring Framework 00:40 / 00:40 1x (15 sec) 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quelle annotation de Spring Boot permet d'activer le SSO (Single Sign On) avec un provider OAuth2
déclaré au niveau de propriétés externes ?

Cette annotation a été introduite par Spring Boot 2.0.0.

Réponse

@OAuth2ClientAutoConfiguration

@EnableOAuth2Client

@OAuth2Client

@EnableSso

Résultat
Réponse incorrecte
Connaissance du langage +40pts

19 / 131
Islem Ghouma ([email protected])
Question 16: [Core] Meilleure méthode d'injection
Spring Framework 01:15 / 01:15 2x (8 sec) 40 / 40 pts

Question
Observez les deux façons d'injecter un service dans un bean :

Le résultat est le même pour les deux codes. Mais, y en a-t-il un qui est préférable à l'autre ?

20 / 131
Islem Ghouma ([email protected])
Réponse

Celui par setter est préférable car il autorise le développeur à ignorer


l'injection ce qui permet de prototyper plus vite

Celui par constructeur est préférable car il force le développeur à fournir


le service ce qui réduit le risque de "null pointer exception"

Non, il n'y a pas de différence en pratique

Non, aucun des deux ne convient, l'injection par réflexion est la meilleure
façon de procéder

Résultat
Réponse correcte
Connaissance du langage +40pts

21 / 131
Islem Ghouma ([email protected])
Question 17: [AOP] Pointcut
Spring Framework 00:47 / 01:00 0 / 40 pts

Question
Quelle méthodes vont être interceptées par ce pointcut ?

Plusieurs réponses attendues.

Réponse

public String findName()

public char[] findPassword(boolean cache)

protected String findAddress()

public void createOrFindAccount(String name, char[] pass)

Résultat
Réponse incorrecte
Connaissance du langage +40pts

22 / 131
Islem Ghouma ([email protected])
Question 18: [Security] @Secured
Spring Framework 00:40 / 00:40 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quelle annotation est équivalente à @Secured de Spring mais provient d'un package javax standard et
permet l'utilisation du Spring Expression Language (SpEL) ?

Réponse

@PreAuthorize

@PostAuthorize

@PreFilter

@PostFilter

Résultat
Réponse incorrecte
Connaissance du langage +40pts

23 / 131
Islem Ghouma ([email protected])
Question 19: [Cloud] Définition serverless
Spring Framework 01:30 / 01:30 1x (9 sec) 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Spring Function nous permet de définir une fonction et de l'exécuter sur les plateformes serverless les
plus courantes comme AWS Lambda, Apache OpenWhirsk, Azure, etc.

Pour définir une telle fonction, quelle annotation devons-nous utiliser pour remplacer XXX dans
l'exemple de code suivant ?

@SpringBootApplication
public class FunctionServerless {

public static void main(String[] args) {


SpringApplication.run(XXX.class, args);
}

@Bean
public Function<String, String> lowercase() {
return value -> value.toLowerCase();
}
}

Réponse
FunctionConfiguration

Résultat
Réponse incorrecte
Other +40pts

24 / 131
Islem Ghouma ([email protected])
Réponse(s) correcte(s)
FunctionServerless
(?i).*FunctionServerless.*

Question 20: [Boot] Métriques


Spring Framework 00:14 / 00:45 20 / 20 pts

Question
Quel point de terminaison (endpoint) de Spring Boot permet l'affichage de statistiques concernant
l'application actuelle, comme l'utilisation de la mémoire, le nombre de threads en cours d'exécution, et
le temps de réponse des méthodes REST ?

Réponse

/health

/metrics

/trace

Il n'y a pas de endpoint unique qui puisse afficher toutes ces informations

/statistics

Résultat
Réponse correcte
Spring Boot +20pts

25 / 131
Islem Ghouma ([email protected])
Question 21: [Core] Unicité d'un bean
Spring Framework 00:40 / 01:00 0 / 40 pts

Question
Que se passe-t-il quand on demande à une BeanFactory de fournir une instance de bean pour lequel
il existe de multiples candidats, alors qu'un seul bean candidat était attendu ?

Réponse

Spring choisit le premier bean qu'il trouve dans le contexte scanné

NoUniqueBeanDefinitionException est lancé

Aucun bean n'est cablé (retourne null)

Spring choisit le premier bean par ordre alphabétique

Résultat
Réponse incorrecte
Connaissance du langage +40pts

26 / 131
Islem Ghouma ([email protected])
Question 22: [Data] Types de repos
Spring Framework 00:41 / 00:45 40 / 40 pts

Question
Vous créez un répo JPA représentant des objets Employee persistés en base de données. Vous
souhaitez pouvoir appeler des méthodes fournies par Spring "out-of-the-box" pour créer, mettre à jour,
effacer et lire ces objets et rien de plus.

Quelle classe Spring devriez-vous étendre ?

Réponse

Repository

CrudRepository

PagingAndSortingRepository

SimpleRepository

Résultat
Réponse correcte
Connaissance du langage +40pts

27 / 131
Islem Ghouma ([email protected])
Question 23: [Security] @EnableWebSecurity
Spring Framework 00:46 / 01:00 40 / 40 pts

Question
Quelle annotation Spring doit être ajoutée à la classe ci-dessous (en remplaçant // XXX ) pour activer la
configuration de sécurité web spécifiée ?

@Configuration
// XXX
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

protected void configure(HttpSecurity http) throws Exception {


http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.logout()
.permitAll();
}
}

Réponse
@EnableWebSecurity

Résultat
Réponse correcte
Spring Security +40pts

Réponse(s) correcte(s)
@EnableWebSecurity
(?).*@EnableWebSecurity.*

28 / 131
Islem Ghouma ([email protected])
Question 24: [Core] Lazy
Spring Framework 00:40 / 00:40 20 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Un bean est annoté avec @Lazy . Quand est-il initialisé ?

Plusieurs réponses attendues.

Réponse

Au démarrage du containeur Spring

Quand il est référencé par un autre bean

Quand il est explicitement récupéré de la bean factory associée

Quand il référence un autre bean

Résultat
Réponse partiellement correcte
Connaissance du langage +20/40pts

29 / 131
Islem Ghouma ([email protected])
Question 25: [Jackson] @JsonIgnore
Spring Framework 01:30 / 01:30 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Considérez la classe suivante qui doit être utilisée comme type de retour d'un point de terminaison REST
dans une application Spring Boot :

public class AccessLogData {


private String userName;
private Long timestamp;

// getters and setters


}

Et la configuration suivante de ObjectMapper de Jackson :

@Configuration
public class JsonConfig {
@Bean
public ObjectMapper configureJackson() {
ObjectMapper mapper = new ObjectMapper();
return mapper
}
}

Supposons que le développeur souhaite empêcher les champs nuls de AccessLogData d'être
sérialisés (sans affecter la sérialisation des autres classes). Que faire ?

30 / 131
Islem Ghouma ([email protected])
Réponse

Ajouter @JsonInclude(JsonInclude.Include.NON_NULL) comme


annotation de niveau classe à AccessLogData

Ajouter mapper.setSerializationInclusion(Include.NON_NULL)
dans JsonConfig.configureJackson()

Ajouter @JsonIgnore aux getters pour userName et timestamp dans


AccessLogData

Ajouter @JsonFilter(null) comme annotation de niveau classe à


AccessLogData

Résultat
Réponse correcte
Other +40pts

31 / 131
Islem Ghouma ([email protected])
Question 26: [Core] Injection de dépendances
Spring Framework 00:30 / 00:30 0 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quels sont les moyens possibles de réaliser l'injection de dépendances (dependency injection) à l'aide de
Spring ?

Sélectionner toutes les bonnes réponses.

Réponse

Injection de constructeur

Injection de setter

Injection de bean

Injection d'interface

Résultat
Réponse incorrecte
Spring Core +20pts

32 / 131
Islem Ghouma ([email protected])
Question 27: [Security] Authentification
Spring Framework 00:45 / 00:45 20 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quelles approches permettent d'accéder à l'utilisateur actuellement connecté dans une méthode de
contrôleur ? Sélectionnez toutes les bonnes réponses.

Réponse

Appeler SecurityContextHolder.getContext().
getAuthentication()

Ajouter Authentication authentication comme argument à la


méthode de contrôleur

Ajouter @Secured au nom de la méthode

Ajouter @Authenticated à la définition de la classe

Résultat
Réponse partiellement correcte
Spring Security +20/40pts

33 / 131
Islem Ghouma ([email protected])
Question 28: [Core] Bean conditionnel
Spring Framework 01:30 / 01:30 1x (26 sec) 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
On considère les deux classes suivantes.

L'une qui définit une vérification de condition custom :

et une autre qui définit un bean :

Vous souhaitez que le bean ModelProcessor soit créé seulement si la variable d'environnement
MODEL existe.

En utilisant ModelExistsCondition , par quelle annotation remplacer XXX ci-dessus ?

Écrivez l'annotation complète.

Réponse

34 / 131
Islem Ghouma ([email protected])
Résultat
Réponse incorrecte
Connaissance du langage +40pts

Réponse(s) correcte(s)
@Conditional(ModelExistsCondition.class)
Conditional(ModelExistsCondition.class)
@Conditional(ModelExistsCondition)
Conditional(ModelExistsCondition)

35 / 131
Islem Ghouma ([email protected])
Question 29: [Web] STOMP
Spring Framework 00:50 / 00:50 2x (20 sec) 0 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quel est le nom du protocole, basé sur du texte, utilisé par Spring pour envoyer des messages par
Websockets ?

Réponse
tcp

Résultat
Réponse incorrecte
Connaissance du langage +20pts

Réponse(s) correcte(s)
STOMP
Streaming Text Oriented Messaging Protocol

36 / 131
Islem Ghouma ([email protected])
Question 30: [Data] Avantages de HQL
Spring Framework 00:45 / 00:45 13 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quels sont les avantages de l'utilisation du langage de requête Hibernate (HQL) par rapport au langage
de requête natif dans un référentiel Spring Data ?

Réponse

Des requêtes plus courtes avec l'option d'omettre des déclarations comme
SELECT * et la partie ON des déclarations de jointure

Validation des requêtes au démarrage de l'application

Migration transparente vers un autre langage de base de données


relationnelle

Interopérabilité entre les bases de données SQL et NoSQL

Résultat
Réponse partiellement correcte
Spring Data +13/20pts

37 / 131
Islem Ghouma ([email protected])
Question 31: [Web] bindingResult.hasErrors()
Spring Framework 01:46 / 02:00 0 / 20 pts

Question
Considérez la classe Java suivante qui utilise les annotations de validation Java :

class Address {
@NotNull
private String line1;

// ...
}

Et son utilisation dans le contrôleur web Spring suivant :

@Controller
public class AddressController {

@PostMapping("/")
public ResponseEntity<String> addNewAddress(@Valid Address address, BindingResult bindingResult)
{

if (/* XXX */) {


return new ResponseEntity<>("bad request", new HttpHeaders(), HttpStatus.BAD_REQUEST);
}

return new ResponseEntity<String>(null, new HttpHeaders(), HttpStatus.OK);


}
}

Qu'est-ce qui doit remplacer /* XXX */ dans AddressController pour s'assurer qu'il retourne un
message bad request si le champ line1 de Address est nul ?

38 / 131
Islem Ghouma ([email protected])
Réponse

bindingResult.hasErrors()

!bindingResult.isValid()

address.hasErrors()

!address.isValid()

Résultat
Réponse incorrecte
Spring Web +20pts

39 / 131
Islem Ghouma ([email protected])
Question 32: Opération sur des entiers
Java 00:29 / 00:30 20 / 20 pts

Question

int i1 = 5;
int i2 = 2;
int i3 = i1 / i2;

Quelle est la valeur de i3 ?

Réponse

2.5

NaN

Résultat
Réponse correcte
Connaissance du langage +20pts

40 / 131
Islem Ghouma ([email protected])
Question 33: Trier une liste de chaînes de caractères
Java 00:35 / 00:35 1x (14 sec) 0 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Comment trier une liste de chaînes de caractères ?

Réponse

list.sort();

Collection.sort(list);

CollectionUtil.sort(list);

Collections.sort(list);

Résultat
Réponse incorrecte
Connaissance du langage +20pts

41 / 131
Islem Ghouma ([email protected])
Question 34: Singleton
Java 00:20 / 00:20 20 / 20 pts

Question
Quelle signature de méthode est généralement utilisée pour obtenir un singleton ?

Réponse

getSingleton()

instance()

getInstance()

Résultat
Réponse correcte
Connaissance du langage +20pts

42 / 131
Islem Ghouma ([email protected])
Question 35: Héritage
Java 00:30 / 01:00 20 / 20 pts

Question
Parmi ces deux propositions, laquelle préférez-vous ?

Proposition #1 :

interface CapableDeVoler {
void vole();
}
abstract class Avion implements CapableDeVoler {}
abstract class Oiseau implements CapableDeVoler {}

Proposition #2 :

abstract class Avion {


abstract void vole();
}
abstract class Oiseau extends Avion {}

Réponse

La proposition #1

La proposition #2

Résultat
Réponse correcte
Modélisation +20pts

43 / 131
Islem Ghouma ([email protected])
Question 36: Classe « friendly »
Java 00:20 / 00:20 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Déclarer une classe sans niveau d'accès explicite est en général conseillé.

Réponse

Vrai

Faux

Résultat
Réponse correcte
Modélisation +20pts

44 / 131
Islem Ghouma ([email protected])
Question 37: java.lang.String.lines()
Java 00:50 / 00:50 1x (25 sec) 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quelle méthode de java.lang.String utiliseriez-vous pour découper la chaîne ci-dessous en tableau
ou collection de chaînes de caractère, le découpage étant fait vis-à-vis du caractère de saut de ligne ?

String str = "This is a string\nThis is the next line.\nHello world.";

Réponse
split

Résultat
Réponse correcte
Connaissance du langage +20pts

Réponse(s) correcte(s)
lines()
split()
.*lines.*
.*split.*

45 / 131
Islem Ghouma ([email protected])
Question 38: Constante
Java 00:25 / 00:25 20 / 20 pts

Question
Quelle déclaration est une constante valide en Java ?

Réponse

define("MAXSIZE", 100);

#define MAXSIZE 100

public static final int MAXSIZE = 100;

const int MAXSIZE = 100;

Résultat
Réponse correcte
Connaissance du langage +20pts

46 / 131
Islem Ghouma ([email protected])
Question 39: Classe Object
Java 00:20 / 00:20 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
public class A {}

Qui est la classe parente de A ?

Réponse

Object

Root

La classe A n'a pas de parent

Résultat
Réponse correcte
Connaissance du langage +20pts

47 / 131
Islem Ghouma ([email protected])
Question 40: Méthode run() et thread
Java 00:09 / 00:20 20 / 20 pts

Question
Quelle méthode est appelée lorsqu'un thread est exécuté ?

Réponse

do

run

exec

execute

play

Résultat
Réponse correcte
Connaissance du langage +20pts

48 / 131
Islem Ghouma ([email protected])
Question 41: Visibilité des attributs privés
Java 00:20 / 00:20 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Un attribut privé est visible depuis les sous-classes.

Réponse

Vrai

Faux

Résultat
Réponse correcte
Connaissance du langage +20pts

49 / 131
Islem Ghouma ([email protected])
Question 42: Méthode finale
Java 00:20 / 00:20 1x (3 sec) 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Une méthode déclarée finale est une méthode qui...

Réponse

ne peut pas être redéfinie

retourne une constante

provoque une erreur de compilation

Résultat
Réponse correcte
Connaissance du langage +20pts

50 / 131
Islem Ghouma ([email protected])
Question 43: Utilisation des exceptions
Java 00:30 / 00:30 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Vous réalisez une bibliothèque en Java. Parmi ces options, laquelle privilégiez-vous pour traiter un
comportement inattendu ?

Réponse

throw new ComportementInattenduException()

System.exit(-1)

System.err.println("Erreur: Comportement inattendu")

return false

Résultat
Réponse correcte
Modélisation +20pts

51 / 131
Islem Ghouma ([email protected])
Question 44: Méthodes asynchrones
Java 00:45 / 00:45 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quelle classe représente le résultat incomplet d'un appel de méthode asynchrone en Java ?

Réponse

java.util.concurrent.Task<T>

java.util.concurrent.CompletableFuture<T>

java.util.concurrent.Delayed<T>

java.util.concurrent.Phaser<T>

Résultat
Réponse correcte
Connaissance du langage +40pts

52 / 131
Islem Ghouma ([email protected])
Question 45: java.util.regex.Pattern
Java 00:18 / 00:45 0 / 20 pts

Question
En Java, quelle classe permet de tester la validité d'une chaîne de caractères vis-à-vis d'une expression
régulière telle que celle-ci :

String regex = "z.*t?";

Réponse

java.util.regex.Pattern

java.util.regex.Regex

java.util.regex.Match

java.util.regex.RegExp

Résultat
Réponse incorrecte
Connaissance du langage +20pts

53 / 131
Islem Ghouma ([email protected])
Question 46: Optimisation avec table de hachage
Java 00:56 / 02:30 0 / 40 pts

Question
Parmi les options suivantes, quelle classe utiliseriez-vous si vous deviez reprendre
GestionUtilisateurs ?

Réponse

Stack

Vector

ArrayList

LinkedList

HashMap

HashSet

54 / 131
Islem Ghouma ([email protected])
Résultat
Réponse incorrecte
Connaissance du langage +40pts

Question 47: Liskov Substitution Principle (LSP)


Java 00:45 / 00:45 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Partout où un objet de type T est attendu, on doit pouvoir passer un objet de type U, avec U héritant de
T.

Réponse

Vrai

Faux

Résultat
Réponse correcte
Modélisation +40pts

55 / 131
Islem Ghouma ([email protected])
Question 48: Méthodes par défaut d'interface
Java 00:45 / 00:45 1x (8 sec) 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quelle est la façon correcte de définir une interface avec une implémentation de méhode concrète ?

Réponse

public interface Product {


public default int getTaxRate() {
return 0;
}
}

public interface Product {


public trait int getTaxRate() {
return 0;
}
}

public interface Product {


public int getTaxRate() {
return 0;
}
}

public interface Product {


public final int getTaxRate() {
return 0;
}
}

56 / 131
Islem Ghouma ([email protected])
Résultat
Réponse correcte
Connaissance du langage +40pts

Question 49: Attributs multiples


Java 01:14 / 01:30 0 / 40 pts

Question
Sélectionnez le code ci-contre qui permet à la classe ci-dessous de compiler sans erreur :

@Message(message = "Message 2")


@Message(message = "Message 1")
public class Example
{

57 / 131
Islem Ghouma ([email protected])
Réponse

@Repeatable(Messages.class)
public @interface Message {
public String message();
}

et

public @interface Messages {


public Message[] value();
}

public @interface Message {


public String message();
}

@Repeatable
public @interface Message {
public String message();
}

@Repeatable(Messages.class)
public @interface Message {
public String message();
}

et

public @interface Messages {


public Message[] messages();
}

58 / 131
Islem Ghouma ([email protected])
@Repeatable(Messages.class)
public attribute Message {
public String message();
}

et

public attribute Messages {


public Message[] value();
}

public attribute Message {


public String message();
}

Résultat
Réponse incorrecte
Connaissance du langage +40pts

59 / 131
Islem Ghouma ([email protected])
Question 50: Méthodes abstraites dans les interfaces
fonctionnelles
Java 00:19 / 00:30 20 / 20 pts

Question
Combien de méthodes abstraites sont à définir dans une interface fonctionnelle ?

Réponse

N'importe quel nombre

Résultat
Réponse correcte
Connaissance du langage +20pts

60 / 131
Islem Ghouma ([email protected])
Question 51: Garbage collector
Java 00:20 / 00:20 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Le garbage collector garanti qu'il y a suffisamment de mémoire pour exécuter un programme Java.

Réponse

Vrai

Faux

Résultat
Réponse incorrecte
Connaissance du langage +40pts

61 / 131
Islem Ghouma ([email protected])
Question 52: Anticiper le résultat d'un code
Java 03:00 / 03:00 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Considérer le code suivant :

public static abstract class Shape {

private int surface;

public Shape() {
this.surface = computeSurface();
}

protected abstract int computeSurface();

public int getSurface() {


return surface;
}
}

public static class SquareShape extends Shape {


private final int size;

public SquareShape(int size) {


this.size = size;
}

@Override
protected int computeSurface() {
return size * size;
}
}

Après l'exécution de SquareShape squareShape = new SquareShape(10); , quelle est la valeur


retournée par la méthode getSurface de l'objet squareShape ?

62 / 131
Islem Ghouma ([email protected])
Réponse

10

Valeur indéterminée

Résultat
Réponse incorrecte
Connaissance du langage +40pts

63 / 131
Islem Ghouma ([email protected])
Question 53: Copie superficielle vs copie profonde
Java 02:00 / 02:00 2x (29 sec) 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Considérer le code suivant :

public static void main(String[] args) throws CloneNotSupportedException {

LinkedList<Player> players1 = new LinkedList<>();


Player p1 = new Player();
p1.setBattingAverage(46.7 f);
p1.setWorldRank(4);

Player p2 = new Player();


p2.setBattingAverage(56.9 f);
p2.setWorldRank(1);

players1.add(p1);
players1.add(p2);

LinkedList<Player> players2 = new LinkedList<>();


for (Player p : players1) {
players2.add(p);
}

players2.get(0).setWorldRank(5);

Une liste de joueurs a été créée, ainsi qu'une copie de cette liste. Quel type de méthode de copie a été
utilisée ?

Réponse

Copie superficielle (shallow copy)

Copie profonde (deep copy)

64 / 131
Islem Ghouma ([email protected])
Résultat
Réponse incorrecte
Connaissance du langage +40pts

Question 54: Blocs statiques


Java 00:30 / 00:30 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Que devez-vous utiliser pour exécuter un code une seule fois, au moment où la classe est chargée ?

Réponse

Un bloc statique

Un bloc d'instance

Un constructeur

Une méthode

Résultat
Réponse correcte
Connaissance du langage +20pts

65 / 131
Islem Ghouma ([email protected])
Question 55: Accès d'une méthode synchronisée par deux
threads
Java 00:40 / 00:40 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Que se passe-t-il si une méthode synchronisée est appelée simultanément par deux threads sur des
instances d'objet différentes ?

Réponse

Seulement un thread à la fois accédera à la méthode

Les deux threads pourront accéder à la méthode en même temps

Aucun thread ne pourra accéder à la méthode et une exception sera générée

Résultat
Réponse correcte
Connaissance du langage +40pts

66 / 131
Islem Ghouma ([email protected])
Question 56: Opérateur unitaire (i++)
Java 00:23 / 00:25 40 / 40 pts

Question

Saisissez le résultat qu'affiche ce bout de code.

Réponse
0

Résultat
Réponse correcte
Connaissance du langage +40pts

Réponse(s) correcte(s)
0

Question 57: Référence de méthode


Java 01:00 / 01:00 1x (13 sec) 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quel code ci-contre utilise une référence de méthode de manière correcte ?

67 / 131
Islem Ghouma ([email protected])
Réponse

public class Main {


public static void main(String[] args) {
Stream.of(1, 2, 3)
.forEach(Main::printNumber);
}
public static void printNumber(int n) {
System.out.println(n);
}
}

public class Main {


public static void main(String[] args) {
Stream.of(1, 2, 3)
.forEach(Main.printNumber);
}
public static void printNumber(int n) {
System.out.println(n);
}
}

public class Main {


public static void main(String[] args) {
Stream.of(1, 2, 3)
.forEach(Main#printNumber);
}
public static void printNumber(int n) {
System.out.println(n);
}
}

public class Main {


public static void main(String[] args) {
Stream.of(1, 2, 3)
.forEach((n) -> printNumber(n));
}
public static void printNumber(int n) {
System.out.println(n);
}
}

68 / 131
Islem Ghouma ([email protected])
Résultat
Réponse correcte
Connaissance du langage +40pts

Question 58: Usage de ThreadLocal


Java 01:00 / 01:00 2x (26 sec) 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quelle classe peut être utilisée pour stocker des valeurs spécifiques au thread ?

Ecrire seulement le nom de la classe.

Réponse
runnable

Résultat
Réponse incorrecte
Connaissance du langage +40pts

Réponse(s) correcte(s)
ThreadLocal
(?).*threadlocal.*

69 / 131
Islem Ghouma ([email protected])
Question 59: Méthodes par défaut
Java 00:20 / 00:30 20 / 20 pts

Question
En Java 8, comment s'appelle une méthode qui est définie avec une implémentation dans une interface ?

Réponse

Méthode par défaut (default method)

Méthode primaire (primary method)

Méthode concrète (concrete method)

Méthode contrat (contract method)

Méthode abstraite (abstract method)

Résultat
Réponse correcte
Connaissance du langage +20pts

70 / 131
Islem Ghouma ([email protected])
Question 60: Client HTTP2 (java.net.http.*)
Java 00:40 / 00:40 1x (8 sec) 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
In Java 11+, quelle API est la plus appropriée pour faire des appels HTTP ?

Sélectionnez la meilleure réponse.

Réponse

Les classes de java.net.http.* telle que HttpClient

java.net.HttpURLConnection

L'API d'une librairie tierce telle que celle d'Apache HttpClient

Résultat
Réponse incorrecte
Connaissance du langage +40pts

71 / 131
Islem Ghouma ([email protected])
Question 61: Taille d'une ArrayList
Java 00:30 / 00:30 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question

ArrayList l = new ArrayList(2);


l.add(1);
l.add(1);
l.add(1);

Quelle est la valeur retournée par l.size() ?

Réponse

Ce code lève une exception

Résultat
Réponse incorrecte
Connaissance du langage +40pts

72 / 131
Islem Ghouma ([email protected])
Question 62: Fonction Predicate
Java 00:50 / 00:50 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
En Java 8, quelle interface par défaut peut être utilisée comme une fonction à un argument qui retourne
un booléen ?

Réponse

Optional

Predicate

Functions

Comparator

Résultat
Réponse correcte
Connaissance du langage +40pts

73 / 131
Islem Ghouma ([email protected])
Question 63: Création d'une chaîne de caractères
Java 01:00 / 01:00 1x (0 sec) 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Voici deux manières de créer une chaîne de caractères : String s = "Test" String s = new
String("Test")

Quelle affirmation est correcte concernant les différences entre ces deux méthodes ?

Réponse

L'option 1 est plus performante

L'option 2 est plus performante

L'objet 1 est variable (mutable), l'objet 2 est immuable (immutable)

L'objet 2 est variable (mutable), l'objet 1 est immuable (immutable)

Résultat
Réponse incorrecte
Connaissance du langage +40pts

74 / 131
Islem Ghouma ([email protected])
Question 64: Les interfaces
Java 00:14 / 00:20 40 / 40 pts

Question
En Java 8, les interfaces peuvent contenir des méthodes implémentées.

Réponse

Vrai

Faux

Résultat
Réponse correcte
Connaissance du langage +40pts

75 / 131
Islem Ghouma ([email protected])
Question 65: Annotation @FunctionalInterface
Java 00:14 / 00:30 20 / 20 pts

Question
Quelle annotation peut être utilisée pour s'assurer qu'une interface est fonctionnelle ?

Réponse

@Functional

@lambda

@FunctionalInterface

@abstract

Résultat
Réponse correcte
Connaissance du langage +20pts

76 / 131
Islem Ghouma ([email protected])
Question 66: Interface vs. implementation
Java 00:30 / 00:30 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Parmi ces déclarations de méthodes, laquelle est à privilégier ?

Réponse

public ArrayList getOrders()

public Vector getOrders()

public List getOrders()

Résultat
Réponse correcte
Modélisation +40pts

77 / 131
Islem Ghouma ([email protected])
Question 67: Héritage multiple d'interfaces
Java 00:23 / 00:30 40 / 40 pts

Question
public interface A extends B, C, D {}

Cette interface est correcte si B, C et D sont également des interfaces.

Réponse

Vrai

Faux

Résultat
Réponse correcte
Connaissance du langage +40pts

78 / 131
Islem Ghouma ([email protected])
Question 68: Opérateur sur les bits : |
Java 00:25 / 00:25 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
En base 2 (binaire), combien font 01 | 11 ?

Réponse

00

01

10

11

100

Résultat
Réponse correcte
Connaissance du langage +40pts

79 / 131
Islem Ghouma ([email protected])
Question 69: Design pattern 01
Java 00:50 / 00:50 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question

public class A {

private A() {}

private static class AHolder {


private static final A INSTANCE = new A();
}

public static A getInstance() {


return AHolder.INSTANCE;
}
}

Si vous connaissez le patron de conception (design pattern) utilisé dans ce bout de code, saisissez son
nom dans le champ texte (1 mot seulement).

Réponse
singleton

Résultat
Réponse correcte
Modélisation +40pts

Réponse(s) correcte(s)
Singleton
(?i).*singleton.*

80 / 131
Islem Ghouma ([email protected])
(?i).*singleton.*

Question 70: Méthode stream anyMatch()


Java 01:00 / 01:00 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quelle méthode de Stream permet de vérifier si un certain prédicat correspond à l'un des éléments du
stream ?

Ecrire le nom de la méthode la plus adaptée pour cela.

Réponse
anyMatch

Résultat
Réponse correcte
Connaissance du langage +40pts

Réponse(s) correcte(s)
anyMatch
anyMatch()

81 / 131
Islem Ghouma ([email protected])
Question 71: Méthode pour supprimer les espaces
Java 00:40 / 00:40 2x (11 sec) 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
En supposant que vous travailliez en Java 11+, quelle est la meilleure méthode pour supprimer les
caractères d'espacement de début et de fin d'une chaîne de caractères ?

Example:

String str = " Hello world. ";

Réponse

str.trim()

str.strip()

str.removeTrailingWhitespace()

str.trimWhitespace()

str.stripLeading().stripTrailing()

Résultat
Réponse incorrecte
Connaissance du langage +40pts

82 / 131
Islem Ghouma ([email protected])
Question 72: Du désordre le plus grand gagne
Java 03:43 / 05:00 100 / 100 pts

Question
Implémentez la méthode Algorithm.findLargest(int[] numbers) afin qu'elle retourne le plus
grand nombre dans numbers .

Note : Le tableau contient toujours au moins un nombre.

Réponse

1 import java.util.Arrays;
2
3 class Algorithm {
4
5 /** @return the largest number of the given array */
6 static int findLargest(int[] numbers) {
7 return Arrays.stream(numbers).max().getAsInt();
8 }
9
10 }

Voir le code playback

Résultat
Fonctionne dans des cas simples
Résolution de problèmes +32pts

Fonctionne quand le tableau contient seulement Integer.MIN_VALUE


Fiabilité +58pts

Fonctionne quand le plus grand élément est à la position 0


Fiabilité +5pts

Fonctionne quand le plus grand élément est à la fin du tableau


Fiabilité +5pts

83 / 131
Islem Ghouma ([email protected])
Question 73: Jumeaux
Java 07:35 / 12:00 1x (1 min) 200 / 200 pts

Question
Le jumeau (twin) d'un mot est un mot écrit avec exactement les mêmes lettres (indépendamment de la
casse), mais pas nécessairement dans le même ordre.

Par exemple Marion est le jumeau de Romain .

La méthode isTwin(a, b) retourne true si b est le jumeau de a ou false si ce n'est pas le cas. a
et b sont deux chaînes de caractères non null.

Écrivez le corps de la méthode isTwin(a, b) .

Réponse

1 // Java code below


2 import java.util.*;
3 import java.io.*;
4 import java.nio.*;
5 import java.math.*;
6
7 class Solution {
8 public static boolean isTwin(String a, String b) {
9 a=a.toUpperCase();
10 b=b.toUpperCase();
11 char[] tab1 = a.toCharArray();
12 char[] tab2 = b.toCharArray();
13 Arrays.sort(tab1);
14 Arrays.sort(tab2);
15 return Arrays.equals(tab1,tab2);
16 }
17 }

Voir le code playback

84 / 131
Islem Ghouma ([email protected])
Résultat
Tests simples
Résolution de problèmes +70pts

Insensible à la casse
Résolution de problèmes +45pts

Chaines courtes ou vides


Fiabilité +30pts

Même lettres mais pas jumeaux


Fiabilité +55pts

Question 74: Correction simple


Java 01:32 / 02:00 0 / 100 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
La méthode sumRange devrait retourner la somme des entiers compris entre 10 et 100 inclusifs
contenus dans le tableau passé en paramètre.

Corrigez la méthode sumRange .

Note : le paramètre ints n'est jamais null.

85 / 131
Islem Ghouma ([email protected])
Réponse

1 // Java code below


2 import java.util.*;
3 import java.io.*;
4 import java.nio.*;
5 import java.math.*;
6
7 class Solution {
8
9 static int sumRange(int[] ints) {
10 int sum = 0;
11 for (int i = 0; i < ints.length; i++) {
12 int n = ints[i];
13 if (n >= 10 || n <= 100) sum += n;
14 }
15 return sum;
16 }
17 }

Voir le code playback

Résultat
La solution fonctionne avec { 1, 4, 9, 12, 98, -10, 10 }
Résolution de problèmes +50pts

La solution fonctionne avec { 30, 4, 9, 12, 98, -10, 10 }


Fiabilité +50pts

86 / 131
Islem Ghouma ([email protected])
Question 75: Classification de paquets robotisée
Java 08:56 / 15:00 2x (14 sec) 40 / 150 pts

Question

Objectif
Utiliser le bras robotique de l'usine pour trier les colis.

Règles
Vous travaillez pour une usine autonome. Votre objectif est de trier les colis qui arrivent sur le bon tas
en fonction de leur volume et poids. Un colis est encombrant si son volume (Largeur x Hauteur x
Profondeur) est supérieur ou égal à 1 000 000 cm3 ou si l'une de ses dimensions est supérieure ou égale
à 150 cm. Un colis est lourd si sa masse est supérieure ou égale à 20kg. Vous devez répartir les colis
dans 3 tas : STANDARD : les colis normaux (ni encombrants, ni lourds) seront traités normalement.
SPECIAL : les colis lourds ou encombrants ne pourront pas être traités automatiquement. REJECTED : les
colis à la fois encombrants et lourds seront refusés.

Implémentation
Implémentez la [[functionLabel]] [[functionSimple]] (les unités sont le centimètre pour les
dimensions et le kilogramme pour la masse). La [[functionLabel]] doit retourner une chaîne de
caractères : le nom du tas où placer la boîte.

Conditions de Victoire
Les colis sont répartis sur les bons tas.

Conditions de Défaite
Votre programme indique une action invalide ou fausse.

Contraintes
20 ≤ width, height, length ≤ 200
10 ≤ mass ≤ 1000

87 / 131
Islem Ghouma ([email protected])
Réponse

1 import java.util.*;
2 import java.io.*;
3 import java.math.*;
4
5 class Player {
6
7 public static String solve(int width, int height, int length, int mass) {
8 if(width*height*length>1_000_000 || (width>150 || height > 150 || length> 150 ) &&
mass >20 ){
9 return "REJECTED";
10 }
11 else if(width*height*length>1_000_000 || (width>150 || height > 150 || length> 150
) || mass >20 ){
12 return "SPECIAL";
13 }
14 else return "STANDARD";
15 }
16
17 /* Ignore and do not change the code below */
18 public static void main(String args[]) {
19 Scanner in = new Scanner(System.in);
20
21 // game loop
22 while (true) {
23 int width = in.nextInt();
24 int height = in.nextInt();
25 int length = in.nextInt();
26 int mass = in.nextInt();
27 PrintStream outStream = System.out;
28 System.setOut(System.err);
29 String action = solve(width, height, length, mass);
30 System.setOut(outStream);
31 System.out.println(action);
32 }
33 }
34 /* Ignore and do not change the code above */
35 }

Voir le code playback

88 / 131
Islem Ghouma ([email protected])
Résultat
Nombreuses boites
Résolution de problèmes +40pts

Seulement des boites STANDARD et REJECTED


Résolution de problèmes +40pts

Seulement des boites STANDARD et SPECIAL


Résolution de problèmes +35pts

Test cas limites


Résolution de problèmes +35pts

89 / 131
Islem Ghouma ([email protected])
Question 76: Expression booléenne simple
Java 01:58 / 02:00 0 / 100 pts

Question
A.a(int i, int j) devrait retourner true si un des arguments est égal à 1 ou si leur somme est
égale à 1.

Par exemple :
A.a(1, 5) retourne true
A.a(2, 3) retourne false
A.a(-3, 4) retourne true

Réponse

1 // Java code below


2 class A {
3
4 static boolean a(int i, int j) {
5 if (i+j == 1 )
6
7 }
8
9 }

Voir le code playback

Résultat
Retourne true si i ou j est égal à 1, sinon false
Connaissance du langage +67pts

Retourne true si i+j est égal à 1


Fiabilité +33pts

90 / 131
Islem Ghouma ([email protected])
Question 77: Directive ngIf
Angular 2+ 00:42 / 01:00 20 / 20 pts

Question
Qu'arrivera-t-il si on clique plusieurs fois sur le bouton tel que défini à la ligne 6 ?

Réponse

La propriété name est affichée

La propriété name est cachée

La propriété name est affichée une fois sur deux

La propriété name est effacée

91 / 131
Islem Ghouma ([email protected])
Résultat
Réponse correcte
Connaissance du langage +20pts

Question 78: Directive structurelle


Angular 2+ 00:09 / 00:30 20 / 20 pts

Question
Parmi les propositions suivantes, laquelle n'est pas un directive structurelle d'Angular ?

Réponse

ngIf

ngFor

ngSwitch

ngUnless

Résultat
Réponse correcte
Connaissance du langage +20pts

92 / 131
Islem Ghouma ([email protected])
Question 79: Trouver le nom
Angular 2+ 00:33 / 01:00 20 / 20 pts

Question
Quel(s) nom(s) seront affichés par ce code ?

Réponse

Theresa

Morris

Duane

Theresa, Morris, Duane

Taz

Nothing will be printed

Morris, Duane

93 / 131
Islem Ghouma ([email protected])
Résultat
Réponse correcte
Connaissance du langage +20pts

Question 80: Nouvelle application Angular


Angular 2+ 00:07 / 00:30 20 / 20 pts

Question
Quelle ligne de commande permet de créer une nouvelle application Angular ?

Réponse

ng new appName

ng start appName

npm start appName

npm create appName

Résultat
Réponse correcte
Connaissance du langage +20pts

94 / 131
Islem Ghouma ([email protected])
Question 81: Interpolation
Angular 2+ 00:15 / 00:50 20 / 20 pts

Question
Quelle concept Angular est mis en oeuvre dans le template ci-dessous à la ligne 6 pour afficher la
propriété name ?

Réponse

string interpolation

template string

template literal

event binding

Résultat
Réponse correcte
Connaissance du langage +20pts

95 / 131
Islem Ghouma ([email protected])
Question 82: Cycle de vie Angular
Angular 2+ 00:16 / 00:40 40 / 40 pts

Question
Parmi les propositions suivantes, laquelle n'est pas une méthode du cycle de vie Angular ?

Réponse

ngOnChanges

ngOnDestroy

ngAfterViewInit

ngContentChange

Résultat
Réponse correcte
Connaissance du langage +40pts

96 / 131
Islem Ghouma ([email protected])
Question 83: Affichage d'une propriété
Angular 2+ 00:14 / 00:35 40 / 40 pts

Question
Comment peut-on afficher une propriété définie dans un composant ?

Réponse

par injection de dépendance

par interpolation

en utilisant une "query string"

en utilisant un filtre

Résultat
Réponse correcte
Connaissance du langage +40pts

97 / 131
Islem Ghouma ([email protected])
Question 84: Accèder aux paramètres de route
Angular 2+ 00:25 / 00:30 40 / 40 pts

Question
Quel service peut-on utiliser pour récupérer les paramètres de route depuis un composant ?

Réponse

Route

Router

ActivatedRoute

CurrentRoute

Résultat
Réponse correcte
Connaissance du langage +40pts

98 / 131
Islem Ghouma ([email protected])
Question 85: Pipe currency
Angular 2+ 00:50 / 00:50 1x (1 sec) 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
On suppose que la locale par défaut est en-US . Qu'affichera l'expression de la ligne n°6 ?

Réponse
200.13$

Résultat
Réponse incorrecte
Connaissance du langage +40pts

Réponse(s) correcte(s)
$200.13

99 / 131
Islem Ghouma ([email protected])
Question 86: Angular CLI
Angular 2+ 00:30 / 00:30 1x (12 sec) 40 / 40 pts

Question
Quelle commande ne fait pas partie de la CLI Angular ?

Réponse

ng test

ng lint

ng exit

ng deploy

Résultat
Réponse correcte
Connaissance du langage +40pts

100 / 131
Islem Ghouma ([email protected])
Question 87: Écouter les événements de l'hôte
Angular 2+ 00:45 / 00:45 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quel décorateur peut-on utiliser pour écouter les événements de l'élément hôte depuis une directive
fille?

Réponse

@HostListener

@Listener

@Target

@Event

Résultat
Réponse incorrecte
Connaissance du langage +40pts

101 / 131
Islem Ghouma ([email protected])
Question 88: Ajout d'entête HTTP
Angular 2+ 00:15 / 00:40 40 / 40 pts

Question
Qu'utiliseriez-vous pour ajouter le même entête HTTP à tous vos appels HTTP ?

Réponse

Un Injector

Un Interceptor

Par injection de dépendances

L'entête doit être ajouté à chaque appel manuellement

Résultat
Réponse correcte
Connaissance du langage +40pts

102 / 131
Islem Ghouma ([email protected])
Question 89: Extension Chrome pour debugging
Angular 2+ 00:30 / 00:30 1x (8 sec) 40 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Parmi les propositions ci-contre, quelle est celle qui désigne une extension Chrome pour débugguer les
apps Angular ?

Réponse

ngrx

npx

npm

Angular DevTools

Résultat
Réponse correcte
Connaissance du langage +40pts

103 / 131
Islem Ghouma ([email protected])
Question 90: @Input et événements @Output
Angular 2+ 14:56 / 20:00 3x (55 sec) 0 / 150 pts

Question
On vous demande de créer un composant Angular simple nommé CounterComponent ayant
counter-component pour sélecteur.

L'objectif de ce composant est de :


Prendre un message en "input" Lire une valeur d'intervalle saisie par l'utilisateur (entier, en
millisecondes) Envoyer le message en tant qu'événements de manière périodique vers son "output"
Au niveau HTML, le composant est composé d'un champ <input> avec id="intervalInput" et d'un
bouton <button> avec id="intervalSetButton" . L'utilisateur peut modifier l'intervalle en
saisissant une valeur dans le champ puis en cliquant sur le bouton.
Le composant doit avoir un @Input nommé message et un @Output nommé tick . Il doit générer
des événements de type "string" vers tick à intervalle régulier correspondant à la valeur saisie par
l'utilisateur. La chaîne de caractère utilisée pour générer les événements provient de l"input" message .
Le composant doit être capable de gérer les changements du message et les changements de la valeur
de l'intervalle. Notes : Vous devez modifier le template ainsi que la classe du composant. Un bloc de
"Preview" est disponible pour vous permettre de débugguer votre code. Il affiche votre composant ci-
dessous. Vous pouvez l'ouvrir et le modifier à votre guise. Pour vous aider, ce bloc contient un
composant parent qui manipule le composant que vous devez créer (affichage d'un compteur à côté du
message) Ce bloc de "Preview" n'est pas pris en compte dans le calcul du score de votre code.

104 / 131
Islem Ghouma ([email protected])
Réponse

1 // Angular 15.x code


2 import { Component, NgModule, Input,Output,EventEmitter } from '@angular/core';
3
4
5 @Component({
6 selector:'counter-component',
7 template: `
8 <input id="intervalInput"/>
9 <button id="intervalSetButton">Set interval</button>
10 `
11 })
12 export class CounterComponent {
13
14 @Input() message : string;
15 @Output() tick = new EventEmitter<string>();
16 }
17
18 // #region Preview
19 @Component({
20 selector:'display-component',
21 template: `
22 <counter-component [message]="'Hello world'" (tick)=counterTick($event)></counter-
component>
23 <div>{{message}} {{counter}}</div>
24 `
25 })
26 export class DisplayComponent {
27 public counter: number = 0;
28 public message: string;
29
30 public counterTick(message: string): void {
31 this.message = message;
32 this.counter++;
33 }
34 }
35
36 @Component({
37 template: `<display-component></display-component>`
38 })
39 export class PreviewComponent { }
40 // #endregion Preview
41
42 // #region Module declaration - Do not Change
43 @NgModule({
44 declarations: [PreviewComponent, DisplayComponent, CounterComponent],
45 entryComponents: [PreviewComponent]
46 })
47 export class PreviewModule { }
48 // #endregion Module declaration

Voir le code playback

105 / 131
Islem Ghouma ([email protected])
Résultat
Compile
Connaissance du langage +0pts

Prend en compte les changements d'input


Connaissance du langage +30pts

Prend en compte les changements d'intervalle


Connaissance du langage +30pts

Envoie les événements toutes les 10ms


Connaissance du langage +90pts

Question 91: @Input/@Output composant parent


Angular 2+ 03:23 / 15:00 0 / 150 pts

Question
On vous demande de créer un composant Angular nommé DisplayComponent et ayant display-
component pour sélecteur.

Il doit utiliser le composant VoterComponent (sélecteur = voter-component ) dont le code est fourni.

DisplayComponent a 3 champs public nommés question , yesAnswer et noAnswer . Ils


représentent une question posée à l'utilisateur et les choix de réponse possibles affichés dans
VoterComponent .

DisplayComponent doit utiliser VoterComponent en tant qu'enfant et doit lui passer question ,
yesAnswer et noAnswer en entrée.

Quand l'utilisateur vote, VoterComponent créé un événement de type boolean vers un @Output
nommé output .

Vous devez afficher le résultat du vote dans DisplayComponent dans un <div> avec id=lastVote :
si output est vrai, alors on affiche la valeur de yesAnswer , sinon on affiche la valeur de noAnswer .

Notes : Un bloc de "Preview" est disponible pour vous permettre de débugguer votre code. Il affiche
votre composant ci-dessous. Vous pouvez l'ouvrir et le modifier à votre guise. Ce bloc de "Preview" n'est
pas pris en compte dans le calcul du score de votre code.

106 / 131
Islem Ghouma ([email protected])
Réponse

1 // Angular 15.x code


2 import { Component, Input, NgModule, Output, EventEmitter } from '@angular/core';
3
4 @Component({
5 selector:'display-component',
6 template: `
7 `
8 })
9 export class DisplayComponent {
10 public question = "Too easy?"
11 public yesAnswer = "Yes";
12 public noAnswer = "No";
13 }
14
15 // VoterComponent: do not change
16 @Component({
17 selector:'voter-component',
18 template: `
19 {{question}}
20 <button (click)="vote(true)">{{yesAnswer}}</button>
21 <button (click)="vote(false)">{{noAnswer}}</button>
22 `
23 })
24 export class VoterComponent {
25 @Input()
26 public question: string;
27
28 @Input()
29 public yesAnswer: string;
30
31 @Input()
32 public noAnswer: string;
33
34 @Output()
35 public output = new EventEmitter<boolean>();
36
37 public vote(vote: boolean): void{
38 this.output.emit(vote);
39 }
40 }
41
42
43
44 // #region Preview
45
46 @Component({
47 template: `<display-component></display-component>`
48 })
49 export class PreviewComponent { }
50 // #endregion Preview
51
52 // #region Module declaration - Do not Change
53 @NgModule({
54 declarations: [PreviewComponent, DisplayComponent, VoterComponent],
55 entryComponents: [PreviewComponent]
56 })
57 export class PreviewModule { }
58 // #endregion Module declaration

Voir le code playback

107 / 131
Islem Ghouma ([email protected])
Résultat
Compile
Connaissance du langage +0pts

Gère l'événement
Connaissance du langage +75pts

Les entrées sont bien propagées


Connaissance du langage +75pts

108 / 131
Islem Ghouma ([email protected])
Question 92: @GeneratedValue
Hibernate 00:18 / 01:00 20 / 20 pts

Question
Quelle annotation Java devrait remplacer @XXX pour que Hibernate attribue une valeur séquentielle
générée automatiquement à id avant d'enregistrer l'entité (si id est nul) ?

@Entity
class User {

@Id
@XXX
private Long id;

public Long getId() {


return this.id;
}
}

Réponse

@GeneratedValue

@AutoIncrement

@Sequential

@Order

Résultat
Réponse correcte
Entity +20pts

109 / 131
Islem Ghouma ([email protected])
Question 93: Propriété hibernate.show.sql
Hibernate 00:33 / 00:45 0 / 20 pts

Question
Pourquoi définir la propriété hibernate.show.sql à true n'est pas une bonne pratique ?

Réponse

Parce que les requêtes SQL sont écrites dans la console via l'objet System

Parce que les requêtes SQL sont écrites dans le fichier de log statement.
log

Parce que les requêtes SQL sont écrites dans la console via le logging
framework utilisé

Résultat
Réponse incorrecte
Persistence +20pts

110 / 131
Islem Ghouma ([email protected])
Question 94: Relation many-to-many et type de cascade
Hibernate 00:22 / 00:45 10 / 20 pts

Question
Une entité nommée User possède une relation unidirectionnelle many-to-many vers une entité Role .
La suppression d’un utilisateur ne doit pas entraîner la suppression des rôles associés. Quels cascade
types ne doivent pas être utilisés ?

Réponse

CascadeType.PERSIST

CascadeType.MERGE

CascadeType.REMOVE

CascadeType.ALL

Résultat
Réponse partiellement correcte
Relationship +10/20pts

111 / 131
Islem Ghouma ([email protected])
Question 95: Transaction et fetchType LAZY
Hibernate 00:45 / 00:45 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quelle situation requiert l'utilisation d'une transaction ?

Réponse

Lors de la récupération d'une entité qui inclut une relation avec un


fetchType EAGER

Lors de la récupération d'une entité qui inclut une relation de type


@ManyToMany , quel que soit le fetchType

Lors de la récupération d'une entité qui inclut une relation de type


@OneToOne , quel que soit le fetchType

Lors de la récupération d'une entité qui inclut une relation avec un


fetchType LAZY

Résultat
Réponse correcte
Lazy vs eager +20pts

112 / 131
Islem Ghouma ([email protected])
Question 96: Comportement par défaut de cascade sur une
relation
Hibernate 00:45 / 00:45 1x (15 sec) 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Au sein d'une relation @OneToOne , @OneToMany , @ManyToOne ou bien @ManyToMany , quelle est la
valeur par défaut si la propriété cascade n'est pas définie ?

Réponse

CascadeType.MERGE

CascadeType.PERSIST

CascadeType.REMOVE

CascadeType.ALL

Aucun CascadeType n'est défini

Résultat
Réponse correcte
Relationship +20pts

113 / 131
Islem Ghouma ([email protected])
Question 97: Nombre de tables
Hibernate 01:00 / 01:00 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Considérez les deux entités Hibernate suivantes :

@Entity
public class Vehicle {
@Id
private Long id;

@ManyToMany
private List<Driver> drivers;

// getters and setters


}

@Entity
public class Driver {
@Id
private Long id;

@ManyToMany
private List<Vehicle> vehiclesDriven;

// getters and setters


}

Combien de tables Hibernate générera pour ces deux entités lorsqu'il est utilisé avec une base de
données relationnelle ?

Répondre avec un nombre.

114 / 131
Islem Ghouma ([email protected])
Réponse
3

Résultat
Réponse correcte
Relationship +20pts

Réponse(s) correcte(s)
3

115 / 131
Islem Ghouma ([email protected])
Question 98: Comportement par défaut d'une relation one-to-
many
Hibernate 01:12 / 02:00 0 / 20 pts

Question
Quel sera en base de données, le résultat des entités suivantes avec la relation unidirectionnelle
@OneToMany ?

Classe Product :

@Entity
public class Product {

@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private List<Comment> comment;

Classe Comment :

@Entity
public class Comment {
@Id
@GeneratedValue
private Long id;
private String content;
}

116 / 131
Islem Ghouma ([email protected])
Réponse

CREATE TABLE product (


id BIGINT(20) PRIMARY_KEY,
name VARCHAR(255)
)

CREATE TABLE comment (


id BIGINT(20) PRIMARY_KEY,
content VARCHAR(255),
product_id BIGINT(20)
)

CREATE TABLE product (


id BIGINT(20) PRIMARY_KEY,
name VARCHAR(255)
)

CREATE TABLE product_comment (


product_id BIGINT(20) PRIMARY_KEY,
comment_id BIGINT(20) PRIMARY_KEY
)

CREATE TABLE comment (


id BIGINT(20) PRIMARY_KEY,
content VARCHAR(255)
)

CREATE TABLE product (


id BIGINT(20) PRIMARY_KEY,
name VARCHAR(255)
)

CREATE TABLE comment (


id BIGINT(20) PRIMARY_KEY,
content VARCHAR(255)
)

Résultat
Réponse incorrecte
Relationship +20pts

117 / 131
Islem Ghouma ([email protected])
Question 99: Relation one-to-many @ManyToOne et
@JoinColumn
Hibernate 02:00 / 02:00 20 / 20 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Compte tenu des tables suivantes :

CREATE TABLE product (


id BIGINT(20) PRIMARY_KEY,
name VARCHAR(255)
)

CREATE TABLE comment (


id BIGINT(20) PRIMARY_KEY,
content VARCHAR(255),
product_id BIGINT(20)
)

Comment compléter le code suivant pour implémenter une relation unidirectionnelle one-to-many (un
produit pouvant avoir plusieurs commentaires) ?

@Entity
public class Comment {

@Id
@GeneratedValue
private Long id;
private String content;

private Product product;

118 / 131
Islem Ghouma ([email protected])
Réponse

L'attribut product doit être annoté @ManyToOne

L'attribut product doit être annoté @ManyToOne et @JoinColumn(name


= "product_id")

L'attribut product doit être annoté @OneToMany

L'attribut product doit être annoté @OneToMany


et @JoinColumn(name = "product_id")

Résultat
Réponse correcte
Relationship +20pts

119 / 131
Islem Ghouma ([email protected])
Question 100: @PreUpdate
Hibernate 00:45 / 00:45 1x (18 sec) 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Quand Hibernate invoque-t-il une méthode d'entité annotée avec @PreUpdate ?

Réponse

Seulement avant la première fois qu'une entité est sauvegardée

Seulement lors de sauvegardes ultérieures d'une entité qui a été


sauvegardée au moins une fois

Seulement quand un champ timestamp a été modifié

Seulement lorsqu'un champ id (annoté avec @Id ) a été modifié

Résultat
Réponse incorrecte
Entity +40pts

120 / 131
Islem Ghouma ([email protected])
Question 101: Mode batch - Opération delete
Hibernate 00:55 / 02:00 0 / 40 pts

Question
Sachant que la propriété hibernate.jdbc.batch_size contient la valeur 10, combien de requêtes
SQL seront exécutées suite au code ci-dessous ?

List<User> users = entityManager.createQuery("select u from User u ", User.class).getResultList();

for(User user : users) {


entityManager.remove(user);
}

Le code de la classe User est le suivant :

@Entity
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name;

public User(String name, Integer id) {


this.id = id;
this.name = name;
}
}

Réponse

10

121 / 131
Islem Ghouma ([email protected])
Résultat
Réponse incorrecte
Batching +40pts

122 / 131
Islem Ghouma ([email protected])
Question 102: persist() avec une relation bidirectionnelle one-to-
many
Hibernate 02:49 / 03:30 40 / 40 pts

123 / 131
Islem Ghouma ([email protected])
Question
Au vu des entités suivantes, quel sera le résultat du traitement écrit ci-dessous ?

Classe Product :

@Entity
public class Product {
@Id
@GeneratedValue(strategie = GenerationType.IDENTITY)
private Long id;
private String name;
private int cost;
@OneToMany(mappedBy = "product", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Comment> comments;
}

Classe Comment :

@Entity
public class Comment {
@Id
@GeneratedValue(strategie = GenerationType.IDENTITY)
private Long id;
private String content;
@ManyToOne
@JoinColumn(name = "product_id")
private Product product;
}

Code exécuté :

Product product = new Product("myProduct", 10);


Comment comment1 = new Comment("first comment");
Comment comment2 = new Comment("second comment");

product.getComments().add(comment1);
comment1.setProduct(product);
product.getComments().add(comment2);
comment2.setProduct(product);

entityManager.persist(product);

124 / 131
Islem Ghouma ([email protected])
Réponse

Le produit sera inséré en base de données mais pas les commentaires

Le produit et les commentaires seront insérés en base de données mais la


colonne de la clé étrangère sera vide

Le produit et les commentaires seront insérés en base de données sans


dysfonctionnement

L'instruction persist() échouera avec une erreur SQL

Résultat
Réponse correcte
Relationship +40pts

125 / 131
Islem Ghouma ([email protected])
Question 103: Eager fetching
Hibernate 02:00 / 02:00 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Considérez les deux entités Hibernate suivantes :

@Entity
public class Company {
@Id
private Long id;
@ManyToMany
private Collection<Employee> employees;

// ...
}

@Entity
public class Employee {
private String name;

// ...
}

Et le référentiel suivant :

@Repository
public interface CompanyRepository extends JpaRepository<Company, Long> {
private Company findByIdFetchingEmployeesEagerly(Long id);
}

Supposons que le développeur souhaite charger avidement (eager fetching) à la fois la classe Company
et toute classe enfant Employee lorsque (et seulement lorsque)
findByIdFetchingEmployeesEagerly est appelé. Quelle stratégie permettrait d'atteindre cet
objectif ?

126 / 131
Islem Ghouma ([email protected])
Réponse

Ajout de (fetch = FetchType.EAGER) à l'annotation @ManyToMany sur


le champ employees de Company

Ajout de (fetch = FetchType.LAZY) à l'annotation @ManyToMany sur le


champ employees de Company

Annotation de findByIdFetchingEmployeesEagerly avec un @Query


HQL qui permet de join fetch les employés

Annotation de findByIdFetchingEmployeesEagerly avec @Eager


(entity = Employees.class)

Résultat
Réponse incorrecte
Lazy vs eager +40pts

127 / 131
Islem Ghouma ([email protected])
Question 104: @DynamicUpdate
Hibernate 01:45 / 02:00 1x (24 sec) 40 / 40 pts

Question
L'entité User est défini comme suit :

@Entity
@DynamicUpdate
public class User {

@Id
@GeneratedValue
private Long id;
private String username;
private String password;

Quel sera l'effet de l'annotation @DynamicUpdate sur cette entité ?

Réponse

Lorsque l'entité est modifiée, la requête SQL contiendra uniquement les


colonnes qui sont modifiées.

L'appel à entityManager.persist() n'est pas nécessaire. La modification


d'un attribut via son setter permet de mettre à jour l'entité.

Lorsqu'un problème d'accès concurrent est rencontré, Hibernate réalise une


mise en jour dynamique de l'entité.

L'utilisation d'un attribut annoté @Id n'est pas obligatoire.

Résultat
Réponse correcte
Persistence +40pts

128 / 131
Islem Ghouma ([email protected])
Question 105: LazyInitializationException
Hibernate 00:59 / 01:00 40 / 40 pts

Question
Quelle pourrait être la cause de l'exception suivante ?

org.hibernate.LazyInitializationException : could not initialize proxy – no Session.

Réponse

Accéder à une entité par le biais d'une référence depuis une entité
connexe après que la session ayant récupéré cette entité connexe ait été
fermée

Essayer de valider plusieurs déclarations update au sein d'une seule


transaction sans vidage (flushing)

Ne pas inclure dans le classpath un jar de connecteur approprié pour


l'implémentation de la base de données utilisée

Récupérer une entité par ID sans session Hibernate active

Résultat
Réponse correcte
Lazy vs eager +40pts

129 / 131
Islem Ghouma ([email protected])
Question 106: Table de jointure avec une colonne
supplémentaire
Hibernate 01:00 / 01:00 0 / 40 pts

Le temps alloué à cette question s'est écoulé. La réponse du


candidat a été automatiquement récupérée à la fin du décompte.

Question
Comment implémenter un schéma d'entité qui permet de gérer une table de jointure avec une colonne
supplémentaire ?

Réponse

La relation @ManyToMany permet de le gérer grâce à la propriété


ExtraColumn

Il faut créer une nouvelle entité qui représentera la table de jointure et


utiliser des relations @ManyToOne et @OneToMany

Il faut ajouter de nouvelles méthodes dans les entités qui définissent


l'annotation @ManyToMany

Il faut utiliser l'annotation @ElementCollection

Résultat
Réponse incorrecte
Relationship +40pts

130 / 131
Islem Ghouma ([email protected])
Glossaire

Connaissance du langage

La mesure de cette compétence permet de déterminer l'expérience du candidat dans la pratique d'un langage de
programmation. Privilégiez cette compétence si, par exemple, vous recherchez un développeur qui devra être
rapidement opérationnel.

Modélisation

Cette mesure fournit une indication sur la capacité du candidat à appliquer des solutions standard pour résoudre des
problèmes récurrents. Un développeur ayant un bon niveau dans cette compétence augmentera la qualité
(maintenabilité, évolutivité) de vos applications. Cette compétence ne dépend pas spécifiquement d'une technologie.
Privilégiez cette compétence si, par exemple, vous recherchez un développeur qui sera amené à travailler sur les
briques qui structurent vos applications, à anticiper les besoins de demain pour développer des solutions pérennes.

Résolution de problèmes

Cette compétence correspond aux aptitudes du candidat à comprendre et à structurer son raisonnement pour trouver
des solutions à des problèmes complexes. Cette compétence ne dépend pas spécifiquement d'une technologie.
Privilégiez cette compétence si, par exemple, vos applications ont une composante technique importante (R&D,
innovation).

Fiabilité

La fiabilité caractérise la capacité du candidat à réaliser des solutions qui prennent en compte les cas particuliers. Plus
cette compétence est élevée, plus vos applications sont robustes (moins de bugs).

131 / 131
Islem Ghouma ([email protected])

Vous aimerez peut-être aussi