Дайте тестовое задание

💡 Усі статті, обговорення, новини для початківців — в одному місці. Приєднуйтесь до Junior спільноти!

Здравствуйте,

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

Короче говоря, обращаюсь я к специалистам:

Подскажите такой «Привет всем!», чтоб компании падали, и в штабеля укладывались.

Вот, мне кажется, неплохой хеллоуворлд:

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

Вроде и просто, и полезно: нужно работать с бинарным, с мелко-индейским форматами, а также уметь читать спецификацию.

Одобряете?

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному1
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

Я уже столько тестовых переделал — не сосчитать. По ним и учусь) Я дизайнер, если что. Но заметил такое, что обычно дают дичь, которую в портфолио не положить. Кстати, сейчас жду очередное тестовое...)

Тружусь теперь в конторке)

Коментар порушує правила спільноти і видалений модераторами.

о! уже давно мне не присылали, и тут вот пришло. Отвечаю:
«Евгения, прочитала ваше письмо.Готова выполнить тестовое задание по предоплате 100 грн за час. Если считать 2 дня по 4 часа — это 800 грн. Просьба сообщить о готовности к предоплате, тогда я вышлю вам свои реквизиты. В случае выполнения задания ранее заданного срока остаток возвращаю.»
...мне хватило до 10ти выполненных заданий без ответов, приветов и возврата времени.
Основная ценность в том,что я не разглашаю конфиденциальную информацию третьим лицам. Поэтому умолчу, для каких контор я выполняла тестовые задания, вряд ли они еще существуют. Для кого это жестко — попробуйте прожить год на 500 у.е. в месяц и вы поймете.

Я позволю себе тонко вам намекнуть: вы себя переоцениваете и требуете того, что не принято в отрасли. Вы не являетесь востребованным экспертом с мировым именем чтобы требовать ПРЕДОПЛАТУ за выполнение ТЕСТОВЫХ, а не реальных задач.

Для кого это жестко — попробуйте прожить год на 500 у.е. в месяц и вы поймете.
Это ваши проблемы, хотите больше — работайте в бодишопе или находите себе заказы на фрилансе с суммами, которые вас устроят.

то я себя недооцениваю( это когда писала, что поработаю 2 недели за свободное вознаграждение-те коменты удалили), то переоцениваю!!! сейчас для меня решается мегаважный вопрос - надо ли мне это вообще? Да, очень ценю полученное образование и опыт, но вдруг именно для меня QA- это уже мертвая лошадь???

Тоже будете переходить в лоно современного искусства как и персонаж, так и не ставший тестером, и повествующий о данном переходе в героическом ключе в соседней теме?

Думаю, никто из кандидатов в джуниоры не станет спорить, что тестовые задания — это хорошо.
Джуны может и не будут, а вот более опытные люди довольно часто против тестовых заданий (тех которые дают сделать дома)
Какой еще у человека без опыта может быть вариант, как показать свои шансы на компетентность?
От тут идейная проблема. На мой взгляд, задача собеседование — понять какую пользу человек может принести компании и за какую цену, у претендента такая же задача — понять какую пользу может принести ему эта компания (особенно если это джун, не хотелось бы попасть со старта на правку ХМЛя).
Написать программу, которая считывает простой zip-файл, и выводит список размеров файлов в архиве.
Вроде и просто, и полезно: нужно работать с бинарным, с мелко-индейским форматами, а также уметь читать спецификацию.
Одобряете?
Нет. Ибо правильно решение такой зачади вбить в поисковик: «%язык_программирования% read zip file». Так решается первая часть задачи. Вторая это обход дерева, ее можно дать решить прямо на собеседовании.
Есть, конечно же, и исключение: ваша контора занимается разработкой архиватора и берут человека как раз в команду по разработке самого ядренного ядра. Но такой сценарий не так уж и част в реальной жизни.
Есть, конечно же, и исключение
Но такой сценарий не так уж и част в реальной жизни.
Вот поскольку компании разные — и разнятся поэтому подходы к собеседованию и тестовому заданию.

Обход дерева? Смело.

Это задача не на zip, а на [простой и хорошо документированный] формат данных.

Обход дерева? Смело.
Чего тут смелого? Я подобные задачи даю на собеседовании написать за 5-10 минут.
Это задача не на zip, а на [простой и хорошо документированный] формат данных.
К которому уже есть готовые парсеры. И реализовывать свой — это банальный велосипедизм.

Смело писать про обход дерева даже не глянув на формат. Или Вы решили, что без распаковки архива на размеры файлов смотреть — не комильфо?

банальный велосипедизм
Вы это «Поддержал: Gabriel Angelos» расскажите, с его форумом.

Задача элементарная, на понимание. Теоретически, с подсказками, ее и на собеседовании сделать можно за час.

Или Вы решили, что без распаковки архива на размеры файлов смотреть — не комильфо?
Не знаю, буду ли я распаковывать или нет. Есть стандартное решение (скорее всего распаковки не будет):
docs.oracle.com/...emprovider.html
Которое сэкономит кучу времени. Так вот программирование это задача оптимизации не только по времени проца, но и по времени программиста. И то что вы будете писать «за час», решается за 1-5 минут :)
Теоретически, с подсказками, ее и на собеседовании сделать можно за час.
Сударь — теоретик? Или и правду решал подобную задачу за 1 час, на бумажке, под усталыми взглядами интервьюеров?
Даже если и за час, оно того не стоит, за это время можно понять человека куда лучше задавая вопросы, а на час можно придумать задачу и по интереснее.

Задача:
1. Найти в zip-файле запись end-of-central-directory (известно, что она находится в конце файла, известен ее примерный размер, известно, что она начинается с известной signature).
2. Прочитать эту запись (известного формата), вычитать из нее количество файлов в архиве и точку в файле, с которой начинается список файлов.
3. Прочитать этот список файлов, вычитывая из каждой записи (известного формата) только размер файла.

Сложная задача? Узкоспецифическая задача?

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

Но специалистам виднее...

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

