# Вопросы для собеседования Golang разработчика
## Содержание
1. [Общие вопросы](#common_questions)
2. [Вопросы про микросервисы](#microseivice_questions)
3. [Вопросы про инфраструктуру и деплой](#infrastructure_deploy_questions)
4. [Вопросы про кеширование и БД](#database_cache_questions)
5. [Вопросы по языку Golang](#golang_questions)
### Общие вопросы
**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-адреса из внешних сетей.
### Вопросы про микросервисы
### Вопросы про инфраструктуру и деплой
### Вопросы про кеширование и БД
### Вопросы по языку Golang