Обновить
169.89

Java *

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

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

В Фреймворк DBGridChart добавлено OLAP-приложение "Экспресс_обработка_таблицы.exe ", позволяющее при разработке программ на C++, Java, Visual Basic, F# и на других языках программирования (имеющих средства выполнения из программы готовых приложений из командной строки с параметрами) автоматическое формирование табличных и ленточных форм, форм с диаграммами и графиками с готовым унифицированным многофункциональным интерфейсом пользователя для корректировки баз данных, OLAP-анализу и прогнозированию данных в табличной и в графической формах.

Таким образом, программист при разработке приложения, даже на языке, отличным от C#, может использовать все средства и возможности Фреймворка DFGridChart путем обращения к приложению "Экспресс_обработка_таблицы.exe " с указанием через параметры значения свойствам, например: текст строки подключения к базе данных, текст команды Select, текст строки подстановки. Порядок формирование таких таблиц определяется интерфейсом (меню, кнопки), разрабатываемого программистом для приложения.

Гиперссылка для скачивания Фреймворка "DBGridChart", OLAP-приложения "Экспресс_обработка.exe" и "Экспресс_обработка_таблицы.exe " с исходными текстами, DLL-библиотеками, документацией и с демонстрационными примерами: https://disk.yandex.ru/d/sI1VhBiSPzDp-A

Пример обращения к приложению "Экспресс_обработка_таблицы.exe " при разработке программы на C++

#include <string>

...

// Символ # должен быть указан перед наименованием свойства!// Внутри строковых констант перед символами \ и " нужно указывать символ \
std::string
program = "C:\\Экспресс_обработка_таблицы\\bin\\Debug\\Экспресс_обработка_таблицы .exe", // Местоположение приложения
p1 = "#ConnString=Provider = Microsoft.Jet.OLEDB.4.0;Data Source="C:\\Демонстрационный пример Экспресс обработка таблицы для C++\\Выпуск изделий.mdb", // Строка подключения к базе данных
p2 = "#DBMS = Access", // Тип СУБД, если не указан (p2 не указано), то определяется по строке подключения
p3 = "#Select = SELECT Подразделения.[Код подразделения]@#,Подразделения.[Наименование подразделения]*, Подразделения.[Численность на 2022], Подразделения.[Численность на 2023], Подразделения.[Численность], Подразделения.[Дата формирования], Подразделения.[Код типа подразделения]*, [Типы подразделений].[Наименование типа подразделения], Подразделения.[Действующее] FROM [Типы подразделений] RIGHT JOIN Подразделения~ ON [Типы подразделений].[Код типа подразделения] = Подразделения.[Код типа подразделения] ORDER BY Подразделения.[Наименование подразделения]", // Запрос с возможностью корректировки таблицы Подразделения. Специальные символы при режиме корректировки после имен полей или псевдонимов: ключевое (@), обязательное (*), не корректируемое (#) поле и после имени корректируемой таблицы указывается символ ~, если таблиц несколько во фразе From.
p4 = "#Podstavit_v_kolonki = ктп #-; SELECT [Наименование типа подразделения], [Код типа подразделения] FROM [Типы подразделений] ORDER BY [Наименование типа подразделения]", //Подстановка кода типа подразделения в колонку с именем ктп по наименованию путем выбора мышкой из списка (сформированного указанной командой Select) наименований типов подразделений. Режимы подстановки: только из списка (-), список открывается в текущей ячейке (#).
p5 = "#Flag_Create_SQL_Select = True", // Разрешить (True)/не разрешить (False) использовать конструктор команд SQL (по умолчанию - True и p5 можно не указывать)
p6 = "#Table_№ = 2367", // Уникальный номер (обычно, случайное число) таблицы или запроса для сохранения макета настройки индивидуально для таблицы
parameters = p1 + p2 + p3 + p4 + p5 + p6, // параметры приложения
command = program + " " + parameters; // командная строка
system(command.c_str()); // выполнение приложения, которое формирует табличную форму с многофункциональным унифицированным интерфейсом Фреймворка DBGridChart

Теги:
Всего голосов 16: ↑1 и ↓15-14
Комментарии0