Тоже всегда путал кстати. И буду путать.

"For as to what we have heard you affirm, that there are other kingdoms and states in the world inhabited by human creatures as large as yourself, our philosophers are in much doubt, and would rather conjecture that you dropped from the moon, or one of the stars; because it is certain, that a hundred mortals of your bulk would in a short time destroy all the fruits and cattle of his majesty’s dominions: besides, our histories of six thousand moons make no mention of any other regions than the two great empires of Lilliput and Blefuscu. Which two mighty powers have, as I was going to tell you, been engaged in a most obstinate war for six-and-thirty moons past. It began upon the following occasion. It is allowed on all hands, that the primitive way of breaking eggs, before we eat them, was upon the larger end; but his present majesty’s grandfather, while he was a boy, going to eat an egg, and breaking it according to the ancient practice, happened to cut one of his fingers. Whereupon the emperor his father published an edict, commanding all his subjects, upon great penalties, to break the smaller end of their eggs. The people so highly resented this law, that our histories tell us, there have been six rebellions raised on that account; wherein one emperor lost his life, and another his crown. These civil commotions were constantly fomented by the monarchs of Blefuscu; and when they were quelled, the exiles always fled for refuge to that empire. It is computed that eleven thousand persons have at several times suffered death, rather than submit to break their eggs at the smaller end. Many hundred large volumes have been published upon this controversy: but the books of the Big-endians have been long forbidden, and the whole party rendered incapable by law of holding employments. During the course of these troubles, the emperors of Blefusca did frequently expostulate by their ambassadors, accusing us of making a schism in religion, by offending against a fundamental doctrine of our great prophet Lustrog, in the fifty-fourth chapter of the Blundecral (which is their Alcoran). This, however, is thought to be a mere strain upon the text; for the words are these: ‘that all true believers break their eggs at the convenient end.’ And which is the convenient end, seems, in my humble opinion to be left to every man’s conscience, or at least in the power of the chief magistrate to determine. Now, the Big-endian exiles have found so much credit in the emperor of Blefuscu’s court, and so much private assistance and encouragement from their party here at home, that a bloody war has been carried on between the two empires for six-and-thirty moons, with various success; during which time we have lost forty capital ships, and a much a greater number of smaller vessels, together with thirty thousand of our best seamen and soldiers; and the damage received by the enemy is reckoned to be somewhat greater than ours. However, they have now equipped a numerous fleet, and are just preparing to make a descent upon us; and his imperial majesty, placing great confidence in your valour and strength, has commanded me to lay this account of his affairs before you."

www.gutenberg.org/...829-h/829-h.htm

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

Главное что нужно от джуниора — чтоб соображал, чтоб не ленился и быстро учился. Тестовым заданием это проверить невозможно.
А как в вашей конторе это проверяют?
И как бы вы сами проверили?

В нашей джуниоров просто не берут.
Но если бы пришлось собеседовать, то точно так же как и остальных, с поправкой на малый/отсутствие опыта работы: вопросы на знание языка и предметной области; небольшая задачка или задачки типа «запрограммировать на листочке»; вопросы о предыдущих проектах (для джуна — что вообще делал, кроме лаб в универе).

Тестовым заданием это проверить невозможно.
Ну почему же? У меня вот лежит документ от ненашей компании с заголовком «тестовое задание», в котором перечислены требования к полноценному проекту, пусть и маленькому, с технической документацией в UML и кратким руководством пользователя, встроенным в программу, включительно. Предмет обсуждения: они смущены количеством кандидатов — хорошая скандинавская страна с требованием работника непременно онсайт и с лояльным иммиграционным законодательством тут же набирает несметные толпы лиц арабской и азиатской национальности на любую вакансию с подходящими по смыслу буквами — но в то же время выхлоп на протяжении уже почти года — нулевой. Причем многие и очень многие из них успешно пробиваются через британского рекрутера (вроде местный не индус) и очень многие старательно пытаются делать это задание. В результате не только выхлоп нулевой, но еще и работа по проверке результатов ведется нешуточная.

Вот, выбросило меня на европейские рынки — пытаюсь понять, как же они там живут, какие традиции, и чего вообще хотят. Такое ощущение, что все там — непременно Линуксы и Страуструпы и ищут себе в команду (команды к слову весьма успешные во всех отношениях) непременно таких же основательно поведенных на компьютере гиков. По деньгам, кстати, получается после налогов может всего чуть больше чем в Украине и они об этом уже знают. Интересно, почему у нас наплыва индусов еще нет?

имхо, техническое задание — оно показывает в первую очередь самого заказчика. Не могу найти, но было на хабре пример техзадания из Долины — вторая часть была написать простую программу для маршрутного компьютера для велосипеда с прерываниями все дела. Очень легковесная и красивая вещица буквально на пару-другую функций и понимание о чем вообще речь. Причем _хорошее_ понимание. Причем также хорошо видно, что понимание есть и со стороны заказчика/работодателя. А задачки уровня хакатона или скажем как в кино про Гугл огромную толпу студентов гоняли то ли все лето, то ли только несколько недель, отобрав при этом целых 6-7 штук — оно красиво и, видимо, Гугл может себе такое позволить, но...

ЗЫ: звыняйтэ за мнокабукав.

При желании и мало-мальском понимании найти весьма приличные «хелло-ворды для раскачки скиллов» не представляет особого труда.

habrahabr.ru/...ab/blog/147684

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

Хотя лично я не очень люблю «заочные задания». И дело даже не в недоверии. Для меня очень важен процесс мышления человека. Ведь результат можно поправить куда быстрее, чем вправить мозги.

Вы сторонник того, что кандидату надо давать тестовое задание и смотреть как он его выполняет?

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

Talk is cheap, в моей практике было двое людей, которые больше звездели, хоть и относительно по делу, нежели выдавали продукт. Поэтому это тоже не панацея.

в моей практике было двое людей, которые великолепно могли программировать... но не долго. Так что любая более-менее длительная задача растягивалась на неопределенное время. Но мелкие делали на «раз-два».

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

