Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a Codacy badge to README.md #1

Open
wants to merge 29 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,4 @@ out
target
*.iml
log



*.patch
197 changes: 197 additions & 0 deletions README.md

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions config/setenv.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
rem run tomcat with JMX ability
rem Run Tomcat as admin
rem for remote connection add -Djava.rmi.server.hostname=TomcatServer_IP
set CATALINA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
3 changes: 3 additions & 0 deletions config/setenv.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# run tomcat with JMX ability as admin
# for remote connection add -Djava.rmi.server.hostname=TomcatServer_IP
export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
81 changes: 81 additions & 0 deletions cv.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
## Составление резюме, подготовка к интервью, поиск работы

![cv](https://cloud.githubusercontent.com/assets/13649199/10877471/93ea86b8-8157-11e5-9bfa-95e3fba75c58.jpg)

- <a href="http://habrahabr.ru/company/ua-hosting/blog/272617/">Научиться программировать сложнее, чем кажется</a>

### Составление резюме:
- <a href="http://resumup.com/">Выбрать шаблон для резюме</a>
- <a href="http://ain.ua/2015/01/14/558261">Идеальное резюме Junior’а</a>
- <a href="http://lifehacker.ru/2015/04/07/33-lajfhaka-dlya-rezyume/">Как продать свое резюме в 2 раза дороже</a>
- <a href="http://enjoy-job.ru/trudoustroistvo/kak-pravilno-sostavit-rezume/">Как правильно составить резюме</a>
- <a href="http://habrahabr.ru/post/184332/">Резюме программистов. Часть 1 (плохие)</a>
- <a href="http://habrahabr.ru/post/184372/">Резюме программистов. Часть 2 (хорошие)</a>
- <a href="http://skyeng.ru/articles/sostavte-rezyume-na-anglijskom-450-primerov">Как составить резюме на английском</a>
- <a href="http://blog.olegdubas.com/2013/03/17/resume/">ОФОРМЛЕНИЕ IT-РЕЗЮМЕ для USA</a>

### <a href="http://javaops.ru/story.html">Наши истории (делимся опытом и успехом)</a>

### Тесты/задачи онлайн:
- <a href="https://codility.com/programmers/lessons">Codility lesson tests</a>
- <a href="http://www.quizful.net/test">Quizful- тесты онлайн</a>
- <a href="https://www.tracy.k12.ca.us/sites/clunetta/Java/practice/practice.htm">Multiple-Choice Questions in Java</a>
- <a href="https://leetcode.com/">LeetCode Online Judge</a>
- <a href="http://www.spoj.com/">Sphere online judge</a>
- <a href="https://codility.com/programmers/lessons/">Codility programmers lessons</a>
- <a href="https://www.hackerrank.com/">Hackerrank practice coding</a>

### Интервью:
- <a href="https://www.youtube.com/watch?v=Deb5wMHjBHY">Михаил Портнов. Собеседование на работу: как продать себя грамотно</a>
- <a href="https://www.youtube.com/watch?v=qKsc8PoHJwM">Михаил Портнов. Какие вопросы мы задаем на собеседовании?</a>
- <a href="https://www.youtube.com/playlist?list=PL7XXjge0nKZczMtQbNk9c2cplvuLZomTh">Канал: Резюме, поиск работы, интервью</a>
- <a href="https://www.youtube.com/watch?v=ft0Nj8Cm9kk">Яков Файн: Как стать профессиональным Java разработчиком</a>
- <a href="https://jsehelper.blogspot.ru/p/blog-page.html">Ответы на вопросы на собеседовании Junior Java Developer</a>
- <a href="http://javastudy.ru/interview/list-of-question-java-interview/">Список вопросов с ответами для собеседования по Java</a>
- <a href="https://github.com/MaximAbramchuck/awesome-interviews#java">Сборка по вопросам на интервью</a>
- <a href="http://javastudy.ru/category/interview/">Сборка вопросов-ответов от JavaStudy</a>
- <a href="http://habrahabr.ru/post/181033/">Тест на знание SQL</a>
- <a href="http://jsehelper.blogspot.ru/p/blog-page.html">Вопросы на собеседовании Java Junior Developer</a>
- <a href="https://play.google.com/store/apps/details?id=com.ab.jiq">Java вопросы с собеседований на Android</a>
- <a href="https://drive.google.com/open?id=0B9Ye2auQ_NsFLTRFY293RUVPVms">Сборка вопросов от JavaRush</a>
> про clone и finalize объязательно прочтите <a href="http://www.ozon.ru/context/detail/id/24828676/">Джошуа Блох: Java. Эффективное программирование (второе издание)</a>

- <a href="http://bookvoed.ru/book?id=2593572">Cracking the Coding Interview</a>
> Особенно обратите внимание на раздел: <a href="http://storage.piter.com/upload/contents/978545901120/978545901120_X.pdf">Часть VIII. Вопросы собеседования</a>


### От себя:
- email, skype - очень желательно, чтобы по ним вы были узнаваемы. Заведите рабочие, если не так.
- написать ВЕСЬ IT опыт (исключая опыт пользователя: Windows, MS Word, Photophop, Yandex disk, Google docs, ..): технологии, какие задачи решали (конкретные), какие инструменты использовали, VCS, DB, инструменты сборки, ... включая опыт в ВУЗе.
- на English иметь желательно. Если вакансия опублинована на Englsih - шлите на нем. Часто могут на нем попросить, если работодатель иностранный.
- удобно иметь резюме где то в инете (hh, linkedin, google doc, чтобы им было удобно делиться).

### Позиционирование <a href="https://github.com/JavaOPs/topjava/blob/master/description.md">проекта Topjava</a>:
- После завершения проекта вы освоите все заявленные в нем технологии - вставьте их в квалификацию (включая 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.
- отлично будет, если вы его еще как то сами доработаете


Делайте упор не на обучение, а на *участие в проекте*. Выполнение домашних заданий - это полноценное участие с написанием функционала по всем этим технологиям. На собеседовании меньше смотрят на то, что вы заканчивали, больше - на ваш опыт и то что вы знаете.

- Ссылку на организацию можно поставить: http://javaops.ru (или в linkedin: https://www.linkedin.com/company/java-online-projects)

### В течении проекта заполните <a href="http://goo.gl/forms/Oy5A7HNkWt">форму соискателя "Разработчик Java"</a>
Я ее рассылаю всем знакомым HR, уже есть пинги и трудоустройство.

Ближе к концу курса я вышлю приглашение в нашу общую группу slack: общение на все темы IT, обсуждение вступительных заданий, вакансии, цены на рынке труда, события, помощь, интересные видео по теме и пр.

### <a href="https://vk.com/javawebinar?w=wall-58538268_414">Подпишитесь на рассылку вакансий под себя</a>

### Основные сайты поиска работы:
- <a href="https://rabota.yandex.ru/search?job_industry=275&text=java">Яндекс агрегатор</a>
- <a href="hh.ru">HH</a>
- <a href="https://www.linkedin.com/">LinkedIn</a>
- <a href="http://djinni.co/">djinni.co (более актуально для Украины)</a>

## <a href="http://javaops.ru/vacation/test.html">Тестовое собеседование, самые спрашиваемые темы</a>
67 changes: 67 additions & 0 deletions description.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#### Разработка полнофункционального Spring/JPA Enterprise приложения c авторизацией и правами доступа на основе ролей с использованием <a href="http://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-for-2014/" target="_blank">наиболее популярных инструментов и технологий Java</a>: Maven, Spring MVC, Security, JPA(Hibernate), REST(Jackson), Bootstrap (css,js), datatables, jQuery + plugins, Java 8 Stream and Time API
- Основное внимание будет уделяться способам решения многочисленных проблем разработки в Spring/JPA, а также структурному (красивому и надежному) java кодированию и архитектуре приложения.
- Каждая итерация проекта в закрепляется домашним заданием по реализации схожей функциональности. Следующее занятие начинается с разбора домашних заданий.
- Большое внимание уделяется тестированию кода: в проекте 88 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.

#### <a href="http://topjava.herokuapp.com/" target=_blank>Демо разрабатываемого приложения</a>

## План проекта (ссылки на некоторые темы открыты для просмотра)
### Архитектура проекта. Персистентность.
- <a href="https://drive.google.com/file/d/0B9Ye2auQ_NsFSUNrdVc0bDZuX2s">Системы управления версиями</a>
- <a href="http://www.youtube.com/watch?v=_PDIVhEs6TM">Java 8: Lambda</a>, Stream API
- Обзор используемых в проекте технологий и инструментов.
- <a href="https://drive.google.com/open?id=0B9Ye2auQ_NsFSlZMTXBJRXJpakU">Инструмент сборки Maven.</a>
- WAR. Веб-контейнер Tomcat. Сервлеты.
- Логирование.
- Обзор стандартных библиотек. Apache Commons, Guava
- Слои приложения. Создание каркаса приложения.
- Обзор Spring Framework. Spring Context.
- Тестирование через JUnit.
- <a href="https://drive.google.com/file/d/0B9Ye2auQ_NsFai1veG9qaFZlZ2s/view">Spring Test</a>
- Базы данных. PostgreSQL. Обзор NoSQL и Java persistence solution без ORM.
- Настройка Database в IDEA.
- Скрипты инициализации базы. Spring Jdbc Template.
- <a href="https://drive.google.com/file/d/0B9Ye2auQ_NsFU0Z2R190eDllYmM/view">Spring: инициализация и популирование DB</a>
- ORM. Hibernate. JPA.
- Поддержка HSQLDB
- Транзакции
- Профили Maven и Spring
- <a href="https://drive.google.com/open?id=0B9Ye2auQ_NsFTWJOdHduOWtNcTA">Пул коннектов</a>
- Spring Data JPA
- Кэш Hibernate

### Разработка WEB
- Spring кэш
- Spring Web
- JSP, JSTL, i18n
- Tomcat maven plugin. JNDI
- Spring Web MVC
- Spring Internationalization
- Тестирование Spring MVC
- REST контроллеры
- Тестирование REST контроллеров. Jackson.
- jackson-datatype-hibernate. Тестирование через матчеры.
- Тестирование через SoapUi. UTF-8
- WebJars.
- Bootstrap. Datatables.
- AJAX. jQuery. Notifications.
- Spring Security
- Spring Binding/Validation
- Работа с Datatables через Ajax.
- Spring Security Test
- Encoding password
- <a href="https://drive.google.com/file/d/0B9Ye2auQ_NsFNDlPZGdUNThzNUU/view">CSRF (добавление в проект защиты от межсайтовой подделки запроса)</a>
- form-login. Spring Security Taglib
- Handler interceptor
- Spring Exception Handling
- <a href="https://drive.google.com/open?id=0B9Ye2auQ_NsFZkpVM19QWFBOQ2c">Деплой в Heroku</a>
98 changes: 96 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<groupId>ru.javawebinar</groupId>
<artifactId>topjava</artifactId>
<packaging>jar</packaging>
<packaging>war</packaging>

<version>1.0-SNAPSHOT</version>

Expand All @@ -15,11 +15,22 @@
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<spring.version>4.3.2.RELEASE</spring.version>

<!-- Logging -->
<logback.version>1.1.7</logback.version>
<slf4j.version>1.7.21</slf4j.version>

<!--DB-->
<postgresql.version>9.4.1211</postgresql.version>
<!-- Tests -->
<junit.version>4.12</junit.version>
</properties>

<build>
<finalName>topjava</finalName>
<defaultGoal>install</defaultGoal>
<defaultGoal>package</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Expand All @@ -30,10 +41,93 @@
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<argLine>-Dfile.encoding=UTF-8</argLine>
</configuration>
</plugin>
</plugins>
</build>

<dependencies>
<!-- Logging with SLF4J & LogBack -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<scope>runtime</scope>
</dependency>

<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>

<!--DataBase-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>

<!--Web-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

<!--Test-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>

</dependencies>

<profiles>
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/ru/javawebinar/topjava/AuthorizedUser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package ru.javawebinar.topjava;

import ru.javawebinar.topjava.model.BaseEntity;
import ru.javawebinar.topjava.util.MealsUtil;

/**
* GKislin
* 06.03.2015.
*/
public class AuthorizedUser {
public static int id = BaseEntity.START_SEQ;

public static int id() {
return id;
}

public static void setId(int id) {
AuthorizedUser.id = id;
}

public static int getCaloriesPerDay() {
return MealsUtil.DEFAULT_CALORIES_PER_DAY;
}
}
Loading