Подготовка к собеседованию на позицию Software Engineer в крупную компанию

Собеседования проводить? :slight_smile:

Мне пришло, правда к тому моменту я уже работал на новой работе.

Каюсь, System Design вылетел из головы. У всех кого знаю - было на собеседовании.

Как я упоминал, что в facebook мой приятель жаловался на ужасный код, что в amazon были претензии к “шоколадным” коллегам. А польза, как мне кажется, только в скорости, пусть ■■■■■код, пусть запаришься потом модифицировать, зато быстро и работает.
Все чаще сталкиваюсь с такик подходом.

На собеседовании сразу видно, когда человек задачу знает. На этот случай у меня два подхода - или другая задача, или развитие текущей - а задачи у меня в основном такие, что усложнять там можно часами. И с усложнением сразу видно, есть ли там за душой что-то помимо натаскивания на задачи, или это очередной ■■■■■кодер. Про опыт спрашивать бесполезно за исключением поведенческих вопросов - насочинять можно с три короба, но с поведенческими вопросами с уточнениями уже не так просто. Про знание той же джавы спрашивать тоже пустой номер - знание языка ещё не значит, что человек на нем может вменяемо писать. И да, задачи на on-site ведь не только на problem solving, но и на качество кода, знание структур данных, ну и system design, конечно.

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

Про H1b - очень тяжело нынче. Я бы рекомендовал Канаду в этом случае - у всех гигантов там есть офисы, потом по L1 легко перебраться в штаты.

Какие, хотя бы примерно? Вообще не понятно что за задачки, которые усложнять можно часами.

Типа, найдите в массиве сумму подмассива в log N? Кандидат строить prefix sum array. Follow up 1: “А если можно менять значения в массиве? Как найти sum in range в log N?”. Кандидат строит Binary Indexed Tree. Follow up 2: “А если надо найти не сумму, а минимум in range?” Кандидат должен написать Segement Tree…

Или нужно в графе найти кратчайший путь, используем BFS. А если weighted graph? Используем DeDijkstra. Но если мы хотим найти 1 кратчайший путь, например, между Ньй-Йорком и Лос-Анджелесом, зачем нам исследовать все эти потенциально удаленные пути? И кандидат пишет A*.

Или так: даны монеты номиналом 1, 2, 5. Найти минимальное количество монет, чтобы в сумме получилось N. Greedy! А если могут быть любые номиналы? Пишем recursive dynamic solution. Time limit exceeded! Вот же она, memoization. Я вот для такого большого N получаем Maximum recursion depth exceeded! Не беда, iterative solution… Coin problem слишком попса, точно никто не спрашивает, я для примера.

Тяжело именно из-за лотереи? По L1 ты все-таки привязан сильно.

Я за последний год был на 3х онсайтах в ТОП компаниях.
К сожалению, оффера не получил.
В итоге нашел 3 работодателя из не ТОП компаний на h1b, они все в этом году подали документы. Если будет h1b, то потом на месте можно будет еще пробовать перевестись в топ компанию.
А пока что получил рабочую визу в Канаду в небольшую местную it компанию. Подучу язык, буду дальше тренеровать задачки и system design.
У меня есть youtube канал про эммиграцию для программиста, скоро на нем поделюсь своим опытом провалов на онсайтах и поиск работодателей на h1b.
Так же там есть пример удаленного собеседования и будут еще.
Если для кого-то это актуально - название канала “Программист эмигрант TV”.

Подписался и залайкал, актуально.

Думаю, не стоит удалять голос, это довольно важная часть видео. Я фанат этого паренька Coding Interview with a VP @ Salesforce - YouTube, он все оставляет как есть.

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

Предлагаю соревнование в номинации “самый короткий пример ■■■■■кода”. Вот прямо перед глазами:
objXml = objXml.replaceAll(“ns3:”, “”);

На самом деле голос я не удалял, он просто не записался из-за корявой настройки гарнитуры. Но не могу же я признать свою криворукость в описании к видео :slight_smile:

Да, это все будет.

If(x=null)

Медиана по потоку чисел (use case - performance метрики сервиса). А потом добавляем p90 (и заодно смотрим, как модифицируется код под это дело, оставляется ли задел под p99 и т.д.), а теперь ближе к реальности - добавление в поток чисел и запрос текущей медианы идут из разных потоков исполнения, а желательно, чтобы добавление в поток не влияло на performance вызывающего метода, да, и дамп в файл со сбросом каждую минуту, и чтобы сброс был атомарным, а теперь тест кейсы на это все - на 40 минут хватит с запасом :slight_smile: Как видите, никакого rocket science, но знать и понимать надо на уровне опыта написания реального кода, а не абстрактных задачек.

Да. Потратить кучу времени и денег, чтобы с вероятностью 0.25 получить через 7-8 месяцев среднего SDE-II (про SDE-I и подавно молчу)? Оно того не стоит, когда в Канаде набрать проще. По L1 ты привязан до получения гринки, и любая нормальная компания начнет ее делать практически сразу, ибо продлевать L1 рискованно и геморройно. В гигантах типа Амазона можно менять команду, если надоело в текущей - надоесть не успеет до получения гринки уж точно.

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

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

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

В чем проблема пройти интервью самостоятельно? Может, в том, что квалификации не хватает?

1 лайк

Ну, это не ■■■■■код, а очень даже неплохое оформление.

Ну в некоторых языках это проверка как у нас прошла операция присваивания x значения null. Рекомендованный подход if(null==x) - во избежание так сказать.

А если нет практического опыта решения вот именно такой задачи (все что относится к усложнению)? Довольно специфичная вещь. Что такое p90 и p99 я вообще впервые слышу - скажите хоть по каким ключевым словам гуглить, к чему это относится? Таких задач можно напридумывать вагон, требовать опыта решения каждой в реальной практике КМК глупо.

Процентиль. Надеюсь, хотя бы медиана не пугает?

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

Глупо взять натаскавшегося на абстрактных задачках, а потом объяснять инженеру, что такое процентиль, и что такое многопоточность и как с нею жить (тема же про Software Engineer?)

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

Из моего опыта - ни одному человеку, знающему, что такое медиана, в контексте задачи на ее вычисление не приходилось объяснять, что такое p90 (это педиатр мне раз в год пытается рассказать, что такое процентиль на графиках роста и веса моих детей :lol:)

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

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

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

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