☕️ Java IO (input-output) является потокоориентированным, а Java NIO (new/non-blocking io) – буфер-ориентированным. Потокоориентированный ввод/вывод подразумевает чтение/запись из потока/в поток одного или нескольких байт в единицу времени поочередно. Данная информация нигде не кэшируются. Таким образом, невозможно произвольно двигаться по потоку данных вперед или назад. В Java NIO данные сначала считываются в буфер, что дает больше гибкости при обработке данных.
☕️ Потоки ввода/вывода в Java IO являются блокирующими. Это значит, что когда в потоке выполнения вызывается read() или write() метод любого класса из пакета java.io.*, происходит блокировка до тех пор, пока данные не будут считаны или записаны. Поток выполнения в данный момент не может делать ничего другого. Неблокирующий режим Java NIO позволяет запрашивать считанные данные из канала (channel) и получать только то, что доступно на данный момент, или вообще ничего, если доступных данных пока нет. Вместо того, чтобы оставаться заблокированным пока данные не станут доступными для считывания, поток выполнения может заняться чем-то другим. Тоже самое справедливо и для неблокирующего вывода. Поток выполнения может запросить запись в канал некоторых данных, но не дожидаться при этом пока они не будут полностью записаны.
☕️ В Java NIO имеются селекторы, которые позволяют одному потоку выполнения мониторить несколько каналов ввода. Т.е. существует возможность зарегистрировать несколько каналов с селектором, а потом использовать один поток выполнения для обслуживания каналов, имеющих доступные для обработки данные, или для выбора каналов, готовых для записи.
☕️ Потоки ввода/вывода в Java IO являются блокирующими. Это значит, что когда в потоке выполнения вызывается read() или write() метод любого класса из пакета java.io.*, происходит блокировка до тех пор, пока данные не будут считаны или записаны. Поток выполнения в данный момент не может делать ничего другого. Неблокирующий режим Java NIO позволяет запрашивать считанные данные из канала (channel) и получать только то, что доступно на данный момент, или вообще ничего, если доступных данных пока нет. Вместо того, чтобы оставаться заблокированным пока данные не станут доступными для считывания, поток выполнения может заняться чем-то другим. Тоже самое справедливо и для неблокирующего вывода. Поток выполнения может запросить запись в канал некоторых данных, но не дожидаться при этом пока они не будут полностью записаны.
☕️ В Java NIO имеются селекторы, которые позволяют одному потоку выполнения мониторить несколько каналов ввода. Т.е. существует возможность зарегистрировать несколько каналов с селектором, а потом использовать один поток выполнения для обслуживания каналов, имеющих доступные для обработки данные, или для выбора каналов, готовых для записи.
#вопросы_с_собеседований
В каком случае требуется переопределять метод service()?
В каком случае требуется переопределять метод service()?
Метод service() переопределяется, когда необходимо, чтобы сервлет обрабатывал все запросы (и GET, и POST) в одном методе.
Когда контейнер сервлетов получает запрос клиента, то происходит вызов метода service(), который в зависимости от поступившего запроса вызывает или метод doGet() или метод doPost().
Когда контейнер сервлетов получает запрос клиента, то происходит вызов метода service(), который в зависимости от поступившего запроса вызывает или метод doGet() или метод doPost().
This media is not supported in your browser
VIEW IN TELEGRAM
Продолжаем следить за конкурсами с денежными призами. «Цифровой прорыв» совместно с Mail.Ru Group запускают IT-чемпионат по ML, AI и Data Science. Есть три задачи:
- Модель прогноза средних цен и объемов потребления товаров (ФНС России и Росстат)
- ИИ для поиска самолетов на снимках местности при проведении поисково-спасательных операций (Росавиация)
- ИИ для распознавания категории предмета музейного фонда (Минкультуры России)
Как видите, задачи практичные и важные, на решение дается целый месяц — с 14 июля по 14 августа. В каждой из трех задач есть 25 призовых мест, за первое место дают 100 тыс. ₽. Регистрация и подробности здесь: https://proglib.io/w/24a90147
- Модель прогноза средних цен и объемов потребления товаров (ФНС России и Росстат)
- ИИ для поиска самолетов на снимках местности при проведении поисково-спасательных операций (Росавиация)
- ИИ для распознавания категории предмета музейного фонда (Минкультуры России)
Как видите, задачи практичные и важные, на решение дается целый месяц — с 14 июля по 14 августа. В каждой из трех задач есть 25 призовых мест, за первое место дают 100 тыс. ₽. Регистрация и подробности здесь: https://proglib.io/w/24a90147
🛠 Почему Java используется для разработки мобильных приложений?
Если вы подумываете заняться разработкой мобильных приложений, возникает вопрос выбора языка программирования. Одним из лучших вариантов считается Java – рассказываем почему.
https://proglib.io/sh/y7Jmec9Gnj
Если вы подумываете заняться разработкой мобильных приложений, возникает вопрос выбора языка программирования. Одним из лучших вариантов считается Java – рассказываем почему.
https://proglib.io/sh/y7Jmec9Gnj
Что делает volatile?
Во-первых, чтение/запись такого поля становятся атомарными. Это применение актуально только для
Второй и самый интересный эффект – пара событий запись-чтение для такого поля являются synchronization actions. Значит, между ними существует отношение happens-before. Это значит, что существует гарантия, что произошедшее в памяти до записи будет видно после чтения. То есть будут успешно прочитаны значения, записанные в другие переменные.
Для полного понимания темы рекомендуется к просмотру доклад Алексея Шипилёва и документация. Лучше всего эффект
Этот эффект используется для получения простой и дешевой адаптации программы к многопоточной среде без использования сложных и ошибкоопасных техник блокировок и синхронизаций.
volatile
– ключевое слово для работы с многопоточностью. Не то же самое, что volatile
в C++, не обязано делать что-либо с кэшем процессора. Оказывает на поле объекта ровно два эффекта.Во-первых, чтение/запись такого поля становятся атомарными. Это применение актуально только для
long
и double
, и не на всех платформах. Для остальных типов полей это верно и так.Второй и самый интересный эффект – пара событий запись-чтение для такого поля являются synchronization actions. Значит, между ними существует отношение happens-before. Это значит, что существует гарантия, что произошедшее в памяти до записи будет видно после чтения. То есть будут успешно прочитаны значения, записанные в другие переменные.
Для полного понимания темы рекомендуется к просмотру доклад Алексея Шипилёва и документация. Лучше всего эффект
volatile
иллюстрирует задача из этого доклада, которую часто и дают в качестве этого вопроса. Вопрос – что выведет данный код:int a; int b;Трюк в том, что помимо очевидных 21 (поток 2 отработал после 1), 00 (поток 2 отработал до 1, переменные еще не инициализированы) и 01 (поток 2 сработал между записями), может быть и неожиданные 20. Дело в том, что для операторов одного потока действует program order, он гарантирует хотя бы видимость правильной последовательности операций. Между потоками необходим «мост» из happens-before. Его даст применение модификатора
// thread 1:
a = 1;
b = 2;
// thread 2:
System.out.print(b);
System.out.print(a);
volatile
к переменной b
, неожиданный результат 20 будет исключен.Этот эффект используется для получения простой и дешевой адаптации программы к многопоточной среде без использования сложных и ошибкоопасных техник блокировок и синхронизаций.
YouTube
Алексей Шипилёв — Прагматика Java Memory Model
Ближайшая конференция — JPoint 2025, 3–4 апреля (Москва + трансляция).
Подробности и билеты: https://jrg.su/T2zfbS
— —
. . . . Встреча JUG.ru c Алексеем Шипилёвым из Oracle — Прагматика Java Memory Model.
6 февраля 2014 года.
Это самая первая (необкатанная)…
Подробности и билеты: https://jrg.su/T2zfbS
— —
. . . . Встреча JUG.ru c Алексеем Шипилёвым из Oracle — Прагматика Java Memory Model.
6 февраля 2014 года.
Это самая первая (необкатанная)…
Какими значениями инициализируются переменные по умолчанию?
• Числа инициализируются 0 или 0.0;
• char — \u0000;
• boolean — false;
• Объекты (в том числе String) — null.
• Числа инициализируются 0 или 0.0;
• char — \u0000;
• boolean — false;
• Объекты (в том числе String) — null.
⚖️ Что такое лицензирование ПО и как оно работает?
Рассказываем о классификации лицензий и даем практические советы по лицензированию программного обеспечения.
https://proglib.io/sh/6KQ4TnvaNb
Рассказываем о классификации лицензий и даем практические советы по лицензированию программного обеспечения.
https://proglib.io/sh/6KQ4TnvaNb
#вопросы_с_собеседований
Что такое JSTL (JSP Standard tag library)?
Что такое JSTL (JSP Standard tag library)?
JavaServer Pages Standard Tag Library, JSTL, Стандартная библиотека тегов JSP — расширение спецификации JSP (конечный результат JSR 52), добавляющее библиотеку JSP тегов для общих нужд, таких как разбор XML данных, условная обработка, создание циклов и поддержка интернационализации.
JSTL является альтернативой такому виду встроенной в JSP логики, как скриплеты (прямые вставки Java кода). Использование стандартизованного множества тегов предпочтительнее, поскольку получаемый код легче поддерживать и проще отделять бизнес-логику от логики отображения.
JSTL является альтернативой такому виду встроенной в JSP логики, как скриплеты (прямые вставки Java кода). Использование стандартизованного множества тегов предпочтительнее, поскольку получаемый код легче поддерживать и проще отделять бизнес-логику от логики отображения.
Что такое «fail-fast поведение»?
В Java Collections API некоторые итераторы ведут себя как fail-fast и выбрасывают
Реализация такого поведения осуществляется за счет подсчета количества модификаций коллекции (
• при изменении коллекции счетчик модификаций так же изменяется;
• при создании итератора ему передается текущее значение счетчика;
• при каждом обращении к итератору сохраненное значение счетчика сравнивается с текущим, и, если они не совпадают, возникает исключение.
fail-fast
поведение означает, что при возникновении ошибки или состояния, которое может привести к ошибке, система немедленно прекращает дальнейшую работу и уведомляет об этом. Использование fail-fast
подхода позволяет избежать недетерминированного поведения программы в течение времени.В Java Collections API некоторые итераторы ведут себя как fail-fast и выбрасывают
ConcurrentModificationException
, если после его создания была произведена модификация коллекции, т.е. добавлен или удален элемент напрямую из коллекции, а не используя методы итератора.Реализация такого поведения осуществляется за счет подсчета количества модификаций коллекции (
modification count
):• при изменении коллекции счетчик модификаций так же изменяется;
• при создании итератора ему передается текущее значение счетчика;
• при каждом обращении к итератору сохраненное значение счетчика сравнивается с текущим, и, если они не совпадают, возникает исключение.
Почитать Telegram по пути на работу или полистать избранные каналы в обеденный перерыв — привычка полезная. Она работает еще лучше, если периодически пополнять свой список чем-то новеньким.
Вот, например, ребята из Accenture Russia запустили свой канал для IT-сообщества. У них там и полезная информация на разные темы (работа с данными, облака, микросервисы, AI, DevOps, backend- и frontend-разработка, управление проектами и т.д.), и анонсы мероприятий, и розыгрыши призов в духе книжки на профтему, билета на классную конфу и не только.
Подписывайся, читай, выигрывай!
Вот, например, ребята из Accenture Russia запустили свой канал для IT-сообщества. У них там и полезная информация на разные темы (работа с данными, облака, микросервисы, AI, DevOps, backend- и frontend-разработка, управление проектами и т.д.), и анонсы мероприятий, и розыгрыши призов в духе книжки на профтему, билета на классную конфу и не только.
Подписывайся, читай, выигрывай!
#вопросы_с_собеседований
Сколько элементов будет пропущено, если Iterator.next() будет вызван после 10-ти вызовов Iterator.hasNext()?
Сколько элементов будет пропущено, если Iterator.next() будет вызван после 10-ти вызовов Iterator.hasNext()?
Forwarded from Java jobs — вакансии для java-разработчиков
👔 Middle Java Developer
⛳️ IRLIX
💼🥁 Удаленка
💵 150 000 - 200 000 рублей
Подробнее: https://proglib.io/vacancies/middle-java-developer-irlix-2021-06-23
⛳️ IRLIX
💼🥁 Удаленка
💵 150 000 - 200 000 рублей
Подробнее: https://proglib.io/vacancies/middle-java-developer-irlix-2021-06-23
Библиотека программиста
Middle Java Developer
IRLIX ⌬ IT компания
🏡 место, где работают ⓣⓡⓤⓔ ⓔⓝⓖⓘⓝⓔⓔⓡⓢ
⭐ поддерживаем на пути к результату
🍀 пропагандируем экологию мысли
🏆 #3 в рейтинге по версии Хабр Карьера
🏡 место, где работают ⓣⓡⓤⓔ ⓔⓝⓖⓘⓝⓔⓔⓡⓢ
⭐ поддерживаем на пути к результату
🍀 пропагандируем экологию мысли
🏆 #3 в рейтинге по версии Хабр Карьера
Ответ
Нисколько -
Нисколько -
hasNext()
осуществляет только проверку наличия следующего элемента.В следующий понедельник стартует Курс по многопоточному программированию на Java.
Уровень: middle/senior
Подойдёт тем, кто знает основы многопоточки и готов выйти на новый уровень.
Курс строится вокруг java.util.concurrent. Изучим всё, что там есть, как это применять на практике и сравним разные инструменты между собой. Затронем и смежные темы: мониторинг, флажки JVM, виртуальные потоки и реактивное программирование.
Разберём огромное количество кейсов, лучших практик и возможных ошибок. Курс максимально ориентирован на практику и ситуацию в 2021 году.
Через два месяца вы получите всю базу для работы на хайлоад проекте. Сможете уверенно решать задачи под разную нагрузку. Будете круто выглядеть на собеседованиях🔥
Старт: 12 июля
Длительность: 8 недель
Программа, отзывы - здесь.
Записывайся ➡️ https://fillthegaps.ru/mt2
Уровень: middle/senior
Подойдёт тем, кто знает основы многопоточки и готов выйти на новый уровень.
Курс строится вокруг java.util.concurrent. Изучим всё, что там есть, как это применять на практике и сравним разные инструменты между собой. Затронем и смежные темы: мониторинг, флажки JVM, виртуальные потоки и реактивное программирование.
Разберём огромное количество кейсов, лучших практик и возможных ошибок. Курс максимально ориентирован на практику и ситуацию в 2021 году.
Через два месяца вы получите всю базу для работы на хайлоад проекте. Сможете уверенно решать задачи под разную нагрузку. Будете круто выглядеть на собеседованиях🔥
Старт: 12 июля
Длительность: 8 недель
Программа, отзывы - здесь.
Записывайся ➡️ https://fillthegaps.ru/mt2
Forwarded from Java jobs — вакансии для java-разработчиков
#вакансия #remote #java #backend #работа #москва
Компания: Bright group (bright-group.ru)
Формат работы: удалёнка
Зарплатная вилка: от 200 до 300k net
Middle/Senior java backend-разработчик в компанию Bright Group в наш IT-продукт по управлению движением транспорта и планированию его расписания в режиме реального времени.
Наш стек: Java, Postgres, Hibernate, Spring Framework 5, Spring Boot 2
Инфраструктра: JIRA, Confluence, Gitlab/Jenkins, Docker, Kubernetes (Openshift)
✔️Требования:
📌Задачи:
🔅 Что мы предлагаем:
- Удаленный формат работы;
- Гибкий график;
- Официальное оформление, белая ЗП;
- ДМС.
🤳Контакты:
[email protected]
@avokonlehc
Всем отличного дня!
Компания: Bright group (bright-group.ru)
Формат работы: удалёнка
Зарплатная вилка: от 200 до 300k net
Middle/Senior java backend-разработчик в компанию Bright Group в наш IT-продукт по управлению движением транспорта и планированию его расписания в режиме реального времени.
Наш стек: Java, Postgres, Hibernate, Spring Framework 5, Spring Boot 2
Инфраструктра: JIRA, Confluence, Gitlab/Jenkins, Docker, Kubernetes (Openshift)
✔️Требования:
•
Опыт работы на Java от 3 лет;•
Отличное знание алгоритмов, структур данных, способность писать эффективный код;•
Опыт работы с микросервисной архитектурой;•
Уверенное понимание архитектуры сетевых приложений;•
Опыт разработки приложений, основанных на принципах ООП и паттерне MVC;•
Умение самостоятельно принимать архитектурные решения, искать нужную информацию;•
Уверенное знание SQL;•
Использовать актуальные подходы к разработке и современные технологии;•
Решать задачи в команде с системным аналитиком, frontend-разработчиками и QA-инженерами.•
Опыт разработки клиент-серверных приложений (REST, JSON);•
Опыт работы с Git, знание git flow;•
Умение работать в команде;•
Высшее техническое образование.📌Задачи:
•
Участвовать в процессе разработки функционала, начиная с проектирования и заканчивая поставкой и поддержкой;•
Исследовать и улучшать производительность приложений;•
Писать тесты, инспектировать код;•
Выстраивать взаимодействие внутри команды и снаружи (с project-менеджерами, тестировщиками, frontend-разработчиками);•
Оценивать работу людей в команде, давать обратную связь. Развивать людей в команде;•
Вести пул технических задач;•
Умение общаться и доносить свои мысли лаконично, объяснять свою позицию.🔅 Что мы предлагаем:
- Удаленный формат работы;
- Гибкий график;
- Официальное оформление, белая ЗП;
- ДМС.
🤳Контакты:
[email protected]
@avokonlehc
Всем отличного дня!
#вопросы_с_собеседований
На каком объекте происходит синхронизация при вызове static synchronized метода?
На каком объекте происходит синхронизация при вызове static synchronized метода?
У синхронизированного статического метода нет доступа к this, но есть доступ к объекту класса Class, он присутствует в единственном экземпляре и именно он выступает в качестве монитора для синхронизации статических методов. Таким образом, следующая конструкция:
public class SomeClass {
public static synchronized void someMethod() {
//code
}
}
эквивалентна такой:
public class SomeClass {
public static void someMethod(){
synchronized(SomeClass.class){
//code
}
}
}
public class SomeClass {
public static synchronized void someMethod() {
//code
}
}
эквивалентна такой:
public class SomeClass {
public static void someMethod(){
synchronized(SomeClass.class){
//code
}
}
}