Tencent, Toutiao, покупатель лицом к лицу в конце 2019 года

интервью
Tencent, Toutiao, покупатель лицом к лицу в конце 2019 года

Лицом к лицу в конце 2019 года

Хотя он приближается к концу года, идея поиска новых возможностей все еще возникает.Основная причина в том, что я чувствую, что узкое место технологического роста в моей нынешней должности, поэтому я хочу сделать более сложную работу . Поскольку мы все еще собираемся продолжать работу в Шэньчжэне, мы выбрали три компании, Tencent, ByteDance и shopee, и направление рассмотрения по-прежнему остается фоновым (других вакансий нет, печально). Хотя я не смогу получить награду по итогам года в конце года, я думаю, что это ничто по сравнению с развитием всей моей карьеры Лучшее время всегда наступает сейчас.

Подготовить

После окончательного определения направления и целей начинается подготовка системы, которая в основном делится на следующие аспекты подготовки.

проблема алгоритма

Я заранее читал интервью других людей по социальному набору и знаю, что у Toutiao есть вопросы по алгоритму в каждом техническом раунде, а этот обычно практикуется меньше, и я забыл много вопросов, которые были написаны во время школьного набора. Поэтому проблема алгоритма по-прежнему занимает много времени при рассмотрении системы. Во-первых, я быстро закончил предложение меча. Я уже почистил обе стороны этого новобранца школы, так что теперь будет относительно быстрее почистить. Тогда есть вопрос LeetCode.В LeetCode много вопросов, и в принципе невозможно пройти его всего за несколько недель.Поэтому я в основном чищу по типу, и я буду чувствовать себя более комфортно после чистки нескольких вопросов каждого типа. Например, проблема связанного списка должна решаться с помощью рекурсии и двойного указателя, проблема стека и очереди должна решаться с использованием двух стеков или очередей, а проблема дерева в основном рекурсивна. Однако вопросы о массивах и строках, как правило, более гибкие, и вы можете отмахнуться от большинства из этих вопросов. Обычно не удобно идти на работу и решать вопросы. Я использую метод, который заключается в том, чтобы прочитать вопросы, открыть веб-сайт LeetCode с моего мобильного телефона и непосредственно подумать над решением после прочтения вопросов. Просто посмотрите на решения других людей. , и используйте этот метод, чтобы быстро освежиться. Используя этот метод, вы можете беспокоиться о неполноте вопросов во время интервью.На самом деле, вам не нужно слишком беспокоиться, потому что во время интервью интервьюер видит, что основная идея вашего письма верна, обработка границ правильная, а время интервью относительно ограничено.

теоретические основы

Базовая часть в основном основана на быстром обзоре, в основном языка (в основном я использую C++, поэтому я рассматриваю C++), операционной системы и сетевого программирования. Больше вопросов о школьном наборе и меньше вопросов о социальном наборе. Про язык говорить не буду, каждый должен знать, что тестировать в этой области. Операционная система зависит от управления памятью, управления процессами и файловой системой.Вообще, по поводу виртуальной памяти возникает много вопросов. Сетевое программирование включает три аспекта: протокол TCP/IP, протокол HTTP и сетевую безопасность. TCP/IP — это в основном трехстороннее рукопожатие, четыре взмаха рук, роль TIME_WAIT и другие часто задаваемые вопросы. Протокол HTTP проверяет код возврата протокола HTTP, метод HTTP и т. д. Следует отметить, что подробный процесс шифрования HTTPS должен быть очень тщательным, иначе легко может возникнуть ощущение, что все ясно, но немного непонятно, когда спрашивают. Последнее — сетевая безопасность, основная проверка — это также WEB-безопасность, включая XSS, CSRF, SQL-инъекции и т. д.

Бэкэнд-технология

