LearnThatStack Ace your next interview
Computer Science Fundamentals

Sorting, Searching & Recursion.

Start free Change topic Change

Practise Sorting, Searching & Recursion one question at a time. Answer out loud or in writing, get graded, and see exactly what you missed.

Try one question

How does binary search locate a value in a sorted array so quickly?

The answer

Binary search checks the middle element, then throws away half the array on every step. If the middle is too small, the value must sit to the right, so you ignore the left half. If it is too big, you ignore the right. You repeat on the surviving half until you land on the value or run out.

That halving is where the speed comes from. A million-element array needs about twenty checks, not a million. The cost is O(log n) comparisons and O(1) extra space.

The catch is that the array must already be sorted on the key you search. On unsorted data the halving logic breaks, since a small middle no longer tells you which side to drop. This is why people sort once and then search many times.

Example · what grading looks like
What is recursion, and what two ingredients does every recursive function need?

“Recursion is when a function solves a problem by calling itself on a smaller piece of the same problem, like computing a factorial as n times the factorial of n minus one. The two things every recursive function needs are a base case, a small input you can answer directly so the calls stop, and a recursive step where the function calls itself again. If you leave out the base case, the function just keeps calling itself until the stack overflows.”

Knew it

They have both ingredients right and the factorial example is solid. In a real interview they'd want to add that the recursive step has to shrink toward the base case, not just call itself again.

Missed: Didn't say the recursive step must shrink the problem and move toward the base case, just that it 'calls itself again'.


Get your own answers graded

Sign up free. Your account comes with 50 credits for grading, and it remembers what you missed.

What it covers

All 61 questions

Each on its own page

Recursion and the call stack

What recursion is, base cases, how the call stack tracks nested calls, and when recursion reads better than a loop.

4 questions

  1. What is recursion, and what two ingredients does every recursive function need?
  2. What is a base case, and what happens when a recursion lacks one?
  3. How does the call stack keep track of nested recursive calls? Pro
  4. When is recursion clearer or simpler than an equivalent loop? Pro

Merge sort, quicksort and heapsort

How the main comparison sorts work, their time and space costs, and why quicksort usually wins in practice.

6 questions

  1. How does merge sort split a list apart and merge it back sorted?
  2. How does quicksort partition a list around a pivot to sort in place?
  3. What are the practical differences between quicksort and merge sort?
  4. What are the time and space costs of the common sorting algorithms? Pro
  5. Why is quicksort often faster than merge sort in real practice? Pro
  6. How does heapsort work, and why is it rarely the default choice? Pro

Backtracking fundamentals

The choose-explore-unchoose template, why it is exponential, and generating permutations and combinations without duplicates.

5 questions

  1. What is backtracking, and how does it differ from plain brute-force search?
  2. What general template do most backtracking problems share? Pro
  3. Why does backtracking so often have exponential worst-case running time? Pro
  4. How does backtracking handle permutations differently from combinations? Pro
  5. How do you stop a backtracking search from producing duplicate solutions? Pro

Stability and non-comparison sorts

What a stable sort is and what stability costs, the n log n comparison lower bound, and how counting and radix sort get past it.

6 questions

  1. What does it mean for a sorting algorithm to be stable?
  2. When does counting sort beat every comparison-based sorting algorithm? Pro
  3. How does radix sort work, and what kind of data suits it? Pro
  4. Why can no comparison-based sort ever run faster than n log n? Pro
  5. Which common sorts are stable, and why does stability cost something? Pro
  6. How do you make an in-place sort stable, and what does it cost? Pro

Greedy algorithms

When the greedy choice works, how to prove it correct, how to spot when it fails, and when a greedy approximation is good enough.

4 questions

  1. What is a greedy algorithm, and when does the greedy choice work?
  2. When is a greedy algorithm provably correct, and how do you show it? Pro
  3. Why can a greedy choice give a wrong answer, and how do you spot it? Pro
  4. When is a greedy heuristic an acceptable approximation for a hard problem? Pro

Pivots, worst cases and quickselect

How pivot choice drives quicksort's cost, what triggers quadratic time, how introsort guards it, and quickselect for the k-th element.

4 questions

  1. When does quicksort degrade to quadratic time, and what triggers it? Pro
  2. How does the choice of pivot change quicksort's behavior and cost? Pro
  3. When do you use quickselect instead of sorting to find the k-th element? Pro
  4. How does introsort protect quicksort from its quadratic worst case? Pro

