seniorjavist | Unsorted

Telegram-канал seniorjavist - Senior Java Developer

22676

№ 4931127152 Изучаем Java. По вопросам сотрудничества: @adv_and_pr Канал на бирже: https://telega.in/c/seniorjavist

Subscribe to a channel

Senior Java Developer

#вопросы_с_собеседований
Какие есть примитивные типы данных в Java?

В Java существует 8 примитивных типов данных:
1. short
2. byte
3. char
4. int
5. float
6. double
7. long
8. boolean

Читать полностью…

Senior Java Developer

⁉️ Монолит или микросервисы? Руководство для архитекторов, которые ценят свои нервы

Приглашаем на открытый урок.

🗓 17 июня в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Software Architect».

📌 Что будет на вебинаре:
✔️ Как не попасть в ловушку “модных” микросервисов;
✔️ Разбор признаков, что пора выходить из монолита;
✔️ Архитектурные паттерны для перехода к микросервисам (Strangler Fig, BFF, Self-contained systems);
✔️ Организационные и технические риски — что точно пойдёт не так и как это предсказать;
✔️ Роль DevOps, CI/CD и мониторинга в выборе архитектуры.

🎯 После вебинара вы:
- Получите пошаговое руководство по выбору архитектуры под ваш проект;
- Научитесь оценивать реальные риски и стоимость микросервисов;
- Поймёте, как внедрять архитектурные изменения без сбоев и хаоса;
- Увидите, как принимать взвешенные архитектурные решения, сохраняя технический контроль и производительность команды.

💡 Идеальный вебинар для тех, кто хочет перестать "архитектурить на ощущениях" и начать действовать стратегически.

🎁 Всем участникам вебинара дарим промокод, который дает скидку на обучение - SoftwareArc_06

👉 Регистрация на вебинар: https://otus.pw/ETxF/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Senior Java Developer

Spring JDBC

Spring JDBC - это фреймворк Spring, который предоставляет удобный и гибкий доступ к базам данных через JDBC API в Java.

В данном примере создается класс JdbcTemplateExample, в конструктор которого передается Datasource. JdbcTemplate используется для выполнения запросов к базе данных.

Метод getAllNames использует метод query для выполнения запроса SELECT и получения имени всех пользователей из таблицы users, обрабатывая результаты через интерфейс RowMapper.

Метод addUser использует метод update для выполнения запроса INSERT и добавления нового пользователя в таблицу users.

Результатом метода getAllNames будет список всех имен пользователей, а метод addUser добавит нового пользователя в таблицу users.

*Чтобы полностью понимать, как работает Spring JDBC, необходимо также разобраться в различных методах и классах, которые используются при работе с ним.

Читать полностью…

Senior Java Developer

IdentityHashMap

Класс IdentityHashMap в Java является реализацией интерфейса Map и работает на основе проверки на равенство ссылок объектов, а не на основе метода equals.

Это означает, что если два объекта, хранящихся в IdentityHashMap, содержат одинаковые значения полей, но разные ссылки, то они будут считаться разными ключами.

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

Читать полностью…

Senior Java Developer

LinkedHashSet

LinkedHashSet представляет собой структуру данных, которая хранит элементы в порядке их добавления, а также не допускает дублирования элементов
, как и HashSet.

Однако, в отличие от HashSet, LinkedHashSet сохраняет порядок добавления элементов, что может быть полезно в некоторых случаях.

Как видно из примера, элементы были добавлены в множество в порядке их добавления, а дубликат элемента "Java" не был добавлен в множество.

Читать полностью…

Senior Java Developer

Графический интерфейс для bash, делаем работу в командной строке удобнее

Когда пишешь код в IntelliJ IDEA, привыкаешь что везде есть подсказки, везде где можно работает комплишен, всегда можно одним кликом перейти на декларацию метода или на его юсаджи.

Смотреть статью

Читать полностью…

Senior Java Developer

👩‍💻 Java — один из самых востребованных языков, но не каждый разработчик умеет использовать его возможности по максимуму.

На курсе «Java Developer. Professional» вы научитесь создавать современные Java-приложения, освоите Spring WebFlux и Kafka, а также разберётесь в работе JVM изнутри.

Пройдите тест, проверьте, достаточно ли у вас знаний для обучения на курсе:.

🎁 Дарим промокод, который дает скидку на обучение - JAVA_06

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

Начните свой путь к уровню Middle+ и используйте Java на 100%.

➡️ Пройти вступительный тест курса: https://otus.pw/xc1M/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Senior Java Developer

Релиз через два дня. Код готов. Почти...
Остались тесты. Ну, точнее — покрытие. Потому что QA уже дышит в затылок, а ты сидишь и выбираешь: спать или корпеть до утра.
Explyt Test умеет создавать тесты под твой код — сам. Быстро. В IDE. Без плясок.
Хочешь, чтобы релиз прошёл, а не пролетел? Попробуй бесплатно! 👉 explyt.ai

