интервьюер:Почему бы тебе не рассказать мне, что ты недавно смотрел? Можно вытащить и обсудить
Кандидат: Недавно я смотрел контент, связанный с «дедупликацией» и «идемпотентом».
интервьюер:Тогда давайте сначала поговорим о вашем понимании «дедупликации» и «идемпотентности».
Кандидат: Я думаю, что «идемпотент» и «дедупликация» похожи, и я не могу сказать, что между ними строгое различие.
Кандидат: Позвольте мне рассказать вам о моем личном понимании, я не знаю, правильно это или нет.
Кандидат: «Дублирование» - это деуплиплировать запрос или сообщение «N раз» в течение «определенного периода времени»
Кандидат: «Идемпотент» должен гарантировать, что запрос или сообщение обрабатываются «в любое время», и он должен гарантировать, что его результат непротиворечив.
Кандидат: Будь то «дедупликация» или «идемпотент», необходимо иметь «уникальный ключ» и место для «хранения» уникального ключа.
Кандидат: Взяв в качестве примера проект, «платформа управления сообщениями», которую я поддерживаю, имеет функцию «удаления дубликатов»: «удалить дубликаты для сообщений с одинаковым содержанием за 5 минут», «дедуплицировать шаблоны в течение 1 часа», «удалить дубликаты». когда канал достигает N порогов за один день" "…
Кандидат: Еще раз подчеркнем сущность «идемпотента» и «дедупликации»: «Уникальный ключ» + «Хранилище».
интервьюер:Так как ты это сделал
Кандидат: В разных бизнес-сценариях уникальный ключ отличается, что определяется бизнес-процессами.
Кандидат: существует множество вариантов хранения, таких как «локальный кеш»/«Redis»/«MySQL»/«HBase» и т. д. Конкретный выбор также связан с бизнесом.
Кандидат: Например, в сценарии «платформа управления сообщениями» я храню выбранный «Redis» (с превосходной производительностью чтения и записи), а у Redis также есть «срок действия» для решения проблемы «определенного периода времени».
Кандидат: А единственный Ключ естественно строится по разным делам.
КандидатНапример: «Дедупликация сообщений с тем же содержимым за 5 минут», я напрямую использую параметр запроса MD5 в качестве уникального ключа. «Шаблон дедупликации за 1 час» - это «шаблон ID + UserID», как уникальный ключ, «дедупликация канала в течение одного дня» является «ID канала + UserID», как единственный ключ ...
интервьюер:Теперь, когда упоминается «дедупликация», вы слышали о фильтрах Блума?
Кандидат: Конечно знаешь
интервьюер:Давайте поговорим о фильтрах Блума, почему вы их не используете?
Кандидат: Основную структуру данных фильтра Блума можно понимать как растровое изображение, а растровое изображение также можно просто понимать как массив.Элементы хранят только 0 и 1, поэтому он занимает относительно небольшое пространство.
Кандидат: Когда элемент должен быть сохранен в растровом изображении, на самом деле необходимо увидеть, где он хранится в растровом изображении.В это время обычно используется алгоритм хеширования, а место хранения помечается как 1
Кандидат: Позиция, отмеченная 1, указывает на существование, а позиция, отмеченная 0, указывает на то, что она не существует.
Кандидат: Фильтр Блума — это небольшой след, определяющий, есть ли элемент для дальнейшей дедупликации, но он также имеет соответствующий недостаток.
Кандидат: Пока используется алгоритм хеширования, он неотделим от «коллизии хэшей», что приводит к «неправильной оценке».
Кандидат: В фильтре Блума, если считается, что элемент существует, то этот элемент «может не существовать» на самом деле. Если считается, что элемент не существует, он не должен существовать
Кандидат: Мне не нужно больше объяснять, верно? (Сочетание «алгоритма хеширования» и «позиция, отмеченная 1, указывает на существование, а позиция, отмеченная 0, указывает на отсутствие», можно сделать вышеуказанный вывод)
Кандидат: фильтр Buron не «удаляет» элементы (также ограничения алгоритма хеширования, не может точно найти элемент в фильтре Buron)
Кандидат: Если вы хотите использовать его, реализацию фильтра Блума можно реализовать непосредственно в Guava, но это автономный
Кандидат: Для распределенного фильтра Блума сейчас обычно используется Redis, но не каждая компания будет развертывать Redis-версию фильтра Блума (все еще есть ограничения, как в моей предыдущей компании).
Кандидат: Итак, в настоящее время проекты, за которые я отвечаю, не используют фильтры Блума (:
Кандидат: Если стоимость «удаления дубликатов» относительно велика, вы можете рассмотреть возможность установки логики «многоуровневой фильтрации».
Кандидат: Например, сначала посмотреть, может ли «локальный кеш» отфильтровать часть, а оставшуюся «сильную проверку» передать в «удаленное хранилище» (обычный Redis или БД) для вторичной фильтрации
интервьюер: Ну тогда я помню, когда ты в последний раз отвечал Кафке
интервьюер: В свое время вы говорили, что реализована как минимум одна + идемпотентность при работе с ордерами
интервьюер: Во время идемпотентной обработки: Redis используется для предварительной фильтрации, а уникальный индекс БД используется для строгой проверки согласованности, что также повышает производительность, верно?
интервьюер: Единственный ключ, кажется, «Номер заказа + Статус заказа»
Кандидат:интервьюерУ тебя очень хорошая память!
Кандидат: Вообще, нам нужно проверить данные на строгую непротиворечивость, поэтому идем сразу в MySQL (БД), ведь там есть поддержка транзакций
Кандидат: «локальный кеш», если бизнес подходит, его можно использовать как «предварительное» суждение.
Кандидат: высокопроизводительные операции чтения и записи Redis, как до вынесения решения, так и после обработки (:
Кандидат: HBase обычно используется в сценариях с огромными объемами данных (память Redis слишком дорогая, БД недостаточно гибкая и не подходит для хранения больших объемов данных в одной таблице)
Кандидат: Что касается идемпотентности, то общее хранилище по-прежнему "Redis" и "база данных"
Кандидат: наиболее распространенным является «уникальный индекс» базы данных для достижения идемпотентности (несколько проектов, за которые я отвечаю, используют это).
Кандидат: создание «уникального ключа» — это вопрос, связанный с бизнесом (: как правило, он объединяется со своим собственным бизнес-идентификатором для создания «значимого» уникального ключа
Кандидат: Конечно, он также использует «Redis» и «MySQL» для реализации распределенной идемпотентной блокировки (:
Кандидат: Но распределенные блокировки Redis не могут быть полностью гарантированы, а MySQL реализует распределенные блокировки (оптимистичные блокировки и пессимистичные блокировки по-прежнему связаны с бизнесом, я никогда их не использовал)
Кандидат: Есть много решений для достижения «идемпотентности» в Интернете, которые, по сути, делают некоторые варианты вокруг «хранилища» и «уникального ключа», а затем берут имя...
Кандидат: В общем, меняем суп, не меняя лекарство (:
интервьюер: Ах ... понять
Добро пожаловать в мой публичный аккаунт WeChat【Java3y] Давайте поговорим о Java-интервью, серия онлайн-интервьюеров постоянно обновляется!
Серия [Онлайн-интервьюер-Мобильный терминал]Продолжаем обновлять два раза в неделю!
【Онлайн-интервьюер-компьютер】СерияПродолжаем обновлять два раза в неделю!
Оригинал это не просто! ! Проси три! !