Mock-собеседование старшего Go разработчика из Тинькофф | Самое полное интервью

Поделиться
HTML-код
  • Опубликовано: 19 июн 2024
  • Курсы по программированию: clck.ru/37iG2b
    Потренироваться проходить собеседования: it-interview.io
    Присоединиться к моему сообществу: boosty.to/vladimir_balun
    Консультации:
    getmentor.dev/mentor/vladimir...
    solvery.io/ru/mentor/vladimir...
    Консультации от Дениса:
    solvery.io/ru/mentor/de_maksimov
    Таймкоды:
    00:00 - Введение
    00:20 - Горутины под капотом
    01:37 - Расширение стэка горутины
    02:36 - Разница потоков и горутин
    05:00 - Context switching
    06:08 - Планировщик в Go под капотом
    06:58 - Системные вызовы с горутинами
    08:21 - Work sharing и work stealing
    09:16 - Кооперативная и вытесняющая многозадачнось
    09:55 - Алгоритмы планирования
    11:50 - Примитивы синхронизации
    12:23 - Мьютексы под капотом
    14:25 - Spinlock
    15:07 - Deadlock, livelock, data race
    16:23 - Каналы под капотом
    18:29 - Семафоры
    18:45 - Compare and swap (CAS)
    19:25 - Контексты под капотом в Go
    21:43 - Параллельное выполнение кода на одном ядре
    22:45 - Когерентность кэшей
    23:51 - Синхронизация map
    25:36 - Архитектура web сервера
    29:10 - Синхронизация связного списка
    VK: vladimir_balun_program...
    Telegram: t.me/vladimir_balun_programming
    Instagram: / vladimir_balun_program...
    RUclips: / @vladimir_balun_progra...
    YandexZen: zen.yandex.ru/id/623b6c964da9...
    RuTube: rutube.ru/channel/25079714/
    Golang собеседование. Golang уроки. Golang. Golang с нуля. Go программирование. Go программист. Go Junior собеседование. Go Middle собеседование. Go Senior собеседование. Ozon Go собеседование. Tinkoff Golang. Тинькофф Golang. Tinkoff Go. Тинькофф Go.
    #программирование #айти #golang #mockinterview

