Помните опыт с Alibaba

интервью

В середине марта я получил от старшего брата из Ant Financial на Lagou запрос на мое резюме.В то время я был удивлен, что кто-то из Ant Financial нашел меня и дал без раздумий.

Я польщен.Знаю,как далек мой уровень от Али.У меня никогда раньше не хватило смелости проголосовать,и даже не рискнул попробовать. На этот раз я действительно взял на себя инициативу, чтобы найти его, и тогда я снова подумал, неужели у Али так мало людей? Или просто выполнить какие-то KPI, идея наивная.

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

В любом случае, раз интервью здесь, давайте попробуем. Для Sansheng также является благословением однажды встретиться с технологической компанией такого уровня и увидеть реальный разрыв. За время, прошедшее с тех пор, как я ушел, я также наверстал JVM, базовые алгоритмы структуры данных и некоторые часто возникающие базовые проблемы Java.

В 8:25 вечера в понедельник мне позвонил Большой Муравей, и, конечно же, согласно легенде, он все еще был на работе. В то время я был удивлен. Я не ожидал, что это будет телефонное интервью, потому что это не было упомянуто в электронном письме. Оглядываясь назад, кажется, что одна сторона была в основном телефонным интервью, и у некоторых друзей также было телефонное интервью. .

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

Самостоятельное введение

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

резьбовая часть

1. Каковы методы реализации многопоточности?

Эта тема в основном встречается с одной стороны, наследуя класс Thread, реализуя интерфейс Runnable и, наконец, вызывая метод start() для запуска потока.

Еще одним важным моментом здесь является различие и связь между методами start() и run().

При непосредственном вызове метода start() поток находится в состоянии готовности (работы), но на самом деле не запущен. Вместо этого, получив квант времени ЦП, начните выполнение метода run(), который содержит тело нашего потока.

Мы напрямую запускаем метод run(), который на самом деле является обычным вызовом метода, выполняемым в основном потоке.не включит многопоточность.

2. Опишите некоторые ситуации взаимной блокировки потоков?

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

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

Вы можете искать следующие два сценария тупиков:

  • Три человека, три палочки для еды: каждый должен поставить рядом две палочки для еды, чтобы начать есть

  • Проблема с банковским переводом: поток A переводит деньги со счета X на счет Y, а поток B переводит деньги со счета Y на счет X, после чего возникает взаимоблокировка.

3. Использовался ли в проекте пул потоков? Как это используется?

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

Интервьюер сказал: «Хорошо, вы видели исходный код внутри пула потоков? Какой пул потоков?»

Исходный код здесь, я немного поколебался, я сказал, что не знаком с ним, а потом сказал несколько типов пулов потоковnewSingleThreadExecutor,newFixedThreadPool,newCachedThreadPoolНо не хватает одногоnewScheduledThreadPoolне помнил.

4. Каков принцип работы пула потоков? Что означают параметры базового метода?

Отвечая на этот вопрос, я застрял во времени. Я знаю, что все эти нижние слои являются вызовамиThreadPoolExecutor, но я не запомнил имя, поэтому интервьюер напомнил мне в это время, а затем сказал, что это не имеет значения.

Затем он спросил: «Тогда вы знаете, каковы его параметры? Что они означают?»

Я ответил, что есть количество потоков и время выживания потока, а остальные не упоминаются. Тогда интервьюер сказал: «Все в порядке».

Чтобы добавить: Нижний уровень пула потоков реализуется ThreadPoolExecutor.

public ThreadPoolExecutor( int corePoolSize, 
                                                int maximumPoolSize, 
                                                long keepAliveTime, 
                                                TimeUnit unit,
                                                BlockingQueue<Runnable> workQueue, 
                                                ThreadFactory threadFactory, 
                                                RejectedExecutionHandler handler)

Значения нескольких параметров:

  • corePoolSize: минимальное количество потоков в пуле потоков.
  • maxPoolSize: максимальное количество потоков в пуле потоков. RejectedExecutionHandler будет использоваться при превышении максимального количества потоков.
  • keepAliveTime: максимальное время выживания потока, по истечении которого он будет перезапущен.
  • Блок: максимальное время выживания
  • workQueue: очередь, которая кэширует асинхронные задачи, которые необходимо выполнить.
  • threadFactory: Новая фабрика нитей
  • обработчик: Политика отклонения, которая указывает политику, принятую, когда пул потоков отказывается добавлять новые задачи, когда workQueue заполнена и количество потоков в пуле достигает максимального размера пула. DiscardPolicy: отбросить текущую задачу, DiscardOldestPolicy: отбросить самую старую, CallerRunsPolicy: поток, который отправляет задачу в пул потоков, выполняет задачу, AbortPolicy: выдает исключение RejectedExecutionException.

Когда я спросил здесь, мой ответ был действительно слишком ограниченным, поэтому интервьюер не стал задавать никаких дополнительных вопросов, но сказал: «Все в порядке».

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

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

Раздел MyBatis

5. В чем разница между $ и # в mybatis?

Ответ: Оба они могут использоваться для передачи параметров, но # может быть введен sql, а $ обрабатывается конкатенацией строк, поэтому могут возникнуть проблемы с sql-инъекцией.

Есть еще один ключевой момент, на который не был дан ответ выше, то есть #{} заменит часть параметра заполнителем ? во время предварительной обработки. становится следующим оператором sql:

select * from user where name = ?;

А ${} — это всего лишь простое сращивание строк, которое напрямую встраивается в конечный sql-оператор на этапе динамического разбора:

select * from user where name = 'zhouq';

6. Каковы сценарии использования $ и #?

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

