TracksJavaJava Sprint 4End of Sprint ReviewCompiled Learning ObjectivesAt the end of the sprint, you should be able to do the following things. Make sure to check you can do them all, and if not, go back and keep practicing until you can.Interfaces (Prep)Explain what an interface is, key features of interfaces and how they differ to classesExplain why interfaces are useful, the problems they solve and when to use themWrite an interface with multiple implementations and call the different implementations in a polymorphic wayData Structures (Prep)Compare and contrast common data structures in Java: Maps, Sets and Lists, explaining their similarities and differences in terms of ordering, duplicates, memory allocation and data retrieval mechanismAnd to discuss in Big-O terms, the time complexity of basic insert / update / remove operations on common collectionsGiven a scenario involving data, to choose the most appropriate data structure based on the above characteristicsInstantiate different implementations of Maps, Lists and ArraysUse generics to enforce what can and can not be contained within CollectionsExceptions (Prep)Explain the difference between checked and unchecked exceptions in JavaExplain why we have checked and unchecked exceptionsGive examples of when to use checked and unchecked exceptionsHandle potential nulls in Java codeWrite code using try/catch/finally and try-with-resources blocksExplain how exception handling is used to avoid resource leaksStreams and Optionals (Prep)Use basic stream operations like filter, map, collect to perform operations on collectionsUse Java Optional to handle potentially missing objects, for example by providing a default value, or by continuing only if a value is presentAnd compare the tradeoffs between using Optionals and handling nulls explicitly β especially noting that Optionals can themselves be null..!Use Lambdas and method references in stream operationsUse comparators to sort objectsExplain an example of java stream processing in terms of initialisation, intermediate and terminal operations.Explain what lazy evaluation is and how streams use lazy evaluation for efficiency.And contrast this with JS maps / filters etc - what are the key differences in how they are evaluated?Explain what is meant by a programming paradigm, what paradigm is associated with most of the Java you have seen so far, and which is associated with streams and optionals