Merge pull request #1 from dreddsa5dies/podolsky

Ответы на вопросы Подольского
This commit is contained in:
Andrey Kapitonov
2022-02-08 21:07:42 +03:00
committed by GitHub
3 changed files with 34 additions and 7 deletions

View File

@@ -4,7 +4,7 @@
<h5>Вместе мы разберемся!</h5> <h5>Вместе мы разберемся!</h5>
</div> </div>
Здесь собирается большая коллеция вопросов и ответов на них, необходимых не только для прохождения собеседований, но и для комплексного развития кругозора Здесь собирается большая коллекция вопросов и ответов на них, необходимых не только для прохождения собеседований, но и для комплексного развития кругозора
## Содержание ## Содержание
@@ -52,7 +52,7 @@
6. [Вопросы по языку Golang](docs/GOLANG.md) 6. [Вопросы по языку Golang](docs/GOLANG.md)
- Что из себя представляет тип данных string в языке Golang? Можно ли изменить определенный символ в строке? Что происходит при склеивании строк? - Что из себя представляет тип данных string в языке Golang? Можно ли изменить определенный символ в строке? Что происходит при склеивании строк?
- Вытекающий вопрос как эффективно склеивать множество строк? - Вытекающий вопрос как эффективно склеивать множество строк?
- Что будет происходить при конкуррентной записи в map? Как можно решить эту проблему? - Что будет происходить при конкурентной записи в map? Как можно решить эту проблему?
- Расскажите о ООП в Golang. - Расскажите о ООП в Golang.
- В чем различия goroutine от потока системы? - В чем различия goroutine от потока системы?
- Как огранить число потоков на системы при запуске Golang программы и возможно ли огранить их до 1 потока? - Как огранить число потоков на системы при запуске Golang программы и возможно ли огранить их до 1 потока?
@@ -66,7 +66,7 @@
- [Мы знаем, что в десятичной системе самое большое число из одной цифры - это 9, а из двух - 99. В бинарной системе самое большое число из двух цифр это 11 (3), самое большое число из трех цифр это 111 (7) и самое большое число из 4 цифр это 1111 (15). Вопрос: каково самое большое число из 8 цифр? (Подсказка: 101-1=9 и 102-1=99)](docs/GOLANG.md#14) - [Мы знаем, что в десятичной системе самое большое число из одной цифры - это 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#15)
- [Что выведет следующая программа?](docs/GOLANG.md#16) - [Что выведет следующая программа?](docs/GOLANG.md#16)
- Как работает Garbage Collection в Go? - [Как работает Garbage Collection в Go?](docs/GOLANG.md#17)
- Что такое interface, как они работают в Go? - Что такое interface, как они работают в Go?
- Что такое slice, как устроены и чем отличаются от массивов? - Что такое slice, как устроены и чем отличаются от массивов?
- Что такое len и capacity в slice Go? - Что такое len и capacity в slice Go?
@@ -80,9 +80,9 @@
- В чём разница между сцеплением и связанностью? - В чём разница между сцеплением и связанностью?
- Почему в TDD тесты пишутся прежде кода? - Почему в TDD тесты пишутся прежде кода?
- Если у вашего кода плохая организация, как вы это поймёте? - Если у вашего кода плохая организация, как вы это поймёте?
9. Вопросы от Данила Подольского на позицию Senior Golang Backend Developer в компанию Evrone 9. [Вопросы от Данила Подольского на позицию Senior Golang Backend Developer в компанию Evrone](docs/PODOLSKY.md)
- Go императивный или декларативный? А в чем разница? - [Go императивный или декларативный? А в чем разница?](docs/PODOLSKY.md#1)
- Что такое type switch? - [Что такое type switch?](docs/PODOLSKY.md#2)
- Как сообщить компилятору, что наш тип реализует интерфейс? - Как сообщить компилятору, что наш тип реализует интерфейс?
- Как работает append? - Как работает append?
- Какое у slice zero value? Какие операции над ним возможны? - Какое у slice zero value? Какие операции над ним возможны?

View File

@@ -140,7 +140,22 @@ func main() {
</details> </details>
### <a name="17"></a> 17.Как работает Garbage Collection в Go? ### <a name="17"></a> 17.Как работает Garbage Collection в Go?
`// todo` Garbage Collection - это процесс освобождения места в памяти, которое больше не используется. В документации указано следующее:
```go
GC выполняется конкурентно (concurrent), одновременно с потоками мутатора (mutator), в точном соответствии с типом (этот принцип также известен как чувствительность к типу), допускается парааллельная выполнение нескольких потоков GC. Это конкурентная пометка и очистка (mark-sweep), при которой используется барьер записи (write barrier). При этом в процессе ничего не генерируется и не сжимается. Освобождение памяти выполняется на основе размера, выделенного для каждой программы Р, чтобы в общем случае минимизировать фрагментацию и избежать блокировок.
```
В основе работы GC Go лежит "трехцветный алгоритм". Официальное название "трехцветный алгоритм пометки и очистки". Использует барьер памяти. Главный принцип алгоритма трехцветной пометки и очистки состоит в разделении объектов, находящихся куче, на три набора, в соответствии с "цветом". Условно разделяются на 3 цвета:
- черные объекты - гарантированно не имеют указателей на белые объекты;
- серые объекты - могут иметь указатели на белые объекты;
- белые объекты - на них могут ссылаться некоторые серые объекты и сами некоторые белые объекты могут ссылаться на некоторые черные.
Краткий алгоритм:
1. Все объекты сначала белые;
2. Идет перебор "корневых" объектов, помечаются как серые. Корневые - это объекты к которым можно обращаться напрямую, например глобальные переменные, элементы в стеке и т.д.
3. Идет перебор серых объектов, проверяются ссылки на другие объекты и помечаются на черные объекты. Если есть ссылка на белый объект, то белый становится серым.
4. Продолжается до тех пор, пока не будут перебраны все серые объекты.
5. Оставшиеся после перебора белые объекты считаются недостижимыми и занимаемая ими область памяти может быть освобождена.
Есть еще Мутатор - это приложение, работающее во время сборки мусора. Вызывает функцию барьера записи. Выполняется каждый раз, когда меняется указатель в куче. После изменения указателя объект считаеться достижимым и помечается как серый.
### <a name="18"></a> 18.Что такое interface, как они работают в Go? ### <a name="18"></a> 18.Что такое interface, как они работают в Go?
`// todo` `// todo`
### <a name="19"></a> 19.Что такое slice, как устроены и чем отличаются от массивов? ### <a name="19"></a> 19.Что такое slice, как устроены и чем отличаются от массивов?

12
docs/PODOLSKY.md Normal file
View File

@@ -0,0 +1,12 @@
## <a name="podolsky"></a> Вопросы от Данила Подольского на позицию Senior Golang Backend Developer в компанию Evrone
### <a name="1"></a> Go императивный или декларативный? А в чем разница?
В основном Императивный.
Разница в подходе:
- императивный - как сделать (прямо пошагово);
- декларативный - что сделать (итоговый результат).
### <a name="2"></a> Что такое type switch?
Сравнение типов переменной, а не ее значений.