TGViewer
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter @phpproglib · 10.5K subscribers
Post #6583 1.78K

Forwarded from Библиотека собеса по PHP | вопросы с собеседований

✔️ PHP-тест: лента, в которой посты двоятся и пропадают

Пользователь листает ленту и видит один и тот же пост дважды. А кто-то жалуется, что пропускает записи 👇

📦 Задание

Соцсеть, активная лента, новые посты прилетают каждую секунду. Постраничный вывод сделали классически, через LIMIT/OFFSET. На ревью прошло, тесты зелёные (в тестах данные статичные). В проде в часы пик начались жалобы: дубли на стыке страниц и «куда-то делся пост, я его точно видел».
// src/Feed/FeedRepository.php
class FeedRepository
{
public function __construct(private readonly PDO $pdo) {}

public function page(int $page, int $perPage): array
{
$offset = ($page - 1) * $perPage;

$stmt = $this->pdo->prepare(
'SELECT id, author_id, body, created_at
FROM posts
ORDER BY created_at DESC
LIMIT :limit OFFSET :offset'
);

$stmt->bindValue(':limit', $perPage, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();

return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}


🔹 Задачи

— Объяснить, почему на меняющихся данных OFFSET даёт дубли и пропуски между страницами
— Объяснить, почему сортировка только по created_at дополнительно усугубляет проблему
— Переписать на keyset-пагинацию (cursor) так, чтобы вставки/удаления не сдвигали выдачу

Ставьте → 🔥 если нравится формат. Если нет → 🌚

💬 Решения пишите в комменты под спойлер, сравним подходы.
  • 🔥 8
  • 👍 4
  • 🤔 2
  • 🌚 1
More from @phpproglib
  1. Sep 21, 2026⚡️ PHP 8.6 выйдет 19 ноября 2026 года. Сейчас версия находится в beta. Самые заметные изме…
  2. Sep 20, 2026❓ Какие существуют проблемы в многопоточной среде? Основные проблемы многопоточности: 1️⃣…
  3. Sep 19, 2026🌞 В Symfony 8.2 появилось 29 новых Bundle — теперь компоненты вроде Mailer, Messenger и C…
  4. Sep 19, 2026А вы уже забрали свой подарок ко Дню программиста? К вашему профессиональному празднику Tp…
  5. Sep 18, 2026🐸 Библиотека пхпшника
  6. Sep 17, 2026🛠 `str_contains` и семья: проверяем строки без ловушек Проверка через strpos годами путал…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →