Как стать автором
Обновить

О разворачивании строк в .Net/C# и не только

Время на прочтение 11 мин
Количество просмотров 34K
.NET *
Давайте поговорим о строках, точнее об их переворачивании средствами .Net/C#. Так уж сложилось, что в стандартной библиотеке соответсвующей функции не наблюдается. И как мне подсказывают, написание функции обращения строки довольно популярный вопрос на собеседованиях при приеме на работу. Давайте посмотрим, как можно эффективно перевернуть строку средствами данной платформы.

Под катом приведен сравнительный анализ быстродействия разных методов переворачивания строки.

Читать дальше →
Всего голосов 91: ↑82 и ↓9 +73
Комментарии 57

Секреты JDK

Время на прочтение 4 мин
Количество просмотров 24K
Java *

Про Unsafe в Java не слышал только ленивый, однако это не единственный магический класс в Sun/Oracle JDK, стирающий границы Java платформы и открывающий тропинки, не нанесенные на карту публичного API. Я расскажу про некоторые из них, принесшие пользу в реальных проектах. Но помните: недокументированные возможности лишают ваше приложение переносимости на другие Java платформы и, кроме того, являются потенциальным источником нетривиальных ошибок. Я даже зря написал слово «приложение». Лучше сказать, что описанные ниже классы вовсе не годятся для приложений! Скорее, они представляют интерес лишь для системного ПО и для любознательных программистов, т.е. для вас :)
Читать дальше →
Всего голосов 129: ↑127 и ↓2 +125
Комментарии 30

Использование разделяемой памяти в Java и off-heap кеширование

Время на прочтение 6 мин
Количество просмотров 56K
Блог компании Одноклассники Высокая производительность *Java *
На прошлой неделе состоялся успешный эксперимент по запуску нового решения для download-сервиса. Один достаточно скромный сервер (2 x Intel Xeon E5620, 64 GB RAM) под управлением Java-приложения собственной разработки принял на себя нагрузку восьми Tomcat'ов, обслуживая более 70 тысяч HTTP-запросов в секунду общей пропускной способностью 3000 Mb/s. Таким образом, весь трафик Одноклассников, связанный с пользовательскими смайликами, обрабатывался одним сервером.

Вполне естественно, что высокие нагрузки требовали нестандартных решений. В цикле статей о разработке высоконагруженного сервера на Java я расскажу о проблемах, с которыми нам пришлось столкнуться, и о том, как мы их преодолели. Сегодня речь пойдет о кешировании изображений вне Java Heap и об использовании Shared Memory в Java.
Читать дальше →
Всего голосов 65: ↑64 и ↓1 +63
Комментарии 68

Вспомнить всё: Java-конференция JET. 28 сентября 2015. Отчёт

Время на прочтение 5 мин
Количество просмотров 5.4K
Java *Groovy & Grails *Scala *
Из песочницы
Меня зовут Дима и я разработчик. Живу в Минске, люблю посещать зарубежные конференции. Ну вот устал однажды ездить и решил сходить локально. Но выбора было мало. Поэтому вдвоём со своим верным товарищем решили сделать конференцию самостоятельно. Назвали JET. Потому что начинается с J, как и Java, а ещё можно сделать слоган "Let's fly to Java world". Ну что же, как это было?

Открытие


Началось все с выступления организаторов, где мы поделились тем, как зарождалась идея конференции. Рассказали о том, как мы прошли путь в 4 месяца подготовки, и что по итогу получилось. А получилось — 3 потока концентрированных знаний, 300 участников и первый кирпичик в фундаменте дома конференции JET.


Читать дальше →
Всего голосов 16: ↑15 и ↓1 +14
Комментарии 4

«Любое техническое изменение должно отвечать на вопрос «зачем?» — Одноклассники о Java и не только

Время на прочтение 12 мин
Количество просмотров 12K
Блог компании Одноклассники Блог компании JUG Ru Group Высокая производительность *Java *


Как в Одноклассниках использование sun.misc.Unsafe сочетается с повышенными требованиями к надёжности? Почему там дорабатывали систему мониторинга Cacti? Как работа в ОК пересекается с научной деятельностью? Если соцсеть называется «Одноклассники», то состоит ли весь её Java-код из одного класса?

