System Design & Concurrency

Implement a Rate Limiter

mediumJS SpecificJS / TS3 tests

Problem Statement

Implement `createRateLimiter(options)` that controls request throughput per key (e.g. user ID or IP address). Options: - `limit`: Maximum number of allowed requests in the time window. - `windowMs`: Time window duration in milliseconds. The returned rate limiter object must provide: - `tryAcquire(key)`: Returns `true` if the request is within limit and recorded, or `false` if the rate limit has been exceeded. - `getRemaining(key)`: Returns the number of remaining requests available for this key in the current window. - `reset(key)`: Clears recorded requests for a specific key (or all keys if key is omitted).

Examples

Example:
const limiter = createRateLimiter({ limit: 2, windowMs: 1000 });
limiter.tryAcquire('user1'); // true
limiter.tryAcquire('user1'); // true
limiter.tryAcquire('user1'); // false (limit exceeded)
limiter.getRemaining('user1'); // 0
limiter.tryAcquire('user2'); // true (independent key)
JavaScript & TypeScript starter code included
Run this as a live interview

Practice solo

3 test cases. No second person needed.

Get new interview exercises

Practice problems and review drills, sent when we publish new ones. No spam.

Unsubscribe anytime. We never share your address.