seniorjavist | Unsorted

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

-

Изучаем Java. По вопросам сотрудничества: @seniorvladislav

Subscribe to a channel

Senior Java Developer

Сжатие указателей в Java

В статье речь пойдет о реализации сжатия указателей в Java Virtual Machine 64-bit, которое контролируется опцией UseCompressedOops и включено по-умолчанию для 64 битных систем начиная с Java SE 6u23.

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

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

Senior Java Developer

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

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

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

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

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

Senior Java Developer

В чём разница между «конкуренцией» и «параллелизмом»?

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

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

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

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

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

Senior Java Developer

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

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

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

Senior Java Developer

Почему в век развитого интернета в онлайн-звонках до сих пор можно встретить плохое качество звука, шумы и эхо?

Об этих и других звуковых искажениях рассказала команда VK Звонков. В статье на Хабре они объяснили, из чего складывается качество звука, какие требования к передаче звука есть у систем видеозвонков, как работать с качеством и разборчивостью голоса в системе для аудио- или видеосвязи, какие методики и алгоритмы измерения качества речи вообще существуют и т.д.

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

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

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

Senior Java Developer

#вопросы_с_собеседований
Что такое «зелёные потоки» и есть ли они в Java?

Зелёные (легковесные) потоки(green threads) - потоки эмулируемые виртуальной машиной или средой исполнения. Создание зелёного потока не подразумевает под собой создание реального потока ОС.

Виртуальная машина Java берёт на себя заботу о переключении между разными green threads, а сама машина работает как один поток ОС. Это даёт несколько преимуществ. Потоки ОС относительно дороги в большинстве POSIX-систем. Кроме того, переключение между native threads гораздо медленнее, чем между green threads.

Это всё означает, что в некоторых ситуациях green threads гораздо выгоднее, чем native threads. Система может поддерживать гораздо большее количество green threads, чем потоков . Например, гораздо практичнее запускать новый green thread для нового HTTP-соединения к веб-серверу, вместо создания нового native thread.

Однако есть и недостатки. Самый большой заключается в том, что вы не можете исполнять два потока одновременно. Поскольку существует только один native thread, только он и вызывается планировщиком ОС. Даже если у вас несколько процессоров и несколько green threads, только один процессор может вызывать green thread. И всё потому, что с точки зрения планировщика заданий ОС всё это выглядит одним потоком.

Начиная с версии 1.2 Java поддерживает native threads, и с тех пор они используются по умолчанию.

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

Senior Java Developer

🔥 Пройдите тест по Kotlin из 10 вопросов и проверьте, насколько вы готовы к обучению на онлайн-курсе "Kotlin Backend Developer" от OTUS. Курс доступен в рассрочку.

На курсе вы:
👉 Освоите практики гибкой архитектуры и сможете применять их в проектах на любых языках
👉 Откроете для себя широкий спектр технологий и инструментов разработки (около 10 различных фреймворков)
👉 Изучите Kotlin на высоком уровне, включая DSL, мультиплатформенность, корутины
👉 Погрузитесь в темы высокой нагрузки, больших данных, масштабируемости и высокой доступности
👉 Освоите классические и передовые архитектурные шаблоны

❗️ ПРОЙТИ ТЕСТ — https://otus.pw/WBTz/

💣 Сможете пройти успешно тест — бонусом получите курс по GIT в записи бесплатно + доступ к 2 открытым урокам курса!

Нативная интеграция. Информация о продукте www.otus.ru

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

Senior Java Developer

Ребят, хватит спамить мне в лс по поводу безлимитных запросов к MidJourney-5.

Оставляю ссылку на официальный канал, где она доступна бесплатно без лимитов вместе с ChatGPT: @midjourney5

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

Senior Java Developer

💻 Создание многопоточного клиент-серверного приложения на Java

В этом видео преподаватель пишет сервер на языке Java и простой клиент, которые передают информацию друг другу с помощью сокетов.

Смотреть на YouTube

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

Senior Java Developer

♻️ Какими должны быть классы по Clean Code

В ролике подробно рассказано, как правильно создавать классы по парадигмам из книги Чистый код. Автору видео удалось разъяснить тему ещё лучше, чем в переводе книги.

Смотреть на YouTube

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

Senior Java Developer

🧠 MVC, MVP, MVVM

Уверены,
вы уже слышали про эти странные слова, но не совсем понимали, что они значат. Это видео призвано ответить на все ваши вопросы.

Автор на примерах показывает различия между этими паттернами и объясняет, когда какой использовать. Всё написано на языке Java.

https://youtu.be/HC33Mggec3k

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

Senior Java Developer

Что такое ThreadLocal-переменная?

ThreadLocal - класс, позволяющий имея одну переменную, иметь различное её значение для каждого из потоков.

