Movatterモバイル変換


[0]ホーム

URL:


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

Sign up
Appearance settings

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

NotificationsYou must be signed in to change notification settings

JavaOPs/topjava

Repository files navigation

Разработка полнофункционального 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

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

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

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

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

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

imageimage

Патч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 и у него не будет истории.

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 (базовые вещи)

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

Сервлеты

Туториалы по Spring

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

Contributors3

  •  
  •  
  •  

Languages


[8]ページ先頭

©2009-2025 Movatter.jp