×

Задачки для самообучения, и почему менторство не работает

Предлагаю тем кто изучает Java (это к примеру — можно выбрать любой ваш любимый язык), сделать вот такую задачу

Для будущих enterprise/web Java разработчиков:

Разработать мини-макет веб-приложения, у которого есть элементы секьюрити, база данных с регистрацией пользователей, и взаимодействие со сторонними веб-сервисами.
Подобные задачи встречаются каждый день, смысл этого — оттачивание практических навыков, и практика в реализации собственных архитектурных решений «с нуля»

-Веб приложение состоит из трех страниц
-страница логина
-страница регистрации нового аккаунта
-страница показывающая курсы валют, взятые с какого-нибудь публичного веб-сервиса (на ваше усмотрение)

-страница логина и регистрации доступна всем
-страница с курсами закрыта для неавторизованных пользователей
-после успешного логина, пользователь автоматически редиректится на страницу с курсами
-страница регистрации содержит обычную адресную форму (имя-адрес-телефон-емейл и прочее на ваше усмотрение)

страница с курсами валют — показывает курсы нескольких выбранных валют на текущую дату, и несколько предыдущих
для простоты список можно захардкодить, для сложноты — положить в конфиг
например валюты: (EUR, USD, GBP, NZD, AUD, JPY,
и курсы за последние 10 дней.

приложение должно быть загружено на гитхаб и иметь инструкцию как сбилдить jar/war

в приложении должен быть
-логгинг
-конфиг файл
-юнит тесты

уровень средний — для хранения использовать любую базу данных (hsqldb, mysql, mongodb, etc) . можно и текстовый файл :-) но желательно чтобы приложение не знало что это файл (предусмотреть уровень абстракции от способа хранения)

уровень сложный — для хранения использовать облачный сервис хранения данных. а также предусмотреть конфиг переключающий хранилище с локальной базы данных на облачный сервис

уровень суперсложный — программа должна быть задеплоена на хостинг, чтобы быть доступной по адресу в интернете любому пользователю :
(варианты — Heroku, Digital Ocean, Google App Engine, CloudFoundry, или что сами найдете)

рекомендуемые (но необязательные) технологии — spring mvc, spring boot, spring data
вы можете использовать любые фреймворки которые вам нравятся или какие знаете, главное чтобы все это работало и делало то что написано в спецификации.
красота не требуется, можно в виде топорного html table выводить . если вы тяготеете к бэк-енду , можете ограничиться самым простым веб интерфейсом

веб-сервисы для считывания курсов валют:
openexchangerates.org
currencylayer.com
и там и там поддерживается REST , клиента можно написать на любом языке

много деталей в ТЗ нет, потому что задание творческое :-) любые детали можете додумывать сами. с реальными заказчиками бывает так же — они не всегда точно знают что хотят. «сделайте демку — а мы посмотрим»

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

Варианты с решениями можно кидать в виде ссылок на свой гитхаб.
Могу поревьювить ваш код в качестве менторского опыта на досуге.

Что хотелось бы увидеть
-чистый код, покрытый юнит тестами.
-архитектуру, разделенную на слои.
-хороший стиль ОО-проектирования. принципы SOLID.
-в идеале — работающую программу на облачном хостинге. пригодится для вашего портофолио.

Есть еще на уме задачки :-)

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

1. Написать консольную утилиту для обхода файловой системы рекурсивно.
2. Подключить JDBC, реализовать индексирование файлов и папок.
3. Прикрутить веб-морду для навигации по индексу и поиска файлов в нем.
4. Сделать так чтобы доступ к веб интерфейсу был только после авторизации на странице.
5. Сделать возможным загружать и удалять файлы и папки через веб.
6. Реализовать превьюхи для картинок.
7. Прикрутить аудиопроигрыватель для аудио. Чтобы можно было слушать все что есть на странице как плейлист, начиная выбранного файла.
8. Реализовать превью для видеофайлов (случайный кадр из видео).
9. Кроме базовых атрибутов файлов нужно добавить поддержку метаданных (разрешение, формат, битрейт, длительность, название, артист и т.д. соответственно). Чтобы можно было искать по атрибутам. Например, найти все аудиофайлы в стиле Chillout.
10. Сделать навигацию без перезагрузки страницы чтобы можно было, например, слушать музыку и навигировать по файлам. :)
11. Реализовать интеграцию с last.fm для скробблинга воспроизводимой музыки.
12. Использовать встроенную в браузер базу данных и реализовать синхронизацию индекса. Реализовать «моментальный» поиск.

... и т.д. :)

