From 285d34dc2bfe9c915d17a5019acf8b187c216d58 Mon Sep 17 00:00:00 2001 From: dreddsa5dies Date: Mon, 7 Feb 2022 14:26:37 +0300 Subject: [PATCH 1/5] imperative or declarative --- README.md | 4 ++-- docs/PODOLSKY.md | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 docs/PODOLSKY.md diff --git a/README.md b/README.md index d3671de..a82c68a 100644 --- a/README.md +++ b/README.md @@ -80,8 +80,8 @@ - В чём разница между сцеплением и связанностью? - Почему в TDD тесты пишутся прежде кода? - Если у вашего кода плохая организация, как вы это поймёте? -9. Вопросы от Данила Подольского на позицию Senior Golang Backend Developer в компанию Evrone - - Go — императивный или декларативный? А в чем разница? +9. [Вопросы от Данила Подольского на позицию Senior Golang Backend Developer в компанию Evrone](docs/PODOLSKY.md) + - [Go — императивный или декларативный? А в чем разница?](docs/PODOLSKY.md#1) - Что такое type switch? - Как сообщить компилятору, что наш тип реализует интерфейс? - Как работает append? diff --git a/docs/PODOLSKY.md b/docs/PODOLSKY.md new file mode 100644 index 0000000..e19a5df --- /dev/null +++ b/docs/PODOLSKY.md @@ -0,0 +1,8 @@ +## Вопросы от Данила Подольского на позицию Senior Golang Backend Developer в компанию Evrone + +### Go — императивный или декларативный? А в чем разница? + +В основном Императивный. +Разница в подходе: +- императивный - как сделать (прямо пошагово); +- декларативный - что сделать (итоговый результат). \ No newline at end of file From f9d289c7a913f05ef729705916bfbd60b0c66773 Mon Sep 17 00:00:00 2001 From: dreddsa5dies Date: Mon, 7 Feb 2022 14:27:11 +0300 Subject: [PATCH 2/5] type switch --- README.md | 2 +- docs/PODOLSKY.md | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a82c68a..24c9ae3 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ - Если у вашего кода плохая организация, как вы это поймёте? 9. [Вопросы от Данила Подольского на позицию Senior Golang Backend Developer в компанию Evrone](docs/PODOLSKY.md) - [Go — императивный или декларативный? А в чем разница?](docs/PODOLSKY.md#1) - - Что такое type switch? + - [Что такое type switch?](docs/PODOLSKY.md#2) - Как сообщить компилятору, что наш тип реализует интерфейс? - Как работает append? - Какое у slice zero value? Какие операции над ним возможны? diff --git a/docs/PODOLSKY.md b/docs/PODOLSKY.md index e19a5df..9633286 100644 --- a/docs/PODOLSKY.md +++ b/docs/PODOLSKY.md @@ -5,4 +5,8 @@ В основном Императивный. Разница в подходе: - императивный - как сделать (прямо пошагово); -- декларативный - что сделать (итоговый результат). \ No newline at end of file +- декларативный - что сделать (итоговый результат). + +### Что такое type switch? + +Сравнение типов переменной, а не ее значений. \ No newline at end of file From f55a73484402c2a2310592fd7603d0a1b924be1e Mon Sep 17 00:00:00 2001 From: dreddsa5dies Date: Mon, 7 Feb 2022 15:10:21 +0300 Subject: [PATCH 3/5] change errata --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 24c9ae3..a469d55 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@
Вместе мы разберемся!
-Здесь собирается большая коллеция вопросов и ответов на них, необходимых не только для прохождения собеседований, но и для комплексного развития кругозора +Здесь собирается большая коллекция вопросов и ответов на них, необходимых не только для прохождения собеседований, но и для комплексного развития кругозора ## Содержание From 9c53da942e0f21e251a3a57795dfe4b480854a7e Mon Sep 17 00:00:00 2001 From: dreddsa5dies Date: Mon, 7 Feb 2022 15:11:00 +0300 Subject: [PATCH 4/5] change errata --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a469d55..7c463aa 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ 6. [Вопросы по языку Golang](docs/GOLANG.md) - Что из себя представляет тип данных string в языке Golang? Можно ли изменить определенный символ в строке? Что происходит при склеивании строк? - Вытекающий вопрос — как эффективно склеивать множество строк? - - Что будет происходить при конкуррентной записи в map? Как можно решить эту проблему? + - Что будет происходить при конкурентной записи в map? Как можно решить эту проблему? - Расскажите о ООП в Golang. - В чем различия goroutine от потока системы? - Как огранить число потоков на системы при запуске Golang программы и возможно ли огранить их до 1 потока? From 286b3794507015299db32731ca7a344dfec986bd Mon Sep 17 00:00:00 2001 From: dreddsa5dies Date: Mon, 7 Feb 2022 16:32:08 +0300 Subject: [PATCH 5/5] Garbage Collection --- README.md | 2 +- docs/GOLANG.md | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7c463aa..c3ea1e7 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ - [Мы знаем, что в десятичной системе самое большое число из одной цифры - это 9, а из двух - 99. В бинарной системе самое большое число из двух цифр это 11 (3), самое большое число из трех цифр это 111 (7) и самое большое число из 4 цифр это 1111 (15). Вопрос: каково самое большое число из 8 цифр? (Подсказка: 101-1=9 и 102-1=99)](docs/GOLANG.md#14) - [Что выведет следующая программа?](docs/GOLANG.md#15) - [Что выведет следующая программа?](docs/GOLANG.md#16) - - Как работает Garbage Collection в Go? + - [Как работает Garbage Collection в Go?](docs/GOLANG.md#17) - Что такое interface, как они работают в Go? - Что такое slice, как устроены и чем отличаются от массивов? - Что такое len и capacity в slice Go? diff --git a/docs/GOLANG.md b/docs/GOLANG.md index e887fb9..51a5403 100644 --- a/docs/GOLANG.md +++ b/docs/GOLANG.md @@ -140,7 +140,22 @@ func main() { ### 17.Как работает Garbage Collection в Go? -`// todo` +Garbage Collection - это процесс освобождения места в памяти, которое больше не используется. В документации указано следующее: +```go +GC выполняется конкурентно (concurrent), одновременно с потоками мутатора (mutator), в точном соответствии с типом (этот принцип также известен как чувствительность к типу), допускается парааллельная выполнение нескольких потоков GC. Это конкурентная пометка и очистка (mark-sweep), при которой используется барьер записи (write barrier). При этом в процессе ничего не генерируется и не сжимается. Освобождение памяти выполняется на основе размера, выделенного для каждой программы Р, чтобы в общем случае минимизировать фрагментацию и избежать блокировок. +``` +В основе работы GC Go лежит "трехцветный алгоритм". Официальное название "трехцветный алгоритм пометки и очистки". Использует барьер памяти. Главный принцип алгоритма трехцветной пометки и очистки состоит в разделении объектов, находящихся куче, на три набора, в соответствии с "цветом". Условно разделяются на 3 цвета: +- черные объекты - гарантированно не имеют указателей на белые объекты; +- серые объекты - могут иметь указатели на белые объекты; +- белые объекты - на них могут ссылаться некоторые серые объекты и сами некоторые белые объекты могут ссылаться на некоторые черные. +Краткий алгоритм: +1. Все объекты сначала белые; +2. Идет перебор "корневых" объектов, помечаются как серые. Корневые - это объекты к которым можно обращаться напрямую, например глобальные переменные, элементы в стеке и т.д. +3. Идет перебор серых объектов, проверяются ссылки на другие объекты и помечаются на черные объекты. Если есть ссылка на белый объект, то белый становится серым. +4. Продолжается до тех пор, пока не будут перебраны все серые объекты. +5. Оставшиеся после перебора белые объекты считаются недостижимыми и занимаемая ими область памяти может быть освобождена. +Есть еще Мутатор - это приложение, работающее во время сборки мусора. Вызывает функцию барьера записи. Выполняется каждый раз, когда меняется указатель в куче. После изменения указателя объект считаеться достижимым и помечается как серый. + ### 18.Что такое interface, как они работают в Go? `// todo` ### 19.Что такое slice, как устроены и чем отличаются от массивов?