𝗜𝗻𝘁𝗲𝗿𝘃𝗶𝗲𝘄 𝗣𝗿𝗲𝗽𝗮𝗿𝗮𝘁𝗶𝗼𝗻 𝗚𝘂𝗶𝗱𝗲 𝗳𝗼𝗿 𝗝𝗮𝘃𝗮, 𝗦𝗽𝗿𝗶𝗻𝗴
𝗕𝗼𝗼𝘁, 𝗮𝗻𝗱 𝗠𝗶𝗰𝗿𝗼𝘀𝗲𝗿𝘃𝗶𝗰𝗲𝘀 (Mostly Asked Ques ons)
Core Java
1. Java 8 Features
Interviewer Expecta on: The candidate should list key Java 8 features, explain their purpose, and
provide examples demonstra ng their use. They should highlight how these features improve code
quality or performance.
Answer: Java 8 (released March 2014) introduced transforma ve features to improve produc vity,
readability, and performance. Key features include:
Lambda Expressions: Enable func onal programming by allowing methods to be passed as
arguments.
o Example: (a, b) -> a + b for a simple addi on func on.
Stream API: Provides a declara ve way to process collec ons, suppor ng opera ons like
filter, map, and reduce.
o Example: list.stream().filter(n -> n > 10).map(n -> n * 2).collect(Collectors.toList());
Func onal Interfaces: Interfaces with a single abstract method (e.g., Runnable, Comparator),
used with lambdas.
o Example: @Func onalInterface interface MyFunc { void apply(); }
Default and Sta c Methods in Interfaces: Allow adding methods to interfaces without
breaking implementa ons.
o Example: interface MyInterface { default void doSomething() {
System.out.println("Default"); } }
Op onal Class: Reduces NullPointerExcep on risks by wrapping nullable values.
o Example: Op onal<String> opt = Op onal.ofNullable(name); opt.orElse("Default");
Date and Time API: A modern replacement for java.u l.Date, using LocalDate, LocalTime,
etc.
o Example: LocalDate.now().plusDays(1);
CompletableFuture: Simplifies asynchronous programming.
o Example: CompletableFuture.supplyAsync(() -> "Hello").thenApply(s -> s + " World");
Nashorn JavaScript Engine: Executes JavaScript within Java (though deprecated in later
versions).
What to Highlight:
Prac cal use cases (e.g., Stream API for data processing).
How features like lambdas reduce boilerplate code.
Awareness of Java 8’s impact on frameworks like Spring.
2. Stream API
Interviewer Expecta on: The candidate should explain the Stream API’s purpose, opera ons, and
performance considera ons, with examples showing sequen al and parallel streams.
Answer: The Stream API enables func onal-style processing of collec ons, emphasizing declara ve
code over impera ve loops. Streams operate on a data source (e.g., List, Set) and support opera ons
like filtering, mapping, and reducing.
Key Components:
o Source: Collec ons, arrays, or I/O channels.
o Intermediate Opera ons: Lazy opera ons like filter(), map(), sorted().
o Terminal Opera ons: Eager opera ons like collect(), forEach(), reduce().
Example:
java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> doubledEvens = numbers.stream()
.filter(n -> n % 2 == 0) // Intermediate: filter even numbers
.map(n -> n * 2) // Intermediate: double them
.collect(Collectors.toList()); // Terminal: collect to List
System.out.println(doubledEvens); // [4, 8]
Parallel Streams:
o Use parallelStream() for mul -threaded processing.
o Example: numbers.parallelStream().forEach(System.out::println);
o Cau on: Ensure thread-safety; avoid stateful opera ons.
Performance:
o Streams are not always faster than loops; overhead exists for small datasets.
o Parallel streams shine for large datasets but require careful tuning to avoid
conten on.
What to Highlight:
Difference between sequen al and parallel streams.
Lazy evalua on (intermediate opera ons don’t execute un l a terminal opera on is called).
Common pi alls (e.g., modifying the source during stream processing).
3. Lambda Expressions and Func onal Interfaces
Interviewer Expecta on: The candidate should define lambda expressions, explain their syntax, and
demonstrate their use with func onal interfaces, including custom ones.
Answer: Lambda Expressions are anonymous func ons introduced in Java 8, enabling concise code
for implemen ng func onal interfaces.
Syntax: (parameters) -> expression or (parameters) -> { statements; }
o Example: (x, y) -> x + y for adding two numbers.
Func onal Interface: An interface with exactly one abstract method, marked with
@Func onalInterface.
o Built-in examples: Runnable, Consumer, Predicate, Func on.
o Example:
@Func onalInterface
interface MathOp {
int operate(int a, int b);
MathOp add = (a, b) -> a + b;
System.out.println(add.operate(5, 3)); // 8
Use Cases:
o Simplify event handling: bu on.setOnAc on(e -> System.out.println("Clicked"));
o Stream opera ons: list.stream().filter(n -> n > 0);
Benefits:
o Reduces boilerplate compared to anonymous classes.
o Enables func onal programming paradigms.
What to Highlight:
How lambdas work with built-in func onal interfaces like java.u l.func on.*.
Type inference in lambda parameters.
Limita ons (e.g., can’t modify non-final local variables).
4. Mul threading and Lock Strategies
Interviewer Expecta on: The candidate should explain Java’s threading model, synchroniza on
techniques, and lock strategies, with examples of synchronized, ReentrantLock, and concurrent
u li es.
Answer: Java’s mul threading allows concurrent execu on of tasks using threads, managed by the
JVM.
Thread Crea on:
o Extend Thread or implement Runnable.
o Use ExecutorService for thread pools:
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.submit(() -> System.out.println("Task 1"));
executor.shutdown();
Synchroniza on:
o synchronized Keyword: Ensures mutual exclusion.
Example:
synchronized void increment() {
counter++;
o ReentrantLock: A flexible alterna ve to synchronized.
Example:
Lock lock = new ReentrantLock();
void increment() {
lock.lock();
try {
counter++;
} finally {
lock.unlock();
}
Concurrent U li es (java.u l.concurrent):
o ConcurrentHashMap: Thread-safe map with segmented locking.
o CountDownLatch: Synchronizes threads wai ng for events.
Example: CountDownLatch latch = new CountDownLatch(3);
o Semaphore: Controls access to resources.
o ForkJoinPool: For parallel task decomposi on (used by parallel streams).
Lock Strategies:
o Op mis c Locking: Assumes conflicts are rare, using version checks (e.g., JPA
@Version).
o Pessimis c Locking: Locks resources to prevent conflicts (e.g., database row locks).
o Read-Write Locks: ReentrantReadWriteLock allows mul ple readers or one writer.
What to Highlight:
Difference between synchronized and ReentrantLock (e.g., fairness, tryLock).
Avoiding deadlocks (e.g., consistent lock ordering).
Real-world use (e.g., thread pools in web servers).
5. String Class
Interviewer Expecta on: The candidate should explain the String class’s immutability, string pool,
and common methods, addressing performance considera ons.
Answer: The String class in Java is immutable, final, and widely used for text manipula on.
Immutability:
o Once created, a String object’s value cannot change.
o Benefits: Thread-safety, cacheable hash codes, security.
o Example: String s = "Hello"; s = s + " World"; creates a new String.
String Pool:
o Literals are stored in a JVM-managed pool for reuse.
o Example: String s1 = "Hello"; String s2 = "Hello"; // s1 == s2
o Use intern() to add strings to the pool.
Common Methods:
o length(), charAt(), substring(), toUpperCase(), equals(), split(), replace().
o Example: String s = "Hello World"; s.split(" ")[0]; // "Hello"
Performance:
o Avoid String concatena on in loops; use StringBuilder:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
sb.append(i);
o StringJoiner for delimited strings (Java 8+).
What to Highlight:
Why immutability ma ers (e.g., hash map keys).
Difference between == and equals() for strings.
When to use StringBuilder vs. StringBuffer (thread-safe).
6. Sta c Keyword (Blocks, Classes, Variables)
Interviewer Expecta on: The candidate should explain the sta c keyword’s role in variables,
methods, blocks, and nested classes, with examples.
Answer: The sta c keyword indicates that a member belongs to the class, not instances.
Sta c Variables:
o Shared across all instances.
o Example: sta c int counter = 0;
Sta c Methods:
o Called on the class, can’t access instance fields.
o Example: sta c void log(String msg) { System.out.println(msg); }
Sta c Blocks:
o Executed once when the class is loaded.
o Example:
java
sta c {
System.out.println("Class ini alized");
Sta c Nested Classes:
o Don’t require an instance of the enclosing class.
o Example:
java
class Outer {
sta c class Nested {
void hello() { System.out.println("Hi"); }
Outer.Nested nested = new Outer.Nested();
What to Highlight:
Use cases (e.g., u lity methods like Math.abs(), singleton counters).
Memory implica ons (sta c fields persist for the class’s life me).
Ini aliza on order with sta c blocks.
7. Global and Instance Variables
Interviewer Expecta on: The candidate should clarify the difference between global (sta c) and
instance variables, their scope, and lifecycle.
Answer:
Global (Sta c) Variables:
o Declared with sta c, belong to the class.
o Scope: Accessible across all instances; lifecycle ed to class loading/unloading.
o Example: sta c String appName = "MyApp";
Instance Variables:
o Declared without sta c, belong to an instance.
o Scope: Accessible only through an instance; lifecycle ed to the object.
o Example: String userName;
Comparison:
o Sta c: Shared state (e.g., configura on se ngs).
o Instance: Unique state (e.g., user-specific data).
o Example:
class User {
sta c int totalUsers = 0; // Global
String name; // Instance
User(String name) {
this.name = name;
totalUsers++;
What to Highlight:
Thread-safety issues with sta c variables.
Memory management (sta c variables can cause leaks if not cleared).
Proper use cases (e.g., counters vs. per-object data).
8. Java Memory Model
Interviewer Expecta on: The candidate should explain the Java Memory Model (JMM), memory
areas, and thread interac ons, with a focus on visibility and synchroniza on.
Answer: The Java Memory Model defines how threads interact with memory, ensuring consistent
behavior.
Memory Areas:
o Heap: Stores objects and arrays; shared across threads.
Young Genera on (Eden, Survivor) and Old Genera on for garbage
collec on.
o Stack: Per-thread; stores local variables, method call frames.
o Method Area: Stores class metadata, sta c variables, constant pool.
o Program Counter (PC) Register: Tracks the current instruc on per thread.
JMM Guarantees:
o Visibility: Changes by one thread may not be immediately visible to others unless
synchronized.
o Ordering: Instruc ons may be reordered unless vola le or synchronized is used.
Key Concepts:
o Vola le: Ensures visibility and prevents reordering.
Example: vola le boolean flag = false;
o Synchronized: Ensures mutual exclusion and memory visibility.
o Atomicity: Use AtomicInteger, AtomicReference for thread-safe opera ons.
Example: AtomicInteger counter = new AtomicInteger(0);
counter.incrementAndGet();
What to Highlight:
Garbage collec on’s role in heap management.
How vola le differs from synchronized.
Real-world issues like race condi ons and how JMM mi gates them.
9. Collec ons (All, HashMap - Synchronized and Other Types)
Interviewer Expecta on: The candidate should describe the Java Collec ons Framework, focus on
HashMap, synchroniza on op ons, and using model classes as keys.
Answer: The Java Collec ons Framework provides data structures for storing and manipula ng
objects.
Key Interfaces and Classes:
o List: Ordered, allows duplicates (e.g., ArrayList, LinkedList).
o Set: No duplicates (e.g., HashSet, TreeSet).
o Map: Key-value pairs (e.g., HashMap, TreeMap, LinkedHashMap).
o Queue: FIFO or priority-based (e.g., PriorityQueue, ArrayDeque).
HashMap:
o Stores key-value pairs, O(1) average-case opera ons.
o Not thread-safe; null keys/values allowed.
o Example: Map<String, Integer> map = new HashMap<>(); map.put("key", 1);
Synchronized HashMap:
o Use Collec ons.synchronizedMap(new HashMap<>()) for thread-safety.
o Alterna ve: ConcurrentHashMap for be er performance (segmented locking).
Example: ConcurrentHashMap<String, Integer> cmap = new
ConcurrentHashMap<>();
Other Map Types:
o TreeMap: Sorted keys, O(log n) opera ons.
o LinkedHashMap: Maintains inser on order.
Using Model Classes as Keys:
o Must override hashCode() and equals() for consistency.
o Example:
class User {
String id;
User(String id) { this.id = id; }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User)) return false;
User user = (User) o;
return id.equals(user.id);
@Override
public int hashCode() {
return id.hashCode();
Map<User, String> map = new HashMap<>();
map.put(new User("123"), "Alice");
o Pi alls: Mutable keys can break map integrity if modified a er inser on.
What to Highlight:
When to use ConcurrentHashMap vs. synchronized HashMap.
Performance trade-offs (e.g., ArrayList vs. LinkedList).
Importance of immutable keys in maps and sets.
10. Design Pa erns (Singleton, Factory, Observer, etc.)
Interviewer Expecta on: The candidate should explain common design pa erns, their purposes, and
provide Java implementa ons, with emphasis on real-world use.
Answer: Design pa erns are reusable solu ons to common so ware problems. Key pa erns include:
Singleton:
o Ensures one instance of a class.
o Example:
public class Singleton {
private sta c vola le Singleton instance;
private Singleton() {}
public sta c Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
return instance;
o Use: Logging, configura on managers.
Factory:
o Creates objects without specifying the exact class.
o Example:
interface Shape { void draw(); }
class Circle implements Shape { public void draw() { System.out.println("Circle"); } }
class ShapeFactory {
public Shape getShape(String type) {
if ("circle".equalsIgnoreCase(type)) return new Circle();
return null;
o Use: Database drivers, UI component crea on.
Observer:
o Defines one-to-many dependency; observers are no fied of state changes.
o Example:
import java.u l.ArrayList;
import java.u l.List;
interface Observer { void update(String message); }
class Subject {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer o) { observers.add(o); }
public void no fyObservers(String message) {
for (Observer o : observers) o.update(message);
}
o Use: Event handling, pub-sub systems.
Other Pa erns:
o Builder: Constructs complex objects (e.g., StringBuilder).
o Decorator: Adds behavior dynamically (e.g., Java I/O streams).
o Strategy: Defines interchangeable algorithms (e.g., sor ng strategies).
What to Highlight:
When to apply each pa ern (e.g., Singleton for resource sharing).
Thread-safety concerns (e.g., double-checked locking in Singleton).
Modern alterna ves (e.g., dependency injec on over Factory).
11. SOLID Principles
Interviewer Expecta on: The candidate should define each SOLID principle, explain its importance,
and provide examples demonstra ng adherence or viola on.
Answer: SOLID principles guide object-oriented design to create maintainable, scalable code:
S - Single Responsibility Principle:
o A class should have one reason to change.
o Example: Separate UserService (handles user data) from EmailService (sends emails).
o Viola on: A User class that also logs errors.
O - Open/Closed Principle:
o Classes should be open for extension, closed for modifica on.
o Example:
interface PaymentProcessor { void process(); }
class CreditCardProcessor implements PaymentProcessor { public void process() { /* logic */ } }
class PayPalProcessor implements PaymentProcessor { public void process() { /* logic */ } }
o Viola on: Modifying a Payment class to add new payment types.
L - Liskov Subs tu on Principle:
o Subtypes must be subs tutable for their base types.
o Example: A Bird interface with fly() should not be implemented by Ostrich (which
can’t fly).
o Correct: Separate FlyingBird interface.
I - Interface Segrega on Principle:
o Clients shouldn’t be forced to depend on interfaces they don’t use.
o Example: Split a large Worker interface into Eatable and Workable.
o Viola on: A Printer class implemen ng an irrelevant Scan method.
D - Dependency Inversion Principle:
o Depend on abstrac ons, not concre ons.
o Example:
interface Database { void save(); }
class MySQLDatabase implements Database { public void save() { /* logic */ } }
class Service {
private Database db;
Service(Database db) { this.db = db; } // Inject abstrac on
o Viola on: Hardcoding MySQLDatabase in Service.
What to Highlight:
How SOLID improves code maintainability.
Real-world examples (e.g., Spring’s use of DI).
Trade-offs (e.g., ISP may increase interface count).
12. Java Version Usage and Java 8 Differences
Interviewer Expecta on: The candidate should discuss Java version adop on, key features beyond
Java 8, and how Java 8 differs from prior versions.
Answer:
Java Version Usage (as of April 2025):
o Java 8: S ll widely used due to stability, but lacks modern features.
o Java 11: Long-term support (LTS), common in enterprises for its balance of features
and stability.
o Java 17: Latest LTS, gaining trac on for records, sealed classes, and performance
improvements.
o Java 21: Newer LTS, includes virtual threads (Project Loom) and pa ern matching.
o Adop on depends on legacy systems, vendor support (e.g., Spring), and
performance needs.
Java 8 Differences (from Java 7):
o Introduced lambdas, Stream API, Op onal, default methods, and new Date/Time
API.
o Example: Java 7 required verbose anonymous classes; Java 8 uses lambdas:
// Java 7
Comparator<String> comp = new Comparator<>() {
public int compare(String s1, String s2) { return s1.compareTo(s2); }
};
// Java 8
Comparator<String> comp = (s1, s2) -> s1.compareTo(s2);
o Performance: PermGen replaced with Metaspace for be er memory management.
Post-Java 8 Features:
o Java 9: Module System (JPMS), try-with-resources enhancements.
o Java 10: Local variable type inference (var).
o Java 11: HTTP Client, String methods like isBlank().
o Java 17: Records, sealed classes, enhanced switch expressions.
o Java 21: Virtual threads, structured concurrency, pa ern matching for switch.
What to Highlight:
Why enterprises s ck with LTS versions.
Java 8’s paradigm shi to func onal programming.
Awareness of newer features and their adop on challenges.
13. Abstract Class and Func onal Interfaces (Example-Based Ques ons)
Interviewer Expecta on: The candidate should compare abstract classes and func onal interfaces,
provide examples, and explain when to use each.
Answer:
Abstract Class:
o Can have abstract and concrete methods, state (fields), and constructors.
o Used for shared code and inheritance hierarchies.
o Example:
abstract class Animal {
String name;
Animal(String name) { this.name = name; }
abstract void makeSound();
void eat() { System.out.println(name + " is ea ng"); }
class Dog extends Animal {
Dog(String name) { super(name); }
void makeSound() { System.out.println("Woof"); }
Func onal Interface:
o Has exactly one abstract method; used with lambdas.
o No state or constructors; purely for behavior.
o Example:
@Func onalInterface
interface SoundMaker {
void makeSound();
SoundMaker dogSound = () -> System.out.println("Woof");
Comparison:
o Abstract Class: Use for shared state/behavior (e.g., template methods).
o Func onal Interface: Use for single behaviors, especially with Streams/lambdas.
o Example Use Case:
Abstract class for a Vehicle hierarchy with fuelLevel.
Func onal interface for a DriveStrategy lambda.
What to Highlight:
Func onal interfaces enable func onal programming.
Abstract classes support complex inheritance.
Limita ons (e.g., single inheritance vs. mul ple interface implementa on).
14. Try-Catch-Finally (Detailed)
Interviewer Expecta on: The candidate should explain excep on handling mechanics, finally
behavior, and edge cases like suppressed excep ons.
Answer: Java’s try-catch-finally handles excep ons to ensure robust programs.
Structure:
try {
// Code that might throw an excep on
int result = 10 / 0;
} catch (Arithme cExcep on e) {
// Handle specific excep on
System.out.println("Error: " + e.getMessage());
} finally {
// Always executes (unless JVM exits)
System.out.println("Cleanup");
Key Points:
o Try: Contains code that might throw excep ons.
o Catch: Handles specific excep on types; can have mul ple catches.
Example: catch (IOExcep on | SQLExcep on e) (mul -catch, Java 7+).
o Finally: Executes regardless of excep on, ideal for cleanup (e.g., closing resources).
o Try-with-Resources (Java 7+): Auto-closes resources implemen ng AutoCloseable.
Example:
try (FileInputStream fis = new FileInputStream("file.txt")) {
fis.read();
} catch (IOExcep on e) {
e.printStackTrace();
Edge Cases:
o Suppressed Excep ons: In try-with-resources, if both try block and close throw
excep ons, the close excep on is suppressed.
Access via e.getSuppressed().
o Finally Return: A return in finally overrides try/catch returns (bad prac ce).
Example:
try {
return 1;
} finally {
return 2; // 2 is returned
o System.exit(): Prevents finally execu on.
What to Highlight:
Proper excep on hierarchy (catch specific excep ons first).
Benefits of try-with-resources for resource management.
Avoiding resource leaks and common pi alls.
15. Main Func on Miscellaneous
Interviewer Expecta on: The candidate should explain the main method’s role, signature varia ons,
and related nuances.
Answer: The main method is the entry point for Java applica ons.
Standard Signature:
public sta c void main(String[] args) {
System.out.println("Hello, World!");
o public: Accessible to JVM.
o sta c: No instance required.
o void: No return value.
o String[] args: Command-line arguments.
Varia ons:
o String... args: Varargs equivalent.
o Overloaded main methods are ignored by JVM.
Nuances:
o Can be in any class; JVM looks for it based on the executed class.
o Missing main causes NoSuchMethodError.
o args is never null, but may be empty.
o Example with args:
public sta c void main(String[] args) {
for (String arg : args) {
System.out.println(arg);
What to Highlight:
JVM’s reliance on exact signature.
Use in CLI applica ons vs. frameworks (e.g., Spring Boot’s embedded main).
Debugging ps for main-related errors.
16. Operator Precedence
Interviewer Expecta on: The candidate should explain Java’s operator precedence, provide
examples, and discuss how parentheses clarify intent.
Answer: Operator precedence determines the order of evalua on in expressions.
Precedence Table (high to low):
o Pos ix: a++, a--
o Unary: ++a, --a, +a, -a, !, ~
o Mul plica ve: *, /, %
o Addi ve: +, -
o Shi : <<, >>, >>>
o Rela onal: <, >, <=, >=, instanceof
o Equality: ==, !=
o Bitwise: &, ^, |
o Logical: &&, ||
o Ternary: ?:
o Assignment: =, +=, -=, etc.
Example:
int x = 2 + 3 * 4; // 14 (* before +)
int y = (2 + 3) * 4; // 20 (parentheses override)
boolean z = true && false || true; // true (&& before ||)
Best Prac ce:
o Use parentheses for clarity, even if precedence is correct.
o Example: if ((a > b) && (c < d)) is clearer than if (a > b && c < d).
What to Highlight:
Common mistakes (e.g., assuming && and || have equal precedence).
Short-circuit evalua on in logical operators.
Debugging complex expressions with parentheses.
17. Constructor Chaining
Interviewer Expecta on: The candidate should explain constructor chaining within a class and across
inheritance, with examples.
Answer: Constructor chaining refers to one constructor calling another to reuse ini aliza on logic.
Within a Class:
o Use this() to call another constructor in the same class.
o Must be the first statement.
o Example:
class Person {
String name;
int age;
Person(String name) {
this(name, 0); // Chain to two-arg constructor
Person(String name, int age) {
this.name = name;
this.age = age;
Across Inheritance:
o Use super() to call a parent class constructor.
o Implicitly called if not specified (calls no-arg constructor).
o Example:
class Animal {
String species;
Animal(String species) {
this.species = species;
class Dog extends Animal {
String name;
Dog(String species, String name) {
super(species); // Call parent constructor
this.name = name;
Rules:
o this() and super() cannot both be used in the same constructor.
o If a parent class lacks a no-arg constructor, subclasses must explicitly call super().
What to Highlight:
Reduces code duplica on.
Importance of matching super() to parent constructors.
Compile- me errors from missing super() calls.
Databases
1. Basic Concepts
Interviewer Expecta on: The candidate should explain core database concepts like tables, keys, and
ACID proper es, with prac cal insights.
Answer:
Tables and Rela onships:
o Tables store data in rows and columns.
o Rela onships: One-to-One, One-to-Many, Many-to-Many (via junc on tables).
Keys:
o Primary Key: Uniquely iden fies a record; no nulls.
o Foreign Key: Links tables, enforcing referen al integrity.
o Candidate Key: Poten al primary keys.
o Composite Key: Mul ple columns as a primary key.
ACID Proper es:
o Atomicity: Transac ons complete fully or not at all.
o Consistency: Transac ons maintain data integrity.
o Isola on: Transac ons are independent.
o Durability: Commi ed changes are permanent.
Indexes:
o Speed up queries but slow writes.
o Example: CREATE INDEX idx_name ON users(name);
What to Highlight:
Real-world examples (e.g., primary key in a users table).
Trade-offs of indexing.
How frameworks like Spring use ACID (e.g., @Transac onal).
2. Normaliza on
Interviewer Expecta on: The candidate should define normaliza on, explain normal forms, and
discuss when to denormalize.
Answer: Normaliza on organizes a database to reduce redundancy and ensure data integrity.
Normal Forms:
o 1NF: No repea ng groups; atomic values.
Example: Split phone1, phone2 into a phones table.
o 2NF: 1NF + no par al dependencies (non-key a ributes depend on en re key).
Example: Move order_date to orders table, not order_items.
o 3NF: 2NF + no transi ve dependencies (non-key a ributes don’t depend on other
non-key a ributes).
Example: Store city in a ci es table, not users.
o BCNF: Stricter 3NF; every determinant is a candidate key.
Denormaliza on:
o Inten onally violates normaliza on for performance (e.g., caching aggregated data).
o Example: Store total_orders in users for quick access.
Trade-offs:
o Normalized: Less redundancy, easier updates.
o Denormalized: Faster reads, complex updates.
What to Highlight:
Prac cal examples (e.g., e-commerce database design).
When denormaliza on is jus fied (e.g., repor ng systems).
Impact on query performance.
3. Query Problems (Aggrega on Func ons, Order/Group By, Clauses)
Interviewer Expecta on: The candidate should write SQL queries for aggrega ons, sor ng, grouping,
and advanced clauses, explaining their purpose.
Answer:
Aggrega on Func ons:
o COUNT, SUM, AVG, MIN, MAX.
o Example: SELECT department, COUNT(*) FROM employees GROUP BY department;
Order By:
o Sorts results (ASC or DESC).
o Example: SELECT name, salary FROM employees ORDER BY salary DESC;
Group By:
o Groups rows for aggrega on.
o Example: SELECT product_id, SUM(quan ty) FROM order_items GROUP BY
product_id;
Clauses:
o LIKE: Pa ern matching.
Example: SELECT * FROM users WHERE name LIKE 'A%';
o String Split Func ons:
MySQL: SUBSTRING_INDEX(name, ' ', 1) for first name.
PostgreSQL: SPLIT_PART(name, ' ', 1).
o Ranking:
ROW_NUMBER(), RANK(), DENSE_RANK().
Example:
SELECT name, salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC)
FROM employees;
What to Highlight:
Correct use of HAVING vs. WHERE (HAVING for aggregated data).
Performance considera ons (e.g., indexing for ORDER BY).
Database-specific syntax (e.g., MySQL vs. PostgreSQL).
4. Connec on Pool
Interviewer Expecta on: The candidate should explain connec on pooling, its benefits, and
configura on in Java applica ons.
Answer: A connec on pool manages a cache of database connec ons to improve performance.
Why Use It:
o Crea ng connec ons is expensive (network, authen ca on).
o Pooling reuses connec ons, reducing latency and resource use.
How It Works:
o Connec ons are created at startup and stored in a pool.
o Applica ons borrow, use, and return connec ons.
o Example Libraries: HikariCP, Apache DBCP, C3P0.
Configura on in Java:
o Using HikariCP with Spring Boot:
yaml
spring:
datasource:
hikari:
maximum-pool-size: 10
minimum-idle: 5
idle- meout: 300000
o Programma c Example:
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/db");
config.setUsername("user");
config.setPassword("pass");
config.setMaximumPoolSize(10);
HikariDataSource ds = new HikariDataSource(config);
Key Se ngs:
o maximumPoolSize: Max ac ve connec ons.
o minimumIdle: Min idle connec ons.
o connec onTimeout: Max wait me for a connec on.
Benefits:
o Reduces connec on overhead.
o Handles high concurrency.
o Monitors connec on health.
What to Highlight:
HikariCP as the modern standard.
Monitoring for connec on leaks.
Tuning for applica on load (e.g., pool size).
5. Database Op miza on Techniques (General, Spring Boot-Specific)
Interviewer Expecta on: The candidate should discuss general and Spring Boot-specific techniques
to op mize database performance.
Answer:
General Techniques:
o Indexing: Create indexes on frequently queried columns.
Example: CREATE INDEX idx_user_id ON orders(user_id);
o Query Op miza on:
Use EXPLAIN to analyze query plans.
Avoid SELECT *; specify columns.
o Caching: Use in-memory caches (e.g., Redis) for frequent queries.
o Par oning: Split large tables (e.g., by date or region).
o Connec on Pooling: Op mize connec on usage (see above).
o Batch Processing: Group updates/inserts to reduce round-trips.
Example: INSERT INTO users VALUES (...), (...);
Spring Boot-Specific:
o JPA Op miza on:
Use @Query for custom queries instead of JPQL for complex cases.
Enable lazy loading for associa ons (@ManyToOne(fetch = FetchType.LAZY)).
Example: select u from User u where u.id = :id
o Batch Inserts:
Configure spring.jpa.proper es.hibernate.jdbc.batch_size=50.
Example:
@Transac onal
public void saveAll(List<User> users) {
userRepository.saveAll(users);
o Caching:
Enable Spring Cache with @EnableCaching.
Example:
@Cacheable("users")
public User findById(Long id) {
return userRepository.findById(id).orElse(null);
o Connec on Pool: Use HikariCP (default in Spring Boot).
o N+1 Query Problem:
Use JOIN FETCH or @En tyGraph to fetch associa ons eagerly.
Example: @Query("SELECT u FROM User u JOIN FETCH u.orders WHERE u.id
= :id")
What to Highlight:
Balancing read/write performance.
Tools like EXPLAIN and Spring Actuator for monitoring.
Avoiding common JPA pi alls (e.g., N+1 queries).
Spring Boot
1. Basic Concepts (Annota ons, Injec on)
Interviewer Expecta on: The candidate should explain core Spring Boot concepts, key annota ons,
and dependency injec on mechanics.
Answer: Spring Boot simplifies Spring development with auto-configura on and embedded servers.
Key Annota ons:
o @SpringBootApplica on: Combines @EnableAutoConfigura on, @ComponentScan,
@Configura on.
o @RestController: Marks a class for REST APIs, combining @Controller and
@ResponseBody.
o @Service: Indicates a business logic component.
o @Repository: Marks a data access component, enabling excep on transla on.
o @Autowired: Injects dependencies automa cally.
Dependency Injec on (DI):
o Spring manages beans (objects) in an IoC container.
o Types: Constructor (preferred), Se er, Field injec on.
o Example:
@Service
public class UserService {
private final UserRepository repository;
@Autowired
public UserService(UserRepository repository) {
this.repository = repository;
Why Spring Boot:
o Auto-configures components (e.g., DataSource for JPA).
o Eliminates XML configura on.
o Embedded Tomcat/Je y for easy deployment.
What to Highlight:
Constructor injec on for testability.
How @ComponentScan finds beans.
Spring Boot’s opinionated defaults.
2. Stereotype Annota ons
Interviewer Expecta on: The candidate should list stereotype annota ons and explain their roles
and differences.
Answer: Stereotype annota ons mark classes for Spring’s component scanning.
Annota ons:
o @Component: Generic marker for any Spring-managed bean.
o @Controller/@RestController: For MVC controllers.
@RestController includes @ResponseBody for JSON/XML responses.
o @Service: For business logic classes.
o @Repository: For data access classes; adds persistence excep on transla on.
Example:
@RestController
public class UserController {
private final UserService service;
@Autowired
public UserController(UserService service) {
this.service = service;
@Service
public class UserService {
private final UserRepository repository;
@Autowired
public UserService(UserRepository repository) {
this.repository = repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {}
Differences:
o Seman cs: @Service for logic, @Repository for data, @Controller for UI/API.
o Behavior: @Repository handles DataAccessExcep on wrapping.
What to Highlight:
Layered architecture (controller → service → repository).
Custom stereotypes using @Component.
Avoiding overuse of @Autowired on fields.
3. Bean Life Cycle and Scopes
Interviewer Expecta on: The candidate should describe the Spring bean life cycle,
ini aliza on/destruc on methods, and bean scopes.
Answer:
Bean Life Cycle:
1. Instan a on: Spring creates the bean.
2. Dependency Injec on: Injects dependencies via @Autowired.
3. Ini aliza on:
Calls @PostConstruct or Ini alizingBean.a erProper esSet().
Example: @PostConstruct void init() { System.out.println("Bean ready"); }
4. Usage: Bean is available for use.
5. Destruc on:
Calls @PreDestroy or DisposableBean.destroy().
Example: @PreDestroy void cleanup() { System.out.println("Bean
destroyed"); }
Bean Scopes:
o Singleton (default): One instance per IoC container.
o Prototype: New instance per request.
o Request: One instance per HTTP request (web only).
o Session: One instance per HTTP session.
o Applica on: One instance per ServletContext.
o Example:
@Component
@Scope("prototype")
public class MyBean {}
Customizing Life Cycle:
o Use @Bean(initMethod = "init", destroyMethod = "destroy") in @Configura on
classes.
What to Highlight:
Singleton scope’s implica ons for stateful beans.
Prototype scope’s use in mul -tenant apps.
Life cycle hooks for resource management.
4. Configura on (Property Files, YAML, PostConstruct)
Interviewer Expecta on: The candidate should explain how to configure Spring Boot apps using
proper es/YAML and ini alize beans with @PostConstruct.
Answer:
Property Files:
o Stored in applica on.proper es or applica on.yml.
o Example (applica on.proper es):
proper es
spring.datasource.url=jdbc:mysql://localhost:3306/db
spring.datasource.username=user
spring.datasource.password=pass
myapp.feature.enabled=true
YAML:
o More readable for hierarchical data.
o Example (applica on.yml):
yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/db
username: user
password: pass
myapp:
feature:
enabled: true
Accessing Proper es:
o Use @Value:
java
@Value("${myapp.feature.enabled}")
private boolean featureEnabled;
o Use @Configura onProper es:
@Configura onProper es(prefix = "myapp")
public class AppConfig {
private Feature feature;
public sta c class Feature {
private boolean enabled;
// Ge ers/Se ers
@PostConstruct:
o Ini alizes beans a er dependency injec on.
o Example:
@Component
public class DataIni alizer {
@PostConstruct
void init() {
System.out.println("Ini alizing data...");
What to Highlight:
Profiles (applica on-dev.yml) for environment-specific configs.
Type-safe @Configura onProper es vs. @Value.
@PostConstruct for one- me setup (e.g., cache warming).
5. REST API Concepts
Interviewer Expecta on: The candidate should explain REST principles, HTTP methods, mappings,
and advanced features like interceptors and naming conven ons.
Answer:
REST Principles:
o Stateless, resource-based, uses HTTP methods (GET, POST, PUT, DELETE).
o Example: /users/123 iden fies a user resource.
Mappings:
o @GetMapping: Retrieve data.
Example: @GetMapping("/users/{id}") User getUser(@PathVariable Long id)
o @PostMapping: Create resources.
o @PutMapping: Update resources.
o @DeleteMapping: Remove resources.
o @PatchMapping: Par al updates.
PUT vs. POST:
o POST: Creates new resources; non-idempotent.
Example: POST /users with body { "name": "Alice" }.
o PUT: Updates or creates at a specific URI; idempotent.
Example: PUT /users/123 with body { "name": "Bob" }.
XML/JSON:
o Spring uses Jackson for JSON; XML via JAXB.
o Example: @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
Headers:
o Use @RequestHeader:
@GetMapping("/users")
public List<User> getUsers(@RequestHeader("Authoriza on") String token) {}
Variables:
o Path: @PathVariable.
o Query: @RequestParam.
Example: /users?name=Alice → @RequestParam String name.
Interceptors:
o Intercept requests/responses for logging, authen ca on, etc.
o Example:
public class LoggingInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(H pServletRequest request, H pServletResponse response, Object
handler) {
System.out.println("Request: " + request.getRequestURI());
return true;
@Configura on
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoggingInterceptor());
Naming Conven ons:
o Resources: Plural nouns (e.g., /users).
o URIs: Hyphenated (e.g., /user-profiles).
o Query params: CamelCase or snake_case (e.g., ?userId=123).
What to Highlight:
RESTful design (HATEOAS, statelessness).
Idempotency differences.
Customizing responses with @ResponseStatus.
6. Excep on Handling
Interviewer Expecta on: The candidate should explain centralized excep on handling in Spring Boot
using @ControllerAdvice and custom excep ons.
Answer: Spring Boot provides robust excep on handling for REST APIs.
@ControllerAdvice:
o Centralizes excep on handling across controllers.
o Example:
@ControllerAdvice
public class GlobalExcep onHandler {
@Excep onHandler(UserNotFoundExcep on.class)
@ResponseStatus(H pStatus.NOT_FOUND)
public ErrorResponse handleUserNotFound(UserNotFoundExcep on ex) {
return new ErrorResponse("User not found", ex.getMessage());
class ErrorResponse {
String error;
String message;
// Constructor, ge ers
Custom Excep ons:
o Extend Run meExcep on for unchecked excep ons.
o Example:
public class UserNotFoundExcep on extends Run meExcep on {
public UserNotFoundExcep on(String message) {
super(message);
@RestController
public class UserController {
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
if (id == 0) throw new UserNotFoundExcep on("User ID " + id + " not found");
return new User(id, "Alice");
Default Handling:
o Spring handles common excep ons (e.g., MethodArgumentNotValidExcep on).
o Customize via ResponseEn tyExcep onHandler.
What to Highlight:
Consistent error responses (e.g., JSON with error codes).
HTTP status code mapping.
Logging excep ons for debugging.
7. JUnit/Mockito Basics (@SpringBootTest)
Interviewer Expecta on: The candidate should explain unit and integra on tes ng in Spring Boot,
using JUnit and Mockito, with examples.
Answer:
JUnit:
o Framework for wri ng and running tests.
o Annota ons: @Test, @BeforeEach, @A erEach, @Disabled.
Mockito:
o Mocks dependencies for unit tests.
o Annota ons: @Mock, @InjectMocks, @Spy.
@SpringBootTest:
o Loads the full Spring context for integra on tests.
o Example:
@SpringBootTest
public class UserServiceTests {
@Autowired
private UserService userService;
@Test
void testFindUser() {
User user = userService.findById(1L);
assertNotNull(user);
assertEquals("Alice", user.getName());
Unit Test with Mockito:
o Example:
@ExtendWith(MockitoExtension.class)
public class UserServiceUnitTests {
@Mock
private UserRepository repository;
@InjectMocks
private UserService service;
@Test
void testFindUser() {
User user = new User(1L, "Alice");
when(repository.findById(1L)).thenReturn(Op onal.of(user));
User result = service.findById(1L);
assertEquals("Alice", result.getName());
verify(repository).findById(1L);
Best Prac ces:
o Use @MockBean for Spring context mocks in integra on tests.
o Test edge cases (e.g., null returns).
o Keep tests fast by mocking I/O dependencies.
What to Highlight:
Difference between unit and integra on tests.
Mockito’s role in isola ng dependencies.
Spring Boot’s test slices (e.g., @WebMvcTest for controllers).
8. Spring Security (JWT, Access Tokens, TLS, SSL, Message Layer Security)
Interviewer Expecta on: The candidate should explain Spring Security basics, JWT implementa on,
and securing APIs with TLS/SSL.
Answer:
Spring Security Basics:
o Provides authen ca on (who you are) and authoriza on (what you can do).
o Configured via SecurityFilterChain.
o Example:
@Configura on
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(H pSecurity h p) throws Excep on {
h p
.authorizeH pRequests(auth -> auth
.requestMatchers("/public/**").permitAll()
.anyRequest().authen cated()
.h pBasic();
return h p.build();
JWT (JSON Web Tokens):
o Stateless authen ca on using signed tokens.
o Steps:
1. User logs in; server generates JWT.
2. Client sends JWT in Authoriza on: Bearer <token>.
3. Server validates JWT.
o Example:
public class JwtU l {
private String secret = "mySecretKey";
public String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setIssuedAt(new Date())
.setExpira on(new Date(System.currentTimeMillis() + 86400000))
.signWith(Keys.hmacShaKeyFor(secret.getBytes()))
.compact();
Configure filter:
public class JwtFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(H pServletRequest request, H pServletResponse response,
FilterChain chain) {
String token = request.getHeader("Authoriza on").substring(7);
// Validate token
chain.doFilter(request, response);
Access Tokens:
o Similar to JWT; o en used in OAuth 2.0.
o Spring Security OAuth integrates with providers like Keycloak.
TLS/SSL:
o Encrypts HTTP traffic.
o Configure in applica on.yml:
yaml
server:
ssl:
key-store: classpath:keystore.p12
key-store-password: password
key-alias: alias
Message Layer Security:
o Encrypts data at the applica on level (e.g., encryp ng sensi ve fields).
o Example: Use javax.crypto for field-level encryp on.
What to Highlight:
JWT’s statelessness vs. session-based auth.
Securing endpoints with roles (@PreAuthorize).
Importance of HTTPS in produc on.
9. Repository
Interviewer Expecta on: The candidate should explain Spring Data JPA repositories, custom queries,
and best prac ces.
Answer: Spring Data JPA simplifies database access with repositories.
Basic Repository:
o Extend JpaRepository for CRUD opera ons.
o Example:
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
Custom Queries:
o Use @Query for JPQL or na ve SQL.
o Example:
java
@Query("SELECT u FROM User u WHERE u.email = :email")
User findByEmail(@Param("email") String email);
@Query(value = "SELECT * FROM users WHERE age > ?1", na veQuery = true)
List<User> findOlderThan(int age);
Best Prac ces:
o Use method naming conven ons (e.g., findByNameAndAge).
o Enable pagina on: Page<User> findAll(Pageable pageable);
o Avoid N+1 queries with @En tyGraph or JOIN FETCH.
o Example:
java
@En tyGraph(a ributePaths = {"orders"})
List<User> findAll();
What to Highlight:
Spring Data’s query deriva on.
Performance op miza on (e.g., lazy loading).
Transac on management with @Transac onal.
10. Maven/Gradle
Interviewer Expecta on: The candidate should compare Maven and Gradle, explain their
configura on, and discuss dependency management.
Answer:
Maven:
o XML-based (pom.xml).
o Conven on over configura on.
o Example:
xml
<project>
<groupId>com.example</groupId>
<ar factId>myapp</ar factId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<ar factId>spring-boot-starter-web</ar factId>
<version>3.1.0</version>
</dependency>
</dependencies>
</project>
Gradle:
o Groovy/Kotlin-based (build.gradle).
o Flexible, faster for large projects.
o Example:
groovy
plugins {
id 'org.springframework.boot' version '3.1.0'
dependencies {
implementa on 'org.springframework.boot:spring-boot-starter-web'
Comparison:
o Maven: Simpler for beginners, rigid structure, larger community.
o Gradle: Faster builds, more expressive, be er for Android.
Dependency Management:
o Use BOM (Bill of Materials) for version consistency:
Maven: <dependencyManagement> with spring-boot-dependencies.
Gradle: pla orm("org.springframework.boot:spring-boot-
dependencies:3.1.0").
o Resolve conflicts with mvn dependency:tree or gradle dependencies.
What to Highlight:
Maven’s lifecycle (compile, test, package).
Gradle’s incremental builds.
Managing transi ve dependencies.
11. Database Connec on
Interviewer Expecta on: The candidate should explain how Spring Boot connects to databases,
focusing on JPA and connec on pooling.
Answer: Spring Boot simplifies database connec ons with auto-configura on.
Configura on:
o Add dependencies (spring-boot-starter-data-jpa, database driver).
o Configure in applica on.yml:
yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/db
username: user
password: pass
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
JPA Setup:
o Define en es:
java
@En ty
public class User {
@Id
@GeneratedValue(strategy = Genera onType.IDENTITY)
private Long id;
private String name;
// Ge ers/Se ers
o Create repository:
java
public interface UserRepository extends JpaRepository<User, Long> {}
Connec on Pool:
o HikariCP is default.
o Tune via proper es (e.g., spring.datasource.hikari.maximum-pool-size).
Tes ng Connec on:
o Use @DataJpaTest for repository tests.
o Example:
java
@DataJpaTest
public class UserRepositoryTests {
@Autowired
private UserRepository repository;
@Test
void testSave() {
User user = new User();
user.setName("Alice");
repository.save(user);
assertEquals(1, repository.count());
}
What to Highlight:
Auto-configura on’s role.
Hibernate vs. raw JDBC.
Connec on pool tuning for produc on.
12. Ka a Knowledge (Op onal)
Interviewer Expecta on: The candidate should explain Ka a’s basics, its use in Spring Boot, and a
simple producer/consumer example.
Answer:
Apache Ka a:
o Distributed streaming pla orm for high-throughput messaging.
o Key concepts: Topics, Par ons, Brokers, Producers, Consumers.
o Use case: Event-driven microservices (e.g., order events).
Spring Ka a:
o Simplifies Ka a integra on.
o Dependency: spring-ka a.
Producer Example:
java
@Configura on
public class Ka aConfig {
@Bean
public ProducerFactory<String, String> producerFactory() {
Map<String, Object> config = new HashMap<>();
config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
config.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
config.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return new DefaultKa aProducerFactory<>(config);
@Bean
public Ka aTemplate<String, String> ka aTemplate() {
return new Ka aTemplate<>(producerFactory());
@Service
public class OrderService {
@Autowired
private Ka aTemplate<String, String> ka aTemplate;
public void sendOrderEvent(String orderId) {
ka aTemplate.send("orders", orderId, "Order " + orderId + " created");
Consumer Example:
java
@Service
public class OrderConsumer {
@Ka aListener(topics = "orders", groupId = "my-group")
public void consume(String message) {
System.out.println("Received: " + message);
Configura on:
yaml
spring:
ka a:
bootstrap-servers: localhost:9092
consumer:
group-id: my-group
auto-offset-reset: earliest
What to Highlight:
Ka a’s scalability and fault tolerance.
Exactly-once seman cs (since Ka a 0.11).
Spring Ka a’s ease of use.
Microservices
1. Design Pa erns
Interviewer Expecta on: The candidate should explain microservices-specific design pa erns like
Saga, CQRS, and Circuit Breaker, with examples.
Answer: Microservices design pa erns address distributed system challenges.
Saga Pa ern:
o Manages distributed transac ons with local transac ons and compensa ng ac ons.
o Choreography: Services emit events.
Example: Order Service emits OrderCreated, Payment Service listens and
processes.
o Orchestra on: Central coordinator manages flow.
Example:
java
@Service
public class OrderSagaOrchestrator {
@Autowired
private OrderService orderService;
@Autowired
private PaymentService paymentService;
public void executeSaga(String orderId) {
try {
orderService.createOrder(orderId);
paymentService.processPayment(orderId);
} catch (Excep on e) {
orderService.cancelOrder(orderId);
throw e;
}
o Use: E-commerce workflows.
CQRS (Command Query Responsibility Segrega on):
o Separates read and write opera ons for scalability.
o Example: Write to a users table, read from a denormalized user_views cache.
o Use: High-read systems like analy cs.
Circuit Breaker:
o Prevents cascading failures by stopping calls to failing services.
o Library: Resilience4j, Hystrix.
o Example:
java
@CircuitBreaker(name = "paymentService")
public String callPaymentService() {
// Call external service
return restTemplate.getForObject("h p://payment-service/pay", String.class);
o Use: Fault-tolerant APIs.
Other Pa erns:
o API Gateway: Centralizes rou ng, auth (e.g., Spring Cloud Gateway).
o Event Sourcing: Stores state as a sequence of events.
o Bulkhead: Isolates resources to limit failure impact.
What to Highlight:
Saga’s role in eventual consistency.
Circuit Breaker’s fallback mechanisms.
Choosing pa erns based on use case.
2. Inter-Service Communica on
Interviewer Expecta on: The candidate should explain synchronous (REST) and asynchronous
(messaging) communica on, with examples.
Answer: Microservices communicate to collaborate on tasks.
Synchronous (REST/gRPC):
o Direct calls using HTTP or gRPC.
o Example (REST):
java
@RestController
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@PostMapping("/orders")
public String createOrder(@RequestBody Order order) {
String paymentResponse = restTemplate.postForObject(
"h p://payment-service/pay", order, String.class);
return "Order created: " + paymentResponse;
o Pros: Simple, immediate response.
o Cons: Tight coupling, latency.
Asynchronous (Messaging):
o Uses message brokers (Ka a, RabbitMQ).
o Example (Ka a):
java
@Service
public class OrderService {
@Autowired
private Ka aTemplate<String, String> ka aTemplate;
public void createOrder(String orderId) {
ka aTemplate.send("order-events", orderId, "Order created");
}
}
@Service
public class PaymentService {
@Ka aListener(topics = "order-events")
public void handleOrderEvent(String orderId) {
System.out.println("Processing payment for " + orderId);
o Pros: Decoupled, scalable.
o Cons: Eventual consistency, complex debugging.
Best Prac ces:
o Use REST for simple queries, messaging for workflows.
o Implement retries/ meouts (e.g., Spring’s @Retryable).
o Ensure idempotency for duplicate messages.
What to Highlight:
Trade-offs of sync vs. async.
Tools like Feign for REST clients.
Monitoring communica on (e.g., Zipkin).
3. Monolithic vs. Microservices (Advantages and Disadvantages)
Interviewer Expecta on: The candidate should compare monolithic and microservices architectures,
discussing pros and cons with examples.
Answer:
Monolithic Architecture:
o Single codebase, ghtly coupled components.
o Example: A Spring MVC app with all modules (user, order, payment) in one JAR.
o Advantages:
Simpler development and debugging.
Easier deployment (one ar fact).
Be er performance for small apps (no network overhead).
o Disadvantages:
Scalability limits (en re app scales).
Hard to adopt new technologies.
Single failure impacts all modules.
Microservices Architecture:
o Independent services, loosely coupled.
o Example: Separate user-service, order-service, payment-service communica ng via
REST/Ka a.
o Advantages:
Independent scaling (e.g., scale only order-service).
Technology diversity (e.g., Java for one, Python for another).
Fault isola on (one service failure doesn’t crash all).
o Disadvantages:
Distributed system complexity (e.g., network latency, eventual consistency).
Deployment overhead (mul ple services).
Monitoring/debugging challenges.
When to Use:
o Monolith: Small teams, simple apps.
o Microservices: Large-scale apps, frequent updates.
What to Highlight:
Transi oning from monolith to microservices (strangler pa ern).
Real-world examples (e.g., Ne lix’s microservices shi ).
Cost-benefit analysis for team size.
4. Resiliency and Efficiency
Interviewer Expecta on: The candidate should explain techniques to make microservices resilient
and efficient, with prac cal examples.
Answer:
Resiliency:
o Circuit Breaker: Stops calls to failing services (e.g., Resilience4j).
Example: @CircuitBreaker(name = "service")
o Retry: Retries transient failures.
Example:
java
@Retryable(maxA empts = 3, backoff = @Backoff(delay = 1000))
public String callService() {
return restTemplate.getForObject("h p://service", String.class);
o Timeout: Limits wait me.
Example: restTemplate.getForObject(uri, String.class,
Dura on.ofSeconds(2)).
o Bulkhead: Isolates failures.
Example: Resilience4j’s @Bulkhead(name = "service").
o Fallbacks: Provides default responses.
Example:
java
@CircuitBreaker(name = "service", fallbackMethod = "fallback")
public String callService() { /* logic */ }
public String fallback(Throwable t) { return "Default response"; }
Efficiency:
o Caching: Use Redis/Ehcache for frequent data.
Example: @Cacheable("users")
o Asynchronous Processing: Offload tasks to Ka a/RabbitMQ.
o Load Balancing: Distribute traffic (e.g., Ribbon, Kubernetes).
o Batch Processing: Group database opera ons.
Example: repository.saveAll(users);
o Op mize Queries: Avoid N+1 issues with JPA.
What to Highlight:
Resilience4j’s integra on with Spring Boot.
Monitoring resiliency (e.g., Micrometer metrics).
Balancing efficiency with complexity.
5. Scenario-Based Ques ons (Service Availability, Deployment Strategies)
Interviewer Expecta on: The candidate should address hypothe cal scenarios, focusing on
availability and deployment solu ons.
Answer:
Service Availability:
o Scenario: A payment service crashes during peak traffic.
o Solu on:
Circuit Breaker: Prevent cascading failures.
Fallback: Return cached payment status.
Scaling: Auto-scale with Kubernetes based on CPU/memory.
Health Checks: Use Spring Actuator (/actuator/health) to detect issues.
Redundancy: Deploy across mul ple availability zones.
o Example:
java
@RestController
public class PaymentController {
@GetMapping("/status")
@CircuitBreaker(name = "payment", fallbackMethod = "getCachedStatus")
public String getStatus() {
// Call payment service
return restTemplate.getForObject("h p://payment-service/status", String.class);
public String getCachedStatus(Throwable t) {
return "Payment processing (cached)";
Deployment Strategies:
o Scenario: Deploy a new version with zero down me.
o Solu on:
Blue-Green Deployment:
Run two environments (blue: old, green: new).
Switch traffic to green a er valida on.
Example: Kubernetes updates Deployment labels.
Canary Deployment:
Roll out to a small subset of users.
Monitor metrics (e.g., error rate) before full rollout.
Example: Kubernetes Ingress with weighted rou ng.
Rolling Updates:
Gradually replace old pods with new ones.
Example:
yaml
apiVersion: apps/v1
kind: Deployment
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
o Handle Pending Requests:
Graceful shutdown with Spring Boot’s server.shutdown=graceful.
Drain connec ons before pod termina on in Kubernetes.
What to Highlight:
Monitoring during deployment (e.g., Prometheus).
Rollback strategies for failed deployments.
Real-world tools (e.g., Is o for canary rou ng).
6. Deployment Strategies (Lower Down me, Handle Pending Requests)
Interviewer Expecta on: The candidate should elaborate on deployment strategies to minimize
down me and ensure smooth transi ons.
Answer:
Strategies:
o Blue-Green Deployment:
Pros: Zero down me, easy rollback.
Cons: Requires double resources.
Example: Switch Nginx routes from blue to green.
o Canary Deployment:
Pros: Tests new version with real traffic.
Cons: Needs robust monitoring.
Example: Route 10% traffic to new version via Is o.
o Rolling Updates:
Pros: Resource-efficient, gradual rollout.
Cons: Par al down me if errors occur.
Example: Kubernetes maxUnavailable: 0 ensures no down me.
Handling Pending Requests:
o Graceful Shutdown:
Spring Boot:
yaml
server:
shutdown: graceful
tomcat:
connec on- meout: 30s
Kubernetes: Set termina onGracePeriodSeconds.
o Readiness Probes:
Ensure new pods are ready before receiving traffic.
Example:
yaml
livenessProbe:
h pGet:
path: /actuator/health
port: 8080
readinessProbe:
h pGet:
path: /actuator/health
port: 8080
o Queueing: Use Ka a/RabbitMQ to buffer requests during transi ons.
Tools:
o Kubernetes, Helm for orchestra on.
o Is o for traffic management.
o ArgoCD for GitOps deployments.
What to Highlight:
Zero-down me goal.
Monitoring rollout progress.
Automa on with CI/CD pipelines.
7. Step-by-Step Service Calling Process
Interviewer Expecta on: The candidate should describe how services interact in a microservices
architecture, from request to response.
Answer:
Process:
1. Client Request: Hits API Gateway (e.g., Spring Cloud Gateway).
Example: GET /orders/123.
2. Rou ng: Gateway authen cates (JWT) and routes to order-service.
Example: h p://order-service/orders/123.
3. Service Discovery: order-service resolves payment-service via Eureka/Consul.
Example: DiscoveryClient.getInstances("payment-service").
4. Load Balancing: Client-side (Ribbon) or server-side (Kubernetes) balancing.
5. Inter-Service Call: order-service calls payment-service via REST.
Example:
java
restTemplate.getForObject("h p://payment-service/status", String.class);
6. Processing: payment-service queries its database and responds.
7. Response: Propagates back through gateway to client.
Async Alterna ve:
o order-service publishes to Ka a topic order-events.
o payment-service consumes and processes.
Error Handling:
o Circuit breakers for failed calls.
o Retries for transient errors.
o Fallbacks for degraded service.
What to Highlight:
Role of service discovery and load balancing.
Sync vs. async trade-offs.
Observability (logging, tracing with Zipkin).
8. Service Discovery
Interviewer Expecta on: The candidate should explain service discovery, its importance, and tools
like Eureka or Consul.
Answer:
Service Discovery:
o Dynamically locates services in a microservices architecture.
o Avoids hardcoding IPs, as services scale or move.
How It Works:
o Services register with a discovery server (e.g., Eureka).
o Clients query the server to find service instances.
Example with Eureka:
o Dependency: spring-cloud-starter-ne lix-eureka-client.
o Server Config:
yaml
spring:
applica on:
name: eureka-server
server:
port: 8761
eureka:
client:
register-with-eureka: false
fetch-registry: false
o Client Config:
yaml
spring:
applica on:
name: order-service
eureka:
client:
service-url:
defaultZone: h p://localhost:8761/eureka
o Code:
java
@RestController
public class OrderController {
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/call-payment")
public String callPayment() {
List<ServiceInstance> instances = discoveryClient.getInstances("payment-service");
URI uri = instances.get(0).getUri();
return restTemplate.getForObject(uri + "/status", String.class);
Tools:
o Eureka: Ne lix OSS, integrates with Spring Cloud.
o Consul: HashiCorp, supports health checks.
o Kubernetes Service Discovery: Built-in via DNS.
Benefits:
o Dynamic scaling.
o Fault tolerance (removes failed instances).
o Load balancing integra on.
What to Highlight:
Difference from DNS (dynamic registra on).
Health checks in discovery.
Spring Cloud’s abstrac ons.
9. Load Balancing
Interviewer Expecta on: The candidate should explain load balancing types (server-side and client-
side), algorithms, tools, and their role in microservices, with examples.
Answer:
Load Balancing:
o Distributes incoming traffic across mul ple service instances to ensure scalability,
reliability, and op mal resource use.
Types:
o Server-Side Load Balancing:
A dedicated load balancer (e.g., Nginx, AWS ELB, HAProxy) routes requests
to service instances.
Example: Nginx configura on:
nginx
upstream order_service {
server order-service1:8080;
server order-service2:8080;
server {
listen 80;
loca on /orders {
proxy_pass h p://order_service;
Pros: Centralized, no client changes needed.
Cons: Single point of failure unless highly available.
o Client-Side Load Balancing:
The client (or service) selects an instance using a library like Ne lix Ribbon
or Spring Cloud LoadBalancer.
Example with Spring Cloud LoadBalancer:
java
@RestController
public class OrderController {
@Autowired
private LoadBalancerClient loadBalancer;
@Autowired
private RestTemplate restTemplate;
@GetMapping("/call-payment")
public String callPayment() {
ServiceInstance instance = loadBalancer.choose("payment-service");
String url = instance.getUri() + "/status";
return restTemplate.getForObject(url, String.class);
Pros: Decentralized, integrates with service discovery.
Cons: Adds client complexity.
Algorithms:
o Round-Robin: Cycles through instances.
o Least Connec ons: Routes to the instance with fewest ac ve connec ons.
o IP Hash: Routes based on client IP for session persistence.
o Weighted: Priori zes instances with higher capacity.
Tools:
o Nginx/AWS ELB: Server-side, widely used.
o Ribbon: Client-side, part of Spring Cloud.
o Kubernetes LoadBalancer: Uses services with type: LoadBalancer.
o Is o/Envoy: Advanced traffic management for microservices.
Role in Microservices:
o Ensures even load distribu on during scaling.
o Improves fault tolerance by avoiding overloaded instances.
o Works with service discovery (e.g., Eureka) to find healthy instances.
What to Highlight:
Integra on with service discovery for dynamic instance lists.
Monitoring load balancer metrics (e.g., Prometheus).
Choosing algorithms based on workload (e.g., s cky sessions for stateful apps).
10. API Gateway
Interviewer Expecta on: The candidate should explain the role of an API Gateway, its features, and
how it’s implemented in microservices, with examples.
Answer:
API Gateway:
o A single entry point for client requests, rou ng them to appropriate microservices.
o Acts as a reverse proxy, handling cross-cu ng concerns like authen ca on, rate
limi ng, and logging.
Key Features:
o Rou ng: Maps client requests to services (e.g., /orders → order-service).
o Authen ca on/Authoriza on: Validates JWTs or OAuth tokens.
o Rate Limi ng: Prevents abuse (e.g., max 100 requests/min per user).
o Logging/Metrics: Tracks requests for observability.
o Load Balancing: Distributes traffic across service instances.
o Transforma on: Converts request/response formats (e.g., JSON to XML).
Implementa on with Spring Cloud Gateway:
o Dependency: spring-cloud-starter-gateway.
o Configura on:
yaml
spring:
cloud:
gateway:
routes:
- id: order_route
uri: lb://order-service
predicates:
- Path=/orders/**
- id: payment_route
uri: lb://payment-service
predicates:
- Path=/payments/**
o Example: Route /orders/123 to order-service:8080/orders/123.
o Custom Filter for Authen ca on:
java
@Component
public class AuthFilter implements GatewayFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getHeaders().getFirst("Authoriza on");
if (token == null || !token.startsWith("Bearer ")) {
exchange.getResponse().setStatusCode(H pStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
return chain.filter(exchange);
Other Tools:
o AWS API Gateway: Managed service with scaling.
o Kong: Open-source, plugin-based.
o Zuul: Ne lix OSS, older alterna ve to Spring Cloud Gateway.
Benefits:
o Simplifies client interac on (single endpoint).
o Centralizes security and monitoring.
o Reduces microservices complexity by offloading concerns.
Challenges:
o Poten al bo leneck if not scaled.
o Adds latency (minimal with proper tuning).
What to Highlight:
Difference from direct service calls.
Integra on with service discovery (e.g., Eureka’s lb:// prefix).
Observability (e.g., tracing with Zipkin).
11. HTTP Status Codes
Interviewer Expecta on: The candidate should list common HTTP status codes, explain their
meanings, and describe their use in microservices APIs.
Answer: HTTP status codes indicate the result of a client request in a REST API.
Categories:
o 1xx (Informa onal): Request received, processing (rarely used).
o 2xx (Success):
200 OK: Request succeeded (e.g., GET response).
201 Created: Resource created (e.g., POST response).
204 No Content: Successful but no response body (e.g., DELETE).
o 3xx (Redirec on):
301 Moved Permanently: Resource relocated.
302 Found: Temporary redirect.
o 4xx (Client Error):
400 Bad Request: Invalid input (e.g., malformed JSON).
401 Unauthorized: Missing/invalid creden als.
403 Forbidden: Authen cated but no permission.
404 Not Found: Resource doesn’t exist.
429 Too Many Requests: Rate limit exceeded.
o 5xx (Server Error):
500 Internal Server Error: Generic server failure.
502 Bad Gateway: Invalid response from upstream.
503 Service Unavailable: Service down or overloaded.
Use in Microservices:
o Example Controller:
java
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public ResponseEn ty<User> getUser(@PathVariable Long id) {
if (id == 0) {
return ResponseEn ty.status(H pStatus.NOT_FOUND).build();
return ResponseEn ty.ok(new User(id, "Alice"));
@PostMapping
public ResponseEn ty<User> createUser(@RequestBody User user) {
// Save user
return ResponseEn ty.status(H pStatus.CREATED).body(user);
o Error Handling:
Use @ControllerAdvice to map excep ons to status codes:
java
@ControllerAdvice
public class GlobalExcep onHandler {
@Excep onHandler(IllegalArgumentExcep on.class)
@ResponseStatus(H pStatus.BAD_REQUEST)
public ErrorResponse handleBadRequest(IllegalArgumentExcep on ex) {
return new ErrorResponse("Invalid input", ex.getMessage());
}
Best Prac ces:
o Return precise codes (e.g., 404 over 400 for missing resources).
o Include error details in response body (e.g., { "error": "User not found", "details":
"ID 123" }).
o Use 429 for rate limi ng with retry headers.
What to Highlight:
REST API conven ons for status codes.
Impact on client behavior (e.g., retries for 503).
Consistent error responses across services.
Deployment CI/CD
1. Docker and Kubernetes Basics
Interviewer Expecta on: The candidate should explain Docker and Kubernetes, their components
(images, containers, pods), and communica on mechanisms, with examples.
Answer:
Docker:
o A pla orm for containerizing applica ons, ensuring consistency across
environments.
o Docker Image: A read-only template with app code, dependencies, and run me.
Example Dockerfile for a Spring Boot app:
dockerfile
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/myapp.jar .
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "myapp.jar"]
o Container: A running instance of an image.
Build and run: docker build -t myapp . && docker run -p 8080:8080 myapp
Kubernetes:
o Orchestrates containers for scalability, availability, and management.
o Components:
Pod: Smallest deployable unit, typically one container.
Example: A pod running order-service.
Container vs. Pod:
Container: Runs a single process (e.g., Spring Boot app).
Pod: May contain mul ple containers sharing network/storage
(e.g., app + sidecar for logging).
Deployment: Manages pod replicas and updates.
Service: Exposes pods via a stable endpoint.
Ingress: Routes external traffic to services.
o Example Deployment:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: order-service
spec:
replicas: 3
selector:
matchLabels:
app: order-service
template:
metadata:
labels:
app: order-service
spec:
containers:
- name: order-service
image: myapp:latest
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: order-service
spec:
selector:
app: order-service
ports:
- port: 80
targetPort: 8080
type: ClusterIP
Communica on Between Pods/Containers:
o Within a Pod: Containers share localhost (e.g., app at localhost:8080, sidecar at
localhost:8081).
o Between Pods:
Use Kubernetes Service DNS (e.g., order-service.default.svc.cluster.local).
Example: order-service calls payment-service via h p://payment-
service/status.
o External Communica on: Ingress or LoadBalancer exposes services.
Example Ingress:
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
spec:
rules:
- host: myapp.com
h p:
paths:
- path: /orders
pathType: Prefix
backend:
service:
name: order-service
port:
number: 80
What to Highlight:
Docker’s role in consistent builds.
Kubernetes’ self-healing (restarts failed pods).
Service discovery via Kubernetes DNS.
2. Pipeline Stages
Interviewer Expecta on: The candidate should describe the stages of a CI/CD pipeline, their
purpose, and tools used.
Answer: A CI/CD pipeline automates building, tes ng, and deploying code.
Stages:
o 1. Code Commit:
Developers push code to a repository (e.g., GitHub, GitLab).
Trigger: Webhook on push or pull request.
o 2. Build:
Compile code, resolve dependencies, and create ar facts (e.g., JAR, Docker
image).
Tools: Maven, Gradle, Docker.
Example: mvn clean package → myapp.jar.
o 3. Test:
Run unit, integra on, and end-to-end tests.
Tools: JUnit, TestNG, Selenium.
Example: mvn test or GitHub Ac ons step:
yaml
- name: Run Tests
run: mvn test
o 4. Code Analysis:
Check code quality (e.g., SonarQube for sta c analysis).
Example: Detect code smells, coverage < 80%.
o 5. Build Docker Image:
Package app into a container.
Example: docker build -t myapp:${{ github.sha }} .
o 6. Push to Registry:
Store image in a registry (e.g., Docker Hub, AWS ECR).
Example: docker push myapp:${{ github.sha }}.
o 7. Deploy to Staging:
Deploy to a test environment (e.g., Kubernetes cluster).
Example: kubectl apply -f deployment.yaml.
o 8. Acceptance Tests:
Run tests in staging (e.g., API tests with Postman).
o 9. Deploy to Produc on:
Roll out to produc on using strategies like blue-green.
Example: Update Kubernetes deployment with new image.
o 10. Monitor:
Observe app health (e.g., Prometheus, Grafana).
Tools:
o CI/CD: Jenkins, GitHub Ac ons, GitLab CI, CircleCI.
o Example GitHub Ac ons Pipeline:
yaml
name: CI/CD Pipeline
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: ac ons/checkout@v3
- name: Set up JDK 17
uses: ac ons/setup-java@v3
with:
java-version: '17'
- name: Build with Maven
run: mvn clean package
- name: Run Tests
run: mvn test
- name: Build Docker Image
run: docker build -t myapp:${{ github.sha }} .
- name: Push to Docker Hub
run: |
docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASS }}
docker push myapp:${{ github.sha }}
What to Highlight:
Automa on reduces human error.
Parallelizing stages for speed.
Rollback mechanisms in pipelines.
3. Code Quality and Vulnerability Checks
Interviewer Expecta on: The candidate should explain tools like Prisma Scan and Checkmarx, their
role in CI/CD, and how they ensure secure code.
Answer:
Code Quality:
o Ensures maintainable, readable code.
o Tools:
SonarQube: Analyzes code for bugs, code smells, and test coverage.
Example: Flags unused variables, low coverage.
PMD/Checkstyle: Enforces coding standards.
Example: mvn checkstyle:check in CI.
o Integra on: Add to CI pipeline:
yaml
- name: SonarQube Scan
run: mvn sonar:sonar -Dsonar.host.url=${{ secrets.SONAR_URL }}
Vulnerability Checks:
o Iden fies security issues in code and dependencies.
o Prisma Scan:
Part of Palo Alto’s Prisma Cloud; scans IaC, containers, and code.
Example: Detects exposed secrets in Dockerfiles.
Integra on: prisma-cloud-scan in CI to fail builds with high-severity issues.
o Checkmarx:
Sta c Applica on Security Tes ng (SAST) tool.
Example: Finds SQL injec on risks in String query = "SELECT * FROM users
WHERE id = " + userId;.
Integra on: Run cx scan in Jenkins; block PRs with cri cal vulnerabili es.
o Dependency Scanning:
Tools: OWASP Dependency-Check, Snyk.
Example: mvn dependency-check:check flags outdated libraries with CVEs.
Best Prac ces:
o Fail builds for cri cal issues only to avoid blocking progress.
o Regularly update dependencies (e.g., mvn versions:use-latest-versions).
o Combine sta c (Checkmarx) and dynamic (ZAP) scans.
What to Highlight:
Shi -le security (catch issues early).
Balancing security with developer velocity.
Repor ng vulnerabili es to stakeholders.
4. End-to-End Deployment Strategy
Interviewer Expecta on: The candidate should describe a complete deployment process, from
code to produc on, emphasizing automa on and reliability.
Answer:
End-to-End Deployment Strategy:
1. Code Commit:
Developer pushes to GitHub, triggering CI/CD.
2. Build and Test:
GitHub Ac ons runs mvn package, unit tests, and SonarQube.
3. Security Scans:
Checkmarx and Dependency-Check ensure no vulnerabili es.
4. Docker Build:
Create image: docker build -t myapp:${TAG} ..
Push to registry: docker push myapp:${TAG}.
5. Deploy to Staging:
Apply Kubernetes manifests: kubectl apply -f staging.yaml.
Run integra on tests with RestAssured.
6. Approval Gate (op onal):
Manual approval for produc on (e.g., GitLab CI).
7. Deploy to Produc on:
Use rolling update:
yaml
apiVersion: apps/v1
kind: Deployment
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
Monitor with Prometheus/Grafana.
8. Post-Deployment:
Run smoke tests.
Roll back if metrics (e.g., error rate) spike.
Tools:
o CI/CD: GitHub Ac ons, Jenkins.
o Orchestra on: Kubernetes, Helm.
o Monitoring: Prometheus, ELK Stack.
Example Workflow:
yaml
name: Deploy
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: ac ons/checkout@v3
- name: Build and Push
run: |
docker build -t myapp:${{ github.sha }} .
docker push myapp:${{ github.sha }}
- name: Deploy to Kubernetes
run: |
kubectl set image deployment/order-service order-service=myapp:${{ github.sha }}
What to Highlight:
Zero-down me deployments.
Automated tes ng at each stage.
Rollback strategies (e.g., kubectl rollout undo).
5. Server, Datacenters, Instances
Interviewer Expecta on: The candidate should explain how servers and instances are managed,
traffic handling, and update strategies in a cloud environment.
Answer:
Servers and Instances:
o Servers: Physical or virtual machines running apps (e.g., EC2 instances).
o Instances: Individual app deployments (e.g., Kubernetes pods or EC2 VMs).
o Datacenters: Physical loca ons hos ng servers (e.g., AWS us-east-1).
Use mul ple regions/zones for high availability.
Handling Traffic:
o Load Balancers: Distribute traffic (e.g., AWS ALB, Kubernetes Ingress).
Example: Route /orders to order-service pods.
o Auto-Scaling:
Scale instances based on CPU/memory (Kubernetes HPA).
Example:
yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: order-service
spec:
scaleTargetRef:
kind: Deployment
name: order-service
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: U liza on
averageU liza on: 70
o CDN: Use CloudFront/Akamai for sta c content to reduce server load.
Rolling Out Updates:
o Strategies:
Rolling Updates: Replace instances gradually.
Kubernetes: maxUnavailable: 0 ensures no down me.
Blue-Green: Switch traffic to new instances a er valida on.
Example: Update Ingress to point to new service.
Canary: Route a percentage of traffic to new instances.
Example: Is o routes 10% to v2.
o Graceful Shutdown:
Handle in-flight requests:
yaml
spec:
template:
spec:
termina onGracePeriodSeconds: 30
o Zero-Down me Example:
Deploy new pods, wait for readiness, then drain old pods.
Use kubectl rollout status deployment/order-service to monitor.
Best Prac ces:
o Use mul -AZ deployments for redundancy.
o Monitor instance health (e.g., /actuator/health).
o Automate scaling with cloud tools (e.g., AWS Auto Scaling).
What to Highlight:
High availability with mul -region setups.
Cost op miza on (e.g., spot instances).
Observability during updates (e.g., Grafana dashboards).
6. OpenShi (If Applicable)
Interviewer Expecta on: The candidate should explain OpenShi basics, focusing on secret maps,
config maps, and differences from Kubernetes.
Answer:
OpenShi :
o Red Hat’s Kubernetes-based pla orm with added developer and opera onal tools.
o Extends Kubernetes with features like built-in CI/CD (Tekton), image registry, and
stricter security.
Secret Map:
o Stores sensi ve data (e.g., passwords, API keys) encrypted.
o Example:
yaml
apiVersion: v1
kind: Secret
metadata:
name: db-creden als
type: Opaque
data:
username: dXNlcg== # base64-encoded "user"
password: cGFzcw== # base64-encoded "pass"
o Usage in Pod:
yaml
spec:
containers:
- name: app
env:
- name: DB_USER
valueFrom:
secretKeyRef:
name: db-creden als
key: username
Config Map:
o Stores non-sensi ve configura on (e.g., URLs, feature flags).
o Example:
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
db.url: jdbc:mysql://db:3306/myapp
log.level: DEBUG
o Usage:
yaml
spec:
containers:
- name: app
env:
- name: DB_URL
valueFrom:
configMapKeyRef:
name: app-config
key: db.url
Differences from Kubernetes:
o Security: OpenShi enforces SCC (Security Context Constraints).
o Builds: Built-in Source-to-Image (S2I) for crea ng containers.
o Routes: Replaces Ingress for external access.
Example:
yaml
apiVersion: route.openshi .io/v1
kind: Route
metadata:
name: order-service
spec:
to:
kind: Service
name: order-service
port:
targetPort: 8080
o Developer Tools: Web console, CLI (oc), and Tekton pipelines.
Use Case:
o Deploy a Spring Boot app:
Create ConfigMap for applica on.yml.
Use Secret for database creden als.
Expose via Route for external access.
What to Highlight:
OpenShi ’s enterprise focus (compliance, security).
ConfigMap vs. Secret for sensi ve data.
Simplified deployments with S2I.
Revisi ng Microservices Design Pa erns (Including Saga)
Since the document lists Design Pa erns under Microservices, and we’ve already covered the Saga
pa ern extensively (orchestra on and choreography examples in Java microservices), I’ll briefly
summarize it here to ensure completeness and cover other relevant pa erns not yet discussed.
1. Design Pa erns (Microservices)
Interviewer Expecta on: The candidate should explain microservices-specific design pa erns,
focusing on their purpose, implementa on, and trade-offs, with emphasis on Saga and others like
CQRS, Event Sourcing, and Circuit Breaker.
Answer:
Saga Pa ern (Recap):
o Manages distributed transac ons across microservices with local transac ons and
compensa ng ac ons.
o Choreography:
Services communicate via events (e.g., Ka a).
Example: OrderService emits OrderCreated, PaymentService listens and
emits PaymentProcessed or PaymentFailed.
Pros: Decoupled, scalable.
Cons: Hard to track saga state.
Previous Example (Choreography):
@Service
public class OrderService {
@Autowired
private Ka aTemplate<String, String> ka aTemplate;
public void createOrder(String orderId) {
System.out.println("OrderService: Crea ng order " + orderId);
ka aTemplate.send("order-events", orderId, "Order created");
@Service
public class PaymentService {
@Ka aListener(topics = "order-events")
public void handleOrderEvent(String orderId) {
System.out.println("PaymentService: Processing payment for " + orderId);
if ("FAIL".equals(orderId)) {
ka aTemplate.send("payment-events", orderId, "Payment failed");
return;
ka aTemplate.send("payment-events", orderId, "Payment processed");
o Orchestra on:
A central orchestrator controls the saga.
Example: OrderSagaOrchestrator calls OrderService, PaymentService, and
rolls back on failure.
Pros: Easier to monitor.
Cons: Single point of coordina on.
o Use: E-commerce, booking systems.
CQRS (Command Query Responsibility Segrega on):
o Separates read (query) and write (command) opera ons.
o Example:
Write: OrderService updates a transac onal database.
Read: OrderQueryService serves denormalized data from a cache or read-
op mized store.
Implementa on:
@Service
public class OrderCommandService {
@Autowired
private OrderRepository repository;
public void createOrder(Order order) {
repository.save(order);
@Service
public class OrderQueryService {
@Autowired
private RedisTemplate<String, Order> redis;
public Order getOrder(String id) {
return redis.opsForValue().get("order:" + id);
o Pros: Op mizes read/write performance, scales independently.
o Cons: Complex synchroniza on, eventual consistency.
o Use: Analy cs, high-read systems.
Event Sourcing:
o Stores state as a sequence of events rather than snapshots.
o Example:
Instead of upda ng order.status, store events like OrderCreated,
OrderPaid.
Rebuild state by replaying events.
Implementa on:
public class OrderEventStore {
private List<OrderEvent> events = new ArrayList<>();
public void saveEvent(OrderEvent event) {
events.add(event);
public Order rebuildOrder(String orderId) {
Order order = new Order();
for (OrderEvent event : events) {
if (event.getOrderId().equals(orderId)) {
order.apply(event);
return order;
o Pros: Auditability, flexibility to rebuild state.
o Cons: Complex querying, storage growth.
o Use: Financial systems, audi ng.
Circuit Breaker:
o Prevents cascading failures by hal ng calls to failing services.
o Example with Resilience4j:
@RestController
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@CircuitBreaker(name = "payment", fallbackMethod = "fallback")
@GetMapping("/call-payment")
public String callPayment() {
return restTemplate.getForObject("h p://payment-service/status", String.class);
}
public String fallback(Throwable t) {
return "Payment service unavailable";
o Pros: Fault isola on, graceful degrada on.
o Cons: Needs tuning (e.g., thresholds).
o Use: External service calls.
Other Pa erns:
o Bulkhead: Isolates resources (e.g., thread pools per service).
o Backpressure: Controls request rates to avoid overwhelming services.
o Database per Service: Each service has its own database for decoupling.
What to Highlight:
Saga’s role in distributed transac ons (referencing prior examples).
Choosing pa erns based on complexity vs. benefit.
Tools like Axon for Saga/Event Sourcing.