Pull to refresh

Comments 74

Мне понравился стиль, иронично, но беззлобно.


Собеседования были в течение всего года или в рамках одного поиска нового места?

Спасибо, в течение всего года (с февраля по октябрь, если быть точным), работу не искал, но старался поговорить со всеми кто мне писал.

А не трудно поддерживать специфические "знания для собеседований" на должном уровне?

Сложно по темам, с которыми ты не работаешь каждый день, у меня они такие:

  • ssl

  • tcp/ip и сокеты на низком уровне

  • ООП паттерны

  • весь низкоуровневый линукс.

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

все вылетает из головы через пару недель

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

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

все вылетает из головы через пару недель

Так в этом и суть, если не было применено на практике - то вылетит из головы и не заметишь. Через 5 лет вылетит даже то, что было применено на практике, а через 10 - что было с болью применено. Так работает человеческий мозг - либо Вы работаете с этим и поддерживаете, либо оно начинает забываться.

В вашем тексте реально не хватает названий. Не очень понятно зачем делать тайну - вы все равно не выкладываете тестовые задания и конкретные вопросы. С конкретикой было бы кратно полезнее

Поддержу. «Карточная компания» — намёк есть, но непонятен абсолютно. Тогда проще уж писать Компания 1, Компания 2.

П.С. сама статья — огонь.

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

Уж не знаю почему, но всегда с интересом читаю подобные статьи. Спасибо, что поделились!

Немного вопросов:

1) Алгозадачки обычно ставят в какой форме? Устно проговаривают или текстом дают? Мне кажется, когда ее произносят - значительно сложнее, чем когда условие открыто перед тобой и ты всегда можешь глазами пробежаться по нему.

2) "heap sort vs normal sort"

Вот зачем им это нужно спрашивать? :) Серьезно, какая логика в голове при этом? "Кандидат не знает преимущества хип сорта, поэтому..." поэтому что? О чем им скажет этот факт? Этих сортировок десятки существует и если ты не лектор по предмету "Алгоритмы сортировок", то эта информация в голове надолго не задержится. Извините, словил флэшбэк - пишу, как давненько пострадавший от вопроса "хип сорт vs квик сорт. Преимущества и недостатки" :)

  1. Аналог этой дали устно, обычно текстом с примером. И всегда онлайн редактор с подсветкой синтаксиса.

  2. У меня нет мнения на этот счет

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

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

Пробежаться от конца к началу, удаляя встречающиеся нули и добавляя в конец новые (в python - pop и append).

эммм, pop же первый елемент удаляет (сдвигает) ну и внутри оно же наверняка сдвигает все данные..

Очень дорого из-за множества реорганизаций массива. Всё можно сделать на месте.

Делаем два индекса, для чтения и для записи («курсоры»). На первой фазе пропускаем все ненулевые значения. На второй курсор чтения пропускает все нулевые значения, читает текущее ненулевое, записывает ноль. Прочитанное значение записываем по позиции курсора записи. Повторяем, пока чтение не упрётся в край. Всё. O(N), по памяти — на три переменные. Как костяшки на счётах из произвольных позиций к краю отщёлкать по одной.

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

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

почему на практике иногда лучше взять алгоритм с худшей ассимптотикой

Бенчмарки. Единственный правильный ответ, к которому в конце концов все и сводится.

"у какого алгоритма лучше константа"
Бенчмарки.

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

Бенчмарки.

Но самое смешное, что эти бенчмарки проводятся создателями СУБД, языков программирования, платформ и т.д. Это огромные труды, которые тянут на научные работы. Спрашивать с ходу такие вещи на собеседовании - как минимум нерезультативно в плане оценивания кандидата.

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

Итого: в вопросе зачем-то используется алгоритм heapsort, заранее зная, что он непопулярен. Что мешает узнать про константы на более знакомых алгоритмах? Да хотя бы тех же quicksort vs merge sort (две самых популярных сортировки).


P.S. как же здесь больно оформлять цитаты на комментарии

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

Сортировок много, и это весьма простые алгоритмы по своей сути.

Интересующие позиции: синьор+, строго бэкенд, строго не блокчейн и не node.js/php.

Это на кого рассматривался автор. Боюсь, с алготрейдингом и геймдевом мимо. kv-бд еще можно как-то подтянуть. Но даже в этом случае намного логичнее спрашивать про хэши и про отличия B-tree от B+ tree от LSM. Да даже просто heap (без сортировки) и priority queue было бы больше толку обсуждать, ибо они реально на практике применяются.

Сортировок много, и это весьма простые алгоритмы по своей сути.

