🔄 И снова к теме вопросов на job interview!
Одной из ключевых тем собеседования будут вопросы о строках и классе StringBuilder, поскольку знания о них так же охватывают понимание того как устроена работа с памятью в .NET.
🔑 Что следует знать о строках и StringBuilder:
1️⃣ Строки неизменяемы (immutable)
• Когда строки объединяются с помощью оператора + (то есть выполняется конкатенация), происходит создание нового объекта строки в памяти.
• Старые объекты остаются в памяти до сборки мусора (Garbage Collector).
2️⃣ Конкатенация строк в цикле == проблемы с производительностью
• Если конкатенация выполняется внутри цикла, это может сильно замедлить работу программы.
• Причина в том, что строки являются неизменяемыми: на каждой итерации создается новый объект в памяти, а старые объекты ожидают удаления сборщиком мусора, что является дорогостоящей операцией.
3️⃣ Класс StringBuilder решает проблему конкатенации
• StringBuilder использует внутренний изменяемый буфер, что позволяет добавлять, изменять и удалять текст без создания новых объектов.
• Вместо создания нового объекта строки изменения происходят внутри буфера, что позволяет избежать лишних выделений памяти и сборок мусора.
🛠 Когда использовать StringBuilder?
• Если строки изменяются часто (например, в циклах).
• При конкатенации большого количества строк.
📌 Интернирование строк (String Interning)
Отдельным пунктом следует упомянуть о механизме интернирования строк.
• Интернирование строк — это механизм оптимизации памяти, который позволяет хранить только одну копию каждой уникальной строки в специальном пуле строк (intern pool).
• Все литеральные строки (например, "Hello") автоматически интернируются и добавляются в пул строк на этапе компиляции.
• Если создается строка с таким же значением, которое уже есть в пуле, ссылка будет указывать на существующую строку, а не создавать новый объект.
Одной из ключевых тем собеседования будут вопросы о строках и классе StringBuilder, поскольку знания о них так же охватывают понимание того как устроена работа с памятью в .NET.
🔑 Что следует знать о строках и StringBuilder:
1️⃣ Строки неизменяемы (immutable)
• Когда строки объединяются с помощью оператора + (то есть выполняется конкатенация), происходит создание нового объекта строки в памяти.
• Старые объекты остаются в памяти до сборки мусора (Garbage Collector).
2️⃣ Конкатенация строк в цикле == проблемы с производительностью
• Если конкатенация выполняется внутри цикла, это может сильно замедлить работу программы.
• Причина в том, что строки являются неизменяемыми: на каждой итерации создается новый объект в памяти, а старые объекты ожидают удаления сборщиком мусора, что является дорогостоящей операцией.
3️⃣ Класс StringBuilder решает проблему конкатенации
• StringBuilder использует внутренний изменяемый буфер, что позволяет добавлять, изменять и удалять текст без создания новых объектов.
• Вместо создания нового объекта строки изменения происходят внутри буфера, что позволяет избежать лишних выделений памяти и сборок мусора.
🛠 Когда использовать StringBuilder?
• Если строки изменяются часто (например, в циклах).
• При конкатенации большого количества строк.
📌 Интернирование строк (String Interning)
Отдельным пунктом следует упомянуть о механизме интернирования строк.
• Интернирование строк — это механизм оптимизации памяти, который позволяет хранить только одну копию каждой уникальной строки в специальном пуле строк (intern pool).
• Все литеральные строки (например, "Hello") автоматически интернируются и добавляются в пул строк на этапе компиляции.
• Если создается строка с таким же значением, которое уже есть в пуле, ссылка будет указывать на существующую строку, а не создавать новый объект.