Открытое собеседование на Go-разработчика | Анонс менторской программы

  Рет қаралды 29,393

Эйч Навыки — менторская программа

Эйч Навыки — менторская программа

Күн бұрын

Настоящее собеседование на Middle Go разработчика: реальные вопросы, кейсы, задачи. Все происходит так, если бы кандидат пришел на собеседование в команду. Расскажем почему спрашивали именно эти вопросы и как лучше всего подготовиться к собеседованию.
Проведет интервью Сергей Парамошкин
- Руководит центром разработки и автоматизации в МТС.Digital
- В подчинении три команды разработки
- Интервьюирует респондентов на позиции Junior, Middle и Senior
- Больше 10 лет в IT, 7 лет опыт в Go
- Декан факультета по Golang в GeekBrains
Чтобы получать уведомления о предстоящих открытых интервью или записаться на менторскую сессию, напишите нашему боту: t.me/skills_mentee_bot?start=...
00:00 Интро
00:50 Бэкграунд Димы
02:24 Менторская программа
03:08 Бэкграунд Сергея
03:52 Бэкграунд Олега
05:14 Начало интервью
05:41 Объектно ориентированная модель в GO
07:16 Чем слайс отличается от массива?
07:56 Как увеличивается капасити при append'е?
08:54 Что можно сказать про map'у?
11:49 Какими свойствами должны обладать ключи в map'у?
12:40 Может ли быть ключом map'ы структура?
13:01 Возможны ли случаи когда перебор по слайсу будет работать быстрее, чем по map'е?
14:47 Что такое интерфейс и в частности пустой интерфейс в GO?
15:24 Как проверить соответствует ли структура интерфейсу?
16:48 Задача про структуры
17:40 Как оптимизировать поля?
18:18 Что находится перед названием метода?
18:49 Что означает звёздочка у ресивера?
19:10 Какое поведение по дефолту в GO?
19:33 Сколько весит пустая структура?
19:56 Задача про функцию
20:49 Замыкания. Что такое клоужер и как оно работает?
21:57 Можем ли мы дописать какие-то методы к пакету ?
22:33 Что из себя представляет горутина?
23:41 Сколько весит горутина?
23:56 Что ты знаешь о GMP паттерне?
25:11 Сколько в паттерне очередей? И какие?
25:59 Могут ли горутины воровать друг у друга задачи?
26:44 Когда мы можем получить дедлок? И что означает дедлок при работе с горутиной?
27:23 Какие есть ещё способы взаимодействия с горутиной(кроме каналов)? Как они могут работать?
27:44 Как завершить толпу горутин, не пристреливая main?
28:09 Какие типы каналов существуют? В чём их отличие?
28:59 Что можно сделать с каналами?
29:38 Что будет, если мы попытаемся написать закрытый канал?
30:04 Как проверить, что канал закрыт?
30:17 Что будет при чтении из закрытого канала?
30:51 Можно ли тоже самое сделать на записи?
31:09 Что делает select при работе с каналами?
31:27 Что делает default? Зачем он нужен?
32:06 Что такое контекст?
32:38 Кейсы с контекстами (применение)
33:00 ACID аббревиатура как расшифровывается?
33:44 Какие типы изоляции транзакций бывают?
35:16 С какими базами данных работал Олег?
35:37 Какие индексы знает Олег?
36:20 Задача про контекст
37:54 System design. Кейс-задачи.
41:40 Конструкции panic, defer, recovery
44:15 Что можно сказать про http?
45:35 Знаешь ли про существование http3?
47:33 Как отдебажить протобаг?
49:44 Сетка TCP и UDP, чем различаются?
50:20 Docker Compose, Linters
50:59 Как работать с Kafka?
51:26 С какими очередями ещё работал Олег?
52:12 Фидбэк от Сергея про интервью с Олегом
54:55 Вопросы из чата
58:34 Про менторскую программу
01:03:43 Дополнительные вопросы из чата
01:08:23 Про прошлое собеседование
01:08:58 Вопросы из чата
01:15:03 Резюмирование