У каждого потока - т.е. экземпляра класса Thread - есть ассоциированная с ним таблица ThreadLocal-переменных. Ключами таблицы являются cсылки на объекты класса ThreadLocal, а значениями - ссылки на объекты, «захваченные» ThreadLocal-переменными, т.е. ThreadLocal-переменные отличаются от обычных переменных тем, что у каждого потока свой собственный, индивидуально инициализируемый экземпляр переменной. Доступ к значению можно получить через методы get() или set().

Например, если мы объявим ThreadLocal-переменную: ThreadLocal<Object> locals = new ThreadLocal<Object>();. А затем, в потоке, сделаем locals.set(myObject), то ключом таблицы будет ссылка на объект locals, а значением - ссылка на объект myObject. При этом для другого потока существует возможность «положить» внутрь locals другое значение.

Следует обратить внимание, что ThreadLocal изолирует именно ссылки на объекты, а не сами объекты. Если изолированные внутри потоков ссылки ведут на один и тот же объект, то возможны коллизии.

Так же важно отметить, что т.к. ThreadLocal-переменные изолированы в потоках, то инициализация такой переменной должна происходить в том же потоке, в котором она будет использоваться. Ошибкой является инициализация такой переменной (вызов метода set()) в главном потоке приложения, потому как в данном случае значение, переданное в методе set(), будет «захвачено» для главного потока, и при вызове метода get() в целевом потоке будет возвращен null.

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

Senior Java Developer

Проверяем наличие дубликатов в массиве в Java

Мы можем работать лучше, используя Хеширование. Идея состоит в том, чтобы пройти по заданному массиву и вставить каждый встреченный элемент в HashSet. Теперь, если встреченный элемент уже присутствовал в наборе, он является дубликатом. Временная сложность этого решения O(n) но вспомогательное пространство используется O(n).

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

Другие способы проверить массив на дубликаты можно найти здесь.

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

Senior Java Developer

Метод compareTo()

В Java метод compareTo() получает значение 0, если аргумент является строкой лексически равной данной строке; значение меньше 0, если аргумент является строкой лексически большей, чем сравниваемая строка; и значение больше 0, если аргумент является строкой лексически меньшей этой строки.

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

Senior Java Developer

Готовы освоить Best Practice по разработке микросервисной архитектуры и сложных отказоустойчивых систем? Сделайте первые шаги на открытом уроке «Модульные монолиты и DDD» 🗓 17 апреля в 20:00 мск в OTUS.

На занятии вместе со Станиславом Щетинниковым, директором разработки с 10-летним опытом, рассмотрим основные паттерны для построения и написания модульных монолитов. Особое внимание будет уделено паттернам DDD.

👨‍💻 Занятие будет полезно для back-end разработчикам, тимлидам и администраторам.

👉 Для регистрации на урок пройдите вступительное тестирование — https://otus.pw/JuRj/

А если вам понравятся бесплатные уроки, продолжить обучение можно будет уже на курсе «Microservice architecture» от OTUS. Оплата курса возможна в рассрочку.

Реклама. Информация о рекламодателе на сайте www.otus.ru

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

Senior Java Developer

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

Ассоциация
обозначает связь между объектами. Композиция и агрегация — частные случаи ассоциации «часть-целое».

Агрегация предполагает, что объекты связаны взаимоотношением «part-of» (часть). Композиция более строгий вариант агрегации. Дополнительно к требованию «part-of» накладывается условие, что экземпляр «части» может входить только в одно целое (или никуда не входить), в то время как в случае агрегации экземпляр «части» может входить в несколько целых.

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

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

Senior Java Developer

Познакомьтесь с востребованным направлением программирования — Java-разработкой. Освойте базовые инструменты на практике и выйдите на рынок IT. Сделайте первый шаг — участвуйте в онлайн-интенсиве Skillbox с 27 по 29 апреля в 15:00 по московскому времени: 👉 https://epic.st/fDe9uE

После регистрации сразу отправим вам на почту гайд по профессии Java-разработчика: из него вы узнаете, сложно ли изучить Java, сколько зарабатывают специалисты и как начать карьеру в этой сфере.

Интенсив ведёт Даниил Пилипенко — основатель и директор центра подбора IT-специалистов SymbioWay.
С 2004 года разрабатывает и руководит разработкой на Java, PHP и во фронтенде.
Он расскажет, как устроен язык Java, и научит писать простейший код, даже если вы никогда не программировали. Объяснит, как работать с файлами и переменными, а также где найти первых клиентов.

🎁 Всем, кто дойдёт до конца интенсива, подарим электронную книгу издательства МИФ «Разум под контролем» Роджера Сайпа и Робба Збиерски.

Подключайтесь к прямым эфирам и используйте возможность получить сертификат на скидку 10 000 рублей на любой курс Skillbox.

Сделайте первый шаг к перспективной IT-профессии!

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

Senior Java Developer

Успей подать заявку в Школу бэкенд-разработки от Академии Яндекса!

Мы приглашаем специалистов с опытом коммерческой разработки не менее года, готовых получать новые знания о бэкенде высоконагруженных сервисов и не только. В этом году обучение пройдет по четырем трекам: Python, Java, C++ и Go.

Обучение состоит из двух этапов:
🔸 с 6 июня по 31 июля — лекции и практические задания в онлайн-формате;
🔸 с 1 по 27 августа — офлайн-этап: студенты соберутся в команды, чтобы реализовать настоящий проект от Яндекса в офисах в Москве, Белграде и Алматы.

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

Подать заявку можно до 27 апреля: https://clck.ru/34C7VQ

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

Senior Java Developer

Spring @ Transactional — ошибки, которые совершали все

Вероятно, одной из наиболее часто используемых аннотаций Spring является @ Transactional. Несмотря на ее популярность, иногда она используется неправильно, в результате чего получается не совсем то, что задумал инженер-программист.

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

https://habr.com/ru/companies/otus/articles/574470/

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

Senior Java Developer

Что такое ordering, as-if-serial semantics, sequential consistency, visibility, atomicity, happens-before, mutual exclusion, safe publication?

ordering
механизм, который определяет, когда один поток может увидеть out-of-order (неверный) порядок исполнения инструкций другого потока. CPU для для повышения производительности может переупорядочивать процессорные инструкции и выполнять их в произвольном порядке до тех пор пока для потока внутри не будет видно никаких отличий. Гарантия, предоставляемая этим механизмом, называется as-if-serial semantics.

sequential consistency - то же что и as-if-serial semantics, гарантия того, что в рамках одного потока побочные эффекты от всех операций будут такие, как будто все операции выполняются последовательно.

visibility определяет, когда действия в одном потоке становятся видны из другого потока.

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

atomicity — атомарность операций. Атомарная операция выглядит единой и неделимой командой процессора, которая может быть или уже выполненной или ещё невыполненной.

mutual exclusion (взаимоисключающая блокировка, семафор с одним состоянием) - механизм, гарантирующий потоку исключительный доступ к ресурсу. Используется для предотвращения одновременного доступа к общему ресурсу. В каждый момент времени таким ресурсом может владеть только один поток. Простейший пример: synchronized(obj) { … }.

safe publication? - показ объектов другим потокам из текущего, не нарушая ограничений visibility. Способы такой публикации в Java:
static{} инициализатор;
volatile переменные;
atomic переменные;
• сохранение в разделяемой переменной, корректно защищенной с использованием synchronized(), синхронизаторов или других конструкций, создающих read/write memory barrier;
final переменные в разделяемом объекте, который был корректно проинициализирован.

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

Senior Java Developer

Чем отличается процесс от потока?

Процесс — экземпляр программы во время выполнения, независимый объект, которому выделены системные ресурсы (например, процессорное время и память). Каждый процесс выполняется в отдельном адресном пространстве: один процесс не может получить доступ к переменным и структурам данных другого. Если процесс хочет получить доступ к чужим ресурсам, необходимо использовать межпроцессное взаимодействие. Это могут быть конвейеры, файлы, каналы связи между компьютерами и многое другое.

Для каждого процесса ОС создает так называемое «виртуальное адресное пространство», к которому процесс имеет прямой доступ. Это пространство принадлежит процессу, содержит только его данные и находится в полном его распоряжении. Операционная система же отвечает за то, как виртуальное пространство процесса проецируется на физическую память.

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

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

Senior Java Developer

Какие логические операции и операторы вы знаете?

& : Логическое AND (И);
&& : Сокращённое AND;
| : Логическое OR (ИЛИ);
|| : Сокращённое OR;
^ : Логическое XOR (исключающее OR (ИЛИ));
! : Логическое унарное NOT (НЕ);
&= : AND с присваиванием;
|= : OR с присваиванием;
^= : XOR с присваиванием;
== : Равно;
!= : Не равно;
?: : Тернарный (троичный) условный оператор.

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

Senior Java Developer

Что такое класс Object? Какие в нем есть методы?

Object это базовый класс для всех остальных объектов в Java. Любой класс наследуется от Object и, соответственно, наследуют его методы:

public boolean equals(Object obj) – служит для сравнения объектов по значению;

int hashCode() – возвращает hash код для объекта;

String toString() – возвращает строковое представление объекта;

Class getClass() – возвращает класс объекта во время выполнения;

