
JVA-017 Эффективность Java
Начало: По мере набора группы
Длительность: 1 неделя
СертификатОнлайн
Описание курса
Углубленное изучение Java для написания чистого и надежного кода. Курс охватывает паттерны проектирования, языковые идиомы, обобщенные типы и аннотации. Вы научитесь эффективно использовать перечисления, обобщенные типы и аннотации, а также минимизировать ошибки и увеличить повторное использование кода.
- Выбор статических фабричных методов вместо конструкторов.
- Шаблон 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.
- Выбор прокси сериализации вместо сериализированных экземпляров.