Тестовое задание на стажировку JavaRush: Полезные ссылки и хинты

Хочу поделиться с вами полезными ссылками, хинтами и советами, которые помогут при выполнении тестового задания на стажировку в реальный проект на JavaRush.

Конечно, можно просто бездумно накопировать решение тестового задания из интернета, благо примеров хватает, но мы-то хотим разобраться, что делаем :) Этот пост для тех, кто не обнаружил среди стека технологий, требующихся по заданию, знакомых слов и хочет это исправить)

Пару недель назад я добрался до 30 уровня и наконец получил доступ к тестовому заданию на стажировку. По началу я был в ступоре и просто не знал, с чего начать и что делают все эти спринги и хибернэйты.
Только начав копать, я столкнулся с проблемой: очень много ресурсов и статей подразумевают, что вы уже имеете представление о предметной области. Проще говоря, они слишком заумны для новичков и вместо понимания вызывают реакцию “это слишком сложно!”.

Поэтому ниже я попытаюсь на основе своего пусть и небольшого опыта поделиться удачными ссылками, которые помогли мне получить базовые представления о необходимых технологиях. Те, кто ныл во время обучения на JavaRush, что много надо изучать самому – готовьтесь, тут вас ждёт настоящий ад))

Итак, как подступиться к выполнению задания?
1. Понять, зачем нужны все эти технологии (я бы начал изучение в таком порядке, как указан ниже):
1.1. Maven
Его роль в проекте – создание структуры каталогов вашего вэб-проекта (она стандартизирована) из специального тэмплэйта, называемого “archetype” + подтягивание библиотек в ваш проект (добавление dependency в pom.xml). Кто проходил бонусную задачу про парсинг на основе jsoup – там мы сами ручками скачивали библиотеку из интернета и подцепляли её в идею. Maven же позволяет вам ничего не скачивать, а просто писать в pom.xml, какую библиотеку вы хотите подтянуть и использовать в проекте.

Быстрое объяснение, что делает Maven, в картинках -> тут.

1.2. MySQL.
Это ваша система управления базами данных (СУБД). Каких-то глубоких познаний в SQL и СУБД по заданию не потребуется, тут могу посоветовать для облегчения жизни установить прогу dbForge, которая очень поможет вам при создании БД и работы с ней.

1.3. Spring.
Этот фрэймворк будет ядром вашего вэб-приложения. Он огромный, и его архитектура состоит из многих модулей.

Хорошая новость: для выполнения задания потребуется получить представление лишь о нескольких вещах в Spring: что такое Inversion of Control (IoC) и разобраться с работой Spring MVC (какая должна быть структура каталогов вашего вэб-проекта, кто такой DispatcherServlet, как он взаимодействует с контроллером, вью и моделью и т.д.). Тут особенно не хватало материалов для новичков, где объяснялось бы на пальцах. Но, слава богу, такие материалы нашлись:

Очень просто об IoC, связанности кода, DI (материал излагается в несколько фривольной манере, но зато всё понятно) -> вот тут (ниже на странице листайте к следующим статьям). Далее ищите, что такое @Autowired аннотация.

Spring MVCцикл видеоуроков (первые 11 уроков, каждый в среднем минут 7-10).
Здесь вы найдёте цикл видеоуроков, вообще ОЧЕНЬ рекомендую смотреть уроки этого парня! Несмотря на забавный индусский английский, объясняет всё очень подробно и понятно, с наглядными примерами. Также у него есть уроки и по другим фрэймворкам.

WorkFlow приложения на Spring MVC в картинкахсм. здесь

1.4. Hibernate.
Это фрэймворк для работы с базами данных. Грубо говоря, он позволяет вам вытаскивать информацию из базы данных и тут же встраивать её в объект класса, и наоборот.

Начать изучение можно отсюда (до первых примеров кода)

1.5. Html & CSS.
Чтобы отобразить ваши данные на вэб-страничке, необходимо будет эту страничку создать при помощи HTML и CSS в рамках ваших jsp файлов. Существует много неплохих ресурсов для того чтобы въехать в эту тему.

Лично я изучал XHTML и CSS по этому циклу видеоуроков (понравилось что парень объясняет с юмором, но при этом очень последовательно и логично)



Приведённые выше ссылки дают начальное представление, в процессе ознакомления у вас наверняка появятся новые вопросы. Тут важно вовремя остановиться и:

2. Начинать делать задание
2.1. Посмотрите примеры выполнения задания, в интернете их хватает, и, я полагаю, вы без труда их найдёте. Вы уже изучили основные понятия – осталось ли что-то не ясным в том, как делать задание? Если да, то ищите ответы уже на конкретные вопросы.

2.2. Скачайте бесплатный trial Intellij Idea Ultimate (на 30 дней)! По началу я долго ломал голову, как же делать задание, случайно наткнулся на форуме, что надо скачать Ultimate Edition – без этого вам будет тяжко (community edition не поддерживает JavaEE)

2.3. Создайте шаблон проекта из архетипа Maven (например, maven-archetype-webapp) или из шаблона Spring MVC в Ultimate idea. (если понадобится, потом можно будет добавить поддержку нужного фрэймворка: Add Framework Support в идее).

2.4. Попытайтесь сделать простой вывод сообщения HelloWorld в ваш браузер (передать это сообщение из контроллера на jsp страницу).

2.5. Когда справитесь, наращивайте функционал вашего приложения на основе примеров в интернете: создайте БД, модель, сервисные классы, настройте работу контроллера… И всё обязательно получится!)



Надеюсь, эта статья будет кому-то полезна и сэкономит время на изучение материала.
Если хотите поделиться своими полезными ссылками – буду рад увидеть их в комментариях!

47 комментариев

Kingpin
Спасибо добрый человек!
pro_moscow
А какое задание на эту стажировку? То же самое, которое можно было в beta скачать?
GuitarFactor
Пока задание на стажировку не менялось. Да и мне кажется, не поменяется (разве что список технологий). То задание, которое даётся, позволяет вникнуть в тему на минимально необходимом уровне, не погрязнув в тонкостях. Хорошее задание в общем, на месте разработчиков курса я бы его не менял)
pro_moscow
CrUD и Task Manager на выбор?
GuitarFactor
Да
maximuswork
Отличная статья. Я хоть не добрался еще до 30 уровня, но в голове уже пытаюсь структурировать информацию.
nci
  • nci
  • +4
  • Комментарий отредактирован 2017-02-27 15:33:00 пользователем nci
Вам тогда совет, от заканчивающего стажировку. Параллельно с JR смотрите SQL (MySQL, postgreSQL, Oracle вообщем любую реализацию) и JavaScript (по обоим есть хорошие обучалки).
И да ВАЖНО,
если при очередном открытии набора на стажировку у вас меньше 30 уровня, лучше не стремиться попасть на стажировку прокрутив уровни.
Стажировку вы пройдете, но:
1. Стажировка идет параллельно с курсом JR, очень мало у кого получалось совмещать
2. к задачкам JR и самому курсу навряд ли захотите возвращаться (считайте откроется новое видение куда развиваться)
GuitarFactor
Спасибо за полезные советы!
maximuswork
Спасибо большое за советы. С MySQL и Oracle успел подружиться по долгу службы и параллельному обучению до JR. А вот вот JavaScript даже не знаю откуда начать. Столько там всяких фрайморков. С чего лучше начать подскажите?
nci
С основ. JavaScript core так сказать. Больше наверное не понадобится, не фронтенд же наш хлеб.
Ресурсы: learn.javascript.ru, а лучше: www.w3schools.com/js/default.asp
maximuswork
ООО W3School — знаю, знаю. Спасибо. Будем посмотреть )))))))))
alexeyfrei
Где вы были, когда я впервые открыл тестовое задание :)
GuitarFactor
Я полагаю, что в тот момент я ещё сам не открыл тестовое задание)
ferasinka
Вкратце про IoC и DI: habrahabr.ru/post/321344/
Dimont
  • Dimont
  • +1
  • Комментарий отредактирован 2017-03-15 18:12:37 пользователем Dimont
Спасибо за ссылку. Очень наглядно и увлекательно автор объясняет! :)
bandyto
  • bandyto
  • +1
  • Комментарий отредактирован 2017-02-28 17:41:06 пользователем bandyto
Господа, нужна помощь. Понимаю что вопрос вообще нубский, но всё же.
С самим заданием вроде разобрался. Почитал, посмотрел примеры да что-то сделал.
Однако, при попытке деплоя приложения в tomcat открывается главная страница самого сервера либо же ошибка 404, то бишь не найдено.
Уже пытался по всякому, и в IDE настраивал tomcat, и war-файл кидал в папку webapps самого сервера, всё не получается посмотреть на результат. С чем может быть проблема, подскажите пожалуйста?
P.S. Пустой maven-проект открыть получалось.
Kali
много чего может быть: зависимости не подключены, в настрйках ИДЕ, не прописан путь, переменные окружения не прописаны… да мало ли
Kali
  • Kali
  • 0
