Изучаем Java. По вопросам сотрудничества: @seniorvladislav
Erid:Kra23n5hm
13 сентября — отличный восьмибитный повод, чтобы хотя бы на пять минут отложить разработку ПО, отвлечься от Java, Python, Kotlin и принять поздравления: сегодня — День программиста.
В честь этого вместе с Мир Plat.Form (НСПК) мы объявляем розыгрыш сертификата на 15 000 рублей в магазин geekboards.ru!
Команда Мир Plat.Form проектирует, создаёт и развивает платёжные сервисы, которыми пользуются по всей России. Например, СБП и платёжную систему «Мир».
Чтобы принять участие, подпишись на @mir_platform и @seniorjavist и напиши развёрнутый ответ на вопрос:
❓ «Какие основные плюсы и минусы микросервисной архитектуры в сравнении с монолитной архитектурой и какие факторы следует учесть при выборе между ними для разрабатываемого приложения?»
Победитель будет определён 20 сентября случайным образом среди всех комментаторов, которые выполнят условия.
Желаем удачи!
Pеклама. АО «НСПК»
ByteArrayOutputStreamByteArrayOutputStream
предназначен для записи данных в байтовый массив. Он позволяет записывать данные в память, а не сразу в файл или куда-то еще.
Этот класс реализует интерфейс OutputStream
, поэтому его можно использовать в любом месте программы, где требуется OutputStream
. Данные записываются во внутренний буфер, который автоматически увеличивается по мере необходимости.
Методы:
— write()
используется для записи данных.
— toByteArray()
возвращает внутренний буфер в виде байтового массива.
— size()
и reset()
позволяют управлять размером буфера.ByteArrayOutputStream
удобно использовать, когда нужно записать данные в память, а затем преобразовать в массив байтов, например, чтобы сохранить в файл или отправить по сети.
Этот класс часто используют в связке с ByteArrayInputStream
для различных преобразований данных в памяти.
#это_база
🚀 Раскрой свой потенциал Java с помощью канала Java | Фишки и трюки! 🚀
Готовы ли вы поднять свои навыки разработки на Java на новый уровень? Наш канал посвящен всему, что касается разработки на Java. 📚🖥️
🌟 Будьте готовы погрузиться глубоко в мир Java, воспользовавшись советами опытных разработчиков. Будьте в курсе последних тенденций, лучших практик и отраслевых секретов.
🔗 Полезные ресурсы: получите доступ к тщательно подобранной коллекции ресурсов, включая блоги, статьи, видеоролики и рекомендуемые инструменты, которые помогут вам улучшить свой путь разработки Java.
📢 Оставайтесь в курсе: получайте мгновенные обновления о последних разработках, библиотеках, платформах и инструментах Java. Никогда не упускайте возможности улучшить свои навыки и знания.
🔗 Присоединяйтесь сейчас, чтобы отправиться в уникальное Java-приключение. Ваша история успеха в программировании начинается здесь!🌐📚
CompleteableFutureCompleteableFuture
— это класс, который позволяет асинхронно выполнять операции и получать результаты в будущем. Он является частью concurrent
пакета, добавленного в Java 8.
Основные применения CompleteableFuture
:
— Выполнение асинхронных задач параллельно с использованием ThreadPoolExecutor
.
— Организация асинхронных pipeline.
— Получение первого завершенного результата среди нескольких асинхронных вызовов через методы anyOf
и firstCompletedOf
.
— Обработка ошибок и исключений при выполнении асинхронных задач.
— Тайм-ауты на асинхронные операции, чтобы не ждать результата неограниченно долго.CompleteableFuture
хорошо подходит для создания reactive
систем и приложений с неблокирующей архитектурой, где важна асинхронная обработка данных с множеством источников.
CountDownLatchCountDownLatch
— это утилита для синхронизации потоков. Она позволяет одному или нескольким потокам ждать, пока другие потоки не завершат какую-то операцию.CountDownLatch
инициализируется с заданным счетчиком. Каждый поток, который должен завершить работу, вызывает метод countDown()
, уменьшая счетчик на 1. Поток, который ждет завершения работы других потоков, вызывает метод await()
. Он блокируется до тех пор, пока счетчик не станет равным нулю. CountDownLatch
часто используется:
— Для ожидания завершения всех потоков пула перед завершением программы.
— В многопоточных тестах: поток главного теста ждет выполнения assertion
во всех потоках через CountDownLatch
.
— Для имплементации барьеров в параллельных алгоритмах: потоки ждут друг друга в определенной точке.
Класс Runtime
Класс Runtime
представляет виртуальную машину Java (JVM) во время выполнения программы.
Он позволяет взаимодействовать с окружением выполнения программы.
Основные возможности:
— Получение общей информации о среде выполнения, такой как количество процессоров, свободная память.
— Запуск внешних процессов и приложений. Можно запустить другие программы из Java-кода.
— Выполнение системных вызовов, таких как выход из приложения.
— Динамическая загрузка библиотек во время выполнения.
— Выделение дополнительной памяти для приложения.
— Добавление и удаление шатдаун-хуков - действий перед завершением приложения.
Объект Runtime
создается методом getRuntime()
. Он singleton — в приложении всегда один объект Runtime
.
Класс полезен для мониторинга и управления запущенным приложением из кода.
#это_база
Айтишники, у вас бывало такое: пишете код и думаете, что он достоин Нобелевской премии, Оскара и всех наград этого мира? 💎
Тогда вам точно нужно попробовать свои силы в Конкурсе красоты кода, который запустил Сбер специально ко Дню программиста. Чтобы побороться за звание «Автор самого красивого кода» и получить один из пятнадцати iPhone 14, нужно:
✔️ Выбрать дисциплину по душе и скилам: Python, Java, Data Science, Frontend или Android.
✔️ Написать свой эталонный код до 18 сентября по ссылке.
✔️ Дождаться результатов — их объявят 21 сентября.
Переходи по ссылке, читай подробности, и вперёд — к коду мечты 💚
CyclicBarrierCyclicBarrier
— это инструмент синхронизации потоков, который позволяет группе потоков ждать друг друга в определенной точке. CyclicBarrier
инициализируется с указанием количества потоков, которые должны собраться в барьере. Когда каждый поток достигает барьера вызовом метода await()
, он блокируется до тех пор, пока все потоки не достигнут этой точки.
После этого все потоки разблокируются и продолжают работу.
Основная область использования CyclicBarrier
— это параллельные вычисления.CyclicBarrier
удобен, когда нужна синхронизация нескольких потоков в фиксированной точке. Это позволяет эффективно распределить вычисления или операции ввода-вывода.
Класс FileWriterFileWriter
предназначен для записи символьных данных в файлы. Он позволяет записывать данные в файл посимвольно.
Для использования FileWriter
нужно создать экземпляр класса, передав в конструктор путь к файлу, куда будет производиться запись.
— Метод write()
записывает один символ или массив символов в файл.
— Метод flush()
принудительно записывает все буферизированные данные в файл.
— После завершения работы поток ToFileWriter
нужно закрыть методом close()
.FileWriter
удобно использовать для записи текстовых данных. Для записи примитивных типов лучше подходит класс FileOutputStream
.
При записи в существующий файл данные добавляются в конец, файл не перезаписывается. А для перезаписи файла при создании FileWriter
нужно указать вторым параметром true
.
#это_база
Ключевое слово newnew
используется для создания нового экземпляра класса. После ключевого слова new
указывается название класса, затем в круглых скобках — параметры конструктора, если они нужны.
При вызове new
выделяется память для нового объекта, вызывается конструктор класса для инициализации объекта, и возвращается ссылка на созданный объект.
Ссылка на объект должна быть сохранена в переменной соответствующего класса.
Если new
используется внутри класса, то создается новый объект этого класса. А если new
используется снаружи класса, то создается объект указанного класса.
#это_база
#вопросы_с_собеседований
Как задается порядок следования объектов в коллекции?
Порядок следования элементов в коллекции можно задать несколькими способами:
— Используя коллекции, которые по умолчанию хранят элементы в определенном порядке. Например, LinkedList хранит элементы в порядке добавления, TreeSet сортирует элементы и др.
— Передав компаратор при создании коллекции. Компаратор определяет правила сравнения элементов, на основе которых они будут отсортированы.
— Вызвав метод sort() у объекта коллекции, которая реализует интерфейс Sortable (например ArrayList). Метод сортирует коллекцию в зависимости от естественного порядка элементов.
— Использовать метод Collections.sort(), чтобы отсортировать коллекцию, передав нужный компаратор.
🔥Как создавать приложения на Java с нуля?
Расскажем на открытом уроке 5 сентября 20:00 по Москве. Вебинар приурочен к старту онлайн-курса "Java-разработчик" от OTUS.
Тема вебинара: Учимся работать с текстовыми файлами на примере реализации простого шифратора.
💯Во время занятия мы создадим консольное приложение на Java с нуля, которое сможет шифровать и дешифровать текстовые файлы, используя очень простые алгоритмы шифрования.
В результате урока вы:
— Увидите, как пишут код и создают программы на языке Java.
— Узнаете, как работать с потоками ввода/вывода в Java на примере работы с файлами.
Получить ещё больше навыков в Java-разработке можно на онлайн-курсе доступном в рассрочку.
👉РЕГИСТРАЦИЯ: https://otus.pw/iKDE/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KMCap
System.nanoTimeSystem.nanoTime()
возвращает текущее время в наносекундах.
Этот метод используется для измерения продолжительности выполнения небольших фрагментов кода.
В отличие от System.currentTimeMillis()
, который возвращает время в миллисекундах, nanoTime()
имеет более высокое разрешение и позволяет измерять очень короткие промежутки времени.nanoTime()
часто используется для:
— Замеров производительности.
— Измерения задержек в мультитрединге.
— Микробенчмаркинга.
— Определения интервалов между событиями в реальном времени.
#вопросы_с_собеседований
Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?
Метод main может выбросить исключение. Это исключение будет передано в JVM (виртуальную машину Java). JVM отловит это исключение и завершит выполнение программы, выведя stack trace (трассировку стека) исключения.
Таким образом, исключение из main приведет к аварийному завершению программы.
Чтобы избежать этого, лучшей практикой является перехватывать исключения внутри main и обрабатывать их, не допуская выброса за его пределы.
#вопросы_с_собеседований
Чем отличаются HashMap и TreeMap?
— HashMap позволяет хранить в качестве ключа null, а TreeMap — нет.
— HashMap быстрее в большинстве операций, но не гарантирует порядок элементов.
— TreeMap медленнее, но сохраняет порядок сортировки элементов.
— HashMap не синхронизирован, можно использовать только в однопоточной среде.
— TreeMap синхронизирован, можно использовать в многопоточной среде.
PipedOutputStreamPipedOutputStream
используется для организации потоковой передачи данных между потоками.
Он работает совместно с PipedInputStream
. Один поток записывает данные в PipedOutputStream
, а другой считывает их из соответствующего PipedInputStream
.
Это позволяет организовать обмен данными между потоками по принципу "производитель-потребитель".
Для связи PipedOutputStream
и PipedInputStream
нужно использовать метод connect()
.
Метод write()
используется для записи данных, как и в обычных потоках вывода.PipedOutputStream
полезен, когда нужен простой способ организовать обмен данными между потоками в одной программе.
Он часто используется для подключения вывода одного потока к вводу другого.
#это_база
#вопросы_с_собеседований
Какова иерархия исключений?
В Java иерархия исключений выстраивается следующим образом:
— Все исключения являются потомками класса Throwable.
— Класс Throwable имеет два подкласса: Exception и Error.
— Класс Exception предназначен для исключений, возникающих во время выполнения программы. Он делится на два подкласса:
— Checked exception — исключения, которые обязательно нужно обрабатывать или объявлять. К ним относятся SQLException, IOException и другие.
— Unchecked exception (RuntimeException) — исключения, обработка которых необязательна. Например, NullPointerException, ArithmeticException.
— Класс Error предназначен для ошибок, возникающих вне программы. Это могут быть ошибки JVM, например OutOfMemoryError.
При разработке приложений важно выбирать нужный тип исключения, чтобы правильно обрабатывать различные ситуации.
#вопросы_с_собеседований
Что вы знаете о классах оболочках?
Классы-оболочки используются для обертывания примитивных типов данных, таких как int, double, boolean и другие.
Основное преимущество использования классов-оболочек в том, что они позволяют работать с примитивными типами как с объектами. У каждого класса-оболочки есть поля и методы для хранения значений и выполнения различных операций.
Например, класс Integer является оболочкой для примитивного типа int. У него есть поле value для хранения целочисленного значения, а также различные методы для преобразования int в строку и обратно, сравнения целых чисел, выполнения математических операций и т. д.
Использование классов-оболочек упрощает работу с примитивными типами в обобщенных коллекциях и алгоритмах, так как они могут храниться в виде объектов.
Кроме того, классы-оболочки могут иметь дополнительную функциональность по сравнению с соответствующими примитивными типами.
Как получить оффер в IT в кратчайшие сроки? Откликнуться до 10 сентября на Week Offer в Росбанке для Java-разработчиков и системных аналитиков.
Почему стоит выбрать Росбанк?
— Удаленная работа;
— ДМС со стоматологией и ветуслугами;
— Возможность развиваться в роли эксперта и бесплатно обучаться по выбранному треку;
— Быть частью профессионального сообщества, в котором эксперты обмениваются опытом и помогают вам развиваться.
Приходите работать к лидеру рынка труда: золото и платина в рейтинге работодателей по версии журнала Forbes. Регистрируйтесь и наслаждайтесь балансом между работой и личной жизнью: https://clck.ru/35eZpv
Откликнуться напрямую: @daryabil
Реклама. ПАО «Росбанк», ИНН 7730060164, Erid: 2VtzqviVoqi
Метод PutAll()
Метод putAll()
используется для копирования всех элементов одной хэш-таблицы или Map
в другую. Он принимает в качестве аргумента другую Map
или хэш-таблицу, и копирует все её пары ключ-значение в исходную коллекцию.
Метод putAll()
не возвращает значения и не бросает исключений.
Этот метод удобен, когда нужно быстро скопировать данные из одной коллекции в другую. Он работает быстрее, чем добавлять элементы в цикле.
Если в конечной коллекции уже есть ключи, которые содержатся в исходной Map
, то значения этих ключей будут перезаписаны.
Также с помощью этого метода можно объединять данные из нескольких Map
в одну целевую коллекцию.
#это_база
#вопросы_с_собеседований
Как связан любой пользовательский класс с классом Object?
В Java все классы неявно наследуются от класса Object.
Это означает, что:
— Любой пользовательский класс получает методы класса Object, такие как equals, hashCode, toString и другие.
— Любой объект в Java является экземпляром класса Object.
— Можно приводить любой объект к типу Object без явного преобразования типов.
— Класс Object находится в root пакете java.lang, поэтому доступен без импортирования.
— Класс Object является предком иерархии всех классов, поэтому методы Object подходят для любого объекта.
Таким образом, наследование от Object делает полиморфизм в Java универсальным и избавляет от необходимости реализовывать базовые методы в каждом классе.
#вопросы_с_собеседований
Как влияет модификатор static на класс/метод/поле?
Для класса — позволяет создать static-класс, экземпляры которого создавать нельзя. Используется для создания утилитных классов.
Для метода — делает метод статическим, то есть он может быть вызван без создания экземпляра класса.
Для поля — создает поле, общее для всех экземпляров класса. Статическое поле существует в единственном экземпляре для класса.
Если кратко, static позволяет создавать классы/методы/поля, связанные с классом, а не с экземпляром.
Это удобно, когда нужно реализовать утилитные классы или объекты, общие для всех экземпляров.
Single Responsibility Principle (SRP)
Принцип единственной ответственности (Single Responsibility Principle) говорит, что каждый класс должен иметь только одну ответственность или одну причину для изменения.
Это означает, что класс должен быть сфокусирован на выполнении только одной функции или задачи.
Например, класс, представляющий пользователя, должен быть ответственен только за хранение данных о пользователе, таких как имя, адрес электронной почты и т. д. Если этот класс также отвечает за отправку email пользователю или сохранение пользователя в базу данных, он нарушает принцип SRP, потому что эти дополнительные функции должны быть вынесены в отдельные классы.
Соблюдение SRP помогает сделать код более поддерживаемым, поскольку каждый класс имеет четко определенную роль и легче понять. Это также упрощает тестирование и повторное использование кода.
Принцип SRP широко используется при проектировании классов и API в Java.
Ты Java-Разработчик уровня Senior?
Значит встречаемся на USETECH Offer Weekend!
Мечтаешь работать в аккредитованной IT-компании с интересными проектами и развитой корпоративной культурой? Отправь резюме, пройди собеседование и получи предоффер в ГК Юзтех за выходные!
🗓 Даты offer weekend: 23-24 сентября 2023 года
❗️Формат: онлайн
📌 Дедлайн регистрации: 18 сентября 23:59
💥Что мы предлагаем:
- Конкурентную заработную плату
- Интересные задачи
- Условия работы в соответствии с ТК РФ + социальный пакет
- Формат работы — удаленно или в офисе
- Классную команду и корпоративные мероприятия
- Гибкий рабочий график
📌Зарегестрируйся, пройди собеседование и получи предоффер: https://tglink.io/347e3c65e10d
Изучите основы Java и разработайте приложение, даже если никогда прежде не программировали
Java — один из самых востребованных и доступных для освоения языков программирования. Его используют для создания сайтов, мобильных и десктоп-приложений, даже игр.
На бесплатном онлайн-курсе «Основы разработки на Java» за 4 занятия вы изучите основы синтаксиса языка Java и поймёте, подходит ли он вам, а в качестве практики разработаете приложение для публикации фото из NASA, а после сделаете на основе этого приложения Telegram-бота.
Записаться на бесплатный курс → https://netolo.gy/b5Sa
Реклама. ООО «Нетология» LatgC7YCc
#вопросы_с_собеседований
Что будет, если в static блоке кода возникнет исключение?
Если в static блоке кода возникнет исключение, то это приведет к ошибке инициализации класса.
Static блок выполняется при загрузке класса, и любые исключения в нем приведут к сбою и невозможности загрузить класс.
Поэтому нужно либо обрабатывать исключения в static блоке, либо избегать кода, который может привести к исключениям.
Лучше выносить в static блок только простую инициализацию, а сложную логику помещать в конструктор или методы класса.
Ключевое слово let
Ключевое слово let
используется для объявления переменных в блоке кода.
Оно позволяет ограничить область видимости переменной только этим блоком.let
помогает избежать загрязнения глобальной области видимости и конфликтов имен переменных.
Кроме того, let
позволяет повторно объявить переменную с тем же именем во вложенном блоке. Это бывает удобно, когда во вложенном блоке нужна локальная переменная с таким же названием.
#вопросы_с_собеседований
Что будет, если в Map положить два значения с одинаковым ключом?
Если в Map положить два значения с одинаковым ключом, то произойдет следующее:
— При добавлении второго значения с уже существующим ключом, первое значение, связанное с этим ключом, будет перезаписано.
— Map может содержать только уникальные ключи. При попытке добавить дублирующийся ключ, старое связанное значение будет заменено новым.
— Конкретная реализация Map (например, HashMap) может бросить исключение, если попытаться добавить дублирующийся ключ.
Таким образом, поведение в такой ситуации зависит от конкретной реализации интерфейса Map, но в целом дублирующиеся ключи в Map запрещены.
Конвертируем массив в списокArrays.asList()
— это статический метод класса Arrays
, который позволяет конвертировать обычный массив в список List
.
— Принимает массив в качестве аргумента и возвращает объект типа List
с элементами этого массива.
— Возвращаемый список имеет фиксированный размер, равный длине исходного массива. Добавлять/удалять элементы в него нельзя.
— Изменения в возвращаемом списке будут вноситься в исходный массив, т. к. список работает как "представление" массива. Метод работает для массивов примитивных и ссылочных типов.Arrays.asList
хорош для чтения элементов массива, но не для записи из-за неизменяемого размера.
#это_база
Ищем Java Разработчика уровня Senior/Middle на крупные, интересные проекты.
- Гибкий график и “честная удаленка”.
- Комфортные офисы в центре СПб и Воронежа.
- ДМС, 3 оплачиваемых day off.
- Возможность развиваться в кругу экспертов и влиять на рост комьюнити.
Кто мы?
Компания ITentika - это 200+ экспертов в ИТ-консалтинге, проектировании и разработке сложных ИТ-систем, помогающих бизнесу становиться лидером в своем сегменте.
А еще у нас:
✔️ Аккредитация IT.
✔️ 25+ лет опыта в международной разработке.
✔️ Сотрудничество с крупными стабильными клиентами.
✔️ Бережное отношение к персоналу и демократичность.
Подробнее о вакансии Senior/Middle Java Developer в ITentika здесь https://tglink.io/b69576e77720
Реклама. ООО "АЙТЕНТИКА". ИНН 4715018532. erid: LjN8KD9ZM