Pull to refresh
-1
0.8

Senior Java Developer

Интеграция с Apache Cassandra. Создаем микросервис с Cassandra и Kafka

Level of difficulty Medium
Reading time 66 min
Views 959
OTUS corporate blog Programming *Microservices *
Case

Сегодня мы узнаем, как написать микросервис, который сохраняет данные в Apache Cassandra с помощью Java-драйвера DataStax и генерирует события для изменений данных в Apache Kafka.

Этот пост основан на дизайне простого микросервиса для управления данными бронирования отелей, который называется Reservation Service. Вы можете выполнить серию упражнений по записи и чтению данных в Cassandra с помощью службы резервирования в наборе «Cassandra: разработка приложений с помощью Java-драйвера DataStax». Исходный код службы бронирования доступен на GitHub.

Читать далее
Total votes 7: ↑6 and ↓1 +5
Comments 0

Обработка исключений в Java с использованием сопоставления с образцом (pattern matching)

Level of difficulty Medium
Reading time 7 min
Views 4.8K
Java *Functional Programming *
Tutorial

Обработка исключений в Java с использованием сопоставления с образцом (pattern matching).


Данная статья является логическим продолжением статей



В данной статье рассмотрим способы обработки исключений Java при помощи pattern-matching, как это делается в других FP языках.


Пример на других языках


В функциональных языках программирования существуют удобные средства для работы с исключениями. В Kotlin и Rust это класс Result, в Scala и Haskell — Try. Обработка успешного результата или ошибки может производится при помощи pattern-matching как на примерах ниже.


Scala


val result = divideWithTry(10, 0) match {
  case Success(i) => i
  case Failure(DivideByZero()) => None
}

Rust


    let greeting_file_result = File::open("hello.txt");
    let greeting_file = match greeting_file_result {
        Ok(file) => file,
        Err(error) => panic!("Problem opening the file: {:?}", error),
    };

Использование pattern-matching является естественным (idiomatic) в функциональных языках. А как дело обстоит в Java?

Читать дальше →
Total votes 8: ↑6 and ↓2 +4
Comments 4

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

Reading time 18 min
Views 2.1K
OTUS corporate blog Programming *Rust *
Translation

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

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

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

Читать далее
Total votes 26: ↑24 and ↓2 +22
Comments 5

Простое понимание замыканий в Rust

Reading time 5 min
Views 8.7K
Programming *Rust *
Tutorial

У вас бывало такое, что вы никак не можете скомпилировать код с замыканиями в Rust? Уже и все варианты Fn-трейтов перебрали, и move написали везде, где можно, а borrow checker все равно не унимается? И тут оказывается, что просто нужно внутри замыкания клонировать переданную переменную окружения! Сложно и непонятно. Дурацкий привереда Rust.


На самом деле довольно просто понять, почему так происходит и на что влияет move, а на что — клонирование. Но отсутствие подобного понимания я наблюдаю не только у начинающих программистов, но и у вполне зрелых. Хуже того, есть статьи, в которых это объясняется неправильно.

Читать дальше →
Total votes 43: ↑43 and ↓0 +43
Comments 8

Что такое ngrx/createFeature и как это может облегчить жизнь frontend-разработчику

Reading time 6 min
Views 1.7K
Мир Plat.Form (НСПК) corporate blog Programming *Angular *TypeScript *
Tutorial

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

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

Глубокое погружение в Java Memory Model

Reading time 53 min
Views 58K
Programming *Java *


Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме.


В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.

Читать дальше →
Total votes 109: ↑109 and ↓0 +109
Comments 58

GraphQL, что ты такое?

Reading time 7 min
Views 14K
HeadHunter corporate blog Website development *

Привет! Сегодня у нашей статьи два автора — бэкенд-разработчик Артём и фронтенд-разработчик Илья. 

Примерно год назад мы решили попробовать внедрить graphQL у себя в проекте и сейчас хотим поделиться, как это происходило. Расскажем, что такое GraphQL, как его внедряли, почему мы вообще решили с ним подружиться и как начать взаимодействовать с API бэкенда словно вы граф, а не холоп.

Если лень читать или больше нравится видеоформат — вам сюда

Читать далее
Total votes 12: ↑9 and ↓3 +6
Comments 22

R*-tree в Go, немного геймдева и поиска элементов в пространстве

Reading time 7 min
Views 5.6K
High performance *Game development *Algorithms *Go *Geoinformation services *
Tutorial
Sandbox

Приветствую, уважаемые читатели Habr!

Если Вы когда-нибудь задумывались, какая структура данных может помочь максимально эффективно искать элементы в пространстве, то, возможно, эта статья Вам поможет!

Эта статья заденет опыт в геймдейве и идеи, где это ещё можно было бы использовать :)

Читать далее
Total votes 16: ↑15 and ↓1 +14
Comments 21

Импорт карты высот (heightmap) в Unity

Reading time 2 min
Views 2.7K
Game development *Unity3D *
Sandbox

Как импортировать карту высот в Unity?

В этом туториале я вам покажу как легко и просто(за 10-15 минут) импортировать карту высот в юнити без каких-либо других технологий(кроме фотошопа). Причем карта сохранит свои размеры и точность!

Мне это интересно →
Rating 0
Comments 3

Минимальная реализация Lua на Rust

Reading time 24 min
Views 7.3K
RUVDS.com corporate blog Programming *Lua *Rust *
Translation
После того, как вы освоите это руководство, в вашем распоряжении окажется минимальная реализация Lua (парсер, компилятор, виртуальная машина), написанная на Rust с чистого листа. Этот проект получил название Lust, его код можно найти на GitHub.

Читать дальше →
Total votes 37: ↑35 and ↓2 +33
Comments 11

