Pull to refresh

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

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

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


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

Hash array mapped trie

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

Читать дальше →
Total votes 20: ↑20 and ↓0 +20
Views 20K
Comments 7

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

Firefox Open source *
Sandbox


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

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

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

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



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

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

Programming *

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


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

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

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

Skillbox corporate blog


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

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

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

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

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

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

Тензор corporate blog PostgreSQL *System Analysis and Design *SQL *Database Administration *
Мы удачно спроектировали структуру нашей PostgreSQL-базы для хранения переписки, прошел год, пользователи активно ее наполняют, вот в ней уже миллионы записей, и… что-то все начало подтормаживать.



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

Вот тут на помощь и приходит секционирование.
Читать дальше →
Total votes 7: ↑6 and ↓1 +5
Views 6.8K
Comments 5

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

Тензор corporate blog PostgreSQL *System Analysis and Design *SQL *Database Administration *
Как можно перевести бизнес-требования в конкретные структуры данных на примере проектирования «с нуля» базы для мессенджера.



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

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

Удаление в красно-черном дереве

Programming *Algorithms *
Sandbox
Tutorial

Тема не так нова, но почему-то все имеющиеся статьи либо с ошибками, либо сложны для понимания (например, фразами "ребенок удаленной вершины без детей"), поэтому для себя я решил заново полностью понять всю схему удаления вершин из красно-черного дерева, а заодно оформить это все в более-менее рабочий пост-заметку с пояснениями.

Читать далее
Total votes 10: ↑10 and ↓0 +10
Views 4.9K
Comments 3

Информационная Система с данными и без

Юнидата corporate blog IT systems testing *System Analysis and Design *

В нашей прошлой статье мы рассказывали о функциональных зависимостях и их применении в эксплорации и очистке данных. Сейчас расскажем о разработке информационных систем. Как сделать нужную для бизнеса информационную систему (ИС), которая полностью работает, и при этом не работает? Очень просто. Предоставьте разработчикам ИС ограниченный набор тестовых данных и лишите их возможности сопровождения системы на реальных данных.

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

Читать далее
Total votes 4: ↑4 and ↓0 +4
Views 819
Comments 0

Вагон не тронется: какие данные используют операторы для контроля за перемещением грузов по железной дороге

Первая грузовая компания (ПГК) corporate blog System Analysis and Design *IT Infrastructure *Reading room Transport

Для того, чтобы получать информацию о движении поездов и грузов, нужны данные. Много данных. Сегодня расскажу про структуру данных в железнодорожной логистике, которые позволяют оперативно доставлять продукцию, оповещать клиентов, а также предложить оптимальный тариф на железнодорожную перевозку.

Читать далее
Total votes 3: ↑3 and ↓0 +3
Views 1.2K
Comments 0