Изучаем Java. По вопросам сотрудничества: @seniorvladislav
Ловим лето с пользой на МТС True Tech Camp 🏖
Залетай на идеальный летний ивент для опытных it-специалистов, продактов, дизайнеров и тех, кто в теме digital.
26 июля / Dream Beach Club
Наш кэмп — место, где можно отвлечься от рутины и классно провести время с такими же крутыми спецами, как ты 😎
В программе:
🌊 Летний вайб и тусовка у бассейна
🏄 Гонка на яхтах и заплывы на сапах
🤖 Бои роботов
👨🎤 Отличное настроение под музыку DJ и звёздных хедлайнеров
🏸 Лёгкие активности и коктейли
😈 Фановые кодерские челленджи
🎤 Общение с IT-экспертами и лидерами индустрии, а также выступления CREAM SODA и UMA2RMAN
Регистрируйся на truetechcamp.ru, чтобы успеть занять место на лежаках!
В чем разница между interrupted() и isInterrupted()?
Механизм прерывания работы потока в Java реализован с использованием внутреннего флага, известного как статус прерывания. Прерывание потока вызовом Thread.interrupt() устанавливает этот флаг. Методы Thread.interrupted() и isInterrupted() позволяют проверить, является ли поток прерванным.
Когда прерванный поток проверяет статус прерывания, вызывая статический метод Thread.interrupted(), статус прерывания сбрасывается.
Нестатический метод isInterrupted() используется одним потоком для проверки статуса прерывания у другого потока, не изменяя флаг прерывания.
#вопросы_с_собеседований
Приглашаем на Backend Meetup Яндекс 360 18 июля
Яндекс 360 — это цифровое пространство, в котором легко планировать важные события, сохранять и делиться воспоминаниями. Мы делаем всем знакомые сервисы: Диск, Почту, Телемост, Мессенджер и другие. Работаем с нагрузками >100 000+ RPS и создаём отказоустойчивые, легко масштабируемые продукты, которыми пользуются 80+ млн человек каждый месяц — но пока мало рассказываем о себе. Пришло время это исправить!
Приглашаем вас на митап, где мы обсудим решения нетривиальных архитектурных задач в Почте и Телемосте. В программе:
🔹 «Запускаем таски по расписанию: когда важна высокая частота, а креши дорого стоят» — Илья Григорьев, разработчик в Телемосте
Илья расскажет про архитектуру и алгоритм работы самописного фреймворка Pecker, который помогает запускать таски с высокой частотой.
🔹 «13 миллиардов счётчиков и 220k RPS на запись: что считает Спамооборона о ваших письмах» — Тимур Нургалиев, тимлид в Спамообороне
Тимур поделится деталями работы Спамообороны и опытом в реализации масштабируемого отказоустойчивого сервиса, который защищает пользователей от миллиардов спам-сообщений.
Регистрируйтесь на митап здесь.
Трюк с битовыми операциями
Этот код демонстрирует обмен значений двух переменных (a и b) без использования дополнительной временной переменной.
Он использует битовую операцию XOR (^). Ключевой момент здесь в том, что XOR двух одинаковых чисел возвращает 0, а XOR числа с 0 возвращает само это число. Таким образом, когда мы применяем XOR к a и b и затем обратно, мы фактически обмениваем их значения.
Блокирующий метод
Блокирующий метод — это метод, который временно останавливает выполнение текущего потока до завершения определенного условия или операции. Блокирующие методы часто используются для синхронизации работы потоков или для ожидания определенных условий.
Существует несколько способов сделать метод блокирующим. Один из способов — это использовать ключевое слово synchronized
. Метод, помеченный ключевым словом synchronized
, блокирует объект, на котором он вызывается. Это означает, что ни один другой поток не может вызвать этот метод, пока он не будет завершен.
Метод на картинке блокирует объект, на котором он вызывается, до тех пор, пока он не завершит свою работу.
#для_начинающих
LongAdderLongAdder
— это класс атомарных long-значений в Java, который предназначен для повышения производительности в многопоточных приложениях при частом изменении значения.LongAdder
работает следующим образом: он хранит несколько переменных, каждая из которых может быть обновлена одновременно без блокировки. Когда несколько потоков пытаются обновить одно и то же значение, они распределены по этим переменным. Это позволяет снизить конкуренцию между потоками и повысить производительность.
LongAdder можно использовать в следующих случаях:
— Для хранения счетчиков, которые часто обновляются несколькими потоками.
— Для реализации распределенных счетчиков, которые могут быть обновлены из любого места в сети.
— Для реализации распределенных хэш-таблиц, в которых значение хэша может быть обновлено несколькими потоками.
#для_продвинутых
♨️ Интеграционные тесты контроллеров, интеграций с внешними API и безопасности.
Ждём вас на третьем занятии серии открытых практических уроков по тестированию Spring-приложений от OTUS, где мы:
- рассмотрим специфику тестирования классических и REST-контроллеров и интеграций с внешними API;- уделим внимание тому, как проверить, что все конечные точки нашего приложения действительно защищены;- ответим на все возникающие вопросы.
Спикер — Senior Software Engineer, опытный преподаватель и руководитель курса.
Встречаемся 16 июля в 20:00 мск в преддверии старта курса «Разработчик на Spring Framework». Все участники вебинара получат специальную цену на обучение!
➡️ Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок и получить записи предыдущих вебинаров серии: https://otus.pw/tbwvB/
👩💻 Программирование теперь в телеграм!
Вот обширная база материалов, которая ежедневно обновляется, выбирай своё направление:
Обучение JavaScript с нуля
Обучение Python с нуля
Обучение Java с нуля
Обучение HTML/CSS с нуля
Обучение C/С++ с нуля
Обучение С# с нуля
Обучение SQL/GO/PHP с нуля
Обучение Kotlin/Swift с нуля
⛓ Архив на 1789ГБ: Курсы, книги, шпаргалки, статьи, видео ресурсы — всё собрано в одном месте: @roadmap_ready
FileChannelFileChannel
— это класс в Java, который представляет собой канал для чтения, записи, отображения и манипулирования файлом. Он является подклассом интерфейса SeekableByteChannel
, что означает, что он может читать и писать байты в файле в произвольном месте.
#для_начинающих
ArrayUtilsArrayUtils
- это статический класс в библиотеке java.util.Arrays
, который предоставляет различные методы для работы с массивами. Эти методы упрощают и ускоряют выполнение многих задач, связанных с массивами.
Чтобы использовать методы класса ArrayUtils
, необходимо импортировать его в свой проект. Это можно сделать следующим образом:
import java.util.Arrays;
Оплачиваемая стажировка и трудоустройство без опыта — ну ничего себе 😳
Все возможно с Добровольным квалификационным экзаменом! Это бесплатный проект Правительства Москвы, где ты можешь показать свои знания по специальности, запомниться потенциальным работодателям и получить оффер в престижные компании Москвы.
Тебя ждет всего три шага:
1️⃣ Пройди тест
После регистрации на сайте ДКЭ тебе будет доступно 70 профессий по 7 направлениям. Выбирай тест по своей специальности и проверь уровень своих знаний!
2️⃣ Реши кейс
Если ты успешно сдал тест, тебя пригласят на следующий этап, где ты с другими участниками в команде будешь решать реальный кейс одного из работодателей.
3️⃣ Стань победителем
Окажись в числе лучших по общему количеству баллов за оба этапа и получи шанс попасть на оплачиваемую стажировку с дальнейшим трудоустройством.
Готов проявить себя? Регистрируйся и начинай проходить тест — https://dke.moscow
Реклама. АНО "РАЗВИТИЕ ЧЕЛОВЕЧЕСКОГО КАПИТАЛА", АНО "РЧК". ИНН 7710364647. erid: LjN8KUXzy
➡️ Использование Optional для работы с потенциально null значениями
Использование Optional позволяет более безопасно работать с потенциально null значениями в Java.
🗣️ Этот подход помогает предотвратить распространенные ошибки, такие как NullPointerException
, и делает код более читаемым и надежным.
➡️ Фабричный метод коллекции
✔️ Коллекции — наиболее часто используемая функция в нашем ежедневном программировании. Они используются в качестве контейнера, в котором мы храним объекты и передаем их дальше.
Коллекции также используются для сортировки, поиска и перебора объектов, что упрощает жизнь программиста. Он предоставляет несколько базовых интерфейсов, таких как List, Set, Map и т. д., а также множество реализаций.
Традиционный способ создания коллекций и карт может показаться многим разработчикам многословным.
👀 Вот почему в Java 9 появилось несколько очень кратких фабричных методов.
⏳ Использование LocalDate и DateTimeFormatter для работы с датами
LocalDate и DateTimeFormatter предоставляют удобные и безопасные методы для работы с датами в Java.
Этот подход упрощает задачи форматирования и парсинга дат, что делает код более читаемым и менее подверженным ошибкам.
Как получить текущее время с точностью до миллисекунд используя Date Time API?
Ответ приведен на картинке.
#вопросы_с_собеседований
При помощи чего формируются запросы к базе данных?
Для выполнения запросов к базе данных в Java используются три интерфейса:
☕️ java.sql.Statement
- для операторов SQL без параметров;
☕️ java.sql.PreparedStatement
- для операторов SQL с параметрами и часто выполняемых операторов;
☕️ java.sql.CallableStatement
- для исполнения хранимых в базе процедур.
Объекты-носители интерфейсов создаются при помощи методов объекта java.sql.Connection:
☕️ java.sql.createStatement()
возвращает объект Statement;
☕️ java.sql.prepareStatement()
возвращает объект PreparedStatement;
☕️ java.sql.prepareCall()
возвращает объект CallableStatement;
#вопросы_с_собеседований
Напишите пример перехвата и обработки исключения в блоке try — catch метода
Ответ на картинке.
#вопросы_с_собеседований
Можно ли перегружать метод main() в Java?
Да, метод main() может быть перегружен, но JVM или виртуальная машина Java вызывает только исходный метод main().
Метааннотации
Метааннотации — это особые аннотации, которые используются для описания других аннотаций. Они позволяют определять параметры, которые будут применяться к аннотациям, а также правила, которые эти аннотации должны соблюдать.
Метааннотации могут использоваться для следующих целей:
— Определение параметров аннотаций. Метааннотации могут использоваться для определения параметров, которые будут применяться к аннотациям. Например, метааннотация @Retention
определяет, когда аннотация будет доступна: в исходном коде, во время компиляции или во время выполнения.
— Определение правил для аннотаций. Метааннотации могут использоваться для определения правил, которые должны соблюдать аннотации. Метааннотация @Target
определяет, к каким элементам кода можно применить аннотацию.
— Создание новых аннотаций. Метааннотации можно использовать для создания новых аннотаций. Например, можно использовать метааннотацию @Target
для создания аннотации, которая может применяться только к классам.
#для_начинающих
Начните свою карьеру Java-разработчика с Hexlet!
Хотите стать профессионалом в Java? Пройдите обучение и за 10 месяцев освоите все ключевые навыки, от основ до продвинутого уровня.
🎁🌴 А до 31 июля вас ждет специальное предложение - скидка до 55 000 р. и второй курс в подарок!
Вас ждут сотни практических упражнений, реальные проекты для портфолио и поддержка опытных менторов. Освойте язык крупного бизнеса и финансовых технологий и научитесь разрабатывать веб-приложения на фреймворке Spring.
А во время обучения вы также поучаствуете в Карьерном треке!
Пройдите 5 бесплатных уроков, чтобы понять, насколько интересен этот путь, и получите скидку на дальнейшее обучение.
Реклама. ООО "ХЕКСЛЕТ РУС". ИНН 7325174845. erid:LjN8KNoyc
Чем Hashtable отличается от Hashmap?
Основное различие между Hashtable и HashMap заключается в том, что Hashtable синхронизирован, а HashMap нет. Это означает, что Hashtable безопасен для использования в многопоточных приложениях, где несколько потоков могут одновременно взаимодействовать с коллекцией. HashMap, с другой стороны, не является потокобезопасным, поэтому его следует использовать только в однопоточных приложениях.
Другое различие между Hashtable и HashMap заключается в том, что Hashtable не позволяет хранить null ключи или значения. HashMap, с другой стороны, позволяет хранить одно null значение ключа и любое количество null значений.
Наконец, Hashtable использует перечислитель (enumeration) для перебора значений, а HashMap использует итератор (iterator).
ByteBuffer и DirectByteBufferByteBuffer
— это абстракция, которая представляет собой последовательность байтов. Он может использоваться для хранения данных, чтения и записи данных в файлы, а также для сетевого взаимодействия.DirectByteBuffer
— это подкласс ByteBuffer
, который хранит свои данные в памяти, выделенной операционной системой. Это отличается от обычного ByteBuffer
, который хранит свои данные в куче Java.
Основное преимущество DirectByteBuffer
заключается в том, что он может обеспечить более высокую производительность, чем обычный ByteBuffer
. Это связано с тем, что операциям ввода-вывода не нужно копировать данные из кучи Java в память операционной системы.
Однако DirectByteBuffer
также имеет некоторые недостатки. Во-первых, он может потреблять больше памяти, чем обычный ByteBuffer
. Во-вторых, он может быть более сложным в использовании, чем обычный ByteBuffer
.
#для_продвинутых
Класс Selector
Класс Selector
относится к пакету java.nio.channels и играет важную роль в работе с асинхронным вводом-выводом (NIO). Он позволяет одновременно следить за несколькими каналами (например, сокетами) и получать уведомления, когда в каком-либо канале есть возможность выполнить операцию чтения, записи или подключения.
#для_продвинутых
❓Хотите узнать, какой алгоритм сортировки быстрее и эффективнее? Присоединяйтесь к нашему открытому уроку!
🔥 Тема: Визуальное сравнение 4-5 алгоритмов сортировок.
📅 Дата: 15 июля в 20:00 мск.
На занятии мы подробно рассмотрим два популярных алгоритма сортировки: Выбором и Пирамидальной. Разберём их по различным критериям, включая сложность, количество обменов, стабильность и адаптивность.
Мы напишем и сравним алгоритмы по их быстродействию. Этот урок идеально подходит для студентов, разработчиков и всех, кто хочет углубить свои знания в области алгоритмов сортировки.
🔥 Спикер Евгений Волосатов — программист баз данных и преподаватель с огромным и разнообразным опытом, автор статей и учебных программ по C#, Java, PHP.
🔴 Пройдите короткий тест прямо сейчас, чтобы посетить бесплатный урок: https://vk.cc/cyfjtJРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Класс TimeZone
Класс TimeZone
представляет собой часовой пояс. Часовой пояс — это географическая область, в которой используется один и тот же стандарт времени.
Класс TimeZone
имеет несколько методов для работы с часовыми поясами. Например, метод getAvailableIDs()
возвращает список всех известных часовых поясов. Метод getTimeZone(String id)
возвращает объект TimeZone
по его идентификатору.
#для_продвинутых
DecimalFormatDecimalFormat
— это класс, предназначенный для форматирования десятичных чисел. Он имеет множество параметров, которые позволяют настроить вывод числа в соответствии с вашими потребностями.
Чтобы использовать DecimalFormat
, сначала вам нужно создать экземпляр класса. Вы можете сделать это, используя конструктор без параметров или конструктор с шаблоном.
Шаблон — это строка, которая определяет, как будет отображаться число.
#для_продвинутых
Мучаетесь с батч-обработкой данных в Spark? Хотите освоить streaming API, но не знаете, с чего начать?
Представьте, что вы легко обрабатываете данные из HDFS и Kafka в режиме, близком к реальному времени, используя всю мощь Spark Structured Streaming. А еще знаете:
⁃ какие источники данных могут быть обработаны стриминговым API Spark;
⁃ как осуществить подключение к ним;
⁃ как группировать данные.
Хотите это реализовать? Открытый урок «Как на Spark Structured Streaming работать с данными в HDFS и Kafka?» — ваш путь в мир потоковой обработки данных!
10 июля в 20:00 мск присоединяйтесь к вебинару и получите практические навыки, которые выведут вашу работу в анализе данных на новый уровень.
Пройдите короткий тест, чтобы посетить урок: https://otus.pw/5o9g/?erid=LjN8KKsWg
Раскатили фан на полную. Т-Банк устраивает ИТ-пикник 17 августа и зовет вас на отдых с друзьями и близкими. Будет больше 17-ти ИТ-партнеров фестиваля. В программе воркшопы, лекции от спикеров известных компаний, нетворкинг, выступления топовых музыкантов и детская зона.
Успейте зарегистрироваться
erid:2VtzqxddaNC
Реклама. АО "Тинькофф Банк", ИНН 7710140679, лицензия ЦБ РФ № 2673
Усовершенствуйте параллелизм с java.util.stream.Collectors и группировкой
Использование Collectors.groupingBy в Java Streams позволяет легко и эффективно группировать данные, улучшая читаемость и производительность кода.
➡️ Это мощный инструмент для обработки коллекций, который помогает упростить сложные операции и сделать ваш код более понятным и поддерживаемым.
Хотите знать больше о своем здоровье?🤔Знакомится с самыми интересными и необычными клиническими случаями? 🫨
Обсуждать в чате со специалистами самые актуальные медицинские вопросы?🩻
Тогда вам сюда - SupremeMed|Медицина ✌🏻
🩺 Мы публикуем самую интересную и актуальную информацию от ведущих врачей и экспертов.
🦠Рассказываем о новейших и самых актуальных достижениях в мире медицине
👨⚕️ Помогаем разобраться в сложных медицинских вопросах простым и понятным языком.
🧬У нас вы найдёте полезные советы и лайфхаки от докторов
А также увлекательные видео о работе человеческого организма и не только!
🔥Присоединяйтесь к нашему сообществу и будьте в курсе всех важных новостей из мира медицины