Комментарии • 55

  • @vladimir_balun_programming
    @vladimir_balun_programming  10 месяцев назад +2

    Какие вопросы вы бы еще задали на собеседовании по теме Concurrency в Go?

    • @user-ji1rp1tt2t
      @user-ji1rp1tt2t 10 месяцев назад

      Аксиомы каналов?

    • @Igor-ale
      @Igor-ale 10 месяцев назад

      Как организовать Lock-Free и Wait-Free алгоритмы на Go и зачем они нужны

    • @maksimbiriukov5483
      @maksimbiriukov5483 10 месяцев назад

      Lock-free semaphore. Cond var. Модель памяти и ее гарантии(но мне кажется это могло быть продолжением ABA problem)

    • @user-jf3iu8vi7k
      @user-jf3iu8vi7k 9 месяцев назад +3

      а давайте такие темы - редис, кафка, паттерны pub-sub, сложные sql, nosql, паттерны проектирования в ооп, аспекты, инфрастуктура, логстеш, эластик? это бы я смотрел постоянно вообще. зачем надо горутины и мьютексы под капотом спрашивать?.. планировщик, мьютексы под капотом..это учится наизусть перед собеседованием и забывается потом как ненужное.

    • @user-jf3iu8vi7k
      @user-jf3iu8vi7k 9 месяцев назад

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

  • @gebiete
    @gebiete 6 месяцев назад +11

    Я понял, это интервью на позицию разработчика драйверов на Golang (шучу), или в разработчики самого Golang. CAS, spinlocks, устройство стека, самих горутин, векторизация иструкций - нафиг оно нужно Golang разработчику? Постоянно ловлю себя на мысли, что я вроде все это знаю из предыдущего опыта, но оно лежит в glacier storage и в ежедневной рутине нафиг не впарилось.
    Верьте мне, я поднялся с самого дна кернел спейса к свету распределенных транзакций в k8s кластерах.

    • @yashkevich8164
      @yashkevich8164 3 месяца назад

      Наверно потому что все вопросы которые уже можно было задать, были заданы. Надо же что то новое спрашивать))) А вообще круто что у вас вся эта информация сохраняется в голове. Я вот могу что то такое помнить только в контексте подготовки именно к собесу, через не продолжительное время все выветривается. С другой стороны какая вероятность именно мне это встретить на собесе?) и нужно ли это специально себе вкладывать в память

  • @yakomisar
    @yakomisar 8 месяцев назад +6

    Владимир, можешь дать ссылки на литературу, где покрыты темы из интервью? Хотелось бы почитать.

  • @Serj1c
    @Serj1c 5 месяцев назад

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

  • @ilyahontarau7759
    @ilyahontarau7759 10 месяцев назад +5

    про Context Switching потоков и потоки, горутины как мне кажется не сильно точно описали
    TLB и вообще кеши не обязательно могут вымываться, если потоки одного процесса и на одном и том же ядре процессора.
    еще непонятно про какие потоки в юзер-спейсе, в кернал-спейсе или какой-то гибридный вариант идет речь.
    если про kernal space, то не указали одну из главных причин - syscall и все накладные расходы.
    в user space switching потокв будет столько же стоить как и горутин.
    в любом случае вопросы интересные и заставляют покопаться

  • @maksimbiriukov5483
    @maksimbiriukov5483 10 месяцев назад +1

    Отличные вопросы. Очень понравилось интервью!

  • @antoniusupov
    @antoniusupov 10 месяцев назад

    Владимир, очень жду видео про базы данных

  • @ep4sh
    @ep4sh 8 месяцев назад +4

    Владимир, здравствуйте! Такой вопрос - во многих компаниях сейчас устраивают подобные собеседования, возникает ощущение, что нанимают системного программиста, применяют ли ребята свои знания на работе, или же это не уходит дальше собеседования? Или вопросы, так скажем, требующие просто общей эрудиции?

    • @user-uj6oi5sf6b
      @user-uj6oi5sf6b 6 месяцев назад

      Знания этих нюансов в 99% случаев никак вам не поможет в реальной работе.
      Это только для собесов, чтобы как-то синьёров от остальных отделить.
      Всё, что вам надо знать про concurrency в GO в реальной жизни - это когда её НЕ использовать,
      т.е. когда нужно выставить GOMAXPROCS=1. Скорее всего вы с такой ситуацией не столкнетесь. В остальных же Go Runtime сделает всё за вас очень эффективно.
      Оптимизация в GO - это в первую очередь работа с памятью. В этом видео эта тема совсем не раскрыта.

  • @hurricane-rus
    @hurricane-rus 9 месяцев назад +3

    За интервью спасибо, было интересно)
    Для критиков - ну, собственно никто и не говорил, что это пример типового сеньорного Go-собеседования.
    Это была проверка знаний довольно узкого профиля, которые нужны, если мы хотим выжать из Go максимум производительности (например, в каком-нибудь хайлоаде Авито или Озона).
    И понятно, что во всех остальных случаях почти все это не нужно, и большая часть времени будет уходить на решение бизнесовых, а не таких высокотехнических задач.

    • @vladimir_balun_programming
      @vladimir_balun_programming  9 месяцев назад

      Не за что!

    • @user-qx3km6wp1p
      @user-qx3km6wp1p 9 месяцев назад +14

      За авито не скажу, а в озоне, если кто-то начнет оптимизировать продуктовый сервис на таком уровне, то его пошлют сначала оптимизировать логику и работу с памятью, т.к. проблема практически всегда там. Если этого не хватит - поскейлят поды. Устраивать в микросервисе жесть с оптимизацией, об которую потом сломают голову другие разработчики - никто не будет.

    • @yakomisar
      @yakomisar 8 месяцев назад

      @@user-qx3km6wp1pтак и есть))

  • @arturivnwch
    @arturivnwch 10 месяцев назад

    ку!
    давно смотрю твои видео! можешь сделать2 часть "как правильно составить резюме"?

    • @batpyiiikob7245
      @batpyiiikob7245 6 месяцев назад

      GPT ЧАТ в помощь

    • @arturivnwch
      @arturivnwch 6 месяцев назад

      уже давно составил)) в топ банк залетел@@batpyiiikob7245

    • @sodz5144
      @sodz5144 29 дней назад

      @@batpyiiikob7245 Это не работает.

  • @antoniusupov
    @antoniusupov 10 месяцев назад

    Вот это вообще в тему

  • @zhaisansarsengaliyev
    @zhaisansarsengaliyev 10 месяцев назад

    Ку, а всегда ли на собесах на высокие должности проходят так больше по операционным системам? Просто если чисто по Go, или Backend разработку спрашивать, то видимо изи и неинтересно да или как?)

    • @user-hk1pj2nf3f
      @user-hk1pj2nf3f 10 месяцев назад +1

      меня недавно спрашивали по ОСке на стажера фронта))) Зависят от компании, если не в помойку, то может и спрашивают

  • @user-qi6vq3gb9s
    @user-qi6vq3gb9s 4 месяца назад

    Небуферизированный канал чуть быстрее, но ведь если в момент записи в буферезированный канал, у него есть читатель, то передача данных выполняется ровно также, как и с буферезированным каналом

  • @maximgrigorev3621
    @maximgrigorev3621 10 месяцев назад

    Есть книги уровня Рихтера, но под го?

  • @MAGAVHEBRON
    @MAGAVHEBRON 7 месяцев назад

    Если у P будет одна общая очередь, при записи в нее, они будут инвалидировать локальные кеши очереди на ядрах, и всем придется ожидать новой подгрузки пр обращении в нее, это была основная причина создания локальных очередей. Например у одного экземпляра sync.Pool под капотом на каждый P свой пул, по тем же причинам.

  • @user-qx3km6wp1p
    @user-qx3km6wp1p 10 месяцев назад +16

    Конечно знание всех этих деталей работы потоков и горутин - здорово. Но какое это имеет отношение к 99% задач, которые решает пусть и синьор го? Если нужна супер оптимизация кода, то возможно выбран не тот инструмент?

    • @cruisecontrol1489
      @cruisecontrol1489 9 месяцев назад +4

      Тут очевидно человек проникся частью низкоуровневых концепций и теперь эта инфа просачивается в любом его вопросе

    • @sodz5144
      @sodz5144 29 дней назад

      Я проходил эту стадию. Был проект с широким использованием многопоточности и конечно конкуренции(Биллинг с большим потоком данных и очень узким окном расчета). Так вот новоприбывшие разработчики очень слабо разбирались в теме(по сравнению с дедами конечно). Проблема заключалась в том, что такому человеку не поручишь основные задачи проекта, только рутину. Приходилось натаскивать. Позже эти новички становились матерыми и очень уверенными в себе(иногда не оправдано), т.к. другие задачи выглядели просто рутиной.
      На самом деле многопоточность очень проста когда ты её переварил и понял.

  • @user-sp9lg6pj4x
    @user-sp9lg6pj4x 10 месяцев назад +2

    Привет. Я только начинаю изучать Golang и мне правда интересно, каким образом я могу изучить такие нюансы Go, достаточно изучать документацию и соответствующую литературу?

    • @vladimir_balun_programming
      @vladimir_balun_programming  10 месяцев назад

      Нужно изучать не язык, а Computer Science с использованием этого языка программирования

    • @user-sp9lg6pj4x
      @user-sp9lg6pj4x 10 месяцев назад

      @@vladimir_balun_programming, благодарю за ответ

    • @Roman-oc9df
      @Roman-oc9df 10 месяцев назад

      @@vladimir_balun_programming Какие ресурсы посоветуете, и где сами изучали, если не секрет?

    • @murikame817
      @murikame817 10 месяцев назад

      @@Roman-oc9df на канале есть видео про это :)

    • @vadimkogay8681
      @vadimkogay8681 9 месяцев назад

      Посмотрите лекции Роман Липовский он все хорошо объясняет в течении курса создают свои корутины, мутексы, шедулеры (правда это там все на сях) и да там уже не о go, java, php там даются фундаментальные знания

  • @ghettoar2529
    @ghettoar2529 9 месяцев назад

    А что значит в горутинах стэк динамический в отличие от потоков. В потоках он статический? Это про стек регистров или чё то такое?

    • @vladimir_balun_programming
      @vladimir_balun_programming  9 месяцев назад

      В горутинах он растет, в потоках он фиксированный (абстрактно говоря)

    • @ghettoar2529
      @ghettoar2529 9 месяцев назад

      @@vladimir_balun_programming А не подскажите какую нибудь статью, чтобы разобраться что есть поток в горутине

  • @xxxvita
    @xxxvita 10 месяцев назад

    Задач бы посложнее на конкаренси в виде кода и решение накодить.

  • @klasdtigra
    @klasdtigra 9 месяцев назад +1

    Судя по тому что сеньор не знал многих вопросов эти вопросы либо не нужны в реальной работе либо сеньор слабоват
    Но все же кажется скорее что это не интервью, а просто толк о программировании
    Если не понимать зачем эти вопросы задавать (ну часть из них) то это совершенно бесполезное интервью на котором нормальный сеньор будет выглядит бледно хотя в реальности он вполне компетентен

  • @sodz5144
    @sodz5144 29 дней назад

    мед для ушей....многопоточность.

  • @rerurkful
    @rerurkful 5 месяцев назад

    Самое гдавное в go, за быть что есть append!!!

  • @xxxvita
    @xxxvita 10 месяцев назад

    Интересно, если сама идея и вопросы нравятся, а как собеседуемый отвечал не нравится- это лайк или дизлайк?

    • @rays14
      @rays14 10 месяцев назад

      Это - написать, что конкретно не понравилось, чтобы была польза от комментария)

    • @learngolang-od2qp
      @learngolang-od2qp 10 месяцев назад +1

      Дизлайк же пойдёт не собеседуемому

    • @xxxvita
      @xxxvita 10 месяцев назад

      @@learngolang-od2qp согласен.

  • @user-jf3iu8vi7k
    @user-jf3iu8vi7k 9 месяцев назад +5

    а давайте такие темы - редис, кафка, паттерны pub-sub, сложные sql, nosql, паттерны проектирования в ооп, аспекты, инфрастуктура, логстеш, эластик? это бы я смотрел постоянно вообще. зачем надо горутины и мьютексы под капотом спрашивать?.. планировщик, мьютексы под капотом..это учится наизусть перед собеседованием и забывается потом как ненужное.

    • @user-he4st2ro5h
      @user-he4st2ro5h 7 месяцев назад

      Потому что это база. Что ты собрался «учить» в редисе и кафке?

  • @MAGAVHEBRON
    @MAGAVHEBRON 7 месяцев назад +1

    Mutex в Go 3 стадийный, сначала атомиками проверяем можем ли захватить замок, этой же операцией и лочим, если можем. Потом идем и делаем банальный, но очень короткий спин лок, это позваляет в большенстве случаев не уйти на парковку. Затем опять атомиком пытаемся захватить замок. Если не вышло, паркуем рутину.

  • @maximdumbov9110
    @maximdumbov9110 7 месяцев назад +3

    Смешно. Они все заучивают "как устроены горутины", а как дошло до реального программирования оба мычат какую-то херь. "Проще взять спинлок", ога.