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

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

#вопросы_с_собеседований
Для чего нужен метод hashCode()?

Метод hashCode() необходим для вычисления хэш кода переданного в качестве входного параметра объекта. В Java это целое число, в более широком смысле - битовая строка фиксированной длины, полученная из массива произвольной длины. Этот метод реализован таким образом, что для одного и того же входного объекта, хэш код всегда будет одинаковым. Следует понимать, что в Java множество возможных хэш кодов ограничено типом int, а множество объектов ничем не ограничено. Из-за этого, вполне возможна ситуация, что хэш коды разных объектов могут совпасть:
• если хэш коды разные, то и объекты гарантированно разные;
• если хэш коды равны, то объекты не обязательно равны(могут быть разные).

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

Senior Java Developer

#вопросы_с_собеседований
В чём разница между «конкуренцией» и «параллелизмом»?

Конкуренция — это способ одновременного решения множества задач.

Признаки:
• Наличие нескольких потоков управления (например, Thread в Java, корутина в Kotlin), если поток управления один, то конкурентного выполнения быть не может
• Недетерминированный результат выполнения. Результат зависит от случайных событий, реализации и того, как была проведена синхронизация. Даже если каждый поток полностью детерминированный, итоговый результат будет недетерминированным

Параллелизм — это способ выполнения разных частей одной задачи.

Признаки:
• Необязательно имеет несколько потоков управления
• Может приводить к детерминированному результату, так, например, результат умножения каждого элемента массива на число, не изменится, если умножать его по частям параллельно.

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

Senior Java Developer

#вопросы_с_собеседований
Может ли статический метод быть переопределён или перегружен?

Перегружен - да. Всё работает точно так же, как и с обычными методами - 2 статических метода могут иметь одинаковое имя, если количество их параметров или типов различается.

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

В целом, к статическим полям и методам рекомендуется обращаться через имя класса, а не объект.

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

Senior Java Developer

«Входить в IT неспеша» или как стать Middle Java Backend разработчиком минуя ступень Junior

Статья о том, как шаг за шагом при дефиците свободного времени обучиться и устроиться на работу сразу Middle Java разработчиком перескочив через Junior ступеньку, основанная на личном опыте, и о том, как мне это помогло, когда сразу после трудоустройства пришлось тянуть проект практически в solo.

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

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

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).

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

Senior Java Developer

#вопросы_с_собеседований
Stack считается «устаревшим». Чем его рекомендуют заменять? Почему?

Stack был добавлен в Java 1.0 как реализация стека LIFO (last-in-first-out) и является расширением коллекции Vector, хотя это несколько нарушает понятие стека (например, класс Vector предоставляет возможность обращаться к любому элементу по индексу). Является частично синхронизированной коллекцией (кроме метода добавления push()) с вытекающими отсюда последствиями в виде негативного воздействия на производительность. После добавления в Java 1.6 интерфейса Deque, рекомендуется использовать реализации именно этого интерфейса, например, ArrayDeque.

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

Senior Java Developer

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

Присоединение вызова метода к телу метода называется связыванием. Если связывание проводится компилятором (компоновщиком) перед запуском программы, то оно называется статическим или ранним связыванием (early binding).

В свою очередь, позднее связывание (late binding) - это связывание, проводимое непосредственно во время выполнения программы, в зависимости от типа объекта. Позднее связывание также называют динамическим (dynamic) или связыванием на стадии выполнения (runtime binding). В языках, реализующих позднее связывание, должен существовать механизм определения фактического типа объекта во время работы программы, для вызова подходящего метода. Иначе говоря, компилятор не знает тип объекта, но механизм вызова методов определяет его и вызывает соответствующее тело метода. Механизм позднего связывания зависит от конкретного языка, но нетрудно предположить, что для его реализации в объекты должна включаться какая-то дополнительная информация.

Для всех методов Java используется механизм позднего (динамического) связывания, если только метод не был объявлен как final (приватные методы являются final по умолчанию).

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

Senior Java Developer

Spring Transactions

Spring Transactions - это механизм, предоставляемый Spring Framework, который позволяет управлять транзакциями в Java-приложениях.
Он предоставляет абстракцию уровня транзакций, которая скрывает детали управления транзакциями в низкоуровневых API базы данных, и упрощает создание транзакционных приложений.

В коде на первом изображении мы используем аннотацию @Transactional для указания того, что метод createUser() должен выполняться в контексте транзакции. Все операции с базой данных, включая вставку новой записи, будут обернуты в транзакцию.

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

В результате выполнения данного кода, изменения в базе данных будут отменены, так как выполнявшиеся операции были выполнены в контексте транзакции, которая была отменена после генерации исключения.

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

Senior Java Developer

#вопросы_с_собеседований
Каковы особенности многопоточности в Java EE и Spring?

Одной из особенностей многопоточности в Java EE и Spring является использование синхронизации и примитивов синхронизации, таких как блокировки и семафоры, для предотвращения конфликтов между потоками.

Ещё одна важная особенность - использование пулов потоков для более эффективного использования ресурсов и увеличение производительности.

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

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