Java Developer
6.46K subscribers
235 photos
8 videos
12 files
279 links
MAKE JAVA GREAT AGAIN

Мемы: @java_memes
Download Telegram
gitignore для java и maven проектов

простенький gitignore для мелких проектов, чтобы был всегда под рукой


# Intellij
.idea/
*.iml
*.iws

# Maven
log/
target/


#git
33
Я чего раньше-то так редко писал. Это потому что у меня выгорание было и ощущение, что ничего нового и полезного не расскажу вам. Многие и так умнее меня, так ещё и успевали развиваться, пока я на одном месте сидел. Ещё и голос в голове говорил - зачем писать то, что все и так знают или могут загуглить?

Но сейчас пришёл к мысли, что читать будут те, кому интересно. А кому неинтересно - отпишутся.

Я когда-то задрал планку, сейчас наоборот хочу её опустить. В канале не будет инсайдов, обучений, марафонов, историй успеха. Скорее это будут заметки для себя же самого.

p.s.: добавил лайки. дизлайков и комментариев не будет, я слишком чувствителен к критике.
250
кстати, постов больше не будет.
29
админ устроился на новую работу
65
сообщение для англоговорящих подписчиков (индусов) 👇
10
87😁1
ладно, давайте так. зачем вам этот канал?
25
Спасибо за вчерашние комментарии, обратную связь, идеи, искренний интерес. Рад видеть среди читателей адекватных людей, заинтересованных, зачастую вежливых и дружелюбных!

Очень рад отпискам от канала. В общем-то, последние посты были на это и нацелены.

Для меня важно делиться мыслями именно с приятными людьми, лояльными читателями, которые не ждут ежедневного вау-контента и «пользы»
68
Гайз, перечислите сходу все методы класса Object? 🧐
Anonymous Poll
39%
Да
41%
Нет
20%
см. результаты
Отзыв оффера

Недавно ходил по собеседованиям (рынок РФ). Понравилась вакансия - крупная компания пилит свой новый продукт, прошёл тех собес - не супер гладко, но приятные впечатления остались, отправил свою анкету для сб, всё норм, на следующий день прислали оффер, по деньгам как просил. Договорились, что беру неделю на раздумья. И в этот же день вечером эйчар пишет: «могу набрать? срочно». Говорит пришли новые руководители и решили поменять стек, поэтому найм заморожен. Сорян, так бывает. Можем предложить другую команду, но собес надо пройти заново.

Новый собес я конечно же не проходил. Себя успокоил тем, что видать в компании не гладко с процессами и в целом мне повезло. Но всё равно неприятно.

Были у кого-то похожие приколы?
44
Сегодня опробовал прогу Lens, которая позволяет управлять кластером Kubernetes через графический интерфейс. Красота! Понравилось.

Это как с git - можно всё делать в терминале, а можно и в IDE пушить, черепикать и тд.

https://habr.com/ru/companies/first/articles/677420/
33
Я за март прошел больше 10 собесов. Накопил портянку вопросов, которые часто спрашивали. Есть желание выкладывать сюда эти вопросы с возможными ответами и обсуждать в комментариях. Как идейка?
446
😁9717
так, на чём мы тут остановились
😁376
Spring
Для чего используется аннотация @Qualifier
Ответ:


Когда есть несколько бинов одного типа, то используя @Qualifier мы говорим Spring'у, какой именно бин внедрить. При этом также существует аннотация @Primary. Если мы укажем бин @Primary, то Spring его выберет по умолчанию. Когда нужен конкретный другой бин, то @Qualifier переопределит выбор @Primary.


Kafka
Как сделать, чтобы сообщения по одному процессу обрабатывались последовательно?
Ответ


Для таких сообщений нужно использовать одинаковый ключ (идентификатор процесса). Продюсер, используя этот ключ, отправит все связанные сообщения в одну и ту же партицию. Так как сообщения внутри партиции обрабатываются строго по порядку, один консьюмер получит их последовательно.


SQL
Чем отличается SELECT COUNT(*) от SELECT COUNT(address)
Ответ:


COUNT(*) считает общее количество строк, независимо от того, содержат ли они NULL в каком-либо поле.
COUNT(address) же считает количество ненулевых значений в столбце address. Если столбец address содержит NULL в некоторых строках, такие строки в подсчёт не включаются.
62😁4
Java Stream API

Разница между методами map и flatMap

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

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<String> strings = numbers.stream()
.map(number -> String.valueOf(number))
.collect(Collectors.toList());


• Метод flatMap принимает функцию, которая преобразует каждый элемент стрима в новый стрим. Затем flatMap объединяет (склеивает) полученные стримы в один общий.
Пример. У нас есть список заказов, а каждый заказ содержит список купленных вещей. Получить список всех купленных вещей можно так:

List<Item> items = orders.stream()
.flatMap(order -> order.getItems().stream())
.collect(Collectors.toList());
40😁5
Spring
При каких условиях транзакция Spring будет откатана (rollback)?
Ответ:


1. Если выброшено unchecked исключение (наследник RuntimeException или Error).

2. Если выброшено checked исключение, указанное в аннотации @Transactional с параметром rollbackFor.
@Transactional(rollbackFor = { IOException.class })

Примечание: Checked исключения (например, IOException) по умолчанию не вызывают роллбэк, поэтому их нужно явно указывать через параметр rollbackFor.
40😁4
Java Core
Чем отличается abstract class от interface?
Ответ:


1. Наследование
abstract class может extends только один класс (single inheritance), но может реализовывать несколько интерфейсов.
interface может extends несколько других интерфейсов (множественное «наследование» интерфейсов).
2. Методы
abstract class может содержать как абстрактные, так и реализованные методы. Поддерживает любые модификаторы доступа.
interface
◦ до Java 8 содержал только абстрактные методы (по умолчанию public abstract)
◦ с Java 8 появились default и static методы с реализацией
◦ с Java 9 можно объявлять private методы внутри интерфейса, чтобы переиспользовать логику в default-методах. При этом приватные методы могут существовать только внутри интерфейса, и не видны реализующим классам.
3. Конструкторы
abstract class может иметь конструкторы для инициализации общих полей у наследников, но нельзя создать объект абстрактного класса напрямую (только через конкретные подклассы).
interface не может иметь конструкторов — объект интерфейса напрямую создать нельзя.
4. Поля
abstract class может содержать поля любых типов с любыми модификаторами.
interface может содержать только public static final поля (константы).

Когда использовать:
abstract class - когда требуется общее состояние (поля) и общие методы (реализация), которые наследники могут переопределять или дополнять. Абстрактный класс может хранить поля и совместно использовать часть логики во всех наследниках.
interface - когда нужно определить «контракт» (набор методов) для различных классов, не связанных между собой по иерархии. Несмотря на появление default-методов с реализацией, в интерфейсе по-прежнему нельзя хранить состояние экземпляра. default-методы позволяют расширять интерфейс без нарушения совместимости, но не заменяют полноценного «скелета» с полями и логикой, который даёт абстрактный класс.
30
Kafka
Какие есть гарантии доставки сообщений
Ответ:


1. At most once (не более одного раза):
Сообщение может быть потеряно, но никогда не будет доставлено повторно.
2. At least once (как минимум один раз):
Сообщение доставляется минимум один раз, но возможно повторное получение.
3. Exactly once (ровно один раз):
Сообщение доставляется и обрабатывается строго один раз. Это наиболее надёжная гарантия, достигается с помощью механизма идемпотентности продюсера и транзакций.

Примечание:
Гарантия зависит от настроек продюсера, консюмера и брокера Kafka.
22
яндексоиды, без негатива )
6