ThreadPoolExecutor
ThreadPoolExecutor — это класс в Java, который предоставляет управление пулами потоков для выполнения асинхронных задач. Он является частью пакета java.util.concurrent
, который предоставляет различные средства для работы с параллельными и асинхронными задачами.
#для_продвинутых
Перегрузка метода
Перегрузка метода (method overloading) — это механизм, который позволяет вам определить несколько методов с одним и тем же именем в одном классе, но с разными параметрами. Это означает, что вы можете иметь несколько методов с одинаковыми именами, но с разными списками параметров внутри одного класса.
Преимущество перегрузки методов заключается в том, что она позволяет создавать более гибкий и удобный интерфейс для использования методов в вашем классе. Пользователи вашего класса могут вызывать один и тот же метод с разными аргументами, и Java будет определять, какой из перегруженных методов вызывать, основываясь на сигнатуре метода.
#для_начинающих
Classpath
Classpath — это путь к директориям и JAR-файлам, которые используются приложением Java для поиска и загрузки классов и ресурсов во время выполнения. Классы Java, используемые в вашем приложении, должны быть доступны на этом пути, чтобы их можно было успешно загрузить и выполнить.
Важно следить за управлением classpath, чтобы ваши приложения имели доступ к необходимым классам и ресурсам.
#для_начинающих
Java varargs
Java varargs (variable arguments) — это механизм, предоставляемый Java, который позволяет методу принимать переменное количество аргументов одного типа. Он позволяет передавать любое количество аргументов заданного типа в метод, без явного указания массива аргументов.
Для объявления переменного количества аргументов в Java используется троеточие (...) после типа данных аргумента в определении метода.
#для_продвинутых
Параллельные аккумуляторы
Кроме блокировок, Java Concurrent может предложить еще одну интересную функцию - параллельные аккумуляторы. LongAccumulator
обновляет значение, используя предоставленную функцию. Это позволяет нам реализовать алгоритм без блокировок в ряде сценариев. Обычно это предпочтительнее чем AtomicLong
, когда несколько потоков обновляют общее значение.
Для того чтобы создать аккумулятор, вам нужно указать в конструкторе два аргумента. Первый из них - это функция, используемая для вычисления результата аккумулятора. Обычно это метод sum
. Второй параметр указывает начальное значение нашего аккумулятора.
Теперь давайте создадим LongAccumulator
с начальным значением 10000а
затем вызовем метод accumulate()
из нескольких потоков.
#для_продвинутых
Как поделиться данными между двумя потоками?
Данными между потоками возможно делиться, используя общий объект или параллельные структуры данных, например BlockingQueue
.
Что такое перегрузка методов?
Перегрузка методов — это свойство полиморфизма, в котором при помощи изменения сигнатуры метода можно создать различные реализации методов для одной и той же операции:
- одинаковое имя метода;
- различные аргументы;
- различный порядок аргументов;
Например, один и тот же add() из List может быть перегружен следующим образом и будет выполнять добавление разным способом, в зависимости от аргументов метода:
- add(Object o) — просто добавляет объект;
- add(int index, Object o) — добавляет объект в определенный индекс;
- add(Collection<Object> c) — добавляет список объектов;
- add(int index, Collection<Object> c) — добавляет список объектов, начиная с определенного индекса.
А вы знали, что чтобы стать крутым разработчиком нужен ментор?
🎓Станьте уверенным профессионалом с достойным уровнем дохода в IT индустрии вместе с менторами YKul.
➡️Запишитесь на курс
❗️Не важно, новичок вы или действующий специалист. С нами вы преуспеете – пройдете именно ваш путь вместе с опытным ментором, действующим программистом уровня senior. Не нужно оплачивать фиксированный курс длиной в несколько месяцев.
Вы сможете:
✅ писать чистый валидный код
✅ легко работать с базами данных
✅ применять GIT, JDBC и JPA
✅ использовать Spring Framework
✅ решать реальные кейсы
❓Сколько времени это займет❓
👨🏻💻Мы определяем ваш уровень подготовки, и согласуем индивидуальный план занятий.
Оплачивайте занятия отдельно за каждый месяц, при необходимости делайте перерыв и возвращайтесь к практике, когда это удобно вам.
👍Мы помогаем с трудоустройством как новичкам, так и работающим специалистам - тем, кто в поиске лучших вакансий!
✅Каждое завершенное задание от YKul – успешный кейс для вашего портфолио.
✅ HR специалист YKul рассмотрит ваш опыт с точки зрения работодателя, вместе с вами подготовит убедительное резюме.
✅ Проработаем все вопросы и темы, важные для успешного прохождения собеседования.
✅ Наш сертификат станет еще одним плюсом в вашем профиле сотрудника.
➡️Запишитесь на курс
Хотите протестировать?
Убедитесь, что вам подходит формат и содержание занятий: первая неделя обучения – ❗️бесплатно❗️
Реклама: ИП Кулагин Андрей Николаевич, ИНН: 740411652688
Создание подклассов исключений
Для того чтобы создать класс собственного исключения, достаточно определить его как производный от класса Exception
.
В подклассах собственных исключений совсем не обязательно реализовать что-нибудь. В самом классе Exception
не определено никаких методов.
Зачастую указывать описание исключения непосредственно при его создании очень удобно, но иногда для этого лучше переопределить метод toString()
.
#для_продвинутых
Метод isPowerOfTwo()
Метод isPowerOfTwo() используется для проверки, является ли число степенью двойки.
Этот метод полезен при работе с битовыми операциями и оптимизации алгоритмов.
#это_база
Метааннотации
Метааннотации используются для предоставления дополнительной информации о классах, методах и полях.
Они позволяют влиять на работу компилятора, среды выполнения и других инструментов без изменения самого кода.
Метааннотации добавляются перед объявлением класса, метода или поля и заключаются в символы @
.
Например, метааннотация Deprecated
помечает элемент устаревшим.
Метааннотация SuppressWarnings
отключает предупреждения компилятора.
#это_база
Изучите работу с высоконагруженными системами на курсе «Highload Architect» от OTUS
Всего за 5 месяцев вы:
✅ научитесь использовать решения, которые выдерживают сотни тысяч (и даже миллионы) запросов в секунду;
✅ сможете правильно оптимизировать работоспособность серверов;
✅ актуализируйте и систематизируйте знания в сфере HighLoad.
Программа курса полностью актуализирована и заточена под современные требования престижных работодателей.
Не упустите возможность получить вакантное место в крупном проекте! Обучение начнется уже 31 октября и в честь Хеллоуина вы можете записаться на курс со скидкой 15% по промокоду «Hello15». Пройдите тестирование прямо сейчас, чтобы воспользоваться предложением: https://otus.pw/poqQ/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KPYog
#вопросы_с_собеседований
Какие классы поддерживают чтение и запись потоков в компрессированном формате?
В Java для работы с потоками в сжатом формате используются классы из пакета java.util.zip:
ZipInputStream и ZipOutputStream — для чтения и записи архивов в формате ZIP.
GZIPInputStream и GZIPOutputStream — для чтения и записи файлов в формате GZIP.
InflaterInputStream и DeflaterOutputStream — для чтения и записи данных в формате ZLIB.
Эти классы являются обертками потоков ввода/вывода и позволяют прозрачно читать и записывать сжатые данные, как если бы речь шла о обычных потоках.
#вопросы_с_собеседований
Существует ли возможность перенаправить потоки стандартного ввода/вывода?
Да, в Java есть возможность перенаправить стандартные потоки ввода/вывода. Это можно сделать с помощью класса System и его методов setIn(), setOut() и setErr().
Таким образом можно гибко управлять вводом/выводом приложения, не меняя исходный код. Это полезно для логирования, unit-тестирования и в других случаях.
🏆 Yandex Cup 2023 — открытый чемпионат для настоящих творцов
Разработчики — художники нового мира. Они создают смыслы, правила и законы, манифестируют идеи, творят миры и целые вселенные. И, если их предшественники делали это, используя слова, краски и звуки, то современные творцы создают новую реальность с помощью программного кода.
Искусство писать код
Тема чемпионата в этом году «Решаем искусство». Участников ждут нестандартные задачи на стыке IT и творчества, а лучшие встретятся лицом к лицу в финале, чтобы оживить арт-инсталляцию и разделить между собой 8 500 000 рублей.
Показать своё мастерство можно в 6 направлениях:
🔸 Фронтенд
🔸 Бэкенд
🔸 Мобильная разработка
🔸 Аналитика
🔸 Алгоритмы
🔸 Машинное обучение
Финал и церемония награждения пройдут офлайн в офисе Яндекса в Казахстане. Яндекс предоставит финалистам проезд и проживание в Алматы.
Регистрация открыта до 29 октября включительно:
👉 Участвую!
#Yandex_Cup23
Что такое JIT компиляция?
JIT (Just-In-Time) компиляция — это техника оптимизации кода, которая используется для улучшения производительности приложений. Когда Java-программа запускается, она сначала компилируется в промежуточный байт-код (bytecode), который является платформонезависимым представлением кода. Затем этот байт-код выполняется виртуальной машиной Java (JVM).
JIT-компиляция происходит во время выполнения программы. Когда JVM выполняет байт-код, она анализирует и оптимизирует его на лету, переводя его в нативный машинный код, который может выполняться более эффективно на конкретной аппаратной платформе. Это позволяет улучшить производительность приложений, так как оптимизации выполняются с учетом конкретных характеристик и возможностей аппаратного оборудования, на котором работает JVM.
#для_продвинутых
Байт-код
Байт-код (bytecode) — это промежуточный код, который создается компилятором при компиляции исходного кода. Вместо того, чтобы компилировать исходный код напрямую в машинный код для конкретной архитектуры процессора (как это делается, например, в языках C или C++), Java компилирует исходный код в байт-код, который представляет собой набор инструкций, понимаемых JVM.
#для_начинающих
Можно ли наследоваться от строкового типа?
В Java нельзя наследоваться от строкового типа (String). Строковый тип — это класс String, который является финальным (final) классом, что означает, что его нельзя расширить другим классом. Финальный класс не может иметь подклассов.
Если вам нужно создать свой собственный тип данных для представления строк или добавить дополнительное поведение к строкам, вы можете создать свой собственный класс и включить в него объект типа String в качестве поля.
#для_начинающих
Отложенная инициализация
Отложенная инициализация — это паттерн проектирования, который позволяет отложить создание объекта до момента его реального использования. Он полезен, когда создание объекта требует значительных ресурсов или происходит в условиях, когда объект может не понадобиться.
В Java есть несколько способов реализации отложенной инициализации. Два наиболее распространенных подхода — это использование двойной проверки и использование внутреннего класса. На картинке мы рассмотрели использование двойной проверки (Double-Checked Locking).
#для_продвинутых
Стартануть в IT быстро и эффективно — подготовительный курс по Java-разработке.
⏰ Начинаем уже 7 ноября!
Даем: 62 урока с практикой в браузере, 3 онлайн вебинара и 1 сессию лайвкодинга с практикующим разработчиком.
Получаем: крепкие знания базы языка, умение понимать код и первую программу на Java, написанную вместе с наставником.
Всего 990 ₽ и ваше жгучее желание начать. Приходите с любым бэкграундом: нам не важны возраст, пол, образование и текущая профессия.
Запишитесь прямо сейчас!
Реклама. ООО "ХЕКСЛЕТ РУС". ИНН 7325174845. erid:LjN8KCPGk
👨💻 Начинаем неделю полезно, с подборки ресурсов для прокачки SQL
В этой подборке вас ждут: курсы, интерактивные уроки, задачи, тесты и одна онлайн-песочница, чтобы создавать, тестировать и отлаживать SQL-запросы.
👉 SQLZoo
Интерактивные уроки и задачи для изучения SQL. Начинаются с простых запросов, постепенно увеличивая сложность.
👉 Codecademy SQL
На этом курсе вы узнаете, как управлять большими наборами данных и их анализировать. Время прохождения курса ≈ 8 часов.
👉 SQLBolt
Уроки и задачи для начинающих и продвинутых пользователей SQL.
👉 SQLCourse
Уроки, задания и тесты для проверки знаний по SQL для новичков и опытных.
👉 Khan Academy SQL
Уроки и задачи для изучения SQL. Для закрепления пройденной теории, в конце модуля ждут проекты. Например, нужно разработать базу данных магазина.
👉 Mode Analytics SQL Tutoria
Курс SQL от Mode Analytics. Есть блоки для новичков и продвинутых.
👉 SQL Exercises
Сайт с задачами и упражнениями для изучения SQL. По результатам тестирования можно заказать сертификат «SQL Data Manipulation Language Specialist».
👉 SQL Fiddle
Онлайн-песочница SQL, позволяет создавать, тестировать и отлаживать SQL-запросы.
⏺Тестил какой-то ресурс или проходил курс из этой подборки и хочешь поделится впечатлением? Или есть ресурс по SQL, который хочешь порекомендовать? Пиши в комментарии 👇
erid: LjN8KNTeF
#ресурсы #sql
Реверс массива
Реверс массива в Java означает изменение порядка элементов массива на противоположный. То есть, элементы, которые изначально были в начале массива, становятся в конце, и наоборот.
Реверс массива может быть полезным во многих ситуациях программирования. Например, это может потребоваться для изменения порядка элементов перед их обработкой или выводом, или для выполнения действий, которые требуют доступа к элементам массива в обратном порядке.
#для_продвинутых
Сеттеры
В Java сеттеры (setters) являются методами класса, которые используются для установки значений приватных переменных (полей) класса. Они обеспечивают механизм инкапсуляции данных, позволяя контролировать доступ к полям класса и обеспечивать безопасность данных.
#для_начинающих
🤔 Хотите прокачать свой стартап, но не знаете, где искать надежную информацию и советы от профессионалов?
Подпишитесь на СберСтартап, примите участие в крутых активностях SberUnity и получите возможность попасть на мероприятия Сбера! 💚
Реклама. Публичное акционерное общество «Сбербанк России», ПАО Сбербанк ИНН 7707083893
Мы устраиваем Yandex Backend Tour по городам России!
Наши разработчики хотят познакомиться со специалистами из разных городов страны. Мы приедем в Москву, Нижний Новгород, Екатеринбург, Новосибирск и Санкт-Петербург. Ребята расскажут, почему они любят свои сервисы, какими технологиями пользуются и что предлагают кандидатам. На встречах будут сотрудники из 14 разных сервисов Яндекса. После мы вместе послушаем стендап Севы Ловкачева, устроим нетворкинг, отдохнём и поболтаем о жизни.
Кроме этого, мы устроим онлайн-трансляцию встречи из Москвы — вы сможете подключиться и пообщаться с нашими разработчиками из любого города России.
Вот расписание встреч:
🔸 13 ноября онлайн-трансляция
🔸 13 ноября офлайн-встреча в Москве
🔸 14 ноября офлайн-встреча в Нижнем Новгороде
🔸 15 ноября офлайн-встреча в Екатеринбурге
🔸 16 ноября офлайн-встреча в Новосибирске
🔸 17 ноября офлайн-встреча в Санкт-Петербурге
А с 20 по 26 ноября мы проведём Week Offer Backend: предложим всего за одну неделю получить офер в одну из 14 участвующих команд. Приглашаем кандидатов с опытом разработки от трёх лет на одном из этих языков программирования: С++, С#, Python, Java, Go и Scala. Принимаем заявки до 19 ноября.
Узнать подробности и зарегистрироваться можно здесь.
Реклама. ООО "Яндекс". erid: 2VtzqvmR6Kp
Метод weakCompareAndSwap()
Метод weakCompareAndSwap() используется для атомарного обновления полей объекта без блокировки.
Он позволяет сравнить значение поля с ожидаемым значением и установить новое значение, если они равны. Это полезно при реализации неблокирующих алгоритмов параллельного программирования.
В этом примере два потока пытаются атомарно изменить значение счетчика с 0
на 1
и 2
соответственно. Метод weakCompareAndSwap
гарантирует, что только один поток сможет успешно выполнить изменение.
Метод compareAndSwap()
Метод compareAndSwap() используется для атомарного обновления значения переменной.
Он позволяет изменить значение переменной только в том случае, если ее текущее значение совпадает с ожидаемым. Это помогает избежать состояния гонки при многопоточном доступе.
В примере мы объявляем AtomicInteger
count
и инициализируем его значением 0
. Метод increment()
сначала получает текущее значение в переменную currentValue
, затем в цикле do-while вызывается compareAndSet
, который проверяет равно ли текущее значение count
значению currentValue
, если да, то устанавливает новое значение currentValue + 1
, если нет (значение изменилось другим потоком), то цикл повторяется.
Таким образом гарантируется атомарное инкрементирование переменной count
.
Освойте микросервисную архитектуру за 5 месяцев на курсе «Microservice Architecture» от OTUS
В процессе обучения вы:
✅ рассмотрите множество нетривиальных проблем проектирования backend-приложений и их дальнейшего сопровождения;
✅ изучите не только паттерны проектирования новых сервисов, но и подходы к работе с legacy-сервисами;
✅ научитесь решать проблемы с согласованностью изменений или с оркестрацией сервисов;
- как разработчик научитесь базовым навыкам работы с Kubernetes.
💻 Программа подойдёт архитекторам, разработчикам, системным аналитикам, администраторам и DevOps-инженерам.
В конце программы вы получите практическую помощь в трудоустройстве и карьерную консультацию от эксперта.
🌐 Оцените свой уровень знаний для обучения на курсе: https://otus.pw/V39c/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8K74P8
charBuffer
Метод charBuffer() используется для получения буфера символов из строки. Он принадлежит классу String
.
Этот метод возвращает объект CharBuffer
, который представляет последовательность символов строки.CharBuffer
позволяет эффективно читать и манипулировать символами строки без создания копий.
В этом примере создается строка "Hello". Затем из этой строки получаем буфер символов методом charBuffer()
.
В цикле посимвольно читаем из буфера символы и выводим их на экран.
#это_база
Метод insert()
Метод insert() используется для вставки элемента в список в заданную позицию. Он принадлежит интерфейсу List
и его реализациям, таким как ArrayList
.
Этот метод вставляет указанный элемент element по заданному индексу index
и сдвигает все последующие элементы вправо.
*Индексы начинаются с 0.
*Если индекс меньше 0 или больше размера списка, будет выброшено исключение.
#это_база