8000 GitHub - Regulknight/topjava: Java Enterprise: Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery
[go: up one dir, main page]

Skip to content

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

Notifications You must be signed in to change notification settings

Regulknight/topjava

 
 

Repository files navigation

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

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

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

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

Spring Pet-Clinic

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

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

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

  • переименовал класс UserMealWithExceed и его поле exceed в UserMealWithExcess.excess
  • в UserMeals/UserMealWithExcess поля изменились на private
  • обновил данные UserMealsUtil.meals и переименовал некоторые пременные, поля и методы
  • добавил UserMealWithExcess.toString() и метод для выполнения Optional домашнего задания

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

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

Реализовать метод `UserMealsUtil.filteredByCycles` через циклы (`forEach`):
-  должны возвращаться только записи между `startTime` и `endTime`
-  поле `UserMealWithExcess.excess` должно показывать, 
                                     превышает ли сумма калорий за весь день значение `caloriesPerDay`
        
Т.е `UserMealWithExcess` - это запись одной еды, но поле `excess` будет одинаково для всех записей за этот день.
    
- Проверьте результат выполнения ДЗ (можно проверить логику в http://topjava.herokuapp.com , список еды)
- Оцените Time complexity алгоритма. Если она больше O(N), например O(N*N) или N*log(N), сделайте O(N).

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

Optional (Java 8 Stream API)

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

Optional 2 (+5 бонусов)

Сделать реализацию со сложностью O(N) (обратите внимание на п.13 замечаний):

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

Замечания по использованию 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 предлагает оптимизацию (желтым подчеркивает), например заменить лямбду на метод-референс, соглашайтесь (Alt+Enter)
    • 8: Пользуйтесь форматированием кода в IDEA: Alt+Ctrl+L
    • 9: Перед check-in проверяйте чендж-лист (курсор на файл и Ctrl+D): не оставляйте в коде ничего лишнего (закомментированный код, TODO и пр.). Если файл не меняется (например только пробелы или переводы строк), не надо его чекинить, делайте ему revert (Git -> Revert / Ctrl+Alt+Z).
    • 10: System.out.println нельзя делать нигде, кроме как в main. Позже введем логирование.
    • 11: Результаты, возвращаемые UserMealsUtil.filteredByStreams мы будем использовать в нашем приложении для фильтрации по времени и отображения еды правильным цветом.
    • 12: Обращайте внимание на комментарии к вашим коммитам в git. Они должны быть короткие и информативные (лучше на english)
    • 13: Не полагайтесь в решении на то, что список будет подаваться отсортированным. Такого условия нет.

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

    ВНИМАНИЕ:

    Все остальное - опционально.

    HTML, JavaScript, CSS

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

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

    Сервлеты

    JDBC, SQL

    Разное

    Книги

    About

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

    Resources

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    Languages

    • Java 100.0%
    0