Так что любая более-менее длительная задача растягивалась на неопределенное время. Но мелкие делали на «раз-два».
А вот это как раз можно выяснить на собеседовании.

Дать задачку размером >40человеко-часов?

Нет. На собеседовании а не на решении тестовой задачи.

Подскажите как — реально интересно.

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

Да, сплю и вижу как девелопер кодил и вслух рассказывает свои рассуждения :)))

Да, сплю и вижу как девелопер кодил и вслух рассказывает свои рассуждения :)))
От поэтому надо давать небольшие задания «на бумажке» во время собеседования. Если сам не рассказывает (так будет скорее всего), то надо начать разговор. Если наладить контакт не получается, то уже не так и важно сделал человек задание правильно или нет.

Шото я вас не понимаю.
Вы готовы принять балабола-теоретика, который делает кучу ошибок и не принять нормального девелопера, который отлично сделал задание?

Все зависит от человека, а точнее от человека-начальника. По классификации Михаила Литвака есть три вида руководителей: трудоголики, культуристы и алкоголики.

Вы готовы принять балабола-теоретика, который делает кучу ошибок и не принять нормального девелопера, который отлично сделал задание?
:)
Факт № 1. Ошибки допускают все.
Исходя из факта № 1, важно понимать как человек умеет исправлять ошибки.
.
Так же вы основываетесь на ошибочном утверждении что тестовое задание помогает найти «нормального разработчика». Тестовой задание не поможет найти «нормального разработчика», а лишь отсеет некоторую массу, __часть__ из которой низкого уровня.
Еще одно утверждение, которое вы сами придумали:
который делает кучу ошибок
Если человек делает таки кучу ошибок, то тут скорее лесом чем брать на работу. А вот сколько это «куча» — это уже субъективный момент.
.
И еще один важный момент:
Если наладить контакт не получается, то уже не так и важно сделал человек задание правильно или нет.
Вам вмести работать, если человек не вольется в коллектив, если с ним сложно общаться — это довольно большая проблема.
Вам вмести работать, если человек не вольется в коллектив, если с ним сложно общаться — это довольно большая проблема.
Не все программисты проявляют себя «душой компании» сразу на собеседовании, но отлично делают свое дело. Возможно через 1-2 недели он будет отлично работать, особенно если сделал тестовое задание.

А если кандидат наплел «с три короба» и ничего не умеет на работе, то за него вынуждены работать другие люди, пока он попивает кофеек и болтает в курилке.

Тестовой задание не поможет найти «нормального разработчика», а лишь отсеет некоторую массу, __часть__ из которой низкого уровня.
Не все middle-ы способны написать алгоритм прохождения по любому дереву, а вы говорите....
А некоторые "senior«-ы ужасаются увидев ClassCastException на 3-й день работы.
Если человек делает таки кучу ошибок, то тут скорее лесом чем брать на работу. А вот сколько это «куча» — это уже субъективный момент.
Задание — создать Connection к базе по JDBC и прочитать данные. Если в 20 строках девелопер делает 10+ ошибок — это уже куча!
Если 1-2 на уровне пропустил ; то не куча.
Не все программисты проявляют себя «душой компании» сразу на собеседовании, но отлично делают свое дело.
А не надо быть «душой компании», речь о __минимальном уровне__. Если человек на собеседовании не хочет говорить даже по задаче, то это уже проблема.
А если кандидат наплел «с три короба» и ничего не умеет на работе
То с большой вероятностью:
Не все middle-ы способны написать алгоритм прохождения по любому дереву
Умение общаться __должно дополнять__ навыки программирования, но при этом коммуникабельность — все еще необходимый навык/свойство.
.
Задание — создать Connection к базе по JDBC и прочитать данные. Если в 20 строках девелопер делает 10+ ошибок — это уже куча!
Я бы такое собеседование завалил, потому что не писал такой код уже года 3, а за всю жизнь писал его наверное раз 5. :)
И что вы собрались проверить такой задачей? Сможет ли человек сделать через JDBC запрос? И он у вас будет работать через голый JDBC? Так можно просто спросить устно, что вам сэкономит время, ибо отчет будет: «драйвер, конекшн, стайтмент, ресултСет, переложить данные закрыть все», и займет такой ответ 5-20 секунд.
И что вы собрались проверить такой задачей? Сможет ли человек сделать через JDBC запрос?
ОК, допустим эту задачу снимаем по вашему желанию.

Тогда задачи посчитать n-е число Фибоначчи, сбалансировать дерево, и (не может быть) отсортировать массив несколькими способами. Рассказать подробно как работает любая реализация hash-функции и написать свою неоптимальную.
С такими заданиями вы справитесь?

