Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
forked from JavaOPs/topjava

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

Notifications You must be signed in to change notification settings

petrov9/topjava

Open more actions menu
 
 

Repository files navigation

Build Status Codacy Badge

Java Enterprise Online Project

Development of a fully functional Spring/JPA Enterprise application with authorization and access rights based on roles using the most popular Java tools and technologies: Maven, Spring MVC, Security, JPA(Hibernate), REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API and storage in Postgresql and HSQLDB databases.

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 94.3%
  • JavaScript 5.0%
  • Other 0.7%
Morty Proxy This is a proxified and sanitized view of the page, visit original site.