Pull to refresh
0
0

Java engineer

Send message

Как жить без IntelliJ IDEA. Часть №2. Поддержка Spring

Level of difficultyEasy
Reading time12 min
Views18K

В первой статье из цикла «Как жить без IntelliJ IDEA» мы рассмотрели возможные альтернативы привычной многим IDE. 

Во второй статье из цикла команда Spring АйО выяснила, какие есть альтернативы Ultimate в части поддержки Spring и насколько хорошо они справляются со своей задачей.

Читать далее
Total votes 32: ↑30 and ↓2+30
Comments8

Быстрее пули: как найти счастье с PostgreSQL

Level of difficultyEasy
Reading time24 min
Views7.3K

В этой статье мы расскажем о том, как эффективно реализовать полнотекстовый поиск с помощью PostgreSQL. Узнайте, как улучшить скорость и точность поиска по текстовым данным, используя такие инструменты, как tsvector, tsquery и индексы GIN, и как эти возможности могут значительно повысить производительность вашего приложения.

Читать далее
Total votes 29: ↑28 and ↓1+40
Comments11

Введение в Docker и Kubernetes: основы контейнерных технологий. Часть 1

Level of difficultyEasy
Reading time7 min
Views28K

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

Читать далее
Total votes 15: ↑12 and ↓3+10
Comments17

Побитовая арифметика в Java

Reading time7 min
Views21K
Приветствую, дорогой читатель.

Редко, но все же задачки из собеседований и обучалок имеют практическую ценность. Так, мне понадобилось реализовать на Java альтернативу арифметическим операциям над целочисленными значениями. Благо, первые страницы поисковиков пестрят готовыми решениями побитовых аналогов, и над большинством из них голову ломать не пришлось.

Признаться, я был несколько удивлен отсутствию такого материала на Хабре (плохо искал?), потому и решил восполнить этот недостаток, со своими комментариями и дополнениями.
Прошу учесть, что в примерах с побитовыми операциями значения урезаны до полубайта: фундаментальной разницы не будет, а воспринимается легче.
Читать дальше →
Total votes 10: ↑8 and ↓2+7
Comments23

Почему Scrum так изматывает

Level of difficultyEasy
Reading time6 min
Views35K

В современном мире программирование связано с высокой стрессовой нагрузкой — намного большей, чем на моей памяти было в 90-х и начале 2000-х, когда я только начинал свой путь в этой сфере. В те времена безумие начиналось в преддверии дедлайнов, но в остальное время всё шло более-менее размеренно. Сегодня же психологическая нагрузка и давление уже являются неотъемлемыми спутниками разработки ПО.

Поэтому, естественно, в целях сохранения здоровья и повышения продуктивности мне хочется с этим давлением как-то разобраться. В итоге я немного поразмышлял, почему в последние пару десятилетий всё стало настолько печально (по крайней мере, для меня).
Читать дальше →
Total votes 111: ↑104 and ↓7+136
Comments75

Туториал по нотификациям через RSocket: от концепции до запуска в продакшн

Level of difficultyMedium
Reading time17 min
Views5.1K

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

После анализа различных вариантов, мы остановились на WebSocket в связке с RSocket.

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

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

Поэтому, когда мы закончили проект, то решили восполнить (или попытаться) этот пробел в русскоязычной среде на реальном примере. Надеемся, что эта статья поможет вам разобраться в применении RSocket over WebSocket и сократит время на погружение :) 

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

Работа с геометрией в JPA и Spring Boot 3

Level of difficultyMedium
Reading time12 min
Views4.4K

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

Так как статей на эту тему на хабре раз и обчелся, то вот держите еще одну 😁

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

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

Нагрузочное тестирование в разработке веб-приложений

Level of difficultyMedium
Reading time12 min
Views3.4K

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

Читать далее
Total votes 6: ↑6 and ↓0+8
Comments5

Чиним замедление YouTube на уровне роутера

Level of difficultyMedium
Reading time6 min
Views647K

Всех категорический приветствую. Буквально первого августа, прямо в ночь, стал у меня жутко лагать YouTube. Естественно, мне это сильно не понравилось. Ну, что же, давайте разбираться, почему и как это исправить в условиях моей личной сети.

Что случилось?

Хорошо описано произошедшее здесь, на Хабре. Если совсем кратко, своими словами - во время установки SSL соединения в открытом виде домен передается к которому мы подключаемся(так называемое SNI). И если это googlevideo.com то начинают твориться "интересные вещи". Можно проверить это локально коммандами из статьи.

$ curl https://speedtest.selectel.ru/100MB -o/dev/null

Читать далее
Total votes 360: ↑357 and ↓3+412
Comments1054

(Spring) State in the (Spring) Shell: не продакшном единым

Reading time10 min
Views5.4K

