# README
Памятка для тех интервью по backend (golang) developer для освежения памяти
Частые вопросы для backend developer
-
Что такое tcp & udp различия? http, https
-
Структурное, ООП, функциональные
- *** Структурное программирование *** Если я не ошибаюсь сама понятие стуктурное программирование появилось одна из первых. Его основная цель более высокого качества и более короткого времени создания программы путем составления реализованного алгоритма из управляющих структур с одной точкой входа и одной точки выхода вместо неограниченного использования переходов. также неиспользовать оператор goto, вместо него нужно использовать if switch операторы чтобы код был намного легче читалось сверху вниз От себя скажу goto на практике негде неиспользовал, думаю это связано нашей времени. Но golang есть оператор goto: ("a", "b")
package main import "fmt" func main() { learnGoTo() } func learnGoTo() { fmt.Println("a") goto FINISH fmt.Println("b") FINISH: fmt.Println("c") }
-
Уверенное понимание solid, grasp? (основные принципы припостроений ПО)
- SRP (single responsibility principle) - разделения обязанности которая подставлена перед ним. то есть несмешивать множество обязанности в одном методе. Одной структуры кода должна быть только одна причина для существования.
- OCP (open/closed principle) - Принцип открытости/закрытости гласит , что программные структуры должны быть открыты для расширения, но закрыты для модификации. Это изменять поведения или модификаций
- LSP (liskov subsititution principle) - Наследующий класс должен дополнять, а не замещать поведение базового класса. Оснавная идея Базывый классне должен подвергатся измениний. И проектирований нужно извлечь основные сущности для дальнейщего наследование. Подкласс не должен требовать вызывающего кода больше чем базовый класс меньше чем базовый класс
- ISP (interface segregation principle) - клиенты не должны зависеть от методов, которые они не используют. То есть если какой-то метод интерфейса не используется клиентом, то изменения этого метода не должны приводить к необходимости внесения изменений в клиентский код.
- DIP (dependency inversion principle) - Модули верхних уровней не должны импортировать сущности из модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций. Если есть большой сборник методов мы используем один метод мы не должны наследоваться на прямую а должны создать интерфейс
-
Чистая архитектура (структура проекта)
-
SQL Транзакция. Уровни изоляций. Индексы. Триггер. Портейшн. (На практики)
-
OLAP OLTP На уровне теории понимать преимущества/недостатки
-
Как работать с кэшем. Как работать с тяжелом кэшем, прогрев кэша, тэгированный кэш.
-
Безопастность бэкенд приложений. Понятия: CORS, CSRF, XSS, SQL инъекции
-
Фильтрация данных. Зачем еще нужен data bind в sql запросах. Как правильно работать с входящими данными, как правильно отображать данные.
-
Из плюсов на будущее будет знания по микросервисной архитектуре. Сильные и слабые стороны. И какие есть паттерны, чтобы уменьшить эффект от минусов микросервисов.
Основые вопросы по golang (https://habr.com/ru/company/oleg-bunin/blog/521582/)
-
Go — императивный или декларативный? А в чем разница?
-
Что такое type switch?
-
Как сообщить компилятору, что наш тип реализует интерфейс?
-
Как работает append?
-
Какое у slice zero value? Какие операции над ним возможны?
-
Как устроен тип map?
-
Каков порядок перебора map?
-
Что будет, если читать из закрытого канала?
-
Как вы отсортируете массив структур по алфавиту по полю Name?
-
Что такое сериализация? Зачем она нужна?
-
Сколько времени в минутах займет у вас написание процедуры обращения односвязного списка?
-
Где следует поместить описание интерфейса: в пакете с реализацией или в пакете, где этот интерфейс используется? Почему?
-
Предположим, ваша функция должна возвращать детализированные Recoverable и Fatal ошибки. Как это реализовано в пакете net? Как это надо делать в современном Go?
-
Главный недостаток стандартного логгера?
-
Есть ли для Go хороший orm? Ответ обоснуйте.
-
Какой у вас любимый линтер?
-
Можно ли использовать один и тот же буфер []byte в нескольких горутинах?
-
Какие типы мьютексов предоставляет stdlib?
-
Что такое lock-free структуры данных, и есть ли в Go такие?
-
Способы поиска проблем производительности на проде?
-
Стандартный набор метрик prometheus в Go -программе?
-
Как встроить стандартный профайлер в свое приложение?
-
Overhead от стандартного профайлера?
-
Почему встраивание — не наследование?
-
Какие средства обобщенного программирования есть в Go?
-
Какие технологические преимущества языка Go вы можете назвать?
-
Какие технологические недостатки языка Go вы можете назвать?
-
context
-
map
-
slice
-
array
-
goroutine
-
string
-
struct
-
func
-
append
-
make
-
cap
-
len
-
interface
-
flag
-
buf