Мне все еще непонятно, как из простоты следует необходимость это помнить и тем более обсуждать на собеседовании, которое огрниченно по времени. Побитовые операции тоже простые, но это не говорит о том, что про них стоит спрашивать на собесе C# или Ruby разработчика. Есть же просто куча тем, которые будут важнее и показательнее энциклопедической прогонки по неиспользуемому алгоритму.

> почему на практике иногда лучше взять алгоритм с худшей ассимптотикой

Бенчмарки. Единственный правильный ответ, к которому в конце концов все и сводится.

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

> Как вообще выбрать из алгоритмов с одной ассимптотикой самый подходящий под задачу

Бенчмарки.

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

Так что не только для бенчмарков это важно.

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

Так что не только для бенчмарков это важно.

Вы не так поняли. Имел в виду, что едиственный способ узнать, какой алгоритм эффективнее на практике - проводить бенчмарки. Другого варианта не существует. Это, собственно, и есть ответ на "почему quicksort используется чаще heapsort, хотя последний лучше асимптотически". Потому что замеры на реальных данных в пользу первого.

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

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

К след интервью я готовился несколько дней, удалось пройти в атлассиан, гитлаб и еще одну того же уровня.

Хотя про гитхаб до сих под обидно, аж скулы сводит.

А может оно и не нужно? Зачем рисовать себя и подстраиваться под ценности компании, если они твоим не соответствуют?

А зачем решать задачи на литкоде? Может ну его раз решение не знаете?

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

Если что-то происходит повсеместно — это не значит, что это правильно.


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


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


И всё это стало "нормальным" и "стандартами в индустрии", и люди почему-то принимают такие правила игры, а кто-то даже горячо приветствует и поддерживает.

чтобы понять ценности компании

С годами приходит понимание, что единственная "ценность" в любой компании, как юр. лица - это бабло. Все остальное, увы,- нематериальная мотивация сотрудников.

зы Даже не знаю какой смайл поставить...

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

Честно говоря, я это понял не так и поздно, лет в 25. Просто я поработал в банке, где вся эта ложь с ценностями, лицемерие и высушивание работника до остатка, под песни о ценностях, очень ярко просачиваются.) Но многие да, не сразу к этому приходят. Мне просто "повезло"

А можете чуть больше конкретики? Пару примеров ответов-вопросов? И как именно вы готовились?

Лучше погуглите «behavioral interview prep», много как информации так и примеров. Star метод ответа обязательно, иначе вас просто не поймут или вы просто потратите впустую драгоценное время.

Кривить душой конечно не стоит но в ответах обязательно акценты делать в зависимости от компании. Благо нынче все что требуется написано в job description. А у меня гитлаба так вообще про это война и мир написана в хэндбуке

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

Наверное это придет с опытом. Но выполнять тестовые задание - требущие 2-ух твоих выходных это крайне непродуктивное и неэффективное занятие.

Как минимум только потому, что - работодатель, дающий такие задания не уважает время и силы другого человека, исключения - только FAANG

Как максимум - вы вкладываете большие силы и время. При получении отказа это очень сильно бьет по мотивации и псих. ресурсам. Я крайне Вам не рекомендую так делать

Фаанги, насколько мне известно, домашек как раз не требуют

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

UFO just landed and posted this here

Так и получать оффер от фаанг тоже не обязательно. Пришел, лицом поторговал, получил отказ, ушел.

UFO just landed and posted this here

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

UFO just landed and posted this here

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

UFO just landed and posted this here

Что нужно фаангу, знает лишь фаанг. Я всего лишь читаю довольно много отзывов вида "я победитель олимпиад, силой мысли преобразую sparse array в red-black tree, прошел все круги собеседований, теперь перемещаю кнопочку по форме".

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

Фаангу нужны вертатели деревьев и динамические программисты. Тогда вы, забатывая литкод, немножко обманываете фаангу, по крайней мере, в моём мире.
А в чём обман? Почему забатывать подобные задачи в студенческие годы — окей, а в 35 лет — «это другое»?
UFO just landed and posted this here
Ну вы же не родились с данным умением, а научились их решать, и весьма вероятно, что в процессе обучения использовали примеры и задачи.
UFO just landed and posted this here
Ну вот, а тут будет наоборот, с решением задач на Leetcode придёт возможность (или способность) решать эти задачи на работе.

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

Всё-таки кажется, что тех. интервью немного переоценено как идея. Софт скиллы и на сколько человек впишется в культуру важнее. Научить технологиям намного проще, чем поменять поведение

А статья отличная, читается легко и интересно

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

Так что истина где-то посередине, все важно. Особенно если требуется не джун, а готовый специалист чтобы грести сразу, а не через полгода.

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

Самый главный софтскилл - хорош человек как работник или нет - вообще выявляется только в процессе

Это еще и ситуационно зависимо. Даже в рамках одной компании, на одном проекте человек может хорошо работать, а на другом плохо.

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