n-е число Фибоначчи, сбалансировать дерево, и (не может быть) отсортировать массив несколькими способами.
Интересная работа у вас, аднака: выгребать данные голым ДжДБС и обрабатывать их школьными задачками :)
Кстати, а вы сами решали подобные задачки?
Найти одно из чисел Фибоначчи — это задачка одного уровня, тут особо-то и ошибаться негде.
Сбалансировать дерево — тут уже есть где ошибаться (особенно если решаешь на ходу, а не заученный ответ).
Реализовать сортировку — это задача чисто не эрудицию, ибо в большинстве случаев надо знать только стд вызов и понимать что такое вычислительная сложность.
Рассказать подробно как работает любая реализация hash-функции
Любая — это надо помнить все несколько десятков или хотя бы одну? :)
Ваша постановку вопроса нас подводит еще к одному важному моменту:
проводить собеседование надо уметь, а не просто задавать вопросы, которые вам задавал препод на прошлом семинаре по теории алгоритмов :)
.
С такими заданиями вы справитесь?
А я что-то пропустил в ответе:
«драйвер, конекшн, стайтмент, ресултСет, переложить данные закрыть все»
кроме запятой?
Интересная работа у вас, аднака: выгребать данные голым ДжДБС и обрабатывать их школьными задачками :)
Ну а шо, не все же время клепать CRUD.
Кстати, а вы сами решали подобные задачки?
Решал и сейчас решаю для себя, чтобы поддерживать мозги в тонусе.
Найти одно из чисел Фибоначчи — это задачка одного уровня, тут особо-то и ошибаться негде.
Многие кандидаты заваливаются уже на 50+ числе Фибоначчи, их программа просто висит и непонятно когда выдаст результат.
Любая — это надо помнить все несколько десятков или хотя бы одну? :)
Хотя бы одну — приблизительный алгоритм и способность написать свою отличную от return 42;
проводить собеседование надо уметь, а не просто задавать вопросы, которые вам задавал препод на прошлом семинаре по теории алгоритмов :)
Поинтересуйтесь как проводятся собеседования в Google, Microsoft, Apple, Yahoo. Везде присутствуют задачки на алгоритмы/структуры данных. Если наши программисты мнят себя не хуже американских, почему они отказываются от таких задач?
А я что-то пропустил в ответе:
«драйвер, конекшн, стайтмент, ресултСет, переложить данные закрыть все»
кроме запятой?
Не помешало бы еще немного кода написать.
Многие кандидаты заваливаются уже на 50+ числе Фибоначчи, их программа просто висит и непонятно когда выдаст результат.
Но вы то понмите формулу (которая там с корнями или типа того) на память и это так важно чтобы и кандидат ее помнил :)
Хотя бы одну — приблизительный алгоритм и способность написать свою отличную от return 42;
Вы вообще понимаете что разрабатывать алгоритмы хеширования — это математика, которая имеет мало общего с прикладным программированием. С таким же успехом можно попросить интегралы считать или решать дифуры.
Поинтересуйтесь как проводятся собеседования в Google, Microsoft, Apple, Yahoo.
В гугглах знают что «любая реализация» — это всеобщность, а «хоть одна» — это существование. :)
Кстати, не слышал чтобы там спрашивали закодить известный алгоритм. Но могут спросить задачу которая к таковому сводится, и тут ценят не умение его реализовать, а тот факт что человек свел задачу к данному стд решению.
.
А теперь серьездно:
Не помешало бы еще немного кода написать.
Зачем? Вы программируете в редакторе без автокомплита? Что именно должен показать код (запроса через ДжДБЦ), чего не показывает мой ответ.
Но вы то понмите формулу (которая там с корнями или типа того) на память и это так важно чтобы и кандидат ее помнил :)
Формула достаточно быстро выводится на бумаге — особенно если был курс дискретки в вузе.

Для вычисления чисел Фибоначчи используется детерминированный рекурсивный алгоритм и стохастическими решениями тут и не пахнет.
«Садись, два!» ©

wiki

F(n) — ближайшее к золотое-сечение-в-степени-n-разделить-на-корень-5 целое.

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

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

расскажите преимущества/недостатки рекурсивного алгоритма перед циклическим.

с точки зрения JVM
преимущества:
легче реализовать и понять.
недостатки:
на 15к числе Фибоначчи вылетает StackOverFlowError и сваливает JVM. собственно стек закончился.

Циклический слегка тяжелее понять, но в нем ограничение — память, которую можно нарастить, а стек — низзя.

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

Зачем? Для вычисления чисел Фибоначчи стек не нужен. Там мизер памяти требуется.

У вашей реализации jvm проблемы с пониманием циклов? :)

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

P.S. Кстати, а как вы циклом реализовать хотите, чтоб оно память жрало? Записывать все в массив?

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

Еще можно рекурсию устроить. Чтобы быстрее память жрать.
...
Есть простая формула для энного члена.
Есть возможность считать подряд с 1го по энный, используя 2-3 переменных.
Можно устроить хитрую рекурсию, символически, по сути то же самое, что и предыдущий вариант.
Массив то зачем?

Эт у Ангела Гавриила спрашивать нужно — его идея про проблемы с памятью. А Павел просто растерялся с вариантами...

да с рекурсией то понятно, с ней любой дурак может память жрать. А вот так считать энное число циклом, чтоб память жрать — для этого надо быть как минимум Джава мидлом :)

P.S. a[i+1] = a[i]+a[i-1] — память жрать будет, хоть и медленно.

Зачем целый массив, если достаточно 2(3) переменные?

чтобы есть память :) Я же говорю — как её есть по другому — не знаю. не ну можно просто выделять кусок на каждую итерацию — но это совсем тупо.

Кстати (прищурившись) прикидываю, что даже заведя массив в целях посрамить индусов извилистостью кода, всю память удастся сожрать на весьма астрономических значениях, врятли имеющих какое-либо применение в народном хозяйстве. Пускай каждый элемент вектора займет 128бит или 16 байт — для проблем даже на мобилках с 60-80Мб юзабельного ОЗУ предельные значения уйдут за 5млн, а для ПК и серверов с их 4Гб+ и свопом так и вообще за четверть ярда.

Вы так вкусно спорите, что аж сам гугланул чтобы не ошибиться в своей памяти.
Где немедленно на вики учебнике и нашел набор из трех идиотских решений и одного более-менее нормального с парой переменных для хранения предыдущих чисел.
Честно говоря надо обладать нехилой нездоровой фантазией чтобы придумать рекурсивное решение и массив. И быть реальным задротом-математиком чтобы веселиться с матрицами (хотя визуально матричное решение на больших числах будет эффективнее простого за счет меньшего кол-ва проходов, так что красивее всего было бы их объединить по вычисленному порогу эффективности для конкретной системы ± лапоть).

Прошить массив значений в процессор по примеру синуса и не выделываться)

Кстати по привычке опечалился таки что:
1. распараллелить не выйдет
2. запихать в сопроцессор тоже не выйдет
3. видеокарта не поможет
4. оптимизировать вообще нечего...

рассчитать заранее как радужные таблицы и зашить куда нибудь в энергонезависмую память :)

