Библиотека Java разработчика
رفتن به کانال در Telegram
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP
نمایش بیشتر9 988
مشترکین
+124 ساعت
-157 روز
-5730 روز
آرشیو پست ها
🚀 Уже 30 марта начинаются занятия на онлайн-курсе «Специализация Java Developer»» от OTUS. 15 месяцев вы будете учиться решать реальные задачи разработки с фидбеком в формате полноценного код-ревью. А после обучения у вас будет 3 проектные работы в портфолио и вы сможете претендовать на вакансию Middle Java-разработчика.
📌Успейте оставить заявку, чтобы присоединиться к группе по спец.цене https://otus.pw/paQR/
Repost from Академия Кода
Как объединить два массива в один на Java?
Можно использовать метод
arraycopy() в Java чтобы объединить два массива в один,
пример пример кода.
Подписывайтесь на канал 👉@coddy_academy
#javaRepost from Академия Кода
font-face
Правило CSS font-face позволяет импортировать внешние шрифты или файлы шрифтов непосредственно в таблицы стилей. Расположение файла шрифта должно быть указано в правиле CSS, чтобы файлы можно было загружать из этого места. Это правило также позволяет добавлять локально размещенные шрифты с использованием относительного пути к файлу вместо веб-URL.
Подписывайтесь на канал 👉@coddy_academy
#css
Как удалить элемент из ArrayList при итерации?
Обычно формулируется в виде задачи на внимательность «что здесь не так», например
for (String item : arrayList)
if (item.length() > 2)
arrayList.remove(item);
Подвох в том, что итератор ArrayList, который используется в таком варианте цикла for, является fail-fast, то есть не поддерживает итерацию с параллельной модификацией. А параллельная модификация случается даже в одном потоке, что демонстрирует этот пример. Следующий шаг итератора после удаления элемента выбросит ConcurrentModificationException.
Не исключение, но неожиданный результат получится если пользоваться не итератором, а обычным циклом for – при каждом удалении нумерация элементов будет сдвигаться.
Единственный способ удалить элемент из коллекции при обходе, не получив при этом ConcurrentModificationException или неопределенное поведение – удалить с помощью remove() того же инстанса итератора. Вариант ListIterator поможет, если в теле цикла требуется и работа с индексами.
Некоторые коллекции, такие как CopyOnWriteArrayList и ConcurrentHashMap адаптированные под многопоточную среду и имеют fail-safe итераторы.
#КоллекцииКогда идти в IT, если не сейчас?
Начать карьеру востребованного разработчика на Java можно с оплатой после трудоустройства в Kata Academy.
Узнай подробнее об учебе: https://clck.ru/eBgVD
В Kata можно изучить Java на реальных проектах и задачах за 8 месяцев. Учеба проходит в интенсивном формате под присмотром ментора. В сообществе студентов и выпускников проекта идет непрерывный обмен опытом и знаниями. Выпускники академии получают в среднем от 3 предложений о работе. А если выпускник не находит работу программистом с зарплатой минимум в 100 тысяч рублей, то за обучение он не платит – гарантировано договором.
❓ Как тестировать игровую локализацию на мобильных устройствах?
👉 Узнайте на открытом вебинаре в OTUS, 23 марта.
💪 Урок проведет Кристина Бокан, аналитик тестирования (VSO, Technology) в компании Playrix.
Она работала над такими известными проектами, как Township, Gardenscapes, Homescapes.
👾 На занятии мы:
- Поговорим об особенностях разных стран, отличиях в менталитете, праздниках и законодательстве
- Обсудим, как эти особенности необходимо учитывать в QA
- Попробуем найти баги локализации в интерактивной части занятия
📌 Demo-занятие является частью онлайн-курса «Game QA Engineer» для тех, кто хочет с нуля начать карьеру в геймдеве с нуля.
👉 Зарегистрируйся на занятие для участия https://otus.pw/2FQk/
Repost from Академия Кода
Какие типы Java могут имплементировать интерфейсы?
В Java нет концепции множественного наследования, но с помощью интерфейса мы можем его добиться. По сути, интерфейс - это именованный набор определений без реализации. Интерфейс в Java - это особый вид класса. Подобно классам, интерфейс содержит методы и члены; в отличие от классов, в интерфейсе все члены являются окончательными, а все методы абстрактными.
В основном существуют 5 типов Java, которые могут реализовывать интерфейсы:
1. Обычный класс
2. Абстрактный класс
3. Вложенный класс
4. Enum
5. Динамический прокси
Подписывайтесь на канал 👉@coddy_academy
#java
Что лучше, ArrayList или LinkedList?
Самый избитый вопрос. Проверяет знание особенностей реализации (кишки ArrayList, кишки LinkedList) и эффективности операций в этих разных реализациях. В вопрос иногда добавляют
Vector – пересинхронизированный и устаревший вариант ArrayList, который лучше заменить Collections.synchronizedList().
ArrayList хранит данные в массиве, LinkedList в двусвязном списке. Из этого вытекает разница в эффективности разных операций: ArrayList лучше справляется с изменениями в середине и ростом в пределах capacity, LinkedList – на краях. В целом обычно ArrayList лучше.
Стоит добавить, что для работы на краях лучше использовать реализации специально для этого спроектированного интерфейса Deque: например реализующую кольцевой буфер ArrayDeque.Делаем Core Services в eCom.
Разрабатываешь на JavaSE 11+? Мы строим платформу для продуктовых команд.
У нас нет легаси, можно хорошо прокачаться в kubernetes и service mesh, много инженерных и инфраструктурных задач.
Подробности по ссылке
Что делает volatile?
volatile – ключевое слово для работы с многопоточностью. Не то же самое, что volatile в C++, не обязано делать что-либо с кэшем процессора. Оказывает на поле объекта ровно два эффекта.
Во-первых, чтение/запись такого поля становятся атомарными. Это применение актуально только для long и double, и не на всех платформах. Для остальных типов полей это верно и так.
Второй и самый интересный эффект – пара событий запись-чтение для такого поля являются synchronization actions. Значит, между ними существует отношение happens-before. Это значит, что существует гарантия, что произошедшее в памяти до записи будет видно после чтения. То есть будут успешно прочитаны значения, записанные в другие переменные.
Для полного понимания темы рекомендуется к просмотру доклад Алексея Шипилёва и документация. Лучше всего эффект volatile иллюстрирует задача из этого доклада, которую часто и дают в качестве этого вопроса. Вопрос – что выведет данный код:
int a; int b;
// thread 1:
a = 1;
b = 2;
// thread 2:
System.out.print(b);
System.out.print(a);
Трюк в том, что помимо очевидных 21 (поток 2 отработал после 1), 00 (поток 2 отработал до 1, переменные еще не инициализированы) и 01 (поток 2 сработал между записями), может быть и неожиданные 20. Дело в том, что для операторов одного потока действует program order, он гарантирует хотя бы видимость правильной последовательности операций. Между потоками необходим «мост» из happens-before. Его даст применение модификатора volatile к переменной b, неожиданный результат 20 будет исключен.
Этот эффект используется для получения простой и дешевой адаптации программы к многопоточной среде без использования сложных и ошибкоопасных техник блокировок и синхронизаций.👋 Мы — команда айтишников. В текущих условиях компания не может работать как работала, и мы решили переехать всей командой.
💬 Создали канал для таких же, как мы, — тех, кто хочет уехать. Собираем всё самое полезное про релокацию. Рассказываем, с чем столкнулись сами, ищем лайфхаки и способы похачить систему (например, нашли несколько способов, как жить за границей на рубли).
👨💻 А вообще, мы HR-IT-чувачки (то есть без лишней скромности профи в сфере трудоустройства) и сейчас готовим новый проект: будем помогать айтишникам организовать переезд и устроиться на работу в валюте. И ещё сверху грант будем давать💰
👉 Что для этого нужно? Пока что — присоединиться к каналу RelocationDev и следить за новостями😉 Скоро обо всём расскажем — в мельчайших подробностях.
Перегрузка методов в Java
Концепция перегрузки методов в Java заключается в том, что класс может иметь несколько методов с одинаковым именем при условии, что их конструкции аргументов различны. Перегрузка метода сравнима с перегрузкой конструктора, где мы можем реализовать несколько конструкторов (также с одинаковым именем), при условии, что эти конструкторы имеют различную конструкцию аргументов.
https://www.journaldev.com/16807/method-overloading-in-java
Что такое synchronized?
Можно применять как модификатор метода, и как самостоятельный оператор с блоком кода. Выполняет код при захваченном мониторе объекта. В виде оператора объект указывается явно. В виде модификатора нестатического метода используется
this, статического – .class текущего класса.
Один из основных инструментов обеспечения потокобезопасности. Одновременно выполняется не более одного блока synchronized на одном и том же объекте. Такая блокировка называется intrinsic lock или monitor lock, подробно рассматривается в Java Concurrency in Practice 2.3.1.
Блок synchronized также необходим для использования методов wait, notify, notifyAll.Освойте бэкенд-разработку на Java за 10 месяцев!
Профессия для тех, кто настроен серьезно: https://bit.ly/32zzMyP
Научим:
✔️Писать код на Java
✔️Использовать фреймворки Javalin, Spring
✔️Применять принципы ООП
✔️Работать с базами данным, SQL
✔️Настраивать окружение: IDEA, Gradle/Maven, JDK
✔️Пользоваться командной строкой и Git
Поможем:
✔️Наработать практику — вы сделаете 5 проектов на GitHub
✔️Грамотно оформить резюме
✔️Подготовиться к собеседованиям
А еще порекомендуем в хорошие компании и познакомим с сообществом из 26 тысяч айтишников. Присоединяйтесь!
Чем отличаются checked и unchecked исключения?
Вопрос формулируют по-разному, суть вопроса – объяснение иерархии классов исключений. Подробно описано в документации.
Исключения бывают checked и unchecked. Checked требуется указывать в сигнатуре метода в разделе
throws; перехватывать или добавлять в throws в вызывающем его методе. Unchecked можно добавить, но не обязательно, перехватывать не обязательно даже если указана в throws.
🔘 Throwable – базовый класс для всего что может быть использовано с оператором throw и в конструкции try-catch
🔘 RuntimeException – «нормальные» unchecked-исключения
🔘 Error – unchecked исключения, которые означают «серьезные проблемы» приложения. Не должны обрабатываться (хотя технически можно). Теоретически JVM может находиться в невалидном состоянии и не давать больше никаких гарантий
🔘 Exception (кроме RuntimeException) – checked исключения🔥Хардкорный тест по Java🔥
⭕️Осторожно! Из-за этого курса можно стать супервостребованным Java-разработчиком! Пройди тест из 20 вопроса и испытай себя.
🦸🏼♂️62 компании-партнера ждут, когда ты овладеешь этим мастерством. Проходи вступительный тест и помни большая сила — большая ответственность!
📌ПРОЙТИ ТЕСТ - https://otus.pw/dvKm/
Repost from Академия Кода
Дочерние классы в массивах
В Java полиморфизм позволяет нам помещать экземпляры разных классов, которые имеют общий родительский класс, вместе в массив или ArrayList. Например, если у нас есть родительский класс Animal с дочерними классами Cat, Dog и Pig, мы можем настроить массив с экземплярами каждого животного, а затем перебрать список животных, чтобы выполнить одно и то же действие над каждым.
Подписывайтесь на канал 👉@coddy_academy
#java
Какие бывают модификаторы?
🔘 Модификаторы доступа
private, protected, public (рассмотрим подробнее в разделе #Классы)
🔘 Модификаторы для многопоточности synchronized и volatile (подробнее чуть позже)
🔘 static (рассмотрим подробнее в разделе #Классы)
🔘 final
🔘 abstract (рассмотрим подробнее в разделе #Классы)
🔘 native – реализация метода скрыта внутри JVM, нельзя указывать в пользовательском коде
🔘 transient – поле будет пропущено при сериализации
🔘 strictfp – самый экзотический, ограничивает точность вычисления для переменной с плавающей точкой до стандарта IEEE. Нужно для переносимости между платформами.Один из инструментов, необходимых Сloud Native специалисту — Well-Architected Framework. Начни знакомство с этой методикой на открытом вебинаре в OTUS 21 марта в 20:00 (мск).
Занятие проведет Олег Кожанов
Senior Technical Program Manager в Amazon Germany.
📚 Что вас ждет на занятии?
• Рассмотрим причины появления WAF.
• Посмотрим WAF с точки зрения AWS, Azure и GCP, а так же 5 «столпов» WAF.
• Рассмотрим требования к программному решения с точки зрения эффективной производительности.
Занятие является частью онлайн-курса «Cloud Solution Architecture». Участие позволит вам оценить качество программы и познакомиться с преподавателем.
🎯Чтобы посетить открытый урок, зарегистрируйтесь по ссылке:
https://otus.pw/wZdu/
Какие существуют литералы?
Литерал – последовательность символов, обозначающая значение примитивного типа (или строки).
🔘 Целочисленные (Integer). Возможные форматы:
2019, 1__000_000 (с Java 7), 10048L (можно l, но будет путаться с 1), 0xfd12aa, 0b1011101, 07654321.
🔘 С плавающей точкой (floating-point). Возможные форматы: 123.4, 56.7e8, .07, 42F, 1.4D (избыточно, по умолчанию и так double).
🔘 Символы и строки. Символ (char) – в одинарных кавычках: 'R'. Спецсимволы пишутся с бэкслешем: '\n'. Любой символ можно представлять в виде escape-последовательности: '\u00F1'. Строковый литерал – последовательность символов в двойных кавычках: "Blabla". Для символов строки действуют те же правила.
🔘 Логические (boolean). true и false.
🔘 Специальный литерал null.
Все нюансы описаны в официальной документации.