Java Guru 🤓

channel icon
Канал с вопросами и задачами с собеседований!

Условия размещения

Цена за 48 часов в ленте 3500,00
Цена за 1 час закрепления N/A
Взаимопиар Нет
Дополнительные условия рекламы Отсутствуют
-1
12 342
подписчиков
-12
~2.3k
охват 1 публикации
0
~2
постов / день
-0,1%
19,0%
ERR % ?

Статистика

Последние публикации

Java Guru 🤓
24 апреля 2024 г. 17:10
erid: 2RanyoKCft4

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

Ключевые направления программы: Backend, Frontend, Management, QA, Data Science, Mobile, Design, Web 3, System Аnalysis, а также дискуссионный народный поток Kvartirniki и вдохновляющие Keynote выступления от айти-звёзд.

Изюминка CodeFest — неформальное общение, которого много, которое невероятно дружелюбное, и зачином для которого служат те самые выступления в ключевых секциях. Начали с доклада в зале — закончили спонтанным митапом в холле.

Присоединяйтесь к невероятной атмосфере конференции:

■ 25-26 мая, Новосибирск, Экспоцентр.
■ 1800 участников на одной площадке.
■ Участие офлайн и онлайн.
■ Более 120 докладов.
■ Насыщенная программа от партнёров конференции.

Приезжайте командой, участвуйте лично.

Регистрация 👉 https://l.codefest.ru/javatasks

Реклама. АО "Тинькофф Банк", ИНН 7710140679, лицензия ЦБ РФ № 2673
Java Guru 🤓
24 апреля 2024 г. 15:35
Как применить регулярное выражение в Java?

Регулярные выражения – мощный механизм работы со строками. Здесь мы не будем говорить о регулярных выражениях в целом, поговорим об их использовании в Java. Это становится возможно благодаря пакету java.util.regex стандартной библиотеки.

Работа с регулярными выражениями в Java начинается с класса Pattern. Это представление самого выражения, без привязки к целевому тексту. Создать его можно компиляцией строки, с помощью фабричного метода Pattern.compile(). Паттерн иммутабельный и потокобезопасный.

Matcher – регулярное выражение, примененное к конкретному тексту. Пораждается вызовом метода Pattern.matches(). Одним паттерном можно порождать несколько разных матчеров. В отличие от паттерна, матчер мутирует. Он не безопасен для многопоточной среды. Основные операции регулярных выражений – перебор совпадений, доступ к группам, замена – реализованы именно в этом классе.

Работа с экземпляром Matcher похожа на работу с итератором. Результат метода matches() просто скажет, соответствует ли строка шаблону. Но после его вызова матчер поменяет состояние. Теперь, из него можно получить группы, позицию совпадения в тексте, а также произвести замену.

В объекте шаблона Pattern реализованы несколько методов-сокращений, чтобы не использовать Matcher явно. Например, просто проверить строку на соответствие выражению можно одним методом Pattern.matches().
Java Guru 🤓
24 апреля 2024 г. 11:40
♨️ Хочешь выйти на новый профессиональный уровень джавист?
- Осваивай Spring!


Тест на знание языка Java Тест на знание языка Java

— Ответь на 21 вопрос
и проверь, насколько хорошо ты знаешь язык Java и готов освоить Spring. Сможешь сдать — пройдёшь на продвинутый онлайн-курс "Разработчик на Spring" Framework со скидкой!

👉 ПРОЙТИ ТЕСТ ОНЛАЙН-КУРСА "Разработчик на Spring Framework": https://otus.pw/d5J7/

🎫 Курс можно приобрести в рассрочку

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Java Guru 🤓
24 апреля 2024 г. 11:00
Из чего состоит String?

Ответ как обычно зависит от версии Java. Два поля, которые присутствовали во всех версиях – массив символов char[] value и int hash. В поле hash кэшируется хэш-сумма при первом подсчете для соблюдения контракта метода hashCode.

До Java 7 были еще поля offset и count – чтобы переиспользовать без пересоздания массивы из билдеров и других строк. В современной джаве от этого отказались в угоду меньшего потребления памяти.

Изначально все строки хранились в кодировке UTF-16, каждый символ занимал по два байта и умещался в char. Однако выяснилось, что статистически большинство строк содержит только ASCII-символы, которые вмещаются в один байт и составляют кодировку LATIN-1. То есть старший байт в большинстве char остается нулевым, и строки наполовину состоят из пустоты. А примерно четверть памяти приложений состоит из одних только строк.

В Java 6 была введена экспериментальная фича Compressed Strings – способность строки хранить строки в LATIN-1 в массиве byte вместо char. С этой фичей был ряд проблем, и позднее ее убрали.

Снова сжатие строк появилось в Java 9 – теперь оно называется Compact Strings и включено по умолчанию. В классе String появилось поле coder, которое переключает кодировки, и статический флаг COMPACT_STRINGS, выключающий фичу вообще. Тип массива value окончательно изменился с char[] на byte[].
Java Guru 🤓
24 апреля 2024 г. 9:30
❓Хотите прокачать скиллы в автоматизации тестирования на Java?

👉 Ждем вас на бесплатном практическом уроке «Модульное и интеграционное тестирование при помощи Spring Boot» от OTUS.

На вебинаре разберем:
- модульное тестировании при помощи Spring Boot;
- интеграционное тестирование при помощи Spring Boot;
- написание тестов на отдельные фрагменты SUT. 

👉 Для участия зарегистрируйтесь https://otus.pw/k43m/?erid=LjN8K528h

⏰ Встречаемся 24 апреля в 20:00 мск в рамках курса «Java QA Engineer. Professional».

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Java Guru 🤓
24 апреля 2024 г. 8:43
Как обойти строчку?

Для хранения строк в Java в общем случае используется кодировка UTF-16. Для полного понимания вопроса необходимо понимать ее особенности: что такое суррогатные пары и плоскости юникода. Конкретнее, что один символ в обычном понимании слова называется code point, и представляется одним или двумя значениями типа char. Значит, корректный ответ нужно начать с уточнения: подразумевается ли обход значений char или code point.

Из этого следует, что и длина строки, верхняя граница итерации – тоже понятие неоднозначное. Метод length() на самом деле возвращает не количество Unicode-символов, а количество значений char. Реальную логическую длину (количество кодовых точек) покажет метод codePointCount(). Нужно помнить, что чтобы обнаружить суррогатные пары, внутри ему придется проитерировать по символам.

Итерироваться по char можно либо получая по одному символу с помощью метода charAt(), либо со всем массивом сразу, методом toCharArray(). В случае с массивом создается копия внутреннего значения – это естественно медленнее, зато этот массив-копию можно мутировать. Работать с суррогатными парами придется вручную, для этого в классе Character есть специальные методы.

Другой вариант – сразу оперировать методами codePointAt() и codePointBefore(). Параметром указываются индексы массива char, но результатом будут кодовые точки типа int.

В Java 8 появился новый удобный способ обхода – методы chars() и codePoints(). Они возвращают IntStream из символов и кодовых точек соответственно. Носителем результирующих стримов выступает оригинальное внутреннее значение строки, копирование массива не требуется.
Java Guru 🤓
23 апреля 2024 г. 17:25
⁉️ Как связаны Scala и Apache Kafka?

Если вы инженер данных или разработчик, который хочет эффективно работать с большими данными и микросервисной архитектурой, вам нужно это знать!

💻 Приходите на бесплатный практический урок «Введение в язык программирования Scala»«Введение в язык программирования Scala» от OTUS, где опытный эксперт разберет:

- общие принципы и функциональность Scala;
- средства разработки, использующиеся в Apache Kafka;
- языковые средства Scala 2 и 3;
- основы функционального программирования;
- взаимодействие с Kafka через Alpakka.

👉 Встречаемся 25 апреля в 20:00 мск в рамках курса «Apache Kafka».

🔥 Регистрируйтесь прямо сейчас, чтобы посетить бесплатный урок: https://vk.cc/cwmB45https://vk.cc/cwmB45

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruwww.otus.ru
Java Guru 🤓
23 апреля 2024 г. 16:15
Какие бывают строковые классы?

Кроме очевидного класса String, в стандарте Java существует еще StringBuffer и StringBuilder. Класс String иммутабелен, а эти два вспомогательных класса реализуют для него паттерн Builder и служат способом редактирования строки без относительно дорогого пересоздания объекта.

Все методы StringBuffer синхронны. В Java 1.5 ему на замену пришел несинхронизированный вариант StringBuilder. Эта ситуация аналогична HashMap и Hashtable. В остальном эти два класса почти ничем не отличаются, имеют одинаковый набор методов и конструкторов.

Для буфера и билдера не работает синтаксический сахар строк:
🔘 Их нельзя создать литералом, вместо этого используется обычный конструктор;
🔘 Нельзя конкатенировать оператором +, вместо этого используются обычные методы insert и append.

Сам оператор конкатенации константных выражений, компилируется в интернированную строку, но для не-констант неявно использует StringBuilder.
Java Guru 🤓
23 апреля 2024 г. 13:01
Новосибирск, 25 апреля приглашаем на митап IT Talk by Sber для Java- и DevOps-разработчиков! 🤩

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

На митапе обсудим интересные темы:

👉 Советы для оптимизации сборки Java-проектов, практики CI и автоматизации сборки приложений.

👉 Что такое код с точки зрения законодательства, кому он принадлежит и какие есть права у автора кода?

👉 Инциденты в проме: что делать и не делать, чтобы устранить инцидент, и что на самом деле происходит, когда вы видите «Сервис недоступен, повторите операцию через 5 минут или позже»?

Встречаемся 25 апреля с 17:30 до 22:00 в лофте FoodFactory: Новосибирск, ул. Коммунистическая, 14.

Регистрируйтесь по ссылке!
Java Guru 🤓
23 апреля 2024 г. 10:50
new String("Hello_42") == "Hello_" + 42?

Такие вопросы о сравнении строковых и числовых констант проверяют знания о понятии пулов литералов (literal pool). Не следует путать с пулом констант класса. Виртуальная машина переиспользует один и тот же объект для строкового литерала при загрузке класса, если такой уже выделен в куче. Вот почему "Hello" == "Hello" истинно, не смотря на то что String – ссылочный тип. Такая оптимизация возможна благодаря свойству неизменяемости (immutable) класса String, и называется интернирование строк.

Кроме самих литералов, интернирование применяется ко всем константным выражениям. К таким выражениям в этом примере относятся неявное приведение числа 42 к строке и конкатенация констант. Это делает истинным "Hello_42" == "Hello_" + 42.

Пул литералов не работает, когда явно используется оператор new. Это причина, по которой выражение new String("Hello_42") == "Hello_" + 42 ложно.
Java Guru 🤓
23 апреля 2024 г. 9:30
Присоединяйтесь к нашему бесплатному курсу и начните увлекательное путешествие в мир Java!Присоединяйтесь к нашему бесплатному курсу и начните увлекательное путешествие в мир Java!

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

🎓 Чему вы научитесь:
— Создавать программы с использованием основных конструкций языка.
 — Разделять код на методы для повторного использования.
 — Анализировать ошибки в коде с использованием отладочной печати.

💼 Включено в курс:
29 уроков (видео и/или текст), 35 упражнений в тренажере, 95 проверочных тестов + дополнительные материалы.

Вы с нами?😉
Java Guru 🤓
23 апреля 2024 г. 8:29
toString

Строковое представление экземпляра. По умолчанию возвращает "ПолноеИмяКласса@хэшВ16тиричномВиде" (например "java.lang.Object@1a23b4f"). Часть после @ – не адрес в памяти, так что умолчательная реализация почти не несет практической пользы. Полезно добавлять нормальную реализацию даже если не необходимо в логике программы – поможет в отладке. Готовый вызов x.toString() с проверкой на null уже реализован в String.valueOf(x).
Java Guru 🤓
22 апреля 2024 г. 13:18
Что нужно знать для работы с Greenplum?

Разберем предпосылки, историю, особенности на бесплатном практическом уроке посвященному курсу «Базы данных» от OTUS.

🔹На вебинаре мы разберём архитектуру и отказоустойчивость кластера Greenplum. Рассмотрим резервное копирование Greenplum и рекомендации по оптимизации.

🔹На уроке вы получите рекомендации: по загрузке \ выгрузке; Update \ deletes в таблицах GP;  Append-Optimized таблицы

👉 Регистрация
https://clck.ru/3AABc9?erid=LjN8KP99a
Java Guru 🤓
22 апреля 2024 г. 9:18
Перечислите методы класса java.lang.Object

Этот вопрос используется, как способ начать разговор – по большинству методов можно уйти в обсуждении далеко вглубь. В первую очередь важно запомнить сигнатуры – не зная ответов на вопросы по этим методам, можно будет хотя бы рассуждать отталкиваясь от них. Также полезно открыть исходник и внимательно прочитать javadoc-документацию. Поступим как на интервью, и далее рассмотрим каждый из методов детально. Их список:

🔘 public final native Class getClass()
🔘 public native int hashCode()
🔘 public boolean equals(Object obj)
🔘 protected native Object clone() throws CloneNotSupportedException
🔘 public String toString()
🔘 public final native void notify()
🔘 public final native void notifyAll()
🔘 public final native void wait(long timeout) throws InterruptedException
🔘 public final void wait(long timeout, int nanos) throws InterruptedException
🔘 public final void wait() throws InterruptedException
🔘 protected void finalize() throws Throwable
Java Guru 🤓
19 апреля 2024 г. 11:20
Хотите освоить Scala? Начните с простого Web-сервиса на ZIO: zio-http + zio + quill

Приходите на бесплатный практический урок от OTUS. Спикер Алексей Воронец — руководитель разработки в «NAUMEN».

На примере построения простого веб-сервиса с REST API разберем основные компоненты (пути, бизнес логика, доступ к данным, документация) и посмотрим, как это можно реализовать в экосистеме ZIO.

Занятие пройдёт 22 апреля в 20:00 мск в рамках курса «Scala-разработчик». Доступна рассрочка на обучение!

Регистрируйтесь прямо сейчас, чтобы посетить бесплатный урок и получить запись: https://vk.cc/cwi4ET

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Java Guru 🤓
19 апреля 2024 г. 10:32
Как работает инъекция прототипа в синглтон?

Раньше мы уже
рассматривали различия скоупов singleton и prototype в Spring Framework. Допустим ситуацию, когда в singleton-компонент внедряется зависимость со скоупом prototype – когда будет создан её объект?

Если просто добавить к определению бина аннотацию
@Scope@Scope(SCOPE_PROTOTYPE), и использовать этот бин в синглтоне через аннотацию @Autowired@Autowired – будет создан только один объект. Потому что синглтон создается только однажды, и обращение к прототипу случится тоже однажды при его создании (при внедрении зависимости).

Примитивный способ получать новый объект при каждом обращении – отказаться от
@Autowired@Autowired, и доставать его из контекста вручную. Для этого нужно вызывать context.getBean(MyPrototype.class).

Воспользоваться автоматическим внедрением зависимостей можно через внедрение метода (паттерн «Команда»). Автовайрится не сам объект, а производящий его метод.

