From 29f1eab45d74543d9eea3722d6400ce45a6e3b37 Mon Sep 17 00:00:00 2001 From: zikwall Date: Wed, 13 May 2020 14:11:58 +0300 Subject: [PATCH] Review project structure, simplify readme & navigation --- CACHE_AND_DB.md | 27 ++++++ COMMON.md | 68 ++++++++++++++ GOLANG.md | 1 + INFRASTRUCTURE_AND_DEPLOY.md | 25 +++++ MICROSERVICES.md | 2 + README.md | 177 ++++++++--------------------------- 6 files changed, 161 insertions(+), 139 deletions(-) create mode 100644 CACHE_AND_DB.md create mode 100644 COMMON.md create mode 100644 GOLANG.md create mode 100644 INFRASTRUCTURE_AND_DEPLOY.md create mode 100644 MICROSERVICES.md diff --git a/CACHE_AND_DB.md b/CACHE_AND_DB.md new file mode 100644 index 0000000..1ee81bb --- /dev/null +++ b/CACHE_AND_DB.md @@ -0,0 +1,27 @@ +### Вопросы про кеширование и базам данных + +1. Что такое индексы в MySQL, как и для чего их использовать и создавать? + +2. Что такое составной индекс, как и для чего их использовать и создавать? + +3. Как использовать индексы в JOIN запросах Mysql? + +4. Что такое частичные индексы, как и для чего их использовать и создавать? + +5. В чем отличия InnoDB и MyISAM? + +6. Возможен ли JOIN со вложенными запросами, как? + +7. Что такое дедлоки (deadlock), почему возникают, как можно недопускать? + +8. Что такое HAVING, что он делает как и зачем его использовать? + +9. Разница между WHERE и HAVING и можно ли использовать HAVING без группировки данных? + +10. Что такое EXPLAIN? + +11. Как узнать версию Mysql? + +12. Как можно оптимизировать ORDER BY RAND()? + +13. Как удалить индекс MySQL? \ No newline at end of file diff --git a/COMMON.md b/COMMON.md new file mode 100644 index 0000000..984a0da --- /dev/null +++ b/COMMON.md @@ -0,0 +1,68 @@ +### Общие вопросы + +**1. В чем отличие протоколов TCP и UDP? В каком случае UDP предпочтительнее?** + +__TCP__ – транспортный протокол передачи данных в сетях TCP/IP, предварительно устанавливающий соединение с сетью. + +__UDP__ – транспортный протокол, передающий сообщения-датаграммы без необходимости установки соединения в IP-сети. + +Разница между протоколами TCP и UDP – в так называемой _"гарантии доставки"_. +TCP требует отклика от клиента, которому доставлен пакет данных, подтверждения доставки, и для этого ему необходимо установленное заранее соединение. +Также протокол TCP считается надежным, тогда как UDP получил даже именование “протокол ненадежных датаграмм. +TCP исключает потери данных, дублирование и перемешивание пакетов, задержки. +UDP все это допускает, и соединение для работы ему не требуется. +Процессы, которым данные передаются по UDP, должны обходиться полученным, даже и с потерями. +TCP контролирует загруженность соединения, UDP не контролирует ничего, кроме целостности полученных датаграмм. + +С другой стороны, благодаря такой не избирательности и бесконтрольности, UDP доставляет пакеты данных (датаграммы) гораздо быстрее, потому для приложений, которые рассчитаны на широкую пропускную способность и быстрый обмен, UDP можно считать оптимальным протоколом. +К таковым относятся сетевые и браузерные игры, а также программы просмотра потокового видео и приложения для видеосвязи (или голосовой): от потери пакета, полной или частичной, ничего не меняется, повторять запрос не обязательно, зато загрузка происходит намного быстрее. +Протокол TCP, как более надежный, с успехом применяется даже в почтовых программах, позволяя контролировать не только трафик, но и длину сообщения и скорость обмена трафиком. + +**2. Что такое NAT?** + +Сети обычно проектируются с использованием частных IP адресов. +Это адреса __10.0.0.0/8__, __172.16.0.0/12__ и __192.168.0.0/16__. +Эти частные адреса используются внутри организации или площадки, чтобы позволить устройствам общаться локально, и они не маршрутизируются в интернете. +Чтобы позволить устройству с приватным IPv4-адресом обращаться к устройствам и ресурсам за пределами локальной сети, приватный адрес сначала должен быть переведен на общедоступный публичный адрес. + +И вот как раз NAT переводит приватные адреса, в общедоступные. +Это позволяет устройству с частным адресом IPv4 обращаться к ресурсам за пределами его частной сети. NAT в сочетании с частными адресами IPv4 оказался полезным методом сохранения общедоступных IPv4-адресов. +Один общедоступный IPv4-адрес может быть использован сотнями, даже тысячами устройств, каждый из которых имеет частный IPv4-адрес. +NAT имеет дополнительное преимущество, заключающееся в добавлении степени конфиденциальности и безопасности в сеть, поскольку он скрывает внутренние IPv4-адреса из внешних сетей. + +**3. Что такое HTTP и HTTPS, в чем их отличия?** + +__HTTP__ _(от англ. HyperText Transfer Protocol — протокол передачи гипертекста)_ — это прикладной протокол передачи данных в сети. +На текущий момент используется для получения информации с веб-сайтов. +Протокол HTTP основан на использовании технологии «клиент-сервер»: клиент, отправляющий запрос, является инициатором соединения; сервер, получающий запрос, выполняет его и отправляет клиенту результат. + +__HTTPS__ _(от англ. HyperText Transfer Protocol Secure — безопасный протокол передачи гипертекста)_ — это расширение протокола HTTP, поддерживающее шифрование посредством криптографических протоколов __SSL__ и __TLS__. + +Чем отличаются HTTP от HTTPS: +- HTTPS не является отдельным протоколом передачи данных, а представляет собой расширение протокола HTTP с надстройкой шифрования; +- передаваемые по протоколу HTTP данные не защищены, HTTPS обеспечивает конфиденциальность информации путем ее шифрования; +- HTTP использует порт 80, HTTPS — порт 443. + +**4. Что такое SSL и TSL, есть ли между ними отличия?** + +__SSL__ или слой защищенных сокетов было оригинальным названием протокола, который разработала компания Netscape в середине 90-х. +SSL 1.0 никогда не был публично доступным, а в версии 2.0 были серьезные недостатки. +Протокол SSL 3.0, выпущенный в 1996, был полностью переделан и задал тон следующей стадии развития. + +Когда следующую версию протокола выпустили в 1999, ее стандартизировала специальная рабочая группа проектирования сети Интернет и дала ей новое название: защита транспортного уровня, или TLS. +Как говорится в TLS-документации, «разница между этим протоколом и SSL 3.0 не критичная». +TLS и SSL формируют постоянно обновляемую серию протоколов, и их часто объединяют под названием __SSL/TLS__. + +Протокол TLS шифрует интернет-трафик любого вида. Самый распространенный вид — веб-трафик. +Вы знаете, когда ваш браузер устанавливает соединение по TLS — если ссылка в адресной строке начинается с «https». + +TLS также используется другими приложениями — например, в почте и системах телеконференций. + +Самый безопасный метод шифрования — это асимметричное шифрование. Для этого требуется 2 ключа, 1 публичный и 1 приватный. +Это файлы с информацией, чаще всего очень большие числа. +Механизм сложный, но если попросту, вы можете использовать публичный ключ, чтобы шифровать данные, но вам нужен приватный ключ, чтобы расшифровывать их. +Два ключа связаны с помощью сложной математической формулы, которую сложно хакнуть. + +Так как в асимметричном шифровании применяются сложные математические расчеты, нужно много вычислительных ресурсов. +TLS решает эту проблему, используя асимметричное шифрование только в начале сессии, чтобы зашифровать общение между сервером и клиентом. +Сервер и клиент должны договориться об одном ключе сессии, который они будут вдвоем использовать, чтобы зашифровать пакеты данных. \ No newline at end of file diff --git a/GOLANG.md b/GOLANG.md new file mode 100644 index 0000000..9acf95b --- /dev/null +++ b/GOLANG.md @@ -0,0 +1 @@ +### Вопросы по языку Golang \ No newline at end of file diff --git a/INFRASTRUCTURE_AND_DEPLOY.md b/INFRASTRUCTURE_AND_DEPLOY.md new file mode 100644 index 0000000..85aa471 --- /dev/null +++ b/INFRASTRUCTURE_AND_DEPLOY.md @@ -0,0 +1,25 @@ +### Вопросы про инфраструктуру и деплой + +**1. Что такое сине-зеленый деплой(blue-green deployment)?** + +Стратегия сине-зеленого развертывания (иногда ее ещё называют red/black, т.е. красно-чёрной) предусматривает одновременное развертывание старой (зеленой) и новой (синей) версий приложения. +После размещения обеих версий обычные пользователи получают доступ к зеленой, в то время как синяя доступна для QA-команды для автоматизации тестов через отдельный сервис или прямой проброс портов. + +После того, как синяя (новая) версия была протестирована и был одобрен ее релиз, сервис переключается на неё, а зеленая (старая) сворачивается. + +**2. Что такое Canary (канареечные развертывания)?** + +Канареечные выкаты похожи на сине-зеленые, но лучше управляются и используют прогрессивный поэтапный подход. К этому типу относятся несколько различных стратегий, включая «скрытые» запуски и А/В-тестирование. + +Эта стратегия применяется, когда необходимо испытать некую новую функциональность, как правило, в бэкенде приложения. +Суть подхода в том, чтобы создать два практически одинаковых сервера: один обслуживает почти всех пользователей, а другой, с новыми функциями, обслуживает лишь небольшую подгруппу пользователей, после чего результаты их работы сравниваются. +Если все проходит без ошибок, новая версия постепенно выкатывается на всю инфраструктуру. + +**3. Что такое Dark (скрытые) или А/В-развертывания?** + +Скрытое развертывание — еще одна вариация канареечной стратегии. +Разница между скрытым и канареечным развертыванием состоит в том, что скрытые развертывания имеют дело с фронтендом, а не с бэкендом, как канареечные. + +Другое название этих развертываний — А/В-тестирование. Вместо того, чтобы открыть доступ к новой функции всем пользователям, ее предлагают лишь ограниченной их части. Обычно эти пользователи не знают, что выступают тестерами-первопроходцами (отсюда и термин «скрытое развертывание»). + +С помощью переключателей функциональности (feature toggles) и других инструментов можно следить за тем, как пользователи взаимодействуют с новой функцией, увлекает ли она их или они считают новый пользовательский интерфейс запутанным, и другими типами метрик. diff --git a/MICROSERVICES.md b/MICROSERVICES.md new file mode 100644 index 0000000..b41cd99 --- /dev/null +++ b/MICROSERVICES.md @@ -0,0 +1,2 @@ +### Вопросы про микросервисы + diff --git a/README.md b/README.md index f9f19fe..9711c53 100644 --- a/README.md +++ b/README.md @@ -1,144 +1,43 @@ -# Вопросы и ответы для собеседования Golang разработчика +# Вопросы и ответы для собеседования Back-end/Golang разработчика и не только + +Здесь собирается большая коллеция вопросов и ответов на них, необходимых не только для прохождения собеседований, но и для комплексного развития кругозора ## Содержание -1. [Общие вопросы](#common_questions) -2. [Вопросы про микросервисы](#microseivice_questions) -3. [Вопросы про инфраструктуру и деплой](#infrastructure_deploy_questions) -4. [Вопросы про кеширование и базам данных](#database_cache_questions) -5. [Вопросы по языку Golang](#golang_questions) +1. [Общие вопросы](COMMON.md) + - В чем отличие протоколов TCP и UDP? В каком случае UDP предпочтительнее? + - Что такое NAT? + - Что такое HTTP и HTTPS, в чем их отличия? + - Что такое SSL и TSL, есть ли между ними отличия? + - coming soon +2. [Вопросы про микросервисы](MICROSERVICES.md) + - TODO +3. [Вопросы про инфраструктуру и деплой](INFRASTRUCTURE_AND_DEPLOY.md) + - Что такое сине-зеленый деплой(blue-green deployment)? + - Что такое Canary (канареечные развертывания)? + - Что такое Dark (скрытые) или А/В-развертывания? + - coming soon +4. [Вопросы про кеширование и базам данных](CACHE_AND_DB.md) + - Что такое индексы в MySQL, как и для чего их использовать и создавать? + - Что такое составной индекс, как и для чего их использовать и создавать? + - Как использовать индексы в JOIN запросах Mysql? + - Что такое частичные индексы, как и для чего их использовать и создавать? + - В чем отличия InnoDB и MyISAM? + - Возможен ли JOIN со вложенными запросами, как? + - Что такое дедлоки (deadlock), почему возникают, как можно недопускать? + - Что такое HAVING, что он делает как и зачем его использовать? + - Разница между WHERE и HAVING и можно ли использовать HAVING без группировки данных? + - Что такое EXPLAIN? + - Как узнать версию Mysql? + - Как можно оптимизировать ORDER BY RAND()? + - Как удалить индекс MySQL? + - coming soon +5. [Вопросы по языку Golang](GOLANG.md) + - Что из себя представляет тип данных string в языке Golang? Можно ли изменить определенный символ в строке? Что происходит при склеивании строк? + - Вытекающий вопрос — как эффективно склеивать множество строк? + - Что будет происходить при конкуррентной записи в map? Как можно решить эту проблему? + - coming soon -### Общие вопросы +## Как мне добавить свой вопрос-ответ? -**1. В чем отличие протоколов TCP и UDP? В каком случае UDP предпочтительнее?** - -__TCP__ – транспортный протокол передачи данных в сетях TCP/IP, предварительно устанавливающий соединение с сетью. - -__UDP__ – транспортный протокол, передающий сообщения-датаграммы без необходимости установки соединения в IP-сети. - -Разница между протоколами TCP и UDP – в так называемой _"гарантии доставки"_. -TCP требует отклика от клиента, которому доставлен пакет данных, подтверждения доставки, и для этого ему необходимо установленное заранее соединение. -Также протокол TCP считается надежным, тогда как UDP получил даже именование “протокол ненадежных датаграмм. -TCP исключает потери данных, дублирование и перемешивание пакетов, задержки. -UDP все это допускает, и соединение для работы ему не требуется. -Процессы, которым данные передаются по UDP, должны обходиться полученным, даже и с потерями. -TCP контролирует загруженность соединения, UDP не контролирует ничего, кроме целостности полученных датаграмм. - -С другой стороны, благодаря такой не избирательности и бесконтрольности, UDP доставляет пакеты данных (датаграммы) гораздо быстрее, потому для приложений, которые рассчитаны на широкую пропускную способность и быстрый обмен, UDP можно считать оптимальным протоколом. -К таковым относятся сетевые и браузерные игры, а также программы просмотра потокового видео и приложения для видеосвязи (или голосовой): от потери пакета, полной или частичной, ничего не меняется, повторять запрос не обязательно, зато загрузка происходит намного быстрее. -Протокол TCP, как более надежный, с успехом применяется даже в почтовых программах, позволяя контролировать не только трафик, но и длину сообщения и скорость обмена трафиком. - -**2. Что такое NAT?** - -Сети обычно проектируются с использованием частных IP адресов. -Это адреса __10.0.0.0/8__, __172.16.0.0/12__ и __192.168.0.0/16__. -Эти частные адреса используются внутри организации или площадки, чтобы позволить устройствам общаться локально, и они не маршрутизируются в интернете. -Чтобы позволить устройству с приватным IPv4-адресом обращаться к устройствам и ресурсам за пределами локальной сети, приватный адрес сначала должен быть переведен на общедоступный публичный адрес. - -И вот как раз NAT переводит приватные адреса, в общедоступные. -Это позволяет устройству с частным адресом IPv4 обращаться к ресурсам за пределами его частной сети. NAT в сочетании с частными адресами IPv4 оказался полезным методом сохранения общедоступных IPv4-адресов. -Один общедоступный IPv4-адрес может быть использован сотнями, даже тысячами устройств, каждый из которых имеет частный IPv4-адрес. -NAT имеет дополнительное преимущество, заключающееся в добавлении степени конфиденциальности и безопасности в сеть, поскольку он скрывает внутренние IPv4-адреса из внешних сетей. - -**3. Что такое HTTP и HTTPS, в чем их отличия?** - -__HTTP__ _(от англ. HyperText Transfer Protocol — протокол передачи гипертекста)_ — это прикладной протокол передачи данных в сети. -На текущий момент используется для получения информации с веб-сайтов. -Протокол HTTP основан на использовании технологии «клиент-сервер»: клиент, отправляющий запрос, является инициатором соединения; сервер, получающий запрос, выполняет его и отправляет клиенту результат. - -__HTTPS__ _(от англ. HyperText Transfer Protocol Secure — безопасный протокол передачи гипертекста)_ — это расширение протокола HTTP, поддерживающее шифрование посредством криптографических протоколов __SSL__ и __TLS__. - -Чем отличаются HTTP от HTTPS: -- HTTPS не является отдельным протоколом передачи данных, а представляет собой расширение протокола HTTP с надстройкой шифрования; -- передаваемые по протоколу HTTP данные не защищены, HTTPS обеспечивает конфиденциальность информации путем ее шифрования; -- HTTP использует порт 80, HTTPS — порт 443. - -**4. Что такое SSL и TSL, есть ли между ними отличия?** - -__SSL__ или слой защищенных сокетов было оригинальным названием протокола, который разработала компания Netscape в середине 90-х. -SSL 1.0 никогда не был публично доступным, а в версии 2.0 были серьезные недостатки. -Протокол SSL 3.0, выпущенный в 1996, был полностью переделан и задал тон следующей стадии развития. - -Когда следующую версию протокола выпустили в 1999, ее стандартизировала специальная рабочая группа проектирования сети Интернет и дала ей новое название: защита транспортного уровня, или TLS. -Как говорится в TLS-документации, «разница между этим протоколом и SSL 3.0 не критичная». -TLS и SSL формируют постоянно обновляемую серию протоколов, и их часто объединяют под названием __SSL/TLS__. - -Протокол TLS шифрует интернет-трафик любого вида. Самый распространенный вид — веб-трафик. -Вы знаете, когда ваш браузер устанавливает соединение по TLS — если ссылка в адресной строке начинается с «https». - -TLS также используется другими приложениями — например, в почте и системах телеконференций. - -Самый безопасный метод шифрования — это асимметричное шифрование. Для этого требуется 2 ключа, 1 публичный и 1 приватный. -Это файлы с информацией, чаще всего очень большие числа. -Механизм сложный, но если попросту, вы можете использовать публичный ключ, чтобы шифровать данные, но вам нужен приватный ключ, чтобы расшифровывать их. -Два ключа связаны с помощью сложной математической формулы, которую сложно хакнуть. - -Так как в асимметричном шифровании применяются сложные математические расчеты, нужно много вычислительных ресурсов. -TLS решает эту проблему, используя асимметричное шифрование только в начале сессии, чтобы зашифровать общение между сервером и клиентом. -Сервер и клиент должны договориться об одном ключе сессии, который они будут вдвоем использовать, чтобы зашифровать пакеты данных. - ---- - -### Вопросы про микросервисы - ---- - -### Вопросы про инфраструктуру и деплой - -**1. Что такое сине-зеленый деплой(blue-green deployment)?** - -Стратегия сине-зеленого развертывания (иногда ее ещё называют red/black, т.е. красно-чёрной) предусматривает одновременное развертывание старой (зеленой) и новой (синей) версий приложения. -После размещения обеих версий обычные пользователи получают доступ к зеленой, в то время как синяя доступна для QA-команды для автоматизации тестов через отдельный сервис или прямой проброс портов. - -После того, как синяя (новая) версия была протестирована и был одобрен ее релиз, сервис переключается на неё, а зеленая (старая) сворачивается. - -**2. Что такое Canary (канареечные развертывания)?** - -Канареечные выкаты похожи на сине-зеленые, но лучше управляются и используют прогрессивный поэтапный подход. К этому типу относятся несколько различных стратегий, включая «скрытые» запуски и А/В-тестирование. - -Эта стратегия применяется, когда необходимо испытать некую новую функциональность, как правило, в бэкенде приложения. -Суть подхода в том, чтобы создать два практически одинаковых сервера: один обслуживает почти всех пользователей, а другой, с новыми функциями, обслуживает лишь небольшую подгруппу пользователей, после чего результаты их работы сравниваются. -Если все проходит без ошибок, новая версия постепенно выкатывается на всю инфраструктуру. - -**3. Что такое Dark (скрытые) или А/В-развертывания?** - -Скрытое развертывание — еще одна вариация канареечной стратегии. -Разница между скрытым и канареечным развертыванием состоит в том, что скрытые развертывания имеют дело с фронтендом, а не с бэкендом, как канареечные. - -Другое название этих развертываний — А/В-тестирование. Вместо того, чтобы открыть доступ к новой функции всем пользователям, ее предлагают лишь ограниченной их части. Обычно эти пользователи не знают, что выступают тестерами-первопроходцами (отсюда и термин «скрытое развертывание»). - -С помощью переключателей функциональности (feature toggles) и других инструментов можно следить за тем, как пользователи взаимодействуют с новой функцией, увлекает ли она их или они считают новый пользовательский интерфейс запутанным, и другими типами метрик. - ---- - -### Вопросы про кеширование и базам данных - -**1. Что такое индексы в MySQL, как и для чего их использовать и создавать?** - -**2. Что такое составной индекс, как и для чего их использовать и создавать?** - -**3. Как использовать индексы в JOIN запросах Mysql?** - -**4. Что такое частичные индексы, как и для чего их использовать и создавать?** - -**5. В чем отличия InnoDB и MyISAM?** - -**6. Возможен ли JOIN со вложенными запросами, как?** - -**7. Что такое дедлоки (deadlock), почему возникают, как можно недопускать?** - -**8. Что такое HAVING, что он делает как и зачем его использовать?** - -**9. Разница между WHERE и HAVING и можно ли использовать HAVING без группировки данных?** - -**10. Что такое EXPLAIN?** - -**11. Как узнать версию Mysql?** - -**12. Как можно оптимизировать ORDER BY RAND()?** - -**13. Как удалить индекс MySQL?** - ---- - -### Вопросы по языку Golang +- [Ознакомтесь с шаблоном составления](TEMPLATE.md)