Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
Как устроено хранение массивов и срезов в памяти? Что такое capacity?
Массив — это непрерывный блок памяти фиксированного размера [N]T. Срез ([]T) представлен тройкой: указатель на начало массива, длина (len) и ёмкость (cap) — максимальное число элементов до перевыделения. capacity показывает, сколько элементов можно поместить срезу без выделения нового массива при append.
Что такое List<T> и как реализованы его Count и Capacity?
List<T> — это обёртка над массивом T[], которая автоматически расширяется по мере добавления элементов. Поле Count хранит число фактически добавленных элементов, а Capacity — длину внутреннего массива. При достижении Count == Capacity при добавлении нового элемента создаётся новый массив с увеличенной Capacity (обычно в полтора раза), в который копируются старые элементы.
Как работает увеличение capacity слайса при добавлении элементов (правило удвоения до 1024 элементов)?
Когда в слайс добавляется элемент и текущей capacity недостаточно, Go выделяет новый массив с большей емкостью. До capacity 1024 размер удваивается, после этого рост становится линейным (примерно +25%). Это позволяет эффективно управлять памятью и снижать количество аллокаций.
С каким фактором расширяется List при превышении capacity?
При превышении Capacity внутренний массив List<T> в .NET заменяется на новый, размер которого рассчитывается как удвоение текущей емкости. Например, если Capacity был 4, то после добавления 5-го элемента он станет 8. Это стратегия позволяет операциям Add выполняться в среднем за константное время (амортизированная O(1)).
Как capacity влияет на производительность массива?
capacity определяет, сколько элементов массив может хранить без перераспределения памяти. Если capacity недостаточно, массиву приходится выделять новый буфер и копировать элементы. Это дорогая операция. Предварительное резервирование capacity снижает количество копирований. Это особенно важно при работе с большими массивами.
Рейтинг:
2
Сложность:
7
Рейтинг:
2
Сложность:
6
Рейтинг:
1
Сложность:
7
Рейтинг:
3
Сложность:
4
Рейтинг:
4
Сложность:
7