Вклад инженеров Axiom JDK в развитие OpenIDE

На текущий момент среди разработчиков Java в качестве основной среды разработки применяется IntelliJ IDEA. Однако, коммерческая версия этого и других продуктов JetBrains, включая IDE, Code With Me, Upsource, TeamCity и Space, а также техническая поддержка теперь не доступны в России. Это побудило нас на создание продукта OpenIDE с открытым исходным кодом и всей инфраструктурой, размещенной на территории РФ.

Как было анонсировано ранее, OpenIDE создается на базе исходного кода IntelliJ IDEA CE и будет развиваться в рамках некоммерческого партнерства Axiom JDK, «Группы Астра» и Haulmont. В этом посте мы расскажем о вкладе команды Axiom JDK в проект.

Рантайм Axiom JDK будет предоставляться в качестве выбора по умолчанию для разработки на Java/Kotlin в OpenIDE. Дополнительно будет возможна установка Axiom JDK из интерфейса OpenIDE. При этом релизный цикл Axiom JDK синхронизирован с OpenJDK и регулярными обновлениями.

Команда Axiom JDK будет выпускать и поддерживать рантайм, используемый для запуска OpenIDE, с набором улучшений. Это, например, расширенное переопределение классов c помощью DCEVM и поддержка JCEF фреймворка для встраивания браузера на базе Chromium. Также планируется ряд улучшений для рендеринга шрифтов, поддержка режимов HiDPI, что обеспечит лучшее масштабирование интерфейса пользователя. А еще это позволит исправлять специфичные для работы IDE ошибки, исправлений для которых еще нет в OpenJDK.

Несмотря на то, что исходный код IntelliJ IDEA CE открыт, в процессе работы IDEA обращается к серверам JetBrains для обновлений, поддержки маркетплейса плагинов, а также других нужд. Этот функционал сейчас перерабатывается с участием инженеров Axiom JDK, что позволит создать локальную российскую библиотеку плагинов, локализованный (и отключаемый) сбор статистики и механизм обновления OpenIDE.

Наконец, команда Axiom JDK занимается настройкой сборочного конвейера OpenIDE, и со временем произведет анализ всех OSS зависимостей OpenIDE и будет обеспечивать оперативное исправлений уязвимостей в ОSS зависимостях в рамках релизного цикла OpenIDE.

Релиз продукта намечен на март 2025 года.

Axiom JDK — единственный российский разработчик JDK. Инженеры команды стояли у истоков Java в России и развивают платформу более 25 лет.

OpenIDE можно использовать взамен IntelliJ IDEA CE. По данным нашего исследования, 78% Java разработчиков используют IntelliJ IDEA Ultimate, а 47% - работают на Community Edition. Мы хотим предоставить сотням тысяч разработчиков открытый инструмент, не уступающий по удобству привычным IDE, чтобы они могли быстро и эффективно работать.

Читайте также у нас на сайте и у партнеров на хабре.

Теги:
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Обновления января 2025 года в Amvera Cloud

Многие ждали, писали, но нет, мы цены повышать не будем!)

Зато сразу после 1 января праздников, ориентировочно 13—17 января

  1. Выкатим новый фронт. Надеемся, все станет понятнее.

  2. Появятся преднастроенные RabbitMQ и Memcached.

  3. Расширенные алерты и пробы. Можно будет настроить алерты на падение проекта, превышение заданного потребления ОЗУ и CPU и появления определенных ошибок в логах. Дополнительно появятся liveness и readiness пробы.

  4. Мы вводим SLA. Осенью 2024 были инциденты с падением сервисов. Мы готовы нести ответственность за безотказность работы сервиса. Начиная с января 2025, если наша надежность окажется ниже 99,5% в месяц, можно будет претендовать на компенсации с нашей стороны.

SLA действует с 1 января 2025

Amvera Cloud  это облако для простого деплоя приложений через git push. Встроенный CI/CD, бэкапы и мониторинг позволяют развернуть проект тремя командами в IDE и не думать о настойке инфраструктуры. Amvera проще, чем использование VPS или Kubernetes-кластера.

