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

@viktorreh
Download Telegram
*Вашему вниманию предлагается новая подборка 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