GuitarFactor
30 уровень
Санкт-Петербург

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

Пост из группы Архив info.javarush.ru
3272 участников
Хочу поделиться с вами полезными ссылками, хинтами и советами, которые помогут при выполнении тестового задания на стажировку в реальный проект на 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. Когда справитесь, наращивайте функционал вашего приложения на основе примеров в интернете: создайте БД, модель, сервисные классы, настройте работу контроллера... И всё обязательно получится!)
Надеюсь, эта статья будет кому-то полезна и сэкономит время на изучение материала. Если хотите поделиться своими полезными ссылками – буду рад увидеть их в комментариях!
Комментарии (48)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизироваться
Петр Лукашев 36 уровень
10 июня, 10:10
Кто-нибудь моет подсказать, в чем проблема? В файле web.xml добавляю конфигурацию dispatcherservlet: <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> Но вначале у меня вот это идея отображала красным:web.servlet.DispatcherServlet, потом подключил зависимость <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.0.6.RELEASE</version> </dependency>, п после этого слово web стало синим, но вот это все равно красное, servlet.DispatcherServlet т.е. я так понял, что пакет web нашла, но класс DispatcherServlet все равно не находит(
uraplayer 37 уровень, Москва
27 января, 17:55
Сорри за тупой вопрос. Пробовал открыть чужие проекты для стажировки с github, посмотреть что да как, смог запустить только один, после танцев с бубном. В остальных на каждом шагу затык при запуске.
Может кто пояснить по пунктам, как что запускается и в какой последовательности? Какой файл запускать?

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

Использую Intellij Idea Ultimate 2017.3.1
fatfaggy 26 уровень, Киев
27 января, 21:25
попробуй почитать тут

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

после чего можно будет запускать)
uraplayer 37 уровень, Москва
29 января, 18:51
Спасибо, твои статьи прочел, все получилось.
Нашел на 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 37 уровень, Москва
29 января, 18:58
Отвечу сам себе, заменил эту строку на

Все заработало
fatfaggy 26 уровень, Киев
29 января, 20:24
значит собралось как-то криво))
вообще, все, что в папочке resources должно было попасть в classpath
не знаю почему не попало)
но если работает — хорошо :)
uraplayer 37 уровень, Москва
29 января, 21:25
Idea предлагала создать новый файл application.properties, а создавался он в папке Java, видимо classpath у меня по умолчанию на нее затянут.
fatfaggy 26 уровень, Киев
29 января, 22:48
я глянул проект, у него там эта папочка resources не в том месте, где обычно.
она у него внутри папки webapp, а обычно в src/main. поэтому и не подтянулась автоматически.
AleksandrJR 40 уровень, Новосибирск
12 февраля, 19:06
fatfaggy, поясни, пожалуйста, для тугосоображающих — «настройки артефакта и добавить все либы из правого окошечка в левое» — это где находится?
fatfaggy 26 уровень, Киев
12 февраля, 20:14
File -> Project structure…
или Ctrl+Alt+Shift+S
или на кнопочку нажать как на скрине
Project structure button

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

если открывается страница томката — значит вы возможно как-то не так запускаете :)
Alena 35 уровень, Минск
3 июня 2017, 11:15
Мне вот это описание Spring MVC понравилось
LJ_ 40 уровень, Екатеринбург
15 апреля 2017, 08:13
Вдруг кому поможет, но просто отлично описана работа мавен http://www.apache-maven.ru/
До этого читал туториалы на официальном сайте, там так много воды и нудно, и местами не понятно о чем речь.
А тут все супер кратко и сразу явно, что к чему. Еще мне помогли лекции Головача, он тоже очень хорошо объясняет этот в целом не сложный инструмент
Core 35 уровень, Екатеринбург
11 марта 2017, 14:22
Друзья, подскажите, правильно ли я понял.
Установление связи с базой осуществляется посредством JDBC-драйвера.
Но сама база ведь находится у меня на машине, а не у проверяющего.
Но у него (проверяющего) есть база с таким же именем и паролем (test и root), то есть мой код приведёт к соединению фактически с его базой данных. Тогда правильно ли я понял, что таблицу базы нужно создать(добавить и сконфигурировать корлонки) не вне проекта, а уже в самом проекте после соединения с бд?
Haart 30 уровень
11 марта 2017, 14:58
Верно, соединение идет с помощью драйвера.
Вам нужно создать скрипт, который создаст схему(базу), таблицу и заполнит ее, что-бы поверяющий мог оттестировать. Логин и пароль, вроде root root.
Т.е. он берет ваш проект, запускает скрипт, запускает проект и действует.
Core 35 уровень, Екатеринбург
11 марта 2017, 16:38
Хм, то есть скрипт нужно приложить отдельно?
Значит я не так немного понял. Я понял, что скрипт по созданию базы не нужен: база уже создана на машине проверяющего.
Он запускает проект, в котором есть процесс добавления таблицы в базу и её конфигурации. Ну то есть у него (проверяющего)есть база для тестовых заданий (скрипт по ее созданию не нужен), ему пришло десять решений по заданию, и когда он их запускает, в рамках уже запущенного решения, происходит конфигурация таблицы, то есть все на одной базе, в которую добавляются разные таблицы при запуске решений от разных людей?
Я понял это исходя из слов: «Для упрощения тестирования называйте все свою базу test с логином и паролем root (нам не нужно будет для тестирования создавать кучу лишних и ненужных баз)»

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

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

