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

Всем привет, недавно решил опробовать себя на летннюю стажировку в Яндекс, как раз каникулы будут. Учусь в Москве, 2 курс, вроде не глупый, не шибко умный, однако вроде бы стараюсь восполнять свои знания теорией, вот только практики не хватает, другой вопрос. Исходил из расчета, что на стажировке тебя из сопляка сделают солдатом, расчетливым и хладнокровным, коим сейчас не являюсь. Так вот, прислал заявку, мне выслали задание:

https://yadi.sk/i/IiGzf4GTqSMf4

Максим, здравствуйте! 
Спасибо за вашу заявку! 
Чтобы поучаствовать в отборе, решите, пожалуйста, тестовое задание. Оно находится по ссылке: https://yadi.sk/i/IiGzf4GTqSMf4 
На его выполнение у вас есть неделя. Мы сообщим вам о результатах в течение двух недель после выполнения тестового задания и расскажем о дальнейших шагах. Если у вас возникнут какие-либо вопросы, напишите нам, мы обязательно ответим. 
Желаем успехов! 
-- 
С уважением, 
Кривова Юлия 
Яндекс


Спрашивал подробности, по почте, как конкретно можно решать задачу, не отвечали. Ну, как понял задачу, так и стал решать ее. Выслал отчеты:
0e84564e6e534310902de75943f6af98.jpg

Ссылка на текст задач и решения:
https://github.com/splincode/codework

Через неделю ответили:
Максим, добрый день! 

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

С уважением, 
Кривова Юлия 
Яндекс


Опять же, мне сказали знакомые, что они тебе не будут объяснять как решать задачу, и что ты сделал не так, их задача "набор мяса в Яндекс".

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

Спасибо.
  • Вопрос задан
  • 41075 просмотров
Решения вопроса 5
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Ну давайте я покритикую:

возьмем файлик

1) вы не разобрались как объявлять методы у прототипов с новой нотацией `class`:

class Travelsort {
    constructor() {}
    sortTickets(tickets) {}
}


2) вы не умеете пользоваться исключениями.
if (!Array.isArray(cards)) {
    throw new ValueError('Wrong input');
}


3) использование let там где должен использоваться const

4) в принципе использование переменных там где их быть не должно

5) вы зачем-то реализовали свою функцию сортировки, я не увидел в требованиях отсутствия возможности использовать старый добрый Array.prototype.sort

6) Общие замечания по кодинг стайлу. snake_case там где должен быть camelCase, пишите с большой буквы то что должно быть с маленькой и т.д.

7) нарушения принципа единой ответственности. У вас объеткт умеет и сортировать и писать куда-то. Это категорически плохо.

8) Если исправить 7-ой пункт то наш класс превращается просто в функцию.

Далее... берем следующий файлик

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

2) вы зачем-то тут в прототип объекта строки впихиваете функции для парсинга CSS. Таким образом мы нарушаем принцип единой ответственности. Да и в целом расширять без надобности прототипы объектов как-то не ок.

Чуть дальше проскролил - вы пытаетесь расширить прототип строк для того что бы добиться API jquery? ух, батенька.

3) очень много дублирования.

4) очень плохо с protected variations.

Справедливости ради, ваш код входит в категорию ">50% JS кода", так что не расстраивайтесь. Просто для работы в яндексе нужен чуть более высокий уровень и понимание вещей.
Ответ написан
mudrick
@mudrick
Máximo progreso hemos alcanzado en minimo seso.
Жесть. Посмотрел гифку на Гитхабе, там, где весь процесс наглядно показан, код даже не смотрел.

Ну вот смотрите, ясно же, что информация о маршрутах, вот все эти текстики, типа, «Из Стокгольма на пароме до Риги, каюта 6a…», это всё должно генерироваться из данных, а не ручками в textarea писать :)

Вам нужно было образно придумать, что за АПИ вы будете использовать и какие данные от него приходят — из этих данных создавать все записи и весь путь.

Из {откуда} на {транспорт} до {докуда}, {тип_места: каюта, сиденье, место и т.п. в зависимости от типа транспорта} {номер_места} и прочие данные… — и еще для всего этого нужна локализация (не только же на русском тексты будут), и еще всё это нужно просклонять, если уж вообще перфекционистски делать — согласитесь, «Из Стокгольм до Рига…» звучит ужасно.

