Python ментор
548 subscribers
21 photos
2 files
13 links
¡Hola, 👋! Я - Марк, бекенд-разработчик с более чем 6 годами опыта в it и менторстве. Прошел более 100 технических интервью и помог 10 людям найти первую работы в IT.
Я создал этот канал, чтобы делиться опытом и помогать!

Контакт 👉 @MarksAngeles
Download Telegram
Python ментор
#interview, #python, #asyncio, #multiprocessing, #multithreading Совсем недавно я собеседовал трех джунов и, конечно, спрашивал про асинхронность. Спойлер: никто не смог преодолеть этот вопрос, хотя, ребята толковые, и явно что-то читали. Я понял, что у многих…
#interview, #multiprocessing, #multithreading

Про процессы и потоки

Важно: ☝️ Эти понятия — общие и применимые не только к Python. Понятия "процесс" и "поток" в операционных системах почти не отличаются от тех, что используются в Python.

Когда вы запускаете любую программу на своем компьютере, например, Word, создается процесс. Операционная система выделяет ресурсы для этой программы, определяя, сколько оперативной памяти и времени процессора ей нужно. Если вы запустите еще одну программу, например, Zoom, то ваш Word не будет знать об этом, да ему и не надо! У каждого процесса есть свои ресурсы, и у Zoom'а тоже появляются свои.

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

Когда мы запускаем процесс Word, внутри него сразу создается поток, который выполняет всю работу. Однако Word — это сложная программа, и внутри нее создается множество потоков. Например, один поток может следить за правописанием, а другой может отправлять ваши личные данные Microsoft 😮️️️️️️. И интересно то, что эти потоки знают о существовании друг друга. Например, поток, отправляющий ваши личные данные, знает от другого, что в школе вы учились не очень и у вас куча орфографических ошибок. Потоки делят между собой одну область памяти, поэтому знают о существовании друг друга!

Обратите внимание на иллюстрацию (личного производства 😎)! Процессы — это большие стрелочки, которые не делятся со своими соседями памятью. А потоки — это маленькие стрелочки внутри процесса, которые выполняют всю работу и могут обмениваться информацией в одной области памяти.

На интервью этих тезисов хватит с головой, да и вообще полезно знать как работает штука, которую вы используете каждый день
🔥13👍72🤝2😱1😎1
Python ментор
#interview, #multiprocessing, #multithreading Про процессы и потоки Важно: ☝️ Эти понятия — общие и применимые не только к Python. Понятия "процесс" и "поток" в операционных системах почти не отличаются от тех, что используются в Python. Когда вы запускаете…
#interview, #multiprocessing, #multithreading

Поехали дальше! Нужно запомнить вот такой факт: существует 2 типа задач в программировании:

- задачи ввода-вывода: io-bound
- задачи вычисления: cpu-bound

Почему это важно 🤨?
С помощью этой нехитрой информации появляется возможность ускорить ваш код в разы😲! И я, конечно, расскажу потом как это сделать, но сперва теория!

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

А вот io-bound задачи ничего не делают… Они просто ждут, пока кто-то другой даст им какую-то информацию. Например, они могут ждать ответа от базы данных, ждать пока что-то скачается из интернета, неважно! просто ждать пока кто-то другой что-то сделает 😴🌴

А вот и все. Для нас важно то, что для ускорения cpu-bound задач в python нам нужно применять многопроцессность, а для io-bound задач - многопоточность (смотрите предыдущий пост). В следующий раз, покажу как это делать на практике 😉
👍12🔥72😱2💯1
Python ментор
#interview, #multiprocessing, #multithreading Поехали дальше! Нужно запомнить вот такой факт: существует 2 типа задач в программировании: - задачи ввода-вывода: io-bound - задачи вычисления: cpu-bound Почему это важно 🤨? С помощью этой нехитрой информации…
#interview, #multithreading

Пришло время для примеров, и начнем с того, как применять многопоточность! В Python, для этого обычно используется модуль threading, однако в большинстве случаев более удобным выбором будет использовать concurrent.futures.

Давайте рассмотрим пример, где мы выполняем запросы на веб-сайт (в данном случае, Яндекс).Я назвал эту функцию io_bound, потому что сделать HTTP-запрос является наиболее типичной io-bound задачей. На первой картинке мы выполняем 10 запросов последовательно, а на второй - используем многопоточность! ThreadPoolExecutor создает определенное количество потоков (в данном случае 5, что регулируется параметром `max_workers`), выполняет задачи асинхронно в разных потоках и дожидается, пока каждый поток завершит работу.

Время выполнения кода на первой картинке составляет 4 секунды, тогда как на второй - менее секунды 😲! Ваши результаты могут отличаться.

Буквально за две строчки мы получаем увеличение скорости выполнения нашего кода в 4-5 раз. Почему так происходит? Как упомянуто выше, выполнение HTTP-запроса является io-bound задачей, и большую часть времени мы ожидаем ответа от сервера Яндекса. Пока один поток ждет, другой может выполнить еще один запрос и передать управление следующему потоку. Таким образом, код с потоками не ждет ответа сервера, а выполняет запросы, пока есть доступные потоки.

Попробуйте написать такой код сами, поиграйте с параметром max_workers, сравните время выполнения 🧑‍💻!

В следующем посте разберем уже работу с несколько процессами❗️
👍13💯5🤝41😱1
Python ментор
#interview, #multithreading Пришло время для примеров, и начнем с того, как применять многопоточность! В Python, для этого обычно используется модуль threading, однако в большинстве случаев более удобным выбором будет использовать concurrent.futures. Давайте…
#python, #multiprocessing

За многопроцесность, в python отвечает модуль multiprocessing, ничего устанавливать не надо, просто импортируем.

Внимание на картинки❗️У нас есть какая-то задача cpu_bound, она считает сумму всех чисел от 0 до number и нагружает процессор.Циклы и математические операции - это все cpu-bound задачи. В самом по себе цикле, нет ничего необычного и это не должно стать проблемой для вашего компьютера. Но если в цикле больше 100 миллиона итераций (как в примере) выполнение такой функци может занять существенное время!

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

А на второй картинке пользуемся multiprocessing.Pool он, создает несколько процессов (регулируется параметром processes ) и каждый процесс выполняет свою cpu_bound задачку.

В данном случае второй код работает примерно в 2 раза быстрее, проверьте сами! Это происходит потому что потому что задачи выполняются параллельно и независимо друг от друга!

Буду с вами честен, на практике этот модуль удается применить крайне редко, лично я помню только 2 случая за 6 лет, когда я смог таким образом ускорить программу. Но это не значит, что модуль multiprocessing бесполезен! Распространенный пример: запустить какой-то процесс в фоне, чтобы не блокировать сложной cpu-bound задачей ваш код. Я покажу вам супер классный пример использования процессов в питоне, когда мы будем разбирать асинхронность!
👍12💯3🤝3👨‍💻1
Python ментор
#python, #multiprocessing За многопроцесность, в python отвечает модуль multiprocessing, ничего устанавливать не надо, просто импортируем. Внимание на картинки❗️У нас есть какая-то задача cpu_bound, она считает сумму всех чисел от 0 до number и нагружает…
#multithreading #multiprocessing

Про GIL

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

Это особенность именно питона, тут не могут работать несколько потоков одновременно! Это происходит потому что в интерпретаторе есть код, который называется GIL(global interpreter lock). Он делает так, чтобы в один момент времени, только один поток мог иметь контроль над интерпретатором.

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

Погоди, шеф, а почему же запросы тогда ускорялись 🧐? Мы использовали потоки, чтобы ускорять http-запросы, помните? Дело в том, что в этом случае работает также, только один поток в один момент времени, просто это io-bound задачи, они большую часть времени ждут! И пока один поток ждет, включается другой, делает запрос и также ждет, передавая управление другому и так далее. Поэтому такого рода задачи действительно эффективно решаются с помощью многопоточности.
👍14🔥5🤯3💯3😱1🤝1
Я разобрал основные темы, которые вас могут спросить на собесах про потоки/процессы в python. Посты можно читать отдельно, а можно по порядку, там даже прослеживается сюжет 😅

Тут будет небольшое оглавление, для удобства:

1. Потоки и процессы. Что это такое и в чем отличие.
2. Виды задач. io-bound и cpu-bound
3. Как применять многопоточность
4. Как применять многопрцессность
5. Почему в python не работает многопоточность для cpu-bound задач. GIL

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

А пока можете поставить мне класс 👍 за иллюстрации собственного производства 😎 Дальше больше!
👍44🔥4😱421🤩1🐳1💯1😎1
old.pdf
86.2 KB
Разбор резюме
#resume

Как ментор, я достаточно часто разбираю резюме и хочу показать вам недавний пример

Но перед этим, 2 занимательных факта, которые всегда надо держать в голове при составлении резюме:

- На прочтение одного резюме у эйчара уходит в среднем около 20 секунд. Вывод очевидный: нужно сокращать ваше резюме, чтобы его не выкинули сразу по причине — много букв 😢
- Эйчар, который просматривает и отбирает резюме, в 95% случаев вообще ничего не понимает в программировании. Он ищет в вашем резюме ключевые слова, которые указаны в описании вакансии. Значит эти ключевые слова нужно в резюме засунуть 🤫

Хайлайты того, что мы сделали:

- Вставили фотку — маст-хэв для поиска работы в России
- В описании каждого места работы указали не просто что делали, а какие достижения у нас были
- Постарались сократить резюме до адекватного количества символов
- Замаскировали курс практикума как реальный опыт, который находится под NDA (договор о неразглашении).
- Сократили список ключевых слов до самых частотных

Позже, я поделюсь с вами конверсией по старому и новому резюме, должно быть интересно 🤓
🔥16👍8😱31🐳1💯1
Python ментор pinned «Я разобрал основные темы, которые вас могут спросить на собесах про потоки/процессы в python. Посты можно читать отдельно, а можно по порядку, там даже прослеживается сюжет 😅 Тут будет небольшое оглавление, для удобства: 1. Потоки и процессы. Что это такое…»
Ты, наверное, в курсе, что есть куча каналов с задачками по python.

У меня есть кое-что покруче: абсолютно бесплатный бот с задачками по python для дополнительной подготовки к интервью!

Подрубайтесь: t.me/python_problems_bot?start=python_dev_mentor 😮

Также, если у тебя есть желание и скилы разработать фичу в боте 💪 - пишите мне @MarksAngeles! Расскажи обязательно чуть-чуть про себя что знаешь-умеешь.
Я познакомлю тебя с тем, как происходит реальная разработка и проведу бескомпромиссное код-ревью!

Требования: нужно знать что такое python и базы данных. Количество мест на такую движуху: 1! 😏
Please open Telegram to view this post
VIEW IN TELEGRAM
13😱4🤩3💯2👍1
Доброе утро 👋
Я решил попробовать публиковать обучающий контент в виде маленьких статей 👉
Для начала выбрал несложную тему, но придумал для нее крутое авторское решение

Заходи быстрее читай и пробуй это на практике
👇👇👇
https://telegra.ph/Udalenie-povtoryayushchihsya-ehlementov-v-spiske-11-28
👆👆👆
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32👍12🫡32💯1
Python ментор pinned «Ты, наверное, в курсе, что есть куча каналов с задачками по python. У меня есть кое-что покруче: абсолютно бесплатный бот с задачками по python для дополнительной подготовки к интервью! Подрубайтесь: t.me/python_problems_bot?start=python_dev_mentor 😮 Также…»
Вышло мое первое видео на ютубе!

❗️Кто не видел — посмотрите❗️

Где-то нервничал 🫣 Где-то не сказал то, что нужно было сказать 🤥 А что-то вообще ляпнул лишнее 😅

Но как первая попытка, считаю, достойно 💪! Спасибо Артему за интервью, а Антону за возможность выступить на его канале!

В новом году хочу начать пилить видосы на ютуб, вдруг попрет! Фишкой канала будет: «рассказывать суть, без лишней воды, что реально нужно для собеса/работы»

https://youtu.be/xLHeKI2y-VE?si=T0T7lQO53iUDqAmI
🔥405🎉3👍2😱2👏1
Python ментор
new.pdf
#resume

Я обещал поделиться результатами конверсии по старому и новому резюме ученика, вот, возвращаюсь!