imp 31 уровень, Москва
8 марта 2017, 14:34
Workbench отличный продукт, вопрос зачем он, если можно из идеи подключить бд и там с ней работать.
Core 35 уровень, Екатеринбург
8 марта 2017, 14:48
Ну, я так понял, чтобы удобней было создавать саму бд, чтобы получить наглядность её создания.
То есть речь не о работе с ней используя тул в перспективе, а о её создании. Но я могу неправильно понимать. Я так понял можно спроектировать бд с помощью SQL-команд, используя непосредственно инструменты MySQL, но это более кропотливо, а можно с использованием тулза с наглядным интерфейсом.

Или есть вариант спроектировать бд прямо в Idea? Я понял что из Idea можно только работать с готовой бд, но не создавать её. Растолкуйте, если я не прав: первую ночь только провёл за чтением материала по технологиям из стэка, поэтому могу пока многого не знать и не понимать
zavarnik1 37 уровень
9 марта 2017, 01:29
БД создается с помощью SQL запроса неважно откуда, хоть из консоли.
Workbench в данном задании скорее как запасной вариант вьюшки. Посмотреть реальное положение дел в БД. Пока что мы не дошли до использования этого инструмента на полную катушку.
Haart 30 уровень
9 марта 2017, 02:51
Вот миникурс по mysql, где и workbench, и внедрение в идею, так что можно оценить, что удобнее…

www.youtube.com/watch?v=7LwOvVPavWA
Core 35 уровень, Екатеринбург
9 марта 2017, 13:02
Ну я так и понял. Может быть выразился несовсем точно. Понятно, что в любом случае бд создаётся через запросы. Просто выглядит по-разному. Спасибо за ответ.
Core 35 уровень, Екатеринбург
9 марта 2017, 13:03
Спасибо, очень кстати.
Core 35 уровень, Екатеринбург
8 марта 2017, 13:23
Кто пробовал разные тулы для MySQL? У меня DbForge не ставится, ибо пользую XP, на которую в свою очередь не ставится NET. framework 4.5.2, являющийся требованием для DbForge. есть альтернативные тулы, но кто-нибудь может посоветовать конкретную? Я прорсто «сварщик ненастоящий» и не пробовал пока ни одну из них, а фигню ставить не хочется

Из этого кто-нибудь что-нибудь узал?
Вот Ссыл Ссылыч
GuitarFactor 30 уровень, Санкт-Петербург
8 марта 2017, 13:24
Можете попробовать MySQL Workbench. Workbench я никогда не использовал, но насколько мне известно это популярный и надёжный продукт.
Core 35 уровень, Екатеринбург
8 марта 2017, 14:19
Спасибо.Сел читать про него. Кстати, DbForge имеет русскоязычный интерфейс или только басурманский?
GuitarFactor 30 уровень, Санкт-Петербург
8 марта 2017, 15:34
у меня русскоязычный dForge
32xlevel 37 уровень
6 марта 2017, 20:51
Kali 30 уровень, Киев
28 февраля 2017, 19:51
эх мне бы этот пост перед моей стажировкой… сколько времени бы сэкономил )
bandyto 31 уровень
28 февраля 2017, 17:41
Господа, нужна помощь. Понимаю что вопрос вообще нубский, но всё же.
С самим заданием вроде разобрался. Почитал, посмотрел примеры да что-то сделал.
Однако, при попытке деплоя приложения в tomcat открывается главная страница самого сервера либо же ошибка 404, то бишь не найдено.
Уже пытался по всякому, и в IDE настраивал tomcat, и war-файл кидал в папку webapps самого сервера, всё не получается посмотреть на результат. С чем может быть проблема, подскажите пожалуйста?
P.S. Пустой maven-проект открыть получалось.
Kali 30 уровень, Киев
28 февраля 2017, 19:50
много чего может быть: зависимости не подключены, в настрйках ИДЕ, не прописан путь, переменные окружения не прописаны… да мало ли