Как по мне, зарплата у Пиндуодуо тоже ужасная, и он не жалеет сил на переманивание людей.Некоторым разработчикам, проработавшим 3 года, чуть получше дают офферы по 30К.Конечно, Пиндуодуо славится еще и тем, что работает сверхурочная работа, 6-дневные смены являются нормой, а рабочий день в основном составляет более 12 часов в день, что также довольно тяжело. Без лишних слов, давайте сегодня поговорим о настоящем вопросе закулисного интервью от Pinduoduo, который представляет собой простой архитектурный вопрос:Pinduoduo имеет сотни миллионов пользователей, поэтому для определенной веб-страницы, как использовать Redis для подсчета количества посещений веб-сайта пользователями?
Обмен галантереей недавно организованными личными учебными заметками в книгу с использованием обмена PDF в основном включает в себя основу Java, структуру данных, jvm, многопоточность и т. д. Из-за ограниченного места ниже показана лишь небольшая часть вопросов интервью.
Друзья, которым это нужно, могут нажать, чтобы получить это:Нажмите здесь чтобы получить это. . .
использовать хэш
Хэш — это базовая структура данных Redis. Нижний уровень Redis поддерживает открытый хеш, который сопоставляет различные ключи с хеш-таблицей. Если возникает конфликт ключевых слов, будет вытащен связанный список.
Когда пользователь получает доступ, если пользователь вошел в систему, мы используем идентификатор пользователя. Если пользователь не вошел в систему, мы также можем случайным образом сгенерировать ключ на странице внешнего интерфейса для идентификации пользователя. , мы можем использоватьHSETКоманда, ключ может выбрать URI и соответствующую дату для объединения, поле может использовать идентификатор пользователя или случайную идентификацию, значение можно просто установить на 1.
Когда мы хотим подсчитать количество посещений веб-сайта в определенный день, мы можем использовать его напрямую.HLENчтобы получить окончательный результат.
преимущество: Простой и простой в реализации, запрос также очень удобно, а точность данных очень высока.
недостаток: Занимает слишком много памяти. С увеличением количества ключей производительность также будет снижаться. Небольшой веб-сайт — это нормально, веб-сайт с сотнями миллионов PV, такой как Pinduoduo, определенно не выдержит этого.
Использовать набор битов
Мы знаем, что для 32-битного int, если мы используем его только для записи идентификатора, тогда может быть записан только один пользователь, но если мы преобразуем его в двоичный код и каждый бит используется для представления пользователя, то мы можем представить 32 за один раз пользователи, в 32 раза меньше места! Для сценариев с большим количеством данных, если мы используем набор битов, мы можем сэкономить много памяти. Для пользователей, которые не вошли в систему, мы также можем использовать алгоритм хэширования для преобразования соответствующего идентификатора пользователя в цифровой идентификатор. Bitset очень сильно экономит память, если предположить, что пользователей 100 миллионов, требуется всего 100000000/8/1024/1024, что равно примерно 12 мегабайтам памяти.
Redis уже дает намSETBITМетод очень удобен в использовании, мы можем посмотреть на следующий пример, мы можем использовать его постоянно на странице элементаSETBITкоманда, установить, что пользователь посетил страницу, вы также можете использоватьGETBITМетод для запроса доступа пользователя. Наконец, мы проходимBITCOUNTВы можете подсчитать количество посещений этой веб-страницы каждый день.
преимуществоОн занимает меньше памяти и его легко запрашивать. Вы можете указать определенного пользователя для запроса. Данные могут быть немного ошибочными. Для пользователей, не вошедших в систему, разные ключи могут быть сопоставлены с одним и тем же идентификатором. В противном случае сопоставление пользователя, не вошедшего в систему необходимо поддерживать, и есть дополнительные накладные расходы.
недостатокЕсли пользователь очень разреженный, использование памяти может быть больше, чем метод 1.
Используйте вероятностные алгоритмы
За эту борьбу можно много больше страниц, может очень много трафика на ваш сайт, если требуемое количество не такое точное, то можно использовать вероятностные алгоритмы, на самом деле мы рассчитываем на сайте УФ, с 1 100 000 000 30 201 ван на самом деле то же самое. В Redis был инкапсулирован алгоритм HyperLogLog, он же является базовым алгоритмом оценки. Особенность этого алгоритма в том, что для данных сохраняются не вообще конкретные значения, а для некоторых данных сохраняются при расчете вероятности.
Когда пользователи посещают веб-сайт, мы можем использоватьPFADDкоманду, устанавливаем соответствующую команду, и, наконец, мы просто передаемPFCOUNTОкончательный результат можно вычислить плавно, потому что это только вероятностный алгоритм, поэтому может быть ошибка 0,81%.
преимуществоОбъем памяти чрезвычайно мал, для ключа требуется всего 12 КБ. Он особенно подходит для суперпользователей, таких как Pinduoduo.
недостатокПри запросе указанного пользователя может возникнуть ошибка, ведь никаких конкретных данных не сохраняется. В сумме тоже есть некоторая погрешность.
Личный профиль: Раскованный, любовь к жизни.Культиватор Java (идентификатор общедоступной учетной записи WeChat: Культиватор Java), добро пожаловать, чтобы следовать. Получите 2000G подробных вопросов для интервью 2020 года