Уютное сообщество джавистов
2.02K subscribers
35 photos
45 links
Уютное сообщество джавистов - это хорошие материалы,задачки,
туториалы для проверки знаний и обратная связь от соратников по изучению.

@viktorreh
加入频道
*Вашему вниманию предлагается новая подборка Java-новостей от InfoQ: 😃
*✔️ Стал доступен билд № 31 для JDK 20 (ранний доступ)
✔️ Стал доступен билд № 5 для JDK 21 (ранний доступ)
✔️ Выпущен новый релиз Spring Framework, версии 6.0.4
и д.р.

Приятного чтения!


Читать статью
Новости Java 52

• Вышел Kotlin 1.8.0
• Java Annotated Monthly за январь
• Maven 3.8.7
• Mockito 5.0.0

Подробности: https://minijug.ru/java_news_52.html
Каждой задаче — по языку

Я вижу как минимум два способа понимать это высказывание.

Первый (назовём его горизонтальным) предполагает, что для каждой прикладной области есть наиболее подходящий язык программирования. Например, для серверной разработки — Java, для яблок — Swift, для Android — Kotlin, для фронта — TypeScript, для системщины — Си.

Второй (назовём вертикальным) делит языки на прикладные и низкоуровневые. Например, сервер — Kotlin-JVM, Android — Kotlin-JVM/Android, яблоки — Kotlin-Native, фронт — Kotlin-JVM. Написание ОС и драйверов — Rust.

Или, например, сервер и Android — Clojure, яблоки (в React-Native) и фронт — ClojureScript, Android — Clojure.

Или сервер — Haskell, Android — Haskell (NDK или Frege), iOS и фронт — PureScript.

Мне кажется, что правильный способ понимать это высказывание — второй, т. к. нет объективных причин для каждой платформы (прикладной сферы) заводить отдельный язык.
👍6👎3
Ночная задача: реализовать функцию factorial(n) -> long.
Какое решение самое простое? Компактное? Эффективное? Зрелищное?

Напишите ваши в комментах.
👍4
fun factorial(n: Int): Long =
(2..n).fold(1L, Long::times)
💩3👍2
Полраза в жизни встречал ViewModel + MutableStateFlow. Попросили объяснить, как использовать. Чем дальше в лес, тем меньше понимания, как и зачем этим вообще пользоваться и под какими веществами это придумали 🤦

Ожидание:
val vm by viewModels(factory = { MyCoolViewModel(args) })

Реальность:
val vm: MyCoolViewModel by viewModels(factoryProducer = {
object : ViewModelProvider.Factory {
override fun <T : ViewModel> create(...): T =
MyCoolViewModel(args) as T
}
})


Ожидание:
val stateSmth = savedStateHandle.getMutableStateFlow("smth", defaultSmth)

Реальность:
отрицание, гнев, торг, пост в канал, кастомный флоу.
💩4😁1
#вопросы_с_собеседований

Как можно вывести на экран уникальные квадраты чисел используя метод map()?

Для этого можно использовать Stream. Ответ на картинке.
🔥6👎1
Ссылки на методы в Java

Лямбды в Java полезны во многих направлениях. Лямбда-выражения можно использовать для более простых задач, а лямбда-утверждения — для более сложных. Лямбды могут вызывать другие методы для текущего объекта (this) и объектов, которые находятся в области видимости, таких как текущий элемент итерации и конечная локальная переменная за пределами лямбды. Лямбду всегда можно упростить, поместив код в другой метод.

Читать статью
👍2
Для чего используются ключевые слова volatile, synchronized, transient, native?

volatile вынуждает потоки отключить оптимизацию доступа и использовать единственный экземпляр переменной. Если переменная примитивного типа – этого будет достаточно для обеспечения потокобезопасности. Если же переменная является ссылкой на объект – синхронизировано будет исключительно значение этой ссылки. Все данные, содержащиеся в объекте, синхронизированы не будут!

synchronized — это зарезервированное слово позволяет добиваться синхронизации в помеченных им методах или блоках кода.

Ключевые слова
transient и native к многопоточности никакого отношения не имеют, первое используется для указания полей класса, которые не нужно сериализовать, а второе сигнализирует о том, что метод реализован в платформо-зависимом коде.

#вопросы_с_собеседований
👍11
Друзья, мы создали канал с вакансиями по Java.

В чем там фишка?
— В каждой вакансии есть ссылка на телеграм аккаунт HR-менеджера или технического специалиста этой вакансии.

Вы сразу же можете заслать в телеге ваше резюме или задать вопрос по вакансии.

Подписывайтесь и ищите работу: @javaoffers
👍1
Разбираемся, что не так с кодом в новой рубрике⬇️

Вопрос: Почему код не скомпилируется?

Ответ:
В цикле while нет условия типа Boolean
👍13
Что такое «конструктор по умолчанию»?

Если у какого-либо класса не определить конструктор, то компилятор сгенерирует конструктор без аргументов - так называемый «конструктор по умолчанию».

public class ClassName() {}

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

#вопросы_с_собеседований
👍3
Что такое Optional?

Опциональное значение Optional — это контейнер для объекта, который может содержать или не содержать значение null. Такая обёртка является удобным средством предотвращения NullPointerException, т.к. имеет некоторые функции высшего порядка, избавляющие от добавления повторяющихся if null/notNull проверок:

Optional<String> optional = Optional.of("hello");

optional.isPresent(); // true
optional.ifPresent(s -> System.out.println(s.length())); // 5
optional.get(); // "hello"
optional.orElse("ops..."); // "hello"

#вопросы_с_собеседований
👍12
Друзья, какие каналы и сайты по Java вы читаете для обучения?

Напишите в комментах под постом ☕️
🔥4