Пікірлер: 54
@digital_ninja
@digital_ninja 2 жыл бұрын
Спасибо большое. Очень полезный контент. На русском лайвинтервью по го почти не было.
@n1ghtfre900
@n1ghtfre900 2 жыл бұрын
> а если мы построим мультимастер репликацию? > ну тогда можно аутсорснуть кому-нибудь эту историю... спасибо за поднятое настроение)
@user-nl9oc9rp1h
@user-nl9oc9rp1h Жыл бұрын
37:54
@Shurikus84
@Shurikus84 2 жыл бұрын
Полный перебор по слайсу всегда быстрее полного перебора по map, а не в каких-то специальных случаях. Даже без всяких кешей процессора, там же обвязка с рандомизацией. Если бы вопрос был наоборот - бывает ли перебор по слайсу быстрее доступа по ключу к map - и тут уже действительно ответ да в особых случаях, на map меньше 8.
@sauvignonblanc5086
@sauvignonblanc5086 2 жыл бұрын
Найс контент) Спасибо 👍🏼
@sergei9701
@sergei9701 2 жыл бұрын
Спасибо, пойду учить цитаты разрабов про закрытые каналы и другие аспекты языка.
@user-nn1mq3gb8g
@user-nn1mq3gb8g 2 жыл бұрын
большое спасибо за видео , уверен многим это будут на пользу ! Есть не большое но ) Уже не в первый раз слышу от Вас про кеш , тут многие ребята не с большим опытом - не хотелось бы искажать их представление о кеше в рамках систем дизайна 1) в большинстве случаев кеш это костыль , его надо применять очень осознано 2) в топку субд у которой реплики разъезжаются с мастером (ладно если пару раз все бывает и это можно устранить с помощью тулинга бд) 3)исходя из первого то костыль породит еще и синхронизацию которую надо будет реализовать валидацию, инвалидацию , нехватка памяти и.т.д Породит целую инфраструктуру которую надо поддерживать со своими отдельными проблемам ) Хорошо взвешенный выбор субд+архитектура избавит от кеша или очень сильно его минимизирует . А еще не совсем понятно от куда у большинства опыт в высоконагруженных проектах ?) у нас типа их пруд пруди ?)
@rattlehead7q
@rattlehead7q Жыл бұрын
+1
@dmitriyobidin6049
@dmitriyobidin6049 11 ай бұрын
Тоже было очень странно услышать про кэш в рамках такого вопроса. Вообще думал поднимуть вопрос САР теоремы а тут как будто кэш все проблемы решит. Так то тоже не ракрыт вопрос как инвалидировать кэш после обновления БД и какие механизмы для этого использовать. Т.е. от той самой проблемы задержки между обновлением и репликацией/инвалидацией мы никуда не ушли, только заменили одну на другую... Кэшировать то как раз таки лучше те данные которые редко меняются. Еще не разу не видел чтобы транзакционные данные хорошо поддавались хэшированию.
@wskeal86
@wskeal86 2 жыл бұрын
Спасибо за выпуск. Durability это долговечность, надежность это reliability.
@sergeyandriyanov692
@sergeyandriyanov692 2 жыл бұрын
Отличный проект, ребят! Обязательно к вам приду! Начал учить Go.
@user-ff3lc1et3u
@user-ff3lc1et3u Ай бұрын
как успехи спустя 2 года?
@user-vt5uk4cj1h
@user-vt5uk4cj1h 2 жыл бұрын
Олегу задали вопросы про уровни изоляции и сделали вывод что он там хромает. Странный вывод. Вопрос интервьюерам. А как часто вы меняете дефолтные значения уровней изоляции ? 80% разрабов работающих не в финтехе даже не знает, где это меняется!
@dmitriyobidin6049
@dmitriyobidin6049 11 ай бұрын
Ну вывод то правильный. То что это нахрен не надо - это второй вопрос.
@Levelord92
@Levelord92 2 жыл бұрын
Можете объяснить что такое выравнивание памяти простым языком?
@Shurikus84
@Shurikus84 2 жыл бұрын
Ключем к map может быть итерируемый массив. Критерий это сравнимость типа данных ==
@user-vt5uk4cj1h
@user-vt5uk4cj1h 2 жыл бұрын
Про функцию в defer вопрос скорее всего подразумевал нюанс, что значение аргументов переданные в именованую функцию вычисляются в момент инициализации, а значения аргументов переданные в безымянную функцию с defer берутся в момент сработки defer.
@user-nl9oc9rp1h
@user-nl9oc9rp1h Жыл бұрын
В анонимной функции defer работает точно так же, как и не в анонимной
@wskeal86
@wskeal86 2 жыл бұрын
14:07 Интересно. Побенчмаркал, создал массив строк на 1000 элементов и мапу со строковыми ключами на 1000 элементов. Искомую строку поставил самым последним элементом массива (чтобы массив целиком прогонялся от первого до последнего элемента при поиске) Результаты: Поиск ключа в мапе: ~7ns/op. Поиск элемента в массиве перебором: ~700ns/op. Разница в 100 раз в пользу мапы. Думал, может с интами будет быстрее, создал мапу с интовыми ключами (в качестве значений struct{}{}) и массив с элементами типа int. Та же история, мапа ищет в ~100 раз быстрее. Сократил количество элементов до 100 (и в массиве и в мапе). Мапа перформит всё равно быстрее, раз в 50. Возможно массив на 5-10 элементов будет пробегаться быстрее мапы, не тестил, но и это вряд ли. Процессор i7 на MacbookPro. Да, массив влазит в кеш целиком и на каждой итерации происходит не обращение к памяти, а внутри кеша. Но, видимо, мапы в go оптимизированы так, что прогулка по поинтеру (на бакет) + прогулка по самому бакету (max 8 элементов по дефолту) всё равно получается быстрее, чем перебор массива влезающего в кеш целиком.
@aleksandrsavvinov4768
@aleksandrsavvinov4768 2 жыл бұрын
go 1.17 10000 элементов cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz BenchmarkSlice-12 469772 2556 ns/op BenchmarkMap-12 128344011 9.663 ns/op 1000 элементов cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz BenchmarkSlice-12 4334937 274.6 ns/op BenchmarkMap-12 126898712 9.375 ns/op 100 элементов cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz BenchmarkSlice-12 24449779 42.83 ns/op BenchmarkMap-12 128677920 9.306 ns/op 10 элементов cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz BenchmarkSlice-12 238751803 4.912 ns/op BenchmarkMap-12 129417805 9.301 ns/op 1 элемент cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz BenchmarkSlice-12 467830162 2.534 ns/op BenchmarkMap-12 164359431 7.316 ns/op
@tandemwarhead
@tandemwarhead 2 жыл бұрын
Но речь шла про перебор, а не про поиск?
@wskeal86
@wskeal86 2 жыл бұрын
@@tandemwarhead как я понял, собеседующий имел в виду то, что в некоторых случаях, путем перебора мы можем найти нужное значение быстрее в слайсе, чем по мапе, несмотря на то, что ассимптоматическая сложность нахождения элемента в массиве(слайсе) равна O(N), а в мапе O(1). Но если речь шла про скорость перебора, а не нахождения, то причем тогда здесь кеши проца? Ведь мапа любого размера будет итерироваться дольше из-за указателей, так как при итерации нужно скакать по разным участкам памяти, а не смещаться на константную величину как при итерации по слайсу/массиву. Здесь кеши проца, кмк, не помогут.
@souichiX
@souichiX 2 жыл бұрын
@@wskeal86 чтобы задействовать кэш нужно было в массиве элемент искать не один раз, а несколько раз, и потом уже смотреть что будет по скоростям
@wskeal86
@wskeal86 2 жыл бұрын
@@souichiX во время бенчмаркинга и так это происходит (несколько, точнее много раз).
@chist_100
@chist_100 2 жыл бұрын
Разве компилятор не перераспределяет поля, чтобы оптимизировать хранение в памяти, в плюсах современных точно распределяет, верю что в го тоже
@vladislavrodin8036
@vladislavrodin8036 2 жыл бұрын
Человек признался, что слушал предыдущее видео, в котором вопросы по Гошке были на 90% такие же - смысл этой части не понятен. Как пошли вопросы по бд(чего не было на прошлом видео) - сразу "поплыл". Вопрос к организпторам: т.к. много топ компаний рф(тиньк, яндекс, авито и тп) активно внедряет подход к собесам из фаанга(а вне РФ - это уже давно стандарт) с отдельным секциям по алгоритмам и систем дизайну, то предоставляете ли вы менторинг по этим направлениям?
@Skills_mentor
@Skills_mentor 2 жыл бұрын
Да, мы пытаемся охватить не только Go, но и алгоритмы и System Design
@luckytima2315
@luckytima2315 2 жыл бұрын
Не нашел менторинг для начинающих в телеге, там просто бот
@user-ro7fy7vk7u
@user-ro7fy7vk7u 2 жыл бұрын
Подскажите, пожалуйста, что за рыба такая «контракт», впервые слышу)
@user-op7xo8dc8o
@user-op7xo8dc8o 2 жыл бұрын
по сути это то из чего состоит запрос и ответ в ручке API
@bublick346
@bublick346 2 жыл бұрын
Это метафору такую они использовали
@maksimfedorov2632
@maksimfedorov2632 2 жыл бұрын
контракт - довольно широкое применение слова... любой API - это контракт, публичное АПИ какого-то пакета - контракт... схема сообщений, которые прийдут - контракт, даже конфигурация и ее варианты - контракт примите это как "договоренность", описанную или логикой или кодом (типами и интерфейсом) или ожидаемой схемой данных, крч все зависит от контекста обсуждения
@evgeniysergeev9701
@evgeniysergeev9701 2 жыл бұрын
Одно из определений термина интерфейс - это контракт между двумя сущностями, одна из которых обладает сигнатурами неких методов. Вторая сущность, соглашаясь на этот контракт - обязывается реализовать все описанные методы. То есть если ты создаешь некую структуру, в которой планируешь имплементировать интерфейс - ты обязан реализовать описанные методы в интерфейсе. В контексте этого интервью контракт = интерфейс.
@maksimfedorov2632
@maksimfedorov2632 2 жыл бұрын
​@@evgeniysergeev9701 вопрос про слово "контракт" а не интерфейс :)
@vladimireliseev7602
@vladimireliseev7602 2 жыл бұрын
Ух,оказалось за это надо платить(
@yarbersheer8559
@yarbersheer8559 2 жыл бұрын
сидишь такой.. на всё отвечаешь без проблем и с допами.. а тебя даже на джуна не берут потому что резюме не то) Как я рад жить в этом мире)
@souichiX
@souichiX 2 жыл бұрын
потому что нет опыта работы, нужно указывать в резюме и говорить что он типа есть, лайфхак, если вскроется что это не так вас никто не застрелит и не посадит
@user-pg6mb6il1c
@user-pg6mb6il1c 2 жыл бұрын
@@souichiX а как доказать, что он есть?)
@souichiX
@souichiX 2 жыл бұрын
@@user-pg6mb6il1c для этого есть собеседование и испытательный срок
@OliaYarukhina
@OliaYarukhina Жыл бұрын
А проэкты на гите есть?
@yarbersheer8559
@yarbersheer8559 Жыл бұрын
@@OliaYarukhina ))) за 9 месяцев я уже в мидлах )) так что всё хорошо, спасибо)
@maratbogatyrev3201
@maratbogatyrev3201 Жыл бұрын
В бд они оба походу плавают :)
@melickon
@melickon 2 жыл бұрын
Кажется работодатель сам не знает, зачем у select нужен default. Или просто не раскрывает карты, а соглашается с кандидатом :)
@maksimfedorov2632
@maksimfedorov2632 2 жыл бұрын
да, согласие или умалчивание помогают не нервировать кандидата, при этом одновременно делает злую шутку с кандидатом и зрителями
@courtneywilson3652
@courtneywilson3652 2 жыл бұрын
если честно, system design у парня на нуле, по го - ну такое себе, джун. жаль CAP-теорему не тронули. По поводу master-slave - тут больше балансировщик с кворумом, а вот кэширующий прокси - это новый слой, который по логике, тоже должен быть в кластере, т.е. проблему репликации просто закрыли кэшом!?!?!?!?!? так давайте все писать в кэш + в очередь на запись в БД. Stiky-balancer + master-slave + cache (persistent) + CQRS и кворум
@souichiX
@souichiX 2 жыл бұрын
Хотелось бы в видео чтобы было меньше грубых слов, все же разработчики, а то "чуваки, фиговый, кореша, мутим" и т д
@matthewbrown797
@matthewbrown797 Жыл бұрын
Кореш, ты че епта, расслабь свой кэш!
@vladgromov9213
@vladgromov9213 Жыл бұрын
Какой нежный
@merlin7411
@merlin7411 Жыл бұрын
Уйти с C# на го, это как конфетку на дерево обменять, ну такое...
Открытое собеседование на Go-разработчика | Тренировочные интервью
1:08:08
Эйч Навыки — менторская программа
Рет қаралды 64 М.
Sigma girl and soap bubbles by Secret Vlog
00:37
Secret Vlog
Рет қаралды 15 МЛН
Best Toilet Gadgets and #Hacks you must try!!💩💩
00:49
Poly Holy Yow
Рет қаралды 22 МЛН
ЧУТЬ НЕ УТОНУЛ #shorts
00:27
Паша Осадчий
Рет қаралды 10 МЛН
WORLD'S SHORTEST WOMAN
00:58
Stokes Twins
Рет қаралды 126 МЛН
Golang: выравнивание полей структур. Struct padding.
11:44
Андрей Шестаков
Рет қаралды 2,4 М.
Открытое собеседование на Golang разработчика
1:42:02
Эйч Навыки — менторская программа
Рет қаралды 6 М.
Чего ожидать от HTTP/3 + Go
51:07
Нина Пакшина
Рет қаралды 10 М.
Собеседование в IT
3:39
Воинствующие Аметисты
Рет қаралды 2,2 МЛН
Открытое собеседование на Go-разработчика
1:25:59
Эйч Навыки — менторская программа
Рет қаралды 4,4 М.
这是王子儿子吗
0:27
落魄的王子
Рет қаралды 20 МЛН
Did you see the photo?
0:20
Women Power
Рет қаралды 39 МЛН
как пройти скулбоя за 36 секунд?
0:22
Holy Baam
Рет қаралды 810 М.