Співбесіда з Go. 200+ запитань для Junior, Middle, Senior

💡 Усі статті, обговорення, новини для початківців — в одному місці. Приєднуйтесь до Junior спільноти!

Цього разу героєм рубрики, що присвячена технічним співбесідам, є Golang (або просто Go). Як завжди, ми з’ясували у реальних СТО та інших спеціалістів, що проводять технічні інтерв’ю, які питання вони ставлять кандидатам. Результатом ділимось з читачами DOU.

Junior

Software engineering

1.Які бувають області пам’яті програми? У чому їхні особливості та відмінності?
2.Розкажіть, що ви знаєте про HTTP-протокол, які складові частини запиту? Які статус-коди знаєте, які групи можна виділити?
3.Назвіть та опишіть будь-який патерн програмування (на ваш вибір). Коли його доцільно використовувати та чому?
4.Що таке процеси та потоки в операційній системі? Опишіть їхній взаємозв’язок у контексті виконання програми.
5.Що таке шаблон проєктування (design pattern)?
6.Які знаєте алгоритми сортування?
7.Що таке Big-O notation?
8.Які відмінності між unit-тестом та інтеграційним тестом?
9.Що таке mock і для чого його використовують?
10.Що таке SDLC? Які етапи й навіщо вони потрібні?
11.Що таке SOLID?
12.Що таке MVC?
13.Що таке DBMS? Яка різниця між СУБД та базою даних?
14.Які бувають типи баз даних?
15.Що таке Docker?

Бази даних

16.Опишіть ACID-властивості реляційних баз даних.
17.Є таблиця в реляційній БД зі 100 тисячами рядків. SELECT-запит з такої таблиці триває час t. Як зміниться час запиту, якщо кількість рядків буде один мільйон? Які є варіанти, залежно від запиту/таблиці?
18.Для чого використовують індекси в базах даних і завдяки чому (яким структурам даних) вони працюють?
19.З якими NoSQL-базами даних працювали? Які їхні переваги над реляційними базами?

Go

20.На вашу думку, у чому перевага Go перед іншими мовами?
21.Що таке горутини й навіщо вони?
22.Що таке GOROOT і GOPATH?
23.Які типи даних використовуються в Go?
24.Що робить функція init()? Наведіть приклади, де її варто використовувати. Наведіть приклади, коли варто уникати.
25.Поясніть різницю між помилкою і панікою.
26.Як відловлювати паніки?
27.Як отримати теперішній час?
28.Що таке iota?
29.Яка різниця між слайсом і масивом?
30.З яких частин складається змінна типу slice?
31.Як працює append?
32.Що таке len і capacity в slice?
33.Що таке пакети?
34.Що таке інтерфейси і як вони працюють?
35.Для чого потрібні інтерфейси в Golang?
36.Що таке тип даних string?
37.Чим відрізняються лапки в Go (подвійні, одинарні, зворотні): "",'', ``?
38.Що таке rune?
39.Чи може змінна типу string приймати nil-значення?
40.Чи можна повернути з функції кілька значень?
41.Що відбувається під час конкатенації рядків?
42.Як ефективно склеїти кілька рядків?
43.Як записати в файл?
44.Що таке структура?
45.Що буде, якщо викликати log.Fatal?
46.Поясніть різницю між конкурентністю і паралельністю?
47.Як оголосити відкладений виклик?
48.Що таке канал? Які типи каналів ви знаєте? Для чого вони потрібні?
49.Яка різниця між буферизованим і небуферизованим каналами?
50.Що буде, якщо читати із закритого каналу? Що буде, якщо писати у закритий канал?
51.Як перевірити, що змінна типу map має збережене значення для певного ключа?
52.Які стандартні env-змінні в Go?
53.Яка різниця між value & pointer receiver?
54.Як зробити type assertion?
55.Як та навіщо робити type assertion?
56.Як написати benchmark?
57.В якому порядку виконуються кейси в select?

Практичні завдання

