Java

Java


Java java-core

Understand OOP concepts Know language syntax and constructions Understand visibility modifiers, exception handling Be aware of java.lang.*classes

Optional class New Date/Time API

New default methods in JDK Static methods in interfaces Lambda expressions syntax Method references Purpose of @FunctionalInterface API support for functional style (java.util.function)

collections

Know all basic interfaces (List, Set, Map) and understand their differences Know implementations of these interfaces from JDK and their behavior

Understand implementation details of concrete classes

streams

Standard streams (map, filter, sum, etc) Intermediate and terminal operations

Classes from java.util.stream (Stream, StreamSupport, Spliterator), streams of primitives Sequential and parallel streams

Classes from java.util.stream (Stream, StreamSupport, Spliterator), streams of primitives Sequential and parallel streams

exceptions

exception handling mechanism difference between error and exception try, catch and finally blocks hierarchy of exceptions

Chained Exceptions Throwable Class

algorithms

Why design patterns are important (common language)? Ability to describe some pattern. Ability to categorize them (structural, behavioral, creational) Ability to recognize them in others code. Ability to use them in practice (name a pattern for a given problem) SOLID: The Single Responsibility (a class should have only a single responsibility (i.e. only one reason to change) The Open Closed Principle (A component should be open for extension but closed for modification) The Liskov Substitution Principle (Subclasses should be substitutable for their super classes) The Interface Segregation Principle (Many client specific interfaces are better than one general purpose interface) The Dependency Inversion Principle (Depend upon Abstractions. Do not depend upon concretions.)

Reactive Manifesto: Reactive Systems are: - responsive: The system responds in a timely manner if at all possible - resilient: The system stays responsive in the face of failure. - elastic: The system stays responsive under varying workload. - message driven: Reactive Systems rely on asynchronous message-passing to establish a boundary between components that ensures loose coupling, isolation, location transparency. Role of supervision. Implementations: RxJava, React, Akka Ability to apply/know the various implementation patterns, for example: - Simple Component - Let it crash - Error Kernel - Circuit Breaker Ability to design a system keeping in mind these characteristics

memory model

synchronized keyword semantics volatile keyword semantics final fields visibility

Synchronizes-With rule Happens-Before rule

multithreading

Synchronized keyword (static vs non-static method, synchronized block) wait/notify/notifyAll, sleep, yeild Starting new thread (start vs run), Runnable interface Daemon Threads + JVM shutdown Shutdown Hooks Thread Groups Standard Executors (Single-Thread, Fixed, Pooled) Scheduled executor Callable/Future interface ReentrantLock, ReentrantReadWriteLock Atomic* (Integer, Boolean, etc) Concurrent collections: CopyOnWriteArrayList/Set, ConcurrentSkipListMap/Set, ConcurrentHashMap Thread States BlockingQueues/Dequeues (Linked*, Array*, Priority*,etc…)

volatile keyword, gotchas with 64-bit values

Semaphore, Phaser, CountdownLatch, CyclicBarrier Fork/Join pool Self-Monitoring, Deadlock detection, long wait detection (over JMX) CompletableFuture StampedLock LongAdder, DoubleAdder Parallel sorting

Spring REST Implementation

Creating REST Controllers RestTemplate usage HTTP Message Conversion Async RestTemplate

Creating asynchronous controller

Spring MVC Framework

The DispatcherServlet Implementing Controllers Handler mappings Building URIs Spring’s multipart (file upload) support Handling exceptions Web Security Convention over configuration support Configuring Spring MVC

Resolving views HTTP caching support

Beans, IoC Container

Container and Beans overview Dependencies Annotation-based container configuration Java-based container configuration

Bean scopes Classpath scanning and managed components Using JSR 330 Standard Annotations Additional Capabilities of the ApplicationContext

The BeanFactory

JMS

Using Spring JMS Sending a Message Receiving a message

Resources files handling

Application contexts and Resource paths

The Resource interface The ResourceLoader Resources as dependencies

Introduction to Spring Testing

Unit Testing Integration Testing

Introduction to Spring Testing MVC Test Framework

Validation, Data Binding, and Type Conversion

Resolving codes to error messages Spring Type Conversion Spring Field Formatting Configuring a global date & time format Spring Validation

Bean manipulation and the BeanWrapper Customizing the nature of a bean Bean definition inheritance Container Extension Points

spring-cache

Declarative annotation-based caching Configuring the cache storage

Plugging-in different back-end caches

scheduling

The Spring TaskScheduler Annotation Support

The Spring TaskExecutor

The Task Namespace Using the Quartz Scheduler

spring boot

Differences Between Spring and Spring Boot Spring Initializr Basic Annotations

Available Spring Boot Starters Auto-Configuration management External Configuration

Devtools Actuator

Java Data Persistence Hibernate and JPA

Hibernate relation to JPA Difference between Hibernate and JPA

Hibernate. Multitenance

Cache levels, unique ids

JPA. Object/Relational concept

Object/Relational Mismatch Function of Entity Manager Entity, Annotations Configuration and persistence.xml

JPA. Object/Relational Mapping and Entity Relationships

Property, Field, Table and Column Mapping, Primary Keys and Generation Type Mappings, Temporal and Enumerated Types, Embedded Types @ManyToOne Relationships, @OneToOne Relationships, @OneToMany Relationships, @ManyToMany Relationships Eager and Lazy Loading

Inheritance, Single-Table and Joined-Table, Table-Per-Concrete-Class Strategy Composite Primary Keys, @IdClass and @EmbeddedId, Derived Identifiers

JPA. Object/Relational Operations

Fetching and Inserting Detachment and Merging Cascading and Orphan Removal Lifecycle and Validation (JSR-303)

JPA. Object/Relational Optimisation

Optimistic Read and Write Locking, Pessimistic Locking Persistence Context as Transactional Cache Shared Cache, Locking vs. Caching, Persistence Context as Transactional Cache Lifecycle Events, Entity Listeners

JPA. Object/Relational Quering (JPA and native SQL)

Java Persistence Query Language (JPQL) Query builder with Criteria API Named Queries, Native Queries Mapping

MyBatis

Difference between iBATIS / MyBatis and others ORMs

MyBatis. Configuration Parts of configuration (Configuration XML or Configuration class)

MyBatis. Mappers

Purpose of mappers, and their basic parts Primary Key generation (useGeneratedKeys vs selectKey) SQL Injections (String Substitution) Caching Dynamic queries DB vendor specific queries Annotation based mappers

Result type vs result map Advanced Result mapping (compound objects, result type selection, nested queries)

Database rdbms

Create, Drop, Alter Insert, Update, Delete Simple selections, Joins Tables, Columns, Rows, Relations (Primary key, Foreign key), Views

Database normalization forms Merge / Upsert Unions, Aggregations (Group By, Distinct, Window Functions, etc.), Subqueries Transaction isolation levels Cursors, Stored Procedures & Functions, Indexes, Triggers Atomicity, Consistency, Isolation levels (can name and explain how they work), Durability, CAP theorem

Database denormalization Understanding of partitioning Explain Plans