♨️ Хочешь выйти на новый профессиональный уровень джавист?
- Осваивай Spring!
Тест на знание языка Java
— Ответь на 21 вопрос и проверь, насколько хорошо nы знаешь язык Java и готовы освоить Spring. Сможешь сдать — пройдёшь на продвинутый онлайн-курс "Разработчик на Spring" Framework со скидкой!
👉 ПРОЙТИ ТЕСТ ОНЛАЙН-КУРСА "Разработчик на Spring Framework": https://vk.cc/cvxr0M
🎫 Курс можно приобрести в рассрочкуРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
У Тинькофф открылась стипендиальная программа для студентов на 2024 год!
В отборе могут участвовать студенты бакалавриата, специалитета и магистратуры (кроме выпускного курса) из всех городов и ВУЗов.
Стипендия выдаётся на один учебный год и составляет 25 000 ₽ в месяц.
Кроме этого:
— доступ к лекциям;
— общение с менторами;
— отложенный оффер на стажировку или работу в Тинькофф.
Более подробная информация и форма подачи заявки 👉 по ссылке
Переходите и подавайте заявку на одну из крупнейших в стране частных стипендий для студентов!
erid:2VtzqxRtN4k
Реклама. АО "Тинькофф Банк", ИНН 7710140679, лицензия ЦБ РФ № 2673
Разработка высоконагруженного игрового WebSocket сервера на Java, Netty с поддержкой BattleRoyale/Matchmaking
В этой публикации попробую пролить свет на детали разработки мультиплеера, а именно - разработки игрового websocket-tcp сервера на Netty.
https://habr.com/ru/articles/774322/
👉@BookJava
Какая разница между @Controller и @RestController?
Controller – это один из стереотипов Spring Framework. Компоненты такого типа обычно занимаются обработкой сетевых запросов. Контроллер состоит из набора методов-обработчиков, помеченных аннотацией @RequestMapping
.
Ответ на запрос можно сформировать разными способами: например просто вернуть из обработчика строку с именем jsp-файла, или же вернуть ResponseBodyEmitter, который будет асинхронно заполняться данными позже. Все возможные варианты перечислены в документации.
Большинство современных API реализуется по архитектуре REST. В ней каждая сущность доступна под собственным URI. В методе-обработчике возвращается экземпляр класса этой сущности, который преобразуется в ответ сервера одним из HttpMessageConverter
-ов. Например, в JSON его превратит MappingJackson2HttpMessageConverter
. Чтобы использовать этот способ ответа, метод, или весь контроллер, должен иметь аннотацию @ResponseBody
.@RestController
– это просто сокращенная запись для @Controller
+ @ResponseBody
.
👉@BookJava
🔥 Какие актуальные технологии нужно знать для разработки на Spring?
🎙 Расскажет Александр Оруджев — Senior Software Engineer. Встречаемся на бесплатном практическом уроке от OTUS, где вы вместе с опытным экспертом разберете:
- паттерны Controller, Service и Repository;
- какую пользу они могут принести;
- особенности использования данных шаблонов в Spring.
📅 Занятие пройдёт 20 марта в 20:00 мск и будет приурочено к старту курса «Разработчик на Spring Framework». Доступна рассрочка на обучение!
👉 Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://vk.cc/cvrYLeРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Всё ещё используете If/else валидацию в Spring 6.0+ / SpringBoot 3.0+?
Если да, то вам следовало бы обновить свой код, используя приведенные ниже рекомендации.
Чтобы избежать влияния несанкционированных параметров на ваш бизнес, в ваших веб-сервисах должна быть реализована проверка параметров на уровне контроллера! В большинстве случаев параметры запроса можно разделить на два следующих вида:
POST и PUT-запросы, использующие requestBody для передачи параметров.
GET-запросы, использующие requestParam/PathVariable для передачи параметров.
https://habr.com/ru/companies/otus/articles/799987/
original https://medium.com/javarevisited/still-use-if-else-perform-validation-in-spring-6-0-springboot-3-0-4e5e0936dec4
👉@BookJava
Можно ли удалять части API?
Иногда этот вопрос можно встретить в форме задачи. Когда библиотека попадает в пользование широкого круга разработчиков, на её разработку фактически накладывается ограничение обратной совместимости. То есть, если в следующей версии вдруг пропадут используемые классы и их члены, разработчики не захотят обновляться. Тогда развитие библиотеки остановится.
Это масштабная и сложная проблема. В её решении помогает в первую очередь семантическое версионирование и механизм прекращения поддержки (deprecation).
В новой версии библиотеки некоторые компоненты API могут получать аннотацию @Deprecated
. Функционально она не делает в программе ничего, но разработчик получит на этапе компиляции предупреждение: компонент устарел и не должен больше использоваться.
Ранее мы уже писали об особенностях использования @Deprecated
. Собираясь удалить компонент API, нужно прежде отметить его @Deprecated(forRemoval=true)
.
Обычно разработчики библиотеки дают пользователю запас времени на миграцию. Они предоставляют Deprecation policy – документ, в котором дают обещание, сколько времени (или версий) после появления @Deprecated
компонент всё еще не будет удален.
Для поиска в коде использования deprecated компонентов комплект JDK содержит утилиту jdeprscan. Утилита javadoc
собирает список устаревших компонентов в отдельную страницу deprecated-list.html
.
👉@BookJava
⚡️ Тест по Java от OTUS
Проверь насколько хорошо ты знаешь Java и готов освоить Spring!
Ответишь — пройдешь на продвинутый курс "Разработчик на Spring Framework" от OTUS по специальной цене.
👉 ПРОЙТИ ТЕСТ: https://vk.cc/cvmvse
🎫 Курс можно приобрести в рассрочкуРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Ресурс для изучения Spring
Мы хотим, чтобы этот репозиторий стал ресурсом, где люди смогут найти лучшие ресурсы для изучения Spring. Мы ищем лучшие книги, курсы, видео и всё остальное, что вы нашли полезным в изучении Spring.
https://github.com/spring-office-hours/resources-learning-spring
👉@BookJava
GitHub Copilot Chat доступен в JetBrains IDE!
Это огромный прирост производительности для Java-разработчиков, который поможет вам оставаться в потоке во время работы над кодом, исправления ошибок, написания тестов или использования нового API!
https://github.blog/changelog/2024-03-07-github-copilot-chat-general-availability-in-jetbrains-ide/
👉@BookJava
Можно ли хранить данные в сервлете?
По спецификации наследник интерфейса Servlet
реализует распределяемое (distributable) web-приложение. Значит, при необходимости, очередь поступающих запросов может быть разделена между несколькими экземплярами сервлета, возможно даже размещенными на отдельных серверах внутри кластера.
Чтобы обеспечить серверам приложений такую возможность, на сервлет накладывается ряд ограничений. Одно из них – сервлет не должен хранить пользовательское состояние в своих полях.
На практике, иногда бывает полезно хранить внутреннюю служебную информацию в сервлете. Тогда, кроме вероятности масштабирования, еще следует помнить о многопоточности сервлетов. Разные запросы обрабатываются в разных тредах, и доступ к полям должен быть синхронизирован.
Для хранения данных между запросами существует специальный объект – сессия (класс HttpSession
). Если будет принято решение масштабировать сервер, произойдет репликация сессии. При репликации все актуальные данные сессии переносятся на другие сервера кластера в сериализованном виде. Отсюда другое требование – данные в сессии должны быть сериализуемыми.
👉@BookJava
🚀 Как ускорить разработку приложений на Java?
Узнайте на бесплатном практическом уроке «JHipster» от OTUS, где вы вместе с опытным экспертом:
- поговорите о JHipster и почему эта тема актуальна;
- затронете Rapid Application Development;
- рассмотрите примеры использования.
Занятие пройдёт 13 марта в 20:00 мск и будет приурочено к старту курса «Разработчик на Spring Framework». Доступна рассрочка на обучение!
➡️ Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://vk.cc/cvaObHРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Абстрактные классы и методы в Java: Объяснение!
Абстракция - это процесс сокрытия деталей реализации и представления пользователю только основных функций. Это позволяет сосредоточиться на том, что делает объект, а не на том, как он это делает.
В Java абстрактные классы и методы являются ключевыми инструментами для реализации абстракции. Абстрактные классы служат шаблонами для создания подклассов, а абстрактные методы определяют поведение этих подклассов.
1. Используйте абстрактные классы для моделирования иерархий связанных классов: Абстрактные классы - отличный способ представить группу связанных классов, имеющих общую функциональность. Создав абстрактный класс, определяющий общие методы и свойства, вы сможете избежать дублирования кода и сделать свой код более модульным и удобным для сопровождения.
2. Используйте абстрактные методы для определения общего поведения: Абстрактные методы полезны, когда вы хотите обеспечить определенное поведение для нескольких подклассов. Определив абстрактный метод в абстрактном классе, вы можете гарантировать, что все подклассы реализуют одно и то же поведение по-своему.
3. Не злоупотребляйте абстрактными классами и методами: Хотя абстрактные классы и методы могут быть мощными инструментами, важно не злоупотреблять ими. В целом, создавать абстрактный класс или метод следует только в том случае, если у вас есть четкая причина для этого. Чрезмерное использование может привести к излишней сложности и усложнить сопровождение кода.
4. Соблюдайте соглашения об именовании: При присвоении имен абстрактным классам и методам важно следовать стандартным соглашениям об именовании в Java. Абстрактные классы следует называть абстрактным существительным (например, "Shape"), а абстрактные методы - глаголом (например, "draw").
5. Документируйте свой код: Как и при работе с любым кодом, важно документировать абстрактные классы и методы, чтобы сделать их более понятными для других разработчиков. Используйте четкие и лаконичные комментарии, чтобы объяснить назначение и поведение каждого класса и метода.
https://www.appsdeveloperblog.com/17-abstract-classes-and-methods-in-java/
👉 @BookJava
ИИ-чатбот + веб-интерфейс менее чем за 20 строк на Java с использованием Spring AI и Vaadin 🤖
А в качестве нативного образа GraalVM, он запускается за 0,1 секунды! ⚡
https://github.com/marcushellberg/spring-ai-web
👉 @BookJava
Совет по SpringFramework 💡
В SpringFramework есть класс DataSize
, который может помочь вам с преобразованием между единицами размера от байтов до терабайтов. Сумма должна быть типа long. Дробные числа не поддерживаются.
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/unit/DataSize.html
👉@BookJava
Какие есть преимущества у массива перед коллекцией?
Для хранения ссылочных типов массив подходит хуже чем ArrayList
. В основе реализации коллекции лежит такой же массив, поэтому эффективность будет той же самой. Однако, вам придется самостоятельно реализовывать логику управления хранилищем: например, увеличение массива при переполнении. А значит, будет больше шансов на ошибку.
Если использовать массивы вместо коллекций для примитивов, можно получить выигрыш по эффективности. Коллекции – generic-типы, из-за этого простые значения хранятся в них в форме ссылочных типов-оберток.
1. Autoboxing выделяет память под новый объект, это дорогая операция;
2. Кроме данных, Object
занимает дополнительную память под метаинформацию;
3. Ячейки массива лежат близко в оперативной памяти, это увеличивает шансы попадания в кэш процессора.
С другой стороны, для массива всё так же нужно написать больше кода, он сложнее. Поэтому замена листов на массивы обычно считается излишней микрооптимизацией.
Когда сэкономить всё-таки хочется, стоит выбрать одну из множества готовых библиотек не-generic реализаций коллекций. Списки примитивов можно найти в Eclipse Collections. В Android есть HashMap
с целочисленными ключами – SparseArray.
👉@BookJava
🔥 Это база с 1700 вопросами с собеседований на Java разработчика. Фишка в том, что просчитана вероятность с которой вопрос буден задан и есть примеры ответов. Теперь можно легко получить оффер, подготовившись к самым популярным вопросам 😏
Читать полностью…Что такое абстрактные классы и методы в Java
Абстрагирование – это процесс, в ходе которого от пользователя скрываются многие детали реализации, а предоставляются только те детали, которые действительно важны. Так удаётся сфокусироваться на том, что делает объект, а не как он это делает.
В Java абстрактные классы и методы – это основные инструменты для реализации абстракций. Абстрактные классы служат шаблонами для создания субклассов, а абстрактные методы можно сравнить с чертежами, описывающими поведение этих субклассов.
Если вы новичок в Java или хотите освежить знания о том, чем отличаются абстрактные классы или интерфейсы, то можете почитать руководство и на эту тему: Difference Between Interface and Abstract class in Java.
Rus https://habr.com/ru/companies/piter/articles/738508/
Eng https://www.appsdeveloperblog.com/17-abstract-classes-and-methods-in-java/
👉@BookJava
Введение в Apache Flink: осваиваем фреймворк на реальных примерах
Всем привет, меня зовут Александр Бобряков. Я техлид в команде МТС Аналитики, занимаюсь Real-Time обработкой данных. Недавно мы начали использовать фреймворк Apache Flink. Эту технологию выбрали, так как она (в отличие от Apache Spark) относится к true-стримингу и позволяет строить обработку данных с минимальной задержкой. В качестве DI-фреймворка выбрали привычный нам Spring Framework.
Наша команда использует разные виды тестирования: Unit, интеграционное, E2E, ручное, автоматизационное, нагрузочное. Этой теме будет уделено особое внимание. Я расскажу, какие подходы и паттерны помогут быть уверенными в качестве того, что вы разработали.
Эти знания будут полезны любому Java-разработчику, знакомому со Spring. А начинающие Flink-специалисты найдут здесь примеры стандартных ошибок и пути их решения. Обратите внимание, что эти материалы писались, когда актуальной версией Flink была 1.17. В конце октября вышла версия 1.18, и она может отличаться некоторыми нюансами.
https://habr.com/ru/companies/ru_mts/articles/772898/
👉@BookJava
👩💻 Как собрать дамп памяти в Eclipse Memory Analyzer и провести экспресс анализ OutOfMememory — практический урок для разработчиков и тестировщиков на Java
🎙Спикер Александр Царев — Tech Lead в Сбере и кандидат технических наук.
На вебинаре вы:
- узнаете, что такое дамп памяти, как его собрать и какие инструменты существуют для этих целей;
- познакомитесь с инструментом Eclipse Memory Analyzer, с помощью которого можно исследовать дампы памяти;
- получите ответы на все свои вопросы.
📢📢 Занятие пройдёт 19 марта в 20:00 мск и будет приурочено к старту курса «Java Developer. Advanced». Доступна рассрочка на обучение!
➡️ Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://vk.cc/cvq70hРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Android Studio 4.2 Development Essentials
Neil Smyth (2021)
Beginning with the basics, this book provides an outline of the steps necessary to set up an Android development and testing environment. An overview of Android Studio is included covering areas such as tool windows, the code editor and the Layout Editor tool. An introduction to the architecture of Android is followed by an in-depth look at the design of Android applications and user interfaces using the Android Studio environment.
Скачать
👉 @java_360
Запускаем WebSocket сервер на базе Jetty, без Spring
Иногда хочется не целый каравай, а просто хлеб с маслом.
Вот и мне понадобился простой java проект с socket-сервером, без необходимости тащить спринг.
00:00 Старт
00:05 Новый проект
01:04 Jetty dependency
01:54 App
02:14 Server
04:18 WebSocketContainer
04:58 @ WebSocket annotations
07:50 DO NOT COPY A CODE! ))
09:12 server.start()
09:56 @ OnWebSocketError ))
11:21 Done
12:04 Like & Subscribe
GitHub
Источник
👉@BookJava
Реально ли с нуля создать приложение без опыта в программировании?
Да! 🤩
На бесплатном курсе Нетологии «Основы разработки на Java» вы за 4 занятия познакомитесь с основами синтаксиса Java, одного из самых популярных языков программирования, и напишете на нём свой первый код.
Вас ждёт много практики:
☑️настроите Java и создадите консольное приложение для загрузки фото с сайта NASA;
☑️интегрируете это приложение в Telegram-бота;
☑️запустите приложение в облаке и создадите хранилище данных.
Курс стартует 14 марта. Регистрируйтесь, чтобы получить представление об устройстве Java и понять, подходит ли вам профессия разработчика
Реклама. ООО "Нетология". Erid LatgBjiNQ
Как ограничить upcasting типа-параметра?
Задача: запретить этому методу принимать параметры разных типов:<T> void pair(T a, T b) {}
То есть, нужно разрешить вызывать pair(Foo, Foo)
, но запретить pair(Foo, Bar)
.
Upcasting – приведение к типу-родителю. String → Object, Integer → Number.
Дело в том, что у любых двух классов есть общий предок: как минимум Object. Если вызвать этот метод с параметрами String
и Boolean
– согласно правилам вычисления типа-границы, параметр T будет стерт в Object.
Использовать super
тоже не поможет: для этого нужно знать заранее, какой именно тип будет передаваться.
Фокус в том, что на этапе компиляции это невозможно. Объект любого типа всегда является объектом типа-родителя (отношение is a). Это фундаментальное правило ООП, которое невозможно нарушить. К тому же, подобный метод нарушал бы принцип подстановки Лисков.
Единственная возможность добиться желаемого поведения – с помощью getClass() сравнивать классы объектов в рантайме.
👉@BookJava
🤝 Ты хочешь остаться разработчиком среднего уровня или стать сеньором?
Пройди тест по Java от OTUS
Проверь насколько хорошо ты знаешь Java и готов к прокачке!
Ответишь — пройдешь на продвинутый курс "Java Developer. Advanced" от OTUS по специальной цене, а также получишь доступ к записям открытых уроков курса.
👉 ПРОЙТИ ТЕСТ: https://vk.cc/cveYu7
🎫 Курс можно приобрести в рассрочкуРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Настройка и мониторинг Java приложений
За годы работы у нас сформировался определенный опыт диагностики и решения проблем, связанные с производительностью наших Java-приложений. В этой статье я опишу причины торможения, с которыми приходилось столкнуться, и возможные пути их исправления. Также опишу основные настройки, которые мы делаем, и ресурсы сервера, которые использует приложение.
Речь пойдет о бизнес-приложениях с одним сервером Java-приложения и одним сервером базы данных PostgreSQL, в каждом из которых одновременно работают от 500 до 2000 сотрудников компании. Приложения разработаны на базе открытой и бесплатной платформы lsFusion (пример приложения), но большинство описанных проблем и настроек не являются специфическими именно для нее.
https://habr.com/ru/companies/lsfusion/articles/741978/
👉@BookJava
Совет по SpringFramework 💡
Самый простой способ создания динамических SQL-запросов в JPA - это Query By Example. Вы создаете объект-пример, который оборачиваете в пример, а затем передаете его в ваш @SpringData
хранилищу. JPA создаст WHERE только с теми полями, которые вы задали.
👉 @BookJava
Pro Spring 6: An In-Depth Guide to the Spring Framework
Автор: Chris Schaefer (2023)
Эта книга выходит далеко за рамки основ: вы узнаете, как использовать новейший Spring Framework 6 для создания различных уровней и частей современных сложных корпоративных Java-прикладных систем, сверху донизу, включая доступ к данным, генерацию SQL с помощью jOOQ, персистентность с помощью Hibernate, транзакции, настройку безопасности, классические уровни web и презентаций и добавление некоторой реактивности.
Скачать
👉 @java_360
Бесплатный вебинар «Продвинутые аспекты Java collections framework» ☄️
05 марта в 18:00 проведем Бесплатный вебинар «Продвинутые аспекты Java collections framework».
В прямом эфире:
• Разберем тонкости при работе с массивами, списками и мапами
• Расскажем про разницу в производительности основных коллекций, use cases
• Ответим на популярные вопросы с собеседований на позицию Java Middle Developer
Ведущий: Роман Оборин
Опыт программирования на Java — 6 лет
Коммерческий опыт - 10 лет
Вебинар будет полезен Java разработчикам, которые заинтересованы перейти на позицию Middle, повысить уровень знаний Java collections, понять требования к разработчикам, подготовиться к техническому собеседованию.
Регистрация по ссылке:
https://clck.ru/399R3J
💖 Эфир приурочен к старту курса Java Middle Developer. Для забронировавших место на курсе до 19 марта предлагаем скидку 35%, стоимость обучения составит 85 000 руб.
Обсудить индивидуальную программу обучения, записаться на интервью и задать вопрос можно в нашем telegram-боте
Реклама. ООО "Платформа непрерывного обучения" ИНН 7839405924
erid: 2VtzqvQrQhY