Максим Фатин | про IT
4.12K subscribers
202 photos
4 videos
105 links
Помогаю с подготовкой к собеседованиям в RU Big Tech

https://clck.ru/3RdRKN

● Вместе с командой помогли 100+ разработчикам попасть в BigTech
● Жму 100-ку на 2 раза (есть куда расти)
● Люблю есть ночью)

Связь через Карину:
@Karina_algocode_io
Download Telegram
Вышел новый видос и OMG

Сколько негатива про Яндекс в одном месте я еще не видел

В комментах просто все все сказали что думаю про Яндекс 😅

Лично я мега респектую Яндексу - получил там оч крутой опыт
🌭24❤‍🔥7🤣6
Помню ты перехоил на GO. Сейчас та же ситуация
Что то рынок mobile (android) затух и я хз что делать, вакансий мало, все мало
Было бы твое мнение услышать интересно


Ну значица я решил глянуть ради интереса и такой итог:
Вакансий Андроид: x
Вакансий Golang: x4-x8 (в зависимости от сайта)
Вакансий Java: x6-x12 (в зависимости от сайта)


И да, просто сравнить на HH числа не получится - я прям проскролили и посмотрел, чтобы были релевантные

И вот что интересно: если идти на GO, то там вакансий меньше чем на JAVA

JAVA прям поболее будет

И на мой взгляд логичнее идти в Java, как минимум потому что ты писал на Kotlin и быстрее вкатится можно

Часто замечал, что погоня за GO ОЧЕНЬ СТРАННАЯ. Вроде как рынок уже насытился гошниками, ситуация почти такая же как на остальных ЯП, а все все равно туда идут

Я не против

Но тут вопрос цели: хочется именно на GO или хочется максимум денег и устойчивость на ближайшие 5-10 лет? Лично мне кажется, что Java больше после мобилки подходит под такое (могу быть не прав конечно, это лишь мнение)

Ну и на последок такая мысль: а может не нужно менять вообще стек - просто мб можно попробовать заходить через прямые контакты в компаниях разных (например, через Linked In)

Это так, на подумать

Правильного ответа тут нет, но подумать о том точно ли я все перепробовал будет не лишним прежде чем обнулять свою экспертизу и менять кардинально стек и область с мобилки на бек
🌭23❤‍🔥5🍓2
Расскажи про свою самую сложную техническую задачку

Частенько вопросик задают на финалах


Раньше это работало так:
- если рассказываешь про оптимизации (junior/middle)
- если рассказываешь про архитектуру (возможно senior)
- если про интеграции и их проработку (скорее всего senior)
- и так далее

НО!

Я бы вообще не спешил сразу отвечать

Сначала спросил бы:
"Перед тем как отвечу, можно уточнить: а кого вы сейчас ищете в команду?"


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

И если ты расскажешь историю именно про то, что для них сейчас ВАЖНО — шанс зацепить интервьюера будет ВЫШЕ

Потому что одна и та же история может идеально попасть в ожидания одной команды и вообще НЕ ЗАИНТЕРЕСОВАТЬ другую

Ну и если не совпало — всегда есть следующий кандидат...

В такие времена живем

И бахни 🌭 если было полезно
🌭70
Опа! А вот и очередь на минимум подъехала

В общем, MinQueue поддерживает такие операции:
- вставка в конец (push) за O(1)
- удаление из начала (pop) за O(1)
- получить первый элемент (top) за O(1)
- получить минимальный (min) за O(1)

НО ЗАЧЕМ ВООБЩЕ ТАКОЕ НУЖНО?

На работе вряд ли встретится, а вот на собесе вполне (все из-за задачи про окно ограниченного размаха от Яндекса)

А ТЕПЕРЬ ДУШНОЕ ОБЪЯСНЕНИЕ

1) Есть стек (добавляет в конец и снимает с конца)
2) Есть стек на минимум (тот же стек, но за O(1) умеет минимум получать)
3) Есть очередь на двух стеках (обычная очередь)

А теперь если реализовать очередь на двух стеках на минимум, то получим MinQueue

Выглядеть это будет так:

class Stack:
def __init__(self):
self.stack = []

def __bool__(self):
return bool(self.stack)

def push(self, elem):
if self.stack:
self.stack.append(
(elem, min(elem, self.stack[-1][1]))
)
else:
self.stack.append((elem, elem))

def pop(self):
return self.stack.pop()[0]

def get_min(self):
if not self.stack:
return float("inf")

return self.stack[-1][1]


class MinQueue:
def __init__(self):
self.s1 = Stack()
self.s2 = Stack()

def push(self, elem):
self.s1.push(elem)

def pop(self):
if not self.s2:
while self.s1:
self.s2.push(self.s1.pop())

