TRT
Sign in
mediumCorecoding

How would you build a polymorphic catalog that stores mixed items and destroys them safely?

Design an abstract Item with virtual loan and print behavior, unique ownership for mixed storage, and full teardown without slicing.

TRT practice prompt — not a verified question from a named employer.

The Runtime Theory Team2 min read
Learn it firstProject: A Polymorphic Library CataloguePro — members onlyCombine inheritance, virtual dispatch, and safe teardown into a catalog that stores mixed items behind base handles and reports per-kind loan periods.

A strong answer

A strong candidate frames How would you build a polymorphic catalog that stores mixed items and destroys them safely? around the exact memory layout, compiler semantics, and hardware execution model covered in Project: A Polymorphic Library Catalogue. Design an abstract Item with virtual loan and print behavior, unique ownership for mixed storage, and full teardown without slicing.

A complete C++17 catalog that combines the module ideas: an abstract base, virtual behavior, safe teardown, and unique ownership:

One vector holds three kinds. One loop prints three formats and three loan periods. No branch tests the kind, and no manual release appears.

In a production interview, always connect the specification rule to its concrete runtime consequence: state what lives on the stack versus the heap or static storage segment, how the compiler or operating system validates alignments, lifetimes, and error codes, and what happens under adversarial or boundary inputs (such as zero-length buffers, integer overflow, concurrent mutation, or partial I/O). Backing your explanation with a small trace of register/memory state transitions immediately separates senior systems engineers from candidates who only memorized syntax.

What the interviewer is listening for

  • Mastery of core invariant: Build a mixed catalog using base handles and unique ownership.
  • Mastery of core invariant: Use virtual dispatch for per-kind loan and print behavior.
  • Mastery of core invariant: Ensure complete teardown through a virtual base destructor.
  • Hardware and ABI awareness: Explaining how sizes, alignments, calling conventions, or kernel boundaries behave on real 64-bit targets rather than relying on implementation-defined assumptions.
  • Defensive engineering: Naming the exact compiler flags (-Wall -Wextra -Werror), static analyzers, or runtime sanitizers (-fsanitize=address,undefined,thread) that verify correctness in CI.

Common mistakes

  • Explaining only surface syntax without tracing the underlying memory addresses, ownership lifetime, or kernel/user-space state transitions.
  • Assuming undefined behavior (such as signed overflow, uninitialized reads, strict-aliasing violations, or dangling pointers) will "just work" because it passed an unoptimized -O0 debug build.
  • Ignoring return codes, partial reads/writes, alignment padding, or cleanup paths when an allocation or syscall fails midway through a function.

This answer walks

Practice follow-ups

  1. 01What happens if you store the items by value rather than by handle?
  2. 02How would you add a new Journal kind without touching the reporting loop?

Not started

Sign in to save your learning progress.

Sign in to save