Software Development

Designing and writing application software.

13 subjects · 158 topics · 10 areas · 7 cheatsheets

Subjects covering this category

6 of 13 subjects
  • Subject · Beginner to Advanced

    Recognising the 23 classic design patterns from a class diagram or from code, and implementing each in Python, Java and TypeScript.

    • Foundations
    • Creational Patterns
    • Structural Patterns
    28 topics · 225 cardsnot started
  • Subject · Intermediate to Advanced

    Tracing, implementing and proving the cost of the classic searching, sorting and graph algorithms, and designing new ones with divide and conquer, backtracking, greedy choice and dynamic programming, in Python, Java and TypeScript.

    • Searching and Simple Sorting
    • Efficient Sorting
    • Design Strategies
    19 topics · 168 cardsnot started
  • Subject · Intermediate to Advanced

    Recognising which of the common problem-solving patterns an unseen coding problem needs, and solving it in Python, Java or TypeScript within the time an interview allows.

    • Approach
    • Array and Number Patterns
    • Linked List Patterns
    17 topics · 135 cardsnot started
  • Subject · Beginner to Advanced

    Writing Java that compiles, runs, and models a problem with objects.

    • The Language
    • Objects
    • When Things Go Wrong
    15 topics · 131 cardsnot started
  • Subject · Beginner to Advanced

    Choosing a data structure by the cost of its operations, and implementing arrays, linked lists, stacks, queues, hash tables, trees, heaps, tries and graphs in Python, Java and TypeScript.

    • Measuring Cost
    • Sequences and Lookup
    • Recursion and Trees
    15 topics · 122 cardsnot started
  • Subject · Beginner to Advanced

    Designing HTTP APIs that clients can understand, call safely, and keep using as the API changes.

    • HTTP for API Designers
    • Designing the Contract
    • Repeats, Retries and Long Jobs
    14 topics · 132 cardsnot started

Cheatsheets