return self.s2.pop()

def get_min(self):
return min(
self.s1.get_min(),
self.s2.get_min()
)


Самое сложное: понять как работает черт побери эта очередь на двух стеках

По смыслу первый стек — сюда мы складываем новые элементы

А второй — отсюда забираем элементы в порядке очереди

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

А минимум — это просто минимум из двух стеков

---

За более подробными объяснениями можно почитать ТУТ

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

А 🌭 ускоряет выход видосов
🌭34❤‍🔥1
Алгоритм поиска ментора для решения проблемы

Раньше, когда я обращался к ментору я делал это так:
1) Найти чела с самым умным лицом по фотке на getmentor
2) Сходить к нему
3) Получить посредственный результат и забить

Как я хожу к менторам сейчас:
1) Через GPT формирую запрос
2) Через GPT делаю выгрузку с getmentor и он ищет мне ТОП 5 менторов под запрос
3) Пишу всем 5 менторам этот запрос
4) Иду на все консультации

Какой результат:
1) 3 ментора ответили на запрос на созвоне
2) 1 ментор позадавал вопросы, сделал презу к созвону и круто все разложил по полочкам по эффективности X10 от остальных
3) 1 ментор слился

И я бы в жизни не написал сам человеку, который так круто для меня все разложил

Естественно продолжу я именно с тем, кто так круто вложился

Ну и еще один вывод для себя: если уж я решаю проблему то берусь за нее основательно и хожу к нескольким экспертам (минимум 5)
🌭32❤‍🔥2🍓1
А теперь узнаем на сколько кто доволен повышением и получил ли вообще....
Anonymous Poll
41%
Не получил
10%
Обещали, теперь жду
21%
Получил и доволен
20%
Получил и не доволен
8%
Не получил и не жалуюсь
🌭1🍓1
60% не получили повышение или недовольны (+5% скоро тоже будут недовольны)

АХУУУУУТЬ

Выпускаю срочный мануал:

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

2. Приходишь на встречу и не уходишь, пока не выяснишь, какие именно задачи/процессы нужно сделать именно тебе. Должен быть ЧЕТКИЙ СПИСОК и понятные сроки

Или, может, всё хорошо, но не хватает скорости — тогда договоритесь с ним о каких-то дедлайнах для текущих задач и т. д. Короче, нужны измеримые метрики. Или пока он не скажет, что поднять ЗП в принципе нереально

НО! Тогда проверь его слова и спроси, было ли хоть 1 повышение в компании за год. Если было, значит, всё же можно что-то сделать

3. Текстом в корп. чате после встречи фиксируешь договорённости, как их понял ты, и просишь прокомментить, если что-то не так

И да, лид не может гарантировать поднятие ЗП на XYZ сумму

НО!

Он может сказать: «Если ты это сделаешь, то будешь первым из всех Middle-ребят в команде, кто станет Senior, и поднимешь себе ЗП первым»

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



Результат разговора должен дать чёткое понимание:

1. Готов ли тимлид в целом отстаивать твоё повышение ЗП или он вафел и в целом сам стух давно
2. Можно ли вообще в принципе рассчитывать на повышение
3. В какие сроки это будет

P.S. И ещё такая мысль: узнайте у своего лида, планирует ли он сам повышение. Просто если нет, то как бы я, наверное, не оставался в такой команде, особенно если тебе нужен активный рост - ибо только активно растущий тим лид будет сам ЗАИНТЕРЕСОВАН В ТВОЕМ РОСТЕ (чтобы ты делал быстрее более сложные задачи), иначе он как лид тоже не вырастет ибо его повышают за крутые достижения всей команды

P.P.S. Пост актуален только для тех, кто активно растёт. Для тех, кто подустал и хочет чилить, рекомендации смертельны

P.P.P.S Чем больше стух лид, тем больше он будет не рад тому что ты рыпаешься и хочешь расти
🌭24❤‍🔥3🍓3
Все эти договоренности «сначала сделай XYZ — потом ЗП» — херня

В посте отвечу на комменты из прошлого поста. Погнали

1. Все эти договоренности «сначала сделай XYZ — потом ЗП» — херня

У друга был разговор с лидом, она сказала: давай запусти такие-то продукты, чтобы они стали бабки приносить, и поднимем ЗП. Полгода ебашил, сделал, принес ей цифры. Она — все круто, ты свою часть договоренности выполнил, но денег нет — сорян


Ответ:

Я считаю, что если ты не будешь прилагать усилий, то гарантированно не получишь повышение ЗП. А если попытаться, то ты лишь можешь попытаться его получить, но шанс есть

В любом случае ты поймешь, хочешь ли ты работать дальше в этой компании или нет

