Изучаем Java. По вопросам сотрудничества: @seniorvladislav
#вопросы_с_собеседований
Что выведет эта программа?
Ответ:
Программа напечатает “num1 == num2”. Если мы сравниваем две ссылки на объекты с помощью ==, значение всегда будет «false». Но в этом примере переменные num1 и num2 автоупаковываются (autoboxing) из-за Integer-кэширования. Вот почему num1 == num2 возвращает значение «true». Не забудьте, что Integer-кэширование актуально только для значений от -128 до 127.
#вопросы_с_собеседований
Приведите пример, когда какая-либо коллекция выбрасывает UnsupportedOperationException.
В примере возникает ошибка, потому что Collections.emptyList()
возвращает пустой список без возможности добавления элементов.
👩💻 Как эффективно использовать OAuth 2 в Spring-приложениях?
Ждем вас на открытом вебинаре 13 сентября в 20:00 мск.
где мы разберем:
✔️ что такое OAuth 2 и как он работает в Spring-приложениях;
✔️ какие роли и процессы задействованы в фреймворке авторизации;
✔️ его расширения;
✔️ ответы на все возникающие вопросы.
Урок идеально подходит для Java- и Kotlin-разработчиков.
Встречаемся в преддверии старта курса «Разработчик на Spring Framework».
Все участники вебинара получат специальную цену на обучение!
📌 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cAman9Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
➡️ JCTools
JCTools (Java Concurrency Tools) — это библиотека, специализирующаяся на высокопроизводительных структурах данных для многопоточного программирования в Java. Она предоставляет коллекции и утилиты, оптимизированные для работы с низкими задержками и высокой пропускной способностью, что делает её отличным выбором для разработчиков, работающих с системами реального времени или высоконагруженными сервисами.
🗣 JCTools — отличный выбор для тех, кто работает с многопоточностью и хочет повысить производительность своих приложений. Если вам нужно добиться минимальных накладных расходов в многопоточном окружении, JCTools может стать важным компонентом вашего проекта.
🔗 Ссылочка на доку
⚙️ Deadlocks
Взаимная блокировка потоков (дэдлок) бывает по множеству причин, а полностью уберечься от них в Java 8 весьма сложно.
➡️ Зачастую, такое происходит, если один синхронизируемый объект ожидает ресурсов, а они заблокированы другим синхронизированным объектом.
✔️ Чтобы избежать deadlock, можно использовать один из следующих подходов:•
Всегда захватывайте блокировки в одном и том же порядке во всех методах. Например, сначала lock1, затем lock2•
Используйте ReentrantLock с таймаутом вместо synchronized, чтобы избежать бесконечного ожидания.
➡️ Оптимизация производительности через уменьшение количества объектов с использованием intern() для строк
В Java строки неизменяемы, и часто создание большого количества строк, содержащих одинаковые значения, приводит к избыточному использованию памяти.
⚙️ Метод intern()
позволяет сократить количество дубликатов строк, оптимизируя использование памяти, за счет хранения только одной копии каждой уникальной строки в пуле строк.
«Привет, как дела?» — сразу летишь во френдзону
Это будет продолжаться ВЕЧНО, пока не начнешь читать канал ТВОРЧЕСТВО ЧУВСТВ, где узнаешь:
— грамотно общаться с девушками и доводить до секса
— строить прочные отношения, где девушка ласковая и покорная, а ты — лидер
— сформировать базу мужских принципов, которые помогут во всех направлениях в жизни
Главное про качественные отношения тут: t.me/+2PeNv_5pb8djMDdi
👩💻 Как эффективно использовать Java Collections для хранения, извлечения и обработки данных?
Ждем вас на открытом вебинаре 11 сентября в 20:00 мск, где мы разберем:
✔️ обзор структуры коллекций и их основных методов;
✔️ особенности различных реализаций коллекций;
✔️ примеры применения коллекций для решения практических задач.
Урок идеально подходит для тех, кто начинает изучать Java или хочет углубить свои знания.
Встречаемся в преддверии старта курса «Специализация Java-разработчик».
Все участники вебинара получат специальную цену на обучение!
👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cAgVyXРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
➡️ Использование Optional.or для безопасного предоставления альтернативных значенийOptional.or
— метод, представленный в Java 9, позволяет безопасно предоставить альтернативное значение, если исходное значение отсутствует (null).
🗣️ Это полезно для обработки значений, которые могут отсутствовать, без необходимости использовать условные конструкции.
optionalValue
пустое (null), метод or вернет Optional с альтернативным значением "Значение по умолчанию". Это делает код более читаемым и защищает от потенциальных ошибок, связанных с null.
Читать полностью…
➡️ Flyway
Flyway — это популярная библиотека для управления версиями баз данных. Она позволяет легко и надежно управлять миграциями базы данных, сохраняя ее состояние в синхронизации с вашим приложением.
🗣 Flyway — отличный инструмент для автоматизации и упрощения миграций базы данных. Если вы хотите избежать проблем с несогласованностью базы данных, Flyway — ваш выбор.
🔗 Ссылочка на доку
Конвейер для Spring-приложений прямо в IDE
Приглашаем на презентацию нового инструмента от Haulmont — компании, подарившей миру JPA Buddy и другие инструменты разработки, разрабатывающей корпоративное ПО и отказоустойчивые решения.
На встрече разработчики расскажут про Amplicode — набор инструментов для эффективной разработки и развертывания web-приложений на современном стеке технологий. Amplicode учит IDE работать в терминах фреймворка.
🌐 Онлайн в YouTube и на VK Видео
📆 3 сентября, 18:00 (МСК, GMT+3)
В программе:
— Обзорный доклад об Amplicode: история создания инструмента и возможности.
— Время для кода! Демо Amplicode от экспертов — ревью приложения, его доработка, разработка REST API, настройка доступа, деплой и создание админки на React Admin.
— Открытая дискуссия: команда Amplicode и эксперты ответят на вопросы участников.
Ссылку на трансляцию отправим вам на почту перед началом вебинара.
Регистрация — на сайте.
Реклама. ООО «ХОУЛМОНТ САМАРА». ИНН 6316134393
❔ Как запустить продукт и не прогореть?
⌨️ Ждем вас на открытом вебинаре 3 сентября в 19:00 мск, где мы разберем:
- как исследовать аудиторию и спрогнозировать спрос;
- как создать MVP и определить, когда идти в масштаб;
- как правильно тестировать продукт «в бою» и находить недочёты;
- как кастдев (опрос и интервью пользователей) помогает выявить сильные и слабые стороны ваших продуктов.
Урок подходит для проджект-менеджеров, управленцев в IT и продакт-менеджеров, которые хотят избежать ошибок при запуске продукта и добиться успеха. Вы получите пошаговый план действий, который поможет вам уверенно запустить и развивать свой продукт.
Встречаемся в преддверии старта курса «Product Manager IT-проектов». Все участники вебинара получат специальную цену на обучение!
➡️ Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cA0cFMРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔴 18 сентября состоится крупнейшая конференция по трафику и продажам в Телеге
1⃣2⃣3⃣4⃣5⃣
Вам однозначно стоит быть, если:
— Работаете с трафиком из Telegram Ads или посевов;
— Продаете свои услуги через Telegram;
— Еще не зарабатываете в TG, но планируете;
📣 Вот лишь некоторые из спикеров:
— Алексей Соловьев (Event and Community Manager at TON)
— Дмитрий Форман (Digital-Директор Самолет)
— Марат Шайхетдинов (Founder TgConf & Clickise)
— Ирина Нумизматка (Автор крупнейшего блога про Telegram Ads)
— Глеб Яскевич (Директор по маркетингу Getcourse)
— Артур Халиуллин (Сеть каналов на 1млн+ подписчиков)
— Влад Силантьев (С нуля дошел до 63 проектов в Telegram Ads)
— Павел Калюканов (Product Manager TgStat)
и множество других не менее интересных спикеров
🕔 Дата и время: 18 сентября в 9:00
📍 Место проведения: Main Stage, Москва
А в заключении мероприятия пройдет Aftertparty для VIP-участников и спикеров с хедлайнером, которого все знают!
🎟 Приобрести билет до повышения цен
Промокод telegapart
дает скидку 10% на все билеты
Динамическое создание и выполнение метода в Java с использованием ASM
ASM позволяет динамически генерировать байт-код в Java. В этом примере создается класс с простым методом hello()
, который выводит сообщение в консоль.•
Создается класс HelloClass с методом hello()
.•
Метод hello()
динамически генерируется и выводит строку "Hello, ASM!" в консоль.
⚙️ Динамическое изменение поведения объектов с помощью InvocationHandler и Proxy
В Java можно динамически изменять поведение объектов, используя InvocationHandler
и Proxy
.
🗣️ Это полезно для создания прокси-объектов, которые могут оборачивать существующие объекты и добавлять новые функции, такие как логирование, кеширование или контроль доступа.
•
InvocationHandler позволяет перехватывать вызовы методов у прокси-объекта и добавлять дополнительное поведение, такое как логирование.•
Использование Proxy позволяет динамически создавать новый объект, который ведет себя как реальный объект, но с добавленным поведением.•
Этот подход позволяет добавлять новое поведение к существующим объектам без изменения их кода, что делает его мощным инструментом для реализации аспектно-ориентированного программирования (AOP).
Читать полностью…
#вопросы_с_собеседований
Что выведет эта программа?
Ответ:
Первый оператор вывода напечатает «false», второй — «true». Так происходит из-за ошибки округления чисел с плавающей точкой. Только степени двойки можно точно представить в двоичной записи. Числа, которые не являются степенями двойки, округляются так, чтобы поместиться в ограниченное количество битов. В этом примере Java использует использует тип double, поэтому для представления десятичных чисел доступно только 64 бита. Следовательно, 0.1*3 не будет равняться 0.3.
➡️ MapStruct
MapStruct — это библиотека для автоматического преобразования данных между Java объектами. Она упрощает создание мапперов и конвертеров, минимизируя необходимость ручного написания кода для преобразования данных между различными слоями приложения.
🗣 MapStruct — это отличный инструмент для разработчиков, которые хотят автоматизировать преобразование данных и улучшить читаемость и поддержку кода. Если вам нужно легко маппировать объекты без лишнего шаблонного кода, MapStruct поможет вам достичь этого.
🔗 Ссылочка на доку
➡️ Objenesis
Objenesis — это Java-библиотека, которая позволяет создавать объекты классов без вызова их конструкторов. Это особенно полезно в тех случаях, когда нужно создать объект для сериализации, прокси или в ситуациях, когда конструктор имеет побочные эффекты, которые следует избегать.
🗣 Objenesis — это отличный инструмент для тех, кто работает с фреймворками, связанными с сериализацией или AOP, и нуждается в возможности создания объектов без вызова их конструкторов. Если вы сталкивались с проблемами при создании экземпляров классов с приватными конструкторами или сложной инициализацией, Objenesis может стать вашим незаменимым помощником.
🔗 Ссылочка на доку
Сочи, встречаемся 12 сентября на митапе IT Talk by Sber! ⛱
Must visit событие для разработчиков, тестировщиков, инженеров по сопровождению и владельцев продуктов. Ведь мы собрали экспертов из разных команд и городов, чтобы рассказать об автоматизации работы при помощи AI-ассистента, инженерных процессах и кейсах крупных IT-компаний.
Спикеры и темы 👇
✔️ Владимир Ярославский, Сбер: «Giga IDE: зачем Сберу собственная платформа разработки?»
✔️ Анатолий Шипов, СберТех: «GitVerse – дом для вашего кода»
✔️ Максим Вишневский, Циан: «Функциональные тесты: развёртывание, интеграция в CI и сбор покрытия»
Место сбора: конференц-зал «Панорама» отеля SEA GALAXY, ул. Черноморская, 4.
Обязательно регистрируйтесь и приходите 12 сентября в 18:30 – не пожалеете! 😉
Нижний Новгород, встречай Сезон кода — большой ИТ-фестиваль
Фестиваль для опытных специалистов в Data, .NET, Java и Python. Время собраться всем ИТ-сообществом, обменяться опытом и просто повеселиться. В программе доклады, знакомство с коллегами, ИТ-квиз, настольные игры и живая музыка.
Успейте зарегистрироваться на Сезон кода
📍Пройдет в Нижнем Новгороде 14 сентября
Реклама. АО "ТБанк", ИНН 7710140679, лицензия ЦБ РФ № 2673
➡️ Использование MethodHandles для эффективного вызова методов в Java
MethodHandles предоставляют низкоуровневый доступ к методам, позволяя динамически вызывать их с минимальными накладными расходами.
🗣️ Этот подход может быть полезен для высокопроизводительных приложений, где отражение (reflection) слишком медленное.
•
MethodHandles.Lookup используется для поиска методов в классе. В примере мы находим метод substring класса String.•
MethodHandle позволяет вызывать метод с минимальными накладными расходами по сравнению с традиционным отражением (reflection), что делает его более производительным.•
В отличие от рефлексии, MethodHandles могут использоваться для более эффективного вызова методов, что полезно в динамических и высокопроизводительных приложениях.
Читать полностью…
Использование метода sun.misc.Unsafe для низкоуровневой работы с памятью в Java
Хотя использование sun.misc.Unsafe не рекомендуется и является небезопасным, он предоставляет уникальные возможности для работы с памятью на низком уровне, аналогично тому, как это делается в языках, таких как C или C++.• sun.misc.Unsafe
предоставляет методы для низкоуровневых операций с памятью, которые обычно недоступны в Java.•
Доступ к Unsafe возможен только через рефлексию, так как он скрыт от обычных разработчиков.•
Этот подход обычно используется в высокопроизводительных библиотеках и внутри JVM, но не рекомендуется для обычных приложений.
➡️ Javassist
Javassist (Java Programming Assistant) — это библиотека для динамической обработки классов на уровне байт-кода. Она позволяет разработчикам изменять существующие классы или создавать новые во время выполнения программы, что может быть полезно для создания прокси, выполнения аспектно-ориентированного программирования (AOP) и других задач, связанных с динамическим изменением поведения кода.
🗣️ Javassist — отличный инструмент для тех, кто хочет глубже погрузиться в работу с байт-кодом и динамическим модифицированием классов. Если вам нужны гибкие средства для работы с классами во время выполнения, Javassist может стать вашим надежным помощником.
🔗 Ссылочка на доку
➡️ Guava
Guava — это мощная библиотека от Google, которая предоставляет широкий набор инструментов для работы с коллекциями, кэшированием, строками, математическими операциями и многим другим. Это настоящая находка для Java-разработчиков, стремящихся к повышению эффективности и удобства написания кода.
🗣 Если вам нужно улучшить производительность или сделать код более элегантным, попробуйте Guava — это значительно упростит вашу жизнь.
🔗 Ссылочка на доку
➡️ Использование VarHandle для высокопроизводительного и безопасного доступа к памяти
VarHandle — это новый механизм, представленный в Java 9, который предоставляет высокопроизводительный и гибкий доступ к переменным уровня Java и даже к произвольной памяти.
✔️ VarHandle служит современным и более гибким аналогом sun.misc.Unsafe, обеспечивая при этом безопасность и совместимость.
Как сделать анализатор кода за два дня
Смотреть статью
⚠️ Использование @SuppressWarnings для безопасного подавления предупреждений
В Java аннотация @SuppressWarnings
позволяет отключать определенные предупреждения компилятора в коде.
🗣️ Это может быть полезно, когда вы уверены в безопасности используемого кода и хотите избежать лишних предупреждений, особенно при работе со старым кодом или нестандартными конструкциями.Читать полностью…
➡️ Оптимизация работы с коллекциями с помощью метода removeIf
В Java 8 был введен метод removeIf
, который позволяет удалить элементы из коллекции, удовлетворяющие определенному условию, без необходимости явного использования цикла.
❔ Какие три элемента – самые важные в жизни сотрудника внутри IT-компании?
включение в бизнес-процессы компании
развитие в компании
парадигма «мотивация – демотивация – увольнение/рост»
Каждый из этих элементов может стать как трамплином, так и проблемой. И для сотрудника, и для команды, и даже для целой организации.
На конференции «OTUS CONF: поддержка и управление в IT-командах»
вы узнаете:
- Как лучше «подключать» удалённых сотрудников к бизнес-процессам организации
- Как давать обратную связь и как на неё реагировать без ущерба для профессиональных отношений
- Как повысить уровень вовлечённости сотрудников
- Как бороться с «тихими увольнениями»
Будет интересно тимлидам, руководителям в IT, эйчарам, HRBP
Присоединяйтесь, слушайте дискуссии экспертов в сферах HR и управления, задавайте вопросы
28 августа, 19:00 МСК
Бесплатно
➡️ Записаться на конференциюРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
📚 Пройди тест на знание Java и получи доступ к 🌿🌿 открытым урокам по Spring
🕗 Два открытых урока можно посмотреть без регистрации и оценить формат обучения. Для доступа ко всем открытым урокам из курса «Разработчик на Spring Framework» от OTUS необходимо пройти входное тестирование: ответить на 21 вопрос и уложиться в тайминг.
📊 -Курс рассчитан на профессионалов с практическим опытом работы на Java.
- Мы будем 5 месяцев погружать вас в теорию и практику Spring Framework. - Дадим 18 практических работ. Процесс review сдаваемой работы максимально приближен к тому, каким он мог быть на реальном проекте. Помимо этого, мы попросим вас сдать дипломную работу, каких скучных записанных занятий, только живые онлайн-лекции, интересные практические задачи и развернутая обратная связь от лучших экспертов ниши. 📅 Старт группы уже 30 сентября 2024г. Доступна рассрочка на обучение.
➡️ НАЧАТЬ ТЕСТИРОВАНИЕРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru