seniorjavist | Unsorted

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

-

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

Subscribe to a channel

Senior Java Developer

WebSocket + Jetty

В данном видео автор запускает WebSocket сервер на базе Jetty без Spring. Иногда хочется не целый каравай, а просто хлеб с маслом.
Вот и автору понадобился простой Java проект с socket-сервером без необходимости тащить спринг.

https://youtu.be/N6XYz7c8duI

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

Senior Java Developer

CopyOnWriteArrayList

CopyOnWriteArrayList — это реализация интерфейса List, оптимизированная для работы в многопоточном окружении.

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

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

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

Senior Java Developer

Как веб-разработчику продвинуться по карьерной лестнице?

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

Научитесь применять в работе архитектурные решения высшего пилотажа – пройдите обучение «Highload Architect» от OTUS.

За 5 месяцев вы научитесь:
✅ использовать в своих проектах решения, которые выдерживают миллионы запросов в секунду;
✅ правильно оптимизировать работоспособность серверов;
✅ эффективно использовать инструменты, которые уже есть в проектах.

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

Пройдите вступительное тестирование прямо сейчас и узнайте, готовы ли вы стать студентом курса: https://otus.pw/K9Cm/

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KHR36

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

Senior Java Developer

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

Регистрируйтесь: https://epic.st/Pgi8k
🎉 И получите первый подарок — гайд по профессии Java-разработчика.

Что будем делать на мини-курсе:

🔹 Обсудим, почему Java — один из самых востребованных языков
🔹 Познакомимся с кодом Java и рассмотрим ключевые элементы приложений на этом языке
🔹 Определим навыки для трудоустройства
🔹 Сравним Java и Python
🔹 Сделаем Java-приложения по инструкции

Как проходит мини-курс:

📌 Смотрите видео в удобное время
📌 Получаете полезные материалы
📌 Закрепляете навыки
📌 Посещаете итоговый вебинар

🎁 За время обучения вы получите 5 полезных материалов в подарок, сертификат на скидку 10 000 рублей на любой курс, персональную карьерную консультацию и доступ к изучению английского языка в Skillbox на год.

Успейте записаться бесплатно!

Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880

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

Senior Java Developer

Как управлять состоянием системы через события?

Event-driven архитектура — концепция программирования, которая позволяет создавать сложные приложения, используя событийно-ориентированный подход. Так создаются распределенные системы, которые легко масштабируются и обладают высокой отказоустойчивостью.
 
Начните изучать эту технологию на бесплатном открытом уроке «Архитектурный подход Event Driven Architecture» от OTUS: https://otus.pw/8xdG/

На занятии рассмотрим:
✔️ взаимодействие сервисов на основе событий;
✔️ плюсы и минусы такого подхода;
✔️ сочетания событийного и синхронного взаимодействия;
✔️ паттерны проектирования событий;
✔️ подход Event Sourcing и CQRS.

Урок пройдёт 27 сентября в 20:00 мск в рамках курса «Microservice Architecture».

👩‍💻 Пройдите вступительное тестирование прямо сейчас и зарегистрируйтесь на событие: https://otus.pw/8xdG/

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8JzxWt

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

Senior Java Developer

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

Синхронизация
:
Hashtable является синхронизированным, т. е. потокобезопасным. HashMap не синхронизирован и не является потокобезопасным.

null ключи и значения:
В HashMap можно использовать null в качестве ключа или значения. В Hashtable null в качестве ключа или значения вызовет ошибку.

Порядок элементов:
HashMap не гарантирует порядок элементов. Hashtable хранит элементы в том порядке, в котором они были вставлены.

Производительность:
Из-за синхронизации Hashtable работает медленнее, чем HashMap.

Размер таблицы:
В HashMap он динамически увеличивается, а в Hashtable изначально задается фиксированным.

Итерирование:
Hashtable использует Enumerator, а HashMap — Iterator.

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

Senior Java Developer

ListIterator

ListIterator — это интерфейс итератора, предназначенный специально для работы со списками.

В отличие от обычного Iterator, ListIterator позволяет не только итерировать список в прямом направлении, но и в обратном.
Он поддерживает операции для перемещения вперед и назад по списку.

ListIterator реализует методы:
next(): переход к следующему элементу.
previous(): переход к предыдущему элементу.
hasNext(): проверка, есть ли следующий элемент.
hasPrevious(): проверка, есть ли предыдущий элемент.
add(): добавление элемента в список.

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

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

Senior Java Developer

Интерфейс Iterable

Iterable используется для представления коллекций, которые можно итерировать или пройти в цикле.

Он определяет метод iterator(), который возвращает объект Iterator.
Этот Iterator позволяет поочередно получать элементы коллекций, также его можно использовать в цикле while или for-each для последовательного перебора всех элементов коллекции.

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

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

