make run
- Threads: Creating and managing threads using
Thread
orRunnable
. - Executors: Using
ExecutorService
andThreadPool
. - Concurrency Utilities: Classes like
Semaphore
,CountDownLatch
, andCyclicBarrier
. - Fork/Join Framework: Parallel computing with the
ForkJoinPool
. - CompletableFuture: Asynchronous programming with futures.
- Synchronization: Locks (
ReentrantLock
,ReadWriteLock
) and synchronized blocks. - Volatile and Atomic Classes: Managing shared variables in concurrent scenarios.
- Heap and Stack: Understanding memory allocation and lifecycle.
- Garbage Collection: Tuning and understanding GC algorithms (e.g., G1, ZGC).
- Weak, Soft, and Phantom References: Managing object references for memory-sensitive applications.
- Memory Leaks: Identifying and fixing them using tools like VisualVM and JProfiler.
- Custom Generic Classes and Methods: Creating type-safe, reusable code.
- Wildcard Types:
? extends
and? super
. - Concurrent Collections:
ConcurrentHashMap
,CopyOnWriteArrayList
. - Navigable and Sorted Collections:
TreeMap
,TreeSet
.
- Creational Patterns: Singleton, Factory, Builder.
- Structural Patterns: Adapter, Decorator, Proxy.
- Behavioral Patterns: Observer, Strategy, Command.
- Concurrency Patterns: Producer-Consumer, Thread-Safe Singleton.
- Lambdas and Streams: Writing concise, functional-style code.
- Optional: Avoiding null references and improving code readability.
- Collectors: Custom and built-in collectors in the Streams API.
- Method References:
ClassName::methodName
syntax. - Higher-Order Functions: Functions that return or take other functions as parameters.
- Reflection API: Inspecting classes, methods, and fields at runtime.
- Annotations: Custom annotations and processing with
AnnotationProcessor
. - Dynamic Proxies: Creating runtime implementations of interfaces.
- Modular programming introduced in Java 9.
- Defining Modules: Using
module-info.java
. - Encapsulation: Controlling visibility between modules.
- Services API: Dependency injection with
provides
anduses
.
- NIO.2 (New I/O): Working with non-blocking I/O,
Path
, andFiles
. - Asynchronous Channels:
AsynchronousFileChannel
,AsynchronousSocketChannel
. - Serialization: Custom serialization with
Serializable
andExternalizable
. - Object Streams: Reading/writing objects to streams.
- Socket Programming: TCP and UDP communication.
- HTTP Clients: Using
HttpClient
introduced in Java 11. - REST APIs: Working with JSON and APIs using libraries like Jackson or Gson.
- WebSocket Programming: Full-duplex communication.
- Streams and Parallel Streams: Leveraging multi-core systems.
- JDBC and ORM Frameworks: Efficient database interaction.
- JMX (Java Management Extensions): Monitoring and managing applications.
- JavaFX: Rich UI applications.
- JVM Tuning: Managing heap, stack, and GC tuning.
- JIT Compilation: Understanding how the JVM optimizes code at runtime.
- Profiling and Monitoring: Tools like JProfiler, VisualVM, and Flight Recorder.
- Bytecode Manipulation: Using libraries like ASM, Javassist.
- Encryption and Decryption: Using Java's
javax.crypto
package. - Secure Sockets: SSL/TLS communication.
- Authentication/Authorization: Working with JWT, OAuth.
- Secure Coding Practices: Avoiding common vulnerabilities like SQL injection and XSS.
- Microservices: Building and managing distributed applications.
- Messaging: Using RabbitMQ, Kafka, or JMS.
- RESTful Web Services: Developing and consuming APIs.
- Remote Method Invocation (RMI): Distributed computing in Java.
- Unit Testing: Using JUnit and Mockito.
- Integration Testing: Using Spring Boot Test and TestContainers.
- Debugging Tools: Breakpoints, watches, and stepping through code.
- Static Code Analysis: Using SonarQube or PMD.
- Spring Framework: Dependency injection, AOP, and data access.
- Hibernate: ORM and caching.
- Akka: Actor-based concurrency.
- Vert.x: Reactive programming.