seniorjavist | Unsorted

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

-

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

Subscribe to a channel

Senior Java Developer

One Weekend Offer для Java-разработчиков 👨‍💻

Если вы — Java-разработчик уровня Middle/Senior/Lead с опытом работы от 3 лет, то присоединяйтесь к команде Сбера!

31 августа – 1 сентября вы сможете пройти все этапы отбора, познакомиться с будущей командой и получить заветный оффер. Какие задачи будут в вашем планере?

▫️ Проводить декомпозицию и оценку задач.
▫️ Работать в тесной связке с аналитиками и разработчиками front-end.
▫️ Выполнять code review.
▫️ Проектировать архитектуру приложения.

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

Откликайтесь, и увидимся на выходных! 😉

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

Senior Java Developer

PriorityQueue

В Java можно использовать класс PriorityQueue для реализации приоритетной очереди. PriorityQueue предоставляет мин-кучу (min-heap), что означает, что на вершине всегда находится элемент с наименьшим значением при их извлечении. Если вам нужна макс-куча (max-heap), вы можете использовать класс Collections.reverseOrder() для изменения порядка сравнения элементов.

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

#для_продвинутых

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

Senior Java Developer

Класс Assert

Класс Assert предоставляет удобные методы для проверки условий во время выполнения программы. Он позволяет программистам добавлять проверки, которые помогают выявлять ошибки и неправильное поведение в программе на ранних этапах разработки. Когда условие не выполняется (ложно), Assert генерирует исключение AssertionError, чтобы предупредить разработчика о проблеме.

#для_продвинутых

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

Senior Java Developer

Trie

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

Основные компоненты Trie:
Узел Trie (Trie Node): Каждый узел содержит ссылки на дочерние узлы, представляющие следующие символы в строке, а также флаг, указывающий, является ли этот узел концом строки.

Корень Trie (Trie Root): Вершина дерева, которая не содержит символ, но имеет ссылки на дочерние узлы, представляющие все возможные первые символы строк.

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

Поиск (Search): Поиск строки в Trie осуществляется путем последовательного перехода от корня к листу, используя символы строки в качестве направляющих индикаторов. Если в какой-то момент мы достигаем узла, у которого нет соответствующего символа или строки, то строка отсутствует в Trie.

Поиск по префиксу (Prefix Search): Эта операция позволяет определить, существует ли какая-либо строка, начинающаяся с заданного префикса. Мы просто выполняем поиск, не обязательно дойдя до конца строки.

#для_продвинутых

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

Senior Java Developer

Collections.shuffle

Collections.shuffle — это метод в библиотеке Java, который перемешивает элементы коллекции в случайном порядке. Этот метод принимает на вход коллекцию и использует генератор случайных чисел для перемешивания элементов.

В примере на картинке создается список чисел от 1 до 10, затем вызывается Collections.shuffle(numbers), чтобы перемешать элементы списка. После этого выводится результат.

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

#для_начинающих

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

Senior Java Developer

Single Responsibility Principle

Принцип единственной ответственности (Single Responsibility Principle, SRP) является одним из принципов SOLID, предложенных Робертом Мартином. Этот принцип гласит, что у класса должна быть только одна причина для изменения. Иными словами, класс должен выполнять только одну ответственность.

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

#для_продвинутых

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

Senior Java Developer

➡️ Отправка email с использованием JavaMail API

Метод postMail отправляет письмо на заданные адреса. Он принимает список получателей, тему, сообщение и адрес отправителя.

⚙️ Настраивается соединение с SMTP-сервером, создается сессия и сообщение. Устанавливаются адрес отправителя и получателей, заголовки, тема и текст сообщения.

✔️ Затем сообщение отправляется с помощью метода Transport.send.

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

Senior Java Developer

➡️ Скриншот в Java

🗣️ Этот код выполняет захват экрана и сохраняет его как изображение в формате PNG.


Получает размер экрана с помощью Toolkit.getDefaultToolkit().getScreenSize().

Создает прямоугольник, соответствующий размеру экрана.

