Java 200+ Дополнительные вопросы для интервью ② Модуль Netty

интервью Java
Java 200+ Дополнительные вопросы для интервью ② Модуль Netty

Давайте видеть наш прогресс каждый день. Лао Ван предлагает вам составить наиболее полный список интервью по Java и серьезно заняться одним делом.

Эта статья является предыдущей статьей«Наиболее 200 самых распространенных вопросов на собеседовании по Java»Второй дополнительный модуль, первый модуль:«Java 200+ Вопросы для интервью дополняют модуль ThreadLocal».

1. Что такое Нетти?

Netty — это инфраструктура сетевого взаимодействия, разработанная на основе NIO (неблокирующий ввод-вывод, неблокирующий ввод-вывод).По сравнению с BIO (блокирующий ввод-вывод, блокирующий ввод-вывод) его производительность параллелизма значительно улучшена. Что похвально, так это то, что преимущества ремонтопригодности и производительности не теряются при обеспечении скорости и простоты использования.

2. Каковы характеристики Нетти?

  • Высокий уровень параллелизма: Netty — это инфраструктура сетевой связи, разработанная на основе NIO (неблокирующий ввод-вывод, неблокирующий ввод-вывод).По сравнению с BIO (блокирующий ввод-вывод, блокирующий ввод-вывод) производительность параллелизма значительно улучшена.
  • Быстрая передача: передача Netty основана на функции нулевого копирования, чтобы свести к минимуму ненужные копии памяти и добиться более эффективной передачи.
  • Хорошая инкапсуляция: Netty инкапсулирует многие детали операций NIO и предоставляет простой в использовании интерфейс вызова.

3. Что такое Zero Copy в Netty?

Нулевая копия Netty в основном включает три аспекта:

  • Получение и отправка ByteBuffer Netty использует DIRECT BUFFERS и использует прямую память вне кучи для чтения и записи Socket без необходимости во второй копии байтового буфера. Если традиционная память кучи (HEAP BUFFERS) используется для чтения и записи сокета, JVM скопирует буфер кучи памяти в прямую память, а затем запишет его в сокет. По сравнению с прямой памятью вне кучи, сообщение имеет дополнительную копию памяти буфера во время процесса отправки.
  • Netty предоставляет комбинированный объект Buffer, который может объединять несколько объектов ByteBuffer.Пользователи могут работать с комбинированным буфером так же легко, как и с буфером, избегая традиционного способа объединения нескольких небольших буферов в один большой буфер путем копирования памяти.
  • Передача файлов Netty использует метод transferTo, который может напрямую отправлять данные файлового буфера на целевой канал, избегая проблемы копирования памяти, вызванной традиционным методом циклической записи.

4. Каковы преимущества Netty?

  • Простой в использовании: он инкапсулирует многие детали NIO и проще в использовании.
  • Мощные функции: предустановленные различные функции кодека, поддержка различных основных протоколов.
  • Широкие возможности настройки: коммуникационная структура может быть гибко расширена с помощью ChannelHandler.
  • Высокая производительность: по сравнению с другими основными инфраструктурами NIO в отрасли, Netty имеет лучшую общую производительность.
  • Стабильный: Netty исправляет все обнаруженные ошибки NIO, позволяя разработчикам сосредоточиться на самом бизнесе.
  • Активное сообщество: Netty — это активный проект с открытым исходным кодом с коротким циклом итерации версий и быстрыми исправлениями ошибок.

5. Каковы сценарии применения Netty?

Типичными приложениями являются: платформа распределенных служб Ali Dubbo, которая по умолчанию использует Netty в качестве основного компонента связи, а RocketMQ также использует Netty в качестве основы для связи.

6. Каковы высокие показатели Netty?

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

7. В чем разница между Netty и Tomcat?

  • Роли различаются: Tomcat — это контейнер сервлетов, и его можно рассматривать как веб-сервер, тогда как Netty — это асинхронная среда сетевых приложений, управляемая событиями, и инструменты, используемые для упрощения сетевого программирования, такие как серверы сокетов TCP и UDP.
  • Различные протоколы: Tomcat — это веб-сервер, основанный на протоколе http, в то время как Netty может настраивать различные протоколы с помощью программирования, поскольку сама Netty может кодировать/декодировать потоки байтов, все, что может реализовать Netty, HTTP-сервер, FTP-сервер, UDP-сервер, RPC-сервер, Сервер WebSocket, прокси-сервер для Redis, прокси-сервер для MySQL и т. д.

8. Какие важные компоненты есть в Netty?

  • Канал: абстрактный класс сетевых операций Netty, он включает в себя основные операции ввода-вывода, такие как привязка, подключение, чтение, запись и т. д.
  • EventLoop: в основном сотрудничает с Channel для обработки операций ввода-вывода, чтобы обрабатывать то, что происходит в жизненном цикле соединения.
  • ChannelFuture: все операции ввода-вывода в инфраструктуре Netty являются асинхронными, поэтому нам нужен addListener() ChannelFuture, чтобы зарегистрировать ChannelFutureListener для прослушивания событий.Когда операция завершается успешно или не удается, прослушиватель автоматически активирует возвращаемый результат.
  • ChannelHandler: действует как логический контейнер для обработки всех входящих и исходящих данных. ChannelHandler в основном используется для обработки различных событий, событий здесь очень много, таких как соединение, прием данных, исключение, преобразование данных и т.д.
  • ChannelPipeline: предоставляет контейнер для цепочки ChannelHandler. При создании канала он автоматически назначается своему выделенному ChannelPipeline. Эта ассоциация является постоянной.

9. Сколькими способами Нетти отправляет сообщения?

У Нетти есть два способа отправки сообщений:

  • Пишите прямо в Channel, и сообщение начинает двигаться из хвоста ChannelPipeline;
  • Запишите в ChannelHandlerContext, привязанный к ChannelHandler, и сообщение перемещается из следующего ChannelHandler в ChannelPipeline.

10. Сколько потоков Netty запускает по умолчанию? Когда это начинается?

Netty по умолчанию использует удвоенное количество процессоров ЦП и запускается после связывания.

11. Какие настройки типа сердцебиения поддерживает Netty?

  • readerIdleTime: время ожидания чтения (то есть тестовая сторона не получает сообщения от тестируемой стороны в течение определенного периода времени).
  • WriterIdleTime: время тайм-аута записи (то есть тестовая сторона отправляет сообщение тестируемой стороне в течение определенного периода времени).
  • allIdleTime: все типы тайм-аутов.

Наконец

  • Если вы хотите узнать больше о Netty, я рекомендую всем очень хороший буклет Nuggets (отсканируйте QR-код, чтобы получить скидку 20%).

netty小册

Справочная документация

blog.CSDN.net/Колледж Чена/искусство…

blog.CSDN.net/лето Z BH12…

blog.CSDN.net/thinking_FI…

Woohoo.краткое описание.com/afraid/ah 199 руб 28 о...

blog.CSDN.net/Lin UU/art IC…

公众号二维码

Рекомендуемые статьи в прошлом

200+ самых распространенных вопросов на собеседовании по Java

Эксклюзивная коллекция изысканных резюме программиста - вторая пуля