Java — это полноценная платформа, и к ней следует относиться именно так. За свою карьеру разработчика Java я встречал сотни разработчиков, хорошо знакомых с синтаксисом языка. Они понимают лямбда-выражения и потоки и знают все API от String до nio наизусть. Но понимание следующего сделает их более полноценными профессионалами:

  • Алгоритмы сборки мусора. Сборщик мусора JVM значительно улучшился по сравнению с его первыми версиями. Эргономика JVM позволяет автоматически настраивать оптимальные параметры для обнаруженной среды. Хорошее понимание того, что происходит, иногда может еще больше повысить производительность JVM.
  • Профилировщики JVM:настройка JVM — это не игра в угадайку. Вы должны понять, как ведет себя приложение, прежде чем вносить какие-либо изменения. Знание того, как подключать и интерпретировать данные профилировщика, поможет вам настроить JVM для повышения производительности, найти утечки памяти или понять, почему выполнение метода занимает так много времени.

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

  • Кодировка символов. Различные ОС могут работать с разными кодировками символов. Понимание того, что они собой представляют и как их настроить, может предотвратить появление странных символов в вашем приложении.
  • Сеть TCP/IP. Облачные приложения — это распределенные системы. В мире облаков, Интернета и сетей важно понимать, как маршрутизировать таблицы, задержки, брандмауэры и все, что связано с сетями TCP/IP, особенно когда что-то работает не так, как ожидалось.
  • Протокол HTTP. В мире, где браузер является клиентом, понимание того, как работают HTTP 1.1 и 2.0, может помочь вам лучше разработать приложение. Знание того, что происходит, когда вы сохраняете свои данные в сеансе HTTP, особенно в многокластерной среде, может быть весьма полезным.

Даже хорошо знать, что фреймворки делают под капотом. Здесь мы можем взять в качестве примеров фреймворки ORM (реляционное отображение объектов), такие как JPA и Hibernate:

  • Включить вывод SQL во время разработки.При включенном выводе SQL вы можете увидеть, какие команды отправляются в базу данных, прежде чем обнаружите, что странный вызов SQL ведет себя плохо.
  • Размер выборки запроса. В большинстве реализаций JPA/Hibernate размер выборки по умолчанию равен единице (1). Это означает, что если ваш запрос выведет 1000 сущностей из базы данных, для заполнения этих сущностей будет выполнено 1000 команд SQL. Вы можете настроить размер выборки, чтобы уменьшить количество выполняемых инструкций SQL. Вы можете определить эту проблему, включив вывод SQL (см. предыдущий пункт).
  • Отношения "один ко многим" и "многие к одному". Хотя отношения "один ко многим" загружаются по умолчанию с отложенной загрузкой, некоторые разработчики допускают ошибку, изменяя отношение для быстрой загрузки объектов или инициализируя их вручную. их перед возвратом коллекции сущностей. Будьте осторожны при этом, потому что каждый нетерпеливо загружаемый объект может также создать связь многие-к-одному, заставляя вас извлекать почти каждую таблицу/сущность из базы данных. Включение вывода SQL также может помочь вам определить эту проблему (опять же, см. первый пункт).

Короче говоря, не давайте себя контролировать — держите себя в руках!