This media is not supported in your browser
VIEW IN TELEGRAM
Что если бы Java-разработчики могли создавать веб-приложения, не прибегая к помощи JavaScript? 🤔
👉 @BookJava
👉 @BookJava
🔥9👎5👍3
This media is not supported in your browser
VIEW IN TELEGRAM
IntelliJ IDEA EAP обеспечивает навигацию по журналам именно в том месте, где было зарегистрировано сообщение!
https://blog.jetbrains.com/idea/2024/02/intellij-idea-2024-1-eap-6/
👉 @BookJava
https://blog.jetbrains.com/idea/2024/02/intellij-idea-2024-1-eap-6/
👉 @BookJava
👍8🤯2
Подборка Telegram каналов для программистов
Системное администрирование 📌
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux
https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT.
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
https://t.me/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста
1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
Чат программистов📌
https://t.me/developers_ru
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Английский 📌
https://t.me/UchuEnglish Английский с нуля
Математика 📌
https://t.me/Pomatematike Канал по математике
Excel лайфхак📌
https://t.me/Excel_lifehack
Системное администрирование 📌
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux
https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT.
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике
https://t.me/php_lib Библиотека PHP программиста 👨🏼💻👩💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста
1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
Чат программистов📌
https://t.me/developers_ru
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
Английский 📌
https://t.me/UchuEnglish Английский с нуля
Математика 📌
https://t.me/Pomatematike Канал по математике
Excel лайфхак📌
https://t.me/Excel_lifehack
🔥2👍1
ИИ-чатбот + веб-интерфейс менее чем за 20 строк на Java с использованием Spring AI и Vaadin 🤖
А в качестве нативного образа GraalVM, он запускается за 0,1 секунды! ⚡
https://github.com/marcushellberg/spring-ai-web
👉 @BookJava
А в качестве нативного образа GraalVM, он запускается за 0,1 секунды! ⚡
https://github.com/marcushellberg/spring-ai-web
👉 @BookJava
👍4👎1
Forwarded from Книги по Java | Books Java 📚
Pro Spring 6: An In-Depth Guide to the Spring Framework
Автор: Chris Schaefer (2023)
Эта книга выходит далеко за рамки основ: вы узнаете, как использовать новейший Spring Framework 6 для создания различных уровней и частей современных сложных корпоративных Java-прикладных систем, сверху донизу, включая доступ к данным, генерацию SQL с помощью jOOQ, персистентность с помощью Hibernate, транзакции, настройку безопасности, классические уровни web и презентаций и добавление некоторой реактивности.
Скачать
👉 @java_360
Автор: Chris Schaefer (2023)
Эта книга выходит далеко за рамки основ: вы узнаете, как использовать новейший Spring Framework 6 для создания различных уровней и частей современных сложных корпоративных Java-прикладных систем, сверху донизу, включая доступ к данным, генерацию SQL с помощью jOOQ, персистентность с помощью Hibernate, транзакции, настройку безопасности, классические уровни web и презентаций и добавление некоторой реактивности.
Скачать
👉 @java_360
👍5
Абстрактные классы и методы в Java: Объяснение!
Абстракция - это процесс сокрытия деталей реализации и представления пользователю только основных функций. Это позволяет сосредоточиться на том, что делает объект, а не на том, как он это делает.
В Java абстрактные классы и методы являются ключевыми инструментами для реализации абстракции. Абстрактные классы служат шаблонами для создания подклассов, а абстрактные методы определяют поведение этих подклассов.
1. Используйте абстрактные классы для моделирования иерархий связанных классов: Абстрактные классы - отличный способ представить группу связанных классов, имеющих общую функциональность. Создав абстрактный класс, определяющий общие методы и свойства, вы сможете избежать дублирования кода и сделать свой код более модульным и удобным для сопровождения.
2. Используйте абстрактные методы для определения общего поведения: Абстрактные методы полезны, когда вы хотите обеспечить определенное поведение для нескольких подклассов. Определив абстрактный метод в абстрактном классе, вы можете гарантировать, что все подклассы реализуют одно и то же поведение по-своему.
3. Не злоупотребляйте абстрактными классами и методами: Хотя абстрактные классы и методы могут быть мощными инструментами, важно не злоупотреблять ими. В целом, создавать абстрактный класс или метод следует только в том случае, если у вас есть четкая причина для этого. Чрезмерное использование может привести к излишней сложности и усложнить сопровождение кода.
4. Соблюдайте соглашения об именовании: При присвоении имен абстрактным классам и методам важно следовать стандартным соглашениям об именовании в Java. Абстрактные классы следует называть абстрактным существительным (например, "Shape"), а абстрактные методы - глаголом (например, "draw").
5. Документируйте свой код: Как и при работе с любым кодом, важно документировать абстрактные классы и методы, чтобы сделать их более понятными для других разработчиков. Используйте четкие и лаконичные комментарии, чтобы объяснить назначение и поведение каждого класса и метода.
https://www.appsdeveloperblog.com/17-abstract-classes-and-methods-in-java/
👉 @BookJava
Абстракция - это процесс сокрытия деталей реализации и представления пользователю только основных функций. Это позволяет сосредоточиться на том, что делает объект, а не на том, как он это делает.
В Java абстрактные классы и методы являются ключевыми инструментами для реализации абстракции. Абстрактные классы служат шаблонами для создания подклассов, а абстрактные методы определяют поведение этих подклассов.
1. Используйте абстрактные классы для моделирования иерархий связанных классов: Абстрактные классы - отличный способ представить группу связанных классов, имеющих общую функциональность. Создав абстрактный класс, определяющий общие методы и свойства, вы сможете избежать дублирования кода и сделать свой код более модульным и удобным для сопровождения.
2. Используйте абстрактные методы для определения общего поведения: Абстрактные методы полезны, когда вы хотите обеспечить определенное поведение для нескольких подклассов. Определив абстрактный метод в абстрактном классе, вы можете гарантировать, что все подклассы реализуют одно и то же поведение по-своему.
3. Не злоупотребляйте абстрактными классами и методами: Хотя абстрактные классы и методы могут быть мощными инструментами, важно не злоупотреблять ими. В целом, создавать абстрактный класс или метод следует только в том случае, если у вас есть четкая причина для этого. Чрезмерное использование может привести к излишней сложности и усложнить сопровождение кода.
4. Соблюдайте соглашения об именовании: При присвоении имен абстрактным классам и методам важно следовать стандартным соглашениям об именовании в Java. Абстрактные классы следует называть абстрактным существительным (например, "Shape"), а абстрактные методы - глаголом (например, "draw").
5. Документируйте свой код: Как и при работе с любым кодом, важно документировать абстрактные классы и методы, чтобы сделать их более понятными для других разработчиков. Используйте четкие и лаконичные комментарии, чтобы объяснить назначение и поведение каждого класса и метода.
https://www.appsdeveloperblog.com/17-abstract-classes-and-methods-in-java/
👉 @BookJava
Apps Developer Blog
Abstract Classes and Methods in Java: Explained! - Apps Developer Blog
Learn how to use abstract classes and methods in Java to implement abstraction, improve code modularity and maintainability. Check out our tutorial!
👍5
Совет по SpringFramework 💡
Самый простой способ создания динамических SQL-запросов в JPA - это Query By Example. Вы создаете объект-пример, который оборачиваете в пример, а затем передаете его в ваш
хранилищу. JPA создаст WHERE только с теми полями, которые вы задали.
👉 @BookJava
Самый простой способ создания динамических SQL-запросов в JPA - это Query By Example. Вы создаете объект-пример, который оборачиваете в пример, а затем передаете его в ваш
@SpringData
хранилищу. JPA создаст WHERE только с теми полями, которые вы задали.
👉 @BookJava
❤6👍5🤔3😁1
Настройка и мониторинг Java приложений
За годы работы у нас сформировался определенный опыт диагностики и решения проблем, связанные с производительностью наших Java-приложений. В этой статье я опишу причины торможения, с которыми приходилось столкнуться, и возможные пути их исправления. Также опишу основные настройки, которые мы делаем, и ресурсы сервера, которые использует приложение.
Речь пойдет о бизнес-приложениях с одним сервером Java-приложения и одним сервером базы данных PostgreSQL, в каждом из которых одновременно работают от 500 до 2000 сотрудников компании. Приложения разработаны на базе открытой и бесплатной платформы lsFusion (пример приложения), но большинство описанных проблем и настроек не являются специфическими именно для нее.
https://habr.com/ru/companies/lsfusion/articles/741978/
👉@BookJava
За годы работы у нас сформировался определенный опыт диагностики и решения проблем, связанные с производительностью наших Java-приложений. В этой статье я опишу причины торможения, с которыми приходилось столкнуться, и возможные пути их исправления. Также опишу основные настройки, которые мы делаем, и ресурсы сервера, которые использует приложение.
Речь пойдет о бизнес-приложениях с одним сервером Java-приложения и одним сервером базы данных PostgreSQL, в каждом из которых одновременно работают от 500 до 2000 сотрудников компании. Приложения разработаны на базе открытой и бесплатной платформы lsFusion (пример приложения), но большинство описанных проблем и настроек не являются специфическими именно для нее.
https://habr.com/ru/companies/lsfusion/articles/741978/
👉@BookJava
👍3❤1
Можно ли хранить данные в сервлете?
По спецификации наследник интерфейса
Чтобы обеспечить серверам приложений такую возможность, на сервлет накладывается ряд ограничений. Одно из них – сервлет не должен хранить пользовательское состояние в своих полях.
На практике, иногда бывает полезно хранить внутреннюю служебную информацию в сервлете. Тогда, кроме вероятности масштабирования, еще следует помнить о многопоточности сервлетов. Разные запросы обрабатываются в разных тредах, и доступ к полям должен быть синхронизирован.
Для хранения данных между запросами существует специальный объект – сессия (класс
👉@BookJava
По спецификации наследник интерфейса
Servlet
реализует распределяемое (distributable) web-приложение. Значит, при необходимости, очередь поступающих запросов может быть разделена между несколькими экземплярами сервлета, возможно даже размещенными на отдельных серверах внутри кластера.Чтобы обеспечить серверам приложений такую возможность, на сервлет накладывается ряд ограничений. Одно из них – сервлет не должен хранить пользовательское состояние в своих полях.
На практике, иногда бывает полезно хранить внутреннюю служебную информацию в сервлете. Тогда, кроме вероятности масштабирования, еще следует помнить о многопоточности сервлетов. Разные запросы обрабатываются в разных тредах, и доступ к полям должен быть синхронизирован.
Для хранения данных между запросами существует специальный объект – сессия (класс
HttpSession
). Если будет принято решение масштабировать сервер, произойдет репликация сессии. При репликации все актуальные данные сессии переносятся на другие сервера кластера в сериализованном виде. Отсюда другое требование – данные в сессии должны быть сериализуемыми.👉@BookJava
👍7🔥1
Как ограничить upcasting типа-параметра?
Задача: запретить этому методу принимать параметры разных типов:
То есть, нужно разрешить вызывать
Upcasting – приведение к типу-родителю. String → Object, Integer → Number.
Дело в том, что у любых двух классов есть общий предок: как минимум Object. Если вызвать этот метод с параметрами
Использовать
Фокус в том, что на этапе компиляции это невозможно. Объект любого типа всегда является объектом типа-родителя (отношение is a). Это фундаментальное правило ООП, которое невозможно нарушить. К тому же, подобный метод нарушал бы принцип подстановки Лисков.
Единственная возможность добиться желаемого поведения – с помощью getClass() сравнивать классы объектов в рантайме.
👉@BookJava
Задача: запретить этому методу принимать параметры разных типов:
<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
👍5
This media is not supported in your browser
VIEW IN TELEGRAM
GitHub Copilot Chat доступен в JetBrains IDE!
Это огромный прирост производительности для Java-разработчиков, который поможет вам оставаться в потоке во время работы над кодом, исправления ошибок, написания тестов или использования нового API!
https://github.blog/changelog/2024-03-07-github-copilot-chat-general-availability-in-jetbrains-ide/
👉@BookJava
Это огромный прирост производительности для Java-разработчиков, который поможет вам оставаться в потоке во время работы над кодом, исправления ошибок, написания тестов или использования нового API!
https://github.blog/changelog/2024-03-07-github-copilot-chat-general-availability-in-jetbrains-ide/
👉@BookJava
👍6
Ресурс для изучения Spring
Мы хотим, чтобы этот репозиторий стал ресурсом, где люди смогут найти лучшие ресурсы для изучения Spring. Мы ищем лучшие книги, курсы, видео и всё остальное, что вы нашли полезным в изучении Spring.
https://github.com/spring-office-hours/resources-learning-spring
👉@BookJava
Мы хотим, чтобы этот репозиторий стал ресурсом, где люди смогут найти лучшие ресурсы для изучения Spring. Мы ищем лучшие книги, курсы, видео и всё остальное, что вы нашли полезным в изучении Spring.
https://github.com/spring-office-hours/resources-learning-spring
👉@BookJava
👍3🗿1
Media is too big
VIEW IN TELEGRAM
Запускаем 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 проект с 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
👍3❤1
Forwarded from Книги по Java | Books Java 📚
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
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
👍3
Можно ли удалять части API?
Иногда этот вопрос можно встретить в форме задачи. Когда библиотека попадает в пользование широкого круга разработчиков, на её разработку фактически накладывается ограничение обратной совместимости. То есть, если в следующей версии вдруг пропадут используемые классы и их члены, разработчики не захотят обновляться. Тогда развитие библиотеки остановится.
Это масштабная и сложная проблема. В её решении помогает в первую очередь семантическое версионирование и механизм прекращения поддержки (deprecation).
В новой версии библиотеки некоторые компоненты API могут получать аннотацию
Ранее мы уже писали об особенностях использования
Обычно разработчики библиотеки дают пользователю запас времени на миграцию. Они предоставляют Deprecation policy – документ, в котором дают обещание, сколько времени (или версий) после появления
Для поиска в коде использования deprecated компонентов комплект JDK содержит утилиту jdeprscan. Утилита
👉@BookJava
Иногда этот вопрос можно встретить в форме задачи. Когда библиотека попадает в пользование широкого круга разработчиков, на её разработку фактически накладывается ограничение обратной совместимости. То есть, если в следующей версии вдруг пропадут используемые классы и их члены, разработчики не захотят обновляться. Тогда развитие библиотеки остановится.
Это масштабная и сложная проблема. В её решении помогает в первую очередь семантическое версионирование и механизм прекращения поддержки (deprecation).
В новой версии библиотеки некоторые компоненты API могут получать аннотацию
@Deprecated
. Функционально она не делает в программе ничего, но разработчик получит на этапе компиляции предупреждение: компонент устарел и не должен больше использоваться.Ранее мы уже писали об особенностях использования
@Deprecated
. Собираясь удалить компонент API, нужно прежде отметить его @Deprecated(forRemoval=true)
.Обычно разработчики библиотеки дают пользователю запас времени на миграцию. Они предоставляют Deprecation policy – документ, в котором дают обещание, сколько времени (или версий) после появления
@Deprecated
компонент всё еще не будет удален.Для поиска в коде использования deprecated компонентов комплект JDK содержит утилиту jdeprscan. Утилита
javadoc
собирает список устаревших компонентов в отдельную страницу deprecated-list.html
.👉@BookJava
👍6
Всё ещё используете 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
Если да, то вам следовало бы обновить свой код, используя приведенные ниже рекомендации.
Чтобы избежать влияния несанкционированных параметров на ваш бизнес, в ваших веб-сервисах должна быть реализована проверка параметров на уровне контроллера! В большинстве случаев параметры запроса можно разделить на два следующих вида:
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
👍7❤2🗿2
Введение в 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
Всем привет, меня зовут Александр Бобряков. Я техлид в команде МТС Аналитики, занимаюсь 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
👍5❤1
Что такое абстрактные классы и методы в 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
Абстрагирование – это процесс, в ходе которого от пользователя скрываются многие детали реализации, а предоставляются только те детали, которые действительно важны. Так удаётся сфокусироваться на том, что делает объект, а не как он это делает.
В 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
👍8