Читать полностью…

Senior Java Developer

Узнаем размер файла с помощью Java

Здесь создается объект класса File, указывающий на файл, размер которого нужно узнать.

Затем вызывается метод length(), который возвращает размер файла в байтах. Результат выводится на консоль с помощью метода println().

Читать полностью…

Senior Java Developer

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

Не вопрос!

Mellow берут всю эту тягомотину на себя: автоматизируют документооборот, помогают с поиском заказов, получением и выводом средств от иностранных заказчиков. А ведь часто именно эта бюрократия тормозит рост талантливых соло-разработчиков.

В своем канале Mellow рассказывают, как:

🔴Сделать резюме, которое заметят в ЕС
🔴Преодолеть культурные различия с зарубежными заказчиками
🔴Уехать в любую страну и легально работать с Digital Nomad Visa
🔴Нанять первого сотрудника
🔴Разобраться в валютном контроле РФ

Подписывайтесь, чтобы освободить время на то, что действительно интересно!

Реклама "ТиЭмЭс СоларВеб Лимитед", ИНН CY99000193F erid CQH36pWzJqCcGjYtUqD5mSebydAkr5X3SoCJxXF5aNptbV

Читать полностью…

Senior Java Developer

Замер времени с помощью Instant и Duration

В Java 8 добавили новый java.time API. В частности, ля измерения времени подойдут два новых класса – Instant и Duration. Оба эти класса иммутабельны.

Instant обозначает момент времени с начала эпохи Unix (1970-01-01T00:00:00Z). Для создания момента мы используем метод Instant.nоw(). После того, как мы создали два момент, вычислим разницу в миллисекундах.

Рекомендуется использовать именно этот подход в Java 8 и выше.

Читать полностью…

Senior Java Developer

assert может принимать 2 аргумента

Обычно assert используется для проверки некоторого условия и бросает AssertionError если условие не удовлетворяется. Чаще всего проверка выглядит так(см 1 на картинке)

Однако, она может быть и такой(см 2 на картинке)

Сообразительный читатель уже догадался, что второе выражение (кстати, оно ленивое) возвращает значение типа Object, которое передаётся в AssertionError и несёт пользователю дополнительные сведения об ошибке. Более формальное описание можно посмотреть тут.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете hashCode()?

Общий совет: выбирать поля, которые с большой долью вероятности будут различаться. Для этого необходимо использовать уникальные, лучше всего примитивные поля, например, такие как id, uuid. При этом нужно следовать правилу, если поля задействованы при вычислении hashCode(), то они должны быть задействованы и при выполнении equals().

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Какое начальное количество корзин в HashMap?

В конструкторе по умолчанию - 16, используя конструкторы с параметрами можно задавать произвольное начальное количество корзин.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Что такое переопределение (overriding) методов?

Переопределение методов происходит, когда child хочет изменить поведение parent класса. Если нужно, чтоб выполнилось-таки то, что есть в методе parent, можно использовать в child конструкцию вида super.methodName(), что выполнит работу parent метода, а уже потом добавить логику.

Требования, которые нужно соблюдать:
☕️ сигнатура метода должна быть такая же;
☕️ возвращаемое значение должно быть таким же.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Чем занимается сборка мусора в Java?

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

Читать полностью…

Senior Java Developer

flatMap

flatMap - это метод, который принимает функцию в качестве параметра, применяет ее ко всем элементам потока, а затем объединяет результаты в один поток.
Обычно используется для работы с потоками, содержащими другие потоки или коллекции.

В этом примере мы используем flatMap для преобразования потока сотрудников в поток проектов, используя лямбда-выражение, которое возвращает поток проектов сотрудника. Затем мы собираем все проекты в один поток при помощи метода collect.

Таким образом, flatMap очень полезен в случаях, когда нужно преобразовать поток, содержащий другие потоки или коллекции, в один плоский поток.

Читать полностью…

Senior Java Developer

erid: 2W5zFGzRWUY

Канал про собеседования, алгоритмы, System Design, процессы, культуру и инженерию в FAANG/BigTech

Автор канала — разработчик с 18-летним опытом, из которых 8 лет он провёл в FAANG (3,5 года — в Amazon). Работал и жил в России, Германии, Люксембурге и Великобритании, провёл более 100 технических интервью в FAANG-компании.
На канале разбираю реальные задачи с собеседований в FAANG по алгоритмам и System Design. Рассматриваю задачи из не-FAANG компаний на Java, делая акцент на многопоточность. Делюсь опытом работы в FAANG, рассказываю о процессах, технологиях и инженерной культуре, обсуждаю особенности релокации и жизни разработчика в разных странах.

Если вам интересны эти темы, подписывайтесь: t.me/faangmaster

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Какие виды Garbage Collector есть в HotSpot?