легче реализовать и понять
Не соглашусь
элементы числовой последовательности в которой каждое последующее число равно сумме двух предыдущих чисел
© Википедия.
Ну блин, это же практически готовый итеративный алгоритм процитирован! Сложил два числа, затем первое заменил вторым, на место второго — сумма, перешел на следующую итерацию.
А вот как это написать через жопу рекурсивно — еще нужно подумать. Если джун впитал рекурсивное решение вместе с молоком альма-матер, пока ему объясняли понятие рекурсии — это еще понять можно. Я не вижу других причин по которым рекусивное решение очевидней итеративного.

Все просто: в условии задачи не определение через 1, 1, 2, 3, 5, ... а F(n)=F(n-1) +F(n-2) — и если кто не сталкивался, то может на автомате через рекурсию устроить.
Да, реально есть еще более экономный способ вычислений (если не учитывать готовую формулу) по сравнению с итеративным, для больших n есть разница.

А что мешает завести свой стек в обычном массиве структур, которые содержат всё состояние функции?

Интересно, а для Scala существует такое же ограничение, что при вычислении числа Фибоначчи есть вероятность переполнения стека. Или там все по-другому? Реализация в Scala вычисления числа Фибоначчи рекурсивно более естественна (по философским соображения) ИМХО.

Я не знаток scala, но если правильно организовать хвостовую рекурсию, то можно в несколько раз по количеству итераций продлить агонию до переполнения стека.

Реализация в Scala вычисления числа Фибоначчи рекурсивно более естественна (по философским соображения) ИМХО.
Мне это напомнило серию Саус Парка, где они все ели через же ...
извините
Интересно, а для Scala существует такое же ограничение, что при вычислении числа Фибоначчи есть вероятность переполнения стека.
По определению ( F[n]=F[n-1]+F[n-2] ) — это не хвостовая рекурсия. Можно написать через хвостовую и поставить соответствующую аннотацию (tailrec). Но в любом случае оптимизация будет на уровне компилятора, на уровне JVM оптимизации нет, из-за каких-то там ограничений безопасности.
А любая линейная рекурсия — это потенциальное переполнение стека. Писать итеративную рекурсию «по философским соображения» — это понты и за такое надо наказывать. Людей которые были бы «не замараны» императивным стилем я не всречал, возможно они и есть, остальное это понты.
Формула достаточно быстро выводится на бумаге — особенно если был курс дискретки в вузе.
Она вроде как доказываетсо по матиндукции (а это не дискретка а матан или даже школьная программа). Ну и не выводится, а доказываетсо — это совсем разное. И все же и то и другое имеет мало общего с проверкой навыков/знаний программирования.

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

мало общего с проверкой навыков/знаний программирования
С действительно хорошими навыками/знаниями программирования математическая подготовка имеет достаточно много общего.
Можно еще лямбда исчисления вспомнить и прочие связанные вещи.
То, что формула доказывается по матиндукции на основе школьной программы, совсем не означает, что формулу нельзя вывести на основе хорошего курса дискретки.
А можно ссылку на выведение.
Вы написали о доказательстве (о чем я не писал) — и опровергли свой посыл.
Вывести и доказать отличаетсо важным моментом: В случае с доказательством вы знаете как она должна выглядеть. Поэтому опровержения посыла не вижу.
С действительно хорошими навыками/знаниями программирования математическая подготовка имеет достаточно много общего.
Много общего, но мат подготовка не является достаточным (и не факт что необходимым) условием для того чтобы утверждать что человек имеет знания в программировании и тем более мат подготовка не гарантирует навыков программирования.

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

За ссылкой на выведение добро пожаловать на хороший курс дискретки.
Дайте ссылку на этот курс.
Поинтересуйтесь как проводятся собеседования в Google, Microsoft, Apple, Yahoo. Везде присутствуют задачки на алгоритмы/структуры данных. Если наши программисты мнят себя не хуже американских, почему они отказываются от таких задач?
Видимо потому, что не все программисты даже в США работают в гугл/яху/эпл/микрософт. И, видимо, даже не все туда ломятся. Но, вместе с тем, компании некоторого уровня, с одной стороны, могут себе позволить подобного рода задачки и вообще рекрутинговый процесс, а с другой — многое из этого уже является необходимостью исходя из объемов и корпоративной бюрократической структуры: затраты могут быть и меньше при равном количестве профита в виде нанятых людей причем ошибки в виду все того же объема и бюрократии обходятся дороже. В то время как другие компании не смогут себе этого позволить просто в виду «а — нафиг с поля — пойду лучше в мелкософт педалить». А ошибки наоборот проще исправляются — может человек хороший и все такое.

В Гугле какое-то время назад на собеседованиях стали отказываться от практики задачек на школьную сообразительность. Оказалось что это было (стало?) не слишком осмысленно.

Причем кмк они же первыми их и ввели.

Да, они первые это широко форсили. И это скорее еще и маркетинговый момент. Делали и до них, будут делать и после. Есть много разных подходов к вопросу.

проводить собеседование надо уметь
И понимать для чего они нужны.

О да, научите же меня как проводить собеседования!

О да, научите же меня как проводить собеседования!
Никто вас этому не научит. Только практика и здравый смысл!

Да, но кое-что полезное со стороны получить можно.

Есть задачи, для которых «правильного» решения не существует — все зависит от обстоятельств. И в этом случае интересно, как человек будет защищать/модифицировать свое решение.

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

Это утверждение скорее справедливо для менеджмента, где можно собрать очередной «важный» митинг на кучу часов и отвлечь 100500 человек от работы с нулевым результатом по итогу, зато с +500 ИБП для менеджера.

:) А какая структура данных в джаве наиболее «оптимальна»?

основная часть задач — алгоритмы, которые неотделимы от структур данных.

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

Вот допустим вас как CTO попросят отсортировать массив, а если вы напишете болотную сортировку или сортировку «Бабушкина» со сложностью n! или даже пузырек n^2, то вам просто помашут на память.

Вы не ответили на вопрос. Есть задача — написать структуру для хранения/поиска/сортировки данных.