Фильтрация шума сигнала

Reading time 7 min
Views 23K
Python *Programming *Algorithms *Data visualization *Developing for Arduino *
Sandbox

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

Читать далее
Total votes 45: ↑40 and ↓5 +35
Comments 38

Angular: полное руководство для «Внедрения зависимостей»

Reading time 11 min
Views 13K
РСХБ-Интех (Россельхозбанк) corporate blog Angular *TypeScript *
Tutorial

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

Читать далее
Total votes 8: ↑7 and ↓1 +6
Comments 6

Создание и использование динамических библиотек в Rust

Reading time 9 min
Views 7.7K
OTUS corporate blog System Programming *Rust *

Динамические библиотеки подключаются к программе во время выполнения. Это позволяет обновлять их реализацию и компилировать независимо от использующих программ. Такой подход открывает ряд дополнительных возможностей при разработке ПО. Например, написание разных модулей приложения на разных языках. Или создание системы динамически подключаемых плагинов. В данной статье мы рассмотрим, как создавать и загружать динамические библиотеки в Rust.

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

Книга «Классические задачи Computer Science на языке Java»

Reading time 10 min
Views 7.6K
Издательский дом «Питер» corporate blog Java *Professional literature *
image Привет, Хаброжители! Cтолкнулись с «неразрешимой» проблемой при разработке программного обеспечения? Скорее всего, кто-то уже справился с этой задачей, и вы можете не ломать голову. Дэвид Копец собрал наиболее полезные готовые решения, принципы и алгоритмы. «Классические задачи Computer Science на языке Java» — это мастер-класс по программированию, содержащий 55 практических примеров, затрагивающих самые актуальные темы: базовые алгоритмы, ограничения, искусственный интеллект и многое другое.

В этой книге:

— Рекурсия, мемоизация и битовые манипуляции.
— Поисковые, графовые и генетические алгоритмы.
— Проблемы ограничений.
— Кластеризация методом k-среднего, нейронные сети и состязательный поиск.
Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Comments 7

Обработка ошибок в Rust

Reading time 12 min
Views 9.8K
OTUS corporate blog Designing and refactoring *Rust *

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

Читать далее
Total votes 40: ↑38 and ↓2 +36
Comments 23

Безопасная многопоточность в Rust

Reading time 10 min
Views 11K
OTUS corporate blog Programming *Designing and refactoring *Rust *

Представьте ситуацию: вы решили добавить функционал в некоторую сущность (класс, структуру, ...). Для этого вам понадобилось хранить внутри сущности дополнительные данные. Вы добавляете приватные поля, меняете и читаете их внутри методов, интерфейс методов не изменяется, и всё выглядит хорошо. И не просто выглядит, а компилируется, запускается и проходит тесты. Красота... А потом, в один прекрасный день, прод падает. И может быть даже, теряет часть важных данных. Вы с коллегами начинаете искать причину поломки. И оказывается, что та сущность, которую вы дополняли год назад, делится между несколькими потоками, а поля добавленные вами не потокобезопасны и поэтому гонка за доступ к ним в какой-то момент вызывает их повреждение. Неприятно, согласитесь? Хотелось бы иметь инструмент, позволяющий избегать подобных ситуаций. И язык программирования Rust такой инструмент предоставляет.

Читать далее
Total votes 49: ↑46 and ↓3 +43
Comments 3

Дикая природа Gradle Task: руководство по выживанию

Reading time 19 min
Views 12K
Yota corporate blog Groovy & Grails *Development for Android *Kotlin *Gradle *
Tutorial

Приветствую, Gradle-адепт! В статье тебя ждёт авторский тур по Gradle Task. В маршрут включено хождение по граблям, изучение секретных практик buildscript-тасок, проведение раскопок по deprecated API, а ближе к концу зарядимся силой Custom Gradle Task, попрактикуемся в строительстве билд-кеша и узнаем, кто такой Worker API.

Читать далее
Total votes 17: ↑16 and ↓1 +15
Comments 2

Apache Camel и Spring Boot

Reading time 12 min
Views 12K
OTUS corporate blog Java *Apache *
Translation

Apache Camel — это фреймворк для интеграции приложений и эффективного взаимодействия между различными системами, с чем приходится часто сталкиваться в любой корпоративной инфраструктуре. Apache Camel позволяет разработчику сосредоточиться на логике процессов, не переводя данные в канонический формат, так как Camel поддерживает более 80 API для реализации различных протоколов и типов данных. Таким образом, разработчику — то есть вам — достаточно просто знать, как Camel соединяет все вместе. В этой статье мы по шагам рассмотрим, как интегрировать Apache Camel и Spring Boot.

Но прежде чем обратиться к примеру со средой Spring Boot, разберемся с основными понятиями и терминами Camel.

Читать далее
Total votes 9: ↑7 and ↓2 +5
Comments 0

Cassandra Day Russia 2021: онлайн-конференция 27 марта

Reading time 1 min
Views 1.5K
Southbridge corporate blog NoSQL *Database Administration *Apache *Big Data *
image

Что объединяет Apple, Netflix, Huawei и Instragram? Не только миллиарды запросов, петабайты данных и пользователи по всему миру. Все эти компании используют распределённую NoSQL базу данных Apache Cassandra.

Приглашаем на однодневную онлайн-конференцию Cassandra Day Russia 2021 в субботу 27 марта. Опытные NoSQL специалисты расскажут о возможностях одной из самых мощных баз данных современности и поделятся практическим опытом управления СУБД Cassandra.
Читать дальше →
Total votes 16: ↑15 and ↓1 +14
Comments 0

Information

Rating
1,254-th
Location
Воронеж, Воронежская обл., Россия
Registered
Activity