Я просто оставлю это здесь: ➜ ~ python --version Python 3.12.1 ➜ ~ python -m timeit "words = ['a', 'b', 'c']; [i.upper() for i in words]" 1000000 loops, best of 5: 254 nsec per loop ➜ ~ python -m timeit "words = ['a', 'b', 'c']; list(map(str.upper, words))" 500000 loops, best of 5: 421 nsec per loop ➜ ~ python -m timeit "words = ['a', 'b', 'c']; [str.upper(i) for i in words]" 1000000 loops, best of 5: 272 nsec per loop
Часто забывают что O(n) - это на самом деле "O(n) + const". И если n маленькое, то const может оказывать ощутимое влияние на результат. $ python --version Python 3.11.2 $ python -m timeit -s "words = ['a', 'b', 'c'] * 100" "[i.upper() for i in words]" 20000 loops, best of 5: 15.5 usec per loop $ python -m timeit -s "words = ['a', 'b', 'c'] * 100" "list(map(str.upper, words))" 20000 loops, best of 5: 12 usec per loop $ python -m timeit -s "words = ['a', 'b', 'c'] * 100" "[str.upper(i) for i in words]" 20000 loops, best of 5: 17.3 usec per loop $ python -m timeit -s "words = ['a', 'b', 'c'] * 100; sup = str.upper" "[sup(i) for i in words]" 20000 loops, best of 5: 16 usec per loop $ python -m timeit -s "words = ['a', 'b', 'c'] * 100" "list(i.upper() for i in words)" 10000 loops, best of 5: 20.6 usec per loop $ python -m timeit -s "words = ['a', 'b', 'c'] * 100" "[*map(str.upper, words)]" 20000 loops, best of 5: 12 usec per loop И совсем уж head scratcher (ага, медленнее 3.11-го): Python 3.12.3 20000 loops, best of 5: 16.3 usec per loop 20000 loops, best of 5: 16.2 usec per loop 20000 loops, best of 5: 18.6 usec per loop 20000 loops, best of 5: 17.2 usec per loop 10000 loops, best of 5: 25.9 usec per loop 20000 loops, best of 5: 16.2 usec per loop
Ради интереса замерил, что будет быстрее для word.upper() Для 50 миллионов значений: for took 3.159 seconds list_comp took 3.371 seconds map took 2.777 seconds
@@__init__. да, но на 50 млн записях, с такой скоростью быстрой. Это такая оптимизация, на которой можно забить. и писать как в команде принято так чтобы читабельно было и исправить баг, если появится.
спрашивают, реально часто подобные штуки на всех уровнях. собесы - лотерея. и контекстные менеджеры для переброса данных между корутинами и жадные алгоритмы, и написать сортировку на листочке. собесы в it полное говно.
да это все спрашивают, точно у меня один в один такое было. Никто не хочет придумывать другие вопросы ибо на этих итак валяться много людей) Тут вопрос в том чтобы реально люди не отвечали, а не про то чтобы про действительно важные вещи значимые и нужные в работе спрашивать. ИМХО собеседующему проще взять вопросы типо таких, разобраться самому и их спрашивать)) К сожалению собесы и реальное программирование это разные галактики
Собеседование в стиле "красноглазики пиписьками меряются". Из всего что прозвучало к практике разработки с натяжкой относится только контекстный менеджер в конце разговора. Ну вот обсудили про то как строки в 4к+ символов длиной начинают себя вести немного по-другому и хранятся раздельно. И что? Как это сакральное знание поможет вовремя закрыть таски в спринте?
Циклы vs рекурсия и их влияние на алгоритмическую сложность. Кеши, их виды и как выбрать лучший под задачу. Потоки vs процессы vs асинхронщина, что лучше использовать в каких случаях. ОРМ vs чистый sql, что лучше в каком случае. И продолжать можно бесконечно. Вопросов куча.
1) Что за мода пошла делать list | None? Для этого есть Optional 2) 45:36 Для этого случая в питоне есть partial из functools. Как по мне это первое что должно было прийти в голову. Для меня показалось странным, что не упомянули. По результату хз. Без негатива, но моему человек максимум стремящийся мидл.
А в чем проблема с list | None?😬 Единственное, что работает с 3.10+ версии, а так из тайпинга тащить не нужно лишнее При просмотре собеса также подумал, что ответы не уровня синьера, но, возможно, на практике чел шарит больше чем в теории. Ну и сами вопросы из разряда "топ 50 вопросов на python developer позицию" все тоже самое спрашивают на стажеров\джунов, а хотелось бы что-то релевантное на высокую позицию😔
После 5-10 собеседований ты узнаешь какие вопросы задаются обычно и 11ое уже проходится. Сразу проходят только прям упоротые проги. Вопросы такие, что ты либо знаешь, либо нет. Найм тупой. Нужно давать тестовую задачу прям онлайн и смотреть как решается.
Задачки не интересные. Такие смысл задавать ноль. Они не показывают в какой области человек силен. А только показывают помни ли он как что-то делаеться. Лучше или алго задачи либо уже спрашивать про штуки under the hood. Сорри но человек который проходит явно очень слабенький кодер. Его знания слабо связаны между собой и сразу видно что комп сайенс он плохо шарит. Честно я как человек который собеседования проводит не оценил бы человека выше мидла.
Контекстный менеджер или асинхронка. Это джунский уровень. Недавно на ютубе видел ролик, где чувак делал разбор тестовой задачи на джуна для авито. Асинхронка там присутствует.
@@igorratnik2357 Ну дак завтра скажут, что джун должен разбираться и в ml, заменить девопс инженера, знать фронт. Бизнесу главное поменьше платить и чтоб джун всё знал. Просто идеальный работник
досмотрел до 22:10 дальше нет смысла, кандидат даже на джуна не знает: вопрос про list comprehensions для сеньора должен быть как минимум про nested comprehension, где сеньор должен рассказать, что оно быстрее append, потому что оно функция, после чего рассказать про итераторы, генераторы, лямбды, монады и т.д. про range сказал, что оно генератор с какой-то оптимизацией - тушите свет, range - это sequence type. про dict'ы - хэш-таблица со слотами, к которым привязываются ключи через хэш-функцию, значение может быть только одно, разрешение коллизий происходит за счёт открытой адресации с пробированием, не знать про слоты в питоне в 2023 - кринж, интервьюер тоже слабак за "слишком много коллизий". дальше, похоже, ещё печальней. И вот с этими двумя я должен конкурировать?
Я просто оставлю это здесь:
➜ ~ python --version
Python 3.12.1
➜ ~ python -m timeit "words = ['a', 'b', 'c']; [i.upper() for i in words]"
1000000 loops, best of 5: 254 nsec per loop
➜ ~ python -m timeit "words = ['a', 'b', 'c']; list(map(str.upper, words))"
500000 loops, best of 5: 421 nsec per loop
➜ ~ python -m timeit "words = ['a', 'b', 'c']; [str.upper(i) for i in words]"
1000000 loops, best of 5: 272 nsec per loop
получается или устаревшая оптимизация, или изначально что-то не то придумали
Часто забывают что O(n) - это на самом деле "O(n) + const". И если n маленькое, то const может оказывать ощутимое влияние на результат.
$ python --version
Python 3.11.2
$ python -m timeit -s "words = ['a', 'b', 'c'] * 100" "[i.upper() for i in words]"
20000 loops, best of 5: 15.5 usec per loop
$ python -m timeit -s "words = ['a', 'b', 'c'] * 100" "list(map(str.upper, words))"
20000 loops, best of 5: 12 usec per loop
$ python -m timeit -s "words = ['a', 'b', 'c'] * 100" "[str.upper(i) for i in words]"
20000 loops, best of 5: 17.3 usec per loop
$ python -m timeit -s "words = ['a', 'b', 'c'] * 100; sup = str.upper" "[sup(i) for i in words]"
20000 loops, best of 5: 16 usec per loop
$ python -m timeit -s "words = ['a', 'b', 'c'] * 100" "list(i.upper() for i in words)"
10000 loops, best of 5: 20.6 usec per loop
$ python -m timeit -s "words = ['a', 'b', 'c'] * 100" "[*map(str.upper, words)]"
20000 loops, best of 5: 12 usec per loop
И совсем уж head scratcher (ага, медленнее 3.11-го):
Python 3.12.3
20000 loops, best of 5: 16.3 usec per loop
20000 loops, best of 5: 16.2 usec per loop
20000 loops, best of 5: 18.6 usec per loop
20000 loops, best of 5: 17.2 usec per loop
10000 loops, best of 5: 25.9 usec per loop
20000 loops, best of 5: 16.2 usec per loop
Задавать задачку на собеседование а-ля "это то, что я узнал вчера". Вопрос, нахрена это надо ?
Это базовый вопрос на самом деле, который часто спрашивают
Подтверждаю
It would be great if We will see Vitaly Likhachov's Technical interviews in here again !
Слышу "Зачем писать на Python, если есть Go" - готовлю гневный Go-хейтерский пост в блоге =DDD
Ожидал разговор немного про другое, честно говоря, но да ладно
P. S. Где-то на 1:01:05 стало интереснее
Ради интереса замерил, что будет быстрее для word.upper()
Для 50 миллионов значений:
for took 3.159 seconds
list_comp took 3.371 seconds
map took 2.777 seconds
то есть это 50 млн операций обработалось примерно +- за 3 секунды?)
и где тут реальная оптимизация?)
@@4aidzeмап быстрее лист компрехеншена на 19%
@@__init__. да, но на 50 млн записях, с такой скоростью быстрой. Это такая оптимизация, на которой можно забить. и писать как в команде принято так чтобы читабельно было и исправить баг, если появится.
@@4aidzeтак мы тут о сухих цифрах, а не о конкретном примере, вроде как.
Если на реальных собесах сейчас спрашивают то, что тут - все это очень печально
спрашивают, реально часто подобные штуки на всех уровнях. собесы - лотерея.
и контекстные менеджеры для переброса данных между корутинами и жадные алгоритмы, и написать сортировку на листочке. собесы в it полное говно.
да это все спрашивают, точно у меня один в один такое было. Никто не хочет придумывать другие вопросы ибо на этих итак валяться много людей) Тут вопрос в том чтобы реально люди не отвечали, а не про то чтобы про действительно важные вещи значимые и нужные в работе спрашивать. ИМХО собеседующему проще взять вопросы типо таких, разобраться самому и их спрашивать)) К сожалению собесы и реальное программирование это разные галактики
Собеседование в стиле "красноглазики пиписьками меряются". Из всего что прозвучало к практике разработки с натяжкой относится только контекстный менеджер в конце разговора. Ну вот обсудили про то как строки в 4к+ символов длиной начинают себя вести немного по-другому и хранятся раздельно. И что? Как это сакральное знание поможет вовремя закрыть таски в спринте?
А какое знание поможет?
Циклы vs рекурсия и их влияние на алгоритмическую сложность. Кеши, их виды и как выбрать лучший под задачу. Потоки vs процессы vs асинхронщина, что лучше использовать в каких случаях. ОРМ vs чистый sql, что лучше в каком случае. И продолжать можно бесконечно. Вопросов куча.
В "го ооп больше чем в питоне" - это конечно очень спорное утверждение
1) Что за мода пошла делать list | None? Для этого есть Optional
2) 45:36 Для этого случая в питоне есть partial из functools. Как по мне это первое что должно было прийти в голову. Для меня показалось странным, что не упомянули.
По результату хз. Без негатива, но моему человек максимум стремящийся мидл.
уточка подъехала
А в чем проблема с list | None?😬 Единственное, что работает с 3.10+ версии, а так из тайпинга тащить не нужно лишнее
При просмотре собеса также подумал, что ответы не уровня синьера, но, возможно, на практике чел шарит больше чем в теории.
Ну и сами вопросы из разряда "топ 50 вопросов на python developer позицию" все тоже самое спрашивают на стажеров\джунов, а хотелось бы что-то релевантное на высокую позицию😔
1 - ну дык новый синтаксис подвезли. Почему бы не пользоваться вместо импорта Optional
Это собес на синьора, написать контекстный менеджер😅😅😅 . Кстати не первый собес вижу подобный. Вопрос именно по ним.
После 5-10 собеседований ты узнаешь какие вопросы задаются обычно и 11ое уже проходится.
Сразу проходят только прям упоротые проги.
Вопросы такие, что ты либо знаешь, либо нет.
Найм тупой.
Нужно давать тестовую задачу прям онлайн и смотреть как решается.
Тема с append не раскрыта
Задачки не интересные. Такие смысл задавать ноль. Они не показывают в какой области человек силен. А только показывают помни ли он как что-то делаеться. Лучше или алго задачи либо уже спрашивать про штуки under the hood. Сорри но человек который проходит явно очень слабенький кодер. Его знания слабо связаны между собой и сразу видно что комп сайенс он плохо шарит. Честно я как человек который собеседования проводит не оценил бы человека выше мидла.
Честно говоря смог только 30 минут.
Paren kotoriy otvechaet na voprosi vedyot sebya kak budto on senior no na samom dele on junior, nichevo ne znaet no umnichaet ))
Да, на мой взгляд намного лучше честно обозначать уровень своей компетенции, чем делать вид, что всё знает, а сам при этом плавает в простых вопросах.
Из ребат кто-нибудь менторством занимается?
Смотреть это пустая трата времени
Парень слабоват откровенно.. Половина вопросов - для мидлов.
Контекстный менеджер или асинхронка. Это джунский уровень. Недавно на ютубе видел ролик, где чувак делал разбор тестовой задачи на джуна для авито. Асинхронка там присутствует.
@@igorratnik2357а что нужно спрашивать на «сеньерском» уровне?
@@igorratnik2357 Ну дак завтра скажут, что джун должен разбираться и в ml, заменить девопс инженера, знать фронт. Бизнесу главное поменьше платить и чтоб джун всё знал. Просто идеальный работник
@@hellothere6696 как написать питончик на чистом си
какой мерзкий интервьюируемый. (извините)
досмотрел до 22:10 дальше нет смысла, кандидат даже на джуна не знает:
вопрос про list comprehensions для сеньора должен быть как минимум про nested comprehension, где сеньор должен рассказать, что оно быстрее append, потому что оно функция, после чего рассказать про итераторы, генераторы, лямбды, монады и т.д.
про range сказал, что оно генератор с какой-то оптимизацией - тушите свет, range - это sequence type.
про dict'ы - хэш-таблица со слотами, к которым привязываются ключи через хэш-функцию, значение может быть только одно, разрешение коллизий происходит за счёт открытой адресации с пробированием, не знать про слоты в питоне в 2023 - кринж, интервьюер тоже слабак за "слишком много коллизий".
дальше, похоже, ещё печальней.
И вот с этими двумя я должен конкурировать?
Не душни. Разумничался тут
Подскажешь, где так подшарить для джуна)
Ты миддл?
ты джун?
А можно найти твое интервью где ты не волнуясь отвечаешь на все вопросы правильно?