Есть чувства, есть галантерейные товары, поиск в WeChat【Третий принц Ао Бин] Обратите внимание на этого другого программиста.
эта статьяGitHub github.com/JavaFamilyВключено, и есть полные тестовые площадки, материалы и мой цикл статей для интервью с производителями первой линии.
предисловие
Общее представление о Dubbo почти такое же.Сегодня начнется собеседование.Я перечислю некоторые общие вопросы интервью с Dubbo и сосредоточусь только на важных.Я не буду упоминать слишком простые.
Он не только даст вам ответ на вопрос интервью, но и проанализирует причину, по которой интервьюер задал этот вопрос, то есть его внутреннюю деятельность.
Что я хочу попросить у вас? Хотите ответ? Какую яму ты хочешь вырыть, чтобы в нее прыгнуть?
начать шоу
Знаете, что такое RPC?
Как правило, интервьюеры используют такие вопросы для того, чтобы «разогреть поле».Собеседование – это постепенный процесс, так что вам не нужно быть слишком нетерпеливым, чтобы начать говорить о Барбаре, но сначала ухватить ключевые моменты и кратко объяснить.
И интервьюер может определить из этого вопроса, будет ли ваш ежедневный рабочий контент даже не касаться RPC, или это будет просто универсальный Spring MVC?
Действительно, есть много студентов, которые не были знакомы с RPC, и это нормально, например, какой-то аутсорсинг или какие-то небольшие проекты, но они не контактируют с вами в будние дни, и вы не знаете, что это две концепции.
Это может отражать со стороны, что этому человеку не следует много заниматься после работы,Я даже RPC не знаю, поэтому ничего не могу сказать, в основном, чтобы быть крутым, первоначальное впечатление о вас плохое, если только вы не можете иметь яркое выступление со спины.
Ответ: RPC — это удаленный вызов процедур, что соответствует локальному вызову процедур.
Так почему RPC, HTTP — это плохо?
В этот момент интервьюер начал задавать вопросы.
Этот вопрос на самом деле очень интересный. Некоторые интервьюеры могут плохо знать себя, а потом думать, что они очень ясны, поэтому, когда они задают этот вопрос, есть другой тип действительно ясного вопроса. Задавая этот вопрос, вы прыгаете в яму. .
Поскольку RPC и HTTP не одного уровня, они не являются строго сопоставимыми и их не следует сравнивать., и задан вопрос, чтобы сравнить эти два.
HTTP — это только протокол передачи, протокол регулирует только определенный формат связи, а RPC предшествует HTTP, так что если вы действительно хотите спросить, зачем вам HTTP, когда есть RPC.
По сравнению с локальными вызовами процедур, RPC используется для связи между распределенными системами и может передаваться по протоколу HTTP или специальному протоколу на основе TCP.
так ты хочешьСначала выдвинули, что эти два не одного уровня, нет никакой сопоставимости, а затем показать его снова, можно сказать, что протокол HTTP является относительно избыточным, поэтому большинство RPC основаны на пользовательском протоколе TCP, а настроенный протокол является наиболее подходящим для вас.
Конечно, есть и RPC-фреймворки, основанные на протоколе HTTP.В конце концов, HTTP — это открытый протокол и относительно распространенный.Например, HTTP2 был соответствующим образом сжат, и все вызовы между системами происходят во внутренней сети, так что влияние не будет отлично.
После этой волны ответов интервьюер почувствует, что в вас что-то есть, начнет немного интересоваться вами, начнет узнавать вас.
Расскажите нам, что вы знаете о Даббо?
Интервьюер сначала задаст более широкий вопрос, а затем найдет некоторые прорывы в ваших ответах, чтобы задать углубленные вопросы, так что этот вопрос на самом деле довольно открытый, вы можете ответить на него, исходя из исторического развития, или вы можете ответить на него из общей структуры. .
Если вы отвечаете с точки зрения исторического развития, это означает, что вы также очень обеспокоены некоторыми программами с открытым исходным кодом в будние дни, и эта сторона также может отражать ваше отношение к открытым исходным кодам.
Если отвечать по общей структуре, то, несомненно, тоже можно, рекомендуется говорить по-простому и ждать дальнейших вопросов.
История развития, это на самом деле упоминается в предыдущей статье C:
Dubbo — это RPC-фреймворк на основе Java с открытым исходным кодом от Alibaba.Некоторое время он молчал, но в 2017 году Alibaba возобновила обслуживание Dubbo.
А в 2018 году он объединился с Dangdang's Dubbox, вошел в инкубатор Apache и официально стал проектом верхнего уровня Apache после выпуска в 2019 году.
В настоящее время основным обслуживанием сообщества Dubbo являются версии 2.6.x и 2.7.x. Версия 2.6.x в основном основана на исправлениях ошибок и небольшом количестве функциональных улучшений. Это стабильная версия.
Выпуск версии 2.7.5 рассматривается Dubbo как этапный выпуск, поддерживает gRPC и повышает производительность на 30% (если вы не понимаете gRPC и почему производительность улучшена, не говорите об этом, не говорите копай себе яму).
Последняя версия 3.0 исследует направление облачных технологий.
внимание, Если вы не знакомы с различными версиями истории и не знаете, что будет делать последняя версия, не отвечайте в этом направлении.Если вам повезет, интервьюер мало что знает об этом. Он может и не спрашивать.
Общая архитектура,выше тоже упомянули первый простой,и ждите дальнейших вопросов,потому что если интервьюер понимает,он обязательно спросит углубленно,если вы вас не поняли,у Варвары куча его чувств.
Просто кратко упомянем эти роли.
узел | Описание роли |
---|---|
Consumer | Потребители услуг, которым необходимо вызывать удаленные службы |
Registry | Регистрационный центр |
Provider | поставщик услуг |
Container | Контейнер, в котором работает служба |
Monitor | Центр мониторинга |
Например, Dubbo обычно делится на вышеперечисленные роли, и соответствующие роли — xxxx.
Сделайте паузу, чтобы увидеть ответ интервьюера. Если вы не говорите, продолжайте говорить об общем процессе.
Сначала запускается поставщик услуг Provider, а затем регистрирует службы, которые он может предоставить, в реестре.
Потребитель службы Потребитель начинает подписываться на реестр для необходимых ему служб. Затем реестр уведомляет потребителя о метаинформации провайдера.После этого потребитель получает адрес провайдера из реестра, поэтому он может выбрать провайдера через балансировку нагрузки и вызвать его напрямую.
Позже, если метаданные поставщика услуг изменятся, реестр передаст изменения потребителю услуг.
И поставщики услуг, и потребители будут фиксировать количество и время звонков в памяти, а затем регулярно отправлять статистические данные в центр мониторинга.
Это в основном то же самое.Если вы читали серию статей C's Dubbo раньше, то даже если вы читали исходный код, вы должны иметь четкое представление о серии процессов, поэтому вы можете сказать, что вы читали исходный код Dubbo код в нужное время.
Как мы все знаем, чтение исходного кода, безусловно, является плюсом, поэтому этот момент следует упомянуть.
Как только интервьюер услышал это, хороший парень увидел исходный код, не так ли? Давайте поговорим об этом.
Затем начинается тесто.
После прочтения исходного кода, как насчет процесса предоставления услуги?
Экспозиция службы начинается после обновления контейнера IOC Spring, и она будет собрана в URL-адрес в соответствии с параметрами конфигурации, а затем будут выполняться локальные или удаленные вызовы в соответствии с параметрами URL-адреса.
пройдетproxyFactory.getInvoker
, используйте javassist для выполнения динамического прокси, инкапсулируйте реальный класс реализации, а затем выберите соответствующий протокол через параметр URL для protocol.export, по умолчанию используется протокол Dubbo.
Когда он открывается в первый раз, createServer будет вызываться для создания сервера, который по умолчанию является NettyServer.
Экспортер, полученный экспортом, затем сохраняется в карте для последующих удаленных вызовов, а затем информация о провайдере регистрируется в реестре.
В принципе, это процесс, он почти такой же, и никто не может его запомнить, если он будет слишком подробным.
После прочтения исходного кода, как насчет процесса внедрения сервиса?
Есть два варианта предоставления услуг: первый — стиль голодного человека, а второй — стиль ленивого человека.
Голодный стиль означает, что он будет импортирован после загрузки, ленивый стиль — запуск процесса импорта только тогда, когда служба внедряется в другие классы, и по умолчанию используется ленивый стиль.
Он будет собран в URL в соответствии с параметрами конфигурации.Вообще говоря, мы настроим реестр, поэтому мы создадим RegistryDirectory Зарегистрируйте информацию о потребителе в реестре и подпишитесь на узлы провайдера, конфигурации, маршрутизации и другие узлы.
Изучив информацию провайдера, он войдет во введение протокола Dubbo, создаст Invoker, который будет включать NettyClient для удаленной связи, и, наконец, обернет Invoker через Cluster, который по умолчанию является FailoverCluster, и, наконец, вернется к классу прокси.
Достаточно сказано, ключевые моменты были упомянуты.
Не будь слишком худым, не говорите все, что вы знаете, это упустит ключевые моменты.Например, если вы хотите вставить описанный выше процесс, есть три способа представить: местное знакомство, прямое дистанционное знакомство и знакомство через центр регистрации.
Потом мы поговорим о знакомстве с местными жителями, у Барбары будет очень грязно, так чтоВо время интервью необходимо сократить и сосредоточиться непосредственно на ключевых моментах.
На самом деле, то, что я действительно сказал, должно быть более кратким, чем то, что я сказал выше, Боюсь, что всем не хватит ясности, чтобы сказать немного подробнее.
После прочтения исходного кода, как насчет процесса вызова службы?
Вызов метода интерфейса вызовет ранее сгенерированный прокси-класс, а затем выберет инициатора из кластера с помощью механизма фильтрации маршрутизации и балансировки нагрузки, чтобы инициировать удаленный вызов.В это время запрос и идентификатор запроса будут записаны и ждут для ответа сервера.
После того, как сервер примет запрос, он найдет ранее выставленную карту по параметрам, получит соответствующий экспортер и, наконец, вызовет реальный класс реализации, а затем соберет результат и вернет его, этот ответ принесет идентификатор предыдущего запроса .
Получив этот ответ, потребитель найдет ранее записанный запрос через идентификатор, а затем вставит ответ в соответствующее Future после обнаружения запроса, разбудит ожидающий поток, и, наконец, потребитель получит ответ, и процесс будет завершен. .
Ключом является кластеризация, маршрутизация, балансировка нагрузки, а Dubbo по умолчанию асинхронный, поэтому как соотносятся запросы и ответы.
Позже я могу спросить Dubbo, как реализовать асинхронное в синхронное, это было сказано в предыдущей статье C, и студенты, которые забыли, могут вернуться и посмотреть.
Вы знаете, что такое СПИ?
Это другое направление.Из вышеприведенного ответа,будь то от протокола Dubbo,кластера,метода экспорта и т.д.-это везде тень SPI,поэтому если вы спрашиваете о Dubbo,то в SPI сомнений нет.Потому что SPI везде в исходном коде, и SPI также является краеугольным камнем масштабируемости Dubbo.
Так что в этом вопросе нет никакой хитрости, просто ответьте на него прямо.
SPI — это интерфейс поставщика услуг, который в основном используется в фреймворке. Фреймворк определяет интерфейс. Разные пользователи имеют разные потребности, поэтому им нужны разные реализации. SPI определяет конкретное местоположение. Соглашения Java SPI находятся в пути к классам. Каталог META-INF/services/файл, названный в честь интерфейса службы,ПотомВ файл записывается полное имя конкретного класса реализации, предоставленного этим пакетом jar..
Таким образом, вы можете найти соответствующий файл через интерфейс, получить конкретный класс реализации и затем загрузить его, чтобы можно было гибко заменить конкретный класс реализации.
Почему Dubbo не использует SPI JDK, а реализует его самостоятельно?
Задавать этот вопрос являетсяПосмотрите, есть ли у вас глубокое понимание, или подумайте об этом сами, а не жесткий взгляд на исходный код или какие-то знания.
Есть много моментов для размышления.Это не то, что написано в книге.Нужно знать причины для этого,какие плюсы и минусы.Можно увидеть,человек мнительный или имеет свое мышление.
Ответ: Поскольку Java SPI просматривает файл конфигурации SPI при поиске класса реализации расширения иСоздание экземпляров всех классов реализации, предполагая, что процесс инициализации класса реализации потребляет ресурсы и занимает много времени, но он не используется в вашем коде, что приводит к пустой трате ресурсов.
Таким образом, Dubbo самостоятельно реализует SPI, присваивает имя каждому классу реализации, находит полное имя соответствующего класса реализации в файле по имени, затем загружает и создает экземпляры и загружает по запросу.
Этот ответ добавит баллов, интервьюер в ладоши хлопает в ладоши, неплохо, неплохо.
Почему Dubbo по умолчанию использует Javassist?
Вы ответили выше, что Dubbo использует динамический прокси Javassist, поэтому вы, вероятно, спросите, почему вы используете этот прокси, и он также может быть расширен до динамического прокси JDK, ASM и CGLIB.
Так что на это также стоит обратить внимание. Если вы не уверены в приведенном выше ответе, не упоминайте динамический прокси. Если он ясен, вы должны упомянуть его, чтобы побудить интервьюера задать вам вопросы о динамическом прокси. очень важно.
Интервьюера нужно заинтересовать, в конце концов, он также хочет знать, насколько вы хороши в своих превосходных аспектах, и вы также учитесь на сильных сторонах друг друга, чтобы достичь беспроигрышной ситуации.
Ответить, почему используется Javassist, очень просто:Это быстро, а генерация байткода удобна.
ASM быстрее, чем Javassist, но не на порядок быстрее, и Javassist может генерировать байт-коды, просто соединяя строки, в то время как ASM нужно генерировать вручную, что дорого и громоздко.
Если бы вас попросили спроектировать инфраструктуру RPC, как бы вы ее спроектировали?
Интервьюеры любят задавать такие вопросы, чтобы проверить дизайнерские способности кандидатов и наличие у них всестороннего понимания фреймворка в мирное время.
Если вы обычно не думаете об этом, и вы не думали об этом в этом отношении, ваши ответы будут неорганизованными и загроможденными, но вам не нужно паниковать, вам не нужно думать очень всесторонне, и Ваши ответы очень подробные. Это не обязательно. Интервьюер хочет этого. Вот эти ключевые моменты.
Вы можете начать снизу вверх.
В первую очередь нужно добиться высокой производительности передачи по сети, чего можно добиться с помощью Netty.Не нужно самому повторять колесо, а потом нужно настраивать протокол.Ведь удаленное взаимодействие нужно следовать определенный протокол, а затем вам нужно определить протокол сериализации.В конце концов, передача по сети Все передаются в двоичном виде.
Затем можно разработать язык описания сервисов, то есть IDL (Interface description language), чтобы все сервисы определялись в IDL, а затем фреймворк конвертировался в интерфейс конкретного языка программирования, чтобы его можно было кроссировать. -язык.
В это время основные функции были доступны недавно, но они являются только самыми основными.Если используется промышленный уровень, он должен быть простым в использовании в первую очередь.Поэтому фреймворк должен скрывать вышеуказанные детали от пользователей, чтобы они не чувствуют разницы между локальными и удаленными вызовами, поэтому требуется реализация прокси.
Затем необходимо реализовать функции кластера, поэтому требуются такие функции, как обнаружение и регистрация сервисов, поэтому требуется центр регистрации.Конечно, детали все еще должны быть экранированы.
Наконец, необходим полный механизм мониторинга, а также отчеты о ситуации с вызовами и т. д., необходимые для облегчения эксплуатации и обслуживания.
Прототип такого RPC-фреймворка почти такой же.
Наконец
На этом серия Dubbo заканчивается.На самом деле деталей еще много.Если хочешь писать,надо много писать.
Однако общий контекст прояснился, и последующее совершенствование по-прежнему должно полагаться на собственные усилия каждого.
Вопросы на собеседовании определенно больше, чем эти. Вопросы на собеседовании бесконечны. Настоящее интервью должно охватывать те моменты, на которые вы ответили, чтобы копнуть глубже, поэтому я не могу имитировать его. Я могу только рассказать вам общие ключевые моменты и попытаться выяснить интервьюер умственная деятельность.
Когда интервьюер спрашивает вас, вы можете попытаться разобраться и посмотреть, что он хочет спросить, это ключ.
Не паникуйте во время собеседования, вы и интервьюер равны, и интервьюер не обязательно вам подходит, и иногда интервью зависит от удачи, и если вы провалите собеседование, не расстраивайтесь. .
давай.
болтовня
Я Ао Бин,Чем больше вы знаете, тем больше вы не знаете, спасибо за ваши таланты:как,собиратьиКомментарий, увидимся в следующий раз!
Статья постоянно обновляется, вы можете искать в WeChat "Третий принц Ао Бин"Прочтите это в первый раз, ответьте [материал] Подготовленные мной материалы интервью и шаблоны резюме крупных заводов первой линии, эта статьяGitHub github.com/JavaFamilyОн был включен, и есть полные тестовые сайты для интервью с крупными заводами.Добро пожаловать в Star.