Теги:
Рейтинг0
Комментарии0

Всем привет!

Есть много способов получить данные из БД с помощью JPA:

  1. JPQL

  2. JPQL Native Query

  3. HQL

  4. Spring Data JPA Repository

  5. Criteria API

  6. QueryDSL

  7. ...

Предположим, нам нужно вернуть набор строк. Задать параметры запроса можно по-разному, а итог будет один - List или другая коллекция (Collection) с набором данных.

Верно? Не совсем)
Если посмотреть на список возвращаемых Spring Data JPA данных https://docs.spring.io/spring-data/jpa/reference/repositories/query-return-types-reference.html#appendix.query.return.types то там можно увидеть много чего интересного. В т.ч. Stream. А вот пример его использования: https://vladmihalcea.com/spring-data-jpa-stream/
Аналогично можно вернуть Stream и из обычного JPA - см. метод getResultStream, вот пример: https://thorben-janssen.com/jpa-2-2s-new-stream-method-and-how-you-should-not-use-it/

Зачем это может быть нужно?

Во-первых это просто красиво... Шучу. Если вы используете Stream в бизнес-логике - то кажется логичным использовать их и при обращении к БД.
А во-вторых: главная особенность стриминга - равномерная выборка данных. И в каждый момент данных в обработке будет одна запись.
Рассмотрим кейс, когда нужно обработать на клиенте миллион записей.

Ремарка: если у вас такой кейс - подумайте, нет ли проблем в архитектуре. Данные лучше обрабатывать на сервере СУБД. Если все же проблем нет - продолжим)

Так вот, какие у нас варианты:

  1. вытащить на клиент миллион записей. Запрос к БД будет один, она выдержит, но с неплохой вероятностью можно убить клиент через Out of Memory.

  2. организовать пагинацию, например, вот так: https://www.baeldung.com/spring-data-jpa-iterate-large-result-sets. Данных на клиенте в моменте не много, по размеру страницы, но запросов к БД ... тысячи.

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

К слову, стриминг по БД с JPA аналогичен перемещению курсора по ResultSet в JDBC. С накладными расходами и плюшкам, которые дает сессия JPA, конечно.

