Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.
Вчера я скачал Java16 и попробовал. А смотри, молодец, полноценные 176Мб. Даже если jmc и jvisualvm отсутствуют, он все равно такой большой, что действительно шокирует.
Но даже если JDK достаточно велик, его функций недостаточно. Нам нужно полагаться на сторонние библиотеки для завершения разработки на уровне предприятия. Например, обычный сервис SpringBoot, сотни мегабайт — это легко.
Здесь я провожу инвентаризацию библиотек инструментов и пакетов Jar, обычно используемых в проекте, чтобы увидеть, сколько нужно знать Java-программисту, чтобы пройти долгий путь.
1. Netty
Первый отправлен Нетти. На самом деле у меня есть эгоизм, и только при использовании Netty для разработки некоторых сетевых приложений я могу избавиться от весны, которая в настоящее время становится все более тяжелой, и я также являюсь ясным миром.
Netty стала самой популярной средой сетевого программирования Java. С ним Java имеет право быть наравне с такими языками, как golang. \
2. SpringBoot
Во многих малых и средних компаниях SpringBoot является первым выбором для разработки Java на уровне предприятия. Поскольку его применение слишком обширно, я не буду тратить перо и чернила, чтобы представить здесь слишком много.
В то время целью Spring было убить J2EE. Мальчик, который убил дракона, теперь стал драконом, и теперь он делает то, что J2EE делала тогда. \
Тем не менее, стремление быть как можно более легким всегда было его главной темой, и это никогда не менялось. Потому что не весна неправа, а мир неправ.
3. Библиотека инструментов
По историческим причинам библиотека классов инструментов apache-commons почти везде в проекте, например, lang3, beanutils, collections, codec и т. д. Лично я считаю, что многие инструменты apache-commons переработаны, и я редко использовал их в некоторых новых проектах.
Вместо этого широко используются библиотека классов инструментов guava и отечественная библиотека классов инструментов hutool. С этими инструментами нет необходимости писать в проекте какие-то навороченные, неудобные примочки.
Скажите что-нибудь интересное, слово гуава броское, и оно означает тропический фрукт на китайском языке: гуава, которая растет как маленький арбуз. \
4. Модульное тестирование
JUnit почти стал стандартом для модульного тестирования Java. JUnit5 провел рефакторинг всего модуля. Теперь он содержит 3 основных модуля: JUnit Jupiter, JUnit Platform, JUnit Vintage и т. д.
Vintage существует для совместимости со старыми версиями, Platform — для совместимости с другими тестовыми движками, поэтому можно использовать Mockito на JUnit. Если ваш проект относительно новый, рекомендуется сразу перейти к Юпитеру.
Многие зарубежные системы придают большее значение модульному тестированию, которое отличается от отечественной модели разработки. Хотя говорят, что модульное тестирование является базовым навыком программиста, до популяризации ему еще далеко. Тем не менее, есть также много компаний, которые теперь обязаны писать модульные тесты в виде индикаторов задач. \
5. JMH
JMH — это самый мощный и мощный набор инструментов для тестирования производительности, который в основном используется для тестирования производительности. Если вы обнаружите «горячий код», вы можете протестировать данные о его производительности и оценить улучшение, а затем передать его в JMH. Точность его измерений очень высока, вплоть до наносекундного уровня.
Он может устранить различия JIT и проверить реальную производительность кода. JMH был включен в JDK 12, другие версии должны быть введены в maven сами по себе. \
6. OkHTTP
Последняя версия JDK имеет встроенную функцию HTTP, но такая вещь на уровне протокола кажется неуместной для размещения ее в базовой библиотеке классов.
Долгое время Apache HttpClient правил миром, и даже после рефакторинга он не мог быть совместим между разными версиями. Я больше предпочитаю легковесный OkHTTP, первый раз увидел его в коде Android-приложения, а теперь он еще и очень благоухает в коде приложения. Прозрачное сжатие OKHTTP также более интеллектуальное.
\
Такие компоненты, как SpringCloud, могут переключаться на HttpClient или OkHTTP внизу.
Изменения протокола на прикладном уровне относительно велики, а обновление происходит относительно быстро. Например, поддержка HTTP2, Quic и т. д., очевидно, требует множества модификаций всей библиотеки классов для адаптации.
7. Пул соединений с базой данных
SpringBoot2 по умолчанию выбирает hikaricp в качестве пула соединений, который считается самым быстрым пулом соединений, а количество кода очень оптимизировано. Старые пулы соединений с базами данных, такие как c3p0 и dbcp, постепенно отказываются от своих прав.
Hikaricp очень объемный, он перенимает идею lock-free, основная библиотека классов — это только ConcurrentBag, и даже использует Javassist для модификации байт-кода для увеличения скорости выполнения.
В Китае другим широко используемым пулом подключений является Druid, который имеет полную функцию мониторинга. Открыв фон, вы можете напрямую просматривать состояние всего пула соединений на веб-стороне. \
8. caffeine
Кэш в куче, кофеин предпочтительнее. Давно пользуюсьGuava
изLoadingCache
. После тестирования кофеина я решил, что это он.
Он сочетает в себе LRU и LFU, и после их объединения становится новымW-TinyLFU
Алгоритм имеет очень высокую скорость срабатывания и меньший объем памяти.
\
В SpringBoot, предоставляяCacheManager
Бин, который можно использовать сSpringboot-cache
Можно сказать, что это очень удобно для интеграции.
9. hazelcast
После разговора о внутреннем, давайте поговорим о внешнем.
В дополнение к выбору redis мы также можем выбрать hazelcast. Hazelcast использует алгоритм raft для распределенной координации, который сильнее, чем Redis, с точки зрения согласованности. Согласно тесту hazelcast, когда он достигает определенного масштаба, скорость оказывается даже выше, чем у redis, и между hazelcast и redis даже произошла ожесточенная словесная война.
Hazelcast можно интегрировать в Java-приложения в виде пакетов jar, выступающих как клиентом, так и сервером, а также компонентами многоузловых кластеров. Он предоставляет полнофункциональную распределенную структуру данных, аналогичную редиссону, например Queue. Вам нужно только вызвать соответствующий API непосредственно в коде Java, и он может синхронизировать данные со всеми узлами. \
10. Компонент журнала
Компонент журнала является широко используемой библиотекой классов, и самым ранним широко используемым являетсяlog4j
, и более популярныеslf4j+logback
. Поскольку эти библиотеки классов очень просты в использовании, JDK поставляется сJUL
Вместо этого никому нет дела.
slf4j — типичное приложение фасадного режима, которое само по себе представляет собой набор интерфейсов, за которыми можно использовать logback и log4j. Эти отношения мы можем легко увидеть из приведенного выше рисунка.
11. Парсинг JSON, XML, YAML
Из-за частых уязвимостей в Fastjson наиболее широко используемой библиотекой разбора JSON в Java являетсяjackson
библиотека. Его основной класс инструментов входаObjectMapper
, метод синтаксического анализа является потокобезопасным, и мы можем совместно использовать объект синтаксического анализа в рамках всего проекта.
Библиотека Джексона может анализировать не только JSON, но и XML, YAML, TOML и т. д. На самом деле его абстрактный интерфейс может реализовать загрузку данных в форматах Avro, Protobuf, CSV и других, но дольше всего мы используем его разбор JSON. \
12. Jolokia
Я считаю, что цель J2EE должна была быть хорошей тогда, но она всегда делала что-то большое и громоздкое. JMS считается за один, а JMX засчитывается за один.
JMX на самом деле очень сложен в использовании, потому что он изолирует функции внутри системы Java. Текущая система мониторинга Promethus работает лучше, все в текстовом формате HTTP-взаимодействия.
Jolokia может предоставить метод удаленного доступа JMX и принудительно преобразовать интерфейс JMX в интерфейс HTTP, чтобы другие системы мониторинга могли выполнять функциональную стыковку. Судя по этому описанию, Jolokia — это адаптер. Однако с помощью пакета Agent или Jar он может заставить ActiveMQ, JBoss и другие старомодные системы подключаться к современной системе мониторинга, что также является большим достижением. \
13. hibernate-validator
Hibernate оставил большое наследие, которое представляет собой его структуру проверки, которая является эталонной реализацией проверки компонентов и широко используется для проверки модели базы данных, проверки параметров и других областей.
В JPA поля @Table могут автоматически генерировать ограничения базы данных на основе этих проверок. В контроллере Spring вы также можете использовать аннотацию @Valid для автоматической проверки параметров для входящих объектов. \
14. freemarker
FreeMarker — это механизм шаблонов, который я использовал для создания веб-страниц в первые дни.
\
Однако из-за популярности разделения внешнего и внутреннего интерфейса я теперь в основном использую его в некоторых инструментах для генерации кода. Он имеет широкий спектр приложений, таких как создание шаблона электронной почты, шаблона SMS и тому подобное. Если вы когда-либо писали JSP, вы знаете, что он делает что-то подобное.
В Spring также есть более легкий механизм шаблонов под названием SPEL — язык выражений. Синтаксис, который вы используете в аннотации @Value, - все они похожи.
End
Эти библиотеки я использую дольше всего в своей работе и которым я уделяю больше всего внимания. На самом деле Spring хватит всем на выкидыши, но иногда функций Spring все же недостаточно, потому что это скорее интегрированный инструмент, и приходится обращать внимание на технологии более низкого уровня.
Именно благодаря этим стабильным и надежным библиотекам классов наша разработка приложений может быть такой быстрой. Какой функционал вы хотите? Найдите библиотеку классов, это вообще достижимо, и тут текущая разработка радует.
Получите такую удобную и быструю функцию, не забудьте поставить лайк и поощрить автора, если вы столкнулись с проблемой, сообщите об ошибке, исправьте ошибку, это все молчаливая поддержка. Точно так же, как когда вы читаете эту статью, ставите большой палец вверх и перечитываете ее снова, аргументация та же.
Об авторе: Miss Sister Taste (xjjdog), общедоступный аккаунт, который не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус. Мой личный WeChat xjjdog0, добро пожаловать в друзья для дальнейшего общения.