company_banner

Лекции Технопарка. 2 семестр. Java

  • Tutorial


В эфире очередной выпуск материалов рубрики «Лекции Технопарка». На этот раз вы можете изучить лекции курса, посвящённого углублённому программированию на Java. Цель курса — получение студентами практических навыков создания клиент-серверного приложения на примере разработки сервера простой многопользовательской online-игры в малых группах (4-6 человек).

Лекция 1. Знакомство, платформа Java, инструменты. Сервлеты

 
История появления Java. Определения понятия «кроссплатформенность». Структурный состав Java-приложения. Цели, ради которых создавался язык, его преимущества и недостатки. Обзор платформы Java. Сборщик мусора. Версии Java. Именование в Java. Инструменты разработчика. Создание проекта. Знакомство с Jetty. Java Servlet. Примеры кода.



Лекция 2. Авторизация пользователя. Шаблоны, коллекции


Постановка задачи по авторизации пользователя, описание условий. Модули и процессы, задействованные в операциях регистрации, авторизации, обработки учётной записи и выхода пользователя. Знакомство с шаблонами Java. Класс с шаблонным типом. Метод с шаблонным типом. Синтаксис. Сужение области параметра. Специфика использования шаблонов. Шаблоны и наследование. Определение коллекций. Интерфейсы для работы с коллекциями. Иерархия контейнеров. List, Set, Queue, Map. Интерфейс сравнения Comparable. HTTP-сессии.



Лекция 3. Углубленные основы языка, развёртывание проекта


Наследование в Java. Множественное наследование. Работа с классами. ClassLoader — загрузчик данных о классе. Основные методы класса. Примитивные типы и их обёртки. Boxing и Unboxing. Массивы в Java. Строковые переменные. Размер объектов в Java. Администрирование сервера. PORT в параметры. Maven — средство сборки. Сборка и запуск проекта. Остановка сервера.



Лекция 4. Тестирование и нагрузка


Обеспечение качества ПО: критерии, оценка соответствия критериям, формальные проверки. Автоматизация обеспечения качества: статический анализ кода, тесты, коммит-хуки, непрерывная интеграция. Подходы к тестированию. Юнит-тесты. Функциональное и нагрузочное тестирование. Проверка отдельных модулей. Безопасный рефакторинг. Совместимость модулей. Защита от повторения багов. Требования к тестам. Первый тест. Терминология тестирования. Абстракция. Интерфейс и реализация тестов. Дублёры: Fake, Dummy, Stabs, Spies, Mocks, Mockito. Правила проведения тестирования. Ожидание исключения. Функциональные тесты. Организация, инструменты и результаты нагрузочного тестирования. Сборщик мусора. Интерфейс Autoclosable. Сборщик мусора в Java 7 и 8. Логирование. Удалённый дебаггинг. Использование расширения Java Management eXtension.



Лекция 5. Интерфейсы. Аннотации. Игровая механика. Утилиты


Организация кода. Интерфейсы. Сервисы и дескрипторы. Изменения кода. Реакторинг. Аннотации — метаданные о коде. NotNull. Стандартные аннотации. Синтаксис, обработка и виды аннотаций. WebSockets. Разбор игровой механики и соединения с пользователем на примере игры «Кто больше накликает». Шаблоны Singleton и Context. Исключения и их роль. Класс Throwable. События, их регистрация. Pattern Observer. Коллбэки.



Лекция 6. Работа с файловой системой


Потоки ввода-вывода. Байтовые потоки (Byte Streams). Шаблон Decorator. Закрытие потоков. Понятие сериализации. Интерфейс Serializable. Что подвергается и не подвергается сериализации. Запись в файл. Десериализация. Reflection: разбор объекта и его перевод в массив байт. Возможности Reflection, его недостатки. ReflectionHelper. Сериализация XML-документа. SAX-парсер, его методы. Десериализация XML. Обработчик. Использование Reflection. DOM-парсер. Ресурсная система, интерфейс Resource, фабрика ресурсов.



Лекция 7. Работа с базами (часть 1)