Senior Java Developer

♨️ Java Developer — канал любого уважающего себя джависта

Тонкости и секреты языка Java, разбор вопросов и решение задач с собеседований в Google, Amazon и Microsoft.

Подписывайся и прокачивай свои навыки: @senior_javist

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

Senior Java Developer

🔥 Мы в Yandex for Developers запускаем четыре новых канала для разработчиков

Теперь Yandex for — это целая семья телеграм-каналов по разным направлениям: фронтенд, бэкенд, мобильная разработка и ML.

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

Давайте обсуждать технологии, знакомиться и развивать сообщество инженеров:

➡️ Yandex for Mobile

➡️ Yandex for Frontend

➡️ Yandex for Backend

➡️ Yandex for ML

В общем, переходите на наши каналы — всё самое интересное только начинается!

Подписывайтесь 👉 @Yandex4Developers

Реклама. ООО "Яндекс". erid: 2VtzqvyJJuX

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

Senior Java Developer

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

В Java метод может принимать переменное количество аргументов двумя основными способами:

— Используя массив в качестве параметра. При определении метода указывается, что один из параметров — это массив некоторого типа. При вызове метода в этот параметр можно передать массив нужной длины.

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

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

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

Senior Java Developer

ByteBuffer

ByteBuffer используется для работы с байтовыми данными.
Он позволяет читать и записывать байты в буфер в памяти.

Основные способы использования:
— Чтение/запись байтовых данных из файлов, сетевых соединений и других источников. ByteBuffer обеспечивает эффективный доступ к данным без копирования.

— Преобразование между байтами и другими типами данных как примитивными (int, float), так и объектными. Можно получить доступ к байтам объекта или записать объект в байтовое представление.

— Компактное хранение данных в оперативной памяти. ByteBuffer располагается в памяти даже в случае больших объемов данных.

— Обработка байтовых данных как потока байт. Можно последовательно читать или записывать данные в буфер.

— Доступ к данным "по смещению" без копирования. Можно получить "вид" на часть буфера.

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

Senior Java Developer

Для специалистов в области искусственного интеллекта и машинного обучения 2023 год стал прорывным, и SmartDev 2023 — это отличный шанс разобраться во всех изменениях. Конференция пройдет 21 сентября в кинотеатре «Октябрь» и соберет экспертов из Сбера, VK, Яндекса, Kaspersky и многих других.

Что будет обсуждаться на конференции:
Прорыв в области AI: Как 2023 год стал переломным для прикладного применения искусственного интеллекта.
Большие языковые модели: Обсуждение текущей ситуации и возможностей для будущего.
GigaChat и Kandinsky: Два громких проекта от Сбера, которые задали новые стандарты в области AI и ML.
Стратегия и инновации: Как российский компаниям выйти на международную арену в новых реалиях. А также обсуждение глобальных технологических и экономических трендов.

Присоединяйтесь к трансляции докладов, участие бесплатное. Подробности и регистрация доступны на официальном сайте конференции.

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

Senior Java Developer

#вопросы_с_собеседований
Почему метод clone объявлен как protected?

Метод clone() по умолчанию объявлен как protected, чтобы ограничить возможность клонирования объектов.
Если бы метод был public, то любой код мог бы клонировать объекты класса. А это не всегда желательно по соображениям безопасности и корректности программы.

С protected доступом клонирование разрешено только внутри класса и его наследников. Таким образом разработчик класса может сам решить, будет ли класс поддерживать клонирование и как именно оно будет реализовано в методе clone().

Делая клонирование protected по умолчанию, Java принуждает разработчика сознательно разрешить клонирование класса путем переопределения метода clone() как public в самом классе.
Это позволяет более гибко контролировать возможности клонирования в каждом конкретном классе.

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

Senior Java Developer

Selector

Класс Selector используется для организации многоканального неблокирующего ввода-вывода.
Основная идея в том, что Selector позволяет одному потоку следить за состоянием множества каналов (сокетов, файловых каналов) и обрабатывать их события (готовность к чтению/записи).

Возможности Selector:
— Регистрация множества каналов в Selector для мониторинга.
— Проверка готовности зарегистрированных каналов к операциям чтения, записи.
— Извлечение готовых каналов и выполнение операций с ними.
— Отмена регистрации каналов в Selector.

Использование Selector позволяет избежать блокировки на операциях чтения/записи по каналам и эффективно масштабировать приложение для одновременной работы с большим количеством соединений.
Класс часто применяется в сетевых серверах для неблокирующей обработки большого числа клиентских соединений в одном потоке.

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

Senior Java Developer

Как управлять состоянием системы через события?

