Какой шаблон проектирования лежит в основе класса java.lang.StringBuffer?
Anonymous Quiz
9%
Abstract Factory
66%
Builder
8%
Facade
7%
Adapter
11%
Узнать ответ
👍1
Какое из этих слов не является ключевым в Java?
Anonymous Quiz
6%
static
12%
try
63%
String
9%
new
10%
Узнать ответ
Какие логические операции и операторы вы знаете?
• & : Логическое AND (И);
• && : Сокращённое AND;
• | : Логическое OR (ИЛИ);
• || : Сокращённое OR;
• ^ : Логическое XOR (исключающее OR (ИЛИ));
• ! : Логическое унарное NOT (НЕ);
• &= : AND с присваиванием;
• |= : OR с присваиванием;
• ^= : XOR с присваиванием;
• == : Равно;
• != : Не равно;
• ?: : Тернарный (троичный) условный оператор.
#вопросы_с_собеседований
• && : Сокращённое AND;
• | : Логическое OR (ИЛИ);
• || : Сокращённое OR;
• ^ : Логическое XOR (исключающее OR (ИЛИ));
• ! : Логическое унарное NOT (НЕ);
• &= : AND с присваиванием;
• |= : OR с присваиванием;
• ^= : XOR с присваиванием;
• == : Равно;
• != : Не равно;
• ?: : Тернарный (троичный) условный оператор.
#вопросы_с_собеседований
Сортировка списка и костыль в JDK
Вести абстрактные разговоры о разработке легко и приятно. Можно два часа рассуждать, что такое хорошее API, но гораздо полезнее обсудить конкретные примеры. Сегодня разберём метод сортировки.
Если показать вопрос перед постом питонисту, он однозначно выберет
Класс Integer реализует интерфейс
Однако в интерфейсе List нет такого метода, только
(
Сейчас расскажу:)
Java создавался как язык для больших и долгоживущих приложений, и его основные ценности — стабильность и обратная совместимость.
C начала 2000-х в JDK есть метод
В больших компаниях классы JDK часто расширяли удобными методами, в том числе сортировкой в функциональном стиле:
Но есть проблема. Допустим, на проекте есть такой класс:
Многие проекты полагаются на свой sort, поэтому разработчики JDK не стали добавлять его в интерфейс. Метод sort(Comparator) использовался редко, поэтому теперь он с нами.
У Stream API нет проблем с совместимостью, так что для стримов есть прекрасный метод sorted(). Для коллекций метод sorted() есть в Kotlin💖
(обратите внимание на суффикс -ed, всё по правилам функционального подхода)
Ответ на вопрос перед постом: отсортировать список можно так:
✅
Вести абстрактные разговоры о разработке легко и приятно. Можно два часа рассуждать, что такое хорошее API, но гораздо полезнее обсудить конкретные примеры. Сегодня разберём метод сортировки.
Если показать вопрос перед постом питонисту, он однозначно выберет
list.sort()
. Хотя бы потому что в питоне есть такой метод.Класс Integer реализует интерфейс
Comparable
, сортировка чисел — базовая функциональность любого языка программирования. Так что метод sort()
максимально логичен.Однако в интерфейсе List нет такого метода, только
void sort(Comparator<? super E> c) {…}Для элементарной операции сортировки чисел приходится писать
list.sort(Comparator.naturalOrder())Код с Comparator.naturalOrder() похож на какой-то костыль. Под капотом не происходит ничего особенного, реализация компаратора очень простая:
(
с1, с2) -> c1.compareTo(c2)
❓ Так зачем писать так сложно? Почему в интерфейсе List нет метода sort()?Сейчас расскажу:)
Java создавался как язык для больших и долгоживущих приложений, и его основные ценности — стабильность и обратная совместимость.
C начала 2000-х в JDK есть метод
Collections.sort(List)
. Статический метод, который меняет внутреннее состояние аргумента. Сейчас это порицается, но в те времена было норм.В больших компаниях классы JDK часто расширяли удобными методами, в том числе сортировкой в функциональном стиле:
CustomList sorted = list.sort();Спустя много лет стало понятно, что экземплярные методы сортировки — это классно, и надо добавить такой метод в JDK. Чтобы текущие реализации списков не сломались, это должен быть дефолтный метод в интерфейсе List.
Но есть проблема. Допустим, на проекте есть такой класс:
public class CustomList implements List {Допустим, в java 8 в интерфейс List добавили метод
public CustomList sort() {…}
}
default void sort() {…}Старый метод не может переопределить дефолтный. тк возвращаемые значения не совместимы. Поэтому проекты, которые определили свой функциональный sort в начале 2000-х, перестанут компилироваться. Пользователи будут недовольны.
Многие проекты полагаются на свой sort, поэтому разработчики JDK не стали добавлять его в интерфейс. Метод sort(Comparator) использовался редко, поэтому теперь он с нами.
У Stream API нет проблем с совместимостью, так что для стримов есть прекрасный метод sorted(). Для коллекций метод sorted() есть в Kotlin💖
(обратите внимание на суффикс -ed, всё по правилам функционального подхода)
Ответ на вопрос перед постом: отсортировать список можно так:
✅
list.sort(Comparator.naturalOrder());
✅ list = list.stream().sorted().toList();
Если вам понравился list.sort()
, значит у вас хороший вкус на API. К сожалению, у java свои загоны, поэтому этого метода в JDK нет.👍6❤2
Какая строка первой вызовет ошибку компиляции?
Anonymous Quiz
33%
l1
9%
l2
9%
l3
17%
l4
32%
Узнать ответ
Уютное сообщество джавистов
Photo
Ошибка, не прислали само условие. 7% правильно ответило) 41% почти)
🤣3
Сколько переходов происходит в момент вызова HashMap.get(key) по ключу, который есть в таблице?
• ключ равен null: 1 - выполняется единственный метод getForNullKey().
• любой ключ отличный от null: 4 - вычисление хэш-кода ключа; определение номера корзины; поиск значения; возврат значения.
#вопросы_с_собеседований
• любой ключ отличный от null: 4 - вычисление хэш-кода ключа; определение номера корзины; поиск значения; возврат значения.
#вопросы_с_собеседований
👍3
Какой из этих конструкторов используется для создания пустого объекта String?
Anonymous Quiz
63%
String()
4%
String(void)
3%
String(0)
30%
Ни один из перечисленных
Имеет ли смысл объявлять метод private final?
Объявление метода с модификаторами private и final имеет смысл, когда вы хотите:
— Скрыть детали реализации метода от других классов.
— Зафиксировать определенное поведение метода и не дать его переопределить.
— Сделать метод доступным только для использования внутри данного класса.
#вопросы_с_собеседований
— Скрыть детали реализации метода от других классов.
— Зафиксировать определенное поведение метода и не дать его переопределить.
— Сделать метод доступным только для использования внутри данного класса.
👎14👍2
Что означает переопределение метода в Java (override)?
Anonymous Quiz
78%
Изменение поведения метода относительно родительского
5%
Изменение поведения метода относительно дочернего
17%
Несколько методов с одинаковыми названиями, но разными наборами параметров
👍1
Что произойдет при вызове Iterator.next() без предварительного вызова Iterator.hasNext()?
Если итератор указывает на последний элемент коллекции, то возникнет исключение NoSuchElementException, иначе будет возвращен следующий элемент.
#вопросы_с_собеседований
Какое значение будет сохранено в строку s? String s = "value = " + 2 + 2;
Anonymous Quiz
9%
"value = 2 + 2"
43%
"value = 22"
19%
Compiler Error
23%
"value = 4"
7%
"value = 2 2"
В чем разница между Iterator и Enumeration?
— Iterator появился в JDK 1.2 и реализует интерфейс Iterable, в то время как Enumeration существовал в более ранних версиях JDK и не реализует Iterable.
— Методы Iterator позволяют удалять элементы во время итерации, в то время как методы Enumeration не предоставляют такой возможности.
— Iterator является "fail-fast", то есть выбросит ConcurrentModificationException, если коллекция была изменена, а Enumeration не гарантирует такого поведения.
— Iterator поддерживает обобщенные типы, а Enumeration работает только с объектами типа Object.
#вопросы_с_собеседований
— Методы Iterator позволяют удалять элементы во время итерации, в то время как методы Enumeration не предоставляют такой возможности.
— Iterator является "fail-fast", то есть выбросит ConcurrentModificationException, если коллекция была изменена, а Enumeration не гарантирует такого поведения.
— Iterator поддерживает обобщенные типы, а Enumeration работает только с объектами типа Object.
👍5
Что будет выведено на экран в результате выполнения следующего кода: public class SomeClass { static int x = 5; public static void main(String[] args) { int x; int y = 5; if (y > 3) x = 1; System.out.println(x); } }
Anonymous Quiz
28%
Compiler error
51%
1
3%
3
9%
Error warning
9%
5
В каком случае использование TreeSet предпочтительнее использования HashSet?
Anonymous Quiz
9%
Когда необходимо часто осуществлять обращение к элементам из Set
12%
Когда необходимо часто вставлять в Set новые элементы или удалять их
70%
Когда нужно гарантировать сохранение порядка элементов коллекции
9%
Когда нужно модифицировать производительность итератора по коллекции
Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?
При удалении произвольного элемента из списка, все элементы, находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость, capacity) не изменяется никак.
Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой trimToSize().
#вопросы_с_собеседований
Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой trimToSize().
Предположим, что класс В наследует класс А. Какое утверждение обязательно верно?
Anonymous Quiz
14%
Если класс А имеет только private конструкторы, то и конструкторы класса B должны быть private
44%
Если класс А имел статический метод, то метод в классе В с той же сигнатурой тоже должен быть статик
9%
Если А абстрактный, то класс В тоже должен быть
5%
Если А объявлен final, то класс В тоже должен быть
28%
Если А объявлен public, то класс В тоже должен быть
❤6😁1