58.Реалізувати алгоритм двійкового пошуку елемента у слайсі.
59.Є код. Що виведеться на екран? Що потрібно зробити, щоб побачити запропонований висновок Foo1 і Foo2?
60.Є код. Що виведеться на екран? Як вивести на екран літери?
61.Поміняйте місцями значення двох змінних без тимчасової допоміжної змінної.
62.Оберніть slice у зворотному порядку.
63.Перемістіть усі zero values у кінець масиву.

Middle

Software engineering

1.У чому переваги та недоліки використання protobuf у порівнянні з JSON?
2.Назвіть деякі з принципів 12-factor-app. Для чого використовують graceful shutdown?
3.Що таке dependency injection? А dependency inversion?
4.У вас є ssh-доступ на Linux-сервер, де запущено вебсервер. З сервером періодично відбуваються незаплановані рестарти. Сервер записує логи у файли (розмір лог-файлу > 10 Mb). Які *nix-команди ви можете використати, щоб проаналізувати проблему?
5.Як працює TLS handshake?
6.Яка різниця між TCP & UDP? В якій ситуації UPD краще?
7.Розкажіть у найдрібніших деталях, що відбувається, коли клієнт посилає запит на сервер, а сервер цей запит отримує.
8.Що таке Clean Architecture? Наведіть приклад.
9.Що таке оперативна пам’ять?
10.Як різниця між stack & heap?
11.Для чого потрібні Docker та Kubernetes?
12.Розкажіть про абстракції Kubernetes, з якими працювали?
13.Що таке Pod? Як він влаштований?
14.Розкажіть про Data structures: stack, queue, linked list, trie, balanced tree.

Бази даних

15.Які шляхи пошуку повільних SELECT-запитів у RDBMS? Які способи пришвидшення таких запитів?
16.Що таке нормальні форми бази даних?
17.Що таке індекси? Які їхні недоліки?
18.Які структури даних можуть використовуватися в індексах баз даних? Як вони працюють?
19.Яка різниця між foreign & primary key?
20.Поняття міграції у контексті баз даних. У чому переваги підходу з міграціями?
21.Що таке реплікація даних? Які варіанти реплікації існують для баз, з якими ви працювали?
22.Яка різниця між SQL і NoSQL?
23.Які типи NoSQL баз даних ви знаєте? Наведіть приклади. Яка між ними різниця?
24.Що таке колонкова БД? Переваги та недоліки.
25.Що таке документоорієнтована БД? Переваги та недоліки.
26.Розкажіть про роботу з key-value базами даних (бажано з власного досвіду).
27.З якими типами даних Redis у вас є практичний досвід? Назвіть приклади, коли їх доцільно використовувати.

Go

28.Якими бібліотеками Go ви користувалися для доступу до RDBMS? Які у них позитивні та негативні сторони?
29.Для чого використовують Context? Які є варіанти скасовування контекстів?
30.Якими способами можна виключити (приховати) поля структури при JSON-серіалізації?
31.Назвіть примітиви пакету sync стандартної бібліотеки. Яке призначення та приклади застосування sync.WaitGroup?
32.Яка різниця між Mutex та RWMutex?
33.Які є способи зупинити N горутин, запущених одночасно (наприклад, worker pool)?
34.Що таке замикання функцій?
35.Поясніть різницю між switch і select?
36.Які є способи дістати дані з JSON?
37.Як у Go реалізовані конструкції циклів?
38.Як влаштований тип map?
39.Який порядок перебору map?
40.Що таке серіалізація? Де вона застосовується?
41.Чи можна використовувати nil для ініціалізації змінної?
42.Чи можна задати місткість map? Чи можна отримати місткість map?
43.Як дізнатися кількість символів у рядку?
44.Що таке кодогенерація і для чого вона потрібна?
45.Чим відрізняється goroutine від OS thread?
46.Як і для чого використовують io.Reader і io.Writer?
47.Як перетворити []io.ReadWriter на []io.Reader?
48.Як вказати головній горутині очікувати завершення роботи всіх робочих горутин?
49.Чи завжди буде швидше передача Pointer як аргументу функції?
50.Що таке варіативна змінна функції? Як працювати з цією змінною?
51.Як працювати з пакетом internal?
52.Як працює імпорт через крапочку і чому це погана практика?
53.Як працює імпорт через підкреслення?
54.Що таке defer()?
55.Як працювати з goto?
56.Що таке reflect.DeepEqual() і reflect.TypeOf()?
57.Як розпарсити час?
58.Як порівняти дві дати?
59.Що таке вказівник і як з ним працювати?
60.Як перевірити, чи змінна імплементує інтерфейс?
61.Що таке embedding?
62.Опишіть кроки процесу тестування.
63.Як писати тести? Що таке табличні тести?
64.Що таке memory leak? Які є способи його виявлення? Як його позбутися?
65.Що таке race condition? Які є способи його виявлення? Як його позбутися?