Согласно вашему заявлению есть некое «оптимальное» решение, которое не зависит от тонкостей использования этой структуры.

Вы не ответили на вопрос.
на этот???
:) А какая структура данных в джаве наиболее «оптимальна»?

Вы же понимаете, что вопрос на уровне такого: «Сколько стоит платье на обычную девушку?» / «Сколько стоит машина на 4-х колесах?»

Я то понимаю, но ведь вы же приверженец «оптимального» решения. Так что либо признавайте, что

Есть задачи, для которых «правильного» решения не существует — все зависит от обстоятельств.

Либо — давайте оптимальное решение.

Либо — давайте оптимальное решение.
Решение вообще-то привязано к задаче (если вы еще не в курсе). Это вам не митинг ни о чем.

Для сортировок к примеру приемлемы: пирамидальная, шелла, слиянием, на худой конец вставками.
неприемлемы: пузырьковая, бабушкина, болотная и прочие со сложностью выше n^2

Я же написал вам задачу:

написать структуру для хранения/поиска/сортировки данных.
Можно выбрать из существующих. Главное, чтоб была «оптимальной»

P.S. А если я вам скажу, что массивы чисел можно сортировать за О(n)? (При определенных условиях, конечно)

а че только массивы чисел? в принципе за O(n) можно сортировать любые данные, если есть возможность обойтись без сравнений элементов между собой.

Bucket ?
Pancake ?
В реалиях все равно ведь STL использовать будете?

Bucket ?
Pancake ?
просто считаете вхождение каждого числа и потом записываете в результирующий массив.
В реалиях все равно ведь STL использовать будете?
Естественно©. Кроме ситуаций, где стандартная сортировка явно справляться не будет (не встречался с такими ситуациями)

Вы как-бы почти глупость написали. Т.к. из тех, что в вашем списке «приемлемы» нужно выкинуть шелла и вставками. Вот просто интересно, чего это вставками лучше чем пузырьком, и она приемлема?

У меня одного убеждение, что вряд ли кто-то напишет _собственную_ сортировку? Если нет — значит, понимаем, что чуть чаще чем всегда -реализует одну из существующих. И для различных структур данных эффективность различных сортировок будет варьироваться. Поэтому есть такая нехитрая штука, как профилирование. Да и применяется это тогда, когда есть узкое место, а значит — имеет смысл. А выбрать среди существующих подходов оптимальный — несложно. И не надо стараться оптимизировать только ради самой оптимизации. Надо еще помнить, что код Васи будет с высокой вероятностью сопровождать Петя, и важно, чтобы Петя в депрессию не ушел и проект не завалил, увидев в быстро работающем куске кода обилие односимвольных переменных и прочих «радостей» (так код стал и короче, чем Вася хвастал на очередном собеседовании, демонстрируя очередную mySort()...). Гугл, ЕМНИП, реализацию компилятора Python забросил, осознав простоту миксов критических участков с C.

Я не просил писать свою сортировку.
Но человек, который не понимает алгоритмов, не желает разбираться и оценивать их сложность рано или поздно (чаще поздно) зафакапит, особенно если он senior и никогда не юзал ничего кроме того, что есть в java.utli.* и java.lang.*

Есть принцпиальная разница между понятиями «зафакапить» и «сделать ошибку».

«Сделать ошибку» — неправильно выбрать допустим скоуп у бина.

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

Знание алгоритмов, желание разобираться в них спасает от факапов и повышает квалификацию программиста.

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

>>В программировании существуют еще и оптимальные пути.

И оптимальные по всем возможным критериям сразу встречаются, наверное, только в теории.

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

А как же читаемость, поддерживаемость, повторное использование и т. п?

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

Недавно собеседовал Андроид-разработчика, который самостоятельно реализовал и 2 года уже поддерживает пару некогда популярных IM-протоколов.
Меня лично подобное бы впечатлило, но учитывая что его приложение с этими IM — выглядит как печальное УГ, компанию, в которорую он apply-ился — врядли это впечатлит.

Потому для джуна, в качестве демки, я бы советовал сделать что-то визуальное и «гламурное», что можно показать и HR-у и проджект-менеджеру и разработчику из потенцаильно будущей команды. При этом при себе надо иметь (на флешке / в гитхабе) код этого всего, и быть готовым рассказать «А вот тут я сделал такой вот контроллер, а тут я обрабатываю это событие для того чтоб туда-то отправить нотификацию».

Когда-то один из кандидатов показал нам простую реализацию типичного скрам-борда (колонки, истории, drag&drop). При этом очень интересно рассказывал что уже сделано, что хотел бы сделать но у него не очень получается, и что хочет сделать как компромисное решение до момента «пока не получится».

кому этот зип интересер? все пользуются готовой реализацией(если хочеш впечатлить, то лучне парсер + визуализация DICOM).
Заведи себе pet project в области которая интересна/в которой немного разбираешся, выложи на гитхаб. Если это будет мобайл или десктоп под мак,то еще и в сторы выложи

та да, можно еще что-то из STL реализовать ...

это libzip можно заюзать, это легко на плюсах забацать.

Мне кажется задание можно классное такое:
напишите компрессор/декомпрессор по методу Хаффмана для одного файла. У вас в профиле Unix написано, значит вы должны знать о идеологии «одна программа — одна задача».

Подскажите такой «Привет всем!», чтоб компании падали, и в штабеля укладывались.
Написать ОС на ядре L4 без GUI.
В приветствии лога загрузки, после инициализации драйвера USB, написать «Привет, всем!»
Своя реализация.
Меньше не будут в штабеля укладываться.

Чтобы штабелями попадал весь мир, сделайте бета-версию ReactOS, чтоб скайрим запустился и круизис. Респект и уважуха вам гарантирована. Если бабы не будут давать вам, мы их заставим!

Напишите для начала прогу, которая ищет на диске дублирующиеся файлы. Метод поиска — на ваше усмотрение.
Заодно можно для общего развития пошастать по ссылкам:
kafinfo.org.ua/...8/zavdannya2008
kafinfo.org.ua/...9/zavdannya2009
kafinfo.org.ua/...0/zavdannya2010
kafinfo.org.ua/...1/zavdannya2011

