Эффективность Java
Подробнее
Что нужно для старта
- Базовые знания Java
- Опыт работы с IDE (IntelliJ IDEA, Eclipse, NetBeans, VSCode)
Что вы получите
- Создавать и уничтожать объекты эффективно.
- Переопределять методы equals, hashCode, toString.
- Использовать обобщенные типы и аннотации.
- Применять паттерны проектирования.
- Оптимизировать производительность кода.
Для кого этот курс
- Разработчик
Программа курса
• Выбор статических фабричных методов вместо конструкторов.
• Шаблон Builder в случае большого количества параметров конструктора.
• Применение семантики шаблона Singleton с приватным конструктором или enum.
• Применение приватного конструктора.
• Как избежать создания ненужных объектов.
• Удаление устаревших ссылок на объекты.
• Отказ от использования финализаторов.
• Выполнение общего контракта при переопределении метода equals.
• Обязательное переопределение hashCode при переопределении метода equals.
• Обязательное переопределение toString.
• Осмысленное переопределение клонов.
• Выбор реализации Comparable.
• Минимизация доступности классов и компонентов.
• Использование методов доступа вместо public-полей.
• Минимизация изменчивости.
• Предпочтение композиции наследованию.
• Проектирование с учётом дальнейшего наследования.
• Предпочтение интерфейсов абстрактным классам.
• Использование только интерфейсов для определения типов.
• Используйте иерархии классов вместо тег-классов.
• Использование объектов-функций для представления стратегий.
• Отдавайте предпочтение статическим внутренним классам над не статическими.
• В новом коде всегда используйте generic-типы.
• Исключение непроверенных предупреждений.
• Предпочтение списков массивам.
• Предпочтение generic-типов
• Предпочтение generic-методов
• Использование ограниченных обобщений для повышения гибкости API.
• Выбор однородных безопасных типов контейнеров (typesafe).
• Использование enums вместо констант int.
• Использование полей экземпляра вместо ordinals.
• Использование EnumSet вместо битовых полей.
• Использование EnumMap вместо порядкового индексирования.
• Эмуляция расширяемых enums с интерфейсами.
• Предпочтение аннотаций паттернам именования.
• Всегда используйте аннотацию Override.
• Использование интерфейсов-маркеров для определения типов.
• Проверка параметров на валидность.
• Использование защитного копирования при необходимости.
• Тщательное проектирование сигнатур методов.
• Осмысленное использование перегрузки.
• Осмысленное использование varargs.
• Возврат пустых массивов или коллекций, вместо null.
• Написание документации для всех public элементов API.
• Минимизация области видимости локальных переменных.
• Предпочтение циклов for-each традиционным циклам for.
• Знание и использование библиотек.
• Отказ от использования float и double, если требуются точные ответы.
• Предпочтение примитивных типов над классами-обёртками.
• Избегайте строк, где более подходящими являются другие типы.
• Учитывайте производительность во время выполнения конкатенации строк.
• Ссылки на объекты по их интерфейсам.
• Предпочтение интерфейсов к reflection.
• Осмысленное использование нативных методов.
• Осмысленная оптимизация.
• Соблюдение общепринятых норм именования.
• Использование исключений только для исключительных условий.
• Использование checked exceptions для проверки условий и unchecked exceptions для ошибок программирования.
• Отказ от ненужного использования checked exceptions.
• Предпочтительное использование стандартных исключений.
• Выброс исключений, соответствующих абстракции.
• Документирование всех исключений, выданных каждым методом.
• Включение информации о failure-capture в подробные сообщения.
• Стремление к атомарности сбоев.
• Не допускайте игнорирования исключений.
• Синхронизация доступа к общим изменяемым данным.
• Исключение чрезмерной синхронизации.
• Предпочтение использованию Executor-ов.
• Предпочтение утилит параллелизма методам wait и notify.
• Документирование безопасности потоков.
• Осмысленное использование отложенной инициализации.
• Независимость от планировщика потоков.
• Исключение групп потоков.
• Осмысленная реализация Serializable.
• Использование настраиваемой сериализированной формы.
• Безопасное написание методов readObject.
• Для контроля экземпляров лучше выбрать типы enum вместо readResolve.
• Выбор прокси сериализации вместо сериализированных экземпляров.
01Создание и уничтожение объектов
• Выбор статических фабричных методов вместо конструкторов.
• Шаблон Builder в случае большого количества параметров конструктора.
• Применение семантики шаблона Singleton с приватным конструктором или enum.
• Применение приватного конструктора.
• Как избежать создания ненужных объектов.
• Удаление устаревших ссылок на объекты.
• Отказ от использования финализаторов.
02Методы, применяемые ко всем объектам
• Выполнение общего контракта при переопределении метода equals.
• Обязательное переопределение hashCode при переопределении метода equals.
• Обязательное переопределение toString.
• Осмысленное переопределение клонов.
• Выбор реализации Comparable.
03Классы и интерфейсы
• Минимизация доступности классов и компонентов.
• Использование методов доступа вместо public-полей.
• Минимизация изменчивости.
• Предпочтение композиции наследованию.
• Проектирование с учётом дальнейшего наследования.
• Предпочтение интерфейсов абстрактным классам.
• Использование только интерфейсов для определения типов.
• Используйте иерархии классов вместо тег-классов.
• Использование объектов-функций для представления стратегий.
• Отдавайте предпочтение статическим внутренним классам над не статическими.
04Обобщенные типы
• В новом коде всегда используйте generic-типы.
• Исключение непроверенных предупреждений.
• Предпочтение списков массивам.
• Предпочтение generic-типов
• Предпочтение generic-методов
• Использование ограниченных обобщений для повышения гибкости API.
• Выбор однородных безопасных типов контейнеров (typesafe).
05Enums и аннотации
• Использование enums вместо констант int.
• Использование полей экземпляра вместо ordinals.
• Использование EnumSet вместо битовых полей.
• Использование EnumMap вместо порядкового индексирования.
• Эмуляция расширяемых enums с интерфейсами.
• Предпочтение аннотаций паттернам именования.
• Всегда используйте аннотацию Override.
• Использование интерфейсов-маркеров для определения типов.
06Методы
• Проверка параметров на валидность.
• Использование защитного копирования при необходимости.
• Тщательное проектирование сигнатур методов.
• Осмысленное использование перегрузки.
• Осмысленное использование varargs.
• Возврат пустых массивов или коллекций, вместо null.
• Написание документации для всех public элементов API.
07Общее программирование
• Минимизация области видимости локальных переменных.
• Предпочтение циклов for-each традиционным циклам for.
• Знание и использование библиотек.
• Отказ от использования float и double, если требуются точные ответы.
• Предпочтение примитивных типов над классами-обёртками.
• Избегайте строк, где более подходящими являются другие типы.
• Учитывайте производительность во время выполнения конкатенации строк.
• Ссылки на объекты по их интерфейсам.
• Предпочтение интерфейсов к reflection.
• Осмысленное использование нативных методов.
• Осмысленная оптимизация.
• Соблюдение общепринятых норм именования.
08Исключения
• Использование исключений только для исключительных условий.
• Использование checked exceptions для проверки условий и unchecked exceptions для ошибок программирования.
• Отказ от ненужного использования checked exceptions.
• Предпочтительное использование стандартных исключений.
• Выброс исключений, соответствующих абстракции.
• Документирование всех исключений, выданных каждым методом.
• Включение информации о failure-capture в подробные сообщения.
• Стремление к атомарности сбоев.
• Не допускайте игнорирования исключений.
09Параллелизм
• Синхронизация доступа к общим изменяемым данным.
• Исключение чрезмерной синхронизации.
• Предпочтение использованию Executor-ов.
• Предпочтение утилит параллелизма методам wait и notify.
• Документирование безопасности потоков.
• Осмысленное использование отложенной инициализации.
• Независимость от планировщика потоков.
• Исключение групп потоков.
10Сериализация
• Осмысленная реализация Serializable.
• Использование настраиваемой сериализированной формы.
• Безопасное написание методов readObject.
• Для контроля экземпляров лучше выбрать типы enum вместо readResolve.
• Выбор прокси сериализации вместо сериализированных экземпляров.
Удостоверение о прохождении
Отзывы о курсе
Оставьте отзыв
Расскажите о качестве обучения, поддержке и результате. Это поможет другим выбрать организацию осознанно.
Оставьте заявку
Консультант ответит на вопросы о курсе «Эффективность Java» и поможет разобраться в деталях обучения.
Нажимая кнопку, вы даете согласие на обработку персональных данных
Информация обновлена 7 сентября 2026 г.

IBS Training Center 



.png)