И про объем данных на клиенте. Казалось бы - вытаскиваем записи поштучно. Но если не указать fetch size - объем предварительной выборки - для некоторых СУБД Hibernate вытащит на клиента все данные за раз, и мы вернемся к варианту 1 (((

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии2

Объектно-ориентированное программирование и его реализация в JavaScript

Именно так звучит тема нового выпуска нашего открытого курса по JavaScript. В 12 серии вместе с веб-разработчиком Василием Новиковым разберёмся:

  • что такое объектно-ориентированное программирование (ООП) и его функции;

  • как реализовывать ООП на конкретном примере;

  • как применять метод проверки getPrototypeOf.

Больше информации о сериях, а также полезных материалах к ним можно найти на сайте курса JS.

Подписывайтесь на канал AvitoTech в Telegram, там мы рассказываем больше о профессиональном опыте наших инженеров, проектах и работе в Авито, а также анонсируем митапы и статьи.

Теги:
Всего голосов 13: ↑13 и ↓0+13
Комментарии1

Зачастую бизнес‑объекты в информационных системах хранятся в классических реляционных базах данных, где каждому атрибуту объекта соответствует колонка в таблице.

Чтобы изменить такую объектную модель, например, добавить или удалить атрибут, нужно внести изменения в схему базы данных, то есть выполнить DDL‑операцию. Она сопровождается блокировками таблиц и увеличением времени простоя при работе с данными. Кроме того, при увеличении числа атрибутов можно превысить ограничение на количество колонок в таблице. Например, в Postgres их можно создать не более 1600.

Эти проблемы можно устранить, используя хранение данных в формате JSON. Основные преимущества такого подхода:

  • отказ от фиксированной структуры таблиц;

  • гибкость без необходимости изменения схемы.

Обращение к динамическим полям может осложниться при работе с Hibernate до версии 6.2. Более ранние версии не позволяют обращаться к полям внутри JSON на уровне HQL, что ограничивает возможности фильтрации и сортировки. Поэтому оптимальный вариант — использовать Native SQL. Hibernate позволяет регистрировать SQL‑функции, чтобы вызывать их из HQL‑запросов. Пример регистрации такой функции для Postgres приведен ниже:

registerFunction("jsonQuery",
    new SQLFunctionTemplate(StandardBasicTypes.STRING,
        "jsonb_path_query_first(?1, ?2)::varchar"));
  • Первый параметр — колонка в БД, внутри которой хранится JSON, выполняющий запрос.

  • Второй параметр — запрос в виде JSON Path, который позволяет добраться до определенных полей.

Пример структуры JSON и использования на ней SQL-функции в запросе:

{
  "CPU_Brand": "Intel",
  "CPU_Model": "Xeon 8380",
  "RAM_Size_GB": 64
}
SELECT obj.id
FROM userObject obj
WHERE jsonQuery(obj.json, '$.CPU_Brand') = 'Intel'

При работе с более сложными вещами, например, фильтрация объектов с вложенными данными, SQL Server требует применения конструкций CROSS APPLY и openjson.

Теги:
Всего голосов 4: ↑2 и ↓2+2
Комментарии3

Привет, Хабр!

В октябре на конференции Joker мы представили EAP версию Explyt Test, плагина для IntelliJ IDEA Community, который умеет генерировать тесты на базе AI и формальных методов. Мы получили много интересных и, временами, неожиданных комментариев от участников о том, что они ждут от автоматической генерации тестов и способен ли им в этом помочь AI.

Общение с живыми людьми и обратная связь повлияли на то, какая функциональность в итоге была добавлена в первый публичный релиз Explyt Test 2.0:

  • поддержана совместимость с IntelliJ IDEA 2024.3 и K2 для IntelliJ IDEA 2024.2+

  • добавлен AI ассистент Explyt Chat, который умеет объяснять код, находить в нем ошибки, поддерживает вложения и отвечает на любые вопросы пользователя

  • добавлена возможность применять Explyt фиксы не только для сгенерированного Explyt кода, но и для чужого кода

  • добавлена возможность управления выбором примера тестов при генерации и ввода дополнительных промптов

  • добавлен анализ эффективности Ollama моделей: модели низкого качества помечаются как нерекомендуемые (not recommended)

  • оптимизированы алгоритмы сбора контекста приложения, установки зависимостей, разрешения неоднозначных импортов при автоматизированном применении квикфиксов

  • поддержана совместимость с Android Studio Koala и Android Studio Ladybug (часть функциональности)

Генерация тестов:

  1. Генерация Gherkin сценариев и тестов по исходному коду

  2. Генерация дополнительных тестов с учётом существующего покрытия

  3. Исправление тестов: обеспечиваем их компилируемость и корректное выполнение

  4. Управление генерацией: выбор примеров и задание дополнительных инструкций для языковой модели, редактирование сгенерированных сценариев и создание собственных 

  5. Подготовка проекта к генерации тестов: поиск используемых тестовых фреймворков, установка дополнительных зависимостей при необходимости

AI ассистент Explyt Chat:

  1. Получение ответов на произвольные вопросы от языковой модели. Запрос может быть дополнен фрагментами кода проекта

  2. Объяснение работы кода и нюансов его использования. Action: Explain Code

  3. Анализ кода на предмет потенциальных ошибок в реализации. Action: Analyze for Bugs

Пользователи могут обращаться к языковым моделям как через серверы Explyt, так и с использованием собственных API-ключей. Поддерживаются модели от различных провайдеров (OpenAI, DeepSeek и др.), а также возможно использование локальных моделей Ollama.

Скачать плагин можно на сайте, для багрепортов и фичреквестов – GitHub Issues, для новостей и общения – телеграм.

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

Теги:
Всего голосов 13: ↑13 и ↓0+18
Комментарии0

Сегодня я хочу выложить в открытый доступ свою библиотеку на Scala. Библиотека реализует Directed Acyclic Graph (DAG) для выполнения задач внутри одного приложения (на замену Airflow и подобных не претендую :-)) и позволяет определять задачи с зависимостями, выполнять их в правильном порядке и обрабатывать исключения, которые могут возникнуть в процессе выполнения. Библиотека писалась через призму моих личных и профессиональных потребностей, поэтому не претендует на покрытие всех возможных кейсов, встречающихся в разработке вообще.

Use case:

Иногда возникает необходимость выполнять взаимосвязанные задачи/функции/классы в рамках одного приложения, где эти задачи могут быть частично параллелизованы, то есть их можно "собрать" в DAG для более эффективного использования ресурсов и повышения общей производительности. Например при обрабтке/загрузке данных или в event-driven приложении.

Особенности:

  • Управление задачами: Добавление задач с указанными зависимостями.

  • Гибкость: Выполенение всех или только некоторых задач (с сохранением зависимостей)

  • Обработка ошибок: Встроенная обработка ошибок с передачей исключений "наверх" для упрощенного их анализа.

  • Результаты выполнения задач: Возможность получения результата выполнения задач для дальнейшего их использования программным кодом.

Код, документация и инструкция по импорту и использованию доступны на GitHub.

Буду рад любым отзывам и предложениям по улучшению. Также не стесняйтесь задавать вопросы и заводить issue :-)

Теги:
Рейтинг0
Комментарии0

Дорогие разработчики, как вы относитесь к работе в стартапах?

Если был опыт работы в них, то на каких условиях вы соглашались работать? Процент от компании или зп? Может и то и другое?

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

Было бы шикарно, если бы кто-нибудь смог проконсультировать по разработке

Теги:
Рейтинг0
Комментарии8

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

Теги:
Рейтинг0
Комментарии0

Чебурашка

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

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

Погрузившись в себя, я начал обдумывать, как помочь ему в этом сложном и важном деле, да и долг перед ним поджимал (лучше не используйте инвестиции донных дельцов). Долго ли коротко, открыв в очередной раз приложение зелёного банка, я обнаружил новую функцию по снятию денег со своего счёта через авторизацию по QR коду - и тут я увидел решение своего маленького вопросика для больших денег.

Пересылать фото банкомата в секретных чатах? Это не путь настоящего обнальщика.

Схема такая: Сервер для обмена видео по RSTP + Фельдману и Шило по Android телефону, где отправителю денег предаётся видео через эмулирование камеры с камеры получателя.

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

MVP проекта (вход рубль - выход десять лет по 7 части статьи 159 УК РФ)

Теги:
Всего голосов 6: ↑4 и ↓2+5
Комментарии1

Призы для самых ловких – мы подвели итоги конкурса и готовы рассказать результаты

25 сентября у нас был День компании, и этот праздник мы отмечали с хабравчанами – вместе с Хабром собрали игру-раннер с сюрпризами и подарками для самых ловких пользователей. Розыгрыш призов уже закрыт, но игра ещё доступна, если захотите попробовать поиграть – переходите по ссылке

В игре было три карьерные дорожки: изобретательный Java-разработчик, вдумчивый системный аналитик и зоркий QA-тестировщик. Игроки проверяли свою ловкость, обходя препятствия и отвечая на рабочие вопросы по теме выбранной карьеры. Все, кто успел сыграть в период проведения розыгрыша и набрал более 200 очков – получил промокод на сервис Wink и попал в турнирную таблицу. Дальше среди участников таблицы при помощи рандомайзера мы разыграли 30 различных призов лично от нас – по 10 для каждого направления игры.

Имена победителей уже известны. Прикрепляем таблицу: вот ссылка. Если вы нашли свой никнейм – поздравляем, вы уже получаете промокод от Wink! Если напротив вашего никнейма написано «суперприз» – поздравляем ещё больше – вы счастливчик, выигравший отдельный приз. Мы свяжемся со всеми финалистами в личных сообщениях и расскажем, как забрать выигрыш.

Теги:
Всего голосов 8: ↑8 и ↓0+12
Комментарии0

Приглашаем на Java Jam — бесплатный митап ЮMoney для Java-разработчиков 📹

Спикеры из ЮMoney расскажут о своём опыте разработки, а вы сможете задать им все интересующие вопросы.

Темы докладов 👇

🟣 Web Push: как достучаться до пользователей без нативных приложений.
🟣 SonarQube в действии: плагины как ключевой элемент контроля качества в отделе.
🟣 Рефакторинг фискализации: как мы выносили чеки в отдельный сервис.

24 октября, в четверг, в 19:00 (мск) приходите на митап в Санкт-Петербурге или подключайтесь онлайн.

Зарегистрируйтесь, чтобы принять участие. Все подробности и регистрация — на сайте митапа Java Jam. 🔥

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

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

Я вот не понимаю, почему Го преподносится как  post-OOP язык, в то время как это явно пре-ООП язык, чисто императивный. Как Бейсик (который не Вижуал) или Паскаль.

И это явно не прогресс, а регресс в подходе к методологии.

Хотя, очевидно, он выигрывает у языков с управляемой средой, да. Управляемая среда (ВМ) требует слишком много ресурсов для старта и разогрева. А в микросервисах это вообще не нужно.

Теги:
Всего голосов 8: ↑4 и ↓4+2
Комментарии44

«Мидл Java‑разработчик» — до мидла за 6 месяцев

Курс «Мидл Java‑разработчик» от Яндекс Практикума поможет перейти от базовых навыков программирования к глубоким знаниям и практическим умениям, которые отличают новичка от мидл-специалиста. Программа обновляется раз в полгода, поэтому информация всегда актуальная.

Это курс для самостоятельного обучения. График гибкий: вы можете учиться в любое время, главное, закончить модуль в нужный срок и выполнить проект. Всего модулей 3, каждый из них длится 8 недель. Чтобы всё успевать, рекомендуем уделять учёбе 15—20 часов в неделю.

Проекты будут проверять опытные Java-разработчики из крупных компаний. В чате и на онлайн-воркшопах вам будут помогать наставники (практикующие senior разработчики и тимлиды). Они ответят на сложные вопросы и поделятся опытом.

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

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

→ Узнать о курсе подробнее

Теги:
Всего голосов 8: ↑5 и ↓3+4
Комментарии0

Члены Совета по развитию ИТ-сертификации ИТ-специалистов утвердили «Регламент сертификации ИТ-специалистов» и пакет сопутствующих документов. В итоге «Платформа сертификации IBS» была признана соответствующей регламенту сертификации Java-специалистов и системных аналитиков и  получила статус рекомендованной АПКИТ для проведения квалификационных экзаменов.

«На данный момент на российском рынке наблюдается острая нехватка квалифицированных ИТ-специалистов, при этом ежедневно многочисленные курсы выпускают сотни junior, в то время как бизнесу требуются специалисты не ниже middle-уровня. Утверждение регламента сформирует единое понимание того, какой должна быть российская сертификация. А признание соответствия ему нашей платформы позволит специалистам подтвердить свои объективные знания и умения в соответствии с теми критериями, которые были признаны ведущими игроками ИТ-отрасли в России», — директор департамента обучения и развития IBS Владимир Гернер.

👉Подробности👈

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Друзья! Если вы хотите прокачать навыки в сфере Java-разработки, у нас замечательная новость! Теперь у вас есть возможность пройти обучение по отдельным модулям программы «Java-разработчик. Middle Developer».  Вам не обязательно проходить весь курс целиком — выбирайте темы, которые вас интересуют, и погружайтесь в изучение. 

Обучение проходит в формате самоподготовки, что позволяет значительно сократить временные и финансовые затраты.

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

✔️ Java: ООП и функциональная парадигма

✔️ Разработка бизнес-приложений на фреймворке Spring 

✔️ Работа с базами данных в Java

✔️ Архитектура REST

✔️ Вспомогательные инструменты Java-разработчика

✔️ Избранные классы и стандартные библиотеки

✔️ Многопоточность в Java

👉Посмотреть подробную программу «Java-разработчик. Middle Developer» и выбрать модули для изучения 👈

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Всем привет!

Давненько не было постов на канале, что поделать - конец квартала, авральный режим on. Но я вернулся)

Java всегда славилась своим boiler plate кодом. Ремарка - конечно же не только boiler plate, но сейчас про него и про борьбу с ним. Борьба идет, и в Java 16 (а точнее в Java 14 но в режиме preview) появились records, они же записи.
Делаешь вот такое объявление:
public record Point(int x, int y) {}
и получаешь из коробки конструктор, getter, equals(), hashСode() и toString().
Т.е все то, что раньше приходилось писать руками или использовать Lombok. Ага, Lombok. Т.е. он стал не нужен? Не совсем. Если внимательно глянуть на список того, что под капотом делает record, то можно заметить, что там нет setter-а. Т.е. record - это иммутабельный объект и value object. Две записи с одним и тем же набором полей всегда равны. Это не баг, это фича. Маленькое дополнение - record еще меняет классический getter c getXyz на просто xyz(), но это детали. Еще дополнение - вот тут среди прочих фичей Java 17 достаточно интересно о работе с record.

Т.е. получается, что record заменяет @Value из Lombok.

Но не заменяет:

  1. полноценный @Data - изменяемый класс без boiler plate

  2. кейс, когда мы не хотим все сразу getter, toString() ... а хотим только часть этих методов

  3. @Builder - тут проще показать, чем объяснять:
    Person.builder().name("Adam Savage").city("San Francisco").build();

  4. @Log - простое добавление логгера в класс

  5. и наконец @SneakyThrows - если вы не любите checked exception