protected Object clone() – создает и возвращает копию объекта;

void notify() – возобновляет поток, ожидающий монитор;

void notifyAll() – возобновляет все потоки, ожидающие монитор;

void wait() – остановка вызвавшего метод потока до момента пока другой поток не вызовет метод notify() или notifyAll() для этого объекта;

void wait(long timeout) – остановка вызвавшего метод потока на определённое время или пока другой поток не вызовет метод notify() или notifyAll() для этого объекта;

void wait(long timeout, int nanos) – остановка вызвавшего метод потока на определённое время или пока другой поток не вызовет метод notify() или notifyAll() для этого объекта;

protected void finalize() – может вызываться сборщиком мусора в момент удаления объекта при сборке мусора.

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

Senior Java Developer

💪 Пройди тест по Java и проверь свои знания.

Ответишь
— пройдешь на продвинутый курс "Java Developer. Professional" от OTUS по специальной цене + получишь запись мастер-класса от преподавателя курса🎁 .

✍️ ПРОЙТИ ТЕСТ: https://otus.pw/C3DC/

Реклама. Информация о рекламодателе на сайте otus.ru

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

Senior Java Developer

Открой для себя лучший способ найти работу на удаленке или в офисе: подпишись на Java Job

Здесь вы найдете:
➡️ Вакансии от ведущих IT-компаний (таких как Яндекс, Сбербанк, Intel)
➡️ Вакансии стартапов, которые не представлены на других сайтах;
➡️ Предложения от зарубежных компаний с возможностью релокации;
➡️ Стажировки и обучающие материалы для карьерного роста

Цени свое время - подпишись на @Java_Job

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

Senior Java Developer

☕️ Учимся работать с камерой на Java

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

Если вы только начинаете знакомиться с Java и уже приближаетесь к тому, чтобы написать какое-то осмысленное приложение, то это видео точно рекомендовано к просмотру.

https://youtu.be/JodGfWIzMws

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

Senior Java Developer

Как продавать свои услуги и продукты в Telegram на 100-тни тысяч рублей?

Не важно в какой нише ты работаешь. Будь ты таргетолог, маркетолог, фитнес-тренер, йога-терапевт, писатель или спец по тестированию матрасов.

Ты можешь стабильно получать деньги в ТГ. Например, мы создали канал, где просто пишем +/- одинаковые посты и каждый день 30-40к падают на карту 💳

Мы протестировали свою схему на учениках. За 4 недели они заработали 44 млн ₽ (с каналами от 123 подписчиков). Большинство вообще не знали о чем писать и что продавать.

Сейчас в канале выбираем новичка, который по нашей схеме заработает первые 100-500 тысяч в ТГ с 0 без денег на рекламу.

📌Все шаги схемы – цифры, подробности, лайфхаки, ты сможешь наблюдать в формате реалити шоу.

Смотри. Повторяй. Зарабатывай.

Заходи бесплатно в реалити по ссылке:
/channel/+hSwl8c3JQ7EyMjMy

📌Если герой не заработает денег, то мы отправим на Бали случайного подписчика. Ты с нами? Жми👇

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

Senior Java Developer

Стартануть в IT быстро и эффективно — подготовительный курс по Java-разработке.

Всего 990 ₽ и ваше жгучее желание начать. Приходите с любым бэкграундом: нам не важны возраст, пол, образование и текущая профессия.

🗓 Начинаем 18 апреля!

Даем: 62 урока с практикой в браузере, 3 онлайн вебинара и 1 сессию лайвкодинга с практикующим разработчиком.

Получаем: крепкие знания базы языка, умение понимать код и первую программу на Java, написанную вместе с наставником.

🔜 Запишитесь прямо сейчас!

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

Senior Java Developer

#вопросы_с_собеседований
Что такое пакет? Перечислите различные преимущества пакетов.

Пакеты — это набор связанных классов и интерфейсов, которые связаны вместе. Используя пакеты, разработчики могут легко модулировать код и оптимизировать его повторное использование. Кроме того, код внутри пакетов может быть импортирован другими классами и использован повторно. Несколько его преимуществ:
• Пакеты на Java помогают избежать конфликтов имен.
• Они обеспечивают более легкий контроль доступа к коду.
• Пакеты также могут содержать скрытые классы, которые не видны внешним классам и используются только внутри пакета..
• Создает правильную иерархическую структуру, которая упрощает поиск связанных классов.

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

Senior Java Developer

#вопросы_с_собеседований
Где разрешена инициализация статических/нестатических полей?

☕️ Статические поля можно инициализировать при объявлении, в статическом или нестатическом блоке инициализации.
☕️ Нестатические поля можно инициализировать при объявлении, в нестатическом блоке инициализации или в конструкторе.

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