• Stars
    star
    310
  • Rank 132,014 (Top 3 %)
  • Language
    Java
  • Created almost 9 years ago
  • Updated 23 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Java Enterprise: Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery

Java Enterprise Online Project

Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей с использованием наиболее популярных инструментов и технологий Java: Maven, Spring MVC, Security, JPA(Hibernate), REST(Jackson), Bootstrap (css,js), DataTables, jQuery + plugins, Java 8 Stream and Time API и хранением в базах данных Postgresql и HSQLDB.

topjava_structure

Когда вы слышите что-то, вы забываете это.
Когда вы видите что-то, вы запоминаете это.
Но только когда вы начинаете делать это,
вы начинаете понимать это

Старинная китайская поговорка

Описание и план проекта

Демо разрабатываемого приложения

Изменения проекта (Release Notes)

Требования к участникам, Wiki

Составление резюме, подготовка к интервью, поиск работы

Обновленное вводное занятие (обязательно смотреть все видео)

video 1. Вступление, история, команда, источники

Обзор наиболее востребованных технологий, которые будут изучаться на курсе TopJava

video 2.1. Часть 1: инфраструктура

video 2.2. Часть 2: frameworks Spring, ORM

video 2.3. Часть 3: тренды

video 2.3. Часть 4: обзор разрабатываемого приложения

video 3. Рекомендуемые подходы к обучению на курсе

video 4. Структура приложения (многоуровневая архитектура)

Демо приложения

video 5. Системы управления версиями. Git

video 6. Работа с проектом (выполнять инструкции)

  • ВНИМАНИЕ: выбирайте для проекта простой пусть без пробелов и русских букв, например, c:\projects\topjava\ (Windows). Иначе впоследствии будут проблемы
  • Плагин Git Intergation уже не требуется, а вкладку Version control в IDEA переименовали в Git

Для переключения режима отображения изменений из вкладки Commit в Git: Local Changes нужно переключить Settings/Preferences | Version Control | Commit | Use non-modal commit interface или в контекстном меню вкладки Commit:

image image

Патч prepare_to_HW0.patch (скачать и положить в каталог вашего проекта)

Проект постоянно улучшается, поэтому видео иногда отличается от кода проекта. Изменения указываю после видео:

  • переименовал класс UserMealWithExceed и его поле exceed в UserMealWithExcess.excess
  • в UserMeals/UserMealWithExcess поля изменились на private
  • обновил данные UserMealsUtil.meals и переименовал некоторые переменные, поля и методы
  • добавил UserMealWithExcess.toString() и метод для выполнения Optional домашнего задания
  • метод фильтрации в TimeUtil переименовал в isBetweenHalfOpen (также изменилась логика сравнения: startTime включается в интервал, а endTime - не включается)

GitHub поменял политику: теперь пушить нужно через токен. IDEA предложит его сгенерировать при пуше, или можно создать токен в настройках

Инструкция по шагам (из видео):

Вместо Fork можно сделать клонирование проекта: он не будет привязан к исходному https://github.com/JavaOPs/topjava и у него не будет истории.

video 7. Maven

video 8. Как правильно относиться к техзаданию (ТЗ). Полуоткрытый интервал.

hw Домашнее задание HW0

ВНИМАНИЕ: НЕ НАДО в репозиторий делать Pull Request со своими решениями! См. видео выше ("Работа с проектом")

Реализовать метод UserMealsUtil.filteredByCycles через циклы (forEach):

  • должны возвращаться только записи между startTime и endTime
  • поле UserMealWithExcess.excess должно показывать, превышает ли сумма калорий за весь день значение caloriesPerDay

