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

Контакт 👉 @MarksAngeles
Download Telegram
#interview, #python

По моему опыту, ни одно собеседование на python-разработчика независимо от уровня не обходится без вопроса, про изменяемые/неизменяемые типы данных 😮.

Звучать вопрос может по-разному:

• Какие типы данных есть в python?
• Какие типы данных изменяемые, а какие неизменяемые?

На интервью от вас ждут четкого ответа:

Все в python является объектом, объекты могут быть изменяемые и неизменяемые.
К неизменяемым относятся:
• численные значения (int, float),
• логический тип (bool),
• кортежи (tuples)
• строки (strings). Тут не должно быть путаницы, в питоне строки – это не массив символов, как в других языках программирования. При добавлении символа в конец строки, создается новый объект! Многие интервьюеры любят подловить на этой теме.

К изменяемым относятся:
• списки (list)
• словари (dict)
• множества (set)
👍10🔥7💯41🤔1
Python ментор
#interview, #python По моему опыту, ни одно собеседование на python-разработчика независимо от уровня не обходится без вопроса, про изменяемые/неизменяемые типы данных 😮. Звучать вопрос может по-разному: • Какие типы данных есть в python? • Какие типы данных…
#interview, #python

Зачем нужно знать про изменяемость объектов в python?

Сразу закономерный вопрос: “зачем вообще все это нужно?” И опытные интервьюеры также могут спросить это у вас 🧐. Мне очень нравится этот вопрос, он показывает, что человек не просто зазубрил правильный ответ про типы данных, а понимает почему это важно ☝️!

Без лишних слов! Этот пример иллюстрирует все очень наглядно. Смотри на картинки!

Тут сразу несколько важных вещей:
• Изменяемые типы данных передаются в функцию по ссылке, а значит функция их может модифицировать!
• Любой глобальный изменяемый объект может измениться во время выполнения программы и с этим нужно быть очень аккуратным!

На собеседовании такого ответа будет боле чем достаточно 😉
9👍6😱3🔥2
Python ментор
#interview, #python Зачем нужно знать про изменяемость объектов в python? Сразу закономерный вопрос: “зачем вообще все это нужно?” И опытные интервьюеры также могут спросить это у вас 🧐. Мне очень нравится этот вопрос, он показывает, что человек не просто…
#interview #python

Как понять, тип данных изменяемый или неизменяемый?


Это мой любимый вопрос по этой теме 🤓
Тут важно знать одну вещь: в python существует функция id(), которая возвращает идентификатор объекта в виде целого числа. Это целое число является адресом места хранения объекта в памяти.

• Попробуем применить ее на неизменяемом объекте типа int:
>>> num = 1
>>> id(num)
4367712496
>>> num += 1
>>> id(num)
4367712528


Видите 👀? Адрес объекта поменялся! Это значит, что num после прибавления 1 теперь совершенно другой объект, с другим местом в памяти 😮!

• Теперь изменяемый тип данных list:
>>> nums = [1]
>>> id(nums)
4373021952
>>> nums += [1]
>>> id(nums)
4373021952


Ага! А тут адрес не изменился! Вывод достаточно очевиден: этот тот же самый объект с тем же самым местом в памяти, и изменился сам объект, а не его адрес!

Вот и все, теперь вы полностью готовы к любым вопросам на собеседовании про типы данных в python, удачи 🍀
👍8💯7🔥32🤝1
#interview, #python, #asyncio, #multiprocessing, #multithreading

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

- разница между потоком и процессом
- что такое io-bound и cpu-boud задачи
- разница между многопоточность и асинхронностью
- Да кто этот ваш GIL? И где он тут?
- Ну и напоследок, что же это за асинхронность такая? С реальными примерами!

Все это мы с вами разберем в ближайшее время, так, чтобы вы поняли, как устроено конкурентное программирование в python. Ну и конечно, все темы я разбираю с позиции человека, который проходит интервью, чтобы вы, смогли извлечь максимум пользы!
11👍7🔥5🤩1
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. Посты можно читать отдельно, а можно по порядку, там даже прослеживается сюжет 😅

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

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

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

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