Александр (Новосибирск) собеседование python backend разработчик

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

КОМЕНТАРІ • 75

  • @johndubssound
    @johndubssound 2 місяці тому +5

    Самое показательное видео о том, кого выпускают с псевдо-курсов Яндекса/скиллбокс и тд.

  • @dazzline7800
    @dazzline7800 3 місяці тому +22

    Ребят, строго не судите. В своё оправдание только скажу, что последние полгода занимался чисто алгоритмами на Python, а к интервью вообще не успел подготовиться 😅

    • @user-bh8qg5gq7b
      @user-bh8qg5gq7b 3 місяці тому +1

      Помню месяца 3-4 назад интервью смотрел. Там наоборот ситуация была)))))

    • @user-db7kz5un3x
      @user-db7kz5un3x 3 місяці тому +2

      Молоток! Продолжаем двигаться к цели!

    • @user-zl5sp9yh1n
      @user-zl5sp9yh1n 3 місяці тому +9

      Палиндром жеж базовая база, какие алгоритмы?

    • @slizverg23
      @slizverg23 3 місяці тому

      @@user-zl5sp9yh1nКнута-Морриса-Пратта наверное:)

    • @dazzline7800
      @dazzline7800 3 місяці тому

      @@user-zl5sp9yh1n да обычная задачка, ну я её не выбирал, но решил

  • @slizverg23
    @slizverg23 3 місяці тому +13

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

    • @dazzline7800
      @dazzline7800 3 місяці тому +1

      Спасибо 😊
      Уже говорил, что вообще не успел подготовиться и голова в итоге была забита сессией, а так даже рад что за полгода ещё не всё забыл)

  • @sscapture
    @sscapture 3 місяці тому

    Удачи парню!

  • @rudolf_rozbergo9
    @rudolf_rozbergo9 3 місяці тому +1

    А задачу с палиндромом нельзя было решить срезами? Сравнивая первую строку с второй перевёрнутой [::-1]. Или по условию надо было другим способом ?

    • @dazzline7800
      @dazzline7800 3 місяці тому

      Можно, хотел, но сбился и пошли уже так

    • @slizverg23
      @slizverg23 3 місяці тому +3

      Это было бы не кошерное решение, Андрей об этом прямо сказал вроде бы. На интервью хотят увидеть более "алгоритмическое" решение

  • @user-jl4ey9zy3i
    @user-jl4ey9zy3i Місяць тому

    Золотое у Вас терпение😂😂😂

  • @BylKaktus
    @BylKaktus 3 місяці тому

    Простой способ через while:
    ```
    def is_polindrome(string):
    head = 0
    tail = len(string) - 1
    while head < tail:
    if string[head] != string[tail]:
    return False
    head += 1
    tail -= 1
    return True
    ```

  • @user-qv5dk9tl9b
    @user-qv5dk9tl9b 3 місяці тому +7

    самое красивое решение в одну строку)
    def isPalindrome(x):
    return x[::-1] == x

    • @justman073
      @justman073 Місяць тому

      И сразу будет засчитано как провал

    • @user-rl7vz2er7d
      @user-rl7vz2er7d Місяць тому +1

      @@justman073 а почему? изза сложности? тогда надо было бы вводить изначальное условие с ограничением сложности. Но такое ограничение введено не было, а следовательно позволялось его додумывание на основании объема задачи. При таком объеме это не существенно. Поэтому это скорее был бы не провал, а вопросы, типа "а еслибы слово было из миллиарда букв?" и т.д.

  • @erlan4123
    @erlan4123 2 місяці тому +1

    Проходил эту задачку у Сергея Балакирева. Задачка изи на 3 минуты)

  • @UserName-xp4dk
    @UserName-xp4dk 3 місяці тому

    def is_palindrome(string):
    for index in range(len(string) // 2):
    if string[index] != string[len(string) - index - 1]:
    return False
    return True
    Меня возьмут в Яндекс?

    • @user-eo9kz8ru9d
      @user-eo9kz8ru9d 3 місяці тому

      так же сделал, если что я следующий в яндекс за тобой)

    • @user-wh4pf7dt8w
      @user-wh4pf7dt8w 3 місяці тому

      Либо я чего-то не догоняю, допустим длина строки 10, цикл пробегается по значениям от 0 до 5, на первой проверке if сравнивает первый элемент с 4? Что за глупость

    • @UserName-xp4dk
      @UserName-xp4dk 3 місяці тому

      @@user-wh4pf7dt8w Как ты получил 4? len(string) = 10, index = 0, len(string) - index - 1 = 9.

    • @user-wh4pf7dt8w
      @user-wh4pf7dt8w 3 місяці тому

      ​@@UserName-xp4dkпринял

  • @MasterID
    @MasterID 3 місяці тому +2

    В YP только один ревьюер, это легенда (нельзя говорить его имя)

    • @AndyPronin
      @AndyPronin  3 місяці тому

      Мистер Кви не хочет вести собесы. Увы(

  • @user-bb6cs6wk6y
    @user-bb6cs6wk6y 3 місяці тому

    1вариант решения палиндрома (он же колхозный) def foo(value): return value==value[::-1]
    2 вариант (уровень илита)
    def foo(value):
    If len(value) ==0:
    return True
    If value[0] != value[-1] :
    return False
    return foo(value[1:-1])
    Мб что то и забыл, ибо пишу с телефона но суть такова

    • @BylKaktus
      @BylKaktus 3 місяці тому +2

      неиспользуйрекурсиюнеиспользуйрекурсиюнеиспользуйрекурсиюнеиспользуйрекурсиюнеиспользуйрекурсиюнеиспользуйрекурсиюнеиспользуйрекурсиюнеиспользуйрекурсиюнеиспользуйрекурсиюнеиспользуйрекурсиюнеиспользуйрекурсиюнеиспользуйрекурсиюнеиспользуйрекурсию

  • @user-ue4iv3nw3x
    @user-ue4iv3nw3x Місяць тому

    Люди такие забавные тут сидят, наверно смотрят и думаю какие они умные, и могут все решить, поднимают свою самооценку

    • @AndyPronin
      @AndyPronin  Місяць тому

      возможно, для неторых это важно

  • @7IdE
    @7IdE 3 місяці тому +9

    Ну, это было крайне слабо.
    Первая задача, ИМХО, крайне лютая для собеса - там нужно посидеть и подумать насчет subquery или annotated - а, мб, и погуглить. Только если часто такое пишешь, то можно написать в пределах собеса.
    Однако, это многое показало:
    1. SQL он вообще не знает. После SELECT * там какая-то лютая дичь началась. Знал бы SQL, можно было бы, хотя бы, .raw() запрос кинуть.
    2. Зачем-то ORDER BY туда приплетал, post_id...
    3. Запрос, который он написал через ORM - тоже было крайне слабый: навскидку - у него фильтрация в методе .all().
    4. Начал писать запрос не от модели, а от request - тут сразу минус за знание Джанги: 2 доп вопроса вида "что такое request" и "что такое objects, где он есть и зачем" - и все, фиаско.
    Дальше перешли к алгосам. Человек ниже комментах написал, что пол полгода изучал алгосы. Это же он добавил в интервью. И еще добавил, что изучал сам Питон.
    Ну, когда я увидел, что задача - проверка на палиндром, то для человека с базой в алгосах в полгода я предположил, что через 2 минуты он напишет готовый код. Особенно после того, как он дал наиболее эффективный алгоритм для этой задачи. Еще и пафосно так назвал это "наивным алгоритмом, который первый пришел в голову".
    Но когда я увидел, как он код пишет...
    5. Как можно пропустить двоеточие в конце if? Я такого не смог бы понять, даже если бы код писался без подсветки синтаксиса. Но тут даже Пичарм сам подсвечивает место синтаксической ошибки...
    6. Положить в head и tail определенные символы строки - сомнительно, ну окай. А дальше он это назвал указателями и писал код совершенно для другого.
    7. Сравнить конкретный символ строки со срезом?
    8. Его совсем не смутило то, что его код 2 раза проверяет одни и те же пары символов.
    9. Оценка сложности - тоже тотальнейший провал. О(n) по времени, а потом начал считать, сколько элементов проходит его алгоритм. Это не совсем минус, а, скорее, звоночек.
    10. А вот на оценке памяти уже был колокол: О(n) по памяти? Ладно, это не самое плохое. Но говорить о том, что дальше будут вызовы функции и это нужно учесть в оценке алгоритма в самой функции?...
    И вот этот человек полгода алгосы изучал? Ну вообще хз. Как по мне, лучше бы он этого не озвучивал и пытался таким образом оправдаться - бы меньше вопросов и претензий возникло.
    Как по мне, если человек полгода изучает алгосы, то он при этом решает задачи. А если человек решает задачи, то он пишет код. И не может человек вот с такой скоростью писать такой код через полгода реального изучения алгосов.
    Как итог:
    SQL, ОРМ, Джанго, алгосы и, что самое главное, Питон - все это очень слабо.
    P.S. Есть те, кто на Джанге запрос составил из первой задачи? Скиньте, плз, хочу посмотреть на то, что в итоге получается.
    У меня вышло:
    SQL: SELECT * FROM Group AS g WHERE (SELECT COUNT(*) FROM Post AS p WHERE p.group_id = g.id) > 10
    ORM:
    post_cnt = Post.objects.filter(group_id=OuterRef("pk")).count()
    groups = Group.objects.annotate(cnt=Subquery(post_cnt))
    Но тут groups - это, кажись, словарь будет, где будут айдишники всех групп, а не нужные объекты. И по этому всему нужно будет еще и филтрацию обеспечить и сами объекты достать. А это уже N + 1...
    Кароче, покажите мне правильный ответ! :D

    • @Chel1k7
      @Chel1k7 3 місяці тому +5

      from django.db.models import Count
      Groups.objects.alias(count_posts=Count('posts')).filter(count_posts__gt=10)

    • @7IdE
      @7IdE 3 місяці тому

      @@Chel1k7, ого.
      Это, я так понимаю, мало того, что Count через related_name отработает, так еще и фильтрация прям на месте доступна.
      Весьма любопытно.
      А как сам SQL запрос будет выглядеть? N + 1 не появится?

    • @Chel1k7
      @Chel1k7 3 місяці тому

      @@7IdEN+1 нету, тулбар вот так показывает запрос:
      SELECT "category"."id",
      "category"."title"
      FROM "category"
      LEFT OUTER JOIN "movie"
      ON ("category"."id" = "movie"."category_id")
      GROUP BY "category"."id"
      HAVING COUNT("movie"."id") > 10
      у меня вместо groups таблица category, вместо posts - movie

    • @Chel1k7
      @Chel1k7 3 місяці тому

      @@7IdE
      ```
      SELECT "category"."id",
      "category"."title"
      FROM "category"
      LEFT OUTER JOIN "movie"
      ON ("category"."id" = "movie"."category_id")
      GROUP BY "category"."id"
      HAVING COUNT("movie"."id") > 10
      ```
      нет n+1

    • @Chel1k7
      @Chel1k7 3 місяці тому +2

      @@7IdE ютуб почему то удаляет sql запросы, не могу скинуть его сюда, N+1 нету, всё окей

  • @user-mg6eg5xy6v
    @user-mg6eg5xy6v 2 місяці тому

    ббл штриф больше

  • @user-xg8qt8ky1s
    @user-xg8qt8ky1s 3 місяці тому +5

    Деточка, какие 50к? В других странах такие как ты сами за стажировку платят что бы с ним возились.

    • @dazzline7800
      @dazzline7800 3 місяці тому +4

      К вашему сведению у меня в портфолио 30+ учебных проектов и расценки я выбирал исходя из региона. Не надо обрушать ранок в угоду корпорациям и гнать людей работать за еду

    • @vegzuzvegzuz2866
      @vegzuzvegzuz2866 3 місяці тому

      ​@@dazzline7800 ключевая фраза "такие как ты". Потому что это был тотальный треш. Худший собес у Пронина за последние два года

    • @user-xg8qt8ky1s
      @user-xg8qt8ky1s 3 місяці тому

      @@dazzline7800 Реальные проекты (это те которыми хоть кто то пользуется) у тебя есть? Что то мне подсказывает что нет. А за рынок и корпорации не переживай, ты никому и даром не нужен.

    • @user-ks7jf7pw8l
      @user-ks7jf7pw8l 3 місяці тому +1

      Вот иди и сам за еду работай9

    • @seykonag3982
      @seykonag3982 3 місяці тому

      ​@@dazzline7800к вашему сведению вы на интервью полностью облажались, пусть у вас хоть миллион проектов на гите будут, с таким интервью они приравниваются к списанным проектам

  • @Chel1k7
    @Chel1k7 3 місяці тому +3

    1)
    from django.db.models import Count
    Groups.objects.alias(count_posts=Count('posts')).filter(count_posts__gt=10), запрос легкий, но надо вспоминать ситаксис джанго орм, я лично с первого раза не вспомнил это)
    2)
    def is_palindrome(string: str) -> bool:
    first = 0
    last = -1
    center = len(string) // 2
    while first < center:
    if string[first] != string[last]:
    return False
    first += 1
    last -= 1
    return True

    • @7IdE
      @7IdE 3 місяці тому +1

      first < last - будет достаточно, если инициализировать через len(string) - 1.

    • @dazzline7800
      @dazzline7800 3 місяці тому

      Там надо вывести не 10 постов, а все посты, где их больше 10

    • @Chel1k7
      @Chel1k7 3 місяці тому +1

      @@dazzline7800 ну вот тут ты показал всю мощь своих знаний, красава

    • @dazzline7800
      @dazzline7800 3 місяці тому

      @@Chel1k7 ну я потом глянул вспомнить как вообще Джанго выглядело и половина сразу написал 😅

  • @2173045
    @2173045 3 місяці тому +2

    Как он сдал диплом и как он сдавал задания с такими знаниями .
    Сам учился и понимаю как это не просто временами , даж если представить что он все списывал ,есть ведь ревью и защита .
    Плюс только за смелость.

    • @dazzline7800
      @dazzline7800 3 місяці тому

      Как раз потому что и не записывал, так за полгода у меня уже всё повылетало из головы 😅

    • @2173045
      @2173045 3 місяці тому +1

      @@dazzline7800 про orm верю , но как индексы и срезы могли вылететь.
      В любом случае удачи тебе , я сам волнуюсь на собеседование и многое забывается .

  • @MrBeltalowda
    @MrBeltalowda 3 місяці тому

    def is_palindrome(s: str)->bool:
    return all((x==y for x,y in zip(s, s[::-1])))

    • @user-ok7xl2hl7t
      @user-ok7xl2hl7t 3 місяці тому

      лучше так: def is_palindrome(s: str)->bool:
      if s == s[::-1]:
      return True
      return False

    • @MrBeltalowda
      @MrBeltalowda 3 місяці тому +1

      @@user-ok7xl2hl7t тогда проще return s == s[::-1]

    • @over3089
      @over3089 3 місяці тому

      В этом решении потребуется дополнительная память

    • @MrBeltalowda
      @MrBeltalowda 3 місяці тому

      @@over3089 единственное, для чего нужна дополнительная память - это построить обратный срез из s. если использовать reversed(s), она не потребуется

    • @oreh350
      @oreh350 3 місяці тому

      Хм. А я вот так сделал:
      def is_palindrome(string: str) -> bool:
      new_string = string[::-1]
      return True if new_string == string else False
      Нормальное ли это решение с точки зрения алгоритмов? Может оно жрет дофига памяти, я в этом очень плохо разбираюсь. Мурыжу пока Codewars, до leetcode не добирался