А у вас просто всё это пишется в текстовом поле — тогда уж вообще нужно одно текстовое поле вместо всей вашей формы и кнопочек, и там оператор напишет кучу текста сам, с кучей ошибок, несистемно :)

Вот сейчас возьмите всё, что вы сделали, и представьте, что номер рейса изменился, или номер сиденья изменился (вас поменяли с кем-то, и у вас изменилось место и у другого человека) — как вы это обрабатывать будете? Заходить в каждый маршрут и ручками править текст в textarea?

А насчет данных и сортировки, элементарно — данные самые обычные, обычный жисончик, массив из объектов. Сортировка по левому и правому ключу, nested sets, чтобы можно было создавать маршруты любой глубины, например, не просто Рига → Стокгольм, а между ними маршруты по Риге и маршруты по Стокгольму... ну, как дерево, можно раскрыть один маршрут, а там подмаршруты.
Ответ написан
@Elizavetta
Matroid: gamedev/js-разработка
Что я не так сделал, что поставило на мне крест?

Это не крест, это нормальная ситуация. В яндекс глубоко рано.
По коду вам написали комментарии. Возможно, Вам стоит вернуться к C++, т.к. язык более знаком, и вывести его на лучший уровень сначала, так Вы будете развиваться в глубину.
По резюме, не пытайтесь изучать все вширь, не думайте, что это все полезно. Работайте по списку выше, Кормен, английский.
По возможности возьмите ментора для регулярных консультаций С++ или JS.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Я думаю, что у них оценивается: минимум кода, самый короткий (оптимальный) алгоритм. Здесь нигде не требовали использование ООП.
1. Задание 1 - динамические цепочки (очереди). Надо было "растащить вагоны" и "сцепить" их (конечный с начальным пунктом). Это делается в 1 проход по списку карточек.
2. Задание 2 - проверка знаний нативки JS и логики работы мозга при самопостановке задачи и её реализации: селекторы/regex, деревья: просто перебор нужных с изменением/запросом свойств объектов.
PS: может им на C++ написать и прогнать через LLVM на asm.js?)
хотя, думаю, тоже не прокатит - им же JS-исходник нужен)
Ответ написан
@KeFA
Software Engineer
После беглого взгляда на ваше решение, могу сказать, что Вас не взяли как минимум из-за алгоритма сортировки за O(n^3), когда билеты можно отсортировать за O(n) по времени и O(n) доп. памяти. Псевдокод:
val tickets = [ ... ... ... ]

val from = new hash_map()
val to = new hash_map()

for (t in tickets) {
    from[t.from] = t
    to[t.to] = t
}

val begin = null;
for (t in tickets) {
    if (to[t.from] == null) {
        begin = t
        break
    }
}

tickets[0] = begin
for (i in range 1..tickets.length-1) {
    tickets[i] = from[tickets[i-1].to]
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
"Не тот пропал, кто в беду попал, а тот пропал, кто духом пал."

Вещует мне мое сердце, что дело тут не в разработке... )) А в жизненной позиции.

Учился как-то на курсах веб-разработки, по большей части чтоб получить диплом, дающий право занимать соответствующие позиции в компаниях, ну так на всякий случай. Кстати, до сих пор не пригодился ))

Разные студенты учились в группе. Сам я далеко не профи и не претендую, но опыта хватило, чтобы понять уровни остальных. Были и совсем зеленые, и со знаниями. И вот что интересно. Я возьму двух людей, двух крайностей (очень удачный жизненный пример, на мой взгляд), для рассмотрения - один полный ноль, даже верстка, второй и опыт есть и показал себя довольно неплохо. И что вы думаете? Первый человек прорвался в крупную компанию (пусть не яндекс, но все же). Второй сел на поддержку на хостинге.

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

PS: "В любых делах при максимуме сложностей
Подход к проблеме все-таки один:
Желанье — это множество возможностей,
А нежеланье — множество причин."
- вроде Асадов.
Ответ написан
saintbyte
@saintbyte
Django developer
Я вообще не понимаю такую любовь к яндексу... срочно забей и иди пилить свой стартап
Ответ написан
Homchenkokostya
@Homchenkokostya
Главное у тебя руки прямые, действительно, пили свой проект, зачем тебе Яндекс.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы