Forwarded from Академия Кода
Дочерние классы в массивах
В Java полиморфизм позволяет нам помещать экземпляры разных классов, которые имеют общий родительский класс, вместе в массив или ArrayList. Например, если у нас есть родительский класс Animal с дочерними классами Cat, Dog и Pig, мы можем настроить массив с экземплярами каждого животного, а затем перебрать список животных, чтобы выполнить одно и то же действие над каждым.
Подписывайтесь на канал 👉@coddy_academy
#java
В Java полиморфизм позволяет нам помещать экземпляры разных классов, которые имеют общий родительский класс, вместе в массив или ArrayList. Например, если у нас есть родительский класс Animal с дочерними классами Cat, Dog и Pig, мы можем настроить массив с экземплярами каждого животного, а затем перебрать список животных, чтобы выполнить одно и то же действие над каждым.
Подписывайтесь на канал 👉@coddy_academy
#java
❤1
Чем отличаются checked и unchecked исключения?
Вопрос формулируют по-разному, суть вопроса – объяснение иерархии классов исключений. Подробно описано в документации.
Исключения бывают checked и unchecked. Checked требуется указывать в сигнатуре метода в разделе
🔘
🔘
🔘
🔘
Вопрос формулируют по-разному, суть вопроса – объяснение иерархии классов исключений. Подробно описано в документации.
Исключения бывают checked и unchecked. Checked требуется указывать в сигнатуре метода в разделе
throws
; перехватывать или добавлять в throws
в вызывающем его методе. Unchecked можно добавить, но не обязательно, перехватывать не обязательно даже если указана в throws
. 🔘
Throwable
– базовый класс для всего что может быть использовано с оператором throw
и в конструкции try-catch
🔘
RuntimeException
– «нормальные» unchecked-исключения🔘
Error
– unchecked исключения, которые означают «серьезные проблемы» приложения. Не должны обрабатываться (хотя технически можно). Теоретически JVM может находиться в невалидном состоянии и не давать больше никаких гарантий🔘
Exception
(кроме RuntimeException
) – checked исключения👍4❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Освойте бэкенд-разработку на Java за 10 месяцев!
Профессия для тех, кто настроен серьезно: https://bit.ly/32zzMyP
Научим:
✔️Писать код на Java
✔️Использовать фреймворки Javalin, Spring
✔️Применять принципы ООП
✔️Работать с базами данным, SQL
✔️Настраивать окружение: IDEA, Gradle/Maven, JDK
✔️Пользоваться командной строкой и Git
Поможем:
✔️Наработать практику — вы сделаете 5 проектов на GitHub
✔️Грамотно оформить резюме
✔️Подготовиться к собеседованиям
А еще порекомендуем в хорошие компании и познакомим с сообществом из 26 тысяч айтишников. Присоединяйтесь!
Профессия для тех, кто настроен серьезно: https://bit.ly/32zzMyP
Научим:
✔️Писать код на Java
✔️Использовать фреймворки Javalin, Spring
✔️Применять принципы ООП
✔️Работать с базами данным, SQL
✔️Настраивать окружение: IDEA, Gradle/Maven, JDK
✔️Пользоваться командной строкой и Git
Поможем:
✔️Наработать практику — вы сделаете 5 проектов на GitHub
✔️Грамотно оформить резюме
✔️Подготовиться к собеседованиям
А еще порекомендуем в хорошие компании и познакомим с сообществом из 26 тысяч айтишников. Присоединяйтесь!
👍1
Что такое synchronized?
Можно применять как модификатор метода, и как самостоятельный оператор с блоком кода. Выполняет код при захваченном мониторе объекта. В виде оператора объект указывается явно. В виде модификатора нестатического метода используется
Один из основных инструментов обеспечения потокобезопасности. Одновременно выполняется не более одного блока
Блок
Можно применять как модификатор метода, и как самостоятельный оператор с блоком кода. Выполняет код при захваченном мониторе объекта. В виде оператора объект указывается явно. В виде модификатора нестатического метода используется
this
, статического – .class
текущего класса.Один из основных инструментов обеспечения потокобезопасности. Одновременно выполняется не более одного блока
synchronized
на одном и том же объекте. Такая блокировка называется intrinsic lock или monitor lock, подробно рассматривается в Java Concurrency in Practice 2.3.1.Блок
synchronized
также необходим для использования методов wait, notify, notifyAll.👍8
Перегрузка методов в Java
Концепция перегрузки методов в Java заключается в том, что класс может иметь несколько методов с одинаковым именем при условии, что их конструкции аргументов различны. Перегрузка метода сравнима с перегрузкой конструктора, где мы можем реализовать несколько конструкторов (также с одинаковым именем), при условии, что эти конструкторы имеют различную конструкцию аргументов.
https://www.journaldev.com/16807/method-overloading-in-java
Концепция перегрузки методов в Java заключается в том, что класс может иметь несколько методов с одинаковым именем при условии, что их конструкции аргументов различны. Перегрузка метода сравнима с перегрузкой конструктора, где мы можем реализовать несколько конструкторов (также с одинаковым именем), при условии, что эти конструкторы имеют различную конструкцию аргументов.
https://www.journaldev.com/16807/method-overloading-in-java
👋 Мы — команда айтишников. В текущих условиях компания не может работать как работала, и мы решили переехать всей командой.
💬 Создали канал для таких же, как мы, — тех, кто хочет уехать. Собираем всё самое полезное про релокацию. Рассказываем, с чем столкнулись сами, ищем лайфхаки и способы похачить систему (например, нашли несколько способов, как жить за границей на рубли).
👨💻 А вообще, мы HR-IT-чувачки (то есть без лишней скромности профи в сфере трудоустройства) и сейчас готовим новый проект: будем помогать айтишникам организовать переезд и устроиться на работу в валюте. И ещё сверху грант будем давать💰
👉 Что для этого нужно? Пока что — присоединиться к каналу RelocationDev и следить за новостями😉 Скоро обо всём расскажем — в мельчайших подробностях.
💬 Создали канал для таких же, как мы, — тех, кто хочет уехать. Собираем всё самое полезное про релокацию. Рассказываем, с чем столкнулись сами, ищем лайфхаки и способы похачить систему (например, нашли несколько способов, как жить за границей на рубли).
👨💻 А вообще, мы HR-IT-чувачки (то есть без лишней скромности профи в сфере трудоустройства) и сейчас готовим новый проект: будем помогать айтишникам организовать переезд и устроиться на работу в валюте. И ещё сверху грант будем давать💰
👉 Что для этого нужно? Пока что — присоединиться к каналу RelocationDev и следить за новостями😉 Скоро обо всём расскажем — в мельчайших подробностях.
👎5👍1
Что делает volatile?
Во-первых, чтение/запись такого поля становятся атомарными. Это применение актуально только для
Второй и самый интересный эффект – пара событий запись-чтение для такого поля являются synchronization actions. Значит, между ними существует отношение happens-before. Это значит, что существует гарантия, что произошедшее в памяти до записи будет видно после чтения. То есть будут успешно прочитаны значения, записанные в другие переменные.
Для полного понимания темы рекомендуется к просмотру доклад Алексея Шипилёва и документация. Лучше всего эффект
Трюк в том, что помимо очевидных 21 (поток 2 отработал после 1), 00 (поток 2 отработал до 1, переменные еще не инициализированы) и 01 (поток 2 сработал между записями), может быть и неожиданные 20. Дело в том, что для операторов одного потока действует program order, он гарантирует хотя бы видимость правильной последовательности операций. Между потоками необходим «мост» из happens-before. Его даст применение модификатора
Этот эффект используется для получения простой и дешевой адаптации программы к многопоточной среде без использования сложных и ошибкоопасных техник блокировок и синхронизаций.
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 будет исключен.Этот эффект используется для получения простой и дешевой адаптации программы к многопоточной среде без использования сложных и ошибкоопасных техник блокировок и синхронизаций.
👍9
Делаем Core Services в eCom.
Разрабатываешь на JavaSE 11+? Мы строим платформу для продуктовых команд.
У нас нет легаси, можно хорошо прокачаться в kubernetes и service mesh, много инженерных и инфраструктурных задач.
Подробности по ссылке
Разрабатываешь на JavaSE 11+? Мы строим платформу для продуктовых команд.
У нас нет легаси, можно хорошо прокачаться в kubernetes и service mesh, много инженерных и инфраструктурных задач.
Подробности по ссылке
👍3
Что лучше, ArrayList или LinkedList?
Самый избитый вопрос. Проверяет знание особенностей реализации (кишки ArrayList, кишки LinkedList) и эффективности операций в этих разных реализациях. В вопрос иногда добавляют
Стоит добавить, что для работы на краях лучше использовать реализации специально для этого спроектированного интерфейса Deque: например реализующую кольцевой буфер
Самый избитый вопрос. Проверяет знание особенностей реализации (кишки ArrayList, кишки LinkedList) и эффективности операций в этих разных реализациях. В вопрос иногда добавляют
Vector
– пересинхронизированный и устаревший вариант ArrayList
, который лучше заменить Collections.synchronizedList()
.ArrayList
хранит данные в массиве, LinkedList
в двусвязном списке. Из этого вытекает разница в эффективности разных операций: ArrayList
лучше справляется с изменениями в середине и ростом в пределах capacity, LinkedList
– на краях. В целом обычно ArrayList лучше.Стоит добавить, что для работы на краях лучше использовать реализации специально для этого спроектированного интерфейса Deque: например реализующую кольцевой буфер
ArrayDeque
.👍7🔥3👎2❤1
Forwarded from Академия Кода
Какие типы Java могут имплементировать интерфейсы?
В Java нет концепции множественного наследования, но с помощью интерфейса мы можем его добиться. По сути, интерфейс - это именованный набор определений без реализации. Интерфейс в Java - это особый вид класса. Подобно классам, интерфейс содержит методы и члены; в отличие от классов, в интерфейсе все члены являются окончательными, а все методы абстрактными.
В основном существуют 5 типов Java, которые могут реализовывать интерфейсы:
1. Обычный класс
2. Абстрактный класс
3. Вложенный класс
4. Enum
5. Динамический прокси
Подписывайтесь на канал 👉@coddy_academy
#java
В Java нет концепции множественного наследования, но с помощью интерфейса мы можем его добиться. По сути, интерфейс - это именованный набор определений без реализации. Интерфейс в Java - это особый вид класса. Подобно классам, интерфейс содержит методы и члены; в отличие от классов, в интерфейсе все члены являются окончательными, а все методы абстрактными.
В основном существуют 5 типов Java, которые могут реализовывать интерфейсы:
1. Обычный класс
2. Абстрактный класс
3. Вложенный класс
4. Enum
5. Динамический прокси
Подписывайтесь на канал 👉@coddy_academy
#java
👍2
Когда идти в IT, если не сейчас?
Начать карьеру востребованного разработчика на Java можно с оплатой после трудоустройства в Kata Academy.
Узнай подробнее об учебе: https://clck.ru/eBgVD
В Kata можно изучить Java на реальных проектах и задачах за 8 месяцев. Учеба проходит в интенсивном формате под присмотром ментора. В сообществе студентов и выпускников проекта идет непрерывный обмен опытом и знаниями. Выпускники академии получают в среднем от 3 предложений о работе. А если выпускник не находит работу программистом с зарплатой минимум в 100 тысяч рублей, то за обучение он не платит – гарантировано договором.
Начать карьеру востребованного разработчика на Java можно с оплатой после трудоустройства в Kata Academy.
Узнай подробнее об учебе: https://clck.ru/eBgVD
В Kata можно изучить Java на реальных проектах и задачах за 8 месяцев. Учеба проходит в интенсивном формате под присмотром ментора. В сообществе студентов и выпускников проекта идет непрерывный обмен опытом и знаниями. Выпускники академии получают в среднем от 3 предложений о работе. А если выпускник не находит работу программистом с зарплатой минимум в 100 тысяч рублей, то за обучение он не платит – гарантировано договором.
👎8👍3
Как удалить элемент из 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 итераторы.#Коллекции
👍14
Forwarded from Академия Кода
Как объединить два массива в один на Java?
Можно использовать метод
пример пример кода.
Подписывайтесь на канал 👉@coddy_academy
#java
Можно использовать метод
arraycopy()
в Java чтобы объединить два массива в один,пример пример кода.
Подписывайтесь на канал 👉@coddy_academy
#java
👍4💩2
Какова структура Java Collections Framework? Почему Map не Collection?
🔘
🔘
🔘
Большой обзор фреймворка и сравнение эффективности коллекций можно найти в статье на хабре. Для разговора об эффективности нужно понимать что такое О-нотация. Другая статья содержит практические замеры быстродействия (осторожно, старая публикация, Java 6).
Collection
– хранилище отдельных значений, Map
– хранилище ключ-значение. Отсюда разные методы этих интерфейсов. Если проще, разные сигнатуры методов put
и add
.Collection
в свою очередь делится на три основных группы, и соответствующих им интерфейса:🔘
List
– упорядоченные списки с возможностью содержания дубликатов и доступа по индексу (random access);🔘
Queue
– обычно FIFO-коллекции, предполагает добавление/удаление элементов с края. Интерфейс-наследник Deque
– двусвязная очередь;🔘
Set
– не обязательно упорядоченный набор уникальных (с точки зрения equals
) значений;HashMap
можно привести к виду Collection
вызвав например keySet()
, entrySet()
или values()
.Большой обзор фреймворка и сравнение эффективности коллекций можно найти в статье на хабре. Для разговора об эффективности нужно понимать что такое О-нотация. Другая статья содержит практические замеры быстродействия (осторожно, старая публикация, Java 6).
👍8
Как работает HashMap?
Один из популярнейших вопросов, потому что содержит много нюансов. Лучше всего подготовиться к нему помогает чтение исходного кода
Нюансы которые стоит повторить и запомнить:
🔘 Общий принцип: внутренний массив
🔘 Пересчет хэш-суммы для умещения
🔘
🔘 Невозможность сжать однажды раздувшийся
🔘 Два способа разрешения коллизий: используемый в
🔘 Варианты для многопоточного использования: пересинхронизированная
🔘 Оптимизация Java 8: превращение списка в бакете в дерево при достижении 8 элементов – при большом количестве коллизий скорость доступа растет с O(n) до O(log(n));
🔘 Явное использование бакета 0 для ключа
🔘 Связь с
🔘 Нет гарантий порядка элементов;
Обсуждая этот вопрос на интервью вы обязательно затронете особенности методов equals/hashCode. Возможно придется поговорить об альтернативных хранилищах ключ-значение – TreeMap, LinkedHashMap.
Один из популярнейших вопросов, потому что содержит много нюансов. Лучше всего подготовиться к нему помогает чтение исходного кода
HashMap
. Реализация подробно рассмотрена во множестве статей, например на хабре.Нюансы которые стоит повторить и запомнить:
🔘 Общий принцип: внутренний массив
table
, содержащий бакеты (корзины) – списки элементов с одинаковыми пересчитанными хэш-суммами;🔘 Пересчет хэш-суммы для умещения
int
индексов в capacity
ячейках table
;🔘
rehash
– удвоение размера table
при достижении threshold
(capacity*loadFactor
) занятых бакетов;🔘 Невозможность сжать однажды раздувшийся
table
;🔘 Два способа разрешения коллизий: используемый в
HashMap
метод цепочек и альтернатива – открытая адресация;🔘 Варианты для многопоточного использования: пересинхронизированная
Hashtable
и умная ConcurrentHashMap
;🔘 Оптимизация Java 8: превращение списка в бакете в дерево при достижении 8 элементов – при большом количестве коллизий скорость доступа растет с O(n) до O(log(n));
🔘 Явное использование бакета 0 для ключа
null
;🔘 Связь с
HashSet
– HashMap
, в котором используются только ключи;🔘 Нет гарантий порядка элементов;
Обсуждая этот вопрос на интервью вы обязательно затронете особенности методов equals/hashCode. Возможно придется поговорить об альтернативных хранилищах ключ-значение – TreeMap, LinkedHashMap.
🔥4👍3