Обновить
512K+

Java *

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

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

JDBC vs JPA

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

В мире разработки программного обеспечения очень любят аббревиатуры. И работа с базами данных в 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 мин
Охват и читатели291K


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


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

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

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

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

rate limiter (sliding window)

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

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

Всем привет! Решил написать статью с практическими примерами использования 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.

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

Технология NiFi: применение (часть 2)

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

Добрый день, меня зовут Рустам Ахметов, я архитектор ГК Юзтех и интеграционной шины данных UseBus. В предыдущей статье я рассказывал о Kafka и её аналогах, а сегодня хочу рассмотреть NiFi.

Вы узнаете:

Читать далее

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

JSON Web Token (JWT) — пример Java реализации на Spring Boot OAuth2 Resource Server 6.0

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

Доброе время!

Часть 2-я по открытому занятию нового учебного курса: реализация простого JWT через новый Spring Boot OAuth2 Resource Server (первая часть: Spring Boot 3.0 — готовимся заранее). Что такое JWT и зачем, писать здесь не буду - в сети материалов много, начинать знакомство обычно рекомендую с Википедии. А вот хорошая ссылка по реализации JWT+OAuth2. Здесь я привожу Java код, основанный на официальном примере spring-projects - простейшей реализации JWT Login Sample (без refresh token и отдельного авторизационного сервера), "творчески доработанный" и с моими пояснениями. Еще раз - без теории, для тех, кому интересен код актуальной Java реализации. Если это Вы - прошу.

к прочтению.

Spring Boot 3.0 — готовимся заранее

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

Здравствуй, читатель Хабра!
До выхода Spring Boot 3 осталось совсем немного - 3 месяца. Уже появляются статьи -
What’s New, It's time to get ready. Недавно JetBrains выпустила IDEA с поддержка Spring 6 и Spring Boot 3. Самое время потренироваться заранее в миграции. В разработке нового учебного курса я попробовал перевести свой открытый учебный проект Spring Boot 2.x + HATEOAS на Spring Boot 3, шаги и код проекта ниже.

Читать далее

Во что обернулась пересылка MQTT-сообщений в Telegram?

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

Периодически возникает желание получать уведомления, иметь возможность настраивать источник и фильтровать сообщения по темам, и писать как можно меньше кода. Например, присылать себе картинку/цитату/слово дня или дельту по изменениям ордеров на бирже. В результате получился универсальный инструмент - бот и персональное АПИ для отправки сообщений в Telegram.

Читать далее

Миллиард абитуриентов МИРЭА

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

В предыдущей статье, была рассмотрена модель данных, необходимая для хранения информации об абитуриентах. Теперь пришло время показать, как используя реляционные БД можно обрабатывать модифицирующие запросы от миллиарда абитуриентов. А что бы расставить все точки над i, предлагаемая архитектура должна обрабатывать миллион модифицирующий запросов в секунду. Используя реляционные БД, гарантировать, что все возможные комбинации обрабатываются за сутки для миллиарда абитуриентов, каждому из которых предоставляется 20 вариантов! С ростом числа абитуриентов требования по железу должны рости линейно.

Стать абитуриентом МИРЭА

Зачем нужно соединять Java-программу на компьютере и Arduino?

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

Картинка rawpixel

Любой энтузиаст, строящий свои проекты на базе Arduino, рано или поздно сталкивается с необходимостью тем или иным способом обеспечить взаимосвязь этой платы со своим компьютером.

Такой симбиоз даёт возможность как управлять платой с компьютера, так и наоборот — компьютером с платы. Об этом мы и поговорим в этой статье.
Читать дальше →

Технологии NiFi & Kafka: применение (часть 1)

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

Добрый день, меня зовут Рустам Ахметов, я архитектор ГК Юзтех и интеграционной шины данных UseBus. В этой статье я расскажу о нашем опыте разработки продукта и выборе технического стэка. Хочу добавить, что я буду давать лишь поверхностный Helicopter view на продукты и их аналоги.

Из статьи вы узнаете:

Читать далее

Кастомное автоматическое обновление конфигураций клиентов Spring Cloud Config Server. Часть 2: настройка сервера

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

Описывается, как можно инициировать автообновление клиентов Spring Cloud Config Server без использования Spring Cloud Bus или какой-либо иной вспомогательной технологии

Читать далее