Category
Both are regions of memory a program uses, with fundamentally different allocation strategies and lifetimes. The stack holds function call frames. Each call pushes a frame containing parameters,
Because computers store most decimals in binary floating point, and 0.1 has no exact binary representation — exactly as 1/3 has no exact decimal representation. The mechanism. Binary fractions are
The distinction is about who calls whom, and it is usually summarised as inversion of control. With a library, you are in control. You write the application, and you call the library when you want
Yes, and this surprises people who assume garbage collection makes leaks impossible. It removes one class of leak and leaves another entirely intact. What garbage collection actually does. It
Compiled languages translate source code into machine code before execution. Interpreted languages translate and execute it during execution. The distinction is genuinely blurrier than the textbook
Technical debt is the accumulated cost of choosing an expedient implementation over a better one. The metaphor, coined by Ward Cunningham, is precise and worth taking seriously: you borrow time now
Big O describes how an algorithm's cost grows as the input grows. It is a statement about the shape of the growth curve, not about speed in any absolute sense. What it deliberately ignores: Constant
A process is an independent running program with its own memory space. A thread is a unit of execution inside a process, sharing that process's memory with its sibling threads. What a process owns:
Synchronous code runs one statement after another, and each waits for the previous to finish. Asynchronous code starts an operation and continues without waiting, handling the result when it arrives.
If passwords are stored as written, anyone who obtains the database obtains every account immediately. That includes an attacker exploiting an unrelated vulnerability, a backup left accessible, or an
Semantic versioning encodes intent in a three-part number. The major version increments on a breaking change, the minor on a backwards-compatible addition, and the patch on a backwards-compatible
SameSite controls whether a cookie is sent on requests originating from a different site. It exists primarily to mitigate cross-site request forgery, where a malicious page causes your browser to
PUT replaces a resource entirely with the representation you send. PATCH applies a partial modification. The distinction determines what happens to fields you do not mention, and that is where most
Most slow builds are slow because the cache is being invalidated unnecessarily, not because the work itself is expensive. Each instruction produces a layer, and once one is invalidated every
Both make data survive a container being removed, and they differ in who manages the storage. A bind mount maps a specific path on the host into the container. You control exactly where the data
ACID names four guarantees a database provides around transactions. Atomicity means all or nothing. A transaction that updates several rows either applies completely or leaves no trace. A crash
The distinction is less about query language than about what the database guarantees and what shape of data it is optimised for. Relational databases store data in tables with a fixed schema and
Indexes speed up reads by maintaining an ordered structure alongside the table, and that structure has to be kept correct on every write. Every insert, update and delete must update every affected
Stashing takes your uncommitted changes, saves them aside, and returns the working tree to a clean state matching the last commit. The changes are not lost; they are stored on a stack you can reapply
A conflict occurs when two branches changed the same region of a file and Git cannot determine which version is correct. It is not an error, and it does not mean anyone did anything wrong. Git
A promise that rejects with nothing attached to handle it produces an unhandled rejection, and modern Node treats that as fatal by default. The process exits. This changed from earlier versions where
Node runs your JavaScript on a single thread. It achieves concurrency not by running code in parallel but by never waiting: operations that would block, such as reading a file or making a network
Both cache something between renders. Memoising a value caches a computed result; memoising a callback caches a function identity. They are the same mechanism applied to different things, and both
The dependency array tells React which values the effect uses, so it can decide whether to run it again after a render. Omitting the array runs the effect after every render. Passing an empty array