Т. е. я считаю, что так думать выгодно и стараться тоже выгодно (особенно на старте карьеры), потому что ты ускоряешь процесс принятия решения

Если бы ты не старался, то узнаешь о своем НЕПОВЫШЕНИИ через 2 года условно, а так ты постарался и узнал через полгода

Ну и если ты реально старался, то получил афигительный опыт, который потом можно раскешить - а если еще и сам продукт запускал то АХУЕТЬ КАК БЫ - ты уже сам можешь с этого заработать как предприниматель

——

2. С людьми вообще работать нет желания, ДРУГИХ ВАРИАНТОВ повышения НЕТ

Пришел на разговор, мне сказали: берешь ответственность за всех в команде, что они станут эффективнее работать, каждый. И тогда руководство подумает, как тебя отблагодарить. А я пришел как раз зафиксировать, что я могу улучшить / сделать именно сейчас и за какие деньги =(
С людьми вообще работать нет желания.
Что думаешь?


Ответ:

Думаю, ты сделал офигительную штуку, что сходил и понимаешь, что сейчас это для тебя не подходит

Я бы прям так и сказал руководителю: «Подумал над предложением и пока не готов лидить, подскажи, есть ли еще варианты поднять ЗП?»

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

А значит, ты трезво видишь всю картину

Что, мне кажется, гораздо лучше, чем думать, что повышение возможно, а потом через ГОД узнать, что НЕТ

——

3. Круто кнш, но денег сейчас буквально нет 🙂‍↔️ спасибо хоть не сокращают

Ответ:

Пока компания не банкрот, у нее есть деньги

Повысить ЗП можно всегда, это просто вопрос твоих усилий и времени — когда-то это сделать проще, когда-то тяжелее

Когда ахуеть как хочется повысить ЗП, то способ всегда найдется

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

—-

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

Но я то вижу кейсы, как ребята на нашей же менторской программы делают +100 ка к доходу... (а это мидлы и синьеры, с ЗП от 200 000)

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

И ты сам ТОЖЕ ТАК МОЖЕШЬ

И я бы искрене хотел, чтобы все читатели канал сделали миниум +50 000 к окладу в течении года

Да, это почти нереально, но это не значит что я не буду стараца для тебя

Кароче, ебать, я в тебя верю!
🌭36
Усиление AI должно усиливать продукт

Ну это в идеале...

Типа выпустил OpenAI X2 по полезности модель, бизнес получил X2 качество (желательно за те же деньги), потом получил X2 клиентов и потом X2 денег, а ты X2 зарплату (но это не точно)

Но по факту: X2 платим только за токены пока и удержать 100% КПД я не очень верю что получится, да даже 50% вряд ли будет...

НО!

Внедрять AI все равно везде будут в надежде конвертировать это в деньги

Можно даже бизнес открыть чисто на AI интеграциях 😁


P.S. если бизнес взлетит, возьми плз в долю на 1%
🌭18🤣5🍓2
Довели недавно трех ребят с менторской программы "до оффера"

НО!

Гораздо интереснее кейс с WB

Студент уже принял их оффер, но они ЗАМОРОЗИЛИ НАЙМ


И он остался в подвешенном состоянии...

Подождали неделю, а потом поняли, что нужно искать запасной вариант, так как WB пока не внушает доверия

Так что продолжаем поиск…

А с WB конечно остаются непонятки пока) И в целом мне кажется, вряд ли будут нанимать в ближайшие пол года

Для кого эта менторская программа:

* Java/Go/Python-разработчик с 3+ годами опыта по ТК РФ
* Если тебя сократили
* Улучшаешь резюме, а на собесы так и не зовут
* Устал проваливать техсобесы

Работаем по постоплате: платишь только в том случае, если устроим тебя на работу по твоим критериям

За подробностями можно написать Карине:
@Karina_algocode_io

Оценим текущую ситуацию и скажем, можем быть полезными или нет

Берем не всех
🌭28❤‍🔥6🤣1🍓1
Начинающего тим-лида заставляют приносить прибыль для повышения

Очень интересный кейс недавно попался

Я тим-лид в банке, но тем-лид такой самый начальный уровень, и типа мне всё время подсвечивает, что нужно приносить деньги компании, чтобы идти на 17-й грейд
И ТУТ ЕСТЬ НЕБОЛЬШОЙ ПОДВОХ

Во первых, тим лид как правило отвечает за техничку (чтобы команда довела все что нужно до прода), а есть продакты - они ресерчат активно рынок и забивают беклог фичами

НО!

Прежде чем начать делать продукт нужно посчитать его экономику (это Фаундер/CEO/Маркетологи/...)