Практичні завдання

67.Реалізувати перевірку на слова на анаграму. Написати тест і бенчмарк. Оцінити складність розробленого алгоритму.
68.Є код. Що виведеться на екран? Чому?
69.Є код. Чи можна передбачити, що виведеться на екран? Чому?
70.Реалізуйте Stack (LIFO).
71.Реалізуйте linked list.
72.Задача про суму підмножини (Subset Sum Problem). Дано: множина позитивних цілих чисел і значення sum. Визначте, чи існує підмножина даної множини з сумою, яка дорівнює значенню sum.

Input: set[] = {3, 34, 4, 12, 5, 2}, sum = 9

Output: True

Senior

Software engineering

1.Що таке процес і потік? Як вони пов’язані між собою? Чи мають різні процеси чи потоки доступу до однієї області пам’яті?
2.Які інструменти зазвичай використовують для збору метрик і логів? Як працює Prometheus?
3.Як працює docker під капотом?
4.Як працює load balancer під капотом?
5.Для чого потрібні черги?
6.Що таке CQRS?
7.Які архітектури програмного забезпечення ви знаєте?
8.Яка різниця між мікросервісами та монолітом? Які є переваги та недоліки?
9.Як побудувати міжсервісну транзакцію?
10.Що таке розподілені транзакції? Як реалізувати?
11.Які проблеми вирішує патерн Saga?
12.Як реалізувати аутентифікацію в мікросервісній архітектурі?
13.Що таке Event Sourcing?
14.Сформулюйте CAP-теорему.
15.Розкажіть про Raft Consensus Algorithm.
16.У чому різниця між імперативною і декларативною парадигмою програмування? Наведіть приклади мов.

Бази даних

17.Для чого потрібні графові бази даних?
18.Якщо точкові дані прив’язані до часу, які бази даних варто використовувати для збереження цих даних?
19.Що таке Materialized View? У чому відмінність від звичайного View?
20.Що таке ACID? Прокоментуйте, як ACID реалізований в PostgreSQL.
21.Яка різниця між BASE та ACID?
22.Назвіть рівні ізоляції транзакцій?
23.Досвід оптимізації бази. Які інструменти використовували?
24.Що таке шардинг? Які види є?
25.Як працює master-slave реплікація?
26.Як працюють індекси? Як вибрати індекси в таблицях?
27.Розкажіть про optimistic та pessimistic locking.

Go

