Обмен опытом фоновой разработки ByteDance и Tencent (2019.5)

задняя часть
Обмен опытом фоновой разработки ByteDance и Tencent (2019.5)

В мае мои друзья поделились со мной опытом проведения интервью с ByteDance и Tencent и нашли время, чтобы организовать его в блоге, чтобы поделиться с вами.

1. Байтовый бит

В Toutiao есть три технических интервью, за которыми следуют интервью с HR и видеоинтервью. Время регулируется до 1 часа.

1.1 Первая сторона:

Первая сторона в основном исследует основы, сначала кратко представляет себя и представляет проект, а затем начинает исследовать основы.

1.1.1 Базовые знания TCP

  1. Вопрос 1: Пожалуйста, подробно опишите процесс трехстороннего рукопожатия и четырехсторонней волны.

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

  2. Вопрос 2: Какова цель состояния TIME_WAIT четырех взмахов рук?

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

  3. Вопрос 3. Какой механизм использует TCP для обеспечения надежности?

    Ответ из четырех аспектов, механизм подтверждения ACK, повторная передача тайм-аута, скользящее окно и управление потоком.Для подробных слов требуется подробный механизм управления потоком.

1.1.2 Базовые знания языка

Технологический стек ByteDance — это Go и Python, и мы спросим об основе родственных языков.

  1. Вопрос 1: Опишите разницу между потоками, процессами и сопрограммами? Опишите определения и различия между потоками, процессами и сопрограммами и, между прочим, опишите их использование в языке Python.

  2. Вопрос 2: В чем разница между сопрограммами в GO и сопрограммами в Python? В основном это объясняет механизм GMP в Go.

1.1.3 Основы сетевого программирования

  1. Вопрос 1: Какие существуют модели сетевого ввода-вывода?

    5 моделей сетевого ввода-вывода: блокировка, неблокировка, мультиплексирование ввода-вывода, ввод-вывод, управляемый сигналами, и асинхронный ввод-вывод. Эти пять отличий описываются от данных от устройств ввода-вывода до режима ядра и от режима ядра до пользовательского режима процесса.

  2. Вопрос 2: Разница между select/poll/epoll при мультиплексировании ввода/вывода?

    Из механизма select и трех недостатков select объясните механизм epoll и то, как epoll устраняет три недостатка select. Также будет рассказано о разнице между запуском по горизонтали и запуском по фронту в epoll.

1.1.4 Основы, связанные с HTTP

  1. Вопрос 1: Когда клиент получает доступ к URL-адресу сервера, каков будет весь процесс?

    В семиуровневой модели сети весь процесс соединения HTTP-> TCP-> IP-> объясняет процесс генерации и передачи сообщений.

  2. Вопрос 2: Опишите разницу между HTTPS и HTTP

    Отличие от порта и HTTPS основано на SSL и шифровании и т.д.

  3. Вопрос 3: Формат сообщения запроса и сообщения ответа протокола HTTP

    Чтобы иметь четкое представление о компонентах сообщения запроса и сообщения ответа, необходимо написать конкретные случаи.

  4. Вопрос 4: Что такое коды состояния HTTP?

    Из 2xx, 3xx, 4xx, 5xx, чтобы привести примеры общих кодов, интервьюер спросит, в чем разница между 301 и 302 и в каких сценах появляются 500/503/504.

1.1.5 Основы кэшей и баз данных

  1. Вопрос 1: Опишите, какие структуры данных есть в Redis.

    Существует 5 основных структур данных: String/List/Hash/Set/Zset и расширенные структуры данных HyperLogLog/BitMap/BloomFilter/GeoHash. Интервьюер также спросил о принципе BloomFilter и принципе реализации Zset, в основном объясняя таблицу переходов.

  2. Вопрос 2: Тема сценария MySQL

    Интервьюер предоставил сценарий и попросил написать запрос SQL, изучить совместные операторы, как разбить на страницы и оптимизировать сложные операторы.

1.1.6 Алгоритм открытой записи

  1. Нерекурсивный обход дерева в прямом порядке.

1.2. Сторона 2

1.2.1 Опыт проекта

Во-вторых, у вас большой опыт работы с личными проектами. Интервьюер попросит вас подробно представить самый последний проект. Когда вы будете представлять проект, вас прервут, чтобы уточнить сложность и структуру проекта, и попросите лучшее решение.

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

Я также задал несколько вопросов по бизнес-архитектуре API, балансировке нагрузки, CDN, DNS и другим вопросам. А также задавал вопросы, связанные с HTTP, с просьбой описать различия между версиями HTTP, в основном различия между тремя версиями 1.0/1.1/2.0. В частности, разница между 1.0 и 1.1 заключается в модели соединения (короткое соединение, длинное соединение, конвейерное), а разница между 1.1 и 2.0 заключается в одном длинном соединении мультиплексирования ввода-вывода, проталкивания сервером, деления двоичных кадров, сжатия заголовков. , и т.д.

1.2.2 Алгоритм чистой записи

  1. Обход матрицы строк возврата

1.3.Третья сторона:

1.3.1 Опыт проекта

Третья сторона также изучает проектный опыт, но фокусируется на проектировании системы и рисует период предыдущего проектного опыта (который определенно отличается от опыта второй стороны), прося вас описать текущий план и недостатки. Теплое напоминание, вы должны быть хорошо знакомы с опытом работы в проектах в своем резюме, и вы выберете проект с опытом работы.

Спрашивать о недостатках, это яма, а после ее высказывания требуется предложить план улучшения, поэтому ответ должен быть осторожным, лучше всего до собеседования предположить дополнительные условия по текущему проекту, и предложить 2- 3 альтернативы.

Требуется модульность, и если текущая система имеет архитектуру микрослужб, как разделить службы, каковы правила разделения, а также изучить знание архитектуры микрослужб и управления службами (текущее ограничение, переход на более раннюю версию и предохранители).

Например: В предыдущем проекте было задействовано проектирование горячего бассейна в социальной сцене, и требовалось изложить существующие решения и недостатки, а затем изложить решение по оптимизации.Это также расширило бы текущий порядок величин много раз, требуя повторной архитектуры решения. Есть также веерные отношения, двухтактные комбинации, то есть разница между диффузией чтения и диффузией записи и как их комбинировать.

1.3.2 Алгоритм открытой записи

  1. Ближайший общий предок нескольких узлов в бинарном дереве

1.4. Резюме

После трех технических аспектов это HR, поэтому я не буду много говорить об этом. Общий опыт собеседования ByteDance заключается в том, что интервьюер очень профессионален и требует знакомства с базовыми знаниями.Перед собеседованием вы должны подготовиться к собеседованию, прежде чем идти на собеседование. Темы LeetCode также должны быть очищены. Времени на написанный от руки алгоритм остается не так много, 3-10 минут, если вы не написали его за 3 минуты, вам необходимо объяснить идеи решения задачи.

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

2. Тенсент

У Tencent много процессов собеседования, плюс в общей сложности 8 раундов письменного теста, 6 раундов технического + 1 раунд HR + 1 раунд письменного теста.

2.1 Первая сторона

Во-первых, это телефонное интервью, в ходе которого в основном изучается проект и задаются основные вопросы в рамках проекта. Время 30 минут.

  1. Имея предыдущий опыт работы с микросервисами, интервьюер подробно расспросил об архитектуре микросервисов, реализации фреймворков, управлении сервисами и распределенной согласованности.
  2. Я раньше играл в систему мониторинга журналов.Сначала я изучу архитектуру и знания, связанные с ELK, сосредоточившись на описании некоторых архитектурных принципов Elasticsearch, таких как принцип инвертированного индекса.
  3. На вопрос о соответствующих знаниях об очередях сообщений, связался с Kafka и спросил, могут ли сообщения в Kafka потребляться несколькими потребителями? и механизм выборов и механизм HW.
  4. Открытые вопросы, рассказывают о ранее возникшей проблеме и способах ее решения. Здесь описываются проблемы, возникающие в производственной среде, и описывается устранение неполадок.
  5. Проблемы, связанные с базой данных и Redis, принцип индекса проверки базы данных и разница между несколькими транзакциями. Redis спрашивает о структурах данных, о том, как реализовать очереди с задержкой и о принципе распределенных блокировок.

2.2 Второй письменный тест

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

2.3 Третья и четвертая стороны

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

Будет много открытых вопросов, включая идеи решения проблем и сотрудничество между коллегами.

Запрошенные очки знаний включают алгоритм балансировки нагрузки, то, как ngnix выполняет ограничение тока, разницу между четырехуровневым LVS и семиуровневым Ngnix, а также идею дизайна микросервисной архитектуры. Время интервью 20-30 минут.

2.4 Пятое и шестое интервью технического комитета

Пятый и шестой — личные интервью, технические интервью, которые очень сложны. Изучите дизайн системы и дизайн архитектуры. Требуется глубокое понимание знаний

  1. В основном дизайн системы, я спросил, как спроектировать систему seckill, и объяснил ее в четырех аспектах: уровень доступа, уровень интерфейса, уровень очереди сообщений и уровень логики.Уровень доступа может делать вещи, связанные с управлением услугами, а уровень интерфейса может делать переключатели мгновенной покупки, черные и белые списки, случайный отказ и другую обработку, логический уровень специально реализует логику перехвата, включая распределенные блокировки Redis и согласованность DB и Redis.

  2. Несколько реализаций распределенных транзакций также основаны на системе seckill, например, двухэтапная, трехэтапная компенсация (TCC) и реализация очереди сообщений на основе надежных служб сообщений. Подробно обсуждаются реализация и различия этих типов, и требуется нарисовать архитектурную схему распределенной транзакции на основе очереди сообщений надежной службы сообщений, а также как обеспечить надежность и согласованность вышестоящей службы и нижестоящей службы. .

  3. Изучите микросервисную архитектуру, принцип разделения сервисов, принцип RPC-фреймворка и принцип выбора плота протокола согласованности управления конфигурацией (и т. д.).

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

  5. Открытые вопросы, самые впечатляющие проблемы и способы их решения.

2.5 Резюме

У Tencent мало вопросов по алгоритмам, и в основном они исследуют широту и глубину знаний. Понимание архитектуры требует большей глубины, сосредоточив внимание на исследовании принципов.

Для получения дополнительных статей и обсуждений, пожалуйста, обратите внимание на общедоступный аккаунт: «Tiancheng Technology Talk».