Ответы на эти и другие вопросы — в нашем посте. В преддверии Joker, где сразу трое сотрудников ОК будут спикерами, а ещё один участвует в программном комитете, мы расспросили всех четверых — и не только их. На наши вопросы ответили:

  • Олег Анастасьев, ведущий разработчик (участник программного комитета Joker 2016)
  • Андрей Паньгин, ведущий разработчик (спикер Joker 2016)
  • Виталий Худобахшов, ведущий аналитик (спикер Joker 2016)
  • Дмитрий Бугайченко, инженер-аналитик (спикер Joker 2016)
  • Андрей Губа, заместитель технического директора
  • Кристина Штейнберга, руководитель отдела персонала

Читать дальше →
Всего голосов 42: ↑40 и ↓2 +38
Комментарии 3

Unsafe продолжает жить в Java 9

Время на прочтение 2 мин
Количество просмотров 20K
Программирование *Java *
С началом работы над Java 9 было анонсировано удаление критически важных классов из пакетов sun.* (понятное дело Sun, а в последствии и Oracle заявляли, что их использование является собственным риском компаний и проектов), что вызвало шквал критики и недовольства со стороны сообщества (ибо highload решения для которых производительность это все, используют скрытые возможности sun.*). Предыстория началась 15 лет назад с выходом версии языка 1.4, за это время большое количество библиотек, фреймворков, приложений успели внедрить закрытый код в свой.

socmetr.unsafe.image

Вот только не полный перечень проектов, которые у всех на слуху: Scala, Kafka, Akka, Hadoop, Cassandra, Hazlecast и прочие…
Читать дальше →
Всего голосов 26: ↑23 и ↓3 +20
Комментарии 4

Инстанцируем java.lang.Class

Время на прочтение 13 мин
Количество просмотров 36K
Ненормальное программирование *Java *


Конструктор java.lang.Class является одной из самых охраняемых сущностей в языке Java. В спецификации чётко сказано, что объекты типа Class может создавать только сама JVM и что нам тут делать нечего, но так ли это на самом деле?


Предлагаю погрузиться в глубины Reflection API (и не только) и выяснить, как там всё устроено и насколько трудно будет обойти имеющиеся ограничения.

Читать дальше →
Всего голосов 56: ↑54 и ↓2 +52
Комментарии 15

Кроссплатформенная новогодняя демка на .NET Core и Avalonia

Время на прочтение 3 мин
Количество просмотров 26K
Ненормальное программирование *Программирование *.NET *C# *Разработка под Linux *

"ААА! Пришло время переписывать на .NET Coreǃ", говорили они, WPF в комментариях обсуждали. Так давайте же проверим, можно ли написать кросс-платформенное GUI приложение на .NET / C#.



Новогоднее настроение навеяло идею сделать анимацию падающего снега. Были такие демки под DOS, горящий огонь, фракталы, снежок, падающий на ёлочку, и так далее.


Как увидим ниже, это не только весело, но и позволит испытать ключевой функционал UI фреймворка. Поехали!

Читать дальше →
Всего голосов 55: ↑52 и ↓3 +49
Комментарии 55

[DotNetBook] Span: новый тип данных .NET

Время на прочтение 14 мин
Количество просмотров 30K
Блог компании Семинары Станислава Сидристого Программирование *.NET *C# *
Туториал

С этой статьей я продолжаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом (уже готово около 200 страниц книги, так что добро пожаловать в конец статьи за ссылками).


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


Разработчики платформы и раньше пытались нам помочь скрасить будни разработки с использованием неуправляемых ресурсов: это и автоматические врапперы для импортируемых методов. И маршаллинг, который в большинстве случаев работатет автоматически. Это также инструкция stackallloc, о которой говорится в главе про стек потока. Однако, как по мне если ранние разработчики с использованием языка C# приходили из мира C++ (как сделал это и я), то сейчас они приходят из более высокоуровневых языков (я, например, знаю разработчика, который пришел из JavaScript). А что это означает? Это означает что люди со все большим подозрением начинают относиться к неуправляемым ресурсам и конструкциям, близким по духу к C/C++ и уж тем более — к языку Ассемблера.


