From 2c47cd7aca8063a80fbb1806f466e46b0918fa2f Mon Sep 17 00:00:00 2001 From: Grigory Kislin Date: Wed, 26 Aug 2015 02:13:54 +0300 Subject: [PATCH 01/18] Add readme and project description --- README.md | 53 +++++++++++++++++++++++++++++++++++++++++ description.md | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 README.md create mode 100644 description.md diff --git a/README.md b/README.md new file mode 100644 index 000000000000..b45455288acd --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +Java Enterprise Online Project +=============================== +Наиболее востребованные технологии /инструменты / фреймворки Java Enterprise: +Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery + plugins. + +**Старт проекта 10.09.2015** + +Вводное занятие +=============== + +## Описание проекта + +#### Демо разрабатываемого приложения + +## Системы управления версиями. Git. + +- Система управления версиями. VCS/DVSC. +- Ресурсы: + - Интерактивная Git обучалка + - Основы Git + - Working with remote repositories + - Видео по обучению Git + - Как начать работать с GitHub: быстрый старт + - Справочник в графическом виде + - Git Overview + +## Работа с проектом (выполнять инструкции) +- **Prepare_ to_ HW0.patch (скачать и положить в каталог вашего проекта)** +- Доступно о Java 8 Lambda + +## Инструкция по шагам (из видео): +- Установить ПО (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) +- Отослать в skype мне ссылку вашей ветки GitHub (при оплате расширенного участия) +- Переключиться в основную ветку проекта master. + +### Вы готовы к участию в проекте! + +- Ресурсы + - Java 8: Lambda выражения + - Java 8 Date and Time API + - Java 8: Потоки + - Pуководство по Java 8 Stream + - Лямбда-выражения в Java 8 diff --git a/description.md b/description.md new file mode 100644 index 000000000000..c58f903605d4 --- /dev/null +++ b/description.md @@ -0,0 +1,64 @@ +#### Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей используя наиболее популярные инструменты и технологии Java: Maven, Spring, Security, JPA(Hibernate), REST(Jackson), Bootstrap, jQuery + plugins +- Основное внимание будет уделяться способам решения многочисленных проблем разработки в Spring/JPA, а также структурному (красивому и надежному) java кодированию и архитектуре приложения. +- Каждая итерация проекта в закрепляется домашним заданием по реализации схожей функциональности. Следующее занятие начинается с разбора домашних заданий. +- Большое внимание уделяется тестированию кода: в проекте ~ 85 JUnit тестов. +- Несмотря на относительно небольшой размер, приложение разрабатывается с нуля как большой проект (например мы используем кэш 2-го уровня Hibernate, настраиваем Jenkins для работы с ленивой загрузкой +Hibernate, делаем конверторы для типов LocalDateTime (Java 8 time API), которые еще не поддерживаются ни JPA/Hibernate, ни Jackson/json). + Разбираются архитектурные паттерны: слои приложения и как правильно разбивать логику по слоям, когда нужно применят Data Transfer Object. + Т.е на выходе получается не учебный проект, а хорошо маштабируемый шаблон для большого проекта на всех пройденных технологиях. +- Большое внимание уделяется деталям: популяция базы, использование транзакционности, тесты сервисов и REST + контроллеров, насторойка EntityManagerFactory, + выбор реализации пула коннектов. Особое внимание уделяется работе с базой: через Spring JDBC, Spring ORM и + Spring Data Jpa. +- Используются самые востребованные на сегодняшний момент фреймворки: Maven, Spring Security 4 + вместе с Spring Security Test, наиболее удобный для работы с базой проект Spring Data Jpa, библиотека логирования logback, реализующая SLF4J, повсеместно используемый Bootstrap и jQuery. + +## Архитектура проекта. Персистентность. +- Системы управления версиями +- Java 8: Lambda, Stream API +- Обзор используемых в проекте технологий и инструментов. +- Maven, другие инструменты сборки. +- WAR. Веб-контейнер Tomcat. Сервлеты. +- Логирование. +- Обзор стандартных библиотек. Apache Commons, Guava +- Слои приложения. Создание каркаса приложения. +- Обзор Spring Framework. Spring Context. +- Тестирование через JUnit. +- Spring Test +- Базы данных. PostgreSQL. Обзор NoSQL и Java persistence solution без ORM. +- Настройка Database в IDEA. +- Скрипты инициализации базы. Spring Jdbc Template. +- Spring: инициализация и популирование DB +- ORM. Hibernate. JPA. +- Поддержка HSQLDB +- Транзакции +- Профили Maven и Spring +- Пул коннектов +- Spring Data JPA +- Spring кэш +- Кэш Hibernate + +## Разработка WEB +- Spring Web +- JPS, JSTL, i18n +- Tomcat maven plugin. JNDI +- Spring Web MVC +- Spring Internationalization +- Тестирование Spring MVC +- REST контроллеры +- Тестирование REST контроллеров. Jackson. +- jackson-datatype-hibernate. Тестирование через матчеры. +- Тестирование через SoapUi. UTF-8 +- WebJars. Dandelion bundles +- Bootstrap. Datatables. +- AJAX. jQuery. Notifications. +- Spring Security +- Spring Binding/Validation +- Работа с Datatables через Ajax. +- Spring Security Test +- Encoding password +- CSRF +- form-login. Spring Security Taglib +- Handler interceptor +- Spring Exception Handling +- Деплой в Heroku From db1c94981aabaf06140f52688fb640f22197089c Mon Sep 17 00:00:00 2001 From: Grigory Kislin Date: Tue, 3 Nov 2015 00:33:39 +0300 Subject: [PATCH 02/18] Update description --- README.md | 33 +++++++++++++++++++++++++++------ cv.md | 34 ++++++++++++++++++++++++++++++++++ description.md | 7 +++++-- 3 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 cv.md diff --git a/README.md b/README.md index b45455288acd..105a96be146a 100644 --- a/README.md +++ b/README.md @@ -3,16 +3,19 @@ Java Enterprise Online Project Наиболее востребованные технологии /инструменты / фреймворки Java Enterprise: Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery + plugins. -**Старт проекта 10.09.2015** - Вводное занятие =============== ## Описание проекта +### Демо разрабатываемого приложения +### Ваше резюме + +#### Wiki +#### Форум + -#### Демо разрабатываемого приложения -## Системы управления версиями. Git. +## ![video](http://s.ytimg.com/yts/img/favicon-vflz7uhzw.ico) Системы управления версиями. Git. - Система управления версиями. VCS/DVSC. @@ -24,9 +27,10 @@ Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery + - Как начать работать с GitHub: быстрый старт - Справочник в графическом виде - Git Overview + - Видеокурс по Git -## Работа с проектом (выполнять инструкции) -- **Prepare_ to_ HW0.patch (скачать и положить в каталог вашего проекта)** +## ![video](http://s.ytimg.com/yts/img/favicon-vflz7uhzw.ico) Работа с проектом (выполнять инструкции) +- **Prepare_ to_ HW0.patch (скачать и положить в каталог вашего проекта)** - Доступно о Java 8 Lambda ## Инструкция по шагам (из видео): @@ -51,3 +55,20 @@ Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery + - Java 8: Потоки - Pуководство по Java 8 Stream - Лямбда-выражения в Java 8 + - Time complexity + +## Домашнее задание HW0 + Реализовать UserMealsUtil.getFilteredMealsWithExceeded: + - должны возвращаться только записи между startTime и endTime + - поле UserMealWithExceed.exceed должно показывать, + превышает ли сумма калорий за весь день параметра метода caloriesPerDay + + Т.е UserMealWithExceed - это запись одной еды, но поле exceeded + будет одинаково для всех записей за этот день. + + - Проверте результат выполнения ДЗ! + - Оцените Time complexity вашего алгоритма. + +Optional + + Сделать реализация через Java 8 Stream API diff --git a/cv.md b/cv.md new file mode 100644 index 000000000000..a2ec06d4017d --- /dev/null +++ b/cv.md @@ -0,0 +1,34 @@ +## Составление резюме + +![cv](https://cloud.githubusercontent.com/assets/13649199/10877471/93ea86b8-8157-11e5-9bfa-95e3fba75c58.jpg) + +### Общие вещи: +- Как правильно составить резюме +- Резюме программистов. Часть 1 (плохие) +- Резюме программистов. Часть 2 (хорошие) +- Покритикуйте пожалуйста резюме (Junior java) +- Как составить резюме программисту? +- Мое (только как пример), linkedIn + +### От себя: +- email, skype - очень желательно, чтобы по ним вы были узнаваемы. Заведите рабочие, если не так. +- написать ВЕСЬ IT опыт (исключая опыт пользователя: Windows, MS Word, Photophop, Yandex disk, Google docs, ..): технологии, какие задачи решали (конкретные), какие инструменты использовали, VCS, DB, инструменты сборки, ... включая опыт в ВУЗе. +- на English иметь желательно. Если вакансия опублинована на Englsih - шлите на нем. Часто могут на нем попросить, если работодатель иностранный. +- формат: pdf или doc на мой взгляд не так важно. doc нарпимер в USA любят, я - нет:) На мой взгляд удобно иметь резюме где то в инете (hh, linkedin, google doc, чтобы им было удобно делиться). + +### Позиционирование проекта Topjava: +- После завершения проекта вы освоите все заявленные в нем технологии - вставьте в квалификацию (включая java 8 Stream and Time API) +- Делайте упор не на обучение, а на `участие в проекте`. Выполнение домашних заданий - это полноценное участие с написанием функционала по всем этим технологиям. Например: + + Участие в разработке Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей + на стеке Maven/ Spring MVC/ Security/ REST(Jackson)/ Java 8 Stream API: + - реализация сохранения в базы Postgres и HSQLDB на основе Spring JBDC, JPA(Hibernate) и Spring-Data-JPA + - реализация и тестирование REST и AJAX контроллеров + - реализация клиента на Bootstrap (css/js), datatables, jQuery + plugins. + - отлично будет, если вы его еще как то сами доработаете + + Ссылка на github и Heroku с задеплоенным приложением. + +- По поводу обучения на курсах- можно упомянуть в разделе образования. Но на собеседовании меньше смотрят на то, что вы заканчивали, больше - на ваш опыт и то что вы знаете. + +- В течении проекта заполните форму для работодателей diff --git a/description.md b/description.md index c58f903605d4..fcf8c9067227 100644 --- a/description.md +++ b/description.md @@ -1,4 +1,7 @@ -#### Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей используя наиболее популярные инструменты и технологии Java: Maven, Spring, Security, JPA(Hibernate), REST(Jackson), Bootstrap, jQuery + plugins +#### Старт проекта 26.11.2015 +Присылайте заявки в skype:grigory.kislin + +#### Разработка полнофункционального 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 - Основное внимание будет уделяться способам решения многочисленных проблем разработки в Spring/JPA, а также структурному (красивому и надежному) java кодированию и архитектуре приложения. - Каждая итерация проекта в закрепляется домашним заданием по реализации схожей функциональности. Следующее занятие начинается с разбора домашних заданий. - Большое внимание уделяется тестированию кода: в проекте ~ 85 JUnit тестов. @@ -49,7 +52,7 @@ Hibernate, делаем конверторы для типов LocalDateTime (Ja - Тестирование REST контроллеров. Jackson. - jackson-datatype-hibernate. Тестирование через матчеры. - Тестирование через SoapUi. UTF-8 -- WebJars. Dandelion bundles +- WebJars. - Bootstrap. Datatables. - AJAX. jQuery. Notifications. - Spring Security From 18097a2bb75fd0f68d230853656c5ba375f64cc7 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Sat, 7 Nov 2015 00:42:22 +0300 Subject: [PATCH 03/18] Update cv.md --- cv.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cv.md b/cv.md index a2ec06d4017d..76e60ced941e 100644 --- a/cv.md +++ b/cv.md @@ -31,4 +31,4 @@ - По поводу обучения на курсах- можно упомянуть в разделе образования. Но на собеседовании меньше смотрят на то, что вы заканчивали, больше - на ваш опыт и то что вы знаете. -- В течении проекта заполните форму для работодателей +- В течении проекта заполните форму соискателя "Разработчик Java" From 3aebe2b9bb5719fe2ddeba4378c54dc55b378ab0 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Fri, 13 Nov 2015 11:48:11 +0300 Subject: [PATCH 04/18] Update description.md --- description.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/description.md b/description.md index fcf8c9067227..67308b5dd4db 100644 --- a/description.md +++ b/description.md @@ -1,6 +1,8 @@ #### Старт проекта 26.11.2015 Присылайте заявки в skype:grigory.kislin +#### Вводное занятие + #### Разработка полнофункционального 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 - Основное внимание будет уделяться способам решения многочисленных проблем разработки в Spring/JPA, а также структурному (красивому и надежному) java кодированию и архитектуре приложения. - Каждая итерация проекта в закрепляется домашним заданием по реализации схожей функциональности. Следующее занятие начинается с разбора домашних заданий. From 7dfb9dca795a517cc6ccf4557f1b7fb1c2b83329 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Thu, 19 Nov 2015 00:40:32 +0300 Subject: [PATCH 05/18] Update cv.md --- cv.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/cv.md b/cv.md index 76e60ced941e..b2efeb6674ff 100644 --- a/cv.md +++ b/cv.md @@ -26,8 +26,6 @@ - реализация и тестирование REST и AJAX контроллеров - реализация клиента на Bootstrap (css/js), datatables, jQuery + plugins. - отлично будет, если вы его еще как то сами доработаете - - Ссылка на github и Heroku с задеплоенным приложением. - По поводу обучения на курсах- можно упомянуть в разделе образования. Но на собеседовании меньше смотрят на то, что вы заканчивали, больше - на ваш опыт и то что вы знаете. From 6188059fa92e7bb15b08d9991f1b516813351e65 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Thu, 19 Nov 2015 14:04:58 +0300 Subject: [PATCH 06/18] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 105a96be146a..d54fed6d4ce1 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,7 @@ Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery + - Java 8: Потоки - Pуководство по Java 8 Stream - Лямбда-выражения в Java 8 + - Шпаргалка Java Stream API - Time complexity ## Домашнее задание HW0 From e104c0e681bd4e38423f8eb27557ba02ffdb2df8 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Thu, 19 Nov 2015 15:23:34 +0300 Subject: [PATCH 07/18] Update README.md --- README.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/README.md b/README.md index d54fed6d4ce1..3d0d6eee8b7c 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,13 @@ Java Enterprise Online Project Наиболее востребованные технологии /инструменты / фреймворки Java Enterprise: Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery + plugins. + Когда вы слышите что-то, вы забываете это. + Когда вы видите что-то, вы запоминаете это. + Но только когда вы начинаете делать это, + вы начинаете понимать это + + Старинная китайская поговорка + Вводное занятие =============== @@ -73,3 +80,25 @@ Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery + Optional Сделать реализация через Java 8 Stream API + +## Ресурсы для подготовки к проекту (желательно иметь представление для лучшего усвоения материала): + +##№ Java Core (@Annotation, Reflection API, JUnit, JDBC) +- Интуит. Программирование на Java +- Oracle Java tutorial на русском. +- Введение в Java Reflection API +- Java JUnit +- Уроки по JDBC + +##№ Java Web (Servlets, JSP, Tomcat) +- Введение в сетевое программирование +- Основы Java на реальном примере (Servlets, JSP) +- Как создать Servlet? Полное руководство. +- Технологии Java для разработки веб-приложений + +### HTML, javascript, css +- Основы работы с HTML/CSS/JavaScript +- + +### Инструменты +- Эффективная работа с кодом в IntelliJ IDEA From c17d1d2a7ffd98cf0b15f5c1b460f78f13a5cb90 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Thu, 19 Nov 2015 15:47:43 +0300 Subject: [PATCH 08/18] Update README.md --- README.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 3d0d6eee8b7c..10b76d389c06 100644 --- a/README.md +++ b/README.md @@ -81,24 +81,30 @@ Optional Сделать реализация через Java 8 Stream API -## Ресурсы для подготовки к проекту (желательно иметь представление для лучшего усвоения материала): +### Ресурсы для подготовки к проекту (желательно иметь представление для лучшего усвоения материала) -##№ Java Core (@Annotation, Reflection API, JUnit, JDBC) +#### Java Core (@Annotation, Reflection API, JUnit, JDBC) - Интуит. Программирование на Java - Oracle Java tutorial на русском. - Введение в Java Reflection API - Java JUnit - Уроки по JDBC -##№ Java Web (Servlets, JSP, Tomcat) +#### Java Web (Servlets, JSP, Tomcat) - Введение в сетевое программирование - Основы Java на реальном примере (Servlets, JSP) - Как создать Servlet? Полное руководство. - Технологии Java для разработки веб-приложений - -### HTML, javascript, css + +#### HTML, JavaScript, CSS - Основы работы с HTML/CSS/JavaScript -- +- jQuery для начинающих +- Уроки Bootstrap 3 + +#### SQL +- Learn SQL +- Try SQL -### Инструменты +#### Разное - Эффективная работа с кодом в IntelliJ IDEA +- Рекомендуемые книги по Java и разработке ПО From badd220a1a9563c40319df4d97a706803b862785 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Thu, 19 Nov 2015 15:52:05 +0300 Subject: [PATCH 09/18] Update README.md --- README.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 10b76d389c06..dce10b17a02e 100644 --- a/README.md +++ b/README.md @@ -81,16 +81,10 @@ Optional Сделать реализация через Java 8 Stream API -### Ресурсы для подготовки к проекту (желательно иметь представление для лучшего усвоения материала) +### Ресурсы для подготовки к проекту +#### (желательно иметь представление для лучшего усвоения материала) -#### Java Core (@Annotation, Reflection API, JUnit, JDBC) -- Интуит. Программирование на Java -- Oracle Java tutorial на русском. -- Введение в Java Reflection API -- Java JUnit -- Уроки по JDBC - -#### Java Web (Servlets, JSP, Tomcat) +#### Java Web (Servlets, JSP) - Введение в сетевое программирование - Основы Java на реальном примере (Servlets, JSP) - Как создать Servlet? Полное руководство. @@ -101,10 +95,17 @@ Optional - jQuery для начинающих - Уроки Bootstrap 3 -#### SQL +#### Java Core (Reflection API, JUnit) +- Введение в Java Reflection API +- Java JUnit + +#### JDBC, SQL +- Уроки по JDBC - Learn SQL - Try SQL #### Разное -- Эффективная работа с кодом в IntelliJ IDEA - Рекомендуемые книги по Java и разработке ПО +- Интуит. Программирование на Java +- Oracle Java tutorial на русском. +- Эффективная работа с кодом в IntelliJ IDEA From f0e27e363c0d10b8db6be0e9062efdaf90d050e7 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Sat, 21 Nov 2015 15:22:12 +0300 Subject: [PATCH 10/18] Update cv.md --- cv.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cv.md b/cv.md index b2efeb6674ff..5b5766ca2be7 100644 --- a/cv.md +++ b/cv.md @@ -30,3 +30,9 @@ - По поводу обучения на курсах- можно упомянуть в разделе образования. Но на собеседовании меньше смотрят на то, что вы заканчивали, больше - на ваш опыт и то что вы знаете. - В течении проекта заполните форму соискателя "Разработчик Java" + +### Основные сайты поиска работы: +- HH +- LinkedIn +- djinni.co (более актуально для Украины) +- moikrug From f56552ae6b0db98c5c2aaee1dde9a576e26f2f6e Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Tue, 24 Nov 2015 15:11:42 +0300 Subject: [PATCH 11/18] Update description.md --- description.md | 1 - 1 file changed, 1 deletion(-) diff --git a/description.md b/description.md index 67308b5dd4db..61df1305fec8 100644 --- a/description.md +++ b/description.md @@ -1,5 +1,4 @@ #### Старт проекта 26.11.2015 -Присылайте заявки в skype:grigory.kislin #### Вводное занятие From cc24b39c122274afea796fc9e7a2ec016632a360 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Wed, 25 Nov 2015 01:51:38 +0300 Subject: [PATCH 12/18] Update description.md --- description.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/description.md b/description.md index 61df1305fec8..d86151d58296 100644 --- a/description.md +++ b/description.md @@ -1,5 +1,3 @@ -#### Старт проекта 26.11.2015 - #### Вводное занятие #### Разработка полнофункционального 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 From 840c7275351749759880f72508a42224218301c7 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Fri, 27 Nov 2015 20:06:03 +0300 Subject: [PATCH 13/18] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index dce10b17a02e..eb5f2b193d63 100644 --- a/README.md +++ b/README.md @@ -74,12 +74,12 @@ Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery + Т.е UserMealWithExceed - это запись одной еды, но поле exceeded будет одинаково для всех записей за этот день. - - Проверте результат выполнения ДЗ! - - Оцените Time complexity вашего алгоритма. + - Проверте результат выполнения ДЗ (можно проверить логику по http://topjava.herokuapp.com/)! + - Оцените Time complexity вашего алгоритма (если он O(N*N)- попробуйте сделать O(N). Optional - Сделать реализация через Java 8 Stream API + Сделать реализация через Java 8 Stream API. Заменяйте forEach оператором stream.map(..) ### Ресурсы для подготовки к проекту #### (желательно иметь представление для лучшего усвоения материала) From c47173a9a2d6e21422eadfc17c12094dc729480a Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Fri, 27 Nov 2015 20:07:51 +0300 Subject: [PATCH 14/18] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eb5f2b193d63..2f2d1ac23d8c 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery + Т.е UserMealWithExceed - это запись одной еды, но поле exceeded будет одинаково для всех записей за этот день. - - Проверте результат выполнения ДЗ (можно проверить логику по http://topjava.herokuapp.com/)! + - Проверте результат выполнения ДЗ (можно проверить логику в http://topjava.herokuapp.com , список еды) - Оцените Time complexity вашего алгоритма (если он O(N*N)- попробуйте сделать O(N). Optional From f26944d5db6fd363542724f818d03dce66ae9fdc Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Fri, 27 Nov 2015 20:53:52 +0300 Subject: [PATCH 15/18] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2f2d1ac23d8c..f888c932ef9f 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,9 @@ Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery + - Лямбда-выражения в Java 8 - Шпаргалка Java Stream API - Time complexity - + - Временная сложность алгоритма + - Вычислительная сложность + ## Домашнее задание HW0 Реализовать UserMealsUtil.getFilteredMealsWithExceeded: - должны возвращаться только записи между startTime и endTime From f224523601203a0ea3d33efb21a61447d2bb3f3b Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Fri, 27 Nov 2015 21:11:29 +0300 Subject: [PATCH 16/18] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f888c932ef9f..de2b8511cc42 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,8 @@ Maven/ Spring/ Security/ JPA(Hibernate)/ REST(Jackson)/ Bootstrap(CSS)/ jQuery + Т.е UserMealWithExceed - это запись одной еды, но поле exceeded будет одинаково для всех записей за этот день. - - Проверте результат выполнения ДЗ (можно проверить логику в http://topjava.herokuapp.com , список еды) + - Проверте результат выполнения ДЗ + - (можно проверить логику в http://topjava.herokuapp.com , список еды) - Оцените Time complexity вашего алгоритма (если он O(N*N)- попробуйте сделать O(N). Optional From 96ac34a547148098df2e7118b86974bf4cfd1a0d Mon Sep 17 00:00:00 2001 From: sotftwaretesting Date: Tue, 1 Dec 2015 19:32:23 +0600 Subject: [PATCH 17/18] Patch1 --- .../javawebinar/topjava/model/UserMeal.java | 33 +++++++++++++++++ .../topjava/model/UserMealWithExceed.java | 24 +++++++++++++ .../ru/javawebinar/topjava/util/TimeUtil.java | 13 +++++++ .../topjava/util/UserMealsUtil.java | 35 +++++++++++++++++++ 4 files changed, 105 insertions(+) create mode 100644 src/main/java/ru/javawebinar/topjava/model/UserMeal.java create mode 100644 src/main/java/ru/javawebinar/topjava/model/UserMealWithExceed.java create mode 100644 src/main/java/ru/javawebinar/topjava/util/TimeUtil.java create mode 100644 src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java diff --git a/src/main/java/ru/javawebinar/topjava/model/UserMeal.java b/src/main/java/ru/javawebinar/topjava/model/UserMeal.java new file mode 100644 index 000000000000..fde5448b93d8 --- /dev/null +++ b/src/main/java/ru/javawebinar/topjava/model/UserMeal.java @@ -0,0 +1,33 @@ +package ru.javawebinar.topjava.model; + +import java.time.LocalDateTime; + +/** + * GKislin + * 11.01.2015. + */ +public class UserMeal { + protected final LocalDateTime dateTime; + + protected final String description; + + protected final int calories; + + public UserMeal(LocalDateTime dateTime, String description, int calories) { + this.dateTime = dateTime; + this.description = description; + this.calories = calories; + } + + public LocalDateTime getDateTime() { + return dateTime; + } + + public String getDescription() { + return description; + } + + public int getCalories() { + return calories; + } +} diff --git a/src/main/java/ru/javawebinar/topjava/model/UserMealWithExceed.java b/src/main/java/ru/javawebinar/topjava/model/UserMealWithExceed.java new file mode 100644 index 000000000000..dab6c9468c5e --- /dev/null +++ b/src/main/java/ru/javawebinar/topjava/model/UserMealWithExceed.java @@ -0,0 +1,24 @@ +package ru.javawebinar.topjava.model; + +import java.time.LocalDateTime; + +/** + * GKislin + * 11.01.2015. + */ +public class UserMealWithExceed { + protected final LocalDateTime dateTime; + + protected final String description; + + protected final int calories; + + protected final boolean exceed; + + public UserMealWithExceed(LocalDateTime dateTime, String description, int calories, boolean exceed) { + this.dateTime = dateTime; + this.description = description; + this.calories = calories; + this.exceed = exceed; + } +} diff --git a/src/main/java/ru/javawebinar/topjava/util/TimeUtil.java b/src/main/java/ru/javawebinar/topjava/util/TimeUtil.java new file mode 100644 index 000000000000..02399b7288cf --- /dev/null +++ b/src/main/java/ru/javawebinar/topjava/util/TimeUtil.java @@ -0,0 +1,13 @@ +package ru.javawebinar.topjava.util; + +import java.time.LocalTime; + +/** + * GKislin + * 07.01.2015. + */ +public class TimeUtil { + public static boolean isBetween(LocalTime lt, LocalTime startTime, LocalTime endTime) { + return lt.compareTo(startTime) >= 0 && lt.compareTo(endTime) <= 0; + } +} diff --git a/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java b/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java new file mode 100644 index 000000000000..2cb426400fa5 --- /dev/null +++ b/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java @@ -0,0 +1,35 @@ +package ru.javawebinar.topjava.util; + +import ru.javawebinar.topjava.model.UserMeal; +import ru.javawebinar.topjava.model.UserMealWithExceed; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.Month; +import java.util.Arrays; +import java.util.List; + +/** + * GKislin + * 31.05.2015. + */ +public class UserMealsUtil { + public static void main(String[] args) { + List mealList = Arrays.asList( + new UserMeal(LocalDateTime.of(2015, Month.MAY, 30,10,0), "Завтрак", 500), + new UserMeal(LocalDateTime.of(2015, Month.MAY, 30,13,0), "Обед", 1000), + new UserMeal(LocalDateTime.of(2015, Month.MAY, 30,20,0), "Ужин", 500), + new UserMeal(LocalDateTime.of(2015, Month.MAY, 31,10,0), "Завтрак", 1000), + new UserMeal(LocalDateTime.of(2015, Month.MAY, 31,13,0), "Обед", 500), + new UserMeal(LocalDateTime.of(2015, Month.MAY, 31,20,0), "Ужин", 510) + ); + getFilteredMealsWithExceeded(mealList, LocalTime.of(7, 0), LocalTime.of(12,0), 2000); +// .toLocalDate(); +// .toLocalTime(); + } + + public static List getFilteredMealsWithExceeded(List mealList, LocalTime startTime, LocalTime endTime, int caloriesPerDay) { + // TODO return filtered list with correctly exceeded field + return null; + } +} From 823e07749143f493b8b4315b810f8374ce436568 Mon Sep 17 00:00:00 2001 From: sotftwaretesting Date: Mon, 7 Dec 2015 20:42:02 +0600 Subject: [PATCH 18/18] Patch1 --- .../topjava/model/UserMealWithExceed.java | 10 ++++++++++ .../topjava/util/UserMealsUtil.java | 20 +++++++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/main/java/ru/javawebinar/topjava/model/UserMealWithExceed.java b/src/main/java/ru/javawebinar/topjava/model/UserMealWithExceed.java index dab6c9468c5e..66c356922f6b 100644 --- a/src/main/java/ru/javawebinar/topjava/model/UserMealWithExceed.java +++ b/src/main/java/ru/javawebinar/topjava/model/UserMealWithExceed.java @@ -21,4 +21,14 @@ public UserMealWithExceed(LocalDateTime dateTime, String description, int calori this.calories = calories; this.exceed = exceed; } + + @Override + public String toString() { + return "UserMealWithExceed{" + + "dateTime=" + dateTime + + ", description='" + description + '\'' + + ", calories=" + calories + + ", exceed=" + exceed + + '}'; + } } diff --git a/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java b/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java index 2cb426400fa5..79d1bd2ce6fc 100644 --- a/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java +++ b/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java @@ -3,11 +3,14 @@ import ru.javawebinar.topjava.model.UserMeal; import ru.javawebinar.topjava.model.UserMealWithExceed; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.Month; import java.util.Arrays; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * GKislin @@ -23,13 +26,18 @@ public static void main(String[] args) { new UserMeal(LocalDateTime.of(2015, Month.MAY, 31,13,0), "Обед", 500), new UserMeal(LocalDateTime.of(2015, Month.MAY, 31,20,0), "Ужин", 510) ); - getFilteredMealsWithExceeded(mealList, LocalTime.of(7, 0), LocalTime.of(12,0), 2000); -// .toLocalDate(); -// .toLocalTime(); + List filteredMealsWithExceeded = getFilteredMealsWithExceeded(mealList, LocalTime.of(7, 0), LocalTime.of(12, 0), 2000); + filteredMealsWithExceeded.forEach(System.out::println); } - public static List getFilteredMealsWithExceeded(List mealList, LocalTime startTime, LocalTime endTime, int caloriesPerDay) { - // TODO return filtered list with correctly exceeded field - return null; + public static List getFilteredMealsWithExceeded(List mealList, LocalTime startTime, LocalTime endTime, int caloriesPerDay) { + Map caloriesSumByDate = mealList.stream().collect(Collectors.groupingBy(um -> um.getDateTime().toLocalDate(), + Collectors.summingInt(UserMeal::getCalories))); + + return mealList.stream() + .filter(um->TimeUtil.isBetween(um.getDateTime().toLocalTime(), startTime, endTime)) + .map(um->new UserMealWithExceed(um.getDateTime(), um.getDescription(), um.getCalories(), + caloriesSumByDate.get(um.getDateTime().toLocalDate())> caloriesPerDay)) + .collect(Collectors.toList()); } }