Event-driven архитектура — концепция программирования, которая позволяет создавать сложные приложения, используя событийно-ориентированный подход. Так создаются распределенные системы, которые легко масштабируются и обладают высокой отказоустойчивостью.
 
Начните изучать эту технологию на бесплатном открытом уроке «Архитектурный подход Event Driven Architecture» от OTUS: https://otus.pw/OKs1/

На занятии рассмотрим:
✔️ взаимодействие сервисов на основе событий;
✔️ плюсы и минусы такого подхода;
✔️ сочетания событийного и синхронного взаимодействия;
✔️ паттерны проектирования событий;
✔️ подход Event Sourcing и CQRS.

Урок пройдёт 27 сентября в 20:00 мск в рамках курса «Microservice Architecture».

👩‍💻 Пройдите вступительное тестирование прямо сейчас и зарегистрируйтесь на событие: https://otus.pw/OKs1/

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KQ9xk

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

Senior Java Developer

ConcurrentHashMap

ConcurrentHashMap — это реализация интерфейса Map, оптимизированная для многопоточной работы.
Она позволяет эффективно выполнять операции чтения и записи данных из нескольких потоков без необходимости явной блокировки всей структуры данных.

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

Особенно полезна, когда количество операций чтения значительно превышает количество операций записи.

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

Senior Java Developer

Метод isEmpty()

Метод isEmpty() позволяет проверить, пустая ли коллекция или строка.
Он определен в интерфейсе java.util.Collection, поэтому доступен для всех коллекций, таких как ArrayList, HashSet и других. Также есть отдельная реализация для класса String.

Метод возвращает значение true, если коллекция или строка не содержат элементов, и false — если в коллекции или строке есть хотя бы один элемент.
Это позволяет упростить проверку на пустоту, вместо сравнения размера коллекции с нулем.

#это_база

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

Senior Java Developer

Контейнер Optional

Optional — это контейнер, который может содержать какое-то значение или не содержать ничего.
Он используется для обозначения отсутствия значения вместо null. Это позволяет избежать ошибок NullPointerException.

Optional появился в Java 8. Он представлен классом java.util.Optional.
Чтобы создать экземпляр Optional, используются статические методы:
empty() для пустого Optional.
of() для Optional с заданным значением.

Для получения значения из Optional используются методы get(), или orElse() с указанием значения по умолчанию. Также есть методы фильтрации значений, например filter(), map() и flatMap().

#это_база

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

Senior Java Developer

#вопросы_с_собеседований
Какие коллекции синхронизированы?

Vector
— синхронизированный аналог ArrayList.
Hashtable — синхронизированный аналог HashMap.
Stack — синхронизированный стек на основе Vector.
Collections.synchronizedList() — возвращает синхронизированный список на основе переданного в нее списка.
Collections.synchronizedSet() — то же самое для множества.
Collections.synchronizedMap() — для отображения.

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

Обычно предпочтительнее использовать несинхронизированные коллекции и синхронизировать доступ к ним самостоятельно при необходимости, чтобы не терять производительность.
Это можно сделать с помощью методов synchronizedCollection(), synchronizedList(), synchronizedSet(), synchronizedMap().

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

Senior Java Developer

Умение работать с REST API на Scala и фреймворком http4s является важным навыком для разработчиков Java и Scala, так как это позволяет им эффективно создавать высокопроизводительные и масштабируемые веб-приложения, обеспечивая быстрый и надежный обмен данными между клиентами и серверами.

Начните знакомство с этими инструментами с открытого урока «Пишем REST API на Scala и http4s» от OTUS.

Преподаватель 👨‍💻 Валентин Шилин — старший программист/аналитик данных Deutsche Telekom IT GmbH. Занятие пройдёт 🗓 21 сентября в 20:00 мск в рамках онлайн-курса «Scala-разработчик».

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

👉 Регистрируйтесь прямо сейчас

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

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KWqzg

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

Senior Java Developer

В поисках надежного и полезного IT-сообщества?

Добро пожаловать к нам - /channel/+mqJjTeBxr24yZGRi !

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

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

🔝Присоединяйся к нашему активному сообществу, общайся с единомышленниками и открывай для себя новые возможности в IT-индустрии!

Реклама. ООО "ХЕКСЛЕТ РУС". ИНН 7325174845. erid: LjN8KVKBm

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

Senior Java Developer

Абстракция в Java

Абстракция — это способность выделять существенные характеристики объекта и упускать несущественные.
Абстракция позволяет сосредоточиться на важных свойствах и поведении объекта, скрыв детали реализации.

В Java абстракция реализуется с помощью абстрактных классов и интерфейсов.

Абстрактный класс содержит абстрактные методы без реализации. Подклассы обязаны реализовать эти методы.
Интерфейс задает "контракт", описывая поведение классов без деталей реализации. Классы реализуют интерфейс.

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