ИТОГО

В таком случае ты совмещаешь дофига ролей: Маркетолог + Продакт + Тим Лид

Это не плохо само по себе - главное, чтобы компания это могла объяснить и выстроить понятный трек

А то если тебе просто говорят "приноси деньги тогда повысим" - оч странно
Особенно, если ты только начинаешь путь тим лида


В общем, пост к тому, что коммерция это отдельный скилл, который нужно качать

И если идешь в эту историю, то нужно быть готовым
🌭18
Самый худший способ сбора метрик в сервисе

Когда только начинал погружаться в observability, то любил нафигачить побольше метрик:

* метрика на число запросов к БД
* отдельно метрика на ошибку парсинга ответа от БД
* отдельно метрика на ошибку коннекта к БД
* …

В общем, на каждую ошибку делал свою метрику

И ЭТО ФИГОВО СЕБЯ ПОКАЗАЛО!

* код разрастался нереально
* алерты плодились как не в себя
* и т. д.

Но потом до меня дошло простое правило: метрика говорит, где примерно сломалось, а что именно сломалось, можно посмотреть в логах

Например:

* завести метрику на число ошибочных запросов к БД
* и отдельно метрику на число успешных запросов к БД

А когда прилетит алерт, смотреть по ЛОГАМ, ЧТО ИМЕННО это была за ошибка
с БД

P.S. А кому хочется поглубже, можно посмотреть на такие практики организации метрик:

* Four Golden Signals (Google SRE Book) - latency, traffic, errors, saturation
* RED - Rate, Errors, Duration. Для сервисов хорошо подходит
* USE (Brendan Gregg) - Utilization, Saturation, Errors. Для ресурсов: CPU и других


И бахни 🌭, если уже успел нафигачить мусорных метрик в своем сервисе
🌭43❤‍🔥9🤣5
Самый необычный завтрак

Знаю, что булочки посередине 😂, а вот что вокруг непонятно

Ровно такое же ощущение было когда только начал погружаться в AI

Выглядит красиво, а вот как максимально эффективно пользоваться - непонятно

Поэтому отправляюсь сам к менторам и сотрудников отправляю

Самое интересное что хочу собрать: реальные кейсы внедрения в бизнес и результаты внедрения + понять какие есть инструменты и практики сейчас для ускорения разработки (которые работают, а не только едят токены)

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

Самым сочным обязательно с вами поделюсь 🦉
Please open Telegram to view this post
VIEW IN TELEGRAM
🌭30
Пора разобраться: Deadlock vs Livelock

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

Так проще всего запомнить

Самый простой многопоточный псевдокод с дедлоком по версии AI:
Thread A:
lock(A)
wait lock(B)

Thread B:
lock(B)
wait lock(A)


Livelock - от слова live, но по факту та же дичь что и дедлок, только в профиль...

По сути, код что-то активно делает, но не продвигается

Связано это, как правило, с многопоточкой и вызовом в цикле TryLock и бесконечными неудачами этой операции

Самый простой многопоточный псевдокод с лайвлоком по версии AI:

Поток A:

while true:
захватить lock_A

if lock_B свободен:
захватить lock_B
выполнить работу
выйти

освободить lock_A

// "уступаем" потоку B


Поток B:

while true:
захватить lock_B

if lock_A свободен:
захватить lock_A
выполнить работу
выйти

освободить lock_B

// "уступаем" потоку A


P.S. Есть еще Starvation - если будет интересно, можешь у GPT спросить

По сути - это когда поток бесконечно ждёт ресурс, потому что другие потоки постоянно получают его раньше

Я лично с таким не встречался
🌭17
Все, официально кризис в айти закончен - расходимся 😂

P.S. мое уважение - пойду учить физику на всякий
❤‍🔥46🌭11🤣6🍓2
Пс, хочешь больше зарплату?

Я тоже, если надешь где - расскажи плз

А вообще вот такая мысль: в России в найме нельзя стабильно дофига получать без навыка управления людьми

Дофига = более 2М на руки в месяц
🤣21🌭12❤‍🔥1🍓1
Задачка на подумать из продакшена, так сказать

Каждый подписочный бизнес зарабатывает на продлениях

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

Потому что чем лучше материал, тем убыточнее бизнес будет по факту (да, ты можешь потом корешам порекомендовать, но таких рекомендаций мало на общем фоне)

Я уже долго решаю эту задачку с algocode.io и, кажется, подобрался к решению

Интересно, как бы эту задачку решал ты)

Идеальное решение: когда бизнесу выгодно, что человек доходит до конца и выгдно, чтобы он решал все курсы быстро
🌭14
Please open Telegram to view this post
VIEW IN TELEGRAM