Термины и сокращения. Инструменты. Определение и особенности JDBC, его API. Управление драйверами JDBC. Соединение с базой (Connection). Состояния соединений (Statements). Объект ResultSet. Решение задачи передачи интерфейса в Java 7 и Java 8 (лямбда-выражение). Объект Executor, содержащий методы для работы с запросами. Обновление и выбор состояний. Вызов execQuery. Типизация.



Лекция 8. Работа с базами (часть 2)


Связь между объектной моделью программы и реляционной моделью базы (Object-Relational Mapping). Java Persistence API. DataSet — объект, содержащий данные одной строки таблицы. Объект доступа к данным (Data Access Object), варианты операций над базой. Интерфейс UsersDAO. ORM-библиотека Hibernate, её конфигурирование. Создание или проверка схемы базы при создании SessionFactory. Фабрика сессий (Session Factory). Аннотации для DataSet. Знакомство с Hibernate Query Language. Вставка и чтение HQL, поиск по ключу, получение всех записей. Сервис, скрывающий работу с базой (Database Service). Транзакции на две и более таблиц.



Лекция 9. Многопоточность


Определение процессов и потоков. Роль операционной системы при работе с потоками. Интерфейс Runnable. Класс Thread. Доступ к объекту потока. Остановка выполнения и прерывание выполнения потока. Остановка текущего потока для окончания другого. Термины, связанные с многопоточностью. Критический участок кода. Семафор, Mutex. Мягкая и обязательная блокировки. Высокоуровневая конструкция Monitor. Взаимодействие потоков. Возможные ошибки одновременного доступа. Модель взаимодействия потоков через общую память. Синхронизация, её методы и состояния. Блокировка объектов. Ситуация Deadlock. Служба в отдельном потоке. Методы wait() и notify(). Контейнеры, безопасные для многопоточного доступа.



Лекция 10. Система обмена сообщениями


Архитектура сервера, вариант без многопоточности. Понятие системы обмена сообщениями в рамках сервера. Взаимодействие потоков. Объект для обмена данными MessageSystem. Классы Address, Abonent и Message. Сообщение об авторизации. Иерархия сообщений. Использование MessageSystem. Взаимодействие потоков Frontend и AccountService. Состояния. Балансировка нагрузки: AddressService.



Предыдущие выпуски


Технопарк:

Техносфера:

Подписывайтесь на youtube-канал Технопарка и Техносферы!
  • +33
  • 65,6k
  • 6
Mail.Ru Group 891,74
Строим Интернет
Поделиться публикацией
Комментарии 6
  • +4
    Худшие времена операций в HashSet/HashMap зимой 2015 таки логарифмические… но я бы вообще не стал об этом упоминать, и сказал бы что константа, а то студенты еще подумают, что раз такое слабенькое время худшее, лучше использовать TreeMap/Set, дополнительно сортировка будет.

    Не надо называть мапу «картой», пожалуйста. При этом тут же лектор называет Set «сетом», хотя этого слова как раз есть нормальный перевод — «множество». Но «сет» тоже нормально, на самом деле. Потому что так можно начать называть Integer не как «интежер», а «целое», long — «длинное», и т. д.
    • 0
      Про улучшение производительности в HashMap при большом количестве коллизий не знал, спасибо! Оказывается, относительно давно оно произошло. А где именно у нас говорится про худшее время операции? Бегло просмотрев лекцию по коллекциям, не нашел.
      Не упоминать об этом было нельзя, т.к. у студентов уже был курс алгоритмов и структур данных, так что устройство HashMap они должны понимать на довольно глубоком уровне. Как и TreeMap.
      • +1
        Там где ответы с какого-то листочка
      • –1
        «мапа» тоже режет слух донельзя. «Словарь»?
        А чем вам Integer как «целое» не устраивает?
      • +5
        Противопоставление «synchronized» и «concurrent» вводит в заблуждение, его не существует на самом деле, классы с префиксом Concurrent- используют внутри synchronized в том числе.

        Есть противопоставления concurrent — parallel и synchronized (aka locks) — atomics (aka lock-free).
        • 0
          Седьмая лекция обрезана :(

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое