Изучаем Java. По вопросам сотрудничества: @seniorvladislav
PushbackInputStreamPushbackInputStream
— это класс, который обеспечивает возможность «откатывать» (push back) один или несколько байтов в поток ввода. Этот класс является подклассом FilterInputStream
и добавляет функциональность для отката байтов.
Когда вы считываете байты из PushbackInputStream
, вы можете использовать метод unread
, чтобы вернуть один или несколько байтов обратно в поток. Это может быть полезно, например, если вы прочитали несколько байтов и поняли, что они не являются частью ожидаемых данных, и вы хотите вернуть их обратно для последующего считывания.
#для_продвинутых
Метод newSingleThreadExecutor()
Метод newSingleThreadExecutor()
используется для создания ExecutorService
с единственным рабочим потоком. ExecutorService
предоставляет удобный способ управления выполнением задач в асинхронном режиме.
В примере выше создается ExecutorService
с одним рабочим потоком, и две задачи (task1 и task2) передаются на выполнение с использованием метода submit()
. Закрытие ExecutorService
выполняется с помощью метода shutdown()
, который гарантирует, что больше никакие задачи не будут приняты, и потоки будут завершены после завершения всех текущих задач.
#для_продвинутых
#вопросы_с_собеседований
Расскажите о принципе работы алгоритма сортировки QuickSort. Напишите Java-код для реализации этого алгоритма и объясните его эффективность. Также, укажите, какие могут быть проблемы с производительностью в некоторых случаях и как можно их решить.
Алгоритм QuickSort
относится к семейству алгоритмов быстрой сортировки. Он использует подход "разделяй и властвуй", разбивая массив на подмассивы, сортируя их и затем объединяя весь массив.quickSort
: Рекурсивная функция, которая разделяет массив и вызывает сама себя для подмассивов.partition
: Функция, которая определяет местоположение опорного элемента (pivot) и переставляет элементы так, чтобы элементы меньше pivot находились слева, а больше — справа.QuickSort
в среднем случае имеет сложность O(n log n), что делает его одним из самых эффективных алгоритмов сортировки. QuickSort
может показывать плохую производительность в случае уже отсортированных или почти отсортированных данных. Это может быть улучшено, выбирая разумные опорные элементы или переходя к другому алгоритму, например, Insertion Sort
, для небольших подмассивов.
Почему Map не наследуется от Collection?
Это связано с различиями в их целях и использовании. Интерфейс Collection представляет собой общие методы для работы с группой объектов, таких как добавление, удаление и проверка наличия элемента. Он ориентирован на работу с коллекциями объектов, где каждый объект является элементом коллекции.
Интерфейс Map, с другой стороны, представляет собой отображение ключей на значения. Он не рассматривает элементы коллекции как отдельные объекты, а предоставляет доступ к значению, связанному с определенным ключом. Это более общий и мощный подход, который не сводится к работе с отдельными элементами коллекции.
Интерфейс Map включает в себя методы для управления парами ключ-значение и обеспечивает эффективный доступ к значениям по ключу. По этим причинам он не является подтипом Collection. Однако, классы, реализующие интерфейс Map, часто предоставляют методы, которые позволяют работать с элементами коллекции или возвращают представление коллекции ключей, значений или записей (ключ-значение).
Таким образом, хотя Map и Collection предоставляют абстракции для работы с группой объектов, они решают разные задачи, и поэтому не существует иерархического отношения наследования между ними.
#для_продвинутых
✔️ Телеграм-канал Яндекса специально для разработчиков
Опенсорс-проекты, которые меняют мир. Большие программы для поддержки белых хакеров. Наука в ML и резиденции для молодых учёных. Подборки статей и видео, которыми вдохновляются инженеры Яндекса. Говорим об этом в канале Yandex for Developers.
Подписывайтесь 👉 @Yandex4Developers
📖 Java books - огромная библиотека Java книг, актуальных на 2024 год.
🚀 Java Jobs - вакансии и проекты для Java разработчиков.
☕ Java Pro - здесь собраны все возможные вопросы и ответы с собеседований Java, гайды, разбор кода и полезные библиотеки.
🔝 Маст-хэв папка Java разработчиков: /channel/addlist/ZM3J6oFNAnRlNWU6
KeyFactory
KeyFactory
— это класс, который используется для преобразования ключей (непрозрачных криптографических ключей типа Key) в спецификации ключей (прозрачные представления базового материала ключа) и наоборот.
Функциональные возможности:
— Преобразование ключей из спецификаций ключей (например, ASN.1 DER) и обратно.
— Генерация ключей на основе алгоритма и параметров.
— Поддержка различных алгоритмов ключей, таких как RSA, DSA, Elliptic Curve Cryptography (ECC).
#для_продвинутых
Уже год работаешь в ИТ и готов к росту и масштабным проектам?🚀 Прокачай скиллы c Холдингом Т1!
Приглашаем Java-разработчиков в Открытую школу Т1 — программу найма в формате ИТ-интенсива: offer week + обучение без отрыва от работы.
🤚Поможем улучшить навыки и освоить новые перспективы, если ты готов к переменам в карьере, имеешь опыт работы Java-разработчиком от года и хочешь присоединиться к команде лидера* ИТ-рынка — Холдинга Т1!
📚В программу включили блоки по spring framework, docker, SOLID и др. Подробнее на сайте.
📌Как это работает?
🔹Подай заявку на сайте
⬇️Рассмотрим резюме, если твой профиль подойдет, то попросим пройти тестирование👌 При успешном прохождении — зачислим в группу
🔹Лучшим назначим интервью и направим оффер!
Формат обучения: онлайн (8 часов в неделю) Программа длится 1 месяц
🏳️Принимаем заявки до 25 февраля!
*По версии CNews Analytics 2022, TAdviser 2021 и RAEX 2023
Реклама. ООО "Т1". ИНН 7720484492.
Узнаем IP-адрес своего компьютераInetAddress.getLocalHost()
используется для поиска частных IP - адресов, используемых в локальной сети или любой другой локальной сети.
Подробнее объяснение кода можно найти здесь.
Как проверить, отсортирован ли массив в Java
Один из способов - это использование библиотеки Apache Commons Lang, которая предлагает статический служебный метод. isSorted() в ArrayUtils учебный класс.
Другие варианты проверки отсортирован ли массив можно найти здесь.
Один день из жизни JVM-инженера
Можно разрабатывать на Java, а можно разрабатывать Java. Есть люди, чей код исполняет виртуальная машина — а есть люди, чей код и есть виртуальная машина.
Смотреть статью
Какой из string классов следует использовать, когда необходимо часто обновлять данные?
Класс StringBuffer следует использовать в случае частых обновлений, поскольку он изменчив и, следовательно, пул строк не будет перегружен.
Класс FileReader
FileReader — это класс в пакете java .io, который можно использовать для чтения потока символов из файлов. Этот класс использует либо указанную кодировку, либо кодировку платформы по умолчанию для декодирования байтов в символы.
Разберём некоторые методы класса:
read() — метод читает и передает один символ или -1, если поток завершен;
read(char [] charBuffer, int offset, int length) — считывает поток символов и сохраняет их в заданном символьном буфере. offset - это позиция, с которой начинается чтение, а length - это общее количество символов, которые необходимо прочитать. Он передает большое количество прочитанных символов либо -1, если поток завершен;
ready() — сообщает, готов ли поток к чтению. Считается, что поток готов, если его входной буфер не пуст;
getEncoding() — используется для возврата заголовка кодировки символов, которая используется потоком;
close() — закрывает поток и освобождает связанные с ним системные ресурсы.
Приглашаем на Infra Meetup #3 — митап про надежность от Яндекс Такси и Техплатформы Екома и Райдтеха
На митапе поделимся тремя докладами об инструментах надежности в Такси, платформе биллинга Екома и Райдтеха и возможностях фреймворка userver для поддержания отказоустойчивости. В конце митапа участников ждет нетворкинг и экскурсия по питерскому офису.
Формат: офлайн или онлайн
Место встречи: Санкт-Петербург, БЦ «Бенуа»
Дата и время: 29 февраля, 18:00
Бесплатно. Количество офлайн мест ограничено. Регистрация обязательна
Подробнее
Реклама. ООО "Яндекс.Такси", ИНН: 7704340310
Что за зверь "Matcher"?
Класс Java Matcher (java.util.regex.Matcher) создан для поиска некоторого множества вхождений регулярного выражения в одном тексте и поиска по одному шаблону в разных текстах. Класс Java Matcher имеет много полезных методов.
Например:
• boolean matches(): вернет значение true при совпадении строки с шаблоном.
• boolean find(): вернет значение true при обнаружении подстроки, совпадающей с шаблоном, и перейдет к ней.
• int start(): вернет значение индекса соответствия.
• int end(): вернет значение индекса последующего соответствия.
• String replaceAll(String str): вернет значение измененной строки подстрокой str.
Другие методы Matcher можно найти в официальной документации.
Рассмотрите простой пример работы с Pattern и Matcher.
Стать сотрудником Яндекса быстрее и проще, чем кажется. Участвуйте в днях быстрого найма: решите тестовое, пройдите несколько секций собеседования и получите офер за несколько дней.
Ближайшее мероприятие:
• 23-24 марта — Fast Track для С++ разработчиков, офер за 2 дня в команды Фудтеха Яндекса.
Зарегистрироваться
Java Developer — мастхев для любого джависта
За ручку проведём тебя к первому офферу, расскажем о сложных вещах простыми словами и научим смеяться с айтишных мемов.
👉🏻 Подписывайся и прокачивай свои навыки
Реализуйте в Java класс, представляющий стек (stack), который поддерживает операции push, pop и получение минимального элемента (getMin) — все операции должны выполняться за константное время (O(1)). Напишите код и объясните, как вы решите эту задачу.
Объяснение:
В этом коде используется два стека: stack
для хранения элементов стека и minStack
для хранения минимальных элементов.
В методе push
, при добавлении нового элемента в стек проверяется, является ли он минимальным. Если да, то он также добавляется в minStack
.
В методе pop
, при извлечении элемента из стека проверяется, является ли этот элемент минимальным. Если да, то он также удаляется из minStack
.
Методы top
и getMin
просто возвращают верхний элемент стека и минимальный элемент соответственно.
Сложность:
Временная сложность для всех операций: O(1). Все операции выполняются за константное время, так как мы используем два стека и не производим поиск по всему стеку для поиска минимального элемента.
Пространственная сложность: O(n). Где n — количество элементов в стеке. Мы используем два стека, но их размер ограничен размером стека.
Как в Java реализуется принцип "Double-Checked Locking" в контексте создания экземпляров синглтонов и какие особенности данного подхода нужно учитывать, чтобы избежать проблем с многопоточностью?
В Java, "Double-Checked Locking" используется для минимизации затрат на синхронизацию при создании экземпляров синглтонов в многопоточных средах. Этот подход включает двойную проверку: сначала проверяется, был ли уже создан экземпляр без блокировки, а затем, если экземпляр не создан, происходит блокировка и повторная проверка. Важно использовать ключевое слово volatile для переменной экземпляра синглтона, чтобы обеспечить корректную работу в многопоточной среде из-за проблем с упорядоченностью чтения/записи в Java Memory Model.
Метод executeQuery()
Метод executeQuery()
в Java используется для выполнения запросов на выбор данных из базы данных. Он возвращает объект ResultSet
, который представляет набор данных, возвращаемый запросом.
Синтаксис метода executeQuery()
следующий:
public ResultSet executeQuery(String sql) throws SQLException;
sql
представляет собой строку, содержащую SQL-запрос. Возвращаемое значение метода executeQuery() — это объект ResultSet
, который представляет собой набор данных, возвращаемый запросом. Объект ResultSet
содержит информацию о столбцах данных, содержащихся в наборе данных, а также данные из каждого столбца.ZipInputStreamZipInputStream
— это класс в Java, который используется для чтения файлов ZIP. Он представляет собой фильтр входного потока, который декомпрессирует данные ZIP по мере их чтения.
#для_продвинутых
AlgorithmParameters
Класс AlgorithmParameters
используется для представления криптографических параметров в виде непрозрачного объекта. Он позволяет управлять параметрами для конкретного алгоритма.
#для_продвинутых
MessageDigestMessageDigest
— это класс в Java, который представляет собой криптографическую хеш-функцию. Он используется для вычисления дайджеста сообщения из двоичных данных. Дайджест сообщения — это фиксированная по длине строка, которая представляет собой «отпечаток» данных. Он может использоваться для проверки целостности данных, а также для аутентификации.
#для_продвинутых
FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?
Общее правило: обрабатывать исключения нужно от «младшего» к старшему. Т.е. нельзя поставить в первый блок catch(Exception ex) {}
, иначе все дальнейшие блоки catch()
уже ничего не смогут обработать, т.к. любое исключение будет соответствовать обработчику catch(Exception ex)
.
Таким образом, исходя из факта, что FileNotFoundException extends IOException
сначала нужно обработать FileNotFoundException
, а затем уже IOException
.
Техническое собеседование инженеров мобильной разработки в RuStore
Статья о том, как лучше составлять техническое интервью в команду разработки. Материал поможет понять, как мыслят разработчики при поиске сокомандника, поэтому будет полезен каждому.
https://habr.com/ru/companies/vk/articles/793200/
Тинькофф запускает All to Scala — бесплатный курс для опытных разработчиков, которые хотят расширить экспертизу или сменить карьерный трек.
Три четверти API в Тинькофф написаны на Scala. Этот язык быстро и эффективно работает, прост для понимания, а выполнение распараллеливается без проблем с конкурентным доступом к памяти. А главное — он отлично подходит для высоконагруженных систем, так что многие крупные компании работают именно на Scala.
Этот курс подойдет Java-, .Net-, Python- и Kotlin-разработчикам с опытом от двух лет, а также тем, кто уже базово владеет функциональным программированием, давно пишет в прод, но этот язык не знает. Занятия онлайн, так что проходить можно из любого города России, Беларуси, Армении и Казахстана.
Лекции будут раз в неделю, по вечерам, в течение трех месяцев.
Чтобы поступить, необходимо оставить заявку и пройти отборочные испытания до 20 февраля
erid:2VtzquivKyK
Реклама, АНО ДПО “Тинькофф Образование”, ИНН 7743270426
Как мигрировать в Cassandra? Как повысить отказоустойчивость Akka-кластеров? И где обитают платежные ссылки?
Отвечаем на backend-вопросы на онлайн-митапе Мир Plat.Form — 19 февраля в 17:00 🗓
Вас ожидают:
✔ Рассказ про устройство платежных ссылок, на которых основана Система быстрых платежей. Про хранение и перенос этих ссылок в Cassandra.
✔ Доклад об отказоустойчивых Akka-кластерах, позволивших развивать СБП в сжатые сроки, выдерживая высокие требования.
✔ Q&A со спикерами после докладов.
✔ Возможность выиграть призы за вопросы спикерам.
📍Митап пройдет онлайн на YouTube — 19 февраля в 17:00 по Москве. Ссылку отправим вам на почту за час до начала митапа.
Для участия нужно зарегистрироваться.
Реклама. АО "НСПК". ИНН 7706812159
Метод regionMatches()
Используется для сравнения подстроки одной строки с подстрокой другой строки, то есть сравниваются части строк и возвращается результат этого сравнения — true (если части строк совпали) или false (не совпали).
Параметры
ignoreCase — логическая переменная со значение true — игнорировать регистр, со значением false — не игнорировать регистр.
toffset — позиция, с которой начнем отсчет.
other — другая строка, часть которой мы будем сравнивать.
ooffset — позиция, с которой начнем отсчет в строке other
len — количество символов для сравнения.
Collections.min/max
Удивительно, насколько часто можно встретить написанный вручную код, который находит максимальный или минимальный элемент чего-то по какому-нибудь критерию.
Казалось бы, такая тривиальная задача должна быть давно решена. На самом деле она и так давно решена: есть методы Collections.min и Collections.max. Раньше было не очень удобно писать компараторы, но в Java-8 всё стало легче.
К примеру, вам нужно найти ключ в Map, соответствующий максимальному значению. Воспользуйтесь кодом с картинки.
Скажите что-то на карьерном
Тинькофф в поиске крутых ИТ-спецов. С компании — профессиональный рост, интересные финтех-задачи, решение бытовых забот и работа там, где вы живете. С вас — выбрать вакансию и откликнуться тут
АО «Тинькофф Банк», ИНН 7710140679