mirror of
https://github.com/goavengers/go-interview.git
synced 2026-02-04 04:36:19 +00:00
Merge pull request #1 from dreddsa5dies/podolsky
Ответы на вопросы Подольского
This commit is contained in:
12
README.md
12
README.md
@@ -4,7 +4,7 @@
|
||||
<h5>Вместе мы разберемся!</h5>
|
||||
</div>
|
||||
|
||||
Здесь собирается большая коллеция вопросов и ответов на них, необходимых не только для прохождения собеседований, но и для комплексного развития кругозора
|
||||
Здесь собирается большая коллекция вопросов и ответов на них, необходимых не только для прохождения собеседований, но и для комплексного развития кругозора
|
||||
|
||||
## Содержание
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
6. [Вопросы по языку Golang](docs/GOLANG.md)
|
||||
- Что из себя представляет тип данных string в языке Golang? Можно ли изменить определенный символ в строке? Что происходит при склеивании строк?
|
||||
- Вытекающий вопрос — как эффективно склеивать множество строк?
|
||||
- Что будет происходить при конкуррентной записи в map? Как можно решить эту проблему?
|
||||
- Что будет происходить при конкурентной записи в map? Как можно решить эту проблему?
|
||||
- Расскажите о ООП в Golang.
|
||||
- В чем различия goroutine от потока системы?
|
||||
- Как огранить число потоков на системы при запуске 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)
|
||||
- [Что выведет следующая программа?](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?
|
||||
@@ -80,9 +80,9 @@
|
||||
- В чём разница между сцеплением и связанностью?
|
||||
- Почему в TDD тесты пишутся прежде кода?
|
||||
- Если у вашего кода плохая организация, как вы это поймёте?
|
||||
9. Вопросы от Данила Подольского на позицию Senior Golang Backend Developer в компанию Evrone
|
||||
- Go — императивный или декларативный? А в чем разница?
|
||||
- Что такое type switch?
|
||||
9. [Вопросы от Данила Подольского на позицию Senior Golang Backend Developer в компанию Evrone](docs/PODOLSKY.md)
|
||||
- [Go — императивный или декларативный? А в чем разница?](docs/PODOLSKY.md#1)
|
||||
- [Что такое type switch?](docs/PODOLSKY.md#2)
|
||||
- Как сообщить компилятору, что наш тип реализует интерфейс?
|
||||
- Как работает append?
|
||||
- Какое у slice zero value? Какие операции над ним возможны?
|
||||
|
||||
@@ -140,7 +140,22 @@ func main() {
|
||||
</details>
|
||||
|
||||
### <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?
|
||||
`// todo`
|
||||
### <a name="19"></a> 19.Что такое slice, как устроены и чем отличаются от массивов?
|
||||
|
||||
12
docs/PODOLSKY.md
Normal file
12
docs/PODOLSKY.md
Normal 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?
|
||||
|
||||
Сравнение типов переменной, а не ее значений.
|
||||
Reference in New Issue
Block a user