7 cheatsheets
  • Cheatsheet · Java Collections and Streams

    Every everyday Java collection on one page: what each one is for, what it costs, and how to choose.

    14 entries here
  • Cheatsheet · Data Structures

    Every data structure in the subject on one page: what each one is for, what its operations cost, and how to choose.

    14 entries here
  • Cheatsheet · Coding Interview Patterns

    Fourteen coding interview patterns on one page: the property that points to each, what it costs, when it fails, and its loop in Python.

    14 entries here
  • Cheatsheet · Algorithms

    Traversal, ordering, shortest paths, spanning trees and connectivity on one page: which algorithm a graph question needs and what it costs.

    11 entries here
  • Cheatsheet · Algorithms

    Every sort the subject teaches beyond the simple three on one page: what each costs, what it needs, and which one to call.

    9 entries here
  • Cheatsheet · Algorithms

    Backtracking, greedy algorithms and dynamic programming on one page: when each fits, and the Python that shows its shape.

    8 entries here
  • Cheatsheet · Algorithms

    Binary search and the three simple sorts on one page: when each fits, what it costs, and the Python to write it.

    5 entries here
  • Java

    Java methods: declaring and calling them, signatures, parameters and arguments, pass-by-value, and overloading.

    Beginner to Intermediate10 cards · 6 qnot started

  • Java

    Java inheritance: what extends gives a subclass, constructor order, overriding against overloading, super, private fields and final.

    Intermediate to Advanced10 cards · 5 qnot started

  • Java

    Java exceptions: try, catch and finally, checked and unchecked exceptions, catching, declaring and wrapping, and try-with-resources.

    Beginner to Advanced10 cards · 6 qnot started

  • Java Collections and Streams

    Java streams: pipelines over a source, lazy evaluation, map and flatMap, collectors, single use, and when parallel streams pay.

    Intermediate to Advanced10 cards · 6 qnot started

  • Java

    Java variables and types: primitives and references, what assignment copies, the eight primitive types, money, and what the compiler checks.

    Beginner to Intermediate9 cards · 5 qnot started

  • Java

    Java operators: how operand types choose what a symbol does, identity versus equality, short-circuiting, precedence and increments.

    Beginner to Intermediate9 cards · 5 qnot started

  • Java

    Choosing which code runs with if and switch, repeating it with Java's four loop forms, and the boundary mistakes in both.

    Beginner to Intermediate9 cards · 5 qnot started

  • Java

    Java strings: immutability, why String methods return new strings, the string pool, equals against ==, and building text with StringBuilder.

    Beginner to Intermediate9 cards · 5 qnot started

  • Java

    Java classes and objects: classes as descriptions, creating objects with new, constructors, this, and static against instance members.

    Beginner to Intermediate9 cards · 6 qnot started

  • Java

    Java polymorphism: how the runtime object chooses which overridden method runs, what the declared type decides, hiding, casts and instanceof.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java

    Java memory: the stack and the heap, what keeps an object alive for the garbage collector, the two memory errors, and leaks.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java Collections and Streams

    How a HashMap works: hashing to a bucket, collisions, resizing, the three map classes, and null keys.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java Collections and Streams

    Sorting your own types in Java: Comparable for the natural order, Comparator for the rest, and the two ways a comparator goes wrong.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java Collections and Streams

    Java generics: type parameters, what the compiler checks, type erasure, wildcards, and what erasure forbids.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java Collections and Streams

    Java lambdas and functional interfaces: passing behaviour as an argument, the four core interfaces, method references and captured variables.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java Concurrency

    Why shared state breaks between threads: race conditions, non-atomic operations, visibility, and choosing volatile, atomics or locks.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java Concurrency

    Locks in Java: what synchronized guarantees, which object it locks, reentrancy, ReentrantLock, and what a lock cannot protect.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java Concurrency

    Executors and futures: running tasks on a thread pool, getting results back, CompletableFuture, and shutting a pool down.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java

    Java arrays: a fixed run of values under one name, creating and filling one, zero-based indexes, and why an array cannot grow.

    Beginner to Intermediate8 cards · 5 qnot started

  • Java

    Java interfaces and abstract classes: naming a capability, sharing state, default methods, and choosing between the two.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java

    Java encapsulation: private fields, the four access levels, references that leak through getters and constructors, and composition against inheritance.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java

    Java equals, hashCode and toString: the defaults every object inherits, the contract between equals and hashCode, and how hash maps lose keys.

    Intermediate to Advanced8 cards · 6 qnot started

  • Java Collections and Streams

    The Java Collections Framework: List, Set and Queue, what each promises, and which type to declare a variable with.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java Collections and Streams

    ArrayList vs LinkedList: two lists with the same methods and opposite costs, how an ArrayList grows, and removing while iterating.

    Intermediate to Advanced8 cards · 6 qnot started

  • Java Collections and Streams

    Sets and queues: collections that decide what counts as a duplicate and what comes out next, and which class to use.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java Collections and Streams

    Java Optional: a return type that puts possible absence in the signature, how to unwrap it, and where it does not belong.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java Concurrency

    Java threads: starting work that runs alongside your code, the states a thread passes through, and platform vs virtual threads.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java Concurrency

    Deadlock in Java: how two locks taken in opposite orders stop a program, the four conditions, lock ordering, livelock and starvation.

    Intermediate to Advanced8 cards · 5 qnot started

  • Spring Core

    Bean scopes and lifecycle callbacks: how many instances of a bean exist, how long each lives, and who cleans it up.

    Intermediate to Advanced7 cards · 4 qnot started

  • Spring Boot

    Handling errors consistently in a REST API: custom exceptions, @ExceptionHandler, @RestControllerAdvice, status codes and one error body.

    Intermediate to Advanced7 cards · 5 qnot started

  • Spring Boot

    Spring Data JDBC vs Spring Data JPA: persistence context, dirty checking, lazy loading, aggregates, and when to choose each.

    Intermediate to Advanced7 cards · 4 qnot started

  • Spring Boot

    The JPA entity lifecycle: the four states an entity can be in, the operations that move it, and when its SQL runs.

    Advanced7 cards · 5 qnot started

  • Spring Boot

    Transactions with @Transactional: what it wraps, when it rolls back, why self-calls skip it, and REQUIRES_NEW.

    Intermediate to Advanced7 cards · 4 qnot started

  • Spring Boot

    Caching in Spring Boot: @Cacheable, @CachePut and @CacheEvict, cache keys, caching strategies, and the default provider's limit.

    Intermediate to Advanced7 cards · 5 qnot started

  • Java

    How a Java program runs: what javac produces, what the java command and the JVM do with it, and why one build runs on every machine.

    Beginner to Intermediate6 cards · 5 qnot started

  • Spring Core

    What a Spring bean is, the two interfaces behind the container, and the fixed lifecycle every bean follows.

    Beginner to Intermediate6 cards · 4 qnot started

  • Spring Boot

    What Spring Boot adds to Spring: @SpringBootApplication, auto-configuration, and the conditions that decide which beans it creates.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Boot

    Spring Boot starters and the embedded server: one dependency instead of a dozen, and a web server inside your own jar.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Boot

    Configuring a Boot application: where a property can come from, which source wins, profiles, and binding properties into code.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Boot

    Mapping HTTP requests to controller methods: verbs and paths, reading request data, and choosing the response.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Boot

    Validating request input with Bean Validation: constraint annotations, @Valid, and field-by-field error responses.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Boot

    Spring Data repositories: CRUD without SQL, queries derived from method names, @Query, and what save() really does.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Boot

    Finding why a Spring Boot API is slow: the N+1 query problem, slow remote calls, and measuring before optimising.

    Intermediate to Advanced6 cards · 4 qnot started

  • Design Patterns

    The Singleton pattern: guaranteeing a class has exactly one instance with a global access point, and why it is the most criticised of the 23.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Proxy pattern: a stand-in with the same interface as a real object that controls when and whether calls reach it, and the self-call it never sees.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Strategy pattern: putting each interchangeable algorithm behind one interface so the caller chooses it, and why in Python the strategy is often a function.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Observer pattern: letting many objects subscribe to one and be told when it changes, and the listener that is never unsubscribed.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Command pattern: turning a request into an object that can be queued, logged or undone, and what each command must remember to undo itself.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Template Method pattern: fixing the order of an algorithm's steps in a base class and letting subclasses supply the steps that differ.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Iterator pattern: walking a collection one element at a time without knowing how it is stored, and why a Python generator can be walked only once.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Visitor pattern: adding operations over a fixed set of classes as separate visitor classes, how double dispatch finds the right method, and why a new element class is costly.

    Intermediate to Advanced9 cards · 4 qnot started

  • Spring Core

    Wiring beans together: constructor injection, stereotype annotations, choosing between two candidates, and @Bean methods.

    Intermediate to Advanced7 cards · 5 qnot started

  • Design Patterns

    The Factory Method pattern: letting subclasses decide which class of object to create, so the code that uses the object never names it.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Builder pattern: constructing a complex object step by step, so a constructor with a dozen optional parameters is never needed.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Prototype pattern: creating new objects by copying a configured one, and the shallow copy trap that comes with it.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Decorator pattern: adding behaviour to an object by wrapping it in others with the same interface, and how it differs from Python's @ syntax.

    Intermediate to Advanced8 cards · 5 qnot started

  • Design Patterns

    The Composite pattern: treating a single object and a group of objects the same way, as in files and folders.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Flyweight pattern: sharing the common part of many small objects so that a program holding millions of them still fits in memory.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Chain of Responsibility pattern: passing a request along a chain of handlers until one deals with it, and ending every chain with an answer for requests nobody accepts.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Memento pattern: saving an object's state as a snapshot only that object can read, so it can be restored later, and keeping the snapshots from filling the memory.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Abstract Factory pattern: creating whole families of related objects through one interface, so a program can switch every product at once.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Adapter pattern: wrapping an existing class so it fits the interface a client already expects, without changing either side.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Facade pattern: one simple interface in front of a complex subsystem, with the subsystem's classes still there for the cases the facade does not cover.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Bridge pattern: splitting what something is from how it is done into two hierarchies, so they grow without multiplying classes.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The State pattern: giving each state of an object its own class, so behaviour changes when the state changes, and deciding which class chooses the next state.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Mediator pattern: routing the communication between many objects through one coordinator, and counting the links it removes.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Interpreter pattern: representing each rule of a small language as a class, evaluating a sentence as a tree of those objects, and knowing that parsing is a separate job.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    What design patterns are: named, reusable solutions to recurring object-oriented design problems, how the 23 classic ones are grouped, and when one costs more than it saves.

    Beginner to Intermediate8 cards · 5 qnot started

  • Design Patterns

    Reading UML class diagrams: the boxes, lines and arrowheads every design pattern is drawn with, and how each relationship looks in code.

    Beginner to Intermediate8 cards · 5 qnot started

  • Spring Core

    Dependency injection: why a class should be handed its dependencies instead of creating them, shown without Spring first.

    Beginner5 cards · 4 qnot started

  • Design Patterns

    Choosing a creational design pattern: telling Factory Method, Abstract Factory, Builder, Prototype and Singleton apart, and when a plain constructor is enough.

    Intermediate to Advanced5 cards · 4 qnot started

  • Design Patterns

    Choosing a structural design pattern: telling Adapter, Decorator, Facade, Proxy, Composite, Bridge and Flyweight apart by what each wrapper is for.

    Intermediate to Advanced5 cards · 4 qnot started

  • Design Patterns

    Choosing a behavioural design pattern: telling Strategy, State, Template Method, Command, Observer, Mediator, Chain of Responsibility and Decorator apart by who decides and how many objects take part.

    Intermediate to Advanced5 cards · 5 qnot started

  • API Design

    Authenticating API clients: API keys, sessions, bearer tokens, JWTs and mutual TLS, and which one suits each kind of caller.

    Beginner to Advanced12 cards · 8 qnot started

  • System Design

    The building blocks of a web system: DNS, CDNs, application servers and databases, and the path a request takes through them.

    Beginner to Intermediate11 cards · 8 qnot started

  • API Design

    REST and resource design: naming the things an API exposes and the paths that reach them, with filtering, sorting and actions that are not plain updates.

    Beginner to Advanced11 cards · 7 qnot started

  • API Design

    HTTP caching for APIs: telling clients and CDNs how long to keep a response, and using ETags to skip unchanged downloads and to stop two clients overwriting each other.

    Beginner to Advanced11 cards · 8 qnot started

  • System Design

    Load balancers, reverse proxies and API gateways: the three kinds of server that sit in front of yours, and the one job each is for.

    Beginner to Intermediate10 cards · 5 qnot started

  • System Design

    Client-server communication: polling, server-sent events, WebSockets and webhooks, chosen by who sends and how often.

    Beginner to Intermediate10 cards · 5 qnot started

  • System Design

    Software architectural styles: monoliths, layers, microservices, events and serverless, and the team and product each one fits.

    Beginner to Advanced10 cards · 5 qnot started

  • The OSI Model and Network Protocols

    How WebSocket, server-sent events and WebRTC keep a connection open, who may send on it, and how each one survives a drop.

    Beginner to Advanced10 cards · 6 qnot started

  • API Design

    HTTP methods for APIs: what GET, POST, PUT, PATCH and DELETE promise, and which are safe to repeat.

    Beginner to Intermediate10 cards · 7 qnot started

  • API Design

    API contracts: the fields, types and formats a client and server agree on, written down so machines can check them.

    Beginner to Advanced10 cards · 7 qnot started

  • API Design

    Protecting an API: the common API security risks, object-level checks, rate limits a client can act on, and what CORS does and does not do.

    Beginner to Advanced10 cards · 8 qnot started

  • System Design

    Requirements and trade-offs: deciding what a system must do and how well, so a design has something to be checked against.

    Beginner to Intermediate9 cards · 5 qnot started

  • System Design

    Caching: keeping copies of frequent reads close, deciding when they go stale, and the ways a cache can take a system down.

    Beginner to Advanced9 cards · 8 qnot started

  • System Design

    Scaling a web system up or out: bigger machines or more of them, what has to be stateless first, and what autoscaling cannot catch.

    Beginner to Advanced9 cards · 5 qnot started

  • System Design

    Message queues and publish/subscribe: handing work off without waiting, and choosing between one reader and many.

    Beginner to Intermediate9 cards · 6 qnot started

  • SOLID Principles

    Design rot and the SOLID principles: why working object-oriented code becomes hard to change, and the five principles that answer it.

    Beginner to Intermediate9 cards · 7 qnot started

  • SOLID Principles

    The Liskov substitution principle in SOLID: a subclass must work anywhere its parent does, keeping every promise the parent makes.

    Beginner to Intermediate9 cards · 5 qnot started

  • SOLID Principles

    The dependency inversion principle in SOLID: make business rules depend on abstractions they own, so databases and services can be swapped and faked in tests.

    Beginner to Intermediate9 cards · 5 qnot started

  • API Design

    HTTP status codes for APIs: choosing the code that tells a client what happened and what to do next.

    Beginner to Intermediate9 cards · 7 qnot started

  • API Design

    Asynchronous APIs: answering a long job with 202 Accepted and a status to check, and sending signed webhooks a receiver can trust.

    Beginner to Advanced9 cards · 5 qnot started

  • API Design

    Versioning an API: telling breaking changes from safe ones, and retiring an old version without stranding its clients.

    Beginner to Advanced9 cards · 6 qnot started

  • API Design

    REST, GraphQL and gRPC: what each API style exposes, and how to choose one for an integration.

    Beginner to Advanced9 cards · 5 qnot started

  • System Design

    Back-of-the-envelope estimation: turning users and their actions into requests a second, storage and downtime, before choosing a single part.

    Beginner to Intermediate8 cards · 6 qnot started

  • System Design

    API pagination with offsets and cursors: returning large results a page at a time without skipping rows or slowing down.

    Beginner to Intermediate8 cards · 5 qnot started

  • SOLID Principles

    The single responsibility principle in SOLID: give each class one reason to change, by splitting it along the people who ask for changes.

    Beginner to Intermediate8 cards · 4 qnot started

  • SOLID Principles

    The open/closed principle in SOLID: add new behaviour as new code, without editing classes that already work.

    Beginner to Intermediate8 cards · 4 qnot started

  • SOLID Principles

    The interface segregation principle in SOLID: give each client a small interface holding only the methods it calls.

    Beginner to Intermediate8 cards · 4 qnot started

  • Design Patterns

    The Factory Method pattern: letting subclasses decide which class of object to create, so the code that uses the object never names it.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Builder pattern: constructing a complex object step by step, so a constructor with a dozen optional parameters is never needed.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Singleton pattern: guaranteeing a class has exactly one instance with a global access point, and why it is the most criticised of the 23.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Proxy pattern: a stand-in with the same interface as a real object that controls when and whether calls reach it, and the self-call it never sees.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Strategy pattern: putting each interchangeable algorithm behind one interface so the caller chooses it, and why in Python the strategy is often a function.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Observer pattern: letting many objects subscribe to one and be told when it changes, and the listener that is never unsubscribed.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Command pattern: turning a request into an object that can be queued, logged or undone, and what each command must remember to undo itself.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Template Method pattern: fixing the order of an algorithm's steps in a base class and letting subclasses supply the steps that differ.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Iterator pattern: walking a collection one element at a time without knowing how it is stored, and why a Python generator can be walked only once.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Visitor pattern: adding operations over a fixed set of classes as separate visitor classes, how double dispatch finds the right method, and why a new element class is costly.

    Intermediate to Advanced9 cards · 4 qnot started

  • API Design

    API error responses: one error format a client can branch on, with enough detail to fix the request and nothing an attacker can use.

    Beginner to Intermediate8 cards · 5 qnot started

  • System Design

    System design heuristics: matching a pressure such as read-heavy traffic or global users to the pattern that answers it.

    Intermediate to Advanced7 cards · 5 qnot started

  • SOLID Principles

    Applying the SOLID principles together: diagnosing a class that breaks several, refactoring it safely behind tests, and knowing when to stop.

    Intermediate to Advanced7 cards · 5 qnot started

  • Design Patterns

    What design patterns are: named, reusable solutions to recurring object-oriented design problems, how the 23 classic ones are grouped, and when one costs more than it saves.

    Beginner to Intermediate8 cards · 5 qnot started

  • Design Patterns

    Reading UML class diagrams: the boxes, lines and arrowheads every design pattern is drawn with, and how each relationship looks in code.

    Beginner to Intermediate8 cards · 5 qnot started

  • Design Patterns

    The Abstract Factory pattern: creating whole families of related objects through one interface, so a program can switch every product at once.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Prototype pattern: creating new objects by copying a configured one, and the shallow copy trap that comes with it.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Adapter pattern: wrapping an existing class so it fits the interface a client already expects, without changing either side.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Decorator pattern: adding behaviour to an object by wrapping it in others with the same interface, and how it differs from Python's @ syntax.

    Intermediate to Advanced8 cards · 5 qnot started

  • Design Patterns

    The Facade pattern: one simple interface in front of a complex subsystem, with the subsystem's classes still there for the cases the facade does not cover.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Composite pattern: treating a single object and a group of objects the same way, as in files and folders.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Bridge pattern: splitting what something is from how it is done into two hierarchies, so they grow without multiplying classes.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Flyweight pattern: sharing the common part of many small objects so that a program holding millions of them still fits in memory.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The State pattern: giving each state of an object its own class, so behaviour changes when the state changes, and deciding which class chooses the next state.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Chain of Responsibility pattern: passing a request along a chain of handlers until one deals with it, and ending every chain with an answer for requests nobody accepts.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Mediator pattern: routing the communication between many objects through one coordinator, and counting the links it removes.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Memento pattern: saving an object's state as a snapshot only that object can read, so it can be restored later, and keeping the snapshots from filling the memory.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Interpreter pattern: representing each rule of a small language as a class, evaluating a sentence as a tree of those objects, and knowing that parsing is a separate job.

    Intermediate to Advanced8 cards · 4 qnot started

  • API Design

    Designing an API end to end: from requirements to reviewed endpoints, errors and a contract for one feature.

    Intermediate to Advanced7 cards · 6 qnot started

  • Spring Core

    Wiring beans together: constructor injection, stereotype annotations, choosing between two candidates, and @Bean methods.

    Intermediate to Advanced7 cards · 5 qnot started

  • Spring Boot

    Caching in Spring Boot: @Cacheable, @CachePut and @CacheEvict, cache keys, caching strategies, and the default provider's limit.

    Intermediate to Advanced7 cards · 5 qnot started

  • API Design

    Idempotency keys: letting a client retry a payment or an order after a timeout without it happening twice.

    Beginner to Advanced6 cards · 4 qnot started

  • Spring Core

    Dependency injection: why a class should be handed its dependencies instead of creating them, shown without Spring first.

    Beginner5 cards · 4 qnot started

  • Spring Boot

    Mapping HTTP requests to controller methods: verbs and paths, reading request data, and choosing the response.

    Intermediate to Advanced6 cards · 4 qnot started

  • Design Patterns

    Choosing a creational design pattern: telling Factory Method, Abstract Factory, Builder, Prototype and Singleton apart, and when a plain constructor is enough.

    Intermediate to Advanced5 cards · 4 qnot started

  • Design Patterns

    Choosing a structural design pattern: telling Adapter, Decorator, Facade, Proxy, Composite, Bridge and Flyweight apart by what each wrapper is for.

    Intermediate to Advanced5 cards · 4 qnot started

  • Design Patterns

    Choosing a behavioural design pattern: telling Strategy, State, Template Method, Command, Observer, Mediator, Chain of Responsibility and Decorator apart by who decides and how many objects take part.

    Intermediate to Advanced5 cards · 5 qnot started

  • Java Collections and Streams

    The Java Collections Framework: List, Set and Queue, what each promises, and which type to declare a variable with.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java Collections and Streams

    Java Optional: a return type that puts possible absence in the signature, how to unwrap it, and where it does not belong.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java

    Java polymorphism: how the runtime object chooses which overridden method runs, what the declared type decides, hiding, casts and instanceof.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java

    Java interfaces and abstract classes: naming a capability, sharing state, default methods, and choosing between the two.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java

    Java encapsulation: private fields, the four access levels, references that leak through getters and constructors, and composition against inheritance.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java Collections and Streams

    Sorting your own types in Java: Comparable for the natural order, Comparator for the rest, and the two ways a comparator goes wrong.

    Intermediate to Advanced9 cards · 5 qnot started

  • Spring Boot

    Spring Data JDBC vs Spring Data JPA: persistence context, dirty checking, lazy loading, aggregates, and when to choose each.

    Intermediate to Advanced7 cards · 4 qnot started

  • Algorithms

    Shortest paths in weighted graphs, in algorithms: Dijkstra's algorithm, Bellman-Ford and Floyd-Warshall, and how weights and pairs choose between them.

    Intermediate to Advanced11 cards · 6 qnot started

  • Data Structures

    Hash tables: the data structure that turns a key into an array index to find values in expected constant time, and what collisions, growth and bad keys do to it.

    Beginner to Intermediate10 cards · 6 qnot started

  • Algorithms

    Breadth-first and depth-first search in algorithms, and what they find: components, cycles, bipartite graphs and unweighted shortest paths.

    Intermediate to Advanced10 cards · 6 qnot started

  • Java Collections and Streams

    How a HashMap works: hashing to a bucket, collisions, resizing, the three map classes, and null keys.

    Intermediate to Advanced9 cards · 5 qnot started

  • Data Structures

    Arrays and strings: why reading by index is instant, why inserting in the middle is not, and how a dynamic array grows without slowing every append.

    Beginner to Intermediate9 cards · 4 qnot started

  • Data Structures

    Linked lists: nodes joined by references, so inserting and deleting is a rewire instead of a shift, at the price of reading by position.

    Beginner to Intermediate9 cards · 4 qnot started

  • Data Structures

    Stacks and queues: the two data structures defined by the order items leave in, last in first out or first in first out, and how to build each cheaply.

    Beginner to Intermediate9 cards · 4 qnot started

  • Data Structures

    Binary Search Trees: keeping keys in order so that search, insert and delete each follow one path, and why insertion order decides the cost.

    Beginner to Advanced9 cards · 6 qnot started

  • Data Structures

    Heaps: a complete binary tree stored in an array that always gives the smallest or largest item first, the data structure behind every priority queue.

    Beginner to Intermediate9 cards · 5 qnot started

  • Algorithms

    Minimum spanning trees in algorithms: the cut property, Kruskal's algorithm with union-find, Prim's algorithm with a heap, and why neither gives shortest paths.

    Intermediate to Advanced9 cards · 4 qnot started

  • Java

    Java arrays: a fixed run of values under one name, creating and filling one, zero-based indexes, and why an array cannot grow.

    Beginner to Intermediate8 cards · 5 qnot started

  • Java Collections and Streams

    The Java Collections Framework: List, Set and Queue, what each promises, and which type to declare a variable with.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java Collections and Streams

    ArrayList vs LinkedList: two lists with the same methods and opposite costs, how an ArrayList grows, and removing while iterating.

    Intermediate to Advanced8 cards · 6 qnot started

  • Java Collections and Streams

    Sets and queues: collections that decide what counts as a duplicate and what comes out next, and which class to use.

    Intermediate to Advanced8 cards · 5 qnot started

  • Data Structures

    Big O notation: how to describe the way a data structure operation's cost grows with its input, and why constants and smaller terms drop out.

    Beginner to Intermediate8 cards · 5 qnot started

  • Data Structures

    Analysing complexity: reading the time and space a function needs from its loops, its recursion and the built-in calls hidden inside them.

    Beginner to Intermediate8 cards · 5 qnot started

  • Data Structures

    Recursion: writing a function that calls itself on a smaller input, tracing it through the call stack, and replacing it with a loop when it runs too deep.

    Beginner to Intermediate8 cards · 5 qnot started

  • Data Structures

    Binary Trees: naming the parts of a tree, traversing it in four orders, counting height in edges, and writing functions that combine two subtrees' answers.

    Beginner to Intermediate8 cards · 4 qnot started

  • Data Structures

    Graph representations: storing vertices and edges as an adjacency list or an adjacency matrix, and choosing between them by how many edges there are.

    Beginner to Intermediate8 cards · 4 qnot started

  • Algorithms

    Ordering tasks so every dependency comes first, in algorithms: Kahn's algorithm, depth-first finishing times, and how each one finds a cycle.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Hash map patterns: complements, counts and canonical keys that turn a search inside a loop into one lookup, and the array used as its own hash map.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Prefix sums: precomputing running totals so any range sum is one subtraction, and counting the runs that hit a target with a hash map.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Monotonic stack: finding the next greater or smaller element of every position in one pass, with a stack kept in order.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Fast and slow pointers: two pointers moving at different speeds that find a list's middle, detect a cycle and locate where the cycle starts.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Linked list reversal: reversing a linked list in place with three references, and reversing part of a list or groups of nodes with a dummy node.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Heap patterns: keeping the top K items, merging sorted lists and tracking a running median with one heap or two.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Tree patterns: solving binary tree problems by passing values down or returning them up, level by level, or through both subtrees at once.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Grid traversal: treating a grid of cells as a graph for breadth-first and depth-first search, flood fills and searches from many starting cells.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Graph modelling: finding the vertices and edges hidden in a problem's wording, then solving it with a search, a topological sort or union-find.

    Intermediate to Advanced8 cards · 4 qnot started

  • Data Structures

    Tries: a tree with one node per letter, which answers whether any stored word starts with a prefix in time that ignores how many words there are.

    Beginner to Intermediate7 cards · 3 qnot started

  • Data Structures

    Union-find in data structures: tracking which items share a group with a parent array, merging groups, and counting components and detecting cycles in a graph.

    Intermediate to Advanced7 cards · 3 qnot started

  • Data Structures

    Choosing a data structure: listing a program's operations and their frequency, picking the structure that makes them cheap, and the built-ins Python, Java and TypeScript provide.

    Intermediate to Advanced7 cards · 4 qnot started

  • Algorithms

    Graph connectivity in algorithms: strongly connected components with Kosaraju's two passes, bridges and articulation points from low values, and choosing the tool.

    Intermediate to Advanced7 cards · 3 qnot started

  • Java

    Java equals, hashCode and toString: the defaults every object inherits, the contract between equals and hashCode, and how hash maps lose keys.

    Intermediate to Advanced8 cards · 6 qnot started

  • Data Structures

    Combining data structures: an LRU cache from a hash map and a doubly linked list, a set with O(1) random picks from an array and a map, and keeping both parts in step.

    Intermediate6 cards · 3 qnot started

  • Java

    Java methods: declaring and calling them, signatures, parameters and arguments, pass-by-value, and overloading.

    Beginner to Intermediate10 cards · 6 qnot started

  • Java

    Java encapsulation: private fields, the four access levels, references that leak through getters and constructors, and composition against inheritance.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java

    Java variables and types: primitives and references, what assignment copies, the eight primitive types, money, and what the compiler checks.

    Beginner to Intermediate9 cards · 5 qnot started

  • Java Collections and Streams

    Sorting your own types in Java: Comparable for the natural order, Comparator for the rest, and the two ways a comparator goes wrong.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java Collections and Streams

    Java generics: type parameters, what the compiler checks, type erasure, wildcards, and what erasure forbids.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java Collections and Streams

    Java streams: pipelines over a source, lazy evaluation, map and flatMap, collectors, single use, and when parallel streams pay.

    Intermediate to Advanced10 cards · 6 qnot started

  • System Design

    Caching: keeping copies of frequent reads close, deciding when they go stale, and the ways a cache can take a system down.

    Beginner to Advanced9 cards · 8 qnot started

  • Algorithms

    Merge sort: the sorting algorithm that splits an array in half, sorts each half and merges them, in O(n log n) time on every input.

    Intermediate8 cards · 4 qnot started

  • Java

    Java inheritance: what extends gives a subclass, constructor order, overriding against overloading, super, private fields and final.

    Intermediate to Advanced10 cards · 5 qnot started

  • Java

    Java classes and objects: classes as descriptions, creating objects with new, constructors, this, and static against instance members.

    Beginner to Intermediate9 cards · 6 qnot started

  • Java

    Java polymorphism: how the runtime object chooses which overridden method runs, what the declared type decides, hiding, casts and instanceof.

    Intermediate to Advanced9 cards · 5 qnot started

  • SOLID Principles

    Design rot and the SOLID principles: why working object-oriented code becomes hard to change, and the five principles that answer it.

    Beginner to Intermediate9 cards · 7 qnot started

  • SOLID Principles

    The Liskov substitution principle in SOLID: a subclass must work anywhere its parent does, keeping every promise the parent makes.

    Beginner to Intermediate9 cards · 5 qnot started

  • SOLID Principles

    The dependency inversion principle in SOLID: make business rules depend on abstractions they own, so databases and services can be swapped and faked in tests.

    Beginner to Intermediate9 cards · 5 qnot started

  • Design Patterns

    The Factory Method pattern: letting subclasses decide which class of object to create, so the code that uses the object never names it.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Builder pattern: constructing a complex object step by step, so a constructor with a dozen optional parameters is never needed.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Singleton pattern: guaranteeing a class has exactly one instance with a global access point, and why it is the most criticised of the 23.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Proxy pattern: a stand-in with the same interface as a real object that controls when and whether calls reach it, and the self-call it never sees.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Strategy pattern: putting each interchangeable algorithm behind one interface so the caller chooses it, and why in Python the strategy is often a function.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Observer pattern: letting many objects subscribe to one and be told when it changes, and the listener that is never unsubscribed.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Command pattern: turning a request into an object that can be queued, logged or undone, and what each command must remember to undo itself.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Template Method pattern: fixing the order of an algorithm's steps in a base class and letting subclasses supply the steps that differ.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Iterator pattern: walking a collection one element at a time without knowing how it is stored, and why a Python generator can be walked only once.

    Intermediate to Advanced9 cards · 4 qnot started

  • Design Patterns

    The Visitor pattern: adding operations over a fixed set of classes as separate visitor classes, how double dispatch finds the right method, and why a new element class is costly.

    Intermediate to Advanced9 cards · 4 qnot started

  • Java

    Java interfaces and abstract classes: naming a capability, sharing state, default methods, and choosing between the two.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java

    Java encapsulation: private fields, the four access levels, references that leak through getters and constructors, and composition against inheritance.

    Intermediate to Advanced8 cards · 5 qnot started

  • SOLID Principles

    The single responsibility principle in SOLID: give each class one reason to change, by splitting it along the people who ask for changes.

    Beginner to Intermediate8 cards · 4 qnot started

  • SOLID Principles

    The open/closed principle in SOLID: add new behaviour as new code, without editing classes that already work.

    Beginner to Intermediate8 cards · 4 qnot started

  • SOLID Principles

    The interface segregation principle in SOLID: give each client a small interface holding only the methods it calls.

    Beginner to Intermediate8 cards · 4 qnot started

  • Design Patterns

    What design patterns are: named, reusable solutions to recurring object-oriented design problems, how the 23 classic ones are grouped, and when one costs more than it saves.

    Beginner to Intermediate8 cards · 5 qnot started

  • Design Patterns

    Reading UML class diagrams: the boxes, lines and arrowheads every design pattern is drawn with, and how each relationship looks in code.

    Beginner to Intermediate8 cards · 5 qnot started

  • Design Patterns

    The Abstract Factory pattern: creating whole families of related objects through one interface, so a program can switch every product at once.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Prototype pattern: creating new objects by copying a configured one, and the shallow copy trap that comes with it.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Adapter pattern: wrapping an existing class so it fits the interface a client already expects, without changing either side.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Decorator pattern: adding behaviour to an object by wrapping it in others with the same interface, and how it differs from Python's @ syntax.

    Intermediate to Advanced8 cards · 5 qnot started

  • Design Patterns

    The Facade pattern: one simple interface in front of a complex subsystem, with the subsystem's classes still there for the cases the facade does not cover.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Composite pattern: treating a single object and a group of objects the same way, as in files and folders.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Bridge pattern: splitting what something is from how it is done into two hierarchies, so they grow without multiplying classes.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Flyweight pattern: sharing the common part of many small objects so that a program holding millions of them still fits in memory.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The State pattern: giving each state of an object its own class, so behaviour changes when the state changes, and deciding which class chooses the next state.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Chain of Responsibility pattern: passing a request along a chain of handlers until one deals with it, and ending every chain with an answer for requests nobody accepts.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Mediator pattern: routing the communication between many objects through one coordinator, and counting the links it removes.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Memento pattern: saving an object's state as a snapshot only that object can read, so it can be restored later, and keeping the snapshots from filling the memory.

    Intermediate to Advanced8 cards · 4 qnot started

  • Design Patterns

    The Interpreter pattern: representing each rule of a small language as a class, evaluating a sentence as a tree of those objects, and knowing that parsing is a separate job.

    Intermediate to Advanced8 cards · 4 qnot started

  • Java

    Java equals, hashCode and toString: the defaults every object inherits, the contract between equals and hashCode, and how hash maps lose keys.

    Intermediate to Advanced8 cards · 6 qnot started

  • SOLID Principles

    Applying the SOLID principles together: diagnosing a class that breaks several, refactoring it safely behind tests, and knowing when to stop.

    Intermediate to Advanced7 cards · 5 qnot started

  • Design Patterns

    Choosing a creational design pattern: telling Factory Method, Abstract Factory, Builder, Prototype and Singleton apart, and when a plain constructor is enough.

    Intermediate to Advanced5 cards · 4 qnot started

  • Design Patterns

    Choosing a structural design pattern: telling Adapter, Decorator, Facade, Proxy, Composite, Bridge and Flyweight apart by what each wrapper is for.

    Intermediate to Advanced5 cards · 4 qnot started

  • Design Patterns

    Choosing a behavioural design pattern: telling Strategy, State, Template Method, Command, Observer, Mediator, Chain of Responsibility and Decorator apart by who decides and how many objects take part.

    Intermediate to Advanced5 cards · 5 qnot started

Algorithms

38 topics
  • Algorithms

    Elementary sorting: bubble, selection and insertion sort traced pass by pass, and the one place each still beats an O(n log n) algorithm.

    Intermediate11 cards · 5 qnot started

  • Algorithms

    Linear-time sorting: counting, radix and bucket sort, which beat the comparison bound by reading the keys' values, and the inputs each one needs.

    Intermediate to Advanced11 cards · 5 qnot started

  • Algorithms

    Shortest paths in weighted graphs, in algorithms: Dijkstra's algorithm, Bellman-Ford and Floyd-Warshall, and how weights and pairs choose between them.

    Intermediate to Advanced11 cards · 6 qnot started

  • Algorithms

    Dynamic programming: solving a problem from the answers to its overlapping subproblems, top-down with memoisation or bottom-up with a table.

    Intermediate to Advanced10 cards · 6 qnot started

  • Algorithms

    Breadth-first and depth-first search in algorithms, and what they find: components, cycles, bipartite graphs and unweighted shortest paths.

    Intermediate to Advanced10 cards · 6 qnot started

  • Java Collections and Streams

    Sorting your own types in Java: Comparable for the natural order, Comparator for the rest, and the two ways a comparator goes wrong.

    Intermediate to Advanced9 cards · 5 qnot started

  • Algorithms

    Binary search: finding a value in a sorted array by halving the range at every step, with the invariant, the midpoint and the boundaries that make it correct.

    Intermediate9 cards · 5 qnot started

  • Algorithms

    Quicksort: sorting by partitioning around a pivot, fast on average, slow on the inputs a bad pivot meets, and the source of quickselect.

    Intermediate to Advanced9 cards · 4 qnot started

  • Algorithms

    Backtracking: building every candidate solution one choice at a time, undoing each choice, and pruning branches that cannot succeed.

    Intermediate to Advanced9 cards · 4 qnot started

  • Algorithms

    Knapsack and grid dynamic programming: filling a table over items and capacities, or over the cells of a grid, and the loop orders that change the answer.

    Intermediate to Advanced9 cards · 4 qnot started

  • Algorithms

    Sequence dynamic programming in algorithms: longest common subsequence, edit distance and longest increasing subsequence, each a table over prefixes.

    Intermediate to Advanced9 cards · 4 qnot started

  • Algorithms

    Minimum spanning trees in algorithms: the cut property, Kruskal's algorithm with union-find, Prim's algorithm with a heap, and why neither gives shortest paths.

    Intermediate to Advanced9 cards · 4 qnot started

  • Data Structures

    Big O notation: how to describe the way a data structure operation's cost grows with its input, and why constants and smaller terms drop out.

    Beginner to Intermediate8 cards · 5 qnot started

  • Data Structures

    Analysing complexity: reading the time and space a function needs from its loops, its recursion and the built-in calls hidden inside them.

    Beginner to Intermediate8 cards · 5 qnot started

  • Data Structures

    Recursion: writing a function that calls itself on a smaller input, tracing it through the call stack, and replacing it with a loop when it runs too deep.

    Beginner to Intermediate8 cards · 5 qnot started

  • Algorithms

    Divide and conquer: designing an algorithm by splitting a problem, solving the parts recursively and combining them, then reading its cost from a recurrence.

    Intermediate to Advanced8 cards · 4 qnot started

  • Algorithms

    Merge sort: the sorting algorithm that splits an array in half, sorts each half and merges them, in O(n log n) time on every input.

    Intermediate8 cards · 4 qnot started

  • Algorithms

    Choosing a sorting algorithm: picking a sort by memory, stability, worst case and keys, the n log n limit on comparison sorts, and built-in sorts.

    Intermediate to Advanced8 cards · 4 qnot started

  • Algorithms

    Greedy algorithms: taking the locally best choice at every step, proving it with an exchange argument, and disproving it with a counterexample.

    Intermediate to Advanced8 cards · 4 qnot started

  • Algorithms

    Ordering tasks so every dependency comes first, in algorithms: Kahn's algorithm, depth-first finishing times, and how each one finds a cycle.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Solving an unseen problem: a fixed sequence of steps from clarifying the input to tracing the code, so a coding problem never starts from a blank page.

    Intermediate to Advanced8 cards · 5 qnot started

  • Coding Interview Patterns

    Two pointers: walking a sorted array from both ends, or rewriting it in place with a read and a write pointer, and the precondition each needs.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Sliding window: keeping a running answer for a contiguous run as it slides, with a fixed size or one that grows and shrinks, and the inputs that break it.

    Intermediate to Advanced8 cards · 5 qnot started

  • Coding Interview Patterns

    Prefix sums: precomputing running totals so any range sum is one subtraction, and counting the runs that hit a target with a hash map.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Bit manipulation: reading and changing single bits with AND, OR, XOR and shifts, and where Python, Java and TypeScript give different answers.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Fast and slow pointers: two pointers moving at different speeds that find a list's middle, detect a cycle and locate where the cycle starts.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Intervals: merging, inserting and intersecting ranges after sorting them by start, and counting the most that overlap at once.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Modified binary search: binary search on a condition instead of a value, on a rotated array, and over the possible answers to a problem.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Tree patterns: solving binary tree problems by passing values down or returning them up, level by level, or through both subtrees at once.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Grid traversal: treating a grid of cells as a graph for breadth-first and depth-first search, flood fills and searches from many starting cells.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Graph modelling: finding the vertices and edges hidden in a problem's wording, then solving it with a search, a topological sort or union-find.

    Intermediate to Advanced8 cards · 4 qnot started

  • Coding Interview Patterns

    Optimising a solution: finding the step that dominates a solution's cost and removing it with a standard move, and knowing when to stop.

    Intermediate to Advanced8 cards · 4 qnot started

  • Algorithms

    Heapsort: sorting in place in O(n log n) time on every input by building a heap and extracting its largest item, one at a time.

    Intermediate7 cards · 3 qnot started

  • Algorithms

    Choosing between divide and conquer, dynamic programming, greedy and backtracking in algorithms, by how a problem's subproblems behave.

    Intermediate to Advanced7 cards · 3 qnot started

  • Algorithms

    Graph connectivity in algorithms: strongly connected components with Kosaraju's two passes, bridges and articulation points from low values, and choosing the tool.

    Intermediate to Advanced7 cards · 3 qnot started

  • Coding Interview Patterns

    Choosing a pattern: reading the cues in a coding problem's wording to pick the pattern that fits, and telling a real cue from a keyword.

    Intermediate to Advanced7 cards · 4 qnot started

  • Java Collections and Streams

    Java lambdas and functional interfaces: passing behaviour as an argument, the four core interfaces, method references and captured variables.

    Intermediate to Advanced9 cards · 5 qnot started

  • System Design

    Caching: keeping copies of frequent reads close, deciding when they go stale, and the ways a cache can take a system down.

    Beginner to Advanced9 cards · 8 qnot started

  • The OSI Model and Network Protocols

    HTTP on the wire: what a request and response look like, and what HTTP/2 and HTTP/3 change about the connection under them.

    Beginner to Advanced10 cards · 6 qnot started

  • API Design

    HTTP methods for APIs: what GET, POST, PUT, PATCH and DELETE promise, and which are safe to repeat.

    Beginner to Intermediate10 cards · 7 qnot started

  • API Design

    HTTP status codes for APIs: choosing the code that tells a client what happened and what to do next.

    Beginner to Intermediate9 cards · 7 qnot started

  • Spring Core

    Bean scopes and lifecycle callbacks: how many instances of a bean exist, how long each lives, and who cleans it up.

    Intermediate to Advanced7 cards · 4 qnot started

  • Spring Boot

    Handling errors consistently in a REST API: custom exceptions, @ExceptionHandler, @RestControllerAdvice, status codes and one error body.

    Intermediate to Advanced7 cards · 5 qnot started

  • Spring Boot

    Spring Data JDBC vs Spring Data JPA: persistence context, dirty checking, lazy loading, aggregates, and when to choose each.

    Intermediate to Advanced7 cards · 4 qnot started

  • Spring Boot

    The JPA entity lifecycle: the four states an entity can be in, the operations that move it, and when its SQL runs.

    Advanced7 cards · 5 qnot started

  • Spring Boot

    Transactions with @Transactional: what it wraps, when it rolls back, why self-calls skip it, and REQUIRES_NEW.

    Intermediate to Advanced7 cards · 4 qnot started

  • Spring Boot

    Caching in Spring Boot: @Cacheable, @CachePut and @CacheEvict, cache keys, caching strategies, and the default provider's limit.

    Intermediate to Advanced7 cards · 5 qnot started

  • System Design

    Client-server communication: polling, server-sent events, WebSockets and webhooks, chosen by who sends and how often.

    Beginner to Intermediate10 cards · 5 qnot started

  • Spring Core

    What a Spring bean is, the two interfaces behind the container, and the fixed lifecycle every bean follows.

    Beginner to Intermediate6 cards · 4 qnot started

  • Spring Boot

    What Spring Boot adds to Spring: @SpringBootApplication, auto-configuration, and the conditions that decide which beans it creates.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Boot

    Spring Boot starters and the embedded server: one dependency instead of a dozen, and a web server inside your own jar.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Boot

    Configuring a Boot application: where a property can come from, which source wins, profiles, and binding properties into code.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Boot

    Mapping HTTP requests to controller methods: verbs and paths, reading request data, and choosing the response.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Boot

    Validating request input with Bean Validation: constraint annotations, @Valid, and field-by-field error responses.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Boot

    Spring Data repositories: CRUD without SQL, queries derived from method names, @Query, and what save() really does.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Boot

    Finding why a Spring Boot API is slow: the N+1 query problem, slow remote calls, and measuring before optimising.

    Intermediate to Advanced6 cards · 4 qnot started

  • Spring Core

    Wiring beans together: constructor injection, stereotype annotations, choosing between two candidates, and @Bean methods.

    Intermediate to Advanced7 cards · 5 qnot started

  • Spring Core

    Dependency injection: why a class should be handed its dependencies instead of creating them, shown without Spring first.

    Beginner5 cards · 4 qnot started

  • System Design

    The building blocks of a web system: DNS, CDNs, application servers and databases, and the path a request takes through them.

    Beginner to Intermediate11 cards · 8 qnot started

