Design a rate limiter?
Design a rate limiter
What interviewers test
- Concurrency
- Thread safety
- System design
Token bucket (simple)
public class RateLimiter
{
private readonly int _limit;
private int _count;
private DateTime _windowStart = DateTime.UtcNow;
private readonly object _lock = new();
public RateLimiter(int limit)
{
_limit = limit;
}
public bool Allow()
{
lock (_lock)
{
if ((DateTime.UtcNow - _windowStart).TotalSeconds >= 1)
{
_count = 0;
_windowStart = DateTime.UtcNow;
}
if (_count < _limit)
{
_count++;
return true;
}
return false;
}
}
}
Used in
- APIs
- Login attempts
- OTP systems