1. С появлением FileVisitor совсем элементарно

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

Да и в работе лучше тоже не использовать лишний раз
У вас лисп в профайле, а вы такие ужасы пишете... :)

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

я не претендую на всезнание, так что с удовольствием послушаю ваше мнение)

Да забейте, это была шутка же :) В той же теплой ламповой схемке никак без рекурсии. А так да, вы правы.

Не пугайте людей) я с утра сел доки по лиспу читать (я, к сожалению, на нем серьезнее плагинов к акаду ничего не писал)

А гайд кстати топчик господин предложил. У ласта как раз ещё и апиха неприятная, как раз помучатся : )

А вы каждый шаг будете ревьювить?

Чо то не нашел в тексте «почему же менторство не работает»? Вроде заявили это в заголовке.
А так задача хорошая.

оно есть в комментах :-)

У меня есть подобного уровня приложение, но оно совсем про другое (не про валюты), а так почти все есть. Придумывалось и писалось для себя, не как тестовое.
Стек такой: rest бекенд на spring, spring-data, hibernate, jersey. Фронт на react, redux, react-router, immutable.js. Пакуется на мавене в war, деплой в томкат/глассфиш нормальный.

Поревьюете?

Хорошая задача, ничего непосильного не вижу, имхо.
Если ТС, как и обещает, еще и ревьюить присылаемый код будет, а не сольется после 3го письма, то вообще отличная инициатива, что бы тут не говорили.
Интересно было бы через месяцок от ТС увидеть какую-то статистику(сколько прислали, насколько все хорошо/плохо в плане качества).

Спасибо, отличная задача.
Есть комментарии, что слишком сложно, но так это глобальная задача для обучения, а менторство, имхо, как раз и состоит в том, что тебя будут потом тыкать носом что ты сделал не так. Написал — переписал — переписал — переписал — переписал..
Как результат — ученик способный:

а вообще за такое на апворке можно поднять баксов 500.

hint:
Для тех, кто хочет сделать без спринга
findevelop.blogspot.ru/...-spring-security-100.html — Заменяем Spring Security на 100 строк своего кода

query.yahooapis.com/...ltableswithkeys&callback= - текущий курс валют в json, для отладки )

Автор, вы серьёзно?

С таким же успехом вам могут дать задачу собрать самолёт.
С комментариями:
— самолёт должен уметь летать, поворачивать влево и вправо, набирать высоту и снижаться
— в качестве двигателя использовать турбореактивный
— для авионики оборудование Thales
— максимальная дальность полёта — 3.000 км

Варианты с решениями можно кидать в виде адреса своего ангара.

Что хотелось бы увидеть
— Чтобы крылья лепились не с помощью изоленты.
— Все системы самолёта должны быть крайне детально продуманы и качественно реализованы.
— В идеале — летающий самолёт в одной из авиакомпаний. Пригодится для вашего портфолио.

В качестве литературы — почитайте основы аэродинамики.

Авиаконструктора отличает он не-авиаконструктора,

мотивация и способность к самообучению . Если человек не способен найти в гугле как
собрать самолёт или прикрепить двигатель к пилонам,
вряд ли он сможет стать
авиаконструктором.

Новичкам — не читайте этот пост — вредно для карьеры.

Ты путаешь самолет и модель. Это приложение — модель. И очень упрощенная

Ну да, нужно собрать просто маленький самолёт — одномоторный, с дальностью полёта — до 1000 км. Это совсем другое дело.

Такое ощущение, что скоро к джуну требования будут такие же, как и к senior, только без 3-5 лет опыта работы. И, конечно, же, за роллтон в день.

Чтобы собрать даже модель нужны фундаментальные знания и хотя бы базовые навыки. Также и здесь.

Вот пускай и овладевает. Пока в затылок заказчик не дышит.

Такое ощущение, что в джава-среде джуном считают человека умеющего открыть ИДЕ, а сеньором — знающего назначение кнопок.
Программист должен уметь программировать, а джун это обычный программист, только с минимальным опытом.