28.За що відповідає змінна GOMAXPROCS? Яке її значення за замовчуванням?
29.Хто відповідає за планування горутин? Розкажіть про алгоритм роботи планувальника. Навіщо він потрібен, якщо вже й так є системні потоки?
30.Розкажіть про алгоритм роботи garbage collector. Mark and sweep, Reference counting та оптимізації алгоритму в мові Go. Що таке stop the world?
31.Які види багатозадачності ви знаєте? Який з них використовують у Go?
32.Для чого потрібна рефлексія? У чому різниця між рефлексією та кодогенерацією?
33.У чому різниця між value та reference типом? Назвіть декілька прикладів у мові Go.
34.Як зупинити горутину?
35.Як в Go реалізується спадкування?
36.Що таке lvalue і rvalue?
37.Яке у slice zero value?
38.Як вбудувати стандартний профайлер у свій застосунок?
39.Що таке map-reduce? Як його реалізувати в Go?
40.Як в Go працює префіксний інкремент/декремент?
41.Що буде, якщо перетворити в JSON-об’єкт, структура якого містить поля з малими літерами в назвах?
42.Як перервати for/switch або for/select?
43.Як можна оптимізувати виконання великої кількості послідовних операцій читання або запису?
44.Чи можна викликати метод у вказівника (pointer) на структуру, якщо він дорівнює nil?
45.Що буде при спробі запису в закритий канал?
46.Що таке взаємне блокування (deadlock)?
47.У чому особливість nil-каналів?
48.У яких випадках варто використовувати м’ютекси, а не канали, та навпаки?
49.Що таке білд-теги?
50.Як реалізувати LRU cache?
51.Що таке SSA-представлення?
52.Що ви знаєте про роботу з плагінами на Go?
53.Що таке аліаси типів?
54.Що таке падінги в структурах і на що вони впливають?
55.Що таке escape-аналіз?
56.Яка різниця між стеком і купою?
57.Що нам дає пакет unsafe?
58.Чи можна змінити певний символ у рядку? А за допомогою пакета unsafe?
59.Як працювати з рефлексією і що ми можемо з нею зробити?
60.Як під капотом виглядають слайси й мапи?
61.Як працювати з copy()?
62.Як працювати з sync.Pool і sync.Map? Які підводні камені вони мають?
63.Розкажіть про канкаренсі-патерни в Go.
64.Як у Go реалізована арифметика вказівників?*

Практичні завдання

65.Побудувати архітектуру бекенду для оренди самокатів типу Kiwi чи Bolt. Які мікросервіси будуть? Які мови та інструменти? Який клауд-провайдер? Що варто використати як інфраструктуру? Які бази даних та шини повідомлень?
66.Уявімо, що ви провідний розробник на проєкті, як би ви розподілили ролі в команді із 5 людей для найефективнішої роботи?
67.Є код. Чому err! = nil?
68.Вам дають ssh на сервер і просять полагодити вебзастосунок, який «впав». Інформації про сервер і сервіси немає. Які команди ви будете використовувати, щоб зібрати інформацію, знайти та усунути проблему?
69.Реалізуйте двійкову структуру даних дерева пошуку в Go.
70.Знайдіть максимальну суму шляху в трикутнику. (Подано числа у формі трикутника, починаючи з верхньої частини трикутника і рухаючись до сусідніх чисел у рядку внизу, знаходимо максимальну загальну кількість зверху вниз.)


Дякуємо за питання та технічну рецензію Євгену Радіонову, Алі Шанааху, Денису Оленіну, Олегу Геричу, Івану Чоботарю, Іллі Вишневському, Євгену Харківському, Ярославу Подорванову.

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось26
До обраногоВ обраному33
LinkedIn



71 коментар

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

Чергові питання аби набити 200. Тут все підряд: і контейнерізіція,віртуалізація, docker, і CLDC, і clean code і бази данних, і дізайн, і алгоритми, і чого тут тільки нема. Якщо робити співбесіду із такими запитаннями — вийде не співбесіда, а бліц опитування. Тут вийде що людина не співробітника винаймає, а міняється причандаллям з тим хто прийшов на співбесіду. 2. Від деяких практичних завдань взагалі волосся дибом встає, скажімо 68.

то перевірка як вести себе з кодом, написаним іншими ельфами хто пройшов таке інтерв’ю

а что не так с 68? :) или тебе не встречались «синьоры» не способные ответить на такой простой вопрос?
опять же — при чем тут блиц? почему всем нужно объяснять, что на собеседовании задаются не все эти вопросы? еще раз — не все эти вопросы. не все. не!

контейнерізіція,віртуалізація, docker, і CLDC, і clean code і бази данних, і дізайн, і алгоритми

а чего из этого синьор знать не должен?

та знати то можна, а не пройти інтерв’ю на розробку бо ти не знаєш як фіксити упавший продакшн? сумнівно