Внутренняя технология здесь в основном относится к некоторым основным компонентам, используемым в работе, и к некоторым общим конструкциям внутренней архитектуры. В основном подготовил MySQL, Redis, очередь сообщений, zookeeper, дизайн архитектуры распределенной системы и докер. MySQL в основном читал «Лекции по MySQL 45» Geek Time, которые очень хорошо рассказывают о транзакциях, индексах, блокировках, binlog и redolog, а также являются любимым тестом на собеседованиях.Подтаблица также должна быть освоена. В этом нет никакого интереса, и это ни в коем случае не реклама. Redis в основном читал «Проектирование и внедрение Redis», а затем резюмировал сценарии использования Redis, и нет никаких проблем с реализацией Redis распределенных блокировок. Существует много программного обеспечения с открытым исходным кодом для очередей сообщений. Я в основном выбираю Kafka для изучения. В основном я читаю официальные документы веб-сайта, Geek Time "Kafka Core Technology and Practice" и некоторые технические статьи. Тем не менее, я думаю, что «Основная технология и практика Kafka» от Geek Time носит более общий характер и не очень рекомендуется. Для распределенных систем подготовьте теорию CAP, теорию BASE, ограничение тока, предохранитель, последовательный алгоритм выбора, архитектуру master-slave, кластерную архитектуру, удаленную многоактивность, балансировку нагрузки, многоуровневую архитектуру, микросервисы и т. д.

Проект «Глубокие раскопки»

У меня нет опыта участия в проектах с открытым исходным кодом, а проекты, которыми я занимаюсь на работе, тоже очень общие. Я действительно не имею большого отношения к этому проекту, но мне все же нужно немного покопаться. нельзя убежать. Позвольте мне рассказать вам несколько вещей, о которых я думаю:

  1. Ищите относительно яркие пятна в проекте. Например, я использовал Redis для реализации очереди с задержкой, а затем для этой очереди с задержкой я решил узкое место за счет сегментирования и ускорил скорость обработки за счет распределения. ты можешь увидеть мой«Реализация отложенных задач на основе REDIS»одна статья. Хотя это не сложная технология, ее можно рассмотреть всесторонне, чтобы показать наличие у нее определенных архитектурных возможностей.

  2. Найдите сложности в проекте. Если в вашем проекте есть что-то сложное, даже если вы этого не делали, вы можете сказать об этом, главное, чтобы это было понятно.

  3. Количественные показатели. У интерфейса изначально были проблемы с производительностью, например, вы сделали небольшую оптимизацию, чтобы оптимизировать время выполнения TP99 с исходных 500 мс до 200 мс.

  4. Расширяйте возможности всей команды. В процессе развития бизнеса обязательно будет какое-то дублирование работ или услуг, которые можно будет использовать повторно. Вы можете разработать определенный инструмент или услугу с определенной функцией и продвигать ее для всей группы, создавая ценность для компании.

Shopee

одна сторона

  • У MySQL есть эти механизмы хранения и в чем отличия
  • При каких обстоятельствах произойдет сбой индекса mysql
  • Разница между innodb и myisam?
  • индексная модель mysql
  • Как работает синхронизация master-slave в mysql? Какие процессы? Если есть новая машина, которую нужно добавить к ведомой машине, каков процесс.
  • В чем разница между оптимистичной блокировкой и пессимистической блокировкой?
  • Журналы binlog загружаются мастером или извлекаются салфеткой?
  • Какие есть способы сохранения redis и как их выбрать?
  • Каков процесс синхронизации redis master-slave?
  • Как реализован zset Redis?
  • Политика истечения срока действия ключа Redis
  • Как реализован хэшмап?
  • TCP рукопожатие и волна
  • Разница между select и epoll
  • Разница между http и https, как добавить шифрование?
  • Алгоритм плота и основной алгоритм выборов zk
  • Как Кафка выбирает мастера?
  • Разница между kafka и rabbitmq
  • Как синхронизировать разделы кафки
  • Как kafka гарантирует, что сообщения не будут потеряны?
  • Почему kafka выдерживает такой высокий qps
  • http различные коды возврата, в чем разница между 401 и 406?
  • Redis Sentinels и кластеры
  • Какова связь между темой потребительской группы потребителей брокера разделов kafka и т. д.?
  • Два односвязных списка возвращают структуру связанного списка после суммирования, например 2->3->1->5 и 3->6, результат возвращает 2->3->5->1

две стороны

На второй стороне говорить было не о чем.Я пошел поболтать о жизни с интервью.Я думал, что это крутой ритм, но я получил предложение.

Три стороны

лицо отдела кадров

Тенсент

Tencent отправит SMS-напоминания за день и за час до интервью. Я пошел в здание Tencent Binhai для интервью.Здание сильно модернизировано, но следует напомнить, что здание Tencent Binhai Building разделено на Южную башню и Северную башню. Когда я пошел туда, я поднялся не на тот этаж, и мне нужно было спуститься на 4-й этаж, чтобы пересесть на лифт.

одна сторона

письменный экзамен

  • Характеристики микросервисов, как реализовать обнаружение сервисов и балансировку нагрузки
  • С++ управление памятью
  • На каком конце генерируется time_wait и какова его роль?
  • Как найти сбой программы
  • Как обнаружить проблемы с производительностью службы
  • Найдите медиану двух отсортированных массивов
  • Просто квадратный корень из числа n
  • Разработайте алгоритм, чем больше розыгрышей, тем выше вероятность выигрыша
  • Как MySQL анализирует выполнение оператора.delete from t1 limit 3иdelete from t1разница?

интервью

  • Задать вопрос
  • прыгающие шаги
  • нечетное количество элементов в массиве
  • В здании n этажей, я не знаю, с какого этажа разобьются яйца, найдите этаж, который разобьется наименьшее количество раз.
  • В чем разница между динамическим программированием и жадным
  • Базовая реализация структуры данных Redis
  • Как Redis обеспечивает высокую доступность
  • Какие существуют алгоритмы балансировки нагрузки
  • Как работает обнаружение служб?
  • Как достигается предохранитель
  • Как реализован генератор id и как добиться глобального инкремента
  • Разница между сопрограммой и потоком
  • Метод межпроцессного взаимодействия
  • Какие форумы вы обычно посещаете и какие алгоритмы изучаете?
  • Алгоритм Paxos, я не могу внятно объяснить этот алгоритм, а потом я сказал алгоритм плота
  • Как переключать потоки в gdb
  • Как узнать, есть ли в графе цикл
  • Внедрить кеш
  • Просмотр команд ЦП и дисковых команд ввода-вывода

две стороны

  • Нарисуйте системную архитектуру проекта
  • Как оптимизировать, если количество пользователей увеличивается
  • Как реализовать взвешенный циклический алгоритм для балансировки нагрузки
  • проблема с рюкзаком
  • Байесовские принципы вероятности
  • алгоритм сегментации слов
  • Суммирование последовательных целых чисел (вопрос с буквенным кодом 829), требует временной сложности менее O (N)

Суммировать

После двух сторон Tencent я знал, что это холодно. Динамическое программирование должно писать рекурсивную формулу, потому что я всегда использовал идею таблицы динамического программирования для решения проблем, поэтому это место не подходило. Позже я спросил про байесовские алгоритмы и алгоритмы сегментации слов, и я вообще ничего не знал (моё сердце: я столкнулся с фоном, а не с алгоритмом лица). Последний вопрос алгоритма может быть задан только со сложностью O(N), а интервьюер должен быть меньше O(N), поэтому он не может на него ответить. Этот вопрос представляет собой сложный уровень сложности leetcode, поэтому нет никакой очистки. Впрочем, может быть не так уж и сложно посмотреть на это позже, но такого рода решение задач через характеристики математических формул часто легко упускается из виду. Короче говоря, с одной стороны Tencent меня вполне устраивает, а с другой стороны я действительно немного ошеломлен. Раньше я читал в Интернете, что тест алгоритма Tencent относительно небольшой, и его можно разделить на отделы.На этот раз мое интервью Tencent Video, и обе стороны в основном состоят из алгоритмов. Также на большинстве фейсбуков написано, что алгоритмические вопросы редко тестируются на жестком уровне leetcode, я должен выразить свое сомнение по этому поводу, потому что Tencent и следующие заголовки тестируются на жестком уровне. Таким образом, вы не можете полностью пропустить сложные вопросы при чистке вопросов. Итак, какие вопросы не будут проверены? Я думаю, что это очень сложный для описания вопрос, который не будет проверяться во время собеседования, потому что время собеседования относительно ограничено: если вы поймете вопрос за короткое время, вам придется объяснять его полдня. Такой тест не очень хорош, как, например, вопрос о покупке акций на LeetCode.

ByteDance

одна сторона

  • Задать вопрос
  • Как система задач гарантирует, что награда будет успешной после выполнения задачи?
  • Как реализована очередь задержки zset?
  • Что такое структуры данных Redis? Как они достигаются?
  • Постоянство Redis
  • индекс mysql
  • Неупорядоченный массив находит максимальную сумму своих подпоследовательностей и требует, чтобы элементы в подпоследовательности не были смежными друг с другом в исходном массиве.

две стороны

  • Как работает ZSET Redis? Попробуйте ввести как можно больше, таблицу переходов, хеш-таблицу и сжатый связанный список.
  • Когда Redis ZSET используется в качестве таблицы лидеров, как реализовать хронологическую сортировку, когда результаты одинаковы? Я назвал метод разделения счета на старшие 32 бита и младшие 32 бита, причем старшие 32 бита хранят счет, а младшие 32 бита хранят время. Спросите, есть ли другой способ, не могу придумать
  • Четыре уровня изоляции для транзакций MySQL? Сначала разница между четырьмя уровнями, а затем проблемы, которые могут возникнуть на каждом уровне.
  • Являются ли журналы binlog и redolog чистыми? Сказал роль двух логов и двухэтапного коммита
  • Как реализовать динамический полиморфизм в C++?
  • Может ли конструктор С++ быть виртуальным?
  • Отсутствует первое положительное число (вопрос 41 буквенного кода)
  • В системе Linux может ли открытый файл быть удален другим процессом?
  • Буфер 10M заполнен данными Теперь нам нужно отправить данные в этот буфер как можно больше Можно допустить частичную потерю пакетов Что лучше использовать TCP или UDP? Зачем?
  • Какие протоколы участвуют в полном HTTP-запросе?

Три стороны

  • Задать вопрос
  • Как ZSET реализован в Redis?
  • Как спроектировать систему ограничения тока? ведро с жетонами
  • Позвольте вам разработать систему отложенных задач, как это сделать Были упомянуты два решения: одно — использовать ZSET redis для реализации, рассмотреть возможность сегментирования для предотвращения высокого параллелизма, использовать постоянство redis для достижения приземления и использовать redis sentinel для достижения аварийного переключения. Одним из них является метод использования колеса времени.
  • Существует генератор случайных чисел, который может генерировать числа от 0 до 4. Теперь позвольте вам использовать этот генератор случайных чисел для генерации случайных чисел от 0 до 6 и убедиться, что вероятность сгенерированных чисел одинакова.
  • Есть N фишек, и каждый человек может получить от 1 до M фишек за раз.Тот, у кого будет столько фишек после взятия фишек, тот и выиграет. Теперь есть 1000 фишек, и каждый раз, когда вы можете взять до 8 фишек, А возьмет их первым, так есть ли способ выиграть у А? Если количество оставшихся фишек после первого игрока кратно 8, он выиграет, иначе проиграет.
  • Учитывая корневой узел бинарного дерева, и теперь есть частичные узлы этого бинарного дерева, запросите ближайшего общего предка этих узлов.

четыре стороны

лицо отдела кадров

Суммировать

Все 4 раунда интервью Toutiao были основаны на видео.Впечатления от видео-интервью были на самом деле довольно хорошими.Я был более расслаблен, сидя дома на собеседовании, что сделало мой мозг более гибким. Когда люди нервничают, их мысли перестают двигаться. Три технических раунда Toutiao спрашивали о реализации zset.Что касается реализации ZSET, вы можете внимательно посмотреть, как реализован исходный код.Когда вы говорите это, есть еще что сказать, а не только таблицу переходов. . Еще один момент: не сдавайтесь, когда вы сталкиваетесь с логическими или алгоритмическими вопросами, которых вы не знаете, и спрашивайте у интервьюера, можете ли вы дать подсказку. Если вы сможете ответить на этот вопрос под медленной подсказкой интервьюера, он также будет распознан.


Добро пожаловать, чтобы отсканировать код и подписаться на официальный аккаунт, а также поделиться с вами более интересными статьями!

欢迎扫码关注公众号,更多精彩文章与您分享!