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 interviewPractice solo
3 test cases. No second person needed.