Теги:
Всего голосов 7: ↑4 и ↓3+5
Комментарии0

Один из плюсов нашей программы «Java-разработчик. Middle Developer» гибридный формат обучения. Мы решили обсудить его плюсы и особенности с одним из авторов и тренеров курса Игорем Судакевичем. 26 сентября проведем прямой эфир «Java Pro: гибридная академия разработчиков»

Поговорим, почему для изучения Java прекрасно походит гибридный формат, и в чем его отличия от обычного вебинарного формата.  А также обсудим, какие скиллы нужно прокачивать, чтобы вырасти в Java-разработчика уровня Middle.

📅 Дата: 26.09.2024

⏰ Время: 18:00-19:00 (Мск)

👨‍🎓  Спикер: Судакевич Игорь — преподаватель международного уровня, более 15 лет работает в IT. Уполномоченный инструктор корпорации Oracle. Магистр компьютерно-информационных технологий. Инструктор платформы Udemy. 

👉 Записаться 👈

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Всем привет!

Расскажу про один поучительный факап из моей практики.

Более 10 лет назад. Стартап. Я на тот момент и СТО, и разработчик в одном лице. Есть задача, в целом понятная. Декомопозирую на микросервисы и подзадачи, начинаю пилить. Дохожу до XML binding - преобразования XML в объекты. Тогда API в основном были XML. Решил погуглить - что есть на рынке. Кроме известного многим JAXB нахожу JiXB. Не известный тогда, тихо умерший сейчас. Читаю описание и нахожу бенчмарк, показывающий что он ... скажем в 1.5 раза быстрее JAXB. Думаю - о, круто, надо брать. Начинаю прикручивать к Spring. Наталкиваюсь на кучу подводных камней - это не работает, документации мало, ошибки не информативные и не гуглятся. В общем убил неделю на прикручивание к проекту одной библиотеки. В итоге все заработало, конечно. А проект не был доведен до работающего состояния и так и не взлетел.

Итоги. До сих пор стыдно за такое решение по следующим причинам:

  1. речь про стартап, т.е. нужно быстро создать работающий прототип, а не исследовать новые технологии

  2. преждевременная оптимизация - данных по требуемому RPS и доступному железу на тот момент у меня не было. Нагрузочное тестирование не проводилось. Стал бы JAXB узким местом - не факт

  3. использовать в промышленной разработке не доказавшие свою зрелость библиотеки - это риск. Очень важны сообщество и работающие без бубна связки, например, Spring+JAXB. А риск должен быть оправдан, а еще должен быть план отката. Не взлетело, сыро - откатываемся на надежный вариант

Теги:
Всего голосов 8: ↑8 и ↓0+12
Комментарии0

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