Analyzing recursive algorithms

Writing and solving recurrences, applying the Master Theorem, and measuring a recursion's stack space as well as its time.

3 questions

  1. How do you work out the time complexity of a recursive function? Pro
  2. How does the Master Theorem analyze divide-and-conquer running times? Pro
  3. How do you analyze a recursive algorithm's space cost, not just its time? Pro

Stack depth and tail calls

Why deep recursion overflows the stack, tail recursion and which languages optimize it, and rewriting recursion as a loop.

5 questions

  1. Why can deep recursion crash a program with a stack overflow? Pro
  2. When and how do you rewrite a recursive function as a loop? Pro
  3. What is tail recursion, and when can it avoid growing the stack? Pro
  4. How do you rescue a recursion that overflows the stack on real inputs? Pro
  5. How does tail-call optimization differ across languages, and which ones lack it? Pro

Choosing a sort in practice

What standard libraries actually use, how hybrids like Timsort work, cache effects, expensive comparisons, and picking the right sort.

5 questions

  1. Which sorting algorithm does your language's standard library actually use?
  2. How do you choose the best sorting algorithm for a problem? Pro
  3. How do cache effects make some n log n sorts faster than others? Pro
  4. How does a hybrid sort like Timsort combine merging and insertion sort? Pro
  5. How do you sort efficiently when each comparison is very expensive? Pro

Pruning and smarter backtracking

Making large backtracking searches practical with pruning, branch-and-bound, choice ordering, symmetry breaking, constraint propagation and iterative deepening.

7 questions

  1. How does pruning make backtracking practical on a large search space? Pro
  2. How do you bound a backtracking search that could explore billions of states? Pro
  3. How does branch-and-bound improve on plain backtracking search? Pro
  4. How does ordering your choices help backtracking find solutions sooner? Pro
  5. How do you detect and cut symmetric branches in a backtracking search? Pro
  6. When does iterative deepening beat a plain depth-first backtracking search? Pro
  7. How does constraint propagation speed up a backtracking solver? Pro

Sorting at scale and in parallel

External merge sort for data beyond memory, distributed sorting across machines, and parallelizing divide-and-conquer across threads.

4 questions

  1. How would you sort far more data than fits in memory? Pro
  2. How do you sort a huge dataset spread across many machines? Pro
  3. How do you parallelize quicksort or merge sort across threads safely? Pro
  4. How do you parallelize a divide-and-conquer algorithm effectively? Pro
Practice · Questions

All questions

Showing of 61
Beginner 16
01

How does binary search locate a value in a sorted array so quickly?

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

Binary search checks the middle element, then throws away half the array on every step. If the middle is too small, the value must sit to the right, so you ignore the left half. If it is too big, you ignore the right. You repeat on the surviving half until you land on the value or run out.

That halving is where the speed comes from. A million-element array needs about twenty checks, not a million. The cost is O(log n) comparisons and O(1) extra space.

The catch is that the array must already be sorted on the key you search. On unsorted data the halving logic breaks, since a small middle no longer tells you which side to drop. This is why people sort once and then search many times.

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

How does merge sort split a list apart and merge it back sorted?

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

Merge sort keeps splitting the list in half until each piece holds one element. A single element is already sorted by itself. Then it merges pairs back together, walking two sorted pieces and picking the smaller front item each time.

Merging two sorted halves is cheap because both are ordered. You compare their fronts, take the smaller one, and advance. You repeat until both are empty and one sorted run remains.

The splitting gives log n levels, and each level touches every element once, so total work is O(n log n). It needs O(n) extra room to hold the merged output. That steady cost, with no bad cases, is why merge sort is a safe default when memory is not tight.

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

How does quicksort partition a list around a pivot to sort in place?

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

Quicksort picks one element as a pivot, then rearranges the array so smaller items sit left of it and larger items sit right. After that single pass, the pivot is in its final sorted spot. You then sort the left and right chunks the same way.

The rearranging happens in place. You walk the array with a pointer, swapping any item smaller than the pivot toward the front. When you finish, you swap the pivot into the boundary you built.

Because it moves items within the same array, quicksort needs almost no extra memory, only O(log n) for recursion. Average speed is O(n log n). The in-place swaps and tight loops make it fast in practice, which is why many libraries use it.

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 are the practical differences between quicksort and merge sort?

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

