Java Enterprise: Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery
Java
Switch branches/tags
Nothing to show
Clone or download
Latest commit 937be5b Jul 2, 2018
Permalink
Failed to load latest commit information.
src/main/java/ru/javawebinar/topjava Initial Aug 25, 2015
.gitignore Initial Aug 25, 2015
README.md Update README.md Jul 2, 2018
ReleaseNotes.md Update ReleaseNotes.md Jun 6, 2018
cv.md Add info May 14, 2018
description.md Add info May 14, 2018
graduation.md Update graduation.md May 24, 2018
pom.xml Initial Aug 25, 2015

README.md

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. Осваиваем Java Enterprise. Трудоустройство. Ответы на вопросы.

Spring Pet-Clinic

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

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

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

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

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

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

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

Optional (Java 8 Stream API)

Сделать реализацию через Java 8 Stream API.

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

Сделать реализацию со сложностью O(N):
- циклом за 1 проход по List<UserMeal>. Обратите внимание на п.13 замечаний
- через Stream API за 1 проход по полному списку Stream<UserMeal>

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

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

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

  • 1: Код проекта менять можно! Одна из распространенных ошибок как в тестовых заданиях на собеседовании, так и при работе на проекте, что ничего нельзя менять. Конечно при правках в рабочем проекте обязательно нужно проконсультироваться/проревьюироваться у авторов кода (находится по истории VCS)
  • 2: Наследовать UserMealWithExceed от 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.getFilteredWithExceeded мы будем использовать в нашем приложении для фильтрации по времени и отображения еды правильным цветом.
  • 12: Обращайте внимание на комментарии к вашим коммитам в git. Они должны быть короткие и информативные (лучше на english)
  • 13: Не полагайтесь в решении на то, что список будет подаваться отсортированным. Такого условия нет.

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

ВНИМАНИЕ:

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

HTML, JavaScript, CSS

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

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

Что нужно знать о бэкенде новичку в веб-разработке Туториалы: Spring Framework, Hibernate, Java Core, JDBC

Сервлеты

JDBC, SQL

Разное

Книги