#это_база

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

Senior Java Developer

Trie

Trie (дерево префиксов) — это структура данных в виде дерева, используемая для хранения ассоциативных данных, например словарей.
Она позволяет эффективно хранить и находить слова по их префиксам.

Trie состоит из узлов, каждый из которых может ссылаться на несколько дочерних узлов. Каждая ветвь от корня до листа представляет одно слово, а символы слова образуют путь от корня до узла-листа.
Узлы, которые являются концом слова, помечаются специальным флагом.

Поиск слова заключается в прохождении от корня по ветвям символов этого слова. Добавление нового слова — добавление отсутствующих узлов для его символов.

Trie оптимальна для хранения словарей и поиска по префиксам благодаря эффективности этих операций.
В Java для реализации Trie удобно использовать HashMap в узлах для связей с дочерними узлами.

#это_база

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

Senior Java Developer

#вопросы_с_собеседований
Может ли один блок catch отлавливать несколько исключений (с одной и разных веток наследований)?

Да, в Java один блок catch может обрабатывать сразу несколько типов исключений.
Это работает следующим образом:

— При определении блока catch в круглых скобках перечисляются классы исключений через вертикальную черту "|" . Это могут быть классы исключений как с одной ветки наследования, так и с разных.

— Когда во время выполнения программы возникает исключение, Java проверяет, подходит ли оно под один из указанных в catch типов. Если подходит — выполняется код внутри данного блока catch.

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

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

Senior Java Developer

Micronaut

Micronaut это относительно новый фреймворк для разработки микросервисов на Java.
Основные преимущества — высокая производительность, низкое потребление памяти, интеграция с популярными технологиями микросервисов.
Фреймворк активно развивается и используется в продакшене несколькими крупными компаниями.

Области применения:
— Разработка высокопроизводительных микросервисов. Micronaut оптимизирован для создания легковесных микросервисов с минимальным использованием ресурсов.
— Построение serverless-приложений. Благодаря низким накладным расходам при старте фреймворк хорошо подходит для бессерверных архитектур на основе функций.
— Быстрая разработка микросервисов. Фреймворк содержит много готовой инфраструктуры для разработки, позволяя быстрее создавать сервисы.
— Интеграция с GraalVM. Micronaut оптимизирован для работы со средой исполнения GraalVM, что дает дополнительное ускорение.

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

Senior Java Developer

StringBuilder

StringBuilderэто класс для работы с изменяемыми строками, аналогичный StringBuffer. API класса StringBuilder такой же, как у StringBuffer, он также хранит строку в виде модифицируемого массива символов.

Но, в отличие от StringBuffer, StringBuilder не является потокобезопасным. Он работает быстрее за счет отсутствия синхронизации.
Поэтому его рекомендуется использовать в однопоточных приложениях для работы со строками, когда нет необходимости в синхронизации.

При создании можно задать начальную емкость buffer'а в виде размера массива символов.
Если строка превышает текущую емкость, она автоматически расширяется с сохранением содержимого.

#это_база

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

Senior Java Developer

StringBuffer

StringBufferэто класс, предназначенный для работы со строками. Он позволяет создавать модифицируемые (изменяемые) строки.

В отличие от класса String, объекты StringBuffer можно изменять после их создания, используя различные методы, такие как append(), insert(), delete().
Также StringBuffer эффективнее String при частых изменениях строки, так как не создает новый объект при каждом изменении.

Класс является потокобезопасным, т. е. может использоваться в многопоточных приложениях.

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

#это_база

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

Senior Java Developer

#вопросы_с_собеседований
Что такое finalize? Зачем он нужен?

finalize()
это метод, который вызывается перед уничтожением объекта сборщиком мусора в Java.

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

Финализатор может быть полезен, когда нужно гарантировать, что объект освободит какие-то ресурсы даже в случае, если программист забыл явно вызвать метод закрытия ресурсов.
Однако, на практике лучше не полагаться на него, так как неизвестно, когда именно сборщик мусора вызовет его.
Поэтому рекомендуется явно освобождать ресурсы с помощью try-finally блоков.

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

Senior Java Developer

FileChannel

FileChannel используется для работы с файлами на низкоуровневом вводе-выводе.

Основные возможности класса FileChannel:
— Чтение данных из файла и запись данных в файл.
— Работа с файлом по смещениям. Можно получить текущее смещение в файле, переместить указатель чтения/записи в нужное смещение.
— Маппинг файлов в память. Файл можно отобразить в память и работать с его содержимым как с массивом байтов.
— Блокировка частей файла. Позволяет защитить критические участки файла от одновременной записи.
— Асинхронная работа с файлами.

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

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