- Notifications
You must be signed in to change notification settings - Fork2.9k
Java Enterprise: Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery
JavaOPs/topjava
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
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.
Когда вы слышите что-то, вы забываете это.Когда вы видите что-то, вы запоминаете это.Но только когда вы начинаете делать это,вы начинаете понимать этоСтаринная китайская поговорка
2.3.Часть 3: тренды
- ВНИМАНИЕ: выбирайте для проекта простой путь без пробелов и русских букв, например,
c:\projects\topjava\(Windows). Иначе впоследствии будут проблемы - Плагин Git Intergation уже не требуется, а вкладку
Version controlв IDEA переименовали вGit - C Ultimate IDEA сейчас сложности, надеемся что временные.
- Скачать IDEA и установливать плагиныможно по инструкции
- После Trial 30 днейспособы продлить использование
Для переключения режима отображения изменений из вкладкиCommit вGit: Local Changes нужно переключитьSettings/Preferences | Version Control | Commit | Use non-modal commit interface или в контекстном меню вкладкиCommit:
Патчprepare_to_HW0.patch (скачать и положить в каталог вашего проекта)
Проект постоянно улучшается, поэтому видео иногда отличается от кода проекта. Изменения указываю после видео:
- переименовал класс
UserMealWithExceedи его полеexceedвUserMealWithExcess.excess- в
UserMeals/UserMealWithExcessполя изменились наprivate- обновил данные
UserMealsUtil.mealsи переименовал некоторые переменные, поля и методы- добавил
UserMealWithExcess.toString()и метод для выполненияOptional домашнего задания- метод фильтрации в
TimeUtilпереименовал вisBetweenHalfOpen(также изменилась логика сравнения:startTimeвключается в интервал, аendTime- не включается)
GitHub поменял политику: теперь пушить нужно через токен. IDEA предложит его сгенерировать при пуше, или можносоздать токен в настройках
- Установить ПО (Git, JDK8, IntelliJ IDEA, Maven)
- Создать аккаунт наGitHub
- Сделать ForkЭТОГО проекта (https://github.com/JavaOPs/topjava)
- Сделать локальный репозиторий проекта:
git clonehttps://github.com/[Ваш аккаунт]/topjava.git
Вместо Fork можно сделатьклонирование проекта: он не будет привязан к исходномуhttps://github.com/JavaOPs/topjava и у него не будет истории.
- Открыть и настроить проект в IDEA
- По ходу видео сделать
Apply Patch...скачанного патчаPrepare_to_HW0.patch - Закоммитить и запушить изменения (
commit+push) - Сделать ветку домашнего задания
- Выполнить задание и залить на GitHub (
commit+push) - Переключиться в основную ветку проекта
master.
7.Maven
- Как установить Maven 3 на Ubuntu или Windows
- Руководство по Maven
- Wiki:Apache Maven
- The Central Repository
- Дополнительно:
ВНИМАНИЕ: НЕ НАДО в репозиторий делать 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).
- Java 8 Date and Time API
- Алгоритмы и структуры данных для начинающих: сложность алгоритмов
- Сложность алгоритмов и Big O Notation
- Головач: сложность алгоритмов в теме коллекций
- Time complexity
- Временная сложность алгоритма
- Вычислительная сложность
ВНИМАНИЕ: варианты Optional делайте в одной ветке в разных методахUserMealsUtil. Проще делать, проще проверять
Реализовать метод `UserMealsUtil.filteredByStreams` через Java 8 Stream API.- Видео: Доступно о Java 8 Lambda
- Java 8: Lambda выражения
- Java 8: Потоки
- Pуководство по Java 8 Stream
- Полное руководство по Java 8 Stream API в картинках и примерах
- 7 способов использовать groupingBy в Stream API
- Лямбда-выражения в Java 8
- A Guide to Java 8
- Шпаргалка Java Stream API
- Алексей Владыкин: Элементы функционального программирования в Java
- Yakov Fain о новом в Java 8
- stream.map vs forEach</a
- Руководство по Java Stream в Java 8
- Дополнительно
- циклом за 1 проход по
List<UserMeal>- без циклов по другим коллекциям/массивам (к ним также относим методы коллекций
addAll()/removeAll())
- без циклов по другим коллекциям/массивам (к ним также относим методы коллекций
- через Stream API за 1 проход по исходному списку
meals.stream()- нельзя использовать внешние коллекции, не являющиеся частью коллектора
- возможно дополнительные проходы по частям списка, при этом превышение должно считаться один раз для всего подсписка. Те например нельзя разбить список на 2 подсписка с четными и нечетными датами и затем их объединить, с подсчетом превышения для каждого элемента.
Временная сложность реализации должна быть O(N) (обратите внимание на п. 13 замечаний)
Решение должно быть рабочим в общем случае (должно работать в приложении с многими пользователями, не только при запускеmain)
Нельзя 2 раза проходить по исходному списку (в том числе по его отфильтрованной или преобразованной копии)
Ресурсы:
- Baeldung: Custom Collectors
- Руководство по Java 8 Stream API: Collector
- Хватит писать циклы! Топ-10 лучших методов для работы с коллекциями из Java 8
- Понять Java Stream API
- Когда встречаешь что-то непривычное, приходится перестраивать мозги. Например, переход с процедурного на ООП-программирование дается непросто. Те, кто не знает шаблонов (и не хотят учить), также их встречают плохо. Хорошая новость в том, что если это принять и начать использовать, то начинаешь получать от этого удовольствие. И тут главное не впасть в другую крайность:
- Если вас беспокоит производительность стримов, обязательно прочитайте про оптимизацию
При использовании Stream API производительность улучшится только на больших задачах, где возможно распараллеливание.Еще: просто так запустить и померить скорость JVM нельзя (как минимум надо дать прогреться и запустить очень большое число раз). Лучше использовать какие-нибудь бенчмарки, напримерJMH, который мы используем на другом проекте (Mastejava).
- 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-го занятия
- Basic HTML and HTML5
- Справочник по 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 Boot + HATEOAS
- Что нужно знать о бэкенде новичку в веб-разработке
- Туториалы: Spring Framework, Hibernate, Java Core, JDBC
- Юрий Ткач: Spring Framework - The Basics
- Java Brains: Spring Framework
- Тимур Батыршинов: Spring Core - основы фреймворка, ядро
- alishev: Spring Framework
- Основы SQL на примере задачи
- Уроки по JDBC
- Learn SQL
- Интуит. Основы SQL
- Try SQL
- Курс "Введение в базы данных"
- Вопросы по собеседованию, ресурсы для подготовки
- Эффективная работа с кодом в IntelliJ IDEA
- Quizful- тесты онлайн
- Введение в Linux
- Джошуа Блох: Java. Эффективное программирование. Второе издание
- Гамма, Хелм, Джонсон: Приемы объектно-ориентированного проектирования. Паттерны проектирования
- Редмонд Э.: Семь баз данных за семь недель. Введение в современные базы данных и идеологию NoSQL
- Brian Goetz: Java Concurrency in Practice
- G.L. McDowell: Cracking the Coding Interview
About
Java Enterprise: Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.




