- JVM
- Le modèle de sécurité de Java
- Chargement des classes, rôle du Bootstrap Class Loader
- Mettre en œuvre son propre class loader
- Vérification de la structure d’un fichier class par le class-file vérifier
- Origines du Out Of Memory Error
- Utilisation de l’outil visualvm
- Principe et rôle d’un Security Manager
- Format des fichiers .policy
- Classes internes, Généricité, Annotations
- Classes internes static, membre, locale, anonyme
- Accès aux membres, création d’instances
- Passage de paramètres génériques aux méthodes
- Pattern Singleton
- Méthodes génériques
- Principe et rôle d’une annotation
- Attributs obligatoires et optionnels
- Cibles d’une annotation
- Annotations personnalisées
- Annotations multiples
- Présentation de la programmation parallèle
- Concepts et spécificités du multithreading par rapport à la programmation « traditionnelle »
- États d’un thread
- Synchronisation des threads
- Intérêt du pattern Immutable
- Gestion des mutex avec les interfaces Lock et Condition
- Pools de threads
- Le package java.util.concurrentc
- Pools de threads
- Les apports du framework Executor (invocation, ordonnancement, exécution, contrôle)
- Le package java.util.concurrent
- Les classes Atomic, les collections concurrentes
- 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 modules
- Principe et intérêt des modules
- Format du descripteur de module : les directives
- Utilisation des modules
- Gestion des dépendances entre modules, la commande jdeps
- Intérêt du module-path
- Notions de modules anonymes et modules automatiques
- Mise en œuvre de services
- Modularité du JDK
- Nouvelle organisation de la documentation des API Java
- Fichiers jar modulaires
- Problématique des migrations : approches bottom-up et top-down
- Nouveautés de Java 11 à 17
- Évolution du switch
- Blocs de texte
- Rôle et intérêt des records
- Classes et interfaces scellées
- La commande jlink
- La commande jpackage
|
- L’accès aux bases de données
- Historique de l’accès aux données en Java, présentation de JDBC
- Correspondance entre types SQL et Java
- Rôle du driver
- L’API JDBC, Connection, Statement, ResultSet
- Requêtes paramétrées avec PreparedStatement
- Appel de procédure stockées avec CallableStatement
- Utilisation de l’API RowSet
- Gestion des transactions
- Notion de pool de connexions
- Problématique de l’ORM et introduction à JPA
- Accès complet au système de gestion de fichiers avec Nio.2
- Les nouvelles classes java.nio.file.Files et java.nio.file.Path
- Gestion des liens symboliques
- 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
- 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
- Gestion des exceptions
- Mise en œuvre de l’API Stream pour la manipulation de flux de données
- 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
- Intérêt de la la classe Optional
- Intérêt de la la classe Optional
- Réductions avec reduce et collect
- Interface Collector et classe Collectors
- Autres méthodes : limit, skip, sorted, min, max, distinct, allMatch, anyMatch, noneMatch, count
- Streams sur fichiers et répertoires
- Streams parallèles, précautions d’usage
- Sensibilisation à l’outil Maven et aux frameworks JUnit, Hibernate, Spring
- Rôle et intérêt de Maven
- Structure d’un projet Maven
- Constitution d’un POM
- Résolution des dépendances
- Comparaison framework/librairie
- Présentation de JUnit pour les tests unitaires
- Présentation de Hibernate/JPA pour l’accès aux bases de données relationnelles
- Présentation de Spring pour l’injection de dépendances
- Débugging d’applications
- Rôle du débugging
- Présentation de l’outil de débugging dans l’IDE
- Notions de breakpoint, conditional breakpoint, watchpoint, step filtering
- Exécution en pas à pas, observation des variables, modification
- Suspension et reprise de l’exécution d’un thread
|