Усенко Михаил Новокузнецк Собеседование python разработчик

  Рет қаралды 4,754

Андрей += Пронин

Андрей += Пронин

2 ай бұрын

kzbin.infosXb--yIj...
видео с Михаилом
t.me/KZbinPronin
Чат для общения python разработчиков и им сочуствующих. Свободное общение, тестовые и вопросы с собесов и прочее. Заходите, там вам рады.
Поддержать канал: www.tinkoff.ru/rm/pronin.andr...
Обычно денежка идёт на книжки про питончик. Но иногда на светлое и тёмное.
Если Тиньков не даёт перечислить, стукните в личку телеги andpronin, придумаем что нибудь
Виш лист
Хорошие книги по Питончику, которые могу рекомендовать (и хочу купить с вашей помощью).
Изучаем Python. Двухтомник. Марк Лутц. Очень подробно и структурно (Хочу дождаться 6го издания.. )
• Изучаем Python с Марко...
Читаем и разбираем ее тут
Куплено (огромное спасибо зрителям)
Знакомство с Python | Бейдер Дэн (2023) - выглядит приятно для новичка
Чистый Python. Тонкости программирования для профи | Бейдер Дэн (2022) - хорошо для продолжения
Высоконагруженные приложения. Программирование, масштабирование, поддержка | Клеппман Мартин
Python. К вершинам мастерства | Рамальо Лучано - 2е издание - сложно для новичка, но интересно
Паттерны разработки на Python: TDD, DDD и событийно-ориентированная архитектура -- хорошо про то, когда какой фреймворк применять
Видимо, дальше появтся еще нескромные желания. Но пока - так
Моя тележка andpronin -- стучите, если что.
Мой канал про обучению python с нуля и до мидла Андрей+=Пронин
/ @pypronin
Я в других сетях
🔗Вконтакте: CaptPronin
🔗Дзен: zen.yandex.ru/id/5fbd33919412...
#python #питон #программирование #Андрей_Пронин #собеседование #

Пікірлер: 29
@user-zx6fq1ig4h
@user-zx6fq1ig4h 2 ай бұрын
20 минут рефакторинга спустя: "А задача то в чем?"))
@7IdE
@7IdE 2 ай бұрын
3 самых больши косяка - много спорит (разговаривает), слишком уверен в своих знаниях и очень мало думает. Поясню. 1. Вместо того, чтобы спорить о том, как решать задачу, стоило бы до последнего пункта уточнить все ТЗ. Включая все возможные корнеркейсы. Ведь этот скрипт предполагает взаимодействие с пользователем, а значит нужно рассмотреть абсолютно все возможные варианты входа. Юзверям доверять нельзя. То есть, как минимум нужна входная валидация файла и отдельный парсер для этого. Но он этого всего не сделал - он сам у себя в голове нарисовал ТЗ и начал его решать. А дальше он начал спорить, когда условия из реального ТЗ не совпали с тем ТЗ, которое у него в голове. 2. Второй момент - касательно самоуверенности - этот пункт следует из из-за и моментальной констатации "все работает" после единичного запуска, и из-за "и че", когда загрузил весь файл в память, и тд. 3. Не подумал над масштабируемостью кода, над оформлением, не подумал над некоторыми сценариями - и еще многие моменты. В итоге это все приведет к коммиту с крайне неподдерживаемым кодом, который будет выполнять либо не ту задачу, что нужно, либо не будет отказоустойчивым. И этот код нужно будет очень дотошно ревьюить и тратить на это время ревьюера. И, скорее всего, тут будет не 1 итерация ревью. А все эти моменты так-то можно спокойно пофиксить. Еще некоторые минусы: 1. "И че" - при разговоре о загрузке большого файла в память. Ну, скинут тебе 50 Гб файл - и все, код упадет. И не на ассертах. Итераторы нужно знать. Тем более в изначальном ТЗ было условие, что нужно такое вариант рассмотреть. 2. Не знать assert - это, конечно, плохо. Но основная трабла в другом: assert положит выполнение программы на первой же неудачной проверке. И, к примеру, если у тебя 200 и 199 битые, а валидная только 1-ая, то у тебя ляжет код на 2-ой ссылке. Ты пойдешь фиксить 2-ую ссылку. Пофиксишь. Запустишь код. Ляжет на 3-ей. И так тебе придется повторять для всех ссылок. Думаю, лучше было бы иметь код, который покажет ляжет и даст тебе все ссылки, которые нужно фиксить. К примеру, в изначальной версии кода такая возможность была. 3. Есть 3 объекта: АБС. Дальше он сравнивает А с Б. А с С и не сравнивает Б с С. Да и за истину берет строго первый элемент. Тут тоже очень много вариантов, при котором тест будет ложноположительный. Было еще что-то по мелочи, весь список не буду озвучивать. Но в целом - на джуна тянет. Ну или, скорее, джун-. Если пофиксить все выше сказанное - то явно джун: знания есть, только их стоит расширить и понимать, где и как юзать. А на данный момент - слишком много ресурсов придется тратить, чтобы следить за его кодом.
@GolosCD1988
@GolosCD1988 2 ай бұрын
Хорошие замечания. Добавлю, на 10-15 минуте, когда уже написал какой-то код, он спросил а какое задание. Мало того, что не продумал архитектуру решения, так он еще его и не понял. Советую прочитать книгу, медленно думай, быстро решай.
@7IdE
@7IdE 2 ай бұрын
@@GolosCD1988, да, есть такое, но вот именно этот момент - я вполне могу списать на стресс. Когда тупо вылетело из головы ТЗ из-за стресса - это окей. Точнее, это было бы окей, если бы он, все же, уточнил это ТЗ... В любом случае, это явно "материал, с которым можно работать". Но работать придется, да.
@MrBeltalowda
@MrBeltalowda 2 ай бұрын
Есть 3 объекта: АБС. Дальше он сравнивает А с Б. А с С и не сравнивает Б с С. Да и за истину берет строго первый элемент. Я что-то не понял. если а == б и а == с, то как может быть а!=с ?
@7IdE
@7IdE 2 ай бұрын
@@MrBeltalowda, Да, я чет вчера был не прав - не зря спать пораньше ушел, видимо мозг уже все. :D Если А == Б и А == С => гарантировано И == С. Свойство транзитивности (если можно так сказать). Но другие траблы, все же, остались. В данном случае не совсем корректно пользоваться таким сравнением: если у тебя А и С невалидные, то с его кодом будет: 1. Упадет на сравнении А == Б. 2. Затем пофиксят А. 3. Запустят код. 4. Упадет на сравнении А == С. То есть, за 1 запуск такого кода нельзя будет выявить все траблы. А если таких ссылок будет 100, то и итераций запуска будет столько же (ну, -1). А в случае, если все 3 элемента невалидные, этот тест, все же, даст ложноположительный результат (но тут нужно точнее в ТЗ углубиться - реальна ли такая ситуация в принципе). P.S. Я рили вчера, почему-то, подумал, что нет гарантий, что Б == С при таком обходе. Благо хоть не отписал это в исходном комменте. :D
@shoggot282
@shoggot282 2 ай бұрын
андрей, подскажите, вопрос не по теме. но все таки интересно, вероятно вы с яндекс продуктами знакомы хорошо, поэтому очень хочу узнать на счет ШАДа, слышал страшно сложно туда попасть, а выпускаются единицы/десятки в год, правда ли это?? и неужто выходят настоящие аналитики?. очень жаль что я на 1 курсе, где программа вышмата пока что базовая, но так заинтриговал этот ШАД. пишу с нового акка, а так постоянный подписчик. спасибо за видео, как и всегда!
@AndyPronin
@AndyPronin 2 ай бұрын
ШАД весьма круто. Рекомендую
@justman073
@justman073 Ай бұрын
В этой задаче прям напрашивается многопоточность или асинхронность Не идеальный вариант, но в рамках исходных данных требует 0.3 секунды, наверняка можно лучше import requests from bs4 import BeautifulSoup from logging import getLogger, Logger import asyncio from concurrent.futures import ThreadPoolExecutor import aiofiles import aiohttp class LinksComparator: @staticmethod async def get_links_comparator(logger_: Logger = None): comp = LinksComparator() await comp._init(logger_) return comp async def _init(self, logger_: Logger = None) -> None: self._loop = asyncio.get_event_loop() self._logger = logger_ if logger_ else logging.getLogger(__name__) async def _init_links_list(self, file_name: str) -> int: async with aiofiles.open(file_name, 'r', encoding='UTF-8') as f: self._links_list = await f.readlines() async def run_links_comparator(self, file_name: str) -> None: """Function that reads file in file_path and compares each line of links if their .html titles equal""" await self._init_links_list(file_name) with concurrent.futures.ThreadPoolExecutor(): await asyncio.gather(*[asyncio.ensure_future( self._compare_links_title( links_to_compare.strip().split(','), count)) for count, links_to_compare in enumerate(self._links_list, start=1)]) async def _compare_links_title(self, links: list, count: int) -> None: """Function that compares if all link's titles are the same and logs comparisons result""" try: titles = await asyncio.gather( *[asyncio.ensure_future(self._get_title_from_link(l)) for l in links]) t1 = titles[0] for i in range(1, len(titles)): t2 = titles[i] msg = " and ".join([*links]) if t1 != t2: msg = f'DIFF! on line {count} ' + msg + ' have different titles!' else: msg = msg + ' have same titles' self._logger.warning(msg) except aiohttp.ClientConnectorError: self._logger.error( f'Not all requests are successfully done, skipping comparison ' f'for links: {links} at line {count}') async def _get_title_from_link(self, link: str) -> str: """Function that makes request to specified link and returns its title""" try: async with aiohttp.ClientSession() as session: async with session.get(link) as response: return BeautifulSoup(await response.text(), 'lxml').text.title() except aiohttp.ClientConnectorError: self._logger.error(f'Could not connect to {link}') raise async def main(): s = time.time() logger = logging.getLogger(__name__) comp = await LinksComparator.get_links_comparator(logger) await comp.run_links_comparator('links.txt') print(time.time() - s) asyncio.run(main())
@nerdizay
@nerdizay 21 күн бұрын
В url могут быть запятые))
@temash4821
@temash4821 2 ай бұрын
Мишаня хорош, под конец устал, это свойственно человеку, который тыкает кнопки чтобы заработать денежку, думаю с осознанием бизнес процессов придет и понимание других целей. Удачи тебе, мыслиш правильно и это главное)
@Dpavlen
@Dpavlen 2 ай бұрын
Да, странный тип! Открыл бый свой репозитарий и взял бы оттуда кода с загрузчиками(контекстные), очень много их делали на курсах практикума.
@user-iu2df5ey2v
@user-iu2df5ey2v 2 ай бұрын
Да, много до сего я там не догадался) на то это и лайв кодинг, чтобы загнать человека в стресс и посмотреть как он выкрутится)
@user-nl4ps9rm9o
@user-nl4ps9rm9o 2 ай бұрын
задача как-то некорректно поставлена. "Понять что делает код и оптимизировать" != "Спросить бизнес-задачу и написать новый код." Из такой постановки задачи следует, что старый код работал корректно, но не оптимально.
@shoggot282
@shoggot282 2 ай бұрын
да обычная задача. по ходу были наводящие вопросы и намеки, поэтому понять, что требуется - не так сложно
@bunasha
@bunasha 2 ай бұрын
1. Проблем с вываливанием файла в оперативу не будет. Если длина ссылки примерно 100 байт, то для забивки всего 2 гигов оперативки потребуется 20 млн ссылок. Кто-то, не зная как прогать, откуда-то нароет такое число ссылок? И эти 2 гига по сути не о чем. 2. Если ты считаешь, что число ссылок может быть большое, при этом ты пользуешься реквестом, по 1 ссылке проверяющим с блоком ПО? Там нужно сразу по 1 000+ запросов отсылать в секунду, не меньше. Реквест мож в 80-ые и сгодился бы для обхода 2,5 сайтов, составляющих весь интернет, сейчас это позорище, неизвестно зачем существует. 3. Парся любой говносайт, через каждые 2 ссылки кидающий разрыв соединения, и не перехватывать ошибку разрыва? 4. "Когда человек работает с файлом через опен..." Вот тут не понял, а как работать с файлом еще? Вот тут реально просветите, как можно читать файл вне опена? Чел словно впервые видит парсинг. За 2 года он только доки редактировал?
@MrLotrus
@MrLotrus 2 ай бұрын
request вполне рабочий. Не парсингом единым.
@user-iu2df5ey2v
@user-iu2df5ey2v 2 ай бұрын
Нет чувак, я парсил очень много всякого, от говносайтов до гугл и яндекс сервисов. Тут дело не в парсинге, а в том, что я не понял задачу, не догадался чего от меня хотят и потому обосрался.
@user-sy9gf1sk2y
@user-sy9gf1sk2y 2 ай бұрын
по 4. это open and close - а с with это автоматом close .
@_cher_Tex_
@_cher_Tex_ 2 ай бұрын
«И че?» Андрея я думаю таких «умных» людей даже до конца можно не собеседовать
@user-zx6fq1ig4h
@user-zx6fq1ig4h 2 ай бұрын
А тех, кто элементарные правила русского языка не соблюдает?
@_cher_Tex_
@_cher_Tex_ 2 ай бұрын
@@user-zx6fq1ig4hну тут собес по программированию, а не по русскому языку, это уже когда нет аргументов, ссылаешься на русский язык
@Chel1k7
@Chel1k7 2 ай бұрын
А чё не так?
@Aleksey_Podkorytov
@Aleksey_Podkorytov 2 ай бұрын
очень инерционный чел, очень долго доходит до него
@Schpatel55
@Schpatel55 2 ай бұрын
Да тебя тоже ,в школе под партой спал ?о-Очень ,предложение с большой начинается буквачки ,второй моментик ,в конце точка
@foxipub3629
@foxipub3629 2 ай бұрын
Ну где там уже ИИ и нейросетки, что бы такие "программисты" шли в ПТУ и к станку, а не ЧЁ'кали на собесах
@user-iu2df5ey2v
@user-iu2df5ey2v 2 ай бұрын
Оу, в какой же великой компании ты работаешь и на какой должности, чтобы делать такие резкие заявления? Надеюсь системным инженером в каком-нибудь ядре, не иначе.
@foxipub3629
@foxipub3629 2 ай бұрын
@@user-iu2df5ey2vДолжность определяет что? Уровень интеллекта? Уровень дохода? Вассерман - безработный. Ассенизатор - в Москве получает больше, чем системный инженер в гугле. Я же работаю Devops'ом и знаю, что такое хороший и плохой программист.
@mikeofs1304
@mikeofs1304 2 ай бұрын
Так это ж музыкант , что не отменяет необходимости хотя бы в сборщиках овощей, к современному станку С ЧПУ его лучше не допускать, при косяке в G коде будут запоротые заготовки за многие тысячи рупий))
Dynamic #gadgets for math genius! #maths
00:29
FLIP FLOP Hacks
Рет қаралды 17 МЛН
格斗裁判暴力执法!#fighting #shorts
00:15
武林之巅
Рет қаралды 72 МЛН
I Need Your Help..
00:33
Stokes Twins
Рет қаралды 89 МЛН
Dynamic #gadgets for math genius! #maths
00:29
FLIP FLOP Hacks
Рет қаралды 17 МЛН