Interviewing

How to Prepare for the Python Data Engineering Round

Not the algorithms round. The one about messy data and code someone will merge.

4 parts38 steps~9h total
Start this plan

It opens on your dashboard and ticks itself off as you go. Every step below is a chapter or an exercise that already ships.

01

When you finish, you can

You can transform a real dataset, defend the edge cases, and be reviewed.

Screen day You can pass a live Python screen

02

The plan, 4 parts

Ordered by what each one buys you, not by topic. Every step says why it is here.

  1. Part 01 · ~2h

    The transform they actually ask for

    You reach for the right structure and keep the grain deliberate.

    Skip this if you group, index and join in memory without thinking.

    1. SectionThink in records, not syntax6 minA row is a record with a contract. That framing lasts.
    2. SectionIndex once, join many6 minThe nested loop is the first thing an interviewer watches for.
    3. SectionGrouping records by key6 mindefaultdict and Counter. Reaching for them is the fluency signal.
    4. SectionDedupe by business key6 minWhich key, and which row wins. Say both out loud.
    5. ExerciseJoin two feeds and measure the fan-out35 minin the studioJoin two feeds and measure the fan-out. Same trap as in SQL.
    6. ExerciseSessionize an unsorted event feed35 minin the studioSessionise an unsorted feed. The classic live-coding prompt.
    7. InterviewMerging a directory of CSVs6 minLooks like a one-liner, hides a quadratic. They are watching for it.
    8. QuestionsPython · Approach & data structures15 minWhich structure, given the shape and the size. Say why.
  2. Part 02 · ~2h

    Bad rows, types and money

    You handle malformed input on purpose instead of crashing or dropping.

    Skip this if you already split good rows from rejects with a reason.

    1. SectionNulls are not all the same6 minMissing, empty and zero are three things. Conflating them loses rows.
    2. SectionSafe casting at the boundary6 minA failed cast becomes a null. Silently, unless you look.
    3. SectionMoney and decimal correctness7 minFloats for money is the fastest way to fail a fintech screen.
    4. InterviewMoney without floats6 minAsked directly at Wise. Integers or Decimal, and never both.
    5. SectionWarnings vs rejections vs fatal6 minOne bad row should not fail the job. Where is the line?
    6. SectionRejected-row reports6 minDropping rows silently is the answer that ends the round early.
    7. ExerciseAllocate an amount without losing a cent35 minin the studioSplit an amount three ways without losing a cent. Rounding, live.
    8. ExerciseUnify the schemas of many files45 minin the studioFiles that disagree about their columns. What real ingestion is.
    9. InterviewMutable vs immutable6 minThe opener on most Python screens. Half the surprises trace here.
    10. QuestionsPython · Debug & fix15 minCode that runs and is wrong. The take-home failure mode.
  3. Part 03 · ~2h

    When it does not fit in memory

    You can process more data than you have RAM, and say why it works.

    Skip this if you already reason in passes and bounded state.

    1. SectionGenerators and yield6 minOne pass, one row resident. The whole answer starts here.
    2. SectionGenerator pipelines6 minCompose stages without materialising between them.
    3. SectionMemory safety & backpressure6 minName the thing that grows. That is the whole scaling answer.
    4. SectionChunking before bigger tools6 min"I would use Spark" is not an answer until chunking failed.
    5. SectionThe GIL and why it shapes every choice7 minAsked constantly. The wrong answer is "Python cannot do concurrency".
    6. SectionThreads, processes or asyncio6 minI/O-bound or CPU-bound decides it. Say which one you are in.
    7. ExerciseDeduplicate a stream in bounded memory40 minin the studioDedupe a stream you cannot hold. The bounded-memory classic.
    8. ExerciseMerge sorted shards in bounded memory45 minin the studioMerge shards without loading them. External sort, in miniature.
    9. InterviewKth largest in a stream6 minReported at Amazon. The min-heap inversion is the whole answer.
    10. QuestionsPython · Conceptual15 minNo code on screen. Generators, the GIL, what a context manager promises.
  4. Part 04 · ~2h

    Code they would actually merge

    Your code is testable, rerunnable, and readable by someone else.

    Nothing to skip — this is what the take-home is really scoring.

    1. SectionPure transforms vs I/O wrappers6 minThe split that makes anything testable. Do it before you are asked.
    2. SectionDependency boundaries & testability6 minPass the client and the clock in. Now tests need no network.
    3. SectionUnit tests for pure transforms6 minTwo tests on a take-home beat none. Interviewers check.
    4. SectionMocking clocks, files, APIs6 minA test that hits the network is not a test. Fake what?
    5. SectionStructured logging6 minprint() in a submitted take-home is a visible decision.
    6. SectionIdempotency: same input, same output7 min"What happens if it runs twice" follows every ETL answer.
    7. ExerciseCommit batches to a sink exactly once45 minin the studioCommit batches exactly once. The answer to the rerun question.
    8. ExerciseApply a change-data-capture batch40 minin the studioInserts, updates and deletes, applied in order. Real ETL work.
    9. InterviewDiffing two ledgers in Python6 minReported at Wise. Three outputs, not a boolean.
    10. QuestionsPython · Code review & refactor15 minWorking junior code, made production-grade. Exactly the take-home bar.

03

Start it now

Reading is free and needs no account. The plan itself tracks on your dashboard.