- JVM
- Chargement des classes, Classloader, classpath
- Gestion de la mémoire, le garbage collector
- Le modèle de sécurité de Java
- La réflexion, les annotations
- Les outils d’inspection, surveillance, traces
- Premiers pas avec les Design Patterns
- Programmation par interfaces
- Introduction aux design patterns du GoF (Gang Of Four)
- Les documentations de référence
- Pattern Singleton
- Pattern Factory
- Pattern Decorator
- Pattern Observer
- Pattern Proxy
- Architecture MVC
- Programmation Multitâches (Multithreading)
- Concepts et spécificités du multithreading par rapport à la programmation « traditionnelle »
- États d’un thread
- Synchronisation des threads
- Interfaces Lock et Condition
- Pools de threads
- Les apports du framework Executor (invocation, ordonnancement, exécution, contrôle)
- Le package java.util.concurrentc
- Accéder aux bases de données
- Historique de l’accès aux données en Java, présentation de JDBC
- L’API JDBC, Connection, Statement, ResultSet
- Gestion des transactions
- Problématique de l’ORM et introduction à JPA
- Configuration JPA, l’exemple d’Hibernate
- Mapping basique, API de l’EntityManager, les transactions
- Mapping de l’héritage, des associations, lazy-loading et cascading
- Intoduction au langage JPQL
- Le système de gestion de fichiers
- Les nouvelles classes java.nio.file.Files et java.nio.file.Path
- Manipulation de chemins, parcours de répertoires et d’arborescences
- Accès aux attributs d’un fichier
- Notification des changements dans un répertoire
- Gestion des archives Jar/zip
- Entrées/sorties asynchrones
- Les tests unitaires
- Présentation, intérêt
- Automatisation et intégration des tests dans le processus de builds, l’exemple de Maven
- Mise en œuvre avec JUnit5, assertions, annotations
- Cycle de vie d’exécution d’un test
- Données de tests
- Suite de tests
|
- Découverte de l’API Date/Time
- La gestion du temps «classique» et sa lourdeur de manipulation en Java
- Les concepts de temps machine et temps humain avec la nouvelle API
- La gestion du temps machine avec java.time.Instant et java.time.Duration
- Le temps humain avec java.time.LocalDate, java.time.LocalTime, java.time.LocalDateTime
- Expressions Lambda, références de méthodes
- Comprendre les principes de la programmation fonctionnelle
- Syntaxe des classes internes anonymes
- Notion d’interface fonctionnelle
- Anatomie d’une expression Lambda
- Simplifier les expressions lambdas avec les références de méthodes
- Mise en œuvre des interfaces fonctionnelles : Consumer, Supplier, Predicate, Function
- Manipuler ses flux de données avec l’API Stream
- Objectif de l’API Stream
- Obtention et sortie d’un stream
- Opérations intermédiaires et terminales
- Mise en œuvre des méthodes forEach, map, filter, findFirst
- Principe de l’évaluation paresseuse
- ntérêt de la la classe Optional
- Réduction avec reduce et collect
- Interface Collector et classe Collectors
- Autres méthodes : limit, skip, sorted, min, max, distinct, allMatch, anyMatch, noneMatch, count
- Streams parallèles, précautions d’usage
- Nouveautés de Java 9 à Java 11
- Exécution de scripts Java avec JShell
- Nouvelle organisation de la documentation des API Java
- API Parser pour Nashorn
- Notion de module
- Utilisation des modules
- Modularité du JDK
- Déploiement d’applications Java
- Rôle du linker Java jlink
- Fichiers jar avec module.info
- Nouveau format des fichiers jar avec JMOD
- Nouvelle gestion des versions de Java
- Gestion de licences pour les JDK11+
- Mot-clé var
- Nouveau client http
- Exécution directe d’un fichier source java
|