Skip to content

SomeBoyGit/topjavaTest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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\. Иначе впоследствии будут проблемы
  • Плагин уже 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 включается в интервал)

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

video 4. Maven

question Ваши вопросы

Используются ли сервлеты на реальных проектах сегодня?

  1. Сервлеты лежат в основе любого Java web фреймворка, если взаимодействие не асинхронное и не nio (например Spring MVC). Работать с таким фреймворком и не знать, что такое сервлеты, все равно что работать с JPA/Hibarnate/любым ORM без знания JDBC.
  2. Бывают легаси проекты, бывают современные, где не подтягивается сторонний web фреймворк. При этом, даже работая с фреймворком, приходится иметь дело с Servlet API (часто с HttpServletRequest/HttpServletResponse) - обработка ошибок, валидаторы, фильтры, пре/пост обработка зарпосов, получение ip, работа с сессией и пр.

Используются ли еще где-то в реальной разработке JSP, или это уже устаревшая технология? Заменит ли ее JSF (https://javatalks.ru/topics/38037)?

JSF и JSP- разные ниши и задачи. JSP- шаблонизатор, JSF - МVС фреймворк. Из моего опыта- с JSP сталкивался в 60% проектов. Его прямая замена: http://www.thymeleaf.org (в Spring-Boot по умолчанию), но в уже запущенных проектах встречается достаточно редко. JSP не умирает, потому что просто и дешево. Кроме того он по умолчанию включен в большинство веб-контейнеров (в Tomcat его реализация Jasper). Зная принципы JSP можно без труда освоить любой другой шаблонизатор.

JSF- JavaEE веб фреймворк, с которым я ни разу не сталкивался и особого желания нет. Вот он как раз, по статистике, активно замещается хотя бы javascript фреймворками (Angular, React, Vue.js).

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

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

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

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

  • Проверьте результат выполнения ДЗ (можно проверить логику в http://topjava.herokuapp.com , список еды)
  • Оцените 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 задания!)

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

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

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

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

HTML, JavaScript, CSS

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

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

Сервлеты

JDBC, SQL

Разное

Книги

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published