Т. е. UserMealWithExcess - это запись одной еды, но поле excess будет одинаково для всех записей за этот день.

  • Проверьте результат выполнения ДЗ (можно проверить логику в http://javaops-demo.ru/topjava, список еды)
  • Оцените Time complexity алгоритма. Если она больше O(N), например O(NN) или Nlog(N), сделайте O(N).
    Внимание: внимательно прочитайте про O(N). O - это любой коэффициент, 2*N это тоже O(N).

ВНИМАНИЕ: варианты Optional делайте в одной ветке в разных методах UserMealsUtil. Проще делать, проще проверять

Optional (Java 8 Stream API)

Реализовать метод `UserMealsUtil.filteredByStreams` через Java 8 Stream API.

Optional 2 (+5 бонусов, только после выполнения базового и Optional задания!)

  • циклом за 1 проход по List<UserMeal>
    • без циклов по другим коллекциям/массивам (к ним также относим методы коллекций addAll()/removeAll())
  • через Stream API за 1 проход по исходному списку meals.stream()
    • нельзя использовать внешние коллекции, не являющиеся частью коллектора
    • возможно дополнительные проходы по частям списка, при этом превышение должно считаться один раз для всего подсписка. Те например нельзя разбить список на на 2 подсписка с четными и нечетными датами и затем их объединить, с подсчетом превышения для каждого элемента.

Временная сложность реализации должна быть O(N) (обратите внимание на п. 13 замечаний)
Решение должно быть рабочим в общем случае (должно работать в приложении с многими пользователями, не только при запуске main)
Нельзя 2 раза проходить по исходному списку (в том числе по его отфильтрованной или преобразованной копии)

Ресурсы:

Замечания по использованию Stream API:

При использовании Stream API производительность улучшится только на больших задачах, где возможно распараллеливание. Еще: просто так запустить и померить скорость JVM нельзя (как минимум надо дать прогреться и запустить очень большое число раз). Лучше использовать какие-нибудь бенчмарки, например JMH, который мы используем на другом проекте (Mastejava).

error Замечания к HW0

  • 1: Код проекта менять можно! Одна из распространенных ошибок как в тестовых заданиях на собеседовании, так и при работе на проекте, что ничего нельзя менять. Конечно, при правках в рабочем проекте обязательно нужно проконсультироваться/проревьюироваться у авторов кода (находятся по истории VCS)
  • 2: Наследовать UserMealWithExcess от UserMeal нельзя, т. к. это разные сущности: Transfer Object и Entity. Мы будем их проходить на 2-м уроке. Это относится и к их зависимости друг от друга.
  • 3: Правильная реализация должна быть простой и красивой, можно сделать 2-мя способами: через стримы и через циклы. Сложность должна быть O(N), т. е. без вложенных стримов и циклов.
  • 4: При реализации через циклы посмотрите в Map на методы getOrDefault или merge
  • 5: При реализации через Stream заменяйте forEach оператором stream.map(..)
  • 6: Объявляйте переменные непосредственно перед использованием (если возможно - сразу с инициализацией). При объявлении коллекций в качестве типа переменной используйте интерфейс (Map, List, ..)
  • 7: Если IDEA предлагает оптимизацию (желтым подчеркивает), например, заменить лямбду на ссылку на метод (method reference), соглашайтесь (Alt+Enter)
  • 8: Пользуйтесь форматированием кода в IDEA: Alt+Ctrl+L
  • 9: Перед check-in (отправкой изменений на GitHub) просматривайте внесенные изменения (Git -> Log -> курсор на файл и Ctrl+D): не оставляйте в коде ничего лишнего (закомментированный код, TODO и пр.). Если файл не меняется (например только пробелы или переводы строк), не надо его чекинить, делайте ему revert (Git -> Revert / Ctrl+Alt+Z).
  • 10: System.out.println нельзя использовать нигде, кроме как в main. Позже введем логирование.
  • 11: Результаты, возвращаемые UserMealsUtil.filteredByStreams, мы будем использовать в нашем приложении для фильтрации по времени и отображения еды правильным цветом.
  • 12: Обращайте внимание на комментарии к вашим коммитам в Git. Они должны быть короткие и информативные (лучше на english)
  • 13: Не полагайтесь в решении на то, что список еды будет подаваться отсортированным. Такого условия нет.

  • ДЗ первого урока будет связано с созданием небольшого CRUD-приложения (в памяти, без базы данных) на JSP и сервлетах
  • основы JavaScript необходимы для понимания проекта, начиная с 8-го занятия

Полезные ресурсы

HTML, JavaScript, CSS

Java (базовые вещи)

Туториалы, разное

Сервлеты

JDBC, SQL

Разное

Книги