Практической пользы оно вам не принесет, но ЧСВ поднимет

<nostalgy>До сих пор вспоминаю эту олимпиаду :) Призового места там не занял, зато в Харьков за счет универа прокатился ^__^ Город мне очень понравился. И люди попались хорошие.</nostalgy>

Если я правильно понял вы предлагаете самому реализовать библиотеку чтения zip файла вместо уже существующих в большинстве современных языков/фреймворков. Реально это далеко не один человеко-час, а значит будет делать это претендент дома. И вот это, как мне кажется и неправильно, потому что:
1) Со стороны претендента. Вот он потратил N человеко-вечеров на написание этого. Работодатели посмотрели на это, что-то то не устроило — до свидания. Зачем было тратить несколько вечеров на это, когда можно было потратить их на свой проект/документацию к популярным фреймворкам/пьянство с развратным женщинами — непонятно.
2) Со стороны работодателя. Вот дали ему задание на N человеко-вечеров, ну а где гарантия, что ему это не написал по старой дружбе сосед сеньор-девелопер и натаскал на каверзные вопросы по решению?

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

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

Ну такое наверняка маловероятно.
Я имею в виду другую ситауцию — задание на 5 вечеров, сеньор набросал за вечер + вечер на объяснение. Контора то конечно выгонит, но зачем тогда сразу было использовать сомнительный вариант и тратить на него время.

Наверное мы просто говорим о разных вещах.
Проясню свой ход мыслей — в комментарии ниже я привел тестовое задание, которое делает интерн уже попав на стажировку в компанию 8 часов в день 5 дней в неделю и консультируется у senior-а, за которым закреплен и за 1 месяц он вырастает просто нереально по сравнению с тем уровнем, который у него был до этого.

Если человек хочет попасть сразу на junior-а/middle-а, то в моем понимании он обязан предоставить превосходное и комплексное (охватывающее множество технологий) тестовое задание — «КОНФЕТКУ».

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

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

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

Если человеку лучше пьянствовать с развратными женщинами, то я не возражаю, но на работу его не возьмут :-)
Знаете, молодость она ведь одна =)

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

1) сколько времени потратил на реализацию?
2) какой процент контор в твоем геолокейшене занимается разбором бинарных протоколов?

На то, чтобы добавить в существующую библиотеку чтение zip64, потратил около 8 часов рабочего времени. Написать сейчас с нуля описанное в задании, думаю, смог бы за 4 часа (поскольку подсмотрел подходы, использующиеся в библиотеке, но их можно и подсказать).

А быстро и весело — это задание от Gabriel Angelos. По его реализации уже можно много чего сказать.

Вот набросок тестового задания от меня:
Небольшой форум
Идея: создать форум, на котором смогут общаться пользователи.
1) сущности: Пользователь, Админ, Тема, Комментарий
2) схема базы данных: придумать самому и завязать через hibernate ( у меня вышло 7 табличек с учетом связей М-М)
на любой СУБД, я предпочитаю MySQL, но не ограничиваю в выборе. Если он юзал DB2/Oracle/MSSQL — тоже принимается, ведь для приложения БД прозрачна через слой Hibernate-а.
3) страницу входа в форум сделать с использованием AJAX (всплывающий pop-up-чик)
4) сделать страницу регистрации пользователей с валидацией на Javascript-е
5) сделать «админку» — страницу на которую может заходить только админ и редактировать информацию о юзерах/темы/комментарии
6) на главной странице сделать список тем в виде ссылок
7) по клике на ссылке темы открывается подробная страница темы и видны все комментарии.
8) Вложенность комментариев — одноуровневая (для упрощения).
Технологии: Spring MVC и IoC, Hibernate, JSP, AJAX, любую CSS-ку «натянуть»

Такое тестовое задание Intern обязан сделать за 1 месяц, а миддл его делает в среднем за 5 дней.
Оно показывает навыки человека к CRUD-клепанию, что является основной формой деятельности большинства программистов. Чтобы дорасти до сложных алгоритмов — нужно освоить эти АЗЫ.

1) Умение «гуглить» — главнейший навык любого программиста.
Вот 5 тестовых заданий:
habrahabr.ru/post/203688
javatalks.ru/topics/17692
www.rsdn.ru/...ava/3487001.hot
www.cyberforum.ru/...read439321.html
software-testing.ru/...ciju-junior-qa
+ c сайта Epam-а можно вытянуть тестовое задание, там у них есть какая-то программа для джунов, точную ссылку не вспомню.

2) Вам нужно одобрение для того, чтобы выполнять тестовые задания?
Тестовое задание покрывает базовый набор технологий, которые используются в фирме, а также чтобы продемонстрировать способности человека к программированию.

3) Ваше задание про zip кажется мне сомнительным.
Разве что вы попадете на узкоспециализированный проект по архивированию/потокам.

1) Спасибо.
2,3) Я для своих целей расширил одну существующую библиотеку zip для поддержки zip64 (частичной, и только на чтение), мне понравилось, и я просто спросил, насколько задание такого плана может быть полезным-интересным. Вроде некоторым понравилось. Хотя бы в смысле ностальгии.

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

Не странно, что некоторые хотят оплату за тестовые :).
Интерны на стажировке обычно получают небольшую стипендию: 300-400$, что и является своего рода оплатой такого задания.
Если компания вам выдала задание про zip-ы, то тут я хз как делать, сам не сталкивался с таким. Вполне возможно что такой zip-кусок может бесплатно «уйти» в действующий проект, в отличие от моего hello-world-ного задания на Spring-е, которое никуда не прикрутишь, но которое имеет большой охват.
Я для своих целей расширил одну существующую библиотеку zip для поддержки zip64
Ваши цели могут не совпадать с тем проектом, на который вас берут и все ваши усилия просто останутся не замеченными, в то время как от вас будут требовать чего-то другого.

