Programming and interview foundations

Software Engineer

Learn the data structures, algorithms, and problem-solving patterns used in technical interviews and everyday engineering decisions.

By the end

Reason about performance, choose suitable data structures, and solve unfamiliar programming problems systematically.

Start here

Big-O Notation

Count how much work code performs, then describe how that work grows with the input.

Start with Big-O
01

Learn how programs use data

Start with runtime, then learn the containers used in nearly every program.

0 / 4 core
  1. AlgorithmsBig-O NotationCount how much work code performs, then describe how that work grows with the input.
  2. AlgorithmsArraysLearn how indexed storage works, what each array operation costs, and how one safe pass grows into in-place and matrix algorithms.
  3. AlgorithmsStringsTreat text as an indexed sequence first, then add immutable output, word boundaries, symmetry, runs, direct search, and grammar one idea at a time.
  4. AlgorithmsHash Tables and SetsProgress from remembering whether a key exists to storing counts, complements, canonical signatures, and one-to-one mappings.
02

Build and search structures

Work with linked data, call stacks, ordering, and efficient search.

0 / 6 core
  1. AlgorithmsLinked ListsNo indexing, no contiguous memory — just nodes pointing to the next one, which is exactly what makes O(1) insertion possible.
  2. AlgorithmsStacks and QueuesA stack remembers what to undo; a queue remembers what to do next, in the order it arrived.
  3. AlgorithmsRecursionA function that trusts a smaller call to itself to solve a smaller version of the same problem — with a base case as the trapdoor that stops the falling.
  4. AlgorithmsSimple SortingLearn bubble, selection, and insertion sort by watching which part of the array becomes permanently ordered after each pass.
  5. AlgorithmsDivide-and-Conquer SortingSorting is rarely the answer by itself — it's the setup that turns a hard search into a single, boring pass.
  6. AlgorithmsBinary SearchBinary search isn't about sorted arrays — it's about any monotonic true/false predicate, and the array is just the most common place one shows up.
03

Recognize reusable patterns

Replace repeated brute force with small, recognizable techniques.

0 / 5 core
  1. AlgorithmsTwo PointersTwo indices moving through a structure with a clear rule, so every step throws away work you never need to redo.
  2. AlgorithmsSliding WindowA window that only ever grows on the right and shrinks on the left — each edge crosses every position at most once, so the whole scan is O(n).
  3. AlgorithmsPrefix SumsOnce you know the running total up to every point, the sum of ANY range is just one subtraction away — no matter how long the range is.
  4. AlgorithmsIntervalsSort by start time, then a single left-to-right sweep answers almost every question about overlaps.
  5. AlgorithmsMonotonic StacksKeep only unresolved candidates in useful order, so many nearest-greater or nearest-smaller queries finish in one pass.
  6. Algorithms · OptionalTriesLet each character choose the next branch, so string queries depend on the key rather than the number of stored keys.
04

Solve connected and constrained problems

Move from trees and graphs to the techniques used for harder optimization problems.

0 / 8 core
  1. AlgorithmsTrees and Binary Search TreesTrees represent hierarchical relationships. Binary search trees add an ordering rule that makes search, insertion, and deletion follow one root-to-leaf path.
  2. AlgorithmsHeapsA heap keeps only one promise — instant access to the current best — and gives up full ordering to make that promise cheap to maintain.
  3. AlgorithmsGraphsMost 'graph problems' aren't handed to you as a graph at all — a grid, a word list, or a set of game states IS a graph the moment you decide what a 'node' and an 'edge' mean.
  4. AlgorithmsUnion-Find (Disjoint Set Union)Maintain connected groups while new links arrive, without searching the whole graph after every update.
  5. AlgorithmsTopological SortTurn directed prerequisites into a valid order, or expose the cycle that makes every order impossible.
  6. AlgorithmsGreedy AlgorithmsA greedy algorithm never looks back — it commits to the locally best choice at every step, and the whole challenge is proving that never backtracking still finds the global optimum.
  7. AlgorithmsBacktrackingBacktracking is just depth-first search over a tree of choices you build as you go, undoing each choice once you've explored where it leads.
  8. AlgorithmsDynamic ProgrammingA repeatable way to build larger answers from smaller answers and reuse work already completed.
  9. Algorithms · OptionalBit ManipulationRead integers as binary patterns, change selected positions with masks, and reuse a small set of identities in interview problems.