Эй, как насчет интерактивной командной оболочки с автодополнением, помощью и прочим? И без заморочек да еще и на JVM?


Головной болью на работе для меня стал Postman. Хотя на словах мы все TDD и по красному огоньку Cucumber видим, что именно сломалось, но на практике приходилось мне гораздо чаще слать REST запросы в интерфейсе Postman. При начале работы надо было получить токен аутентификации (запрос на создание и запрос на валидацию, пользователи разные), а потом скакать по закладкам, править параметры и запускать уже другие запросы. Клик-клик-клик. В разном порядке. Уж я и скрипты с cURL писал, и в IDEA запросы оформлял — не удобно. Идеальный мотиватор для перехода на автоматические тесты, вот только это были запросы на получение понимания, что происходит в какой-то уникальный момент сочетания состояния сервиса, его версии, мейнфреймов за ним, погоды в доме и уж точно под регрессионное тестирование не попадали. Клик-клик-клик стал съедать слишком много времени и накручивал километраж мышки.


И тут на глаза мне попался проект Spring Shell, который запускает свой shell в консоли и выполняет команды, написанные в терминах Spring. Давно оценив преимущества командной строки, я сразу взялся за решение своей проблемы. Сказать, что результатом я остался доволен — это преуменьшение. Под катом — абстрактный проект для демонстрации возможностей shell, который навеян моим опытом. Чтобы сделать совсем красиво, я добавил плюшек с еще одним малоизвестным проектом — Spring State Machine. Может показаться, что конечные автоматы — это для седых профессоров, но реальность такова — на них, например, написаны корутины в Kotlin, а всякие Akka их несут в "массы" еще дольше. Я коснусь State Machine совсем поверхностно, только чтобы разогреть аппетит.

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

Как расширить JPA для работы с PostgreSQL

Level of difficultyMedium
Reading time4 min
Views5.9K

Всем привет! Меня зовут Антон, я — архитектор компании ITFB Group. Пережив несколько проектов, на которых встречается стек PostgreSQL с использованием связки PostgreSQL + JPA, мне удалось устранить большое количество проблем, связанных с неоптимальной интеграцией функциональности PostgresSQL в Java-приложения. В этой cтатье мы максимально подробно разберем, как можно настроить JPA для эффективной работы с PostgreSQL. Всем, кому интересна эта тема, добро пожаловать под кат)

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

DBA: находим бесполезные индексы

Reading time12 min
Views21K
Регулярно сталкиваюсь с ситуацией, когда многие разработчики искренне полагают, что индекс в PostgreSQL — это такой швейцарский нож, который универсально помогает с любой проблемой производительности запроса. Достаточно добавить какой-нибудь новый индекс на таблицу или включить поле куда-нибудь в уже существующий, а дальше (магия-магия!) все запросы будут эффективно таким индексом пользоваться.

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

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

Доработки происходят итеративно силами множества распределенных команд, которые бывают разнесены не только в пространстве, но и во времени. И тогда, не зная всей истории развития проекта или особенностей прикладного распределения данных в его БД, можно легко «напортачить» с индексами. Но соображения и проверочные запросы под катом позволяют заранее предсказывать и обнаруживать часть проблем:

  • неиспользуемые индексы
  • префиксные «клоны»
  • timestamp «в середине»
  • индексируемый boolean
  • массивы в индексе
  • NULL-мусор
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments6

Заводим Spring StateMachine

Reading time16 min
Views58K

Вступление


В проектах я встречался с тремя примерами, так или иначе связанными с теорией конечных автоматов

  • Пример 1. Занимательный говнокод код. Занимает уйму времени, на то чтоб понять что происходит. Характерной особенностью воплощения обозначенной теории в коде является довольно лютая свалка, которая местами дико напоминает процедурный код. О том что этот вариант кода лучше не трогать на проекте знает каждый технолог, методолог и продуктолог. Заходят в этот код что-то поправить в случае крайней нужды(когда совсем сломалось), о доработке каких либо фичей речи не идет. Ибо сломать страшно. Второй яркой особенностью, обосабливающий данный тип является наличие могучих таких switch, на весь экран.
    На этот счет даже есть шутеечка:
Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments26

Как начать писать на Java в VSCode

Level of difficultyEasy
Reading time11 min
Views32K

Давайте признаемся: подавляющее большинство пишет Java код, используя JetBrains IntelliJ IDEA Ultimate. Да, это отличная IDE. Для нее есть большое количество расширений, среда очень тесно интегрируется с Spring Framework и знает его особенности.

Тогда зачем пробовать что‑то другое?

Привет, Хабр! Меня зовут Константин Шибков, я Java‑разработчик в CDEK.