люди спеціалізуються не просто так, а того що нормальний прошарений девопс краще розбереться в даунтаймі ніж девелопер і нормальний прошарений дба краще розбереться з базою даних

а вас послухати, то вам на проект треба універсальний чак норіс, ну мабуть щоб сів на ментальний шпагат від архітектур інфри через лоадбалансери до своїх обов’язків з розробки, але потім ще й щоб в постгре нирнув якщо менеджеру треба і там собі тихо помер

я не сумніваюсь, що такі універсали корисні і вони є, але чекати це від кожного — трохи занадто наївно, вам не здається?

а что не так с 68? :) или тебе не встречались «синьоры» не способные ответить на такой простой вопрос?

А он простой? ;)

Сносим бинарник (тем более на Go он один-единственный обычно), сносим конфиг старта — где искать?

Или например известно что что-то должно быть на 10.0.3.1:5300 — ну и что именно там должно было быть? `grep -rw 5300 /etc`? А если конфиг на самом деле качался по LDAP, и изменения должны быть где-то в другом месте (и хорошо если кандидат поймёт это)?

Ну кроме алгоритмов и клин-кода, может даже и ничего не знать и все равно будет синиором. Скажем embeded человек пишет. Вопрос 68 — «что ты будешь делать если тебе нужно починить не работающий сервис о котором тебе ничего не известно». Обалденный блин вопрос, потому как если перезапуск не поможет и никого и ничего (вроде документации) не найдется кто расскажет что и как — хакерить вы будете долго. (Конечно мониторить файловую на придет логов можно ну и т.п. извраты но это вообще никак не решает вопрос).

может нужен какой-то дисклеймер к статье? :)
я смотрю тут почтенные помидоры не смогли осилить понимание того, что не все эти вопросы должны быть заданы на собеседовании, но будет очень круто знать ответы хотя бы на 70% этих вопросов.

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

Так, щоб багато не патякати, зробим наступним чином...

Всі з вас, хто сходу напишуть LRU-кеш, пояснять як там ACID під капотом в постгре чи побудують архітектуру Kiwi за 30 хв часу — відсилайте мені резюме прямо щас

откуда взялись 30 минут?
а в чем проблема архитектуру Киви построить?

та нема проблеми взагалі, за 170к та нормальні опціони можна побудувати

Архитектуру любой системы можно строить исходя к требований к ней. Чтобы понимать кто и как ей будет пользоваться, сколько и каких данных будет обрабатываться, какая нагрузка будет генерироваться и т.д. Тогда и вырабатываются требования к програмно-аппаратному комплексу (архитектура), прорабатывается дизайн (схема конструкции и устройства) и т.д. Разработать архитектуру на собеседовании можно попросить ну по факту чтобы узнать человек случаем что то в курсе в самом деле о системном анализе, CLDC или не особо. Я вот не возьмусь дизайнить систему без прояснения по крайней мере высоко уровневых требований к ней. P.S. Кто думает что просто формошлепит, читаем бесцеллер «Псих больница в руках пациентов» Алана Купера. И понимаем что дизайн интерфейсов тоже прорабатывается по тем же принципам системного анализа.

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

А як під час співбесіди взагалі можна розробити архітектуру системи на словах? Моє перше питання в такому випадку — «дайте почитати вимоги». Відповідь завжди одна з двох: або «це тестовий приклад; в нас немає вимог» (а далі пауза), або «ну ви самі придумайте».

так все просто :)
если нет требований — значит и архитектура довольно абстрактная. без конкретики где какая база, кеш и вот это все.
но мое личное мнение — если на собеседовании задают вопросы по дизайну выдуманных систем или из списка книги grokking design interview — стоит задуматься хочу ли я работать с этими людьми. потому что у них даже собеседование построено как попало и они сами не знают чего от меня хотят.

если речь идет про синьор дева, к нему бизнес обычно приходит с очень абстрактными задачами уровня «хочу мышкой окошки закрывать». и, к сожалению, довольно большой процент кандидатов сразу начинает решать «задачу» вместо того, что банально спросить «что бы что? какую проблему мы решаем?»

