🔄 И снова к теме вопросов на job interview!

Одной из ключевых тем собеседования будут вопросы о строках и классе StringBuilder, поскольку знания о них так же охватывают понимание того как устроена работа с памятью в .NET.



🔑 Что следует знать о строках и StringBuilder:

1️⃣ Строки неизменяемы (immutable)

• Когда строки объединяются с помощью оператора + (то есть выполняется конкатенация), происходит создание нового объекта строки в памяти.

• Старые объекты остаются в памяти до сборки мусора (Garbage Collector).



2️⃣ Конкатенация строк в цикле == проблемы с производительностью

• Если конкатенация выполняется внутри цикла, это может сильно замедлить работу программы.

• Причина в том, что строки являются неизменяемыми: на каждой итерации создается новый объект в памяти, а старые объекты ожидают удаления сборщиком мусора, что является дорогостоящей операцией.



3️⃣ Класс StringBuilder решает проблему конкатенации

• StringBuilder использует внутренний изменяемый буфер, что позволяет добавлять, изменять и удалять текст без создания новых объектов.

• Вместо создания нового объекта строки изменения происходят внутри буфера, что позволяет избежать лишних выделений памяти и сборок мусора.



🛠 Когда использовать StringBuilder?

• Если строки изменяются часто (например, в циклах).

• При конкатенации большого количества строк.



📌 Интернирование строк (String Interning)

Отдельным пунктом следует упомянуть о механизме интернирования строк.

• Интернирование строк — это механизм оптимизации памяти, который позволяет хранить только одну копию каждой уникальной строки в специальном пуле строк (intern pool).

• Все литеральные строки (например, "Hello") автоматически интернируются и добавляются в пул строк на этапе компиляции.

• Если создается строка с таким же значением, которое уже есть в пуле, ссылка будет указывать на существующую строку, а не создавать новый объект.