Но работа охуенная, как ни странно.
— странно, что нет SCP ещё на эту тему, потому что они там [CENSORED], прикиньте
* При поддержке Министерства возвращения беженцев.
( третья часть juick.com )
Галера Lumenalta, куда я так и не пошёл, потому что выбрал "Сквоттинг и Фишинг", прислала мне результаты моего тестового задания:
Hi Volodymyr, good evening. Some numbers of your results. The general score was 71% (Better than 75.01% of other candidates)
JAVASCRIPT — 97% (35 / 36)
REACT — 95% (19 / 20)
SQL — 25% (5 / 20)
React Hooks — 95% (19 / 20)
Enzyme — 95% (19 / 20)
MySQL — 25% (5 / 20)
React Testing Library — 95% (19 / 20)
Promises — 100% (16 / 16)
Async — 100% (16 / 16)
Section 1
1 hr 12 mins 52 secs
Suggested: 1 hr
19 / 20
95.00 %
Section 3
48 mins 44 secs
Suggested: 1 hr 15 mins
16 / 16
100.00 %
Section 4
39 mins 33 secs
Suggested: 25 mins
5 / 20
25.00 %
--------
М-да, практически не писал я SQL-запросов на прошлой работе. Сказывается.
О первом писал:
juick.com
Ну тут уж меня втроём собеседовали, если не считать зрителей. Два серьёзных технаря (один из них архитектор) и people partner.
People partner выдала достаточно общую базу вопросов:
— что мотивирует
— что демотивирует
— вилкой в глаз, или дроп всех баз
— кем через 5 лет
— почему мы
— почему ты
Итд.
Ответил на всё максимально честно и развернуто.
Кстати, запомнился вопрос "какие были конфликты на работе". Было, что рассказать, не стал молчать:)
(Тем временем вернулся хозяин арестованной собаки из juick.com долго курил на балконе и звонил собачьему адвокату)
Архитекторы задали кучу вопросов, в основном, про секьюрити, XSS, санитайзинг, платежные системы, сессии, куки, фреймы, API.
Интересная дискуссия была о semver.
Наконец перешли к долгожданному десерту. Ура, лайвкодинг!
Попросили покритиковать код, который раз в 10 секунд шерстит какие-то данные из базы. Там были проблемы с конкурентностью, памятью, производительностью, стабильностью и т.д. Я обожаю такие лайвкодинг-сессии, когда, во-первых, надо думать больше, чем педалить, а во-вторых, когда задача максимально приближена к боевым условиям.
По ощущениям, все остались довольны друг другом.
Опять же, взяли 5 дней на подумать.
Но, поскольку HR начала задавать более интимные вопросы (про мой дедлайн, про мой налоговый статус, есть ли у меня кто на стороне), я догадываюсь, что меня рассматривают всерьёз.
Компания классная, очень классная. RnD там очень продуманно организован. Репутация в интернете у них тоже нормальная, особых залётов (как, например, у "Назовите 6 цифр из СМС", выступающих ответчиками в судах про мошенничество и истцами — про защиту репутации) тоже нет.
UPD. Буквально сейчас, когда я пишу этот пост, "Сквоттинг и Фишинг" решили сократить время принятия решения и выслали мне оффер.
#3061451)
(вторая часть: #3061453)
И, наконец, на сладкое у нас был SQL, а именно MySQL.
Тут уже ничего в IDE не склонируешь, тут уже надо запросики писать. Ручками. Времени осталось — 40 минут.
Дана схема базы данных. Две таблички, связанные через третью как many-to-many со всякими метаданными в связующей таблице. Нуднейшее условие, которое раз двадцать пришлось перечитывать, чтобы осознать, что именно от нас хотят. Чтобы не спойлерить, выглядит оно типа такого:
"Найти всех доярок-рекордсменок и всех подоеных ими коров, отсортировав по имени коровы и годовому числу надоев, где дояркой-рекордсменкой считается доярка, надоившая за все годы в среднем больше, чем все доярки колхоза в среднем за 1968 год. Кроме того, бригадирок звена поместить наверх доски почётов"
Там не про доярок и коров, но этим текстом я просто иллюстрирую класс сложности запроса. Вроде и не сложный, но дико нудный и после полутора часа программирования вгоняющий в смесь тоски, паники и обречённости.
Итак, читаем ещё раз: "Найти всех доярок-рекордсменок...", о-о-о чёрт... "среднемесячных удоев за отчётный год..." бля... "...бригадой считается звено...", бу-э-э-э...
Короче, не стал заморачиваться и в полубесознательном состоянии набросал решение через CTE.
Ну, типа "WITH средниеУдои AS (SELECT AVG(удой) AS срУдой FROM дойка_коров..." и т.д. А потом ", дояркиРекордсменки AS (SELECT д.* FROM доярка д INNER JOIN дойка_коров дк..."
Не хочу вспоминать. Больно до сих пор. А потом из всех этих CTE джойнами и такой-то матерью вытаскиваем нужные председателю колхоза данные.
И самое прикольное, что ход мыслей у меня был изначально правильный.
Да вот только данные не сходились с тестовыми, хоть плачь!
Причина была в том, что я до конца не осознавал, что у меня в запросе по актам дойки, совершённым за 1968 год (необходимом для получения среднемесячных удоев за год) WHERE-выражение для фильтрации по году было написано с ошибкой. А всё остальное — идеально правильно (ну, и, разумеется, совершенно по-идиотски с точки зрения оптимизации).
Понял я свою ошибку за полторы минуты до конца срока. Задание делал ранним утром, чтобы никто не отвлекал.
А теперь представьте картину. Спавшая до этого в соседней комнате Птичка, просыпается от моих криков: "Ну! Ну! Сука! Не убивай меня! А-а-а-а-а, на тебе, на, сука, умри!!! АААА не уибиваааааййй!!! Сдохни!"
Это я боролся с жутко тормозным интерфейсом тестовой системы, который по 10 секунд запускал каждый запрос. А может быть со своими тормозными мозгами. А может, и скорее всего, с тем, как по-дебильному был написан мой SQL-запрос.
Но я всё-таки успел исправить и нажать чёртову кнопку Submit and Finish на последней секунде до конца срока.
Вот так это было. Буквально на последней секунде.
В итоге, я остался доволен всеми заданиями. Но, конечно, ограничение в два часа это и эйджизм, и эйблизм сразу, и при желании можно их за это по американским законам засудить. Эйджизм — потому что вдруг я дедушка старенький, печатаю медленно, думаю ещё медленнее. Эйблизм — а вдруг я вообще слепой, сижу в brltty, дайте два дня как минимум. Или я Стивен Хокинг. Стивен Хокинг бы не прошёл, разве что с Neuralink, да и то не факт.
Ну, в общем, подождём, чо скажут.
Зарплата у них там обещается по результатам тестирования от 5 до 8 k$, претендую на 8.
Предыдущие части — по тегу juick.com
(первая часть: (вторая часть: #3061453)
И, наконец, на сладкое у нас был SQL, а именно MySQL.
Тут уже ничего в IDE не склонируешь, тут уже надо запросики писать. Ручками. Времени осталось — 40 минут.
Дана схема базы данных. Две таблички, связанные через третью как many-to-many со всякими метаданными в связующей таблице. Нуднейшее условие, которое раз двадцать пришлось перечитывать, чтобы осознать, что именно от нас хотят. Чтобы не спойлерить, выглядит оно типа такого:
"Найти всех доярок-рекордсменок и всех подоеных ими коров, отсортировав по имени коровы и годовому числу надоев, где дояркой-рекордсменкой считается доярка, надоившая за все годы в среднем больше, чем все доярки колхоза в среднем за 1968 год. Кроме того, бригадирок звена поместить наверх доски почётов"
Там не про доярок и коров, но этим текстом я просто иллюстрирую класс сложности запроса. Вроде и не сложный, но дико нудный и после полутора часа программирования вгоняющий в смесь тоски, паники и обречённости.
Итак, читаем ещё раз: "Найти всех доярок-рекордсменок...", о-о-о чёрт... "среднемесячных удоев за отчётный год..." бля... "...бригадой считается звено...", бу-э-э-э...
Короче, не стал заморачиваться и в полубесознательном состоянии набросал решение через CTE.
Ну, типа "WITH средниеУдои AS (SELECT AVG(удой) AS срУдой FROM дойка_коров..." и т.д. А потом ", дояркиРекордсменки AS (SELECT д.* FROM доярка д INNER JOIN дойка_коров дк..."
Не хочу вспоминать. Больно до сих пор. А потом из всех этих CTE джойнами и такой-то матерью вытаскиваем нужные председателю колхоза данные.
И самое прикольное, что ход мыслей у меня был изначально правильный.
Да вот только данные не сходились с тестовыми, хоть плачь!
Причина была в том, что я до конца не осознавал, что у меня в запросе по актам дойки, совершённым за 1968 год (необходимом для получения среднемесячных удоев за год) WHERE-выражение для фильтрации по году было написано с ошибкой. А всё остальное — идеально правильно (ну, и, разумеется, совершенно по-идиотски с точки зрения оптимизации).
Понял я свою ошибку за полторы минуты до конца срока. Задание делал ранним утром, чтобы никто не отвлекал.
А теперь представьте картину. Спавшая до этого в соседней комнате Птичка, просыпается от моих криков: "Ну! Ну! Сука! Не убивай меня! А-а-а-а-а, на тебе, на, сука, умри!!! АААА не уибиваааааййй!!! Сдохни!"
Это я боролся с жутко тормозным интерфейсом тестовой системы, который по 10 секунд запускал каждый запрос. А может быть со своими тормозными мозгами. А может, и скорее всего, с тем, как по-дебильному был написан мой SQL-запрос.
Но я всё-таки успел исправить и нажать чёртову кнопку Submit and Finish на последней секунде до конца срока.
Вот так это было. Буквально на последней секунде.
В итоге, я остался доволен всеми заданиями. Но, конечно, ограничение в два часа это и эйджизм, и эйблизм сразу, и при желании можно их за это по американским законам засудить. Эйджизм — потому что вдруг я дедушка старенький, печатаю медленно, думаю ещё медленнее. Эйблизм — а вдруг я вообще слепой, сижу в brltty, дайте два дня как минимум. Или я Стивен Хокинг. Стивен Хокинг бы не прошёл, разве что с Neuralink, да и то не факт.
Ну, в общем, подождём, чо скажут.
Зарплата у них там обещается по результатам тестирования от 5 до 8 k$, претендую на 8.
Предыдущие части — по тегу juick.com
(первая часть: #3061451)
На второе у нас тоже был JavaScript. Постараюсь не сильно спойлерить, но там задание было в том, чтобы написать асинхронный пул воркеров. Не тех воркеров, которые прямо worker thread, а просто функций, которые выгребают из очереди асинхронные таски, выполняют их и так по кругу.
Тут тоже было несколько уровней сложности, от "просто реализуй ТЗ" до "сделай охуенно и оптимально", но в этот раз оба уровня были досконально покрыты юнит-тестами.
Но ИИ, опять-таки, больше путался под ногами, чем помогал реально, поэтому, я считаю, задачка тоже была довольно продуманная и хитрая. Требует опыта асинхронного мышления, наверное, знания каких-то минимальных паттернов конкурентности.
Это всё у меня нашлось, поэтому на задачу вместе с полировкой кода ушло минут 20.
Конец второй части. Остальные части — по тегу juick.com
Платформа для тестирования — DevsKiller.
Тебе дают комплексный тест из трёх заданий. Время на выполнение — 2 часа. Ставить на паузу нельзя. Пробовать повторно — по-моему тоже нельзя.
1) JS React
2) JS core (конкуррентное программирование)
3) SQL
Очень понравилось что два первых задания можно клонировать гитом и спокойно себе решать в IDE. Только нельзя больше никуда пушить, кроме как на их сервер. То есть, они не против, чтобы в этих заданиях кандидаты пользовались ИИ-помощниками. Хотя, сразу скажу, что задания подобраны так, что ИИ-помощники особо там не помогут.
Итак, задание первое. React.
Есть уже написанное веб-приложение на простом джаваскрипте, без типов. Есть эмулятор бекенда. Также имеется набор юнит- и e2e-тестов, покрывающий основной функционал. Нужно разобраться в том, какого чёрта все эти тесты падают, а также пройтись по списку рекваерментов и внимательно проверить, что из непокрытых тестами рекваерментов реализовано, а что нет. И насколько вообще оно праильно там реализовано.
А в самом коде повсеместно напартачено. Где-то вместо данных передаётся пустой массив. Где-то — захардкоженная заглушка, где-то какой-то виджет не так нарисован, где-то логика не до конца реализована. И вот этот фронтэнд в состоянии "тысяча мелких порезов" нужно отрефакторить мало того, чтобы тесты позеленели, но и приложить к нему любовь и заботу, стать его пользователем и продактом, довести до ума.
Времени ушло на это примерно час, но это не впустую потраченный час.
Мне просто дико понравилось это задание, 5/5!
ИИ с таким не справляется, потому что у ИИ нет главного — воли, страсти, чисто человеческого любопытства. Он не выйдет за рамки спецификации, и поэтому не отыщет скрытые алмазы в куче говна.
Конец первой части. Остальные части — по тегу #DevsKiller
Так вот, ничего подобного я не наблюдаю!
Подавляющее большинство украинских HRок проводит собеседования на русском. А даже если и на украинском, то и я, и технический интервьюер говорят на русском, и никого это не смущает. Люди подостыли в этом плане. Ну, я имею в виду, в профессиональной среде, а не на улице или в твиттере.
Ещё немного, и к домайданному уровню вернёмся: кто на каком думает, тот на таком говорит.
Это, кстати, самый лучший шанс украинизации, потому что из смеси украинского с русским родится лет через 200 новый язык, который, скорее всего, будет больше походить на украинский. Но даже если образуются два языка — просто украинский и украинский диалект русского (шо-то типа одесского чи слобожанского, тилько ще ближе до украинского), это уже не будет формально ru_RU, а будет ru_UA, на который можно смело ставить державный копирайт и заводить соответствующий ДСТУ.
Лет через двести, когда мы станем своего рода бельгией, а РФ — своего рода голландией и забудем, из-за чего убивали друг друга.
И только мы, высоколобая диаспора, как сейчас канадская, будем с экспатским снобизмом поправлять как укро-русских, так и укро-украинцев, задалбыая их настоявшимися к тому времени архаизмами своей островной заповедной речи.
Хотя, возможно, я проебал свой звёздный шанс. Шанс поработать год на убой с овертаймами и нервами, за три копейки.
Те же $7000, работа спокойная. Писать библиотеки для поддержки инфраструктуры, рефакторить код, контрибьютить помаленьку в опенсорс. Люблю такое.
Вопросы были, в основном, стратегические, про ООП-дизайн, про тесты да всякие индексы/транзакции.
Лайвкодинг был из серии: дан интерфейс API. Как его надо было правильно написать, чтобы можно было поддерживать дорогие годы с наименьшим количеством проблем?
В общем, они там няшки, и химия между нами произошла. Жду ответа
Зато завтра у меня будет собеседование на должность Node.js инженер в архитектурный отдел доменного регистратора. Известная, кстати, компания — "Сквоттинг и Фишинг". $7000 предлагают.
"Вези меня, мразь" с их астрономическими зарплатами что-то пока молчат и даже на техническое собеседование пока не зовут.
"Треф и Кашрут" послезавтра хотят провести со мной формальное техническое собеседование, хотя по их плотоядным лицам уже видно, что они меня вожделеют. Но без взаимности.
Go + TypeScript + AWS. Зарплата 700 евро в день, т.е. 15400 евро/мес.
Процесс найма заключается в тестовом задании, затем часовое техническое интервью, затем часовое культурное интервью.
Когда я увидел зарплату, первое, что я подумал — это разводняк.
Но потом увидел реальные отзывы на линкедине о рекрутере, и понял, что это реальный человек.
Потом почитал статистику зарплат, и понял, что это вполне реальные цифры. А вот те $6000-7000 в месяц, которые предлагают средние продуктовые фирмы и галеры, — вот это как раз и есть конкретный развод.
Клянусь поделиться всеми деталями после офера. Ну или после отказа.
Интервью было на русском языке, с очень восточно-украинскими интонациями, прямо аж "Донбасс порожняк не гонит". Что радует. В доску свои ребята. Там 100% или харьковские или донецкие.
Я попробивал некоторых персонажей, и нашёл очень серьёзный и олдскульный технический бекграунд. С такими людьми было бы классно работать и учиться у них.
Честно, рынок реально пугающе просел. За $7000 я буквально рву жопу в поисках. Поэтому мне пофиг, какая там у фирмы репутация. Есть контракт, есть голова на плечах, есть, в конце концов, понятие испытательного срока. Прорвёмся.