увы. я собеседования иногда провожу, это боль :-( половина пришедших «синьоров» с 5-летним опытом, не могут правильно написать на листке бумаги простейшее тестовое задание, состоящее буквально из 5-6 строчек кода. и это не сортировка и не поиск в бинарном дереве (оно настолько тривиальное, приводить не буду, но чуть-чуть сложнее чем хелло ворлд).

Нескромный вопрос. Собеседуете кого — наших или европейцев?

Разные, в основном местные, но с Украины тоже бывают

FizzBuzz что-ли? Знатный срач поднялся в интернетах когда автор выложил свою статистику по количеству американских выпускников, которые не смогли написать решение.

Если новичок хочет понимать , что его ждет впереди, то читать и делать он обязан.

Если кто из java начинающих хочет разобраться, стучите в личку — попробуем вместе!

Задача для javascript и тех кто любит математику. Навигация-лайт

1. Есть API предоставляющий карты: Google maps, HERE/Nokia, Bing/microsoft, OpenStreetMaps (OSM), Yandex, Apple maps (с этим не уверен что он открытый) . У большинства из них есть бесплатные версии с какими-то ограничениями, но весьма годные для учебного применения . например, карта может отдаваться в ограниченном разрешении и количестве форматов, и т.д.

2. Есть API поиска маршрутов. у тех же самых провайдеров. Некоторые из них выдают информацию в виде текста ,который можно использовать без карты, и парсить самому.

Задача — написать интерактивное веб-приложение, использующее независимые друг от друга провайдеры карт и маршрутов. Например, на карту от гугля наложить маршрут построенный в HERE и наоборот. Можно сделать выбор провайдера данных в виде конфига, или на странице, на усмотрение.

Страница должна выводить фрагмент карты города(любого) , с центром в координатах (широта-долгота), вводимых в поле ввода.

Пользователь тыкает мышкой в произвольное место на карте, обозначая начало и конец маршрута.
Затем строит маршрут , используя данные от провайдера маршрутов.
Нельзя пользоваться готовыми компонентами (такими которые предоставляют интерактивную карту с маршрутом, как например встраиваемая карта google maps ). Маршрут вы должны рисовать сами, используя API, иначе у вас не получится скрестить вместе данные предоставляемые разными провайдерами. Карту вам придется получать через api как картинку, и рисовать на ней.

Более сложный уровень — наложить на карту траффик (можно вытащить из API google или yandex) и учитывать при выборе маршрута разные критерии оптимизации (по скорости или расстоянию)

Уровень Бог: оформить в виде приложения на андроиде, напилить фич превышающих возможности всех существующих мобильных навигаторов, загрузить на маркет и заработать кучу денег. Мне можно присылать отчисления в виде % за идею :-)

Математика там несложная, на уровне линейного преобразования координат. но готовых компонент, делающих такое, няз, нет. Вам придется придумать алгоритм преобразования экранных координат в географические, и наоборот, т.к. все провайдеры маршрутов работают с географическими координатами.

Маршрут во всех этих API представляет собой по сути массив координат с текстовыми комментариями («поверните налево» и тд) , формат у разных провайдеров конечно разный . большинство апи могут отдавать его в виде json или xml, на выбор

Если вы такое осилите, вы без труда найдете работу в области разработки навигационных систем. Удачи!

Если вы такое осилите, вы без труда найдете работу в области разработки навигационных систем.
Ага, пройдете «на отлично» собеседование и попадете на десктопный проект написанный индусами на джава 1.4 в 2004 году: будите изобретать велосипеды, писать сортировки и учить алгоритмы. Профит!

правда жизни, она такая суровая. целился в космос, а попал в опен спейс

В оригинале фраза звучит куда более многозначительно :)

Задача — написать интерактивное веб-приложение, использующее независимые друг от друга провайдеры карт и маршрутов. Например, на карту от гугля наложить маршрут построенный в HERE и наоборот.
Не знаю про конкретно эти, у некоторых провайдеров это незаконно. Так и написано в правилах, что если используешь наше апи, то рисовать можно только на нашей карте

В коммерческом коде не законно. Для себя можно делать все что угодно

Вроде бы и да. Но зачем, если программист все равно в итоге работает на бизнес за деньги. А такие навыки позволят работать разве что на не очень серьезного отечественного заказчика, которому класть на копирайты.

навык который тут потребуется развить — научиться интегрировать сторонние вебсервисы, а не кинуть кого-то на деньги :-)

Рисовать данные с одного источника, на карте другого, используя как я могу судить из беглого просмотра канвас — это называется «страдать херней», а не интегрировать веб-сервисы. Если в приложении нужна карта — выбирается подходящий провайдер и все делается на его API, а не пишется велосипед, в котором потом нужно много раз находить и исправлять ошибки, тратя жопочасы. А жопочасы можно потратить и на что-то боле важное, работы обычно очень много, в отличие от времени и денег заказчика.

по опыту, полно серьезных неотечественных заказчиков, которым класть на копирайты когда хочется ввести какую-то фичу под капот

ИМХО задачка на Strong джуна, который прошел учебку на одной из топ-5 галер, и год уже работает как-то. Для нулячих входящих в ИТ unreal, почему учебку упомянул — без учебки не всякий миддл сделает.

