LearnThatStack Ace your next interview
Backend Development

Java.

Start free Change topic Change
Practice · Questions

All questions

Showing of 95
Beginner 29
01

Explain the difference between primitive and reference data types.

Visual

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain
Visual

A primitive type variable holds the value itself, while a reference type variable holds a reference that points to an object. Java has eight primitives:

  • Integer types: byte, short, int, long
  • Floating-point types: float, double
  • boolean for true or false, and char for a single character

Each primitive has a fixed size and can never be null.

Classes, interfaces and arrays are reference types, and so are enums. Their objects are always allocated on the heap. Assigning one reference variable to another copies the reference, not the object, so both variables then point to the same object.

Where a primitive lives depends on where it is declared. A local int sits in the method's stack frame, but an int field sits inside its object on the heap.

int x = 10; // primitive - stores value 10
String str = "Hello"; // reference - stores memory address of String object
Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

02

What is autoboxing and unboxing?

Visual

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain
Visual

Autoboxing is the automatic conversion of a primitive to its wrapper class, such as int to Integer. Unboxing is the reverse, from Integer back to int. It lets you put primitives into collections, which only hold objects.

The compiler inserts the calls for you. Boxing an int becomes Integer.valueOf(x), and unboxing becomes x.intValue().

Two traps follow from this. Unboxing a null wrapper throws a NullPointerException. Comparing two Integer objects with == compares references, and it only seems to work for small values because Integer.valueOf caches -128 to 127.

// Autoboxing
Integer num = 100; // int to Integer
List<Integer> list = new ArrayList<>();
list.add(50); // int automatically boxed to Integer
// Unboxing
Integer wrapper = 200;
int primitive = wrapper; // Integer to int
Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

03

Explain the difference between == and equals() method.

Visual

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain
Visual

For objects, == checks reference equality, meaning both variables point to the same object. equals() checks logical equality, meaning two objects hold the same content, as long as the class overrides it.

For primitives, == compares the values directly. For objects, the default Object.equals() behaves exactly like ==. Classes such as String and Integer override it to compare their values, and your own classes should too when two instances can be logically equal.

Identical string literals are interned, so they share one object in the string pool and s3 == s4 is true. A string built with new String is always a separate object, so compare strings with equals(). A class that overrides equals() must also override hashCode().

String s1 = new String("hello");
String s2 = new String("hello");
String s3 = "hello";
String s4 = "hello";
System.out.println(s1 == s2);        // false (different objects)
System.out.println(s1.equals(s2));   // true (same content)
System.out.println(s3 == s4);        // true (string pool)
Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

04

What is the difference between String, StringBuilder, and StringBuffer?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

String is immutable, while StringBuilder and StringBuffer are mutable buffers you change in place. The two buffers differ in thread safety. StringBuffer synchronizes its methods, and StringBuilder does not.

String StringBuilder StringBuffer
Mutable No Yes Yes
Thread-safe Yes, because it never changes No Yes, through synchronized methods
Cost of building text A new object for every change Lowest Higher, it pays for locking

Every change to a String creates a new object, so += inside a loop copies the text again and again. A builder appends into one growing buffer instead.

StringBuilder is the default choice for building text in one thread. It has the same API as StringBuffer without the synchronization overhead. The Java documentation recommends it wherever possible, because it is faster under most implementations. StringBuffer only makes sense when several threads really append to the same buffer.

String str = "Hello";
str += " World"; // Creates new String object
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // Modifies existing buffer
Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

05

What are access modifiers in Java?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

Access modifiers control which other code can use a class or its members. Java has four levels, from most to least restrictive:

  • private: visible only inside the same class.
  • No modifier, called package-private or default access: visible to any class in the same package.
  • protected: visible in the same package, and to subclasses in other packages.
  • public: visible from anywhere.

A top-level class can only be public or package-private.

Start with the most restrictive level that works, such as private fields behind public methods, so a class can change its internals without breaking callers.

Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

06

What is the difference between static and instance variables/methods?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

A static member belongs to the class itself and is shared by every instance. An instance member belongs to one object and needs that object to exist. There is one copy of a static variable, but every object gets its own copy of each instance variable.

Static variables are initialized once, when the class is first loaded, and you reach static members through the class name, as in Math.max(). A static method has no this, so it cannot use instance fields or call instance methods directly. An instance method can use both kinds.

Use static members for data and behaviour that do not depend on any one object, such as constants and utility methods. Shared static state is harder to test, because every test sees the same copy.

class Example {
    static int staticVar = 0;     // Class variable
    int instanceVar = 0;          // Instance variable
    static void staticMethod() {  // Can't access instance members
        // staticVar++; // OK
        // instanceVar++; // Compilation error
    }
    void instanceMethod() {       // Can access both
        staticVar++;
        instanceVar++;
    }
}
Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

07

What are the four pillars of OOP?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

The four pillars of object-oriented programming are encapsulation, inheritance, polymorphism and abstraction. Each one is a way to manage complexity in a large code base:

  1. Encapsulation bundles data with the methods that use it and hides the internal details, usually behind private fields.
  2. Inheritance lets a new class reuse and extend an existing class, as when Dog extends Animal.
  3. Polymorphism lets objects of different types respond to the same method call in their own way.
  4. Abstraction exposes only the essential features of an object and hides how they work, through abstract classes and interfaces.
Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

08

What is the purpose of the super keyword?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

The super keyword lets a subclass call its immediate parent's constructor and reach parent members that the subclass has overridden or hidden. It has three uses:

  1. super(...) calls a parent constructor. When a constructor does not call this(...) or super(...) explicitly, the compiler inserts a call to super().
  2. super.method() calls the parent's version of an overridden method, often to extend that behaviour rather than replace it.
  3. super.field reads a hidden field, which is a parent field hidden by a subclass field with the same name.
class Parent {
    String name = "Parent";
    void display() { System.out.println("Parent display"); }
}
class Child extends Parent {
    String name = "Child";
    Child() {
        super(); // Call parent constructor
    }
    void display() {
        super.display(); // Call parent method
        System.out.println("Parent name: " + super.name);
    }
}
Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

09

What is the difference between ArrayList and LinkedList?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

ArrayList stores elements in a resizable array, while LinkedList is a doubly linked list of nodes that point to their neighbours. That layout decides which operations are cheap.

ArrayList reads any index in O(1), because it jumps straight to the slot. Adding at the end is amortized O(1), meaning an occasional resize copies the array but the average cost per add stays constant. Inserting or removing in the middle is O(n), because the later elements have to shift.

LinkedList adds and removes at either end in O(1), and in the middle only when an iterator already points there. Reaching an index is O(n), because it walks node by node from the nearer end. So add(index, x) in the middle is O(n) as well.

ArrayList is the usual default, since its per-element overhead is lower. For queue work at the ends, ArrayDeque is often faster than LinkedList.

List<String> arrayList = new ArrayList<>(Collections.nCopies(101, "item"));
List<String> linkedList = new LinkedList<>();
// ArrayList better for
String element = arrayList.get(100); // O(1)
// LinkedList better for
linkedList.add(0, "first"); // O(1)
linkedList.remove(0);       // O(1)
Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

10

What is the difference between checked and unchecked exceptions?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

Checked exceptions must be caught or declared with throws, and the compiler enforces this. Unchecked exceptions need neither, so handling them is optional.

Checked exceptions extend Exception but not RuntimeException. They model failures a caller can expect and recover from, such as IOException, SQLException and ClassNotFoundException. Unchecked exceptions extend RuntimeException or Error. They usually signal bugs, such as NullPointerException, ArrayIndexOutOfBoundsException and IllegalArgumentException.

Use a checked exception when the caller can do something useful about the failure. Use an unchecked one for programming errors, where forcing every caller to catch it only adds noise.

// Checked exception - must handle
public void readFile() throws IOException {
    FileReader file = new FileReader("file.txt");
}
// Unchecked exception - optional handling
public void divide(int a, int b) {
    int result = a / b; // May throw ArithmeticException
}
Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

11

What is the exception hierarchy in Java?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

Every exception in Java descends from Throwable, which splits into two branches, Error and Exception.

  • Error covers serious problems such as OutOfMemoryError and StackOverflowError. A normal application should not try to catch these.
  • Exception covers conditions an application may want to handle. Its subclass RuntimeException and everything below it are unchecked.

Every other subclass of Exception, such as IOException and SQLException, is checked. Error and its subclasses are unchecked too. The "Checked Exceptions" node in the tree is a grouping, not a real class. A catch (Exception e) block never catches an Error.

Throwable
├── Error (unchecked)
│   ├── OutOfMemoryError
│   └── StackOverflowError
└── Exception
    ├── Checked Exceptions
    │   ├── IOException
    │   └── SQLException
    └── RuntimeException (unchecked)
        ├── NullPointerException
        └── ArrayIndexOutOfBoundsException
Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