В HotSpot JVM имеется несколько видов Garbage Collector:

1. Serial
: однопоточный сборщик мусора, обрабатывает один поток в куче, который блокирует все приложение на этапе сборки мусора;

2. Parallel: многопоточный сборщик мусора, работает по тому же принципу, что и Serial, но использует несколько потоков для устройства сборки мусора, что сокращает время блокировки приложения;

3. CMS (Concurrent Mark-Sweep): сборщик мусора для больших куч, работает параллельно со стоп-временем, когда сборка мусора производится мгновенно, а приложение продолжает работу во время сборки мусора;

4. G1 (Garbage First): сборщик мусора нового поколения с выделенной кучей на основе регионов, который был разработан с целью улучшения показателей быстродействия и уменьшения времени блокировки. G1 собирает мусор в регионах, где около 25% от общего числа объектов имеют самую высокую степень задействованности и блокирует только те регионы, где собран мусор.

Читать полностью…

Senior Java Developer

Холостые циклы в Java

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

Смотреть статью

Читать полностью…

Senior Java Developer

Как сделать анимацию с помощью MotionLayout

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

Смотреть статью

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Зачем добавили ArrayList, если уже был Vector?

• Методы класса Vector синхронизированы, а ArrayList - нет;
• По умолчанию Vector удваивает свой размер, когда заканчивается выделенная под элементы память. ArrayList же увеличивает свой размер только на половину.

Vector это устаревший класс и его использование не рекомендовано.

Читать полностью…

Senior Java Developer

Метод rotate()

Метод java.util.Collections.rotate() присутствует в классе java.util.Collections. Используется для поворота элементов, присутствующих в указанном списке Коллекции, на заданное расстояние.

Читать полностью…

Senior Java Developer

Узнаем версию Java

В Java можно узнать версию текущего экземпляра JVM (Java Virtual Machine) с помощью функции System.getProperty("java.version");

Этот код вернет текущую версию Java, установленную на компьютере.

Читать полностью…

Senior Java Developer

Что такое механизм try-with-resources?

Данная конструкция, которая появилась в Java 7, позволяет использовать блок try-catch не заботясь о закрытии ресурсов, используемых в данном сегменте кода. Ресурсы объявляются в скобках сразу после try, а компилятор уже сам неявно создаёт секцию finally, в которой и происходит освобождение занятых в блоке ресурсов. Под ресурсами подразумеваются сущности, реализующие интерфейс java.lang.Autocloseable.

Стоит заметить, что блоки catch и явный finally выполняются уже после того, как закрываются ресурсы в неявном finally.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Какое худшее время работы метода add() для ArrayList?

O(N). Вставка элемента в конец списка осуществляется за время O(1), но если вместимость массива недостаточна, то происходит создание нового массива с увеличенным размером и копирование всех элементов из старого массива в новый.

Читать полностью…

Senior Java Developer

Генерируем код и пароль

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

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

Следующий код объясняет, как быстро генерировать такие пароли и OTP.

Читать полностью…

Senior Java Developer

Как в Java устроено выделение регистров в памяти

Когда виртуальная машина Java компилирует ваш исходный код Java в машинный, одна из задач, которые она должна при этом выполнить – решить, где хранить локальные переменные Java и другие подобные временные значения. В вашей машине отсутствует концепция локальных переменных, поэтому на этапе компиляции необходимо определиться, какое место в памяти стека (какой машинный регистр) будет использоваться для хранения каждой переменной. Эта операция называется «выделение регистров». Может показаться, что выделение регистров – сложная абстрактная теоретическая тема, но в этом коротком посте я покажу, как сначала соотнести исходный код Java с теорией, потом понять, как его видит компилятор, а потом – показать результирующий машинный код. В данном случае моя цель – продемонстрировать, что все эти концепции очень легко опробовать на практике с реальным компилятором.

Читать статью

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Как написать immutable класс?

Чтоб написать immutable неизменяемый класс, нужно следовать простым пунктам:
☕️ сделать класс финальным.
☕️ сделать все поля приватными и создать только геттеры к ним. Сеттеры, разумеется, не нужно.
☕️ Сделать все mutable поля final, чтобы установить значение можно было только один раз.
☕️ инициализировать все поля через конструктор, выполняя глубокое копирование (то есть, копируя и сам объект, и его переменные, и переменные переменных, и так далее)
☕️ клонировать объекты mutable переменных в геттерах, чтобы возвращать только копии значений, а не ссылки на актуальные объекты.

Читать полностью…

Senior Java Developer

Быстрое умножение или деление на 2

Умножение на 2 означает сдвиг всех битов влево, а деление на 2 означает сдвиг вправо.

Например:
2 (Двоичный 10): сдвиг влево(умножение) дает 4 (Двоичный 100) и вправо(деление) дает 1 (Двоичный 1).

Читать полностью…
Subscribe to a channel