Я бы насторожился, если соискатель требовал от работодателя оплатить CRUD-тестовое задание. Про zip уже написал.

И за задание-форум — тоже спасибо, но это же очень-очень крупная задача. Даже две недели бесплатной интенсивной работы в наше время себе позволить трудновато, но месяц...
На самом деле задание не такое уже и объемное. Думаю 5 стандартных рабочих дней хватит- это с серьезным запасом.
Но конечно перед этим нужно потратить не один день на изучение спринга, яваскрипта и т.п. Но это уже инвестиции в себя, а не хелловорлды, которые потом можно выкинуть.
миддл его делает в среднем за 5 дней.
Это если ему не влом :)

Во многих фирмах показная грубость и ЧСВ over 9001 как у qwertysmerty не прокатывают.
Эйфория, происходящая на DOU вокруг +500$ и 23-летних senior-ов, не совсем отражает действительность — все же в некоторых фирмах приходится делать тестовые задания.

Это если ему не влом :)
Само собой.
Если миддл приходит на испытательный срок и не делает такое тестовое задание по любой причине (например ему влом), то он не проходит этот срок.
Как-то так.
Если у чувака нет релевантного опыта и он хочет СРАЗУ на миддла, то он делает задание в 100 раз круче и демонстрирует.

ЧСВ — понятие растяжимое. Есть показное внешнее, как у qwertysmerty. А есть внутреннее, для себя «я сделал это, я модный пацан, давайте мне че-нить посложнее» :)

Не согласен,
во втором случае у человека здоровый интерес и стремление к саморазвитию и совершенствованию, а также повышается самооценка != ЧСВ.
ЧСВ — это болезнь: lurkmore.to/ЧСВ

Я сомневаюсь что на рынке есть мидл, доведенный до такого отчаяния, что он согласится потратить 5 дней на выполнение тестового задания

Есть люди, которые считают себя миддлами, например выпускники ВУЗ-ов, написавшие пару курсовых.

В заголовке я описал, что все же это задание для интерна «на вырост».

Когда меня аттестовали на миддла мне выдали такое задание и дали на него 5 дней (пока был простой в проекте), я еще успел прикрутить Spring Security, сделать полностью SPA (все на AJAX), почти красивую всплывающую менюшку на jQuery и сделал 2-х уровневые комментарии, написал тесты на некоторые Spring-овые контроллеры, потом время закончилось.

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

Ок, вы меня убедили, что на рынке существовал как минимум 1 мидл, доведенный до отчаяния

я тогда еще не был миддлом :-)
а как выполнил задание, то стал миддлом и не был в отчаянии. :-)

Лично я тоже, но исходя из практики наличия таких заданий — видимо, таки есть такие.

А если это оплачиваемое тестовое задание?

По стандартной ставке или чисто символически чтоб на мивину хватало втечене месяца?

Хороший вопрос. А какое задание?) — как можно что-то писать о деньгах, не зная предмета обсуждения?

Бывают интересные задания. 5 дней или 1-2 — уже второй вопрос.

Прошел по ссылке, пролистал, вспомнил. Ностальгия...
Я бы такого джуна взял )) Но это субъективно — интересы совпали. Люблю разбираться с форматами файлов.

Просто в копилку заданий. Моё одно из первых тестовых заданий было таким: на входе есть строка ASCII символов и шрифт всех ASCII символов в диапазоне 0-255 размером 8×8. Надо подготовить буффер данных для печати на матричном принтере, у которого есть только 8 вертикальных иголок. Т.е. в обычном формате шрифт хранится в бинарном виде сверху вниз, один байт на строку в 8 пикселей, где 0-пусто и 1-пиксель глифа, а надо всё преобразовать для хранения слева-направо. Т.е. повернуть на 90 градусов вправо.

Т.е. вот это

00000000 0x00
00011000 0x18
00100100 0x24
00100100 0x24
00111100 0x3С
00100100 0x24
00100100 0x24
00000000 0x00

надо превратить в

00000000 0x00
00000000 0x00
01111100 0x7C
00010010 0x12
00010010 0x12
01111100 0x7C
00000000 0x00
00000000 0x00

Сейчас, в наши дни, задание можно изменить для не матричного принтера, а для современного термопринтера и увеличить размер до 8×16. Задача применима для поворота JPEG, JPEG XR изображений до распаковки и т.п, да и ещё много где.

Литература:
1. graphics.stanford.edu/...r/bithacks.html
2. www.hackersdelight.org

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

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

Одобряете?
Зачем?
Вы для начала определитесь кем хотите работать.
P.S. Читали Х тем «хочу стать джуном»?
P.P.S. dou.ua/...ums/topic/8090

Только написанная программа должна определять налету, это zip64 или zip32.

Ну, это уже не «простой zip-файл», но для бонусных баллов — в самый раз. Тоже несложно, но на пару шагов в реализации больше.

На форуме где-то было тестовое от самсунга о музыкальных пластинках. Любопытная шняга, но для клепания форм абсолютно бесполезная. dou.ua/...ic/6342/#249637

Классная тема, как-то в поиске ее не надыбал :(

Посмотрел профиль — понял, что хочешь человеком стать, а не писать на сишарпе. Если все-таки решишь писать на сишарпе вызубри книжку по паттернам и научись слегонца их применять. Когда получишь очередное тестовое на тупую бизнес-задачку надо будет налобать 100500 слоев бизнес-логики и применить с десяток шаблонов за полдня (полдня достаточно, если прорешал книжку). Профит.
З Ы Олени которые будут проверять твое тестовое, даже не просекут к месту или нет ты присобачил очередной шаблон (все таки старайся применять к месту).
З Ы 2 Когда лобаешь паттерны старайся писать тесты для каждого лэйера.
З Ы 3 Если дадут такое dou.ua/...ic/6342/#248980 — радуйся, но только не долго, на работе все равно придется клепать формы ыы :)

понял, что хочешь человеком стать, а не писать на сишарпе.
Толсто =^_^=

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