Открыть список
Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Особенности строк в .NET

.NETC#
Строковый тип данных является одним из самых важных в любом языке программировании. Вряд ли можно написать полезную программу не задействовав этот тип данных. При этом многие разработчики не знают некоторых нюансов связанных с этим типом. Поэтому давайте рассмотрим кое-какие особенности этого типа в .NET.

Итак, начнем с представления строк в памяти


В.NET строки располагаются согласно правилу BSTR (Basic string or binary string). Данный способ представления строковых данных используется в COM (слово basic от языка программирования VisualBasic, в котором он первоначально использовался). Как известно в C/C++ для представления строк используется PWSZ, что расшифровывается как Pointer to Wide-character String, Zero-terminated. При таком расположении в памяти в конце строки находится null-терминированный символ, по которому мы можем определить конец строки. Длина строки в PWSZ ограничена лишь объемом свободной памяти.
Читать дальше →
Всего голосов 83: ↑78 и ↓5 +73
Просмотры78.6K
Комментарии 34

Hash array mapped trie

ПрограммированиеАлгоритмы
Hash array mapped trie — это ассоциативный контейнер, который обладает свойствами хэш таблиц и trie. Операции вставки пары ключ-значение и поиск по ключу — О(1) операции.
Про trie на хабре уже писали.

Читать дальше →
Всего голосов 20: ↑20 и ↓0 +20
Просмотры19.4K
Комментарии 7

Zotero: оптимизация хранения и использования научной литературы

FirefoxOpen source
Из песочницы


Не буду распространяться о преимуществах использования библиографических менеджеров. На дворе 2015 год. Тема не раз обсуждалась на Хабре.

Здесь подробно описываются все прелести использования библиографического менеджера на примере Mendeley (это один из главных конкурентов Zotero, сравнение позже в этой статье). Здесь любопытно представлена система Citavi. Вроде бы, все в ней неплохо, но платить за софт приличные деньги, когда есть прекрасные бесплатные аналоги — развлечение на любителя. Кстати, от души рекомендую почитать комментарии к этой статье — познавательнее иных опусов. Здесь автор библиографического менеджера SciRef предлагает получить программку бесплатно.

Существует огромное множество различных библиографических менеджеров (см. таблицу в подвале, источник).

Сравнительная таблица библиографических менеджеров



Разумеется, при таком многообразии глупо говорить об одном идеальном решении. В этой статье я хочу рассказать вам о решении, которым пользуюсь и которое устраивает меня почти полностью. Как видно из названия статьи, это Zotero.
Читать дальше →
Всего голосов 9: ↑9 и ↓0 +9
Просмотры29.3K
Комментарии 4

Частные неструктурированные типы и повторное использование типов

Программирование

В 1972 году три популярных компьютерных ученых написали книгу Структурное Программирование, где они упомянули частные неструктурированные типы:


Все структурированные данные в последнем исследовании должны быть построены из неструктурированных компонентов, принадлежащих к примитивам или неструктурированным типам. Некоторые из этих неструктурированных типов (например, вещественные числа и целые числа) могут быть взяты как данное в языке программирования или железной части (прим. hardware) компьютера. Хотя эти примитивные типы теоретически подходят для всех случаев, здесь есть сильные практичные причины для содействия программисту обозначить его собственные неструктурированные типы для того, чтобы сделать ясными его намерения об потенциальных границах значений переменной и интерпретации каждого такого значения; и чтобы допустить последующий дизайн эффективного представления.

(...) Такой тип называют перечислением (прим. enumeration), и мы советуем стандартную нотацию для имени типа и ассоциации имени типа с каждым из его альтернативных значений.
`
type suit = (club, diamond, heart, spade);
(...)
type year = 1900… 1960;
type coordinate = 0… 1023;
`
Читать дальше →
Всего голосов 23: ↑13 и ↓10 +3
Просмотры4.7K
Комментарии 89

Как я улучшил свои навыки работы с алгоритмами, структурами данных и научился использовать все это на практике

Блог компании Skillbox


От переводчика: сегодня публикуем для вас статью Фабиана Терха. Статья в первую очередь будет полезна для начинающих программистов.

Я программист-самоучка, этот пост отражает мой личный опыт и навыки в такой сфере, как алгоритмы и структуры данных; кроме того, я рассказываю и о способах решения задач (к слову, второе мне дается несколько хуже, чем первое).
Читать дальше →
Всего голосов 37: ↑23 и ↓14 +9
Просмотры10.7K
Комментарии 6

Потоки Redis как чистая структура данных

Программирование
Перевод
Новая структура данных Redis 5 под названием «потоки» (streams) вызвала живой интерес в сообществе. Как-нибудь я поговорю с теми, кто использует потоки в продакшне, и напишу об этом. Но сейчас хочу рассмотреть немного другую тему. Мне начинает казаться, что многие представляют потоки неким сюрреалистичным инструментом для решения ужасно трудных задач. Действительно, эта структура данных *также* осуществляет обмен сообщениями, но будет невероятным упрощением считать, что функциональность Redis Streams ограничена только этим.

Потоки — потрясающий шаблон и «ментальная модель», которую можно с большим успехом применить в проектировании систем, но на самом деле потоки, как и большинство структур данных Redis, являются более общей структурой и могут использоваться для кучи других задач. В этой статье мы представим потоки как чистую структуру данных, полностью игнорируя блокирующие операции, группы получателей и всю остальную функциональность обмена сообщениями.
Читать дальше →
Всего голосов 41: ↑40 и ↓1 +39
Просмотры11.5K
Комментарии 6

БД мессенджера (ч.2): секционируем «наживую»

Блог компании ТензорPostgreSQLАнализ и проектирование системSQLАдминистрирование баз данных
Мы удачно спроектировали структуру нашей PostgreSQL-базы для хранения переписки, прошел год, пользователи активно ее наполняют, вот в ней уже миллионы записей, и… что-то все начало подтормаживать.



Дело в том, что с ростом объема таблицы растет и «глубина» индексов — хоть и логарифмически. Но со временем это заставляет сервер для выполнения тех же задач чтения/записи обрабатывать в разы больше страниц данных, чем в начале.

Вот тут на помощь и приходит секционирование.
Читать дальше →
Всего голосов 7: ↑6 и ↓1 +5
Просмотры5.4K
Комментарии 5

БД мессенджера (ч.1): проектируем каркас базы

Блог компании ТензорPostgreSQLАнализ и проектирование системSQLАдминистрирование баз данных
Как можно перевести бизнес-требования в конкретные структуры данных на примере проектирования «с нуля» базы для мессенджера.



Наша база будет не такой масштабной и распределенной, как у ВКонтакте или Badoo, а «чтобы было», но было хорошо — функционально, быстро и умещалось на одном сервере PostgreSQL — чтобы можно было развернуть отдельный экземпляр сервиса где-то на стороне, например.

Поэтому не будем затрагивать вопросы шардинга, репликации и геораспределенных систем, а сосредоточимся на схемных решениях внутри БД.
Читать дальше →
Всего голосов 5: ↑4 и ↓1 +3
Просмотры7.7K
Комментарии 21