Обновить
152.09

Java *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Золотой Selenide. Мои лучшие практики по тестированию

Время на прочтение8 мин
Охват и читатели29K

Автор не разделяет понятий чистый автоматизатор или мануальщик, он является Инженером, инженером по тестированию который отвечает за то и другое, являясь истинным QA. Но упор в статье пойдет по практикам автоматизации

Немного теории. Немного код сниппетов.

Развертывание Spring Boot приложения с помощью Nginx, Let's Encrypt и Docker Compose

Время на прочтение7 мин
Охват и читатели30K

Привет, Хабр! В своей первой статье я бы хотел поделиться опытом в развертывании Spring Boot приложения. Но для начала небольшое отступление, которое должно ответить на вопросы зачем и почему.

Недавно я столкнулся с задачей разработать Telegram бота. Казалось бы, что тут сложного? Ну раз надо, то разрабатывай, где тут могут быть сложности? Но вот беда, ранее я не сталкивался с задачей развертывания проекта, тем более было много вопросов касаемо получения SSL сертификата так как Telegram API работает только с HTTPS протоколом. Увы после долгих поисков я так и не нашел статьи, которая ответила бы на все вопросы, поэтому процесс деплоя затянулся из-за того, что пришлось собирать весь материал по кусочкам. Теперь, когда у меня получилось разобраться с этой проблемой, я бы хотел вам рассказать как это сделать, чтобы сэкономить вам время и бонусом 2000 рублей за SSL сертификат.

Читать далее

Как мы внедряли tracing

Время на прочтение6 мин
Охват и читатели17K

Представьте: у вас пара сотен микросервисов, и вдруг всё ломается. А может даже не всё, а, скажем, только одна страница. Если вы хорошо знакомы с системой, то по мониторингам и логам быстро обнаружите проблему и пойдете её решать. Но иногда систему вы видите впервые, и на поиск бага могут часы, или даже дни.

Всем привет, меня зовут Саша Казанцев, я — тимлид команды “Clickme” в hh.ru. В этой статье расскажу о том, как мы внедряли трейсинг. 

Читать далее

Парсинг JSON с помощью Jackson

Время на прочтение10 мин
Охват и читатели155K

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

Эта статья сопровождается примером рабочего кода на GitHub.

Читать далее

Сколько школ во всем мире? Чтение сотен гигабайт OpenStreetMap данных в JVM из Apache Arrow

Время на прочтение6 мин
Охват и читатели4.6K

JVM основная платформа для Big Data решений, таких как Hadoop, Spark, Presto, NiFi но на производительность значительно влияют копирование/сериализация данных "на каждый чих" с последующей сборкой мусора и отсутствие SIMD оптимизаций при работе с данными.

А можно ли в программе на JVM прочитать сотни гигабайт Parquet файлов без Spark/Hadoop? В этом нам поможет библиотека Apache Arrow - проект, которым объединяются десятки решений для работы с Большими Данными. Но для этого даже не обязателен кластер с тысячами ядер и петабайты хранилища! Обработку данных начнем с "золотого стандарта" для open source: PostgreSQL 14 + PostGIS 3.2.0, а продолжим на OpenJDK 11 + Apache Arrow 9.0.0.

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

Читать далее

Spring Boot @ConfigurationProperties и коллекции

Время на прочтение5 мин
Охват и читатели17K

Дано:

Сервис на spring boot(2.6.4) + kotlin(1.5.31) по выгрузке произвольного количества отчётов по крону. Каждый отчет имеет свои настройки. Для конфигурирования списка свойств отчётов используется собственно список. Для инжекта в приложение используется data class с аннотацией @ConfigurationProperties, где одно из свойств - список data class.

Читать далее

Ускоряем разработку

Время на прочтение6 мин
Охват и читатели10K

Любая работа java-программиста опирается на базис, под которым подразумевается не только непосредственно знание самого языка программирования, но также и знание дополнительных компонентов, без которых программирование в чистом виде, становится достаточно затруднительным либо неконкурентоспособным по времени. Именно об этом мы поговорим в этой статье.
Читать дальше →

Как сгенерировать UUID в качестве первичных ключей при помощи Hibernate

Время на прочтение8 мин
Охват и читатели20K

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

Читать далее

JDBC vs JPA

Время на прочтение4 мин
Охват и читатели41K

В мире разработки программного обеспечения очень любят аббревиатуры. И работа с базами данных в Java — не исключение.

Наличие множества вариантов работы с БД может запутать: что же я использую на самом деле? Все используют JPA? Мне тоже стоит его использовать? Но я еще слышал о Spring Data JDBC. А как насчет Spring Data JPA?

В этой статье мы поговорим о JDBC и JPA: истории появления и некоторых особенностях.

Читать далее

Сезон Java всё: итоги и самые полезные статьи

Время на прочтение6 мин
Охват и читатели27K

С 1 июля по 15 августа наш любимый ресурс временно захватили джависты. Развлекались они, а разгребать 46 хардкорных технических текстов нам, читателям Хабра.

Или нет: я (@apoltavcev) попросил участников сезона Java выбрать лучшие статьи. Под катом вас ждут краткие итоги конкурса и посты, которые настоятельно рекомендуются к прочтению.

А если вы пишете не про Java, а на Java — посмотрите вакансии Сбера. Они проспонсировали нашу Java-вечеринку, за что им большое спасибо.

Читать далее

Блеск и нищета IT в Германии

Время на прочтение7 мин
Охват и читатели189K

Уже четыре года я работаю Java разработчиком в небольшой немецкой компании.

