Skip to content
tezvyn:

⚙️Backend Dev

Backend engineering, APIs, and databases

529 bites

Test yourself: Top 30 intermediate Backend Dev interview questionsMultiple choice, with the correct answer and why it is correct on every question. Free, no sign-in.

Intermediate everything in Backend Dev, page 8

intermediate2 min read

Heap file versus clustered index

A heap stores rows unordered with cheap inserts but no inherent ordering; a clustered or index-organized table stores rows in primary-key order, giving fast key range reads but costlier inserts and page…

intermediate1 min read

Database checkpoints with WAL

A checkpoint flushes dirty pages and records a known-good point so recovery can start later in the log; frequent checkpoints shorten recovery but add I/O spikes, infrequent ones lengthen…

intermediate1 min read

B-Tree versus Hash indexes

B-Trees keep keys sorted, supporting equality, range, prefix, and ORDER BY; hash indexes give O(1) equality only, no ranges or ordering.

intermediate1 min read

What is a covering index?

A covering index contains every column a query needs so the engine answers from the index alone, skipping the table heap; build it by including filter, join, and selected columns.

intermediate1 min read

Trade-offs of adding indexes to a table

Indexes speed reads but slow writes since every INSERT, UPDATE, and DELETE must maintain them; they consume storage and can be unused on low-selectivity columns.

intermediate2 min read

What is a query execution plan?

The plan is the optimizer's chosen tree of operators; run EXPLAIN or EXPLAIN ANALYZE; watch for sequential scans, bad row estimates, and costly joins.

intermediate1 min read

Two-Phase Locking and serializability

A growing phase only acquires locks, a shrinking phase only releases, no lock taken after one is freed.

intermediate1 min read

How MVCC enables non-blocking reads

Writers create new row versions instead of overwriting, readers see a consistent snapshot, so readers never block writers.

intermediate1 min read

3NF versus BCNF and the overlapping-key gap

BCNF requires every determinant be a superkey; 3NF allows exceptions for prime attributes.

intermediate1 min read

Adjacency List versus Nested Set for hierarchies

Adjacency list is simple writes but recursive reads; nested set is fast subtree reads but costly writes.

intermediate2 min read

Materialization and Pipelining

Two query-execution strategies: materialization writes each operator's full output to disk before the next reads it, while pipelining streams tuples operator-to-operator without intermediate storage.

intermediate1 min read

Design a graceful worker pool in Go

Buffered job channel, fixed worker goroutines, WaitGroup to await in-flight work, context cancellation to stop intake.

intermediate2 min read

cgo threading challenges with multi-threaded C libraries

Cgo calls run on a dedicated OS thread and detach the P; thread-local state and callbacks into Go are fragile; solutions include LockOSThread, minimizing crossings, and a dedicated…

intermediate2 min read

Cancellation and cleanup: Go context/errgroup vs Tokio

Go propagates cancellation via context.Context that goroutines must poll, with errgroup canceling siblings on first error; Tokio cancels by dropping futures, which stops them at await…

intermediate2 min read

Go scheduler work-stealing and blocking syscalls

The GMP model runs goroutines (G) on OS threads (M) attached to logical processors (P); idle P's steal half of another P's run queue; on a blocking syscall the M detaches with its G.

intermediate2 min read

Implicit Go interfaces versus explicit Rust trait impls

Go's implicit satisfaction enables decoupling and retrofitting but hides who implements what and risks accidental conformance; Rust's explicit impls aid discovery, refactoring…

intermediate2 min read

anyhow versus thiserror in Rust error handling

Anyhow gives one opaque dynamic error type for applications where you mostly propagate and report; thiserror derives concrete typed enums for libraries so callers can match on variants.

intermediate2 min read

Go if err != nil versus Rust's ? operator

Go's explicit checks are verbose but make every error site visible; Rust's ? propagates concisely while still forcing the error into the type, reducing boilerplate.

intermediate2 min read

Designing a logging abstraction: Go interfaces vs Rust traits

Define a Logger interface/trait with a write method; Go interfaces are always dynamically dispatched; Rust lets you choose static dispatch (impl Trait/generics) or…

intermediate2 min read

Go slices versus Rust Vec growth and reallocation

Both are a (pointer, length, capacity) triple over a heap buffer that reallocates and copies on growth, roughly doubling; key difference is Go slices share backing arrays and have no ownership…

We are hiring for this. Every open role lists the topics its interview covers, so you can prepare for the real thing rather than guessing.

See open roles