2.1Kпросмотров
66.2%от подписчиков
21 марта 2026 г.
Score: 2.3K
✔️ PHP-тест: Typed Properties + Lazy Initialization + Объект в статике Баг, который живёт в проде месяцами и проявляется только под нагрузкой 👇 📦 Задание Команда пишет модуль биллинга. Ты написал быстрый класс-обёртку для работы с тарифами. Код прошёл ревью, всё работало на стейджинге. В проде через неделю начались жалобы: у части пользователей неправильно считается стоимость. Причём только в пиковые часы. // src/Billing/TariffCalculator.php
class TariffCalculator
{ private static TariffConfig $config; private static array $cache = []; public static function init(array $rawConfig): void { self::$config = new TariffConfig($rawConfig); } public static function calculate(int $userId, int $units): float { $key = $userId . ':' . $units; if (isset(self::$cache[$key])) { return self::$cache[$key]; } $price = self::$config->getBasePrice() $units self::$config->getUserMultiplier($userId); self::$cache[$key] = $price; return $price; } public static function resetCache(): void { self::$cache = []; }
} // src/Billing/TariffConfig.php
class TariffConfig
{ private float $basePrice; private array $multipliers; public function __construct(array $config) { $this->basePrice = (float) $config['base_price']; $this->multipliers = $config['multipliers'] ?? []; } public function getBasePrice(): float { return $this->basePrice; } public function getUserMultiplier(int $userId): float { return $this->multipliers[$userId] ?? 1.0; }
} // bootstrap.php — вызывается один раз при старте воркера
TariffCalculator::init(loadConfigFromDB()); // Где-то в обработчике запроса
$price = TariffCalculator::calculate($user->id, $request->units); 🔹 Задачи — Найти все архитектурные и логические проблемы в коде (их несколько)
— Объяснить, почему баг проявляется только под нагрузкой и не воспроизводится на стейджинге
— Предложить правильное решение Ставьте → 🔥 если нравится формат. Если нет → 🌚 💬 Решения пишите в комменты под спойлер — сравним подходы.