В начале прошлого года я увидел на столе одного из моих «кураторов» забытый листок с расчётом заработной платы за месяц. Конечно же, я не мог в него не посмотреть. Сумма, которую я увидел у Нильса, меня удивила. Зарплата брутто: 3300€ в месяц. Живет один, жены нет, детей нет. Значит на руки у него выходит примерно 2130€ (~130000 рублей по курсу на 01.09.2022).

Можете себе представить? Мой куратор, урожденный немец, Senior Developer, прекрасно говорящий на английском, с опытом работы разработчиком более пятнадцати лет получает в Германии 3300€ в месяц. А я – Middle Java разработчик с немецким B2 и английским B1 на испытательный срок получил сразу 3500€! Сейчас моя мой зарплата 4000€ в месяц.

Многие мне не поверили. Некоторые не верят даже в мои 4000€ (слишком мало), не говоря уже про зарплату Нильса. Откуда такая мизерная зарплата для столь высококвалифицированного работника? Ведь в представлении большинства наших соотечественников все разработчики в Германии деньги просто лопатой гребут. Особенно, если они работают в финансовой сфере. Цифры должны по-любому начинаться от 6000€ в месяц. Какие 3300???

Вот и levels.fyi (на КДПВ) говорит, что медианная зарплата разработчика в Германии 83160€ в год (6930€ в месяц)

Выходит, что Зарплата Нильса ниже нижнего предела (такого столбца даже нет на этом графике). Так какая же в реальности зарплата у разработчиков в Германии?

И почему Нильс получает так мало?

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

Время на прочтение53 мин
Охват и читатели263K


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


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

Читать дальше →

Под капотом у Клуба инновационных решений

Время на прочтение10 мин
Охват и читатели2.3K

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

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

Читать далее

Ближайшие события

Note&Noty — первое приложение на Android

Время на прочтение7 мин
Охват и читатели6.7K

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

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

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

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

Читать далее

rate limiter (sliding window)

Время на прочтение2 мин
Охват и читатели13K

Наверняка многие бекенд программисты сталкивались с задачей ограничением запросов к некоторому источнику данных. Существует множество решений этой проблемы:

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

2) не париться с limiter и анализировать ответ от внешнего источника данных и на основе его ответов, принимать решение когда и сколько запросов можно отправить (но такие ответы есть не у каждого сервиса и существует вероятность, что будут отправлены лишние запросы, что может привести к бану)

3) хранить историю запросов локально, но использовать алгоритм leaked bucket, но это не позволяет накидать несколько запросов и ждать

4) хранить историю запросов локально, но использовать алгоритм sliding window, можно накидать запросов и ждать какое-то известное время

О реализации sliding window для java пойдет речь в этой статье.

Читать далее

Какими должны быть курсы по программированию

Время на прочтение16 мин
Охват и читатели4.6K

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

Читать далее

Практические примеры использования Stream API

Время на прочтение9 мин
Охват и читатели22K

Всем привет! Решил написать статью с практическими примерами использования Stream API. В данной статье не будет теории - только хардкор и практические примеры. Поехали!

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

Для тестирования буду использовать Postman.

В проекте есть три сущности с которыми мы будем работать: Client, Product и Booking. Связи между ними можно посмотреть на следующей картинке.

Читать далее

Введение в DbChange JUnit расширение

Время на прочтение18 мин
Охват и читатели5.9K

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

Читать далее

Почему после 25+ лет в профессии и десятка-другого языков я бы рекомендовал начинать с Java

Время на прочтение8 мин
Охват и читатели12K

Когда-то в мире был только Си. Или Бэйсик. Или Паскаль. Это если не считать ассемблер для КР580ВМ. И хотя в книгах можно было найти упоминание ещё и о Фортране, но уже тогда, вместе с упоминаниями, были и предостережения о не самом удачном выборе, если бы вам вдруг захотелось писать на этом языке. Так выглядел мир глазами школьника из СССР.

Начинать тогда предлагалось с Бэйсика. Журнал "Наука и жизнь" так прямо и указывал. А заодно предлагал серию статей, заменявших вводный курс программирования начинающим хакерам. Была, конечно, ещё и "Техника молодёжи" с её занимательно составленным введением в программирование, но только на программируемом калькуляторе. Сегодня, наверное, сложно себе представить, как можно было увлечься каким-то программируемым калькулятором, ведь все с детства привыкли к айфонам с андроидами, но в те стародавние времена, когда книг с фантастикой в местной библиотеке было мало, школьники как некое чудо воспринимали коротенькие фантастические рассказы в "Технике молодёжи", сопровождавшиеся показом, как можно самостоятельно рассчитать все манёвры главного героя около Луны и летавшей где-то неподалёку окололунной станции.

Так мы входили в АйТи. Или в IT? Ну тогда мы даже аббревиатуры такой не знали. А потом пришлось взрослеть.

Читать далее

Что означает I в ACID и как это можно использовать

Время на прочтение8 мин
Охват и читатели6.4K

Пройдя много собеседований, выяснилось, что довольно приличная часть собеседующих, спрашивавших или как-то затрагивавших тему транзакций и их работы, не знают как работают транзакции и что означает для разработчика термин изоляция. Вплоть до архитектора в одной очень большой российской компании, для которого выводы, использованные мною для формулирования решения при прохождении архитектурной секции оказались чем-то вроде бреда. Пока готовится вторая статья (Миллиард абитуриентов МИРЭА 2), можно отвлечься и разобрать тему, продемонстрировать разработчикам что означает для них I в ACID.

Попробовать заблокировать запись

Вклад авторов