Работу искали в “пассивном” режиме 🏝 Сами не откликались, резюме в выдаче не поднимали, просто ждали пока нас позовут на собесы 🥺!

По старому резюме: нам никто не написал, показы есть, но в просмотры, а тем более в приглашения не конвертируются(
В новом: кратно больше показов, позвали на 4 собеседования, и уже есть 1 оффер на норм чек! 😮

Прикладываю скрины по конверсии за последнюю неделю. Думаю, если бы мы откликались на вакансии и поднимали резюме, то сейчас была бы уже пачка офферов! 😒

Советую помнить такую штуку: у резюме одна единственная цель – получить приглашение на собес! Когда cоставляете свое – держите это в голове! 😏
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥305👍5🤝3
Когда искать работу?

Ученик недавно меня спросил: «Когда лучше искать работу? Хочу откликнуться и сразу попасть в классное место!»

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

С ноября по январь (это сейчас) – почти никто никого не ищет 😢
У всех куча предновогодних дел, эйчары озабочены корпоративом, а у команд нет времени на новичков.
Есть исключения — вакансии, которые не смогли закрыть за год. Если вам срочно нужна работа — это не самый плохой вариант, но супер клевых вакансий вы там не найдете 👉

С февраля по май самый “жаркий” сезон
Бюджет утвержден, командам нужны свежие силы, чтобы закрывать всякие там “цели команды” и на офферы стараются не скупиться 🤑

С июня по август — все отправились на моря и отдыхают 🏝️. Мне кажется, что просто никто не хочет работать в это время, вот и вакансий немного.

С конца августа по октябрь — это второй жаркий сезон. Рекрутам нужно закрывать KPI, а то там премий не будет, да и вообще беда.
Вакансий много, и есть даже вариант залететь после курсов, потому что денежная мотивация в виде премий за закрытые вакансии, сильнее чем установка: “после курсов ничего не знают нам нужно 10 лет опыта” 🤯

Это то, что мне рассказали знакомые рекрутеры, да и сам я наблюдаю подтверждение на практике.
Поэтому, если именно сейчас не получается найти клевое место — выдыхаем и заражаемся к весне, чтобы сразу попросить x2 к зп 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
👍38🔥87😱1🐳1
Записал свой первый видосик. Получилось что-то из разряда: "Проблемы с доступом к джой казино" 😠

Однако я, примерно, 20 раз уже рассказывал ребятам, которые делают у меня проекты: как подключиться к нужному интерпретатору в pycharm. Теперь буду просто скидывать это видео!

Посмотрите тоже, вдруг сами сталкивались с такой проблемой 😅
Please open Telegram to view this post
VIEW IN TELEGRAM
👍247🔥4💯3
Перед Новым годом куча всего навалилось и совсем нет времени что-то написать в свой телеграмм канальчик. Хотя, скоро я планирую выкатить классный анонс для тех, кто хотел поучаствовать в проекте с моим наставничеством! 🙂

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

Поделитесь своей музыкой, которую ставите на фоне, пока занимаетесь чем-то, мне (а может не только мне) будет прикольно послушать 🍸
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥64
Всем привет 👋!

Я хочу анонсировать набор на новый проектик! У меня есть идея, которую хочется реализовать. А как бонус, обучить парочку людей, делать реальные вещи!

Зачем это тебе:
👉 Я постараюсь дать тебе максимум знаний, через код ревью и персональное менторство
👉 У тебя появится опыт работы в “реальных” условиях стартапа
👉 Если мы спешно что-то сделаем, то я помогу составить тебе резюме и обыграть эту историю, как реальный продакшн опыт!

Зачем это мне:
👉 Мне действительно хочется сделать этот проект. А в команде как-то веселее)
👉 Я люблю учить людей, это дает мне сил, чтобы жить дальше!

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

📝 Написать мне в личку что умеешь, что знаешь и почему хотел бы поучаствовать (tg:MarksAngeles)

📞 Мы созвонимся, я проведу маленькое интервью. По результатам мы решим — подходим ли мы друг другу или нет. Если даже не получится его пройти, ты все равно получишь первый опыт собеседований!

❗️Для меня важно, чтобы ты уже умел писать на python, и не пугался от слов HTTP и база данных! До встречи 🤝
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7415🔥3👏1