Синьорность - это в первую очередь софт скиллы и опыт некоторого говна, знания по языку подтягиваются очень быстро.

Язык, допустим, Вы подтянете, если он не очень сложный(как Java). А вот подтянуть шаблоны проектирования, архитектуры сложнее hello world, знания актуальных фреймворков и библиотек - на это нужны годы.

Я ни в коем случае не ставлю под сомнения Ваши интеллектуальные способности, просто это физически крайне трудновыполнимо из-за большого объема информации. Поэтому при смене языка/платформы будучи сеньором Ваш уровень в другом языке начинается с джуна. Вот как быстро он будет прогрессировать - зависит исключительно от Вас, предыдущие знания в чем-то могут помочь, если новый язык использует похожие подходы и практики(например - C#-Java, C-Go, Perl-PHP..).

Во всяких ФААНГах все равно исопльзуется все свое, поэтому знания библиотек\фреймворков не ктритичны, все на месте подтягивается. Проседает конечно, но уж точно не до джуна, если нет каких-то специфических требований к языку.

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

шаблоны проектирования, архитектуры сложнее hello world,

Это как к языку относится? Мне как раз и кажется, что это не языковые особенности, которые используются в программировании в целом. Тем более что многие языки поддерживают несколько парадигм.

знания актуальных фреймворков и библиотек

Большинство фреймворков похожи друг друга, так как оперируют одними и теми же терминами, шаблонами и паттернами. По поводу библиотек - библиотека для работы с RabbitMQ для C# на вряд ли будет сильно отличаться от той же библиотеки для JavaScript. А если брать какие-то супер специфичные библиотеки, так их знания проверять довольно странная затея, так как людей, работающих с ней, явное меньшинство.

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

Это как к языку относится?

Разные возможности у языков. Например - реализация ООП у Java и PHP весьма отличается, причем даже по версиям языка. Соответственно, архитектура ПО тоже будет отличаться. Где-то поддерживается множественное наследование. Dependency Injection по-разному реализована и где-то это принято использовать, а где-то не очень.

По поводу библиотек - библиотека для работы с RabbitMQ для C# на вряд ли будет сильно отличаться от той же библиотеки для JavaScript. А если брать какие-то супер специфичные библиотеки, так их знания проверять довольно странная затея, так как людей, работающих с ней, явное меньшинство.

В Java часто требуется Spring, в Ruby - ROR, в Python - Django, в PHP - Laravel/Symphony/Yii. Чтобы знать их на сеньорском уровне - нужно потратить месяцы, если не годы и сделать несколько проектов.

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

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

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

Если не секрет, ваше понимание "синьор+" - это какой примерно какой левел? Можно в терминах любого из FAANG, присутствующих на levels.fyi .

Хотелось бы думать, что L5, но если оценивать по компенсации, то все-таки чуть выше середины L4.

Хотелось бы узнать вашу мотивацию, почему строго не блокчейн?

Ну вот не пойму я это и все. Не пойму в плане ходить на собеседования ради узнать свои пробелы в знаниях. Зачем?! Это как научится экзамены проходить. Абстрактно - я хороший боксер, иду на бот без правил, мне указывают, что я плохой борец. В итоге я на следующий раз подтягиваю немножко так борьбу.. Зачем?! Я по прежнему плохой борец. Если меня спросили про столбы ООП, я не ответил, подтянул и в следующем собеседовании ответ дал, но это же по верхам все. Глубоких знаний не появилось.

Вопрос целеполагания. Если цель — устроиться на работу в корпо, то важно именно пройти собеседование. Есть немалая вероятность, что после прохождения фильтра на входе вам условные leetcode medium никогда не придётся решать (ну или придётся, но под рукой будет гугл и стековерфлоу). Глубокие знания появятся по ходу дела.
Если вы не хотите работать в таких компаниях, или текущее место работы всем прекрасно — не ходите, никто ж не заставляет.
UFO just landed and posted this here

Как однажды сказала мне моя мама - в таком случае можно на голубом жениться. Ну ради денег есть где больше дадут. Так что нет, не деньги стимул. Надеюсь. Верю

В США есть варианты, да.

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

Поэтому фраза, что "есть где больше дадут" вроде как верная, но таких вариантов очень мало и не понятен стимул их искать.

Было бы отлично привести пару примеров таких компаний, которые: 1) платят выше фаанга 2) без литкода(или других "нерелевантных" вещей) на собесах 3) в которых хочется работать. Мне лично пока что такие не попадались во время моей жизни в Канаде\Англии(про рф не говорю, поскольку фаанг выехал из РФ еще до меня)

UFO just landed and posted this here
Sign up to leave a comment.

Articles