Разработка полнофункционального 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.
Когда вы слышите что-то, вы забываете это.
Когда вы видите что-то, вы запоминаете это.
Но только когда вы начинаете делать это,
вы начинаете понимать это
Старинная китайская поговорка
- Слайды презентации
- Java Tools and Technologies Landscape Report 2016
- Java in 2017 Survey
- Из юниоров в разработчики: получаем первую работу
- Установить ПО (git, JDK8, IntelliJ IDEA, Maven)
- Создать аккаунт на GitHub
- Сделать Fork ЭТОГО проекта (https://github.com/JavaOPs/topjava)
- Сделать локальный репозиторий проекта:
git clone https://github.com/[Ваш аккаунт]/topjava.git
- Открыть и настроить проект в IDEA
- По ходу видео сделать Apply Patch... скаченного патча Prepare_ to_ HW0.patch
- Закоммитить и запушить изменения (commit + push)
- Сделать ветку домашнего задания
- Выполнить задание и залить на GitHub (commit + push)
- Переключиться в основную ветку проекта master.
Реализовать метод UserMealsUtil.getFilteredWithExceeded:
- должны возвращаться только записи между startTime и endTime
- поле UserMealWithExceed.exceed должно показывать,
превышает ли сумма калорий за весь день параметра метода caloriesPerDay
Т.е UserMealWithExceed - это запись одной еды, но поле exceeded будет одинаково для всех записей за этот день.
- Проверте результат выполнения ДЗ (можно проверить логику в https://topjava.herokuapp.com , список еды)
- Оцените Time complexity вашего алгоритма, если он O(N*N)- попробуйте сделать O(N).
- Java 8 Date and Time API
- Алгоритмы и структуры данных для начинающих: сложность алгоритмов
- Time complexity
- Временная сложность алгоритма
- Вычислительная сложность
Сделать реализация через Java 8 Stream API. Заменяйте forEach оператором stream.map(..)
- Видео: Доступно о Java 8 Lambda
- Java 8: Lambda выражения
- Java 8: Потоки
- Pуководство по Java 8 Stream
- Лямбда-выражения в Java 8
- A Guide to Java 8
- Шпаргалка Java Stream API
- Алексея Владыкин: Элементы функционального программирования в Java
- Yakov Fain о новом в Java 8
- stream.map vs forEach
- Дополнительно
- Код проекта менять можно! Одна из распространенных ошибок как в тестовых заданиях на собеседовании, так и при работе на проекте, что ничего нельзя менять. Конечно при правках в рабочем проекте обязятельно нужно проконсультироваться/проревьюится у авторов кода (находится по истории VCS)
- Наследовать
UserMealWithExceed
отUserMeal
я не буду, т.к. это разные сущности: Transfer Object и Entity. Мы будет их проходить на 2м уроке. - Правильная реализация должна быть простой и красивой, можно сделать 2-мя способами: через стримы и через циклы. Сложность должна быть O(N), т.е. без вложенных стримов и циклов.
- При реализации через циклы посмотрите в
Map
на методыgetOrDefault
илиmerge
- При реализации через
Stream
заменяйтеforEach
операторомstream.map(..)
- Объявляйте переменные непосредственно перед использованием (если возможно - сразу с инициализацией). При объявлении коллекций используйте тип переменной - интерфейс (Map, List, ..)
- Если IDEA предлагает оптимизацию (желтым подчеркивает), нарпимер заменить лямбду на метод-референс, соглашайтесь (Alt+Enter)
- Пользуйтесь форматированием кода в IDEA:
Alt+Ctrl+L
- Перед check-in проверяйте чендж-лист (курсор на файл и Ctrl+D): не оставляйте в коде ничего лишнего (закомментированный код, TODO и пр.). Если файл не меняется (например только пробелы или переводы строк), не надо его чекинить, делайте ему
revert
(Git -> Revert /Ctrl+Alt+Z
). System.out.println
нельзя делать нигде, кроме как вmain
. Позже введем логирование.- Результаты, возвращаемые
UserMealsUtil.getFilteredWithExceeded
мы будем использовать в нашем приложении для фильтрации по времени и отображения еды правильным цветом. - Обращайте внимание на комментарии к вашим коммитам в git. Они должны быть короткие и информативные (лучше на english)
ВНИМАНИЕ: основы JavaSсript необходимы для понимания проекта, начиная с 8-го занятия!
Все остальное - опционально.
- Справочник по WEB
- Видео по WEB технологиям
- Изучение JavaScript в одном видео уроке за час
- HTML, CSS, JAVASCRIPT, SQL, JQUERY, BOOTSTRAP
- Введение в программирование на JavaScript
- Стандарты кодирования для HTML, CSS и JavaScript’a
- Основы работы с HTML/CSS/JavaScript
- JavaScript - Основы
- Основы JavaScript
- Bootstrap 3 - Основы
- jQuery для начинающих
- Интуит. Программирование на Java
- 1й урок MasterJava: Многопоточность
- Основы Java garbage collection
- Размер Java объектов
- Введение в Java Reflection API
- Структуры данных в картинках
- Обзор java.util.concurrent.*
- Синхронизация потоков
- String literal pool
- Маленькие хитрости Java
- A Guide to Java 8
Что нужно знать о бэкенде новичку в веб-разработке Туториалы: Spring Framework, Hibernate, Java Core, JDBC
- Основы SQL на примере задачи
- Уроки по JDBC
- Learn SQL
- Интуит. Основы SQL
- Try SQL
- Курс "Введение в базы данных"
- Джошуа Блох: Java. Эффективное программирование. Второе издание
- Гамма, Хелм, Джонсон: Приемы объектно-ориентированного проектирования. Паттерны проектирования
- Редмонд Э.: Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL
- Brian Goetz: Java Concurrency in Practice
- G.L. McDowell: Cracking the Coding Interview