Concurrency

6 topics
  • Java Concurrency

    Why shared state breaks between threads: race conditions, non-atomic operations, visibility, and choosing volatile, atomics or locks.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java Concurrency

    Locks in Java: what synchronized guarantees, which object it locks, reentrancy, ReentrantLock, and what a lock cannot protect.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java Concurrency

    Executors and futures: running tasks on a thread pool, getting results back, CompletableFuture, and shutting a pool down.

    Intermediate to Advanced9 cards · 5 qnot started

  • Java Concurrency

    Java threads: starting work that runs alongside your code, the states a thread passes through, and platform vs virtual threads.

    Intermediate to Advanced8 cards · 5 qnot started

  • Java Concurrency

    Deadlock in Java: how two locks taken in opposite orders stop a program, the four conditions, lock ordering, livelock and starvation.

    Intermediate to Advanced8 cards · 5 qnot started

  • Spring Core

    Bean scopes and lifecycle callbacks: how many instances of a bean exist, how long each lives, and who cleans it up.

    Intermediate to Advanced7 cards · 4 qnot started

  • API Design

    Authenticating API clients: API keys, sessions, bearer tokens, JWTs and mutual TLS, and which one suits each kind of caller.

    Beginner to Advanced12 cards · 8 qnot started

  • API Design

    OAuth 2.0 and OpenID Connect: letting an application act for a user without their password, and learning who that user is.

    Beginner to Advanced11 cards · 7 qnot started

  • API Design

    Protecting an API: the common API security risks, object-level checks, rate limits a client can act on, and what CORS does and does not do.

    Beginner to Advanced10 cards · 8 qnot started

  • Spring Boot

    Validating request input with Bean Validation: constraint annotations, @Valid, and field-by-field error responses.

    Intermediate to Advanced6 cards · 4 qnot started

  • System Design

    Scaling a web system up or out: bigger machines or more of them, what has to be stateless first, and what autoscaling cannot catch.

    Beginner to Advanced9 cards · 5 qnot started

  • Java

    Java exceptions: try, catch and finally, checked and unchecked exceptions, catching, declaring and wrapping, and try-with-resources.

    Beginner to Advanced10 cards · 6 qnot started

  • Spring Boot

    Handling errors consistently in a REST API: custom exceptions, @ExceptionHandler, @RestControllerAdvice, status codes and one error body.

    Intermediate to Advanced7 cards · 5 qnot started

Testing

1 topic
  • Spring Core

    Dependency injection: why a class should be handed its dependencies instead of creating them, shown without Spring first.

    Beginner5 cards · 4 qnot started