Создает объект Robot для выполнения действий, связанных с автоматизацией, таких как захват экрана.

Захватывает изображение экрана в виде объекта BufferedImage.

Сохраняет захваченное изображение в файл с указанным именем и форматом PNG с помощью ImageIO.write().

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

Senior Java Developer

Бэкенд-разработчики, вышла новая версия CodeRun с задачами от разработчиков Яндекса и внешних экспертов

CodeRun — бесплатный онлайн-тренажер с кастомизацией сложности и большим каталогом задач. Здесь можно готовиться к техническим собеседованиям по программированию и заполнять пробелы в знаниях. А еще решать тематические и авторские подборки и задания с прошлых турниров и контестов.

Главная особенность: здесь есть система рейтинга и баллов, а также сезонные турниры. По итогам каждого сезона лучшие кодеры могут получить мерч, сертификаты и даже возможность попасть в штат Яндекса по упрощенному найму.

2 сезон уже начался: решайте задачи и зарабатывайте баллы на ценные призы.

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

Senior Java Developer

😮 Добавлена новая база слитых курсов на 800ГБ:

Python:
/channel/+OnAzdnf-1mRjNjYy

Программирование:
/channel/+V2R5VLsH2igwMmU6

Frontend и Web:
/channel/+baoGxh-bG4Q5NmNi

Графика и дизайн:
/channel/+GrDwDo7c96s5ZTIy

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

Senior Java Developer

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

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

Простой внутренний класс, может обратиться к любому полю внешнего класса напрямую. В случае, если у вложенного класса уже существует поле с таким же литералом, то обращаться к такому полю следует через ссылку на его экземпляр. Например: Outer.this.field.

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

Senior Java Developer

Начните обучение в магистратуре в Центральном университете уже на 3-м курсе бакалавриата!

Центральный университет — современный вуз, созданный при поддержке ведущих компаний России: Т-Банка, Авито и других.

Учебу реально совместить с последними курсами бакалавриата или действующей работой. Обучение занимает 20 часов в неделю в вечернее время в первый год, а занятия проводят в центре Москвы профессоры из МГУ, МФТИ, РЭШ и практики из индустрии. Обучение в университете построено по принципам ИТ-компаний, со средой, способствующей росту и развитию.

У каждого студента будет:
— личный ментор по траектории обучения;
— доступ к карьерному центру с коучами и консультантами;
— опыт работы в проектах 30+ компаний-партнеров уже во время обучения;
— диплом гособразца.

Участвуйте в онлайн-отборе, чтобы выиграть грант на обучение до 1,2 млн рублей. Больше подробностей про университет и конкурс грантов по ссылке!

erid:2VtzqxfHdBZ
Реклама, АНО ВО «Центральный университет», ИНН 774341802

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

Senior Java Developer

Правила переопределения метода Object.equals().

1. Использование оператора == для проверки, является ли аргумент ссылкой на указанный объект. Если является, возвращается true. Если сравниваемый объект == null, должно вернуться false.
2. Использование оператор instanceof и вызова метода getClass() для проверки, имеет ли аргумент правильный тип. Если не имеет, возвращается false.
3. Приведение аргумента к правильному типу. Поскольку эта операция следует за проверкой instanceof она гарантированно будет выполнена.
4. Обход всех значимых полей класса и проверка того, что значение поля в текущем объекте и значение того же поля в проверяемом на эквивалентность аргументе соответствуют друг другу. Если проверки для всех полей прошли успешно, возвращается результат true, в противном случае - false.

По окончанию переопределения метода equals() следует проверить: является ли порождаемое отношение эквивалентности рефлексивным, симметричным, транзитивным и непротиворечивым? Если ответ отрицательный, метод подлежит соответствующей правке.

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

Senior Java Developer

Определить и найти. Разработка алгоритма поиска изменений с Мap-ами и хешами

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

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

Senior Java Developer

ExecutorService

ExecutorService — это API JDK, который упрощает запуск задач в асинхронном режиме. В общем смысле, ExecutorService автоматически предоставляет пул потоков и API для назначения задач.