Не можу з вами до кінця погодитись. Протягом всього часу, що цікавлюсь цими питаннями, я не зміг знайти згадки про процес, в якому архітектура могла би бути первинною. Отже, відомі мені альтернативи такі: (1) розробка вимог -> виділення архітектурно значущих вимог -> розробка архітектури; (2) розробка системи -> виділення аспектів архітектури (поки що в статусі гіпотез) -> перевірка отриманих гіпотез (у разі потреби повертаємось до попереднього кроку) -> побудова архітектури.

я полностью согласен
в том же grokking design interview пишут

You should always clarify requirements at the beginning of the interview. Be sure to ask questions to find the exact scope of the system that the interviewer has in mind

именно поэтому я и говорю, что на таком собеседовании для меня не так важен сам дизайн, сколько момент прояснения требований. если инженер прояснил требования — остальное скорее всего можно просто загуглить. но можно удивиться сколько людей не хотят прояснять требования и действуют на уровне «да тут и так все понятно»

Був би радий, якби хтось пояснив, чому процес requirements elicitation називають system design. Вважаю, що було би коректно проводити такі інтерв’ю з підготовленим документом з вимогами.

объясню — в большинстве случаев у бизнеса некому продумывать технические требования. именно поэтому бизнесу нужны синьор инженеры, что бы им можно было показать бизнес идею, а они помогли с прояснением технических нюансов.

в стартапах таким занимается обычно СТО, но тогда на собеседовании и не нужно спрашивать дизайн :)
а в кровавом крупном ентерпрайзе СТО делегирует дизайн систем вниз и только челленжит их на стадии утверждения.

Тенденція на генералізацію завжди існувала, але термінологія мені все ще не зрозуміла. За такою логікою на етапі testing skills можна було би просити інженера пройти всі попередні віртуальні етапи, а саме: витягнути вимоги із замовника, спроектувати продукт, запрограмувати його та створити тестову документацію.

в стартапах таким занимается обычно СТО, но тогда на собеседовании и не нужно спрашивать дизайн :)
а в кровавом крупном ентерпрайзе СТО делегирует дизайн систем вниз и только челленжит их на стадии утверждения.

ось що і варто було почути в цій розмові

а делегуються кому? архітектам, а не сінйьор інженерам, від яких чекають архітектурних рішень

і компенсації вони отримують відповідні за досвід який вони мають
те саме з дба, девопсами і будь-ким в принципі

а те як виглядає це з подібних інтерв’ю, то це на зарплату сінйьор інжиньора хочуть павліка морозова, щоб кинуть його на амбразури і заткнути будь-які діри, давайте будем вже відверті

Помилка в питанні для Senior #65. Продувати Побудувати. А список питань чудовий, дякую!

Толковый список, спасибо !

А по плюсам есть подобная статья?

Там одиничні цікаві запитання серед купи сміття.

Як і на реальних співбесідах )

Приходьте в гості, у мене є кілька цікавих :) Для підігріву інтересу ось одне із них:
// what is the purpose of these declarations from the standard library? // pay attention to the unusual parameter type template <class T> void ref(const T&&) = delete; template <class T> void cref(const T&&) = delete;

template <class T>
Объявляем шаблонный метод, в котором будет аргумент переменного типа, причем этим типом должен быть обязательно именно класс
const T&&
аргумент типа, указанного в шаблоне, причем это обязательно должен быть rvalue (то бишь, будет создана копия переданной сюда переменной, а исходная занулена.) Причем этот rvalue нельзя изменять внутри функции
= delete;
при попытке использования этой функции компилятор выдаст ошибку.

Я предполагаю, что там рядом задекларирована еще и функция, которая принимает только lvalue, а эта удалена с целью запретить использование ее с rvalue. Т.е. объект передаваемый в эту функцию, должен обязательно быть переменной, имеющий постоянный адрес в памяти, а, например, результат возвращенный другой функцией передавать нельзя

class A; A varA; A someFunction() { return A(); } // так можно cref<A>(varA); // а так нельзя, т.к. функция с аргументом соответствующего типа удалена cref<A>(someFunction()); 

Я прав?

Так, це вірно. Головне питання в тому, для чого додавати кваліфікатор const до типу параметру. На перший погляд, «rvalue нельзя изменять внутри функции» не має ніякого смислу. Більше того, ці функції навіть не мають тіла.

«этим типом должен быть обязательно именно класс» — не обов’язково, int теж підходить. В цьому контексті class може бути замінений на typename без зміни значення коду.

лично я не смог найти ни единого рабочего варианта в котором бы б _не_ срабатывала

template <class T> void cref(T&&) = delete;

а срабатывала бы б _только_

template <class T> void cref(const T&&) = delete;

вы?

Прошу, найпростіший приклад нижче. Аналогічних випадків можна придумати безліч.

template<class T> void std_cref(const T&) {}
template<class T> void std_cref(const T&&) = delete;

template<class T> void bad_cref(const T&) {}
template<class T> void bad_cref(T&&) = delete;

int main() {
	int i = 0;
	std_cref(i);
	bad_cref(i);  // error: call to deleted function 'bad_cref'
	return 0;
}

это не совсем верно поскольку в оригинальной версии std::[c]ref есть также вариант [c]ref(T&)

пруф на спецификации
en.cppreference.com/...​pp/utility/functional/ref

пруф на исходный код
github.com/...​clude/tr1/functional#L532

template<class T> void std_cref(const T&) {}
template<class T> void std_cref(const T&&) = delete;

template<class T> void bad_cref(T&) {}
template<class T> void bad_cref(const T&) {}
template<class T> void bad_cref(T&&) = delete;

int main() {
	int i = 0;
	std_cref(i);
	bad_cref(i);  // error: call to deleted function 'bad_cref'
	              // nope it's alive again
	return 0;
}

снова работает (что логично поскольку i приводится конкретно к T&) и снова остаётся оригинальный вопрос без ответа

// what is the purpose of these declarations from the standard library?

почему именно const T&& ? в каком именно случае будет срабатывать именно const T&& а не просто T&& ?

возможно я не правильно понял оригинальный вопрос?

Ви правильно зрозуміли питання. Хочу звернути увагу, що твердження

в оригинальной версии std::[c]ref есть также вариант [c]ref(T&)

невірне. Варіанту з сигнатурою

cref(T&)
не існує. Аналогічно, не існує
ref(const T&)
Є суттєва різниця між T&& та const T&& в даному контексті. Перший зв’язується з усіма можливими категоріями значень (l-, pr- та xvalue) навіть незалежно від кваліфікаторів. Останній — лише з pr- та xvalue і враховує кваліфікатори.

Ivan Chobotar прав

Підозрюю, що мова йде про цей вислів

ну если ты и правда считаешь это хорошим вопросом на собеседовании — у меня для тебя плохие новости

Тож, ви не могли би уточнити, в чому саме полягають ці погані новини, які ви обоє маєте на увазі?

Мені шкода, що ваш підкол не вийшов.

ну если ты и правда считаешь это хорошим вопросом на собеседовании — у меня для тебя плохие новости

Іване, уточніть, будь ласка, в чому полягають погані новини для мене. Я не зрозумів ваш натяк.

я сначала накатал длинный ответ, а потом понял, что тред про вопросы из другой статьи.
был не прав, прошу прощения :)

Огонь, спасибо!

Якщо питання з блоків «Software engineering» та «Бази даних» питають не для галочки, то тут якісь дуже занижені ЗП djinni.co/...​has_public_salary/golang
З таким багажем можна освоїти Java/Scala і рубить капусту :)

О, дуже крутий і доречний чекліст, дякую!

Для українського тиртирпрайзу — згоден. Побільше ролей, побільше зв’язків-узгоджень між ролями. Удальонка, можна з котом побавитись поки дба апрувить зміну varchar(30) на varchar(31).
Але це стандартні питяння в європейські продуктові контори, які мене питали на співбесідах.
І найцікавіше, що навіть навіть стосовно тиртирпрайзу, вчора наштовхнувся на повністю протилежний досвід — habr.com/...​ompany/jugru/blog/558702 . Ці хлопці виключення, але воно ж працює.

