Эффективность Java [IBS Training Center]
Курс предназначен для разработчиков, желающих улучшить свои навыки в проектировании и оптимизации кода, используя рекомендуемые технологии и подходы, доказавшие свою эффективность на практике. В рамках курса вы познакомитесь с различными методиками и инструментами, которые помогут вам создавать более эффективный и масштабируемый код.
Данный курс ориентирован на углубленное понимание языка программирования Java, которое позволит программистам писать более чистый и надежный код с меньшим количеством ошибок и с расширенными возможностями для повторного использования. В курсе подробно рассматриваются паттерны проектирования и языковые идиомы, а также демонстрируется, как максимально эффективно использовать различные возможности от обобщенных типов до перечислений, от аннотаций до автоупаковки.
Каждый раздел этого курса состоит из нескольких пунктов, каждый из которых представлен в форме короткого отдельного обзора, в котором даются конкретные советы и приводятся примеры отличного кода. Полное описание и разъяснения по каждому пункту помогут слушателям понять, что нужно и чего не нужно делать, и почему.
Цели:
Улучшить навыки разработки на языке Java на основе обсуждения и анализ практических примеров.
Целевая аудитория:
Java-разработчики начального и среднего уровня.
Предварительная подготовка:
Улучшаемые навыки:
Чему вы научитесь:
Курс предназначен для разработчиков, желающих улучшить свои навыки в проектировании и оптимизации кода, используя рекомендуемые технологии и подходы, доказавшие свою эффективность на практике. В рамках курса вы познакомитесь с различными методиками и инструментами, которые помогут вам создавать более эффективный и масштабируемый код.
Данный курс ориентирован на углубленное понимание языка программирования Java, которое позволит программистам писать более чистый и надежный код с меньшим количеством ошибок и с расширенными возможностями для повторного использования. В курсе подробно рассматриваются паттерны проектирования и языковые идиомы, а также демонстрируется, как максимально эффективно использовать различные возможности от обобщенных типов до перечислений, от аннотаций до автоупаковки.
Каждый раздел этого курса состоит из нескольких пунктов, каждый из которых представлен в форме короткого отдельного обзора, в котором даются конкретные советы и приводятся примеры отличного кода. Полное описание и разъяснения по каждому пункту помогут слушателям понять, что нужно и чего не нужно делать, и почему.
Цели:
Улучшить навыки разработки на языке Java на основе обсуждения и анализ практических примеров.
Целевая аудитория:
Java-разработчики начального и среднего уровня.
Предварительная подготовка:
Улучшаемые навыки:
- Оптимизация производительности приложений
- Управление памятью
- Параллельное и многопоточное программирование
- Использование оптимизированных коллекций
- Тестирование и мониторинг производительности
- Создание и уничтожение объектов [Теория 2 ч.; Практика 2 ч.]
- Методы, применяемые ко всем объектам [Теория 1ч.; Практика 1 ч.]
- Классы и интерфейсы [Теория 2 ч.; Практика 2 ч.]
- Обобщенные типы [Теория 1 ч.; Практика 2 ч.]
- Enums и аннотации [Теория 1 ч.; Практика 2 ч.]
- Методы [Теория 1 ч.; Практика 2 ч.]
- Общее программирование [Теория 2 ч.; Практика 2 ч.]
- Исключения [Теория 1 ч.; Практика 2 ч.]
- Параллелизм [Теория 1 ч.; Практика 1 ч.]
- Сериализация [Теория 1 ч.; Практика 1 ч.]
01. Создание и уничтожение объектов [Теория 2 ч.; Практика 2 ч.]
- Выбор статических фабричных методов вместо конструкторов
- Шаблон 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
- Выбор прокси сериализации вместо сериализированных экземпляров
- Научитесь применять различные методы и техники для оптимизации производительности Java-приложений
- Освоите принципы работы с памятью в Java, включая управление сборкой мусора и использование различных типов памяти
- Научитесь создавать многопоточные приложения и использовать параллелизм для повышения производительности
- Освоите выбор и использование оптимизированных коллекций и структур данных в Java
- Научитесь использовать инструменты для тестирования и мониторинга производительности Java-приложений
https://ibs-training.ru/kurs/effektivnost_java.html