Более красивый декларативный способ – правильно настроить определение бина. В аннотации
@Scope@Scope кроме самого scopeName доступен второй параметр – proxyMode. По умолчанию его значение NO – прокси не создается. Но если указать INTERFACES или TARGET_CLASS, то под @Autowired@Autowired будет внедряться не сам объект, а сгенерированный фреймворком прокси. И когда проксируемый бин имеет скоуп prototype, то объект внутри прокси будет пересоздаваться при каждом обращении.
Java Guru 🤓
18 апреля 2024 г. 13:00
🧙‍♂️Что может помочь, чтобы продвинуться в Java-разработке: магия или практика?

Расскажем на курсе "Разработчик на Spring Framework" от OTUS.

🤣 Принимаем в свой орден до конца мая

⚡️ Пройди тест по Java от OTUS и проверь, готов ли ты к обучению на нашем курсе?

Ответишь — пройдешь на курс по специальной цене.

👉 ПРОЙТИ ТЕСТ: https://otus.pw/VI80/

🎫 Курс можно приобрести в рассрочку

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Java Guru 🤓
18 апреля 2024 г. 10:50
В чём преимущества и недостатки Spring Boot?

Основные сущности фреймворка Spring Boot – это стартеры. Зависимости с названиями вида spring-boot-starter-xxx выполняют две основных задачи. Во-первых, они добавляют набор типичных сторонних библиотек-зависимостей; во-вторых, регистрируют типичные бины и их конфигурации. Кроме того, со Spring Boot в проекте появляется ряд таких полезностей, как embedded-сервер, конфигурация web-приложения без web.xml, метрики, properties вынесенные из кода во внешние файлы.

Например, spring-boot-starter-data-jpa даст вам готовый комплект всего необходимого для использования JPA: драйвер, совместимую с ним версию Hibernate, библиотеки Persistence API и Spring Data. В контексте приложения появятся все нужные для JPA репозиториев бины.

Таким образом Spring Boot ускоряет и упрощает разработку, дает возможность избавиться от boilerplate-кода в проекте и сфокусироваться на бизнес-задачах. Это бывает особенно важно в микросервисной архитектуре, когда создается большое количество приложений.

С другой стороны, такая избыточность естественно приводит к большей тяжеловесности и медлительности приложения.
Java Guru 🤓
18 апреля 2024 г. 9:10
🔥 Пройди тестПройди тест по Java и проверь свои знания.

Ответишь — пройдешь на продвинутый курс «Java Developer. Professional» от OTUS по специальной цене + получишь доступ к записям открытых уроков курса курса

🔝 Обновленная, расширенная программа

👉  ПРОЙТИ ТЕСТ: https://otus.pw/AxWa/?erid=LjN8KF9Af
Java Guru 🤓
18 апреля 2024 г. 8:19
Как использовать JavaEE сервлет в Spring Framework?

Web-приложение на Spring MVC технически само по себе работает на сервлетах: всю обработку запросов берет на себя единый DispatcherServlet. С его помощью реализуется паттерн Front Controller.

Если вам нужно определить в программе полностью независимый от Spring-контекста сервлет или фильтр, ничего особенного для этого делать не нужно. Как обычно в Servlet API, нужно объявить класс, добавить его в web.xml как сервлет, добавить для сервлета маппинг.

Сервлет живет вне Spring-контекста, внедрение зависимостей в нём просто так не заработает. Чтобы использовать autowiring, на этапе инициализации сервлета вызывается статический SpringBeanAutowiringSupport.processInjectionBasedOnServletContext, с текущим сервлетом и его контекстом в аргументах. В этом же утилитарном классе есть ряд других средств для работы с контекстом извне.

Если программа построена на Spring Boot, создание бина типа ServletRegistrationBean поможет добавить сервлеты в рантайме. А для декларативного добавления на этапе компиляции, к классу конфигурации применяется
@ServletComponentScan@ServletComponentScan. С этой аннотацией стартер приложения просканирует и добавит в контекст все web-компоненты в стиле Servlet 3.0: классы с аннотациями @WebFilter@WebFilter, @WebListener@WebListener и @WebServlet@WebServlet.