Quicksort sorts in place and uses only O(log n) extra memory, while merge sort needs O(n) scratch space to hold merged runs. On large arrays that memory gap matters.

Their worst cases differ. Both average O(n log n), but quicksort can drop to O(n^2) on bad pivots, whereas merge sort holds O(n log n) always. Merge sort is also stable, keeping equal items in their original order. Plain quicksort is not.

So the choice follows your data:

  • Pick quicksort for raw speed and tight memory on in-memory arrays.
  • Pick merge sort when you need stability or guaranteed timing.
  • Pick merge sort for linked lists and external files too.

This split is why array libraries often tune quicksort, while stable and external sorts use merging.

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 does it mean for a sorting algorithm to be stable?

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 stable sort keeps equal items in the same order they had before sorting. If two records share a sort key, the one that started first still comes first afterward.

This matters when you sort by more than one field. Say you sort people by first name, then by last name. A stable sort preserves the first-name order within each shared last name, so you get a two-level ordering with no extra comparison logic.

An unstable sort can swap equal keys unpredictably. You lose that earlier arrangement, and multi-pass sorting stops working. Merge sort and insertion sort are naturally stable, while plain quicksort and heapsort are not.

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

Which sorting algorithm does your language's standard library actually use?

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

Most standard libraries use a hybrid sort tuned for real data, not a single textbook algorithm. Java's object sort uses Timsort, which blends merge sort with insertion sort and exploits runs that are already ordered. Python used Timsort until version 3.11 and now uses Powersort, a Timsort variant with a better rule for which runs to merge next.

C++ std::sort uses introsort, which starts as quicksort and switches to heapsort if recursion goes too deep. That switch guards against quicksort's O(n^2) worst case while keeping its usual speed.

Two patterns follow. Sorts of objects tend to be stable, often Timsort or a variant of it. Sorts of raw numbers tend to be unstable and in place, often an introsort variant.

Knowing your library's choice tells you its stability and its worst-case guarantee, so you never reimplement a sort the runtime already does well.

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 is recursion, and what two ingredients does every recursive function need?

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

Recursion is when a function solves a problem by calling itself on a smaller version of the same problem. Each call handles one slice, then hands the rest to another call.

Every recursive function needs two ingredients. First, a base case, an input small enough to answer directly with no further call. Second, a recursive step that shrinks the problem and calls itself, moving toward that base case.

Miss either one and it breaks. Without a base case the calls never stop. Without real progress toward it, you also never stop.

A factorial shows both parts:

function fact(n) {
  if (n <= 1) return 1;      // base case
  return n * fact(n - 1);    // shrinks toward base
}
// fact(4) === 24
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 a base case, and what happens when a recursion lacks one?

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 base case is the stopping condition that returns an answer directly, without another recursive call. It is the point where the problem is small enough to solve outright, like an empty list or zero.

Without one, the function keeps calling itself forever, because the problem never shrinks to something answerable. Each call reserves a frame on the call stack for its local state. The frames pile up until the stack runs out of room, and the program crashes with a stack overflow.

A wrong base case fails the same way. If your condition never matches the values you reach, the recursion skips the exit and never stops. Getting the base case exact is the first thing to check.

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 backtracking, and how does it differ from plain brute-force search?

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

Backtracking builds a solution one choice at a time and abandons a path the moment it cannot work. It explores a tree of partial choices, going deeper while things look valid and retreating when they do not.

The difference from brute force is when you check. Brute force generates every full candidate, then checks each one at the end. It never notices a doomed path early, so it wastes effort completing arrangements that were broken from the start. Backtracking tests constraints during construction and prunes dead branches before finishing them.

That early pruning is where the savings come from. On problems like placing queens or filling a grid, backtracking skips huge regions of hopeless combinations, while brute force builds and checks them all.

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 a greedy algorithm, and when does the greedy choice work?

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 greedy algorithm builds an answer step by step, always taking the option that looks best. It never revisits a choice, which keeps it fast and simple, usually O(n log n) after a sort, sometimes O(n).

Greedy works when two things hold. The first is the greedy-choice property, where a locally best pick is part of some overall best answer. The second is optimal substructure, where solving what remains after that pick gives the full solution.

Making change in US coins works greedily. You take the biggest coin that fits, 25 cents first, then 10, 5 and 1. It fails on unusual coin sets, where a smaller first coin wins.

An unproven greedy pick can return a wrong answer with no error, so test it against a slower exact method.

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 must be true about your data before you can use binary search?