эх мне бы этот пост перед моей стажировкой… сколько времени бы сэкономил )
Core
  • Core
  • 0
  • Комментарий отредактирован 2017-03-08 13:23:52 пользователем Core
Кто пробовал разные тулы для MySQL? У меня DbForge не ставится, ибо пользую XP, на которую в свою очередь не ставится NET. framework 4.5.2, являющийся требованием для DbForge. есть альтернативные тулы, но кто-нибудь может посоветовать конкретную? Я прорсто «сварщик ненастоящий» и не пробовал пока ни одну из них, а фигню ставить не хочется

Из этого кто-нибудь что-нибудь узал?
Вот Ссыл Ссылыч
GuitarFactor
Можете попробовать MySQL Workbench. Workbench я никогда не использовал, но насколько мне известно это популярный и надёжный продукт.
Core
  • Core
  • 0
  • Комментарий отредактирован 2017-03-08 14:19:56 пользователем Core
Спасибо.Сел читать про него. Кстати, DbForge имеет русскоязычный интерфейс или только басурманский?
GuitarFactor
у меня русскоязычный dForge
imp
  • imp
  • 0
Workbench отличный продукт, вопрос зачем он, если можно из идеи подключить бд и там с ней работать.
Core
  • Core
  • 0
  • Комментарий отредактирован 2017-03-08 14:48:22 пользователем Core
Ну, я так понял, чтобы удобней было создавать саму бд, чтобы получить наглядность её создания.
То есть речь не о работе с ней используя тул в перспективе, а о её создании. Но я могу неправильно понимать. Я так понял можно спроектировать бд с помощью SQL-команд, используя непосредственно инструменты MySQL, но это более кропотливо, а можно с использованием тулза с наглядным интерфейсом.

Или есть вариант спроектировать бд прямо в Idea? Я понял что из Idea можно только работать с готовой бд, но не создавать её. Растолкуйте, если я не прав: первую ночь только провёл за чтением материала по технологиям из стэка, поэтому могу пока многого не знать и не понимать
zavarnik1
БД создается с помощью SQL запроса неважно откуда, хоть из консоли.
Workbench в данном задании скорее как запасной вариант вьюшки. Посмотреть реальное положение дел в БД. Пока что мы не дошли до использования этого инструмента на полную катушку.
Core
  • Core
  • 0
  • Комментарий отредактирован 2017-03-09 13:02:26 пользователем Core
Ну я так и понял. Может быть выразился несовсем точно. Понятно, что в любом случае бд создаётся через запросы. Просто выглядит по-разному. Спасибо за ответ.
Haart
Вот миникурс по mysql, где и workbench, и внедрение в идею, так что можно оценить, что удобнее…

www.youtube.com/watch?v=7LwOvVPavWA
Core
Спасибо, очень кстати.
Core
  • Core
  • 0
  • Комментарий отредактирован 2017-03-11 14:22:12 пользователем Core
Друзья, подскажите, правильно ли я понял.
Установление связи с базой осуществляется посредством JDBC-драйвера.
Но сама база ведь находится у меня на машине, а не у проверяющего.
Но у него (проверяющего) есть база с таким же именем и паролем (test и root), то есть мой код приведёт к соединению фактически с его базой данных. Тогда правильно ли я понял, что таблицу базы нужно создать(добавить и сконфигурировать корлонки) не вне проекта, а уже в самом проекте после соединения с бд?
Haart
  • Haart
  • 0
  • Комментарий отредактирован 2017-03-11 14:58:52 пользователем Haart
Верно, соединение идет с помощью драйвера.
Вам нужно создать скрипт, который создаст схему(базу), таблицу и заполнит ее, что-бы поверяющий мог оттестировать. Логин и пароль, вроде root root.
Т.е. он берет ваш проект, запускает скрипт, запускает проект и действует.
Core
  • Core
  • 0
  • Комментарий отредактирован 2017-03-11 16:38:35 пользователем Core