Может я отстал от времени, или может Java/Spring реально такое болото, но если не лезть в облака это уровень «php за 24 часа». Если миддл такое не сделает — ???

Требования не просто Spring/Hibernate, но еще разумная архитектура, грамотная интеграция и чистый код, покрытый тестами. По моему опыту сделает не каждый.

Это подразумевается. Если человек со званием «миддл» не может сделать вполне прямолинейную задачу на предназначенном для таких задач фреймворке без «учебки» (?) и года работы, то вопросы есть либо к человеку, либо к фреймворку.

“In theory, there is no difference between theory and practice. But, in practice, there is. ” (Jan L. A. van de Snepscheut)

Сделать можно очень быстро, вопрос качества работы и соблюдения норм для понимания и читабельности кода....

Не зрівнюйте пхп з джавою. В джаві набагато складніше все за що її дехто називає overengineered. Там набагато більше абстракцій і вони складніші. Тільки щоб розвернути спрінг проект не бут треба буде надірвати жопу. Та навіть спрінг бут заставить багато вивчити.

Я от коли метався між технологіями пробував різне, так от після джав і сі шарп фреймворків, дока ларавелю виглядає художньою літературою.

К чему я здесь это написал. один человек спрашивал про менторство и про то что хочет быть Java девелопером. я ему задал эту задачку и он слился.
С тем же успехом Вы его могли просто нахер послать.
Разработать мини-макет веб-приложения, у которого есть элементы секьюрити, база данных с регистрацией пользователей, и взаимодействие со сторонними веб-сервисами.
Конечно у вас менторство работать не будет)
Есть еще на уме задачки :-)
Жги)

Ну а что, сортировки пузырьком писать?

Можно алгоритм Карацубы. Можно консольные приложения. Можно коллекции. Можно многопоточность.

это все далеко от продакшн кода. большинство коллекций есть в библиотеках, зачем учить людей изобретать велосипеды. нужно учиться конструировать свое, используя доступные библиотеки как набор деталей Лего. по многопоточности хорошее задание — мини-сервер с поддержкой пула потоков для выполнения запросов.

если уж хочется коллекции, можно сделать то чего нет.
например — очередь приоритетов с ограниченной глубиной (размер фиксированный , но сообщения с высоким приоритетом должны выдавливать те что с низким независимо от того когда они пришли)

А есть такие же интересные задания только больше для front-end?

есть одна на уме, там больше javascript

Заходите на dribbble.com , там этих задачек... На любой вкус.

А сколько времени есть? Если через три недели ссылку на гитхаб скину, будет шанс получить ревью?

Время считайте что не ограничено

Здравствуйте. Вкратце — молодой джун ищет работу, тем временем изнывая без практики (все знания забываются). Еще короче — есть ли у вас задачка для C#/.NET? Спасибо.

На 5000 реквестов в секунду

Молодому джуну можно начать с тренировки умения внимательно читать требования:

Предлагаю тем кто изучает Java (это к примеру — можно выбрать любой ваш любимый язык)

Если вы еще не передумали делать код ревью, то вот ссылка github.com/Rozgonov/KursValut
это моя вторая программа, пишу код с октября.

я уже понял, это время на ревью неограниченно. хоть бы сказали, что увидели сообщение, но времени нет, или бегло посмотрели, и не хотите в г-но коде ковыряться.
Зачем было создавать топик, порочащий учеников, если ментор не может написать в ответ несколько слов типа «сообщение увидел, рассмотрю, когда будет время»? это же элементарная вежливость, епт.

сейчас набегут джуны и начнут требовать денег за такую работу

сейчас набегут «работодатели» из сша, что предлагают такую работу делать бесплатно на ios. а вообще за такое на апворке можно поднять баксов 500.

нынче модный вариант читерства — человеку дают тестовое задание оффлайн. он нанимает на апворке индусов которые делают за него, а потом выдает за свое

А в чем читерство? Около 80% галлер работают именно так: взяли на апворке → спустили на гребцов → подняли профит.

Как же оно проканает. Он по коду ничего ответить не сможет.

Как же оно проканает. Он по коду ничего ответить не сможет.
Я бы добавил, что по тому коду вообще никто ничего ответить не сможет. Даже авторы. )
А что касается раздела
Что хотелось бы увидеть
, то это только если сильно повезет и индусы закопипастят полностью чье-то готовое решение.

Отличный выбор я считаю. Простая идея и возможность коснуться многих компонентов в процессе работы.

Підписатись на коментарі