Ой-вей, сердечно дякую Вам та всім людям які видписуються в дусі «склааадно» в цьому тредику. Я виявляється серйозно себе недооцінюю. Чим більше неосиляторів кап-теореми та рафту, тим менше конкуренції в західні продуктові контори.
Підкачаю чекліст, знайду ще стільки ж нови топіків для почитать, да як набридне чілить на ремоутному укро-аутсорсі, то піду аплаїтись на 300кк\наносек.

какие конкретно вопросы для синьора избыточны по базам данных?

вопросы в статье — теоретические. ориентирование в теории поможет человеку в проектировании сервиса/продукта

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

жаль, что Lead Software Engineer не видит дальше своего носа.
синьор, это нечто большее, чем просто более быстрый перекладыватель тикетов из in progress в done.

синьора — человек с довольно широкими и разнообразными знаниями.
зачем мне синьор, который на вопрос об архитектуре сервиса ответит — «подожди, я сейчас погуглю»?

у нас, похоже, принципиально разное понимание кто такой синьор инженер.

Серйозно? Скільки часу я маю витратити скажімо з postgres щоб з закритими очима розказати за реплікацію? Шардинг по id з модом в 10 чи 1000? Сеньор має знати бази SQL, але частина то вже аж з галузі DBA/DBRE.

серьезно, да :)
начнем с того, что в статье не указано про закрытые глаза.
вопрос звучит как "

Що таке шардинг? Які види є?

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

Що таке реплікація даних? Які варіанти реплікації існують для баз, з якими ви працювали?

для того, что бы просто знать, что такое репликация, DBA быть тоже совсем не нужно. какие запросы на какие реплики лучше направлять — для этого целый DBA нужен? смешно же

це якщо питаються загальні знання тоді так...

Хтось то має це зробити

Читаєш отетовотаке і думаєш такий, дааа, і що насправді чекає на такого універсального солдата на проекті?

Автора питання про SOLID для джуна в Go можна публічно забити каменюками на Хрещатику.

чокнемось! 🍺

Шо-шо. А то в не знаете? Легаси говнокод — який виносить мозок за два тижнi.

жаль, что у тебя именно такой опыт.
но я могу тебя заверить — существуют команды сильных инженеров, которым просто западло писать плохой код и существую компании, которые максимально приветствуют engineering excellence

ну так приходи, пройди собеседование, я тебе покажу код и проекты, которые пишут действительно сильные инженеры, а не вот эти вот «я синьор с галеры потому что я тут 10 лет уже гребу»

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

Ну давай розкажи мені тоді як там принципи SOLID в Go реалізуються у вас на проектах, коли там навіть поліморфізму нормального немає, а ми всі послухаємо сінйьора не-з-галєри

за 170к та нормальні опціони

, ну :)
все кроме О — легчайше. но у меня цели обучать случайных людей на доу :) приходи ко мне на мидла — мы тебя подучим, есть отличные менторы

ну от бачите, уже погодились, чудово, вже не SOLID, як мінімум

давайте ще L викинем, бо наслідування як такого нема, залишиться виходить десь всього навсього SID з інтерфейсами але без нормальних абстракцій як таких, і мені от цікаво як умовний джун викрутиться з такого. Зручно, я розумію, на цій темі можна собі самостверджуватись, джуніора можна валить запросто, а з сінйьорами з розумним виглядом не погоджуватись, і збивати зарплату

це називаєтья дуже просто — вопрос на под_бать, бо правильна відповідь в голові інтерв’ювера і треба її вгадати, а це просто банально дуже погане відношення до кандидата на інтерв’ю

ну круто ты придумываешь кто и как проводит собеседование :)
тут два нюанса, которые ты упускаешь:
1 — для джуна ответ уровня «O и L в гошке никак» — хороший ответ.
2 — я, например, предпочитаю собеседовать junior software engineer вместо developer. отсюда и вопросы выходящие за рамки «джун на го»

Підписатись на коментарі