Хм, то есть скрипт нужно приложить отдельно?
Значит я не так немного понял. Я понял, что скрипт по созданию базы не нужен: база уже создана на машине проверяющего.
Он запускает проект, в котором есть процесс добавления таблицы в базу и её конфигурации. Ну то есть у него (проверяющего)есть база для тестовых заданий (скрипт по ее созданию не нужен), ему пришло десять решений по заданию, и когда он их запускает, в рамках уже запущенного решения, происходит конфигурация таблицы, то есть все на одной базе, в которую добавляются разные таблицы при запуске решений от разных людей?
Я понял это исходя из слов: «Для упрощения тестирования называйте все свою базу test с логином и паролем root (нам не нужно будет для тестирования создавать кучу лишних и ненужных баз)»

Или все таки нужен отдельно от проекта файлик со скриптом по созданию базы? Вы как делали, если делали. Отдельный файлик?
Haart
Я сам не делал, только буду делать) Говорю, потому что видел как другие делают. А реализация у многих почти одинаковая, — уничтожить базу — если существует, создать базу, создать таблицу, наполнить таблицу.

И да, это отдельный файл…

LJ_
  • LJ_
  • 0
Вдруг кому поможет, но просто отлично описана работа мавен http://www.apache-maven.ru/
До этого читал туториалы на официальном сайте, там так много воды и нудно, и местами не понятно о чем речь.
А тут все супер кратко и сразу явно, что к чему. Еще мне помогли лекции Головача, он тоже очень хорошо объясняет этот в целом не сложный инструмент
Alena
Мне вот это описание Spring MVC понравилось
uraplayer
Сорри за тупой вопрос. Пробовал открыть чужие проекты для стажировки с github, посмотреть что да как, смог запустить только один, после танцев с бубном. В остальных на каждом шагу затык при запуске.
Может кто пояснить по пунктам, как что запускается и в какой последовательности? Какой файл запускать?

Например вот этот проект github.com/andreichernov/CrudAppTry

Использую Intellij Idea Ultimate 2017.3.1
fatfaggy
попробуй почитать тут

начиная со слов «Мы уже почти готовы к тому, чтобы запустить наш проект!»
там я показывал как запустить проект используя томкат.
fatfaggy
кроме того, тебе потом надо будет зайти в настройки артефакта и добавить все либы из правого окошечка в левое.
просто выбираешь все либы в правом окошке, правой кнопкой по ним и выбираешь пункт типа «добавить в WEB-INF/libs» как-то так кароч, ну там разберешься)

после чего можно будет запускать)
uraplayer
Спасибо, твои статьи прочел, все получилось.
Нашел на github еще 6 проектов, все загрузились. Открывал в Idea, просто кнопкой OPEN. Главный затык, как оказалось, в том, что нужно было создать правильную базу данных (назавание базы, колонок тип) и подлючить к проекту.

Но этот проект, так и не запускается github.com/andreichernov/CrudAppTry

HTTP Status 500 – Internal Server Error
Type Exception Report
Message Servlet.init() for servlet [mvc-dispatcher] threw exception
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Заметил, что система подчеркивает красным


Где искать ошибку?
uraplayer
Отвечу сам себе, заменил эту строку на

Все заработало
fatfaggy
значит собралось как-то криво))
вообще, все, что в папочке resources должно было попасть в classpath
не знаю почему не попало)
но если работает — хорошо :)
uraplayer
Idea предлагала создать новый файл application.properties, а создавался он в папке Java, видимо classpath у меня по умолчанию на нее затянут.
fatfaggy
я глянул проект, у него там эта папочка resources не в том месте, где обычно.
она у него внутри папки webapp, а обычно в src/main. поэтому и не подтянулась автоматически.
AleksandrJR
fatfaggy, поясни, пожалуйста, для тугосоображающих — «настройки артефакта и добавить все либы из правого окошечка в левое» — это где находится?
fatfaggy
File -> Project structure…
или Ctrl+Alt+Shift+S
или на кнопочку нажать как на скрине
Project structure button

потом перейти во вкладку артефакт, проверить что артефакт есть (если нет — добавить, нажав на плюсик и выбрав web exploded), а потом в правоме окне из правой его половинки перенести все в левую половинку либо двойным кликом по каждому нужному пункту, либо выбрав все и нажав правой кнопкой мыши и потом выбрав Put into /WEB-INF/lib
Setting artefact
velis
этот проект похоже не доделанный? какая у него стартовая страница? или открывать просто локалхост, то получаем стандартную страницу томката.
fatfaggy
у меня запускался норм. ну после правок)

если открывается страница томката — значит вы возможно как-то не так запускаете :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.