Exercises
Pick a diff.
Each one is a change to a file, with the tests that ship alongside it. Most carry exactly one defect. Some carry none at all, and saying so is worth points.
| Subject | Domain | Difficulty | Status |
|---|---|---|---|
| Directory sortOrders a list of people for display, grouping them by initial | Collections | 2 | not attempted |
| Directory sortOrders a list of people for display, grouping them by initial | Collections | 1 | not attempted |
| Config loaderReads a JSON config, fills in defaults and reports what could not be parsed | Parsing | 2 | not attempted |
| Config loaderReads a JSON config, fills in defaults and reports what could not be parsed | Parsing | 3 | not attempted |
| Config loaderReads a JSON config, fills in defaults and reports what could not be parsed | Parsing | 1 | not attempted |
| Config loaderReads a JSON config, fills in defaults and reports what could not be parsed | Parsing | 2 | not attempted |
| Config loaderReads a JSON config, fills in defaults and reports what could not be parsed | Parsing | 3 | not attempted |
| Config loaderReads a JSON config, fills in defaults and reports what could not be parsed | Parsing | 1 | not attempted |
| Config loaderReads a JSON config, fills in defaults and reports what could not be parsed | Parsing | 1 | not attempted |
| Config loaderReads a JSON config, fills in defaults and reports what could not be parsed | Parsing | 3 | not attempted |
| Config loaderReads a JSON config, fills in defaults and reports what could not be parsed | Parsing | 1 | not attempted |
| CSV parserParses delimited text with quoted fields, escaped quotes and a header row | Parsing | 3 | not attempted |
| Currency formatterRenders an amount in minor units as text, per currency and locale | Money | 1 | not attempted |
| Date range overlapDecides whether two half-open date ranges overlap, and merges the ones that do | Dates | 1 | not attempted |
| Date range overlapDecides whether two half-open date ranges overlap, and merges the ones that do | Dates | 2 | not attempted |
| Date range overlapDecides whether two half-open date ranges overlap, and merges the ones that do | Dates | 1 | not attempted |
| Date range overlapDecides whether two half-open date ranges overlap, and merges the ones that do | Dates | 3 | not attempted |
| Date range overlapDecides whether two half-open date ranges overlap, and merges the ones that do | Dates | 2 | not attempted |
| Stock levelsAggregates stock across warehouses and decides what needs reordering | Collections | 3 | not attempted |
| Stock levelsAggregates stock across warehouses and decides what needs reordering | Collections | 2 | not attempted |
| Stock levelsAggregates stock across warehouses and decides what needs reordering | Collections | 3 | not attempted |
| Stock levelsAggregates stock across warehouses and decides what needs reordering | Collections | 2 | not attempted |
| Stock levelsAggregates stock across warehouses and decides what needs reordering | Collections | 1 | not attempted |
| Sign-in handlerVerifies a password and returns a result the caller can act on safely | Auth | 1 | not attempted |
| Sign-in handlerVerifies a password and returns a result the caller can act on safely | Auth | 2 | not attempted |
| Sign-in handlerVerifies a password and returns a result the caller can act on safely | Auth | 2 | not attempted |
| Sign-in handlerVerifies a password and returns a result the caller can act on safely | Auth | 3 | not attempted |
| Sign-in handlerVerifies a password and returns a result the caller can act on safely | Auth | 3 | not attempted |
| Sign-in handlerVerifies a password and returns a result the caller can act on safely | Auth | 1 | not attempted |
| LRU cacheCaches values up to a capacity, evicting whichever was used least recently | Cache | 2 | not attempted |
| LRU cacheCaches values up to a capacity, evicting whichever was used least recently | Cache | 4 | not attempted |
| Notification outboxDrains a queue of pending notifications, releasing its lease whatever happens | Async | 3 | not attempted |
| Notification outboxDrains a queue of pending notifications, releasing its lease whatever happens | Async | 1 | not attempted |
| Paginated list endpointServes a page of records with a cursor, a limit and a total count | API handlers | 3 | not attempted |
| Permission middlewareDecides whether a principal may perform an action on a resource | Auth | 1 | not attempted |
| Permission middlewareDecides whether a principal may perform an action on a resource | Auth | 2 | not attempted |
| Order pricingTotals a basket in minor units, applying tiered discounts and tax | Money | 1 | not attempted |
| Order pricingTotals a basket in minor units, applying tiered discounts and tax | Money | 2 | not attempted |
| Order pricingTotals a basket in minor units, applying tiered discounts and tax | Money | 3 | not attempted |
| Order pricingTotals a basket in minor units, applying tiered discounts and tax | Money | 1 | not attempted |
| Query builderAssembles a parameterised select statement with sorting and paging | API handlers | 2 | not attempted |
| Query builderAssembles a parameterised select statement with sorting and paging | API handlers | 2 | not attempted |
| Query builderAssembles a parameterised select statement with sorting and paging | API handlers | 3 | not attempted |
| Token bucket rate limiterAllows a burst of requests per client and refills the allowance over time | Async | 1 | not attempted |
| Token bucket rate limiterAllows a burst of requests per client and refills the allowance over time | Async | 2 | not attempted |
| Recurring scheduleExpands a daily or weekly rule into the instants a job should run | Dates | 2 | not attempted |
| Recurring scheduleExpands a daily or weekly rule into the instants a job should run | Dates | 2 | not attempted |
| Recurring scheduleExpands a daily or weekly rule into the instants a job should run | Dates | 4 | not attempted |
| Retry wrapperRetries a failing operation with exponential backoff and a jittered delay | Async | 2 | not attempted |
| Session validatorChecks a session token for expiry, revocation and binding before trusting it | Auth | 3 | not attempted |
| Slug generatorTurns a title into a url-safe slug, keeping them unique within a collection | Parsing | 2 | not attempted |
| Slug generatorTurns a title into a url-safe slug, keeping them unique within a collection | Parsing | 1 | not attempted |
| Slug generatorTurns a title into a url-safe slug, keeping them unique within a collection | Parsing | 2 | not attempted |
| Line diffComputes a line-by-line diff from the longest common subsequence of two texts | Collections | 4 | not attempted |
| Line diffComputes a line-by-line diff from the longest common subsequence of two texts | Collections | 3 | not attempted |
| Line diffComputes a line-by-line diff from the longest common subsequence of two texts | Collections | 4 | not attempted |
56 exercises across 8 domains.