Бесплатный практический вебинар — Java: с чего начать карьеру в программировании?
⏰ Когда: 26 октября в 19:00 по мск.
Расскажем за 2 часа, как освоить базовые навыки программирования на Java, найти удаленную работу и расти в профессии.
На практике познакомимся с синтаксисом языка и напишем программу, которую часто дают новичкам на техническом интервью.
🎁 Всем, кто зарегистрировался — Гайд «Как заговорить на сленге IT-специалистов», а каждому участнику — Карта компетенций Java-разработчика.
Погрузитесь в основы Java и задайте вопросы опытному разработчику!
Реклама. ООО "ХЕКСЛЕТ РУС". ИНН 7325174845. erid: LjN8KZs2V
⏰ Когда: 26 октября в 19:00 по мск.
Расскажем за 2 часа, как освоить базовые навыки программирования на Java, найти удаленную работу и расти в профессии.
На практике познакомимся с синтаксисом языка и напишем программу, которую часто дают новичкам на техническом интервью.
🎁 Всем, кто зарегистрировался — Гайд «Как заговорить на сленге IT-специалистов», а каждому участнику — Карта компетенций Java-разработчика.
Погрузитесь в основы Java и задайте вопросы опытному разработчику!
Реклама. ООО "ХЕКСЛЕТ РУС". ИНН 7325174845. erid: LjN8KZs2V
👍7🔥1🎉1
Как отсортировать Set/Map?
Для Map можно привести ключи/значения к виду Collection, переложить в новый List и отсортировать с помощью Collections.sort. То же делается с Set. Этот метод конечно же неэффективный, так как потребует полного копирования содержимого.
Эффективный способ – хранить данные уже отсортированными. Для таких реализаций созданы интерфейсы-наследники SortedSet и SortedMap.
Реализации SortedSet дают линейный порядок множества. Элементы упорядочены по возрастанию. Порядок либо натуральный (элементы реализуют интерфейс Comparable), либо его определяет переданный в конструктор Comparator.
Этот интерфейс добавляет методы получения подмножества от указанного элемента (tailSet), до элемента (headSet), и между двумя (subSet). Подмножество включает нижнюю границу, не включает верхнюю.
SortedSet расширяется интерфейсом NavigableSet для итерации по порядку, получения ближайшего снизу (floor), сверху (ceiling), большего (higher) и меньшего (lower) заданному элемента.
Все те же правила применяются к элементам SortedMap/NavigableMap относительно их ключей.
Основными реализациями являются TreeSet и TreeMap. Внутри это самобалансирующиеся красно-чёрные деревья. Их структура и способ балансировки – вопрос достойный отдельного поста. Другая любопытная реализация из java.util.concurrent – ConcurrentSkipListMap.
Для Map можно привести ключи/значения к виду Collection, переложить в новый List и отсортировать с помощью Collections.sort. То же делается с Set. Этот метод конечно же неэффективный, так как потребует полного копирования содержимого.
Эффективный способ – хранить данные уже отсортированными. Для таких реализаций созданы интерфейсы-наследники SortedSet и SortedMap.
Реализации SortedSet дают линейный порядок множества. Элементы упорядочены по возрастанию. Порядок либо натуральный (элементы реализуют интерфейс Comparable), либо его определяет переданный в конструктор Comparator.
Этот интерфейс добавляет методы получения подмножества от указанного элемента (tailSet), до элемента (headSet), и между двумя (subSet). Подмножество включает нижнюю границу, не включает верхнюю.
SortedSet расширяется интерфейсом NavigableSet для итерации по порядку, получения ближайшего снизу (floor), сверху (ceiling), большего (higher) и меньшего (lower) заданному элемента.
Все те же правила применяются к элементам SortedMap/NavigableMap относительно их ключей.
Основными реализациями являются TreeSet и TreeMap. Внутри это самобалансирующиеся красно-чёрные деревья. Их структура и способ балансировки – вопрос достойный отдельного поста. Другая любопытная реализация из java.util.concurrent – ConcurrentSkipListMap.
👍12🔥2
⚡В OTUS продолжается набор в группу курса "Kotlin Backend Developer Professional".
🔥Старт 25.10.2023 г.
Ознакомьтесь с преимуществами программы и успейте пройти вступительное тестирование для того, чтобы попасть в группу по специальной цене
✅Вы прикоснетесь к большому числу инструментов разработки современных, гибких, высокопроизводительных серверных приложений на языке Kotlin.
✅За время обучения преподаватели на вебинарах в качестве примера разработают проект маркетплейса от идеи и постановки задачи до конечного решения.
✅Вам будет предложено выполнить собственный проект на выбор, в котором вы сконцентрируетесь на углубленном изучении некоторых инструментов и на практике овладеете навыками работы в жестких условиях экстремальных проектов.
🔥ПРОЙТИ ТЕСТ и получить бонус https://otus.pw/2NC6/
При поступлении в группу возможны разные способы оплаты и рассрочка платежа
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KNoWD
🔥Старт 25.10.2023 г.
Ознакомьтесь с преимуществами программы и успейте пройти вступительное тестирование для того, чтобы попасть в группу по специальной цене
✅Вы прикоснетесь к большому числу инструментов разработки современных, гибких, высокопроизводительных серверных приложений на языке Kotlin.
✅За время обучения преподаватели на вебинарах в качестве примера разработают проект маркетплейса от идеи и постановки задачи до конечного решения.
✅Вам будет предложено выполнить собственный проект на выбор, в котором вы сконцентрируетесь на углубленном изучении некоторых инструментов и на практике овладеете навыками работы в жестких условиях экстремальных проектов.
🔥ПРОЙТИ ТЕСТ и получить бонус https://otus.pw/2NC6/
При поступлении в группу возможны разные способы оплаты и рассрочка платежа
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KNoWD
👍5
Какой результат выведет следующая программа?
Anonymous Quiz
30%
0
50%
100
4%
200
16%
Ошибку компиляции
👍25☃2❤2🎉1
Узнайте всего за пару часов на бесплатном открытом уроке от OTUS.
На эфире:
- Выясним, что такое аспекты.
- Разберемся, как работают аспекты в Spring.
- Узнаем, что нужно и что не нужно писать на аспектах.
Это отличная возможность совершенно бесплатно протестировать формат обучения и задать преподавателю любые вопросы в режиме реального времени.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruPlease open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
Как создать immutable-коллекцию?
В Collections Framework имеется набор методов Collections.unmodifiable*() для различных типов коллекций. Такой метод вернет read-only обертку над переданной коллекцией. Так же как с Collections.synchronized*(), внутри используется не копия, а оригинальная коллекция.
Другой менее очевидный способ – метод Collections.empty*(). Он возвращает немодифицируемую пустую коллекцию. Попытка добавить элемент как и в случае unmodifiable приведет к UnsupportedOperationException.
В Collections Framework имеется набор методов Collections.unmodifiable*() для различных типов коллекций. Такой метод вернет read-only обертку над переданной коллекцией. Так же как с Collections.synchronized*(), внутри используется не копия, а оригинальная коллекция.
Другой менее очевидный способ – метод Collections.empty*(). Он возвращает немодифицируемую пустую коллекцию. Попытка добавить элемент как и в случае unmodifiable приведет к UnsupportedOperationException.
👍10🔥1
Предскажите результат.
Anonymous Quiz
63%
Main. main(String[] arr) is called
4%
Main. main() is called
7%
Ошибка при выполнении
26%
Ошибка компиляции
👍26☃2❤1🔥1🍌1
Все мы пишем много кода и слышим много советов о том, как это делать лучше. Но как же это надоело, хочу дать вам советы, как сделать код, который сложно прочитать и, следовательно, сложно сопровождать.
В статье мы научимся:
✔️ как тратить своё время и время коллег впустую;
✔️ стать незаменимым, так как больше в вашем коде никто не разберется;
✔️заслужить всеобщую ненависть.
А если хотите прокачать свои навыки, приходите на наш авторский курс "Java Developer. Professional" и становитесь экспертом в своей области!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ruPlease open Telegram to view this post
VIEW IN TELEGRAM
👍4
Какими коллекциями пользоваться в многопоточной среде?
Первый вариант – превратить в синхронизированную обычную коллекцию, вызвав соответствующий ее типу метод Collections.synchronized*(). Самый общий и самый примитивный способ, создает обертку с синхронизацией всех операций с помощью synchronized.
Если работа с коллекцией состоит в основном из чтения, лучшая в плане производительности альтернатива – CopyOnWriteArrayList, и содержащий его в реализации CopyOnWriteArraySet. Потокобезопасность достигается копированием внутреннего массива при любой модификации, оригинальный массив остается immutable. Program order достигается модификатором volatile на внутреннем массиве.
Третий вариант – использование Concurrent-коллекций:
🔘 Неблокирующие хэш-таблицы ConcurrentSkipListMap, ConcurrentHashMap и ConcurrentSkipListSet (хэш-таблица в основе реализации)
🔘 Неблокирующие очереди ConcurrentLinkedQueue и ConcurrentLinkedDeque
🔘 Большой набор различных блокирующих очередей
Первый вариант – превратить в синхронизированную обычную коллекцию, вызвав соответствующий ее типу метод Collections.synchronized*(). Самый общий и самый примитивный способ, создает обертку с синхронизацией всех операций с помощью synchronized.
Если работа с коллекцией состоит в основном из чтения, лучшая в плане производительности альтернатива – CopyOnWriteArrayList, и содержащий его в реализации CopyOnWriteArraySet. Потокобезопасность достигается копированием внутреннего массива при любой модификации, оригинальный массив остается immutable. Program order достигается модификатором volatile на внутреннем массиве.
Третий вариант – использование Concurrent-коллекций:
🔘 Неблокирующие хэш-таблицы ConcurrentSkipListMap, ConcurrentHashMap и ConcurrentSkipListSet (хэш-таблица в основе реализации)
🔘 Неблокирующие очереди ConcurrentLinkedQueue и ConcurrentLinkedDeque
🔘 Большой набор различных блокирующих очередей
👍13🔥2❤1
🎓 Осввойте одну из самых востребованных онлайн профессий за 2 месяца и получите помощь с трудоустройством!
Станьте участником федерального проекта "Содействие занятости" - цель которого помочь гражданам бесплатно освоить новую или сменить действующую профессию.
Открыт набор на бесплатное онлайн-обучение от ТГУ по программе: "Web-программист".
*ТГУ входит в 100 сильнейших вузов мира и Топ-5 России.
Узнайте подробнее и подайте заявку:
https://tglink.io/e6c28dfcb8d7
Обучение с проектом «Содействие занятости» это:
🔸 Полностью бесплатное онлайн-обучение
🔸 Более 65 000 выпускников, 75% из которых трудоустроены
🔸 Обучение по 2–3 часа в день в удобное для вас время;
🔸 Документ об образовании — подтвердит ваши навыки и компетенции;
🔸 Помощь с трудоустройством после обучения.
Количество мест на бесплатное обучение ограничено, спешите подать заявку.
Реклама. ООО "АДИ ГРУПП". ИНН 7017283529. erid: LjN8K5Khg
Станьте участником федерального проекта "Содействие занятости" - цель которого помочь гражданам бесплатно освоить новую или сменить действующую профессию.
Открыт набор на бесплатное онлайн-обучение от ТГУ по программе: "Web-программист".
*ТГУ входит в 100 сильнейших вузов мира и Топ-5 России.
Узнайте подробнее и подайте заявку:
https://tglink.io/e6c28dfcb8d7
Обучение с проектом «Содействие занятости» это:
🔸 Полностью бесплатное онлайн-обучение
🔸 Более 65 000 выпускников, 75% из которых трудоустроены
🔸 Обучение по 2–3 часа в день в удобное для вас время;
🔸 Документ об образовании — подтвердит ваши навыки и компетенции;
🔸 Помощь с трудоустройством после обучения.
Количество мест на бесплатное обучение ограничено, спешите подать заявку.
Реклама. ООО "АДИ ГРУПП". ИНН 7017283529. erid: LjN8K5Khg
👍5
Какой результат выведет следующая программа?
Anonymous Quiz
21%
A.print() is called
64%
B.print() is called
3%
Ошибку при выполнении
12%
Ошибку компиляции
👍19🔥1🎉1
Как создать HashMap сразу с элементами?
Проблема с созданием Map в том, что в отличие от других коллекций инициализация должна принять параметрами набор пар неопределенного размера. Поэтому varargs здесь не подходит.
Самый примитивный, многословный, но простой способ – добавить элементы сразу после создания. Для мапы-поля класса это можно сделать в конструкторе или блоке инициализации.
Удобно создавать HashMap из стрима. Коллектор Collectors.toMap(keyMapper, valueMapper) с помощью мапперов превратит объекты потока в ключи и значения.
В Java 9 наконец появились фабричные метод Map.of(), перегруженный для разного количества пар параметров, и Map.ofEntries() с varargs-аргументом.
До Java 9 подобное было реализовано во многих популярных библиотеках, например ImmutableMap.of в Guava и MapUtils.putAll() в Apache Commons.
Проблема с созданием Map в том, что в отличие от других коллекций инициализация должна принять параметрами набор пар неопределенного размера. Поэтому varargs здесь не подходит.
Самый примитивный, многословный, но простой способ – добавить элементы сразу после создания. Для мапы-поля класса это можно сделать в конструкторе или блоке инициализации.
Map<String, String> map = new HashMap<>();Идиома double brace initialization. Компактная запись, которая расшифровывается компилятором как создание анонимного класса-наследника от HashMap, с добавлением элементов в блоке статической инициализации. Создание нового класса приводит к дополнительным накладным расходам, так делать не рекомендуется.
{
map.put("one", "first");
map.put("two", "second");
}
new HashMap<String, String>() {{
put("one", "first");
put("two", "second");
}};
Для специальных случаев, пустой и одноэлементной неизменяемых мап, в классе Collections есть соответствующие фабричные методы emptyMap() и singletonMap(key, value).Удобно создавать HashMap из стрима. Коллектор Collectors.toMap(keyMapper, valueMapper) с помощью мапперов превратит объекты потока в ключи и значения.
В Java 9 наконец появились фабричные метод Map.of(), перегруженный для разного количества пар параметров, и Map.ofEntries() с varargs-аргументом.
До Java 9 подобное было реализовано во многих популярных библиотеках, например ImmutableMap.of в Guava и MapUtils.putAll() в Apache Commons.
👍15🔥5❤2
Станьте одним из профессионалов, которые способны применять в работе архитектурные решения высшего пилотажа – пройдите обучение «Highload Architect» от OTUS.
Всего за 5 месяцев вы научитесь:
- использовать в своих проектах решения, которые выдерживают сотни тысяч (и даже миллионы) запросов в секунду;
- правильно оптимизировать работоспособность серверов;
- эффективно использовать инструменты, которые уже есть в проектах.
Программа полностью обновлена и отвечает реалиям мира IT. Все преподаватели курса – практикующие специалисты с ценнейшим опытом. Занятия проходят в режиме живых онлайн-вебинаров, сочетаемых с выполнением домашних работ и созданием выпускного проекта для портфолио.
Не упустите возможность перейти на новый профессиональный уровень! Обучение начнется уже 31 октября и в честь Хеллоуина вы можете записаться на курс со скидкой 15% по промокоду «Hello15». Пройдите тестирование прямо сейчас, чтобы воспользоваться предложением: https://otus.pw/ibuFj/
Всего за 5 месяцев вы научитесь:
- использовать в своих проектах решения, которые выдерживают сотни тысяч (и даже миллионы) запросов в секунду;
- правильно оптимизировать работоспособность серверов;
- эффективно использовать инструменты, которые уже есть в проектах.
Программа полностью обновлена и отвечает реалиям мира IT. Все преподаватели курса – практикующие специалисты с ценнейшим опытом. Занятия проходят в режиме живых онлайн-вебинаров, сочетаемых с выполнением домашних работ и созданием выпускного проекта для портфолио.
Не упустите возможность перейти на новый профессиональный уровень! Обучение начнется уже 31 октября и в честь Хеллоуина вы можете записаться на курс со скидкой 15% по промокоду «Hello15». Пройдите тестирование прямо сейчас, чтобы воспользоваться предложением: https://otus.pw/ibuFj/
👍6🔥3❤1
Можно ли хранить null в стандартных коллекциях?
Все интерфейсы Collections Framework позволяют своим реализациям самостоятельно решать, поддерживать ли null-значения. Если реализация не может принять null, она выбрасывает NullPointerException или ClassCastException.
Большинство списков (LinkedList, ArrayList) принимают null без проблем. Большинство очередей (Queue и Deque) не хранят null – возвращая из читающего метода null они сообщают пользователю о пустоте коллекции.
Unmodifiable Maps не допускают null-ов совсем. Обычные изменяемые мапы обычно не испытывают трудности со значениями null. А вот с ключами дело обстоит интереснее.
HashMap не может посчитать hash-сумму от null. Но вместо этого для таких ключей просто используется бакет номер 0.
Иногда этот вопрос дается как задача с подвохом про TreeMap. Nullability её ключей зависит от готовности к этому компаратора. Натуральный порядок (который работает для Comparable ключей) не поддерживает null. Раньше в реализации был баг, который позволял положить значение по ключу null в корень дерева без выброса исключения.
Для значений Set-ов действуют те же правила, что для ключей лежащих в основе их Map-ов.
Все интерфейсы Collections Framework позволяют своим реализациям самостоятельно решать, поддерживать ли null-значения. Если реализация не может принять null, она выбрасывает NullPointerException или ClassCastException.
Большинство списков (LinkedList, ArrayList) принимают null без проблем. Большинство очередей (Queue и Deque) не хранят null – возвращая из читающего метода null они сообщают пользователю о пустоте коллекции.
Unmodifiable Maps не допускают null-ов совсем. Обычные изменяемые мапы обычно не испытывают трудности со значениями null. А вот с ключами дело обстоит интереснее.
HashMap не может посчитать hash-сумму от null. Но вместо этого для таких ключей просто используется бакет номер 0.
Иногда этот вопрос дается как задача с подвохом про TreeMap. Nullability её ключей зависит от готовности к этому компаратора. Натуральный порядок (который работает для Comparable ключей) не поддерживает null. Раньше в реализации был баг, который позволял положить значение по ключу null в корень дерева без выброса исключения.
Для значений Set-ов действуют те же правила, что для ключей лежащих в основе их Map-ов.
🔥6👍4
❗️Внимание! Важное сообщение❗️
👾 На связи YKul
Если ты:
👨🏻💻 Хочешь стать java-разработчиком и зарабатывать в сфере IT
🎓 Окончил курсы java-программиста, но пока не уверен в своих умениях
👨🏻💻 Хорошо знаком с теорией, но боишься практиковать
➡️ Мы приглашаем тебя стать профессионалом вместе с менторами YKul !
😎 Наставники YKul - это опытные разработчики с сотнями успешно реализованных проектов в резюме. Они проведут тебя в мир специалистов IT по кратчайшему пути и обучат важнейшим навыкам в комфортном для тебя режиме.
✅ Мы предоставляем 7 дней бесплатного обучения всем новичкам.
⏱ Не теряй время, попробуй менторинг YKul !
🌐 Узнать подробнее
📲 @ykulmanager1
Реклама: ИП Кулагин Андрей Николаевич, ИНН: 740411652688
👾 На связи YKul
Если ты:
👨🏻💻 Хочешь стать java-разработчиком и зарабатывать в сфере IT
🎓 Окончил курсы java-программиста, но пока не уверен в своих умениях
👨🏻💻 Хорошо знаком с теорией, но боишься практиковать
➡️ Мы приглашаем тебя стать профессионалом вместе с менторами YKul !
😎 Наставники YKul - это опытные разработчики с сотнями успешно реализованных проектов в резюме. Они проведут тебя в мир специалистов IT по кратчайшему пути и обучат важнейшим навыкам в комфортном для тебя режиме.
✅ Мы предоставляем 7 дней бесплатного обучения всем новичкам.
⏱ Не теряй время, попробуй менторинг YKul !
🌐 Узнать подробнее
📲 @ykulmanager1
Реклама: ИП Кулагин Андрей Николаевич, ИНН: 740411652688
👍5🔥1💯1
Что выбрать, Stack или Queue?
Queue – один из основных интерфейсов Java Collections Framework. В общем случае (но не обязательно) представляет FIFO-коллекцию – элементы можно добавлять в хвост, брать или удалять из головы. Его наследник, интерфейс Deque (double ended queue, двусторонняя очередь), позволяет манипулировать элементами на обеих сторонах.
Stack – LIFO коллекция. То есть добавлять и удалять элементы можно только с одного конца. Кроме того, стек наследуется от Vector, и тоже является пересинхронизированным и устаревшим. Его документация явно рекомендует предпочесть использовать Deque.
Queue – один из основных интерфейсов Java Collections Framework. В общем случае (но не обязательно) представляет FIFO-коллекцию – элементы можно добавлять в хвост, брать или удалять из головы. Его наследник, интерфейс Deque (double ended queue, двусторонняя очередь), позволяет манипулировать элементами на обеих сторонах.
Stack – LIFO коллекция. То есть добавлять и удалять элементы можно только с одного конца. Кроме того, стек наследуется от Vector, и тоже является пересинхронизированным и устаревшим. Его документация явно рекомендует предпочесть использовать Deque.
👍12❤3🌚2
🔥 Время прокачивать свои навыки и RustИ !!!
🫵 Проверь себя - пройди тест по Rust 🫵
Ответишь успешно — пройдёшь на курс «Rust Developer. Professional» от Отус по специальной цене.
Сегодня изучаешь Rust - завтра растет твоя ЗП!
➡️ ПРОЙТИ ТЕСТ: https://vk.cc/cs0S9f
💥 Бонусом за успешно пройденный тест, получишь доступ к записям лучших открытых уроков курса.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
🫵 Проверь себя - пройди тест по Rust 🫵
Ответишь успешно — пройдёшь на курс «Rust Developer. Professional» от Отус по специальной цене.
Сегодня изучаешь Rust - завтра растет твоя ЗП!
💥 Бонусом за успешно пройденный тест, получишь доступ к записям лучших открытых уроков курса.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🥴2