Лучший вариант использования ExecutorService — это обработка независимых задач, таких как транзакции или запросы по схеме "один поток для одной задачи".

В этом примере создается ExecutorService с помощью фабричного метода Executors.newSingleThreadExecutor(). Затем запускается задача с помощью метода submit(). В конце работы ExecutorService завершается с помощью метода shutdown().

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

Senior Java Developer

Метод split

Метод split() используется для разбиения строки на подстроки по заданному разделителю. Он принимает один параметр — регулярное выражение, по которому будет производиться разбиение строки и возвращает массив строк (String[]), содержащий подстроки.

Если в качестве разделителя передать пробел (" "), то строка разбивается по пробелам на отдельные слова. Также можно указать число в качестве второго параметра, это будет лимит количества элементов.

#это_база

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

Senior Java Developer

Поднимаем Кафку, не опуская рук. Отказоустойчивый кластер на вашем ПК

22 августа приглашаем вас на вебинар от Слёрма с Василием Калугиным, владельцем корпоративного сервиса Apache Kafka в АО «ЭР-Телеком Холдинг», чтобы поговорить про Кафку и научиться разворачивать кластер на своём железе.

На вебинаре:

🥹 Расскажем про язык Кафки: топики, партиции, продюсеры-консьюмеры, кластер, ноды.

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

🥹 И покажем, как развернуть кластер Кафки на своём ПК с 3 нодами, schema-registry и авторизацией.

Обычно в инструкциях кластер из 1 ноды, зукипера и 1 брокера, но это не наш путь. Учим работать с реальными исходными данными, а не на теоретических примерах 😉

😢И наш традиционный розыгрыш — один из участников вебинара получит бесплатное место на курс «Apache Kafka для разработчиков».

🫣22 августа в 14:00 мск
🫣Регистрация — по ссылке

Реклама ООО «Слёрм» ИНН 3652901451

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

Senior Java Developer

service()

service() является частью жизненного цикла сервлета. Сервлеты в Java используются для создания динамических веб-приложений. Когда запрос поступает от клиента (например, браузера) к веб-приложению, сервлет обрабатывает этот запрос.

Метод service() вызывается контейнером сервлетов (например, сервером приложений) для обработки запроса. Контейнер передает объекты ServletRequest и ServletResponse в метод service(). Разработчик сервлета должен реализовать этот метод, чтобы обработать запрос и сгенерировать ответ.

Обычно, разработчики переопределяют метод doGet() или doPost() вместо service(), в зависимости от того, какой тип HTTP-запроса они хотят обрабатывать. Метод service() в своей реализации делегирует вызовы соответствующим методам обработки запросов (doGet(), doPost(), и так далее).

#для_продвинутых

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

Senior Java Developer

PipedOutputStream

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

#для_продвинутых

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

Senior Java Developer

Phaser

Phaser очень похож на более известную CountDownLatch. Однако он предоставляет некоторые дополнительные функции. Он позволяет нам установить динамическое количество потоков, которые должны ждать перед продолжением выполнения.

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

#для_продвинутых

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

Senior Java Developer

➡️ Пример Singleton в Java

🗣️ Этот код демонстрирует две реализации паттерна Singleton в Java, который гарантирует, что класс имеет только один экземпляр и предоставляет глобальную точку доступа к этому экземпляру.


В первой реализации используется класс с приватным конструктором и статическим методом для получения единственного экземпляра.

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

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

Senior Java Developer

Есть одна штука, которая мешает развивать продукт и внедрять новые функции.
Это устаревший легаси-монолит.

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

Поговорим на открытом вебинаре «Как обновить легаси-монолит и не поседеть?»

На встрече выступит Алексей Ягур, действующий тимлид с большим опытом программирования в ведущих компаниях.

⌨️Вы узнаете:
- Как проводить аудит существующей системы и планировать миграцию
- О различных подходах к обновлению легаси-монолитов
- Об актуальных инструментах и методиках, которые упрощают процесс миграции
- О том, как снизить риски при переходе на новую архитектуру

