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

Релиз через два дня. Код готов. Почти...
Остались тесты. Ну, точнее — покрытие. Потому что 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

👩‍💻 SpELые приложения на Spring

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

🗓 21 мая в 19:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework».

О чём поговорим:
✔️Разоберем, для чего нужен SpEL.
✔️Рассмотрим, в каких проектах Spring его можно встретить.

Кому будет интересно:
Spring-разработчикам, Java-бэкенд-инженерам, архитекторам ПО, IT-специалистам и студентам, заинтересованным в технологиях Spring.

В результате урока:
Узнаете, для чего нужен SpEL и где его можно применять.

🔗 Ссылка на регистрацию: https://otus.pw/fBo8/

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

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

Senior Java Developer

TreeMap

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

Элементы в TreeMap автоматически сортируются по ключу. Также можно использовать методы get(key), remove(key) и др., чтобы получить, удалить или изменить элементы в TreeMap.

В этом примере мы создаем TreeMap, добавляем в нее несколько элементов и выводим все элементы. При запуске программы в консоли вы увидите следующий вывод:

1 - один
2 - два
3 - три
4 - четыре
5 - пять

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

Senior Java Developer

Spring Context

Модуль Spring Context является частью фреймворка Spring и представляет собой IoC (Inversion of Control) контейнер. Он отвечает за управление объектами приложения и использует внедрение зависимостей для достижения инверсии управления.

Интерфейсы BeanFactory и ApplicationContext представляют контейнер Spring IoC.
- BeanFactory является корневым интерфейсом для доступа к контейнеру Spring и предоставляет базовые функции для управления бинами.
- ApplicationContext является под интерфейсом BeanFactory, поэтому он предлагает все функции BeanFactory, а также предоставляет разрешение сообщений, поддержку интернационализации, публикацию событий и контексты специфические для уровня приложения.

В этом примере мы создаем экземпляр ApplicationContext, используя AnnotationConfigApplicationContext и передавая ему класс конфигурации AppConfig.
Далее получаем бин MyService, вызывая метод getBean().
И наконец, вызываем метод getMessage() у экземпляра myService и выводим результат на экран.

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

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 есть возможность использования асинхронных методов, что позволяет не блокировать основной поток выполнения и ускорять обработку запросов.

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

Senior Java Developer

IoC (Inversion of Control)

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

В Java IoC реализуется с помощью DI (Dependency Injection) - механизма внедрения зависимостей.

В этом примере мы создали объект User в одном месте нашего приложения, а затем передали его как зависимость в объект UserController, который в свою очередь воспользовался этой зависимостью для выполнения своей работы. Это и есть пример IoC и DI в Java.

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

Senior Java Developer

Производительность и наблюдаемость бэкенда. Поиск проблем в продакшене

Признак мастерства бэкендера — глубокое понимание своего стека и того, как работает код в продакшене. Недаром во многих бигтех-компаниях принят подход “you build it, you run it”. Хороший программист не только умеет запилить фичи, но и знает, как работает в проде его софт, и может разобраться, почему его сервис тормозит. Для этого нужно знать особенности рантаймов, инфраструктуры и современные подходы к сбору телеметрии.

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

🌐 В программе курса:

🤩 Архитектура бэкенд-серверов (Golang, Java, PHP и др) и её особенности: модели обработки запросов и параметры конфигурации, влияющих на производительность
🤩 Zero-code instrumentation на разных языках программирования
🤩 Open Telemetry: основы технологии и применение на примере SigNoz
🤩 Суб-real-time телеметрия поверх UDP c PINBA и “промстэком” (Grafana/Prometheus)

🥸 Кто мы: R&D-центр Devhands. Автор курса — Михаил Курмаев, эксперт по сложным распределённым системам. Долгое время строил платформу в Badoo/Bumble, сейчас в Т-банке развивает дата-платформу.

🗓 Старт курса: 3 июня, 4 недели обучения.
Изучить программу и записаться можно здесь.

Ждем вас!

Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2Vtzqx225tQ

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

Senior Java Developer

ThreadGroup

ThreadGroup представляет собой группу потоков. Кроме того, группа потоков может также включать в себя другие группы потоков. Они образуют дерево, в котором каждая группа потоков, кроме начальной, имеет родителя.
Это позволяет удобно управлять несколькими потоками одновременно, например, приостанавливать, возобновлять или прерывать группу потоков одним вызовом метода.

В этом примере мы создаем группу потоков с именем MyGroup и добавляем в нее два потока. Затем мы запускаем эти потоки и выводим информацию о группе с помощью метода list().

Результатом работы этого кода будет вывод информации о группе и сообщений от двух запущенных потоков.

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