Pull to refresh
19
0
Lev Semin @levchick

Software Engineer

Send message

Зачем в Scala трамплины и как их использовать

Level of difficultyHard
Reading time11 min
Views3K

В этой статье директор департамента разработки российской компании «Криптонит» и «скалист» Алексей Шуксто рассказывает о специфической технике функционального программирования, которая называется «трамплин» (trampoline).

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

Достигается это следующим образом: когда функция вызывает саму себя, то вместо этого вызова управление передаётся другой функции — трамплину. Эта функция-трамплин вызывает исходную функцию с нужными параметрами и, если нужно, передаёт управление другой функции-трамплину. Таким образом, при рекурсивных вызовах функций никакая информация не сохраняется на стеке, а управление всегда передаётся между функциями-трамплинами.

Чтобы вникнуть в детали, поясним ещё несколько моментов:

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

CompletableFuture. Глубокое погружение

Level of difficultyHard
Reading time20 min
Views20K

java.util.concurrent.CompletableFuture - класс не новый. Он предстал перед нами во всём своём величии в 2014-м году вместе с выпуском Java 8. Много лет с тех пор прошло, а проще он не стал.

Мы в компании называем их "фьючи". На хабре было много материала по отдельным частям их функциональности, но я решил поставить перед собой более серьёзную задачу - постараться разобрать внутреннее устройство и многие неочевидные нюансы работы с этим классом.

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

Почему B-деревья быстрые?

Level of difficultyEasy
Reading time7 min
Views46K

B-дерево — это структура, помогающая выполнять поиск в больших объёмах данных. Она была изобретена более сорока лет назад, однако по-прежнему используется в большинстве современных баз данных. Хотя существуют и более новые структуры индексов, например, LSM-деревья, B-дерево пока никто не победил в обработке большинства запросов баз данных.

После прочтения этого поста вы будете знать, как B-дерево упорядочивает данные и выполняет поисковые запросы.

Читать далее
Total votes 185: ↑184 and ↓1+183
Comments13

Вышла Java 21

Level of difficultyMedium
Reading time18 min
Views55K
Вышла общедоступная версия Java 21. В этот релиз попало около 2500 закрытых задач и 15 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.

Java 21 является LTS-релизом, а значит у него будут выходить обновления как минимум 5 лет с момента выхода.
Читать дальше →
Total votes 74: ↑74 and ↓0+74
Comments49

Implicits в Scala — неявные методы, функции, значения и особенности

Level of difficultyMedium
Reading time15 min
Views1.7K

Привет! Меня зовут Сергей Грибков, я тимлид команды FM&RA в билайне, и в этом посте я хочу рассказать об одной фирменной особенности Scala под названием implicits. Это неявные параметры, неявные преобразования, неявные классы.

Почему неявные — потому что они не требуют прямого вызова, если мы говорим о методах, не требуют прямой передачи в метод, если мы говорим о параметрах, и так далее.

В Scala implicits широко распространены. Скорее всего, вы уже сталкивались с ними в различных библиотеках и фреймворках, например, Apache Spark. 

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

Итак, существует три основных категории implicits:

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

9 книг для тимлидов и тех, кто хочет ими стать

Reading time4 min
Views17K

Привет! На связи СберМаркет Tech. Эту подборку книг составили инженерные менеджеры СберМаркета и ведущие подкаста «Для tech и этих» Олег Федоткин, Никита Елагин, Семён Мацепура и Вячеслав Артемьев. Сейчас в подчинении у ребят суммарно более 200 инженеров. Мы попросили их поделиться книгами, которые в своё время помогли им вырасти из разработчиков в управленцев. Эти книги не только про лидерство, но и про найм, стратегическое мышление и коммуникации. Они будут полезны тем, кто уже управляет командой или идёт к такой цели. Поехали!

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

Надеть Telegram на OpenVPN и завернуть это в Docker

Reading time8 min
Views16K

Мигрируя в этом году свою инфраструктуру в новый датацентр, поймал себя на мысли о том, что возраст моей виртуальной частной сети (VPN) для доступа к серверам и устройствам перевалил за 10 лет.

Мой старый товарищ OpenVPN ни разу не подвел меня.

Подумав обо всех неудобствах и издержках я решил улучшить имеющийся механизм управления всем VPN-хозяйством.

Под катом вы найдете детали того, что получилось. Кратко, результат следующий: композиция из двух docker-контейнеров, которые превращаются в telegram-бота для управления VPN сервисом. И для этого нужно выполнить всего две команды в консоле.

Механизм управления VPN сервисом теперь не требует каких-либо навыков системного администрирования или доступа к Linux-консоли при выполнении рутинных операций. Например, чтобы сделать сертификаты новому пользователю вам достаточно иметь телефон с telegram-клиентом.

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

Полезного чтения
Total votes 24: ↑22 and ↓2+20
Comments2

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

Reading time10 min
Views11K

Тимлиду постоянно приходится отвечать на вопрос «когда сделаете?» или «когда будет готово?». И часто для ответа на этот вопрос нужно отвлечь от работы своего сотрудника, обсудить с ним задачу и только после этого дать ответ.

Не факт, что ответ совпадет с реальностью. И любой руководитель знает, что для того, чтобы гарантированно уложиться в названый срок, нужно заложить минимум трехкратный запас времени. Заказчики этот принцип тоже знают и поэтому стремятся срезать срок, насколько это возможно. Тимлиду опять приходится отвлекать сотрудника и обсуждать с ним «варианты оптимизации сроков выполнения». Потом цикл повторяется до тех пор, пока кто-то — либо заказчик, либо тимлид — не упрется рогом, не продавит свое решение.

Недовольными, как правило, оказываются все. Тем не менее все постоянно играют в эту игру, и никто никому не верит.

Однако, если использовать исторические данные по сделанным ранее проектам и задачам, то можно узнать с 80% вероятностью срок исполнения задачи любого типа. Никакой магии. Просто математика и немного теории вероятностей :)) В этом суть Канбан-метода.

Читать далее
Total votes 31: ↑23 and ↓8+15
Comments26

Как вести переговоры с террористами… партнерами, детьми и вообще с кем угодно

Reading time11 min
Views91K

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

Читать далее
Total votes 191: ↑188 and ↓3+185
Comments177

YARL: как Яндекс построил распределённый Rate Limiter с нулевым влиянием на время ответа сервисов

Reading time14 min
Views26K

Yandex Rate Limiter (далее просто YARL) — это сервис лимитирования нагрузки для распределённых сервисов. Его особенность в том, что он способен работать с миллионами квот, имея при этом очень низкие накладные расходы на проверку квоты. Если совсем кратко, это система распределённых Leaky Bucket'ов, с помощью которых можно ограничивать разные величины, связанные со временем: скорость передачи данных по сети, запросы в секунду и т. п.



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

Читать дальше →
Total votes 80: ↑79 and ↓1+78
Comments26

1000 и 1 фидбэк. Как самому давать обратную связь и научить других, опыт Lamoda

Reading time16 min
Views48K
Привет! Меня зовут Евгения Голева, я выступила на TeamLeadConf с докладом про обратную связь и хочу поделиться с вами его вольной расшифровкой. Мне удалось под соусом совсем другого проекта научить инженеров давать обратную связь гораздо лучше, чем они делали это раньше. Для этого пришлось не только долго и тщательно объяснять «зачем и как», но и организовать множество подходов к снаряду под бдительным контролем и с мягкой поддержкой. Путь был непростым, усеян граблями и велосипедами, и я надеюсь, что некоторые неочевидные мысли и методы пригодятся тем, кто хотел бы привить культуру здорового фидбэка своей команде.

image
Читать дальше →
Total votes 43: ↑37 and ↓6+31
Comments7

Закалка тимлида: как вывести проект из пожара, не сгореть самому и не спалить команду

Reading time23 min
Views19K

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

На прошедшей в апреле конференции TeamLead Conf 2021 я поделился своим опытом, как вытащить проект из пожара и обойтись без человеческих жертв. Под катом моя история, а если предпочитаете смотреть — вот запись выступления.

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

Обзор Lens — IDE для Kubernetes

Reading time6 min
Views51K

В прошлый раз я писал о том, как можно улучшить утилиту kubectl, дополнив и расширив ее функционал, а сегодня зайду с другой стороны: познакомимся с решением, которое позволит забыть о консольных командах и управлять Kubernetes-кластером в графическом интерфейсе. Речь пойдёт про Lens — бесплатное приложение с открытым кодом, которое позиционируется как полноценная Kubernetes IDE. Мы уже кратко рассматривали Lens в сравнительном обзоре GUI для K8s, а теперь попробуем это решение в деталях. Что ж, поехали!

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

Нагрузочное тестирование на Gatling — Полное руководство. Часть 1

Reading time11 min
Views29K

Эта статья представляет собой полное, подробное и исчерпывающее руководство по эффективному использованию Gatling для нагрузочного тестирования.

Если вам нужно провести нагрузочное тестирование вашего сервера HTTP-приложений, то Gatling - идеальный инструмент для этой задачи! Эта серия статей будет представлять собой подробное практическое руководство по нагрузочному тестировании на Gatling. К концу этого руководства у вас появится хорошее представление об использовании Gatling, которое вы сможете применить в ваших последующих проектах по нагрузочному тестированию.

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

Использование Spring Cloud Stream Binding с брокером сообщений Kafka

Reading time5 min
Views14K

Всем привет! Меня зовут Виталий, я разработчик в компании Web3Tech. В этом посте я представлю основные концепции и конструкции платформы Spring Cloud Stream для поддержки и работы с брокерами сообщений Kafka, с полным циклом их контекстного unit-тестирования. Мы используем такую схему в своем проекте всероссийского электронного голосования на блокчейн-платформе Waves Enterprise.

Являясь частью группы проектов Spring Cloud, Spring Cloud Stream основан на Spring Boot и использует Spring Integration для обеспечения связи с брокерами сообщений. При этом он легко интегрируется с различными брокерами сообщений и требует минимальной конфигурацией для создания event-driven или message-driven микросервисов.

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

Подключение Keycloak к Spring Boot приложению

Reading time20 min
Views64K

Привет Хабр!

Как известно, spring OAuth2.0.x переведен в режим поддержки уже почти как 2 года назад , а большая часть его функциональности теперь доступна в spring-security (матрица сопоставления). В spring-security отказались переносить Authorization service (roadmap) и предлагают использовать вместо него свободные или платные аналоги, в частности keycloak. В этом посте мы хотели бы поделится различными вариантами подключения keycloak к приложениям spring-boot.

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

5 вещей, о которых должен знать любой разработчик Apache Kafka

Reading time15 min
Views68K


Apache Kafka — это платформа потоковой обработки событий, которую используют 30% компаний из Fortune 500. У Kafka много функций, благодаря которым платформа задает стандарт обработки событий, и здесь мы поговорим о пяти самых важных аспектах, которые должны быть известны любому, кто работает с Kafka.


Некоторые аспекты связаны с производительностью, другие — с архитектурой. Надеюсь, к концу этого поста вы лучше поймете, как работает Kafka, и освоите пару новых трюков.

Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments3

Реактивное программирование на Java: как, зачем и стоит ли? Часть II

Reading time15 min
Views65K

Реактивное программирование — один из самых актуальных трендов современности. Обучение ему — сложный процесс, особенно если нет подходящих материалов. В качестве своеобразного дайджеста может выступить эта статья. На конференции РИТ++ 2020 эксперт и тренер Luxoft Training Владимир Сонькин рассказал о фишках управления асинхронными потоками данных и подходах к ним, а также показал на примерах, в каких ситуациях нужна реактивность, и что она может дать.

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

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

Микросервисы со Spring Boot. Часть 5. Использование сервера имен Eureka

Reading time4 min
Views20K
В этой заключительной части нашей серии архитектур микросервисов мы научимся включать сервер имен Eureka и позволять микросервисам взаимодействовать с ним.

Это статья входит в серию статей «Микросервисы со Spring Boot»:


В этой серии статей вы познакомитесь с концепцией микросервисов и узнаете, как создавать микросервисы с помощью Spring Boot и Spring Cloud.

Это руководство поможет вам изучить основы микросервисных архитектур. Мы также начнем рассматривать базовую реализацию микросервиса со Spring Boot.
Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments0

Микросервисы на Java: практическое руководство

Reading time29 min
Views88K

Вы можете использовать это руководство, чтобы понять что такое Java микросервисы, как вы будете их разрабатывать и создавать. А также получить обзор библиотек для разработки Java микросервисов.


Примечание: Статья ~ 7000 слов, вероятно, не стоит читать ее на мобильном устройстве. Добавьте ее в закладки и вернитесь позже.


Содержание


Читать дальше →
Total votes 17: ↑12 and ↓5+7
Comments7
1
23 ...

Information

Rating
Does not participate
Location
Таллин, Эстония, Эстония
Date of birth
Registered
Activity