Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 2 месяца, 3 недели назад
Новые и перспективные Web3 игры с добычей токенов.
Чат: https://t.me/Crypto_Wolf_Chat
Правила чата смотрите в описании чата.
Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118
По теме сотрудничества: @Zombini
Last updated 2 месяца, 1 неделя назад
Перед тем как переходить с уровня ОС на уровень приложения (рантайм, виртуальные машины ЯП) отдельным постом расскажу зачем я посвятил такое количество постов внутренностям с которыми многие редко сталкиваются, а возможно и вообще впервые увидели.
Дело в том что производительность это довольно сложно и складывается она из большого количества факторов. И для того чтобы грамотно бенчмаркать и профилировать очень полезно знать из чего же сложилась итоговая цифра.
К тому же, я посчитал важным показать внутренности на уровне ОС для того чтобы мы перейдя на уровень ЯП могли посмотреть во что именно превращаются красивые инструкции на языке Go / Python / Java или например Elixir / Rust. А учитывая то что мы рассмотрели на примере Linux - всё есть процессы. Нет никакой секретной магии в языках программирования делающей что-то быстрее или лучше. Всё везде одинаково так как языки для взаимодействия с ОС используют одни и теже примитивы - системные вызовы ?
В следующих постах мы как раз поднимемся на уровень выше и посмотрим какие есть примитивы в языках программирования для достижения высокой производительности и есть ли ограничения.
Всем спасибо что читали, до встречи в новых постах!
CPU, Memory Models, Concurrency, Multiprocess, Multithreading и Async. Часть 5. Потоки. Начало. Продолжаем разговор о конкурентности. Сегодня разбираемся с потоками. Начнем с основ и базовых определений. Пото́к выполне́ния (тред; от англ. thread — нить)…
CPU, Memory Models, Concurrency, Multiprocess, Multithreading и Async. Часть 3. Процессы. Начало Сегодня поговорим о процессах операционной системы в контексте многозадачности. Процесс - это экземпляр компьютерной программы. Если компьютерная программа представляет…
Raft - Understandable Distributed Consensus
Последнее время я всё больше и больше погружаюсь в те самые Distributed Systems, которые уже несколько лет на хайпе, о которых говорят на каждом system design интервью и конференции.
Одной из важнейших частей дисциплины является достижение консенсуса - согласованности данных среди участников распределенной системы.
Консенсус достигается с помощью софта реализующего конкретный протокол.
В качестве примеров такого софта можно привести:
Kafka + kraft
ClickHouse + CHKeeper (raft)
Kubernetes + etcd (raft protocol)
Cassandra + Paxos protocol
Ну и само собой куда же без криптовалют и технологии блокчейн использующих протоколы консенсуса для операций.
Как видите примеров много и используются они в довольно популярных технологиях.
Отличный материал для погружения в эту довольно обьёмную тему это Raft - Understandable Distributed Consensus - интерактивный гайд с анимациями, который шаг за шагом посвятит вас в основные этапы работы алгоритма на примерах.
https://thesecretlivesofdata.com/raft/
P.S. Расскажите о своем опыте работы с алгоритмами консенсуса? Неважно по работе или в пет проджектах?
Ребята, это была жесть. В этом году меня в ШАДе не будет?
Слишком сложно для меня, если с программированием я что то смог наковырять то математические задачки мне не поддались. Нужно больше готовиться. Наскоком не получилось.
Что происходит при старте терминала?
В процессе работы над плейбуком из прошлого поста мне волей и не волей пришлось погрузиться глубже в то как именно происходит установка утилит, какие файлы редактируются и какие переменные окружения проставляются.
Да, я знал со времен работы на Windows что есть магическая переменная PATH которая отвечает за поиск по набору директорий любой вводимой команды.
Да, я знал что например в домашней директории на Linux есть файлы занимающиеся настройкой переменных окружения.
Но вот в процессе создания плейбука я заметил что в некоторых случаях эти файлы остаются нетронутыми, но при этом всё работает, магия не правда ли?
Поэтому сегодня я поделюсь с вами заметкой в которой описаны все файлы участвующие при старте терминала помимо тех что лежат в домашней директории (bashrc, bash_profile)?
Советую посмотреть, особенно если при установке утилит ловите себя на мысли что не понимаете зачем просят что либо редактировать (в 99% это именно файлы из статьи)?
Ну и заодно можете пройтись по своей локальной машине и узнать сколько всего интересного делает ОС перед тем как показать заветный терминал.
P.S. Про переменную PATH https://www.ibm.com/docs/fi/aix/7.1?topic=accounts-path-environment-variable
The Deadlock Empire - интерактивный гайд по изучению конкурентности и примитивов синхронизации
Еще одна находка для тех кто постигает фундаментальные основы программирования.
Цикл задачек где пользователь это планировщик задач (runtime языка программирования) в распоряжении которого несколько потоков. Цель - находить ошибки и неопределенное поведение.
Примеры на языке C# но думаю это не должно быть проблемой даже если вы не используете его, код довольно простой с точки зрения синтаксиса.
P.S. Сегодня с утреца немного залип и испытал огромное удовольствие?
deadlockempire.github.io
The Deadlock Empire
Slay dragons, learn concurrency! Play the cunning Scheduler, exploit flawed programs and defeat the armies of the Parallel Wizard.
Классная статейка про то как вычитывать JSON из HTTP Body с помощью стандартной библиотеки Go c разбором возможных корнер кейсов и способами их обработки.
Ньюансов больше чем может показаться на первый взгляд.
Отличная материал для погружения вглубь в такой, казалось бы для многих очевидной теме?
Есть ли у вас в закладках избранные статьи на тему Go + JSON? Присылайте в комментарии)
www.alexedwards.net
How to Parse a JSON Request Body in Go - Alex Edwards
Как я в первый раз попробовал покорить Big Tech
Продолжаю цикл о постов о моей карьере. Прошлый пост закончился на этапе как я уволился с позиции тимлида Ruby команды и решил покорять Big Tech. И получил приглашение пособеситься в Яндекс Такси на позицию Python разработчика. Расскажу "без купюр" о том как все происходило, запасайтесь попкорном?
? Скрининг с рекрутером
В назначенное время мы созвонились с рекрутером. Меня опрашивали по списку: стандартные вопросы о структурах данных и алгоритмах (какие знаю, какая сложность операций). По итогу получил положительный фидбэк. Далее требовалось согласовать даты следующих собесов. Их должно было быть 4. И все на решение задачек. Меня это не смутило, я это воспринял как вызов. Попросил назначить дату через 3 недели. Аргументировал это тем что мне нужен тайминг освежить знания и попрактиковаться.
? Подготовка к интервью
В условиях ограниченного времени я сфокусировался на самых распространенных темах и паттернах решения задач. В этом мне помогли подборки литкода:
Top Interview Questions - Easy CollectionTop Interview Questions - Medium Collection
? Цикл интервью
Примерно раз в неделю у меня были собеседования. На каждом нужно было решить 2 (а где-то даже 3 задачи). Всё шло хорошо. Но на последнем собесе я не смог решить последнюю задачу. Она была на динамическое программирование. Плюс интервьюер очень отличался от тех что были ранее, максимально отрешенный, отвечал односложно, подсказку вытянуть было нереально.
После собеседования я получил фидбэк что собес не засчитан. НО мне предложили пройти его еще раз через месяц, так как все предыдущие секции были пройдены очень уверенно. Я согласился, уж очень был силен спортивный интерес + не хотелось бросать на полпути.
Настал час X, я пришел на собес, быстро нашел общий язык с интервьюером и мы решили все задачки. Я доволен, понимаю что это победа. Рекрутер написал в ЛС что всё круто, погнали выбирать команду.
? Фиты с командами
Первые фиты у меня были с командами непосредственно в Яндекс Такси. Обсуждали опыт, технологии и потенциальные условия сотрудничества. И на этих фитах я увидел первый красный флажочек. На каждом фите мне задавали 2 вопроса:
- Умею ли я круто писать на C++
- перееду ли я в Москву.
Я отвечал отрицательно на оба.
И во многом из за этих 2х пунктов команды меня отклоняли. Для справки: перед алгособесами я уточнял - ок что я буду писать на Python и работать из СПБ? Мне ответили - да.
В общем пройдя несколько фит секций я слегка опешил, рассказал рекрутеру об этой ситуации. Она буквально мне сказала следующее - Выбирай любую вакансию на Python с сайта Яндекса я устрою собес.
И тут Остапа понесло :). Я собеседовался в инфру, самодвижующиеся машины, в супер сложные направления типа RnD. И понял что просто слабоват для таких направлений. Но мне было очень интересно.
? OFFERПо итогу я получил оффер от Яндекс. Маркета на позицию Data Engineer. И он был на 30% ниже суммы которую я обозначил перед собеседованиями. С учетом того что я довольно сильно ужал свои финансовые аппетиты ради смены стэка и не претендовал на горы денег увидев такие цифры в оффере я опешил и понял что из принципа не приму его.
Торговаться со мной не стали, лишь пару раз попытались переубедить словами в стиле "Это же Яндекс, ты многое потеряешь, такого опыта как у нас нигде не получить". И в этот момент остатки пелены спали с моих глаз.
? Итоги
Несмотря на то что я так и не устроился работать в Яндекс, я не жалею о том что согласился на такой долгий процесс собеседований. Это был опыт который никакими курсами и книгами я бы не смог получить. Благодаря ему с меня спали розовые очки и я стал более прагматичен и стал лучше понимать чего же мне хочется, стал более осознанным чтоли. Без этого неудачного опыта были бы невозможны будущие успехи при собеседованиях в другие топ компании РФ и зарубежом.
Спасибо что читали, надеюсь что было интересно! Расскажите в комментариях о своем опыте интервью в Big tech?
? Изучение Python. Часть #3. Concurrency
Продолжаю цикл постов о том как изучал Python. Сегодняшний лот - конкурентность(многопоточность / мультипроцессинг / асинхронщина).
Основы по этой теме я изучил в университете, а практиковался уже когда работал на Ruby (в Купибилете бэкэнд был написан поверх асинхронной библиотеки).
При изучении аналогичной темы в Python мне было достаточно лишь грамотно провести параллели между абстракциями. И помогли мне в этом великолепные бесплатные статьи с сайта superfastpython
https://superfastpython.com/learning-paths/
Будучи ментором заметил что у начинающих специалистов возникает довольно много вопросов по этой теме, несмотря на обилие ресурсов в сети.
И написал на Хабр супер короткую заметку Практический гайд по процессам и потокам (и не только) в Python. Теперь перед любыми консультациями скидываю её ученикам, и мы созванивались только при условии что даже она не смогла помочь.
Bonus: В прошлом году у меня была мысль сделать цикл постов в виде задачек и решать их вместе с вами. В итоге я придумал задачку на многопоточность и нашел неочевидное поведение Python. Так я получил полноценную учетку на хабре? И в дополнение от учеников получал отзывы, что мои статьи на хабре читали даже их интервьюеры☺️
Расскажите в комментариях о вашем опыте работы с Concurrency, мне будет очень интересно ознакомиться)
Super Fast Python
Start Here - Super Fast Python
Python concurrency learning paths that you can use to get started and get really good at threading, multiprocessing, and asyncio.
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 2 месяца, 3 недели назад
Новые и перспективные Web3 игры с добычей токенов.
Чат: https://t.me/Crypto_Wolf_Chat
Правила чата смотрите в описании чата.
Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118
По теме сотрудничества: @Zombini
Last updated 2 месяца, 1 неделя назад