Примечание


Глава, опубликованная на Хабре не обновляется и возможно, уже несколько устарела. А потому, прошу обратиться за более свежим текстом к оригиналу:


Читать дальше →
Всего голосов 38: ↑38 и ↓0 +38
Комментарии 24

Что значит unsafe в Rust?

Время на прочтение 9 мин
Количество просмотров 6.7K
Системное программирование *Rust *
Из песочницы

Привет, Хабр! Представляю вашему вниманию перевод статьи "What Is Rust's unsafe?" автора Nora Codes.


Мне доводилось видеть много недопониманий относительно того, что значит ключевое слово unsafe для полезности и правильности языка Rust и его продвижения как "безопасного языка системного программирования". Правда намного сложнее, чем можно описать в коротком твите, к сожалению. Вот как я ее вижу.


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

Читать дальше →
Всего голосов 51: ↑51 и ↓0 +51
Комментарии 2

Максимальное количество значений в enum Часть II

Время на прочтение 21 мин
Количество просмотров 3.3K
Ненормальное программирование *Java *
Recovery mode
Часть первая, теоретическая | Часть вторая, практическая



Продолжаем поиск максимального возможного количества значений в перечислении.
На этот раз сосредоточимся на практической стороне вопроса и посмотрим, как на наши достижения будут реагировать IDE, компилятор и JVM.
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 7

Создание указателей в C#

Время на прочтение 3 мин
Количество просмотров 9.6K
C# *

Создание указателей в C#

Привет всем, в данной статье я приведу несколько способов создания указателей в C#.

Создание указателей в C#

Создание указателей в C
Всего голосов 15: ↑5 и ↓10 -5
Комментарии 10

Сломать объект с помощью финализации

Время на прочтение 3 мин
Количество просмотров 7.5K
Программирование *Java *

Вчера перевели в статус Candidate новый JEP 421: Deprecate Finalization for Removal. Путь к удалению механизма финализации из Java начался в Java 9, когда метод Object.finalize() был впервые объявлен deprecated. Рано или поздно механизм исчезнет из Java, поэтому если вы его используете, самое время задуматься об альтернативах. Однако статья не об этом.


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

Читать дальше →
Всего голосов 33: ↑33 и ↓0 +33
Комментарии 8

Как починить HotSpot с помощью Java

Время на прочтение 8 мин
Количество просмотров 4K
Java *
✏️ Технотекст 2021

Приветствую, за время праздников подготовил статью про низкоуровневое профилирование и производительность.

Читать далее
Всего голосов 13: ↑13 и ↓0 +13
Комментарии 12

Как избавиться от проверок выхода за границы при доступе по индексу в Rust (без unsafe!). Часть 1

Время на прочтение 18 мин
Количество просмотров 2.3K
Блог компании OTUS Программирование *Rust *
Перевод

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

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

Поэтому я решил поделиться с вами опытом и методами, которые я обнаружил в процессе удаления проверок выхода индекса за границы, а также удаления unsafe кода, где это возможно, из множества громоздких крейтов.

Читать далее
Всего голосов 26: ↑24 и ↓2 +22
Комментарии 5

Небезопасный android часть 1: эксперименты с sun.misc.Unsafe

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 2.7K
Ненормальное программирование *Java *Кодобред Разработка под Android *
Из песочницы

Java очень глубоко интегрирована в android и имеет в данной ОС свою нестандартную виртуальную машину — DVM/ART, поэтому многие детали реализации отличаются от привычных. А что насчёт внутреннего API sun.misc.Unsafe? В этом цикле статей с его помощью мы попытаемся максимально сломать виртуальную машину андроида.

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 6

Небезопасный android часть 2: эксперименты с sun.misc.Unsafe

Уровень сложности Сложный
Время на прочтение 13 мин
Количество просмотров 2K
Ненормальное программирование *Java *C++ *Кодобред Разработка под Android *

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

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 5