В какой‑то мере все Java‑разработчики стали заложниками IDEA. Она так привычна, что нет желания пробовать другое. Ведь всё такое удобное и знакомое за столько лет использования.

Но если у вас есть трудности с доступом к Ultimate версии, а Community вариант не достаточно функционален — самое время попробовать современную альтернативу — Visual Studio Code.

В статье делюсь опытом подготовки среды разработки и изучения вопроса: «А можно ли перейти на VSCode?».

Перейти на VSCode
Total votes 65: ↑64 and ↓1+69
Comments60

Rust — это не «memory safe C»

Level of difficultyMedium
Reading time27 min
Views51K

TL;DR:
— в Rust намного больше достоинств, чем просто скорость и безопасность
— в Rust по умолчанию CDD (compiler-driven development, разработка через компилирование). Это как TDD, только CDD
— Rust — не сложный язык, особенно если не гнаться за максимальной производительностью

В этой статье я бы хотел рассказать:
— почему взгляд на Rust как на "memory safe C" очень сильно сужает область его возможного применения
— почему я смотрю на Rust как на очень удобный в разработке язык высокого уровня, которому просто случайно повезло оказаться невероятно быстрым
— почему разработка на Rust быстрее, чем многие думают
— почему Rust — это один из лучших языков общего назначения

Читать далее
Total votes 155: ↑149 and ↓6+168
Comments555

Индексация заработной платы: почему работодатель обязан повышать тебе зарплату

Level of difficultyEasy
Reading time5 min
Views57K

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

Читать далее
Total votes 98: ↑84 and ↓14+94
Comments287

Почему работодатель хочет, чтобы вы были ИП

Reading time7 min
Views67K

Представим сферическую ситуацию в вакууме. Вы никогда до этого не были предпринимателем, только работали по найму. У вас на руках два оффера. Оба по 100 000 руб. на руки, оба на плюс-минус одинаковых условиях. Офис, 5 дней в неделю по 8 часов. Но один работодатель хочет заключить с вами трудовой договор, а другой предлагает вам оформиться как ИП.

Для начала зададимся вопросом, почему работодатель предлагает оформить отношения с вами как с ИП, а не берёт в штат? Если кратко, то работодателю так проще и дешевле. Почему? Давайте разберёмся.

Читать далее
Total votes 117: ↑105 and ↓12+117
Comments268

CORS для чайников: история возникновения, как устроен и оптимальные методы работы

Reading time17 min
Views433K


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

Если вы давно хотели разобраться в CORS и вас достали постоянные ошибки, добро пожаловать под кат.

Ошибка в консоли вашего браузера


No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://example.com/

Access to fetch at ‘https://example.com’ from origin ‘http://localhost:3000’ has been blocked by CORS policy.


Я уверен, вам уже доводилось видеть похожие сообщения об ошибках в консоли вашего браузера. Если нет, не волнуйтесь, скоро увидите. Все программисты достаточно часто натыкаются на CORS-ошибки. 

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

Но давайте-ка пойдем к истокам…
Читать дальше →
Total votes 41: ↑40 and ↓1+57
Comments14

Современные команды и фичи Git, которыми стоит пользоваться

Level of difficultyEasy
Reading time5 min
Views37K

Мы, разработчики ПО, пользуемся git каждый день, однако большинство из нас применяет только самые основные команды, например, addcommitpush и pull, как будто на дворе по-прежнему 2005 год.

С тех пор в Git появилось множество фич, пользование которыми может сильно упросить вашу жизнь. Так давайте исследуем некоторые из недавно добавленных современных команд git, о которых вам стоит знать.

Читать далее
Total votes 60: ↑58 and ↓2+71
Comments40

Немного о сварочных аппаратах в быту обычного человека и зачем оно надо

Level of difficultyMedium
Reading time10 min
Views33K
Картинка Vwalakte, Freepik

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

Маленький спойлер: далее речь пойдёт только об инверторных сварочных аппаратах для сварки электродом. Иные виды сварки затрагивать не будем.

Причиной этого является высокая прочность получаемого соединения, которое по своим физическим свойствам практически не уступает изначальному металлу: при соблюдении требований к конкретному техпроцессу прочность соединения может достигать порядка 90% от изначального металла, а при применении специальных приёмов — вплоть до 100%.

Однако получение такого соединения является достаточно сложной технической задачей, так как требуется в маленьком объёме быстро и существенно увеличить температуру до расплавления соединяемых деталей и образования так называемой сварочной ванны. Дело осложняется ещё и тем, что металл обладает высокой теплопроводностью, и из зоны нагрева тепло активно перераспределяется по всему объёму соединяемых деталей.
Читать дальше →
Total votes 62: ↑60 and ↓2+80
Comments116
1
23 ...

Information

Rating
5,493-rd
Location
Москва, Москва и Московская обл., Россия
Registered
Activity