👍Бонус! Всем участникам – скидка 5% на любой курс OTUS и бесплатный чек лист по переходу от монолита к микросервисам

13 августа
19:00 МСК
Бесплатно


Записаться на событие

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

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

Senior Java Developer

➡️ Создаем PDF-файл в Java

Этот код создает PDF-файл с использованием библиотеки iText в Java.

Внутри метода main создается новый PDF-документ, добавляются два параграфа: один с текстом "Hello Kiran" и второй с текущей датой и временем.

Затем документ сохраняется в файл C:\Test.pdf. Если возникает ошибка, она выводится в консоль.

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

Senior Java Developer

⚙️ Преобразование java.util.Date в java.sql.Date

Этот код преобразует дату из формата Java java.util.Date в формат java.sql.Date, который используется для работы с базами данных.

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

Senior Java Developer

#вопросы_с_собеседований
Какие преобразования называются нисходящими и восходящими?

Восходящее преобразование
(Upcasting) — это преобразование объекта дочернего класса в объект родительского класса. Преобразование может быть выполнено неявно, так как дочерний класс является подтипом родительского класса. Восходящее преобразование позволяет нам получить доступ к членам родительского класса, но не ко всем членам дочернего класса.

Нисходящее преобразование (Downcasting) — это преобразование объекта родительского класса в объект дочернего класса. Это преобразование не может быть выполнено неявно и требует явного указания типа. Нисходящее преобразование может быть опасным, так как оно может привести к ошибке ClassCastException, если типы не совместимы.

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

Senior Java Developer

Как разбить строку на подстроки по заданному разделителю?

Мы можем использовать метод split(String regex) для разделения строки на массив символов, используя в качестве разделителя регулярное выражение.

Метод split(String regex, int numOfStrings) является перегруженным методом для разделения строки на заданное количество строк. Мы можем использовать обратную черту для использования специальных символов регулярных выражений в качестве обычных символов.

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

Senior Java Developer

⚡️Шпаргалка по Maven

Maven — один из самых популярных и удобных инструментов для управления и сборки проектов на Java. Сохраняй и делись с друзьями!

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

Senior Java Developer

Что делать, когда уже выучил Java Core, но его не хватает для трудоустройства?

С ростом конкуренции на рынке труда становится все сложнее выделиться среди других ИТ-специалистов и получить оффер. К тому же большинство работодателей ожидают от кандидатов владения масштабным стеком технологий. 

Комплексная программа «Java-разработчик. Middle Developer» в гибридном формате с упором на практику с экспертом поможет превратить  ваши навыки Java в профессиональное мастерство!

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

✅ Старт курса — август 2024 г. Набор уже идет!
✅ Рассрочка без %. Онлайн-формат.
✅ Удобное расписание.

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

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

Senior Java Developer

RandomAccessFile

RandomAccessFile — это класс пакета Java IO API, который позволяет перемещаться по файлу, читать из него или писать в него, как вам будет угодно. Он обеспечивает несущественный доступ к файлам и ведет себя как большой массив байтов, хранящихся в файловой системе. Вы можете использовать его для чтения и записи данных в файл.

В этом примере мы создаем экземпляр RandomAccessFile с режимом rw, который позволяет нам читать и записывать данные в файл. Затем мы записываем строку "Hello, World!" в файл с помощью метода writeUTF(). После этого мы перемещаем указатель файла в начало с помощью метода seek(0) и читаем строку из файла с помощью метода readUTF(). Наконец, мы выводим прочитанную строку на экран и закрываем файл.

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

Senior Java Developer

ThreadDeath

ThreadDeath представляет собой исключение, которое указывает на то, что поток должен быть остановлен. Это исключение является подклассом Error, а не Exception, потому что оно является нормальным явлением и не должно обрабатываться в коде приложения.

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

Важно отметить, что исключение ThreadDeath не может быть обработано с помощью блока try-catch. Если поток получает исключение ThreadDeath, оно просто игнорируется и поток завершается.

#для_продвинутых

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