![Артём Шумейко](/img/default-banner.jpg)
- Видео 74
- Просмотров 2 216 853
Артём Шумейко
Россия
Добавлен 19 мар 2018
Привет, друзья! Меня зовут Артём Шумейко. Я Senior Python Backend разработчик в компании "Самокат". На этом канале я помогаю разработчикам улучшать хард скиллы и развивать карьеру. По моим видео ты станешь крепким разработчиком и начнешь зарабатывать больше. Подпишись 🤟🏻
Сотрудничество: телеграм @artem_shumeiko_support или help.team.artem.shumeiko@gmail.com
Сотрудничество: телеграм @artem_shumeiko_support или help.team.artem.shumeiko@gmail.com
Реальное ЛАЙВКОДИНГ собеседование JUNIOR Python разработчик
Настоящее собеседование на Junior Python с зарплатой 100.000 рублей.
Первая часть собеседования: ruclips.net/video/6-xrwyDXGE4/видео.html
📚 Забирай гайд для подготовки к алгоритмическому собеседованию в моем боте: t.me/ArtemShumeikoBot
💡 Заходи в тренажёр для подготовки к техническому собеседованию Солвит: clck.ru/3BQNuoв
Пишу про IT и разработку в телеграм канале - подписывайся: t.me/artemshumeiko
Доступ к моим собеседованиям и закрытым материалам здесь: boosty.to/artemshumeiko
0:00 - Что вас ждет
0:45 - 1 задача (легкая)
6:43 - Определяем алгоритмическую сложность
8:58 - 2 задача (средняя)
12:44 - Момент ступора...
16:06 - 3 задача (самая сложная)
24:23 - Что нужно говорить вслух
31:48 - Что важно у...
Первая часть собеседования: ruclips.net/video/6-xrwyDXGE4/видео.html
📚 Забирай гайд для подготовки к алгоритмическому собеседованию в моем боте: t.me/ArtemShumeikoBot
💡 Заходи в тренажёр для подготовки к техническому собеседованию Солвит: clck.ru/3BQNuoв
Пишу про IT и разработку в телеграм канале - подписывайся: t.me/artemshumeiko
Доступ к моим собеседованиям и закрытым материалам здесь: boosty.to/artemshumeiko
0:00 - Что вас ждет
0:45 - 1 задача (легкая)
6:43 - Определяем алгоритмическую сложность
8:58 - 2 задача (средняя)
12:44 - Момент ступора...
16:06 - 3 задача (самая сложная)
24:23 - Что нужно говорить вслух
31:48 - Что важно у...
Просмотров: 6 184
Видео
Пишем Python Чат Бота за 30 минут
Просмотров 5 тыс.21 день назад
Чат Бот с искуственным интелектом - всего за 30 минут на Python. 💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡 Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfekVH47 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot Ссылка на репозиторий: g...
S3 хранилище - Лучший способ хранить файлы на бэкенде | Как работать с S3 через Python
Просмотров 40 тыс.28 дней назад
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡 S3 - один из самых популярных способов хранить файлы на Backend'е. Расскажу, что это и как работать с S3 хранилищем. Хранилище S3 из видео: slc.tl/wo36m Подробнее об акции с кэшбэком на S3: slc.tl/zbcv0 Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfe...
9 причин учить FastAPI в 2024 - Лучший фреймворк на Python?
Просмотров 6 тыс.Месяц назад
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡 Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfekVH47 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot Экосистема FastAPI в PDF формате и другие полезности в тг-боте: t.me/ArtemShumeikoBot Пиш...
Как реально ВЫРАСТИ до Middle/Senior? Отличия Junior, Middle и Senior Backend разработчиков
Просмотров 15 тыс.Месяц назад
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡 Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfekVH47 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot Пишу про свой стартап для подготовки к собеседованиям, рынок труда и способы развития раз...
Реальное Собеседование на Junior Backend разработчика - Это нужно знать!
Просмотров 48 тыс.Месяц назад
💡Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT💡 Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfekVH47 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot Пишу про свой стартап для подготовки к собеседованиям, рынок труда и способы развития разра...
Крутейшие ИИ Картинки через Python | Streamlit + Replicate
Просмотров 3,8 тыс.Месяц назад
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡 Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfekVH47 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot Пишу про свой стартап для подготовки к собеседованиям, рынок труда и способы развития раз...
Дженерики в Python 3.12 - Обзор и лайфхаки
Просмотров 9 тыс.Месяц назад
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡 Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfekVH47 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot Пишу про свой проект для подготовки к собеседованиям, рынок труда и способы развития разр...
Микросервисы - Простым Языком на Понятном Примере
Просмотров 53 тыс.2 месяца назад
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡 Микросервисы на простом примере. Для тех кто не понимает, что это такое. Разверните IT-инфраструктуру для веб-проектов любой сложности со скидкой 20%: slc.tl/vum0w Пишу про свой стартап для подготовки к собеседованиям, рынок труда и способы развития разработчиков в телеграм канале - подписывайся: t.me/artem...
Как Связать Бэкенд и Фронтенд? React + FastAPI Full Stack приложение | Python + JavaScript
Просмотров 30 тыс.2 месяца назад
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡 Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfekVH47 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot Пишу про свой стартап, рынок труда и способы развития разработчиков в телеграм канале - п...
FastAPI ТОП Библиотек и Расширений [2024]
Просмотров 15 тыс.3 месяца назад
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡 Скачай PDF версию экосистемы FastAPI со всеми ссылками - в телеграм боте t.me/ArtemShumeikoBot Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfekVH47 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumei...
Сайт на Python без знания HTML/CSS/JS - FastUI
Просмотров 24 тыс.4 месяца назад
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡 Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfekVH47 Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot Пишу про лайфхаки при поиске работы, рынок труда и способы развития разработчиков в телег...
Пет-проект на Python за 50 минут. Курс по FastAPI для начинающих [2024]
Просмотров 50 тыс.4 месяца назад
Разбор фреймворка FastAPI на языке Python с первых строчек до деплоя на реальный сервер. Текстовая версия: slc.tl/5nqib Облачный сервер для ваших проектов: slc.tl/3c00t 💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡 Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfekVH47 Забирай роадмап изучения сам...
Alembic - Как делать Миграции Базы Данных на Python #13
Просмотров 8 тыс.5 месяцев назад
Alembic - Как делать Миграции Базы Данных на Python #13
Стал Senior Разработчиком за 2 года. Главные выводы
Просмотров 18 тыс.5 месяцев назад
Стал Senior Разработчиком за 2 года. Главные выводы
SQLAlchemy: Many-to-many relationship (m2m)
Просмотров 6 тыс.6 месяцев назад
SQLAlchemy: Many-to-many relationship (m2m)
SQLAlchemy results to Pydantic schema using FastAPI #11
Просмотров 9 тыс.6 месяцев назад
SQLAlchemy results to Pydantic schema using FastAPI #11
SQLAlchemy: Advanced RELATIONSHIPS | Indexes | Constraints #10
Просмотров 8 тыс.7 месяцев назад
SQLAlchemy: Advanced RELATIONSHIPS | Indexes | Constraints #10
80% разработчиков НЕ ГОДЯТСЯ для работы. Как УЛУЧШИТЬ резюме на hh
Просмотров 174 тыс.7 месяцев назад
80% разработчиков НЕ ГОДЯТСЯ для работы. Как УЛУЧШИТЬ резюме на hh
SQLAlchemy: Intro to relationships and ORM #9
Просмотров 11 тыс.7 месяцев назад
SQLAlchemy: Intro to relationships and ORM #9
SQLAlchemy: How to JOIN tables | CTE | Subqueries | Window functions #8
Просмотров 9 тыс.7 месяцев назад
SQLAlchemy: How to JOIN tables | CTE | Subqueries | Window functions #8
SQLAlchemy: Basic SELECT queries #7
Просмотров 9 тыс.7 месяцев назад
SQLAlchemy: Basic SELECT queries #7
SQLAlchemy: SELECT and UPDATE queries with ORM vs CORE #6
Просмотров 16 тыс.8 месяцев назад
SQLAlchemy: SELECT and UPDATE queries with ORM vs CORE #6
SQLAlchemy: How to create tables with classes - Mapped + mapped_column #5
Просмотров 17 тыс.8 месяцев назад
SQLAlchemy: How to create tables with classes - Mapped mapped_column #5
SQLAlchemy: How to use Session and ORM
Просмотров 17 тыс.8 месяцев назад
SQLAlchemy: How to use Session and ORM
SQLAlchemy: Создание таблиц и вставка данных через Core #3
Просмотров 19 тыс.8 месяцев назад
SQLAlchemy: Создание таблиц и вставка данных через Core #3
SQLAlchemy: Database connection, raw SQL queries with engine #2
Просмотров 29 тыс.9 месяцев назад
SQLAlchemy: Database connection, raw SQL queries with engine #2
SQLAlchemy: Зачем Учить SQLAlchemy ORM
Просмотров 39 тыс.9 месяцев назад
SQLAlchemy: Зачем Учить SQLAlchemy ORM
FastAPI Роадмап для начинающих разработчиков
Просмотров 44 тыс.10 месяцев назад
FastAPI Роадмап для начинающих разработчиков
Pytest #9: Поиск медленных тестов | Пропуск тестов | Кастомные CLI параметры (addoption)
Просмотров 3,7 тыс.10 месяцев назад
Pytest #9: Поиск медленных тестов | Пропуск тестов | Кастомные CLI параметры (addoption)
По-моему некорректно говорить, что в худшем случае О(n), а в лучшем O(1), O вроде описывает имеено поведение в среднем (но надо посмотреть, сходу что-то не находится)
есть БЕСПЛАТНЫЙ МАТЕРИАЛ В МОЁМ ПЛАТНОМ КУРСЕ))), забавно звучит)))
Ты прямо Бог!
Так а чем отличается S3 от облачного хранилища? Зачем было называть другим названием?
а еще в докер-файле, я бы сначала определил в контейнере рабочую директорию и копировал бы файлы туда, а не в корень
хех, одно дело вещать по подготовленному сценарию, а другое дело в realtime. Хорошо порешал
Спасибо ,Артем)
не понял, почему нельзя просто def get_min(self): return min(self.stack) все остальные методы изменяют данные self.stack и метод всегда будет возвращать данные согласно актуальному стеку. Либо я не понял задачу
Требуется решить за постоянное время, а у Вас O(n)
Потому что эта функция занимает O(n) времени, а нужно O(1)
Пару комментов: задача 2. 1. Полагаю не стоит использовать isinstance, т.к. есть риск получить проблемы с наследованием при расширении списка передаваемых эксепшенов (например, передали еще LookupError, lambda: print(3)) и получили не ожидаемое поведение). type проверит на точное совпадение. 2. Вызов ex[1]() производится без параметров, что в случае IndexError("bar") выбросит missing required positional argument. Полагаю, это проблема постановки задачи и некоторой не внимательности при выполнении. 3. raise e стоит вынести из условия, иначе ломается логика, если выбрасывается эксепшн не переданный в списке. задача 3. 1. Использование list говорит, что у нас О(1) будет не совсем честная. Если докапываться, то какой-нибудь связный список - самое то. 2. Для второго списка за счет чуть большего количества памяти можно поддерживать более простую логику (храним список минимумов). def push(self, num: int) -> None: self.stack.append(num) self.min_nums.append(min(lst[-1] if lst else num, num)) def pop() -> int: self.min_nums.pop() return self.stack.pop()
вот так я решил 3 задачу, с помощью доп массива минимумов и доп масива который запоминает были ли смещения(свапы) в доп массиве минимумов и на основе всего этогт каждая команда чуть правит наши маисивики за O(1), код ниже class Stack: def __init__(self) -> None: self.stack = [] self.min_find_ls = [] self.support_min_find_ls = [] def push(self, num): self.stack.append(num) self.min_find_ls.append(num) if len(self.min_find_ls) >= 2: if num > self.min_find_ls[-2] and len(self.stack) != 0 : self.min_find_ls[-1],self.min_find_ls[-2] = self.min_find_ls[-2],self.min_find_ls[-1] self.support_min_find_ls.append(True) else: self.support_min_find_ls.append(False) def pop(self): self.stack.pop() if len(self.support_min_find_ls) >= 1: if self.support_min_find_ls[-1] is False: self.min_find_ls.pop() self.support_min_find_ls.pop() else: self.min_find_ls.pop(-2) self.support_min_find_ls.pop() def top(self): return self.stack[-1] def find_min(self): if len(self.min_find_ls) == 0 or len(self.stack) == 0: return None return self.min_find_ls[-1] на что гпт сказал что я сложный чичорт и выдал это ) class Stack: def __init__(self) -> None: self.stack = [] # Основной стек self.min_stack = [] # Стек для хранения минимальных элементов def push(self, num): self.stack.append(num) # Добавляем элемент в стек минимальных значений, если он меньше или равен текущему минимальному if not self.min_stack or num <= self.min_stack[-1]: self.min_stack.append(num) def pop(self): if self.stack: top = self.stack.pop() # Если удаляемый элемент равен текущему минимальному, удаляем его также из min_stack if top == self.min_stack[-1]: self.min_stack.pop() def top(self): if self.stack: return self.stack[-1] return None # Возвращаем None, если стек пуст def find_min(self): if self.min_stack: return self.min_stack[-1] return None # Возвращаем None, если вспомогательный стек пуст
Видос супер. Спасибо ! Но микрофон чуть подальше, а то такое ощущение, что ты на ушко шепчешь
Возможно это старая запись вашего интерьерью? Вопросы не тянут даже на стажёра
Push все равно кривой получился. Если до конца списка делать pop, то с какого-то момента не будет значений из упорядоченного списка. Всё из за условия добавления
Для этого есть условие в pop: if res == self.min_nums[-1]
Добрый день! Хорошее видео, но тег для img ( 17:30 ) пишется без знака `/`
"One Stack (stack of pair value,minvalue):" def pop(O):return O.s.pop()[0] $$$ def top(O):return O.s[-1][0] $$$ def get_min(O):return O.s[-1][1] $$$ def __init__(O): O.s=[(float('inf'),float('inf'))] $$$ def push(O,v): O.s.append(v,min(v,O.get_min()) # храним в стеке сами значения и его текущий минимум
ну так декораторы с параметрами писали во втором пайтоне, изращение, уже как 10 лет можно проще
В целом неплохо выглядит. По коду третьей задачи, можно немножко сэкономить место. Не пушить мин дупликэйтс а держать какое нибудь (число, каунтер) и инкрементить его. В биг/мидл компаниях обязательно придерутся к тому что в функции push/pop не используете self.get_min(). Ну и небольшие замечания по имплементации вроде функция pop должна возвращать значение, не хватает проверки на пустой список во всех функциях.
Кажется последняя задача решается линкедлистом с указателем на последнюю ноду, а в ноде с указателями на предыдущую и минимальную. И не надо создавать второй лист
Тогда вам нужен кастомный ЛЛ с двумя указателями. Можно упростить и держать минимальное значение в каждой ноде вместо указателя. Но это будет занимать больше места.
@@anoshin45 написать класс с 3 полями сложно?
@@VaeV1ct1s Упростить в плане не заморачиватся с указателями на минимальное значение.
@@anoshin45 зачем забивать память? Оно у тебя хранится в ноде, на которую ты указываешь. В чем простота?
@@VaeV1ct1s а если у тебя два дупликэйта. Ты сам на себя будешь ссылаться ?
Прикол конечно. Такие задачи могут на мидла и синьера дать, с зп в 2-4 раза больше
Не знаю ответ ни на одну задачу. Учусь питону уже второй день. Я тупой, надо бросать?
Ахах, за 22 дня ты не сможешь этот собес пройти. Это серьзная работа, нужно много времени потратить, чтобы научиться.
Бросай
@@digitaIdevil хорошо, пошёл бросать
это явно не уровень джуна и не 100 тысяч зп, первая задача только, остальные уровня мидл
нет) порог входа с каждым разом всё выше, мб раньше джунам нужно было ложкой с первого раз в рот попадать, и их уже брали доучиваться, но сейчас ищут самостоятельных спецов, 2 и 3 задачи вполне адекватные, проверяют твои знания в ООП (не совсем), алгоритмах и структурах данных и основах языка, декораторы используются везде, с ними тоже нужно уметь работать уже на начальных стадиях
Вы реально не знали ответ на эти задачи будучи синьором? Или спецом тупили чтобы не спалил интервьюер? Если первое, то получается такие сложные вопросы или вы не такой хороший синьор?! И как проходить такие собесы челам без опыта?!
В маленькой компании синьором можно стать имея год опыта.
Жестко. Я ни одной не знаю😢
Ты не один друг, я тоже почувствовал себя тупым
Последняя задача не до конца решена. 1. Есть бы сделаем push(3), push(6), push(7), pop(3) и запросим get_min, нам отдаст IndexError, хотябы по идеи должен отдать 6. Мы никак не сможем добиться O(1) в get_min, за исключением, если будем постоянно держать в get_min отсортированную коллекцию, но тогда у других операций увеличится Time Complexity.
сможем, например, вот так: class Stack: def __init__(self): self.stack = [] self.mins = [] def push(self, n: int): self.stack.append(n) self.mins.append(min(self.get_min(), n) if self.mins else n) def pop(self) -> int: self.mins.pop() return self.stack.pop() def top(self) -> int: return self.stack[-1] def get_min(self) -> int: return self.mins[-1] и да, решение на видео с ошибкой, в некоторых случаях неправильно сработает.
@@pavelosipov5951 def pop() у тебя неверно работает
так это же стэк, мы можем удалить из него тока последнее число
"One Stack (stack of pair value,minvalue):" def pop(O):return O.s.pop()[0] $$$ def top(O):return O.s[-1][0] $$$ def get_min(O):return O.s[-1][1] $$$ def __init__(O): O.s=[(float('inf'),float('inf'))] $$$ def push(O,v): O.s.append(v,min(v,O.get_min()) # храним в стеке сами значения и его текущий минимум
@@pavelosipov5951 И правда, что-то я ошибся. Спасибо за разъяснение.
33 минуты боли, но увы без этого никуда, сразу вспомнил все свои тупняки))
Ага, облака)) облака надежды и вечные, поверьте свои данные третьим лицам)) если работаете над чем то серьезным то ничего не должно покидать ваш контур. Баловство все это, если не хуже.
видео придает уверенности, что сеньоры тоже тупят на собеседовании джуна
Он тупил спецом ))
Один из вариантов решения первой задачи: def get_first_matching_object(predicate, objects): return next((x for x in objects if predicate(x)), None)
Да проще filter использовать
@@SabFo_ лист компрехеншен выполняется быстрее
def push(self,v): self.t+=1; self.s.append(q:=(v,self.t)); heapq.heappush(self.pq,q) def pop(self): v,t=self.s.pop(); set(heapq.heappop(pq) for _ in itertools.takewhile(lambda v:v[1]>=t,pq)); return v def top(self):return self.s[-1][0] $$$$это разрыв строки$$$ def get_min(self):return self.pq[0][0] def __init__(self): self.s,self.pq,self.t=[],[(float('inf'),0)],0
def push(self,v): self.s.append(v); v<=self.m[-1] and self.m.append(v) def pop(self): v=self.s.pop(); v==self.m[-1] and self.m.pop(); return v def top(self): return self.s[-1] $$$$это разрыв строки$$$ def get_min(self): return self.m[-1] def __init__(self): self.s=[]; self.m=[float('inf')] # на дне стека минимумов лежит бесконечно большой камень :)
эээ а не проще ли через словарь созданный из типов исключений и обработчиков - хватем исключение e и проверяем функцией из первого задания if match:=get_first_matching_object(pred=lambda x:x in ourdict,[type(e)]+list(type(e).__bases__)):match() raise e?
Как программист-самоучка с опытом в 7 лет, мало работавший в компаниях, но ходивший по собеседованиям, могу сказать: это слишком простые задачки на джуна В небольших компаниях в лайв-кодинге скорее интересуют более реалистичные задачи, вроде реализации нескольких эндпоинтов в Django или разбора существующего кода на предмет допущенных огрехов, иногда могут спросить даже про несложный деплой приложения на сервер В крупных компаниях два варианта: либо алгоритмические задачи с leetcode/codewars/etc уровня easy/medium, либо разбор тестового задания, которое ты получил до/после собеседования Если кто поделится местами, где можно найти _такие_ вакансии -- я в лобик чмокну <3
так 3 задача это и есть литкод медиум
@@Ejangordf6sg И правда, но смотрится как задачка не больше, чем на условное "easy+"
Я почему то думал что Джунам сложнее вопросы задают, я знаю почти всё что было на собесе из видео, но я до сих пор не нашел работу, может я что-то делаю не так. Хотя у меня и собеса никогда не было :). Видео придало мне уверенности в своих знаниях, надеюсь скоро найду работу
Сколько учишься уже?
А на какое количество вакансий ты отправлял резюме? Сейчас на джунов высокая конкуренция, поэтому надо просто часами сидеть на сервисах поиска работы и закидывать своё резюме везде где можешь
get_first_matching_object=lambda pred,obj=[]:next((v for v in obj if pred(v)),None)
Почему 3 задача проще 2?
Плохо ты претворялся друг ), джун тупит страшнее
Object в Питоне же зарезервированно, и можно было бы сказать, что не корректно использовать такое название. 😊
то что что то существует в пайтоне - не значит, что оно зарезервировано object - не зарезервировано, но объект с таким именем существует, но назвать переменную так можно in, for, class, def, async, await, return, and, or - зарезервированны, такими именами не получится назвать переменные
🐯
это какой-то новый уровень троллинга)
Щас бы говорить, что динамическая типизация, это недостаток...
👍
Привет Артем! Можно ли как-то alembic заставить работать с asyncpg? Или таки psycopg2 придется ставить?
Легенда...
Знания после этого курса приближены к знаниям джуна(только фастапи)
просто ужас сделано настолько сложно насколько возможно!
Какой-то Java EE. Нет никаких проблем писать sql в эндпоинтах. Он как раз гораздо понятнее и нагляднее там сидит. В крайнем случае для длинных запросов можно вынести выражение в отдельный модуль. Когда у вас с фронта просят ручки со вложенными сущностями вам нужно делать joinedload/selectinload. Где-то вам нужен User+Tasks, где-то только User. Вы на каждый такой вариант будете делать по функции в репозитории? Или передавать опции отдельным параметром, ещё больше всё усложняя? Модели и схемы можно очень быстро посмотреть одним кликом из эндпоинта, а вот прыгать по ORM надстройкам кастомным - это как раз разбираться нужно. Ну и по поводу притянутой за уши задачи уровня "смены sqlalchemy" - такое не происходит почти никогда. Да и на что? Вы скорее на другой язык переписывать будете.
Артём, спасибо большое за все видео. В своё время разбирался с Alembic, тратил на изучение и ресёрч информации часы, а тут в одном видео готовый пример.
Ваш курс еще продается ?
Нет