Part of Pro
12

What are the time and space costs of the common sorting algorithms?

Part of Pro
13

How does the call stack keep track of nested recursive calls?

Part of Pro Visual
14

Why can deep recursion crash a program with a stack overflow?

Part of Pro
15

When is recursion clearer or simpler than an equivalent loop?

Part of Pro
16

When would you choose linear search over binary search?

Part of Pro
Intermediate 25
17

When does quicksort degrade to quadratic time, and what triggers it?

Part of Pro Visual
18

How does the choice of pivot change quicksort's behavior and cost?

Part of Pro
19

Why is quicksort often faster than merge sort in real practice?

Part of Pro
20

How does heapsort work, and why is it rarely the default choice?

Part of Pro Visual
21

When does counting sort beat every comparison-based sorting algorithm?

Part of Pro Visual
22

How does radix sort work, and what kind of data suits it?

Part of Pro Visual
23

Why can no comparison-based sort ever run faster than n log n?

Part of Pro Visual
24

How do you run a binary search over an answer space?

Part of Pro Visual
25

How do you find the first or last match with binary search?

Part of Pro Visual
26

What is the classic overflow bug when computing a binary search midpoint?

Part of Pro
27

Which common sorts are stable, and why does stability cost something?

Part of Pro Visual
28

When and how do you rewrite a recursive function as a loop?

Part of Pro
29

What is tail recursion, and when can it avoid growing the stack?

Part of Pro Visual
30

How do you work out the time complexity of a recursive function?

Part of Pro Visual
31

How does the Master Theorem analyze divide-and-conquer running times?

Part of Pro Visual
32

What general template do most backtracking problems share?

Part of Pro Visual
33

How does pruning make backtracking practical on a large search space?

Part of Pro Visual
34

Why does backtracking so often have exponential worst-case running time?

Part of Pro
35

How does backtracking handle permutations differently from combinations?

Part of Pro Visual
36

How do you stop a backtracking search from producing duplicate solutions?

Part of Pro Visual
37

When is a greedy algorithm provably correct, and how do you show it?

Part of Pro
38

Why can a greedy choice give a wrong answer, and how do you spot it?

Part of Pro
39

How do you choose the best sorting algorithm for a problem?

Part of Pro
40

When do you use quickselect instead of sorting to find the k-th element?

Part of Pro Visual
41

How do you analyze a recursive algorithm's space cost, not just its time?

Part of Pro Visual
Expert 20
42

How would you sort far more data than fits in memory?

Part of Pro Visual
43

How do you sort a huge dataset spread across many machines?

Part of Pro Visual
44

How do cache effects make some n log n sorts faster than others?

Part of Pro Visual
45

How does a hybrid sort like Timsort combine merging and insertion sort?

Part of Pro Visual
46

How does introsort protect quicksort from its quadratic worst case?

Part of Pro
47

How do you make an in-place sort stable, and what does it cost?

Part of Pro
48

How do you sort efficiently when each comparison is very expensive?

Part of Pro
49

How do you parallelize quicksort or merge sort across threads safely?

Part of Pro Visual
50

What breaks in binary search when the array holds billions of elements?

Part of Pro
51

How do you binary search a monotonic function you can only sample?

Part of Pro
52

How do you rescue a recursion that overflows the stack on real inputs?

Part of Pro
53

How does tail-call optimization differ across languages, and which ones lack it?

Part of Pro
54

How do you parallelize a divide-and-conquer algorithm effectively?

Part of Pro
55

How do you bound a backtracking search that could explore billions of states?

Part of Pro
56

How does branch-and-bound improve on plain backtracking search?

Part of Pro Visual
57

How does ordering your choices help backtracking find solutions sooner?

Part of Pro
58

How do you detect and cut symmetric branches in a backtracking search?

Part of Pro
59

When does iterative deepening beat a plain depth-first backtracking search?

Part of Pro Visual
60

How does constraint propagation speed up a backtracking solver?

Part of Pro Visual
61

When is a greedy heuristic an acceptable approximation for a hard problem?

Part of Pro

No matches

Try a different filter or search term.

Know someone prepping for Sorting, Searching & Recursion? Send them this set.
Quick recap

Sorting, Searching & Recursion in pictures.

A quick recap of Sorting, Searching & Recursion in 32 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 28 pictures come with Pro.

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

51 of 61 Sorting, Searching & Recursion 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