Уютное сообщество джавистов
前往频道在 Telegram
Уютное сообщество джавистов - это хорошие материалы,задачки, туториалы для проверки знаний и обратная связь от соратников по изучению. @viktorreh
显示更多2 064
订阅者
无数据24 小时
-77 天
-1930 天
帖子存档
✨Открытый урок по Java «ООП на примере консольных
крестиков-ноликов»
Дата 24 августа в 20:00 мск. Урок приурочен к старту онлайн-курса «Java разработчик».
⚡️На уроке создадим простые консольные крестики-нолики на Java с нуля и увидим, где в подобной задаче можно применить ООП и как будет разделена логика игры между классами.
В результате урока вы:
— Увидите, как пишется код и создаются программы на языке Java
— Узнаете, как использовать ООП при написании приложений
После урока вы сможете продолжить обучение на онлайн-курсе "Java разработчик", который можно приобрести в рассрочку.
👉РЕГИСТРАЦИЯ: https://otus.pw/8MX3/
Какой шаблон проектирования лежит в основе класса java.lang.StringBuffer?
🚀 Уже через две недели состоится старт нового потока онлайн-курса "Java Developer. Professional".
🎉 Самый первый курс в OTUS, 30-й юбилейный запуск!!!🎉
В новом потоке вас ждет много нового, помимо изучения углубленных инструментов работы с Java, мы расскажем вам:
➡️ об особенностях создания безопасного веб-приложения на Java;
➡️ о настройке https в веб приложениях;
➡️ поговорим о написании чистого кода и рефакторинга;
➡️ разберем troubleshooting и debugging в Java приложениях.
⁉️ Какие еще преимущества у нашего курса?
🔵мы учим писать clean code;
🔵 разбираем сложные кейсы, с которыми вы можете столкнуться в работе;
🔵 проводим сode-review также, как это делается в крупных промышленных проектах;
🔵преподаватели с опытом работы в крупных российских и международных компаниях.
🔥 Программа курса всегда актуальна.
➡️ Пройдите вступительный тест и присоединяйтесь к группе: https://otus.pw/wmxV/
Beginning IntelliJ IDEA
Автор: Ted Hagos
Год издания: 2021
#java #книги #en
Скачать книгу
⚡️Программист, расширь свои возможности на бесплатном вебинаре онлайн-курса «Архитектура и шаблоны проектирования» в Отус — «Понятие «Декоратор» в программировании»: регистрация
На бесплатном занятии мы:
— рассмотрим устройство, примеры применения, а также основной принцип паттерна «декоратор» — добавление функциональности к существующему объекту.
— рассмотрим устройство и примеры применения паттерна «посетитель», а также подход с методами расширения.
— поговорим о понятиях «декоратор», «адаптер» и «прокси», сходства и различия.
🔥Продолжить обучение после вебинара по спеццене можно на полном курсе, доступном также в рассрочку.
Нативная интеграция. Информация о продукте www.otus.ru
Java 21: String templates
В сентябре выходит java 21 (LTS) с интересной превью фичей — String templates.
Есть две стратегии работы со строками:
🔸 Конкатенация — собираем строку по частям:
String str = "Hello, " + name + "!";Сюда же относится StringBuilder, метод concat и тд. 🔸 Интерполяция — замена переменных внутри шаблона:
String name = "Jake";
String str = "Hello, ${name}!";
В чистом виде в java такого нет. В Formatter и MessageFormat вместо переменных какие-то %s и %d, а переменные стоят отдельно:
String.format("%d plus %d equals %d", x, y, x + y);
Для сравнения, как это выглядит в Kotlin:
"$x plus $y equals ${x + y}"
Так вот, в java 21 появится интерполяция!
В начале строки нужно добавить STR., а переменные поместить в \{}
int x = 10, y = 20;
String str = STR."\{x} + \{y} = \{x + y}";
// "10 + 20 = 30"
Хорошо работает вместе с текстовыми блоками (многострочные строки в тройных кавычках):
String name = "Joan";
String phone = "555-123";
String json = STR."""
{
"name": "\{name}",
"phone":"\{phone}",
}
""";
Внутри можно вызывать методы и писать блоки кода:
String time = STR."The time is \{
DateTimeFormatter
.ofPattern("HH:mm:ss")
.format(LocalTime.now())
} right now";
//"The time is 09:01:45 right now"
Читаемость текста снижается, но если очень хочется — почему нет.
❓ Зачем нужен префикс STR? Почему нельзя просто добавить новый функционал в строки?
Здесь 2 причины:
1️⃣ Для обратной совместимости
На джаве написано много кода, и наверняка какие-то строки содержат блоки \{}. Будет обидно, если этот код перестанет компилироваться. Поэтому строки для интерполяции нужно явно обозначить
2️⃣ Может быть не только STR😱
Здесь открывается портал в другой мир. По задумке авторов темплейты могут подставлять переменные, валидировать данные и делать преобразования. Например, так:
JSONObject json = JSON."{ id: \{id}}";
или даже так:
ResultSet rs = DB."SELECT * FROM Person WHERE name = \{name}";
Для запросов в БД это, наверное, слишком, а вот для работы с JSON выглядит очень удобно.
Но рано радоваться🙂 Из коробки этого не будет, только набор классов для кастомизации. Будем надеяться, что авторы библиотек возьмут фичу на вооружение.
❓ Как это работает? Выглядит как магия!
В JDK появится статическое поле StringProcessor STR, а строка
String str = STR."\{name}!";
во время компиляции превратится в
StringTemplate template = new StringTemplate(паттерн, параметры);
String str = STR.process(template);
Cинтаксический сахарок и никакого волшебства✨🤖 Сертификация Oracle Java Programmer (OCAJP), как готовиться к экзамену
🔵Узнаем 10 августа в 20:00 мск на открытом уроке онлайн курса «Углублённое изучение Java» от OTUS.
В рамках вебинара мы рассмотрим:
- Прошлое и настоящее сертификации Java
- Что где и как можно и нужно сдавать
- Форма и содержание экзамена
Разберёмся, почему наш курс — лучшая и самая удобная возможность подготовиться к сдаче экзамена, если вы не собираетесь готовиться самостоятельно.
🟠Это отличная возможность перенять опыт преподавателя и посмотреть на процесс обучения изнутри.
Оплата курса возможна любым удобным для вас способом.
➡️ Для участия в вебинаре зарегистрируйтесь: https://otus.pw/es9D/
Нативная интеграция. Информация о продукте www.otus.ruИнкапсуляция
Инкапсуляция в Java является механизмом обёртывания данных (переменных) и кода, работающего с данными (методами), в одно целое. В инкапсуляции переменные класса будут скрыты от других классов и доступ к ним может быть получен только с помощью метода их текущего класса. По-другому это называется скрытием данных.
Для достижения инкапсуляции в Java:
☕️ Объявите переменные класса как private.
☕️ Предоставьте public к методам установки и получения (сеттеру и геттеру) для изменения и просмотра значений переменных.
Преимущества инкапсуляции:
☕️ Поля класса можно сделать только для чтения или только для записи.
☕️ Класс может иметь полный контроль над тем, что хранится в его полях.
erid: LjN8KK8j3
⚡️ Отус приглашает 31 июля в 19:00 мск на бесплатный вебинар «Разработка монолитного приложения со Spring» онлайн-курса «Kotlin Backend Developer. Professional»!
— На занятии мы познакомимся со фреймворком Spring и его принципом работы.
— Рассмотрим особенности разработки Spring приложения на языке Kotlin.
— Разработаем монолитное приложение и напишем пару интеграционных тестов.
— Упакуем наше приложение в Docker, как готовое решение.
✅ В результате вебинара вы:
— узнаем преимущества и недостатки монолитной архитектуры, фреймворка Spring, особенностей разработки со Spring в Kotlin;
— попрактикуемся в разработке работающего монолитного приложения и разместим его в Docker-контейнере.
➡️ Запись на вебинар: https://otus.pw/H8kr/
Реклама. Информация о продукте www.otus.ru
ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963
Если ваше условие состоит в том, чтобы обе части сравнения были истинны, то какой оператор вы будете использовать?
Профессия «Java-разработчик». Курс с нуля до трудоустройства за 10 месяцев.
Освойте язык крупного бизнеса и финансовых технологий и научитесь разрабатывать веб-приложения на фреймворке Spring.
🎁 Мы подготовили для вас спецпредложения, чтобы решиться было проще! Выбирайте один из бонусов: 2 месяца академического отпуска, 1 месяц персональных консультаций с наставником и подготовка к техническому интервью, кешбэк 20 000 ₽ после полного прохождения программы.
Готовы попробовать прямо сейчас? Оставьте заявку, и мы расскажем, как пройти бесплатные курсы профессии!
Чем отличаются и что общего у InputStream, OutputStream, Reader, Writer?
☕️
InputStream и его наследники нужны для получения байтовых данных из разных источников
☕️ OutputStream и его наследники — набор классов, определяющих потоковый байтовый вывод
☕️ Writer и его наследники определяют потоковый вывод символов в юникоде
☕️ Reader и его наследники определяют потоковый ввод символов в юникоде
#вопросы_с_собеседованийХотите усовершенствовать свои навыки Java с помощью Groovy?
Начните с открытого урока "Введение в функциональное программирование в Groovy" от OTUS. Вебинар пройдёт 24 июля в 20:00 и проведет его преподаватель Андрей Поляков, старший разработчик в Unlimint.
Урок приурочен к старту онлайн-курса "Groovy Developer"
🔥На уроке вы:
- познакомитесь с понятием функциональное программирование;
- узнаете в чем отличие функционального программирования от ООП;
- познакомитесь с Closures, контекстом исполнения, областями видимости;
- познакомитесь с использованием Closures как функций.
Урок будет полезен:
Разработчикам, QA, DevOps, которые хотят более глубоко понять, как работают инструменты тестирования
и CI/CD jenkins.
После вебинара полный курс можно приобрести в рассрочку.
⚡️Для участия зарегистрируйтесь: https://otus.pw/sr8u/?/erid=LjN8KSU3j
Как написать компаратор
Компаратор задаёт правило сравнения элементов между собой. Делает он это с помощью метода
compare:
public int compare(T o1, T o2) {…}
Если метод вернул
▫️ число больше нуля — первый элемент больше второго
▫️ 0 — элементы равны
▫️ число меньше нуля — первый меньше второго
Простейшая и популярная реализация — вычесть одно значение из другого:
(o1, o2) -> (int) (o1.getSum() - o2.getSum())❓ Что с этим не так? Я всегда сомневаюсь, что из чего вычитать. Если вы отвечали на опрос дольше одной секунды, значит мы в одном лагере:) Компаратор — совсем не то место, где мозг должен спотыкаться. В Java 8 в интерфейсе
Comparator появился удобный метод:
orders.sort(comparing(Order::getSum))Что классно: ✅ Не надо вспоминать, что из чего вычитать ✅ Легко сделать сравнение в обратном порядке:
comparing(Order::getSum).reversed()✅ Можно учесть null:
nullsFirst(comparing(Order::getSum)) nullLast(…)✅ Удобно сортировать по нескольким полям:
comparing(Order::getSum).thenComparing(Order::getId)Самостоятельно обрабатывать null и писать сложные сортировки очень утомительно. Помню, как с удовольствием удаляла из проекта компараторы на 20 строк после перехода на Java 8😊 Важные нюансы: 1️⃣ comparing* В интерфейсе
Comparator также доступны методы comparingInt, comparingLong и comparingDouble. Используются для полей примитивного типа, чтобы избежать лишнего боксинга. Если в классе Order
Long id → используем comparing(Order::getId)
long id → comparingLong(Order::getId)
Не указывайте тип лишний раз. Для работы с объектами подойдёт обычный comparing
2️⃣ Нетривиальная работа с null*
В обычных методах легко понять, что происходит:
comparing(A).reversed().thenComparing(Б)= отсортировать по полю А в обратном порядке, дубликаты отсортировать по Б Методы
null* выбиваются из этой схемы.
nullsFirst(comparing(Order::getSum))означает, что первыми будут null объекты, а существующие заказы отсортируются по сумме. Этот компаратор работает для такого кода:
orders.add(null); // эти элементы будут впереди
orders.add(new Order(…)); // эти отсортируются по полю sum
Если в списке нет null объектов, но в поле sum возможен null, придётся писать так:
…comparing(Order::getSum, nullsFirst(naturalOrder()));Сравнение по нескольким nullable полям выглядит совсем плохо. К счастью, на практике такие задачи встречаются редко. Ответ на вопрос перед постом:
(o1, o2) -> (int) (o2.getSum() - o1.getSum())Но лучше использовать
comparing(Order::getSum).reversed() ✨🤪 Если вы пишете приложения на Java и выбираете архитектуру между монолитной и микросервисной, то курс «Микросервисы и API на Java и Kotlin» для вас!
Мы убеждены, что разрабатывать микросервисы интереснее, а работать с ними — проще! Почему?
✔️ Легче ловить сбои и приводить приложение в порядок
✔️ Отдельные компоненты можно масштабировать, при этом не придётся переписывать всю систему
✔️ Разные микросервисы — разные технологии разработки
✔️ Можно обновлять приложение по отдельным частям
Все эти темы и многие другие мы разбираем на курсе по микросервисам на Java.
🤑 И чтобы было легче вкатиться в занятия, мы дарим вам два бесплатных демо-урока. На них мы разберём отличия монолита от микросервиса, в каких условиях стоит выбирать ту или иную архитектуру ПО.
Переходите по ссылке и забирайте уроки, эти знания вам точно пригодятся в работе! Бесплатные уроки можно получить тут.
Java For Dummies
Автор: Barry Burd
Год издания: 2022
#java #книги #en
Скачать книгу
❓Хотите создавать бэкенд Java-приложений с использованием Groovy? Тогда приходите 27 июня в 20:00 мск на открытый урок «Shared Libraries в Jenkins» в OTUS. На занятии мы посмотрим, как расширять пайплайны в Jenkins с помощью внешних библиотек и научимся их писать.
Встреча приурочена к запуску онлайн-курса «Groovy Developer» в OTUS.
⚡️Спикер: Андрей Поляков, старший разработчик в Unlimint и преподаватель курса.
На занятии мы рассмотрим:
- Подключение библиотек в пайплайнах
- Структуру shared-libraries
- Особенности подключения и глобальные настройки
- Возможности Groovy при написании shared-библиотек
🔥Вебинар будет полезен DevOps-инженерам и Java-разработчикам, которые хотят научиться создавать и настраивать сборки Java Backend проектов.
Для участия зарегистрируйтесь:
https://otus.pw/uyJY/
Нативная интеграция. Информация о продукте www.otus.ruПриведите примеры структурных шаблонов проектирования.
Адаптер (Adapter) — объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс.
Мост (Bridge) — структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо.
Компоновщик (Composite) — объект, который объединяет в себе объекты, подобные ему самому.
Декоратор (Decorator) — класс, расширяющий функциональность другого класса без использования наследования.
Фасад (Facade) — объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое.
Приспособленец (Flyweight) — это объект, представляющий себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым.
Заместитель (Proxy) — объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него.
#вопросы_с_собеседований
⌨️Хотите узнать, как создаются веб-приложения на языке Java? Приходите 20 июня в 20:00 мск на вебинар, где мы обсудим одну из основных областей применения Java — разработку веб-приложений и посмотрим, как на практике можно создать свое серверное приложение.
Открытый урок «Как работают веб-приложения на Java на практике» пройдет в преддверии старта онлайн-курса «Специализация Java Developer» в OTUS.
Урок будет полезен тем, кто хочет узнать:
— Как работает современный web;
— Что такое и как устроены серверные веб-приложения;
— Как пишут программы на языке Java.
Больше навыков Java-разработки вы сможете получить на курсе, доступном в рассрочку.
👉 Регистрируйтесь на занятие: https://otus.pw/LJlP/
Нативная интеграция. Информация о продукте www.otus.ru