12

What is the difference between throw and throws?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

throw raises an exception at a specific point in the code, while throws declares in the method signature which exceptions can reach the caller.

throw takes a single exception object, as in throw new IllegalArgumentException("Age cannot be negative"). Execution stops there, and the exception travels up the call stack until a catch block handles it. throws can list several exception types, separated by commas.

A method that can throw a checked exception must either catch it or declare it in throws. For an unchecked exception such as IllegalArgumentException, the throws clause in the example is optional and only documents the behaviour.

public void validateAge(int age) throws IllegalArgumentException {
    if (age < 0) {
        throw new IllegalArgumentException("Age cannot be negative");
    }
}
Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

13

Can we have multiple catch blocks for a single try block?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

Yes. A single try can have several catch blocks, and Java runs the first one whose type matches the thrown exception. At most one of them runs.

try {
    // risky code
} catch (FileNotFoundException e) {
    // handle file not found
} catch (IOException e) {
    // handle other IO exceptions
} catch (Exception e) {
    // handle any other exception
}

Because the first match wins, order them from most specific to most general. The compiler enforces this. A catch for a subclass placed after a catch for its superclass could never run, so it is a compile-time error. In the example, FileNotFoundException must come before IOException, and Exception goes last.

One block can also catch several unrelated types joined with |, as in catch (IOException | SQLException e). Use this multi-catch form when the handling is the same for each type. Its parameter is implicitly final.

Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

14

What is the difference between process and thread?

Part of Pro
15

How can you create a thread in Java?

Part of Pro
16

What is the difference between start() and run() methods?

Part of Pro
17

What is the difference between stack and heap memory?

Part of Pro Visual
18

What is the difference between InputStream/OutputStream and Reader/Writer?

Part of Pro
19

What is Spring Boot and its advantages?

Part of Pro
20

What is the difference between @Component, @Service, @Repository, and @Controller?

Part of Pro
21

What is the difference between @RestController and @Controller?

Part of Pro
22

What is JDBC and its architecture?

Part of Pro
23

What is the difference between unit testing and integration testing?

Part of Pro
24

What are the commonly used testing frameworks in Java?

Part of Pro
25

What is the difference between JDK, JRE and JVM?

Part of Pro
26

What is method overloading and method overriding?

Part of Pro
27

What is the final keyword and its uses?

Part of Pro
28

What is polymorphism and its types?

Part of Pro
29

What is the difference between final, finally, and finalize?

Part of Pro
Intermediate 50
30

Explain the concept of pass-by-value in Java.

Part of Pro Visual
31

What is the difference between abstract class and interface?

Part of Pro
32

Explain the concept of composition vs inheritance.

Part of Pro
33

What is the difference between method hiding and method overriding?

Part of Pro
34

What is the Java Collections Framework hierarchy?

Part of Pro
35

What is the difference between HashMap and Hashtable?

Part of Pro
36

What is the difference between HashSet and TreeSet?

Part of Pro
37

What is the difference between fail-fast and fail-safe iterators?

Part of Pro Visual
38

What is the difference between Comparable and Comparator?

Part of Pro
39

What features did Java 8 and later versions add to the Collections Framework?

Part of Pro
40

What is try-with-resources and why is it useful?

Part of Pro
41

What is synchronization and why is it needed?

Part of Pro Visual
42

What are the different ways to achieve synchronization?

Part of Pro
43

What is the difference between wait() and sleep()?

Part of Pro
44

What is the volatile keyword?

Part of Pro Visual
45

What is the Executor framework?

Part of Pro
46

Explain the JVM memory structure.

Part of Pro
47

What is garbage collection and how does it work?

Part of Pro Visual
48

What causes OutOfMemoryError and how to handle it?

Part of Pro
49

What is the difference between shallow copy and deep copy?

Part of Pro Visual
50

What is serialization and deserialization?

Part of Pro
51

What is the purpose of serialVersionUID?

Part of Pro
52

What is the Singleton pattern and how do you implement it?

Part of Pro Visual
53

Explain the Factory pattern.

Part of Pro
54

What is the Observer pattern?

Part of Pro
55

What is the Strategy pattern?

Part of Pro
56

What is dependency injection and how does Spring implement it?

Part of Pro
57

What are the different types of Spring bean scopes?

Part of Pro Visual
58

What is Spring Security and its core features?

Part of Pro
59

What is Spring Data JPA and its benefits?

Part of Pro
60

How do you handle database connections in JDBC?

Part of Pro
61

What is the difference between Statement and PreparedStatement?

Part of Pro Visual
62

What is connection pooling and why is it important?

Part of Pro
63

What are database transactions and ACID properties?

Part of Pro
64

What tools can you use for Java application profiling?

Part of Pro
65

What is Test-Driven Development (TDD)?

Part of Pro
66

What is mocking and why is it useful?

Part of Pro
67

What are Java 8 features and their benefits?

Part of Pro
68

What is functional programming in Java?

Part of Pro
69

What is the Stream API and its benefits?

Part of Pro Visual
70

What are annotations and how do you create custom annotations?

Part of Pro
71

What are the key features added in Java since Java 8?

Part of Pro
72

What is the contract between equals() and hashCode() in Java?

Part of Pro Visual
73

Why is String immutable in Java?

Part of Pro Visual
74

What are records in Java?

Part of Pro Visual
75

What are virtual threads in Java, and when should you use them?

Part of Pro Visual
76

What are generics in Java, and what is type erasure?

Part of Pro Visual
77

What is the difference between Association, Aggregation, and Composition?

Part of Pro Visual
78

What is deadlock and how can you prevent it?

Part of Pro Visual
79

What is the Module System introduced in Java 9?

Part of Pro
Expert 16
80

Explain the internal working of HashMap.

Part of Pro Visual
81

What happens if an exception is thrown in a finally block?

Part of Pro
82

What is the difference between CountDownLatch and CyclicBarrier?

Part of Pro Visual
83

What is the Fork/Join framework?

Part of Pro Visual
84

What are the different types of garbage collectors?

Part of Pro
85

What is the difference between NIO and traditional I/O?

Part of Pro Visual
86

What is Spring AOP and when would you use it?

Part of Pro Visual
87

What are the best practices for Java performance optimization?

Part of Pro
88

How do you identify and fix memory leaks?

Part of Pro Visual
89

How does JVM optimize code at runtime?

Part of Pro
90

What are the different types of references in Java?

Part of Pro Visual
91

What is reflection and when should you use it?

Part of Pro
92

What is Spring Boot Auto-Configuration and how does it work?

Part of Pro
93

What are microservices and what are the challenges in implementing them?

Part of Pro
94

How does ConcurrentHashMap achieve thread safety?

Part of Pro Visual
95

How does class loading work in Java?

Part of Pro

No matches

Try a different filter or search term.

Know someone prepping for Java? Send them this set.
Quick recap

Java in pictures.

A quick recap of Java in 33 short animated pictures, one idea at a time. About 8 min to get the whole topic back in your head before you walk in. Pause any picture, slow it down, or step through it.

Pro The first chapter is free to play. The other 30 pictures come with Pro.

Get Pro · $10/mo
Pro · $10/mo

82 of 95 Java answers are in Pro.

Full answers, code samples, and AI explanations that go simpler or deeper. Cancel anytime.

  • Full answers + code
  • AI explanations, simpler or deeper
  • 1,000 AI credits / month
  • Cancel anytime

Change topic

Pick a different technology or stack. Your current topic stays put until you choose a new one.

Technologies
No technologies match “”.
Cross-cutting topics
No topics match “”.
By role
Stacks & frameworks

MEAN

MongoDB, Express, Angular, Node.js

MERN

MongoDB, Express, React, Node.js

LAMP

Linux, Apache, MySQL, PHP

Django

Python Full-Stack Development

Ruby on Rails

Convention over Configuration

Serverless on AWS

Serverless Architecture on AWS

Flutter Mobile

Flutter Cross-Platform Mobile Development

Spring Boot

Enterprise Java Development

.NET

Microsoft Ecosystem

Vue

Vue.js, Vite, TypeScript, Tailwind, Node.js

Go Backend

Golang, gRPC, PostgreSQL, Redis, RabbitMQ

FastAPI

Python, FastAPI, SQLAlchemy, PostgreSQL

React Native

React, TypeScript, Redux, Firebase

iOS Native

Swift, SwiftUI, UIKit, Firebase

Android Native

Java, Jetpack Compose, Firebase

DevOps / Platform

Docker, Kubernetes, Terraform, CI/CD

AI Engineer

LLMs, RAG, Agents, Evals

AI-Powered Developer

Claude Code, Copilot, Agentic Workflows

Core SWE Interview Prep

Data structures, algorithms, OS, concurrency, networking, git