M2I FORMATION : 02. JAVA, programmation avancée
Organisme
92400 COURBEVOIEVoir toutes ses formationsAutres organismes proposant cette formation
Durée
Modalités
- Classe virtuelle
- Présentiel
L’évaluation des acquis se fait en cours de formation, par des études de cas ou des travaux pratiques et, en fin de formation, par un questionnaire
Prix
Public
Développeurs, chargés de développement d’applications informatiques, chefs de projets proches du développement…
Pré-requis
Maitriser le langage Java, connaître les concepts de bases de données relationnelles et du langage SQL, disposer d’une expérience en programmation Java.
Objectifs pédagogiques
- Maîtriser les aspects avancés du langage Java
- Comprendre comment appliquer les principaux Frameworks et librairies Java. Comprendre le modèle de sécurité et le chargement des classes Java
- Savoir programmer en Java dans le contexte des bases de données relationnelles
- Savoir tester, debugger et optimiser ses applications
- Appréhender les nouveautés Java
Programme détaillé
Jour 1 - Matin
Aspects avancés de Java
La programmation concurrente
Les concepts de la programmation multi-thread :
- Le modèle d'activités de Java (Runnable et Thread)
La création / destruction des threads
Ordonnancement des threads
La synchronisation des threads
Le verrouillage des méthodes et des instructions (synchronized)
Les moniteurs
Quelques problèmes du multi-thread
- L'interblocage (caractérisation, évitement, prévention, détection), la famine
Les extensions du modèle introduites dans Java 5 (Callable<T>, Future<T>, ExecutorService), les nouvelles collections
Exemple de travaux pratiques (à titre indicatif)
Construction d'une application multi-thread avec contraintes de concurrence
Jour 1 - Après-midi
§ Aspects avancés : la programmation réflexive
Le modèle Fork/Join
Les extensions avec CompletableFuture
Les divers outils de gestion de la concurrence :
- Les verrous partagés / exclusifs
- Les sémaphores
- Les barrières cycliques
Les objectifs et les principes
La découverte dynamique des informations relatives à une classe ou à un objet
L'instanciation et l'invocation dynamique
Exemples de travaux pratiques (à titre indicatif)
Mise en pratique sur :
- La programmation parallèle
- Le CompletableFuture
- Les sémaphores
Jour 2 - Matin
§ Implémentation d'un ClassLoader chargeant des classes
Rôle du compilateur Java
Rôle des ClassLoaders
Les différentes zones mémoires de la JVM (Java Virtual Machine) et leur gestion par le GC (Garbage Collector)
Hiérarchie des différents ClassLoaders
Vérification du Bytecode
Chargement dynamique de classe
Implémenter un ClassLoader
Manipulation des énumérations
Exemples de travaux pratiques (à titre indicatif)
Quelques exemples de chargement de classes et traitements des annotations personnalisées
Jour 2 - Après-midi
§ Les nouveautés du switch et Record
Switch expressions
Pattern Matching instanceof
Record (classe de données simplifiée pour DTO)
Exemple de travaux pratiques (à titre indicatif)
Mise en oeuvre des instructions Switch
Jour 3 - Matin
§ La console JShell Java
Principe REPL (Read-Eval-Print Loop)
Présentation de JShell Java
Fonctionnement interne de JShell
Utilisation de JShell (exemples)
§ Process API, HTTP2 API
L'interface ProcessHandle
Gestion des processus depuis Java 9
Présentation de HTTP2 Client
Exemples de travaux pratiques (à titre indicatif)
Programmation d'un cas d'école avec la console JShell
Mise en pratique d'un client HttpClient avec Java 9
Jour 3 - Après-midi
§ Tester ses applications en Java
Test Driven Development - Découvrir les grands principes du TDD
Cycle de développement du TDD
Les 3A : Arrange, Act, Assert
Remaniement de code : techniques de refactoring en TDD
Conception émergeante
Gestion des exceptions
Gestion des scénarios
JUnit - Savoir utiliser le framework JUnit pour implémenter des tests
Tests unitaires
Exemple de travaux pratiques (à titre indicatif)
Utilisation de JUnit
Jour 4 - Matin
§ D'autres nouveautés Java
Lambda fonctions
Streams et Streams parallèles
La gestion des modules
Exemple de travaux pratiques (à titre indicatif)
Développement d'une application utilisant les Lambdas, Streams et modules
Jour 4 - Après-midi
§ Le processus d'optimisation
Analyser
Coder
Mesurer pour vérifier
Les outils
Profiling
JVisualVM
Eclipse MAT
SoapUI
JMeter
Exemple de travaux pratiques (à titre indicatif)
Utilisation d'outils de profiling
§ Gestion mémoire et optimisation
L'organisation de la mémoire
Le ramasse-miettes
Le cycle de vie des objets
Configurer la mémoire et le GC
Mesure de la mémoire
Off Heap
La gestion de la mémoire et les performances
Les options de la JVM HotSpot pour le suivi de l'activité du GC
Fuite de mémoire
Fuite de ressources
Optimiser l'utilisation de la mémoire
Optimiser l'occupation mémoire
Exemple de travaux pratiques (à titre indicatif)
Utilisation des outils d'optimisation mémoire