7. Как интерфейс dao mybatis устанавливает связь с sql в файле xml?

Когда меня тут спросили, я растерялся, а потом ответ был такой: mybatis сначала разберет эти xml файлы, а в xml файлах есть namespaces, которые могут установить связь с dao, и тогда каждый сегмент sql в xml будет иметь идентификатор Ассоциируется с интерфейсом в dao. . .

Тогда интервьюер сказал: «Если у меня есть два xml-файла, которые имеют отношение к этому дао, разве это не конфликт?», И тогда я признался.

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

mybatis здесь нет.

база данных

Первый вопрос, какую базу данных вы обычно используете, конечно же, mysql.

8. Механизм блокировки MySQL?

Интервьюер спросил, понимаете ли вы механизм блокировки mysql? Я только ответил на блокировку строки. Потом другие не подумали, узнали, а другие забыли.

Рекомендуется узнать о блокировках таблиц, блокировках страниц и так далее.

9. Вы понимаете эксклюзивные блокировки и общие блокировки?

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

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

10. Сценарная проблема: когда поток А обрабатывает фрагмент данных, например списание платежа или обновление статуса, другие потоки, такие как В, должны заблокировать его и больше не могут работать с этими данными, включая запросы. Подождите.После завершения обработки потока A поток B может его обработать. A и B генерируются одним и тем же бизнес-кодом, а не разными предприятиями. Чтобы использовать блокировку базы данных для достижения, как достичь?

Задавая этот вопрос, интервьюер терпеливо объяснял сцену, а затем спросил меня, помню ли я что-то? На самом деле, я просто хочу изучить приведенный выше вопрос о блокировках базы данных.

11. Как реализован индекс mysql?

Ответ — дерево B+, а затем интервьюер продолжает спрашивать, можете ли вы описать общую структуру дерева B+. Я мало что знаю об этом содержании, поэтому просто признаю это.

связанные с кешем

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

12. Сбой кеша, проникновение в кеш, лавина кеша?

13. Как решить проблему сбоя данных точки доступа?

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

Для получения подробной информации перейдите по ссылке:Решение Али проблем проникновения в кеш, поломки кеша, лавины кеша и инвалидации данных хотспотов

14. Сначала удалите кеш или сначала обновите базу данных, почему?

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

Рассмотрим этот сценарий:

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

В настоящее время типичной проблемой является «несогласованность двойной записи».

Обсуждение этого вопроса:Процедура обновления кеша - г-н Чен Хао

kafka

15. Какие роли включены в архитектуру кафки?

Сначала я не знал, как ответить на этот вопрос, поэтому я сказал Брокер, и интервьюер напомнил мне: «Разве у нас обычно нет производителей, потребителей или чего-то еще?» Ну, я сказал, что есть производители, потребители, тема , ждать.

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

Есть и другие, такие как Partition, группы потребителей, и основной из них — zk.

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

16. Самая маленькая единица работы в кафке?

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

Если вы столкнулись с этим вопросом, лучше всего спрашивать интервьюеру.

17, Кафка новости неоднократно потребляется? Как мне это сделать?

В начале интервьюер сказал, знаете ли вы проблему дублирования сообщений kafka? Вы сталкивались.

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

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

Интервьюер: «ок».

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

18. Механизм подтверждения Kafka? Как реализован ack в кластере?

Здесь я отвечаю только за механизм ACK, а принцип реализации не ответил.

Redis

19. Какие структуры данных есть в Redis

Чаще всего используется String, а также List, Hash, Set, ZSet.

Больше вопросов не задавали.

А вот с вопросами типа почему Redis такие быстрые, я думаю, вы должны понимать, с ними часто сталкиваются другие мелкие партнеры. То есть что такое мультиплексирование?

исходный код

20. Здесь интервьюер спрашивает, видели ли вы исходный код? Рамка тоже работает? JDK тоже работает.

Затем я сказал, что читал исходный код HashMap, а затем рассказал об общем процессе установки и получения и о том, как выглядит его структура.

В этом процессе я также спросил, как определить, равны ли два объекта? То есть точка знания == и равно.

Остальные не стали спрашивать. Здесь весь процесс телефейса закончился, и он сказал, что даст мне ответ на интервью в течение 10 рабочих дней. Весь процесс занял около 40 минут.

Я знаю, круто.

Наконец, чтобы подвести итог

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

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

Благодаря этому интервью я лично ощутил разницу. Однако есть и другие направления.

Слово предупреждения для всех:

  • Обычно накапливают больше: лучший способ учиться — экспортировать или обучать других.
  • Сначала глубокое, а потом широкое: углубленное изучение, не только на уровне использования API, углубленное понимание системы по частям, а потом уже заниматься другим.
  • Создайте систему знаний: будь то блог или карта контента, который вы изучили, не забудьте организовать этот разрозненный контент в свои собственные знания.
  • Не принимайте шансов: не будь голым, если вы разобрались, посмотрите на него и подготовим больше. Интервью большого завода копает самую глубокую часть вас. Не думайте, что это нормально запомнить только некоторые вопросы интервью, и вопросы бесконечны. Спазмы в основном невозможно пройти. Если вы вошли в тестовые вопросы на спину, вы удивителю и восхищаетесь.
  • Время от времени ходите на собеседование: не ходите за мной, вы в компании уже более трех лет, а на очное собеседование не ходили, вы знаете только то, что нужно дополняться, когда вы выходите на очное собеседование.

Ответы на некоторые вопросы могут быть не слишком исчерпывающими, и вам нужно сделать это самостоятельно. Вот лишь описание процесса и содержания интервью.

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

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

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

在这里插入图片描述