#вопросы_с_собеседований
Для чего нужны функциональные интерфейсы BinaryOperator<T>, DoubleBinaryOperator, IntBinaryOperator и LongBinaryOperator?
Для чего нужны функциональные интерфейсы BinaryOperator<T>, DoubleBinaryOperator, IntBinaryOperator и LongBinaryOperator?
BinaryOperator<T> (бинарный оператор) - интерфейс, с помощью которого реализуется функция, получающая на вход два экземпляра класса T и возвращающая на выходе экземпляр класса T.
BinaryOperator<Integer> operator = (a, b) -> a + b;
System.out.println(operator.apply(1, 2)); // 3
DoubleBinaryOperator - бинарный оператор, получающий на вход Double;
IntBinaryOperator - бинарный оператор, получающий на вход Integer;
LongBinaryOperator - бинарный оператор, получающий на вход Long.
BinaryOperator<Integer> operator = (a, b) -> a + b;
System.out.println(operator.apply(1, 2)); // 3
DoubleBinaryOperator - бинарный оператор, получающий на вход Double;
IntBinaryOperator - бинарный оператор, получающий на вход Integer;
LongBinaryOperator - бинарный оператор, получающий на вход Long.
Прояви свои таланты в «цифре»!
Регистрируйся на самый масштабный конкурс для IT-специалистов в России — «Цифровой Прорыв» 2021! ⚡️
Тебя ждут 8 тематических хакатонов по направлениям: EdTech, EnergoMach, Healthcare, Creative Industries, Vehicles, Fintech и пр.
Крутые кейсовые задания от ведущих российских компаний: Mail.ru Group, Росатом, Ростелеком, и многих других. 👨🏻💻
Прожарка Hard и Soft skills на самой мощной образовательной программе.
Призовой фонд — 55 000 000 рублей. 🏆
Присоединяйся к главному IT-движению и стань частью цифрового будущего России! 🎯
Регистрируйся: https://leadersofdigital.ru/
Регистрируйся на самый масштабный конкурс для IT-специалистов в России — «Цифровой Прорыв» 2021! ⚡️
Тебя ждут 8 тематических хакатонов по направлениям: EdTech, EnergoMach, Healthcare, Creative Industries, Vehicles, Fintech и пр.
Крутые кейсовые задания от ведущих российских компаний: Mail.ru Group, Росатом, Ростелеком, и многих других. 👨🏻💻
Прожарка Hard и Soft skills на самой мощной образовательной программе.
Призовой фонд — 55 000 000 рублей. 🏆
Присоединяйся к главному IT-движению и стань частью цифрового будущего России! 🎯
Регистрируйся: https://leadersofdigital.ru/
#вопросы_с_собеседований
Расположите в виде иерархии следующие интерфейсы: List, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
Расположите в виде иерархии следующие интерфейсы: List, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
#вопросы_с_собеседований
Для чего нужны функциональные интерфейсы ToDoubleBiFunction<T,U>, ToIntBiFunction<T,U> и ToLongBiFunction<T,U>?
Для чего нужны функциональные интерфейсы ToDoubleBiFunction<T,U>, ToIntBiFunction<T,U> и ToLongBiFunction<T,U>?
ToDoubleBiFunction<T,U> - операция принимающая два аргумента классов T и U и возвращающая результат типа Double;
ToLongBiFunction<T,U> - операция принимающая два аргумента классов T и U и возвращающая результат типа Long;
ToIntBiFunction<T,U> - операция принимающая два аргумента классов T и U и возвращающая результат типа Integer.
ToLongBiFunction<T,U> - операция принимающая два аргумента классов T и U и возвращающая результат типа Long;
ToIntBiFunction<T,U> - операция принимающая два аргумента классов T и U и возвращающая результат типа Integer.
#вопросы_с_собеседований
Что такое default методы интрефейса?
Что такое default методы интрефейса?
Java позволяет добавлять неабстрактные реализации методов в интерфейс, используя ключевое слово default:
interface Example {
int process(int a);
default void show() {
System.out.println("default show()");
}
}
☕️ Если класс реализует интерфейс, он может, но не обязан, реализовать методы по-умолчанию, уже реализованные в интерфейсе. Класс наследует реализацию по умолчанию.
☕️ Если некий класс реализует несколько интерфейсов, которые имеют одинаковый метод по умолчанию, то класс должен реализовать метод с совпадающей сигнатурой самостоятельно. Ситуация аналогична, если один интерфейс имеет метод по умолчанию, а в другом этот же метод является абстрактным - никакой реализации по умолчанию классом не наследуется.
☕️ Метод по умолчанию не может переопределить метод класса java.lang.Object.
☕️ Помогают реализовывать интерфейсы без страха нарушить работу других классов.
☕️ Позволяют избежать создания служебных классов, так как все необходимые методы могут быть представлены в самих интерфейсах.
☕️ Дают свободу классам выбрать метод, который нужно переопределить.
☕️ Одной из основных причин внедрения методов по умолчанию является возможность коллекций в Java 8 использовать лямбда-выражения.
interface Example {
int process(int a);
default void show() {
System.out.println("default show()");
}
}
☕️ Если класс реализует интерфейс, он может, но не обязан, реализовать методы по-умолчанию, уже реализованные в интерфейсе. Класс наследует реализацию по умолчанию.
☕️ Если некий класс реализует несколько интерфейсов, которые имеют одинаковый метод по умолчанию, то класс должен реализовать метод с совпадающей сигнатурой самостоятельно. Ситуация аналогична, если один интерфейс имеет метод по умолчанию, а в другом этот же метод является абстрактным - никакой реализации по умолчанию классом не наследуется.
☕️ Метод по умолчанию не может переопределить метод класса java.lang.Object.
☕️ Помогают реализовывать интерфейсы без страха нарушить работу других классов.
☕️ Позволяют избежать создания служебных классов, так как все необходимые методы могут быть представлены в самих интерфейсах.
☕️ Дают свободу классам выбрать метод, который нужно переопределить.
☕️ Одной из основных причин внедрения методов по умолчанию является возможность коллекций в Java 8 использовать лямбда-выражения.
#вопросы_с_собеседований
Для чего используется оператор assert?
Для чего используется оператор assert?
Assert (Утверждение) — это специальная конструкция, позволяющая проверять предположения о значениях произвольных данных в произвольном месте программы. Утверждение может автоматически сигнализировать об обнаружении некорректных данных, что обычно приводит к аварийному завершению программы с указанием места обнаружения некорректных данных.
Утверждения существенно упрощают локализацию ошибок в коде. Даже проверка результатов выполнения очевидного кода может оказаться полезной при последующем рефакторинге, после которого код может стать не настолько очевидным и в него может закрасться ошибка.
Обычно утверждения оставляют включенными во время разработки и тестирования программ, но отключают в релиз-версиях программ.
Т.к. утверждения могут быть удалены на этапе компиляции либо во время исполнения программы, они не должны менять поведение программы. Если в результате удаления утверждения поведение программы может измениться, то это явный признак неправильного использования assert. Таким образом, внутри assert нельзя вызывать методы, изменяющие состояние программы, либо внешнего окружения программы.
В Java проверка утверждений реализована с помощью оператора assert, который имеет форму:
assert [Выражение типа boolean]; или assert [Выражение типа boolean] : [Выражение любого типа, кроме void];
Во время выполнения программы в том случае, если поверка утверждений включена, вычисляется значение булевского выражения, и если его результат false, то генерируется исключение java.lang.AssertionError. В случае использования второй формы оператора assert выражение после двоеточия задаёт детальное сообщение о произошедшей ошибке (вычисленное выражение будет преобразовано в строку и передано конструктору AssertionError).
Утверждения существенно упрощают локализацию ошибок в коде. Даже проверка результатов выполнения очевидного кода может оказаться полезной при последующем рефакторинге, после которого код может стать не настолько очевидным и в него может закрасться ошибка.
Обычно утверждения оставляют включенными во время разработки и тестирования программ, но отключают в релиз-версиях программ.
Т.к. утверждения могут быть удалены на этапе компиляции либо во время исполнения программы, они не должны менять поведение программы. Если в результате удаления утверждения поведение программы может измениться, то это явный признак неправильного использования assert. Таким образом, внутри assert нельзя вызывать методы, изменяющие состояние программы, либо внешнего окружения программы.
В Java проверка утверждений реализована с помощью оператора assert, который имеет форму:
assert [Выражение типа boolean]; или assert [Выражение типа boolean] : [Выражение любого типа, кроме void];
Во время выполнения программы в том случае, если поверка утверждений включена, вычисляется значение булевского выражения, и если его результат false, то генерируется исключение java.lang.AssertionError. В случае использования второй формы оператора assert выражение после двоеточия задаёт детальное сообщение о произошедшей ошибке (вычисленное выражение будет преобразовано в строку и передано конструктору AssertionError).
Узнай о возможности работы удаленно над долгосрочными проектами глобального уровня с EPAM Anywhere.
15 апреля 18:30- 20:00 GMT+3
НА ВЕБИНАРЕ МЫ БОЛЕЕ ПОДРОБНО РАССКАЖЕМ:
- Что такое EPAM Anywhere и возможности работы ремоут в рамках программы;
- Какие есть открытые вакансии для тебя;
- Процесс подачи заявки и этапы отбора;
- Подробно как проходит интервью;
- Как происходит знакомство с проектом и интервью с клиентом;
- Как проходит онбординг процесс в программу.
Зарегистрироваться: https://epa.ms/anywherewebinar-15
15 апреля 18:30- 20:00 GMT+3
НА ВЕБИНАРЕ МЫ БОЛЕЕ ПОДРОБНО РАССКАЖЕМ:
- Что такое EPAM Anywhere и возможности работы ремоут в рамках программы;
- Какие есть открытые вакансии для тебя;
- Процесс подачи заявки и этапы отбора;
- Подробно как проходит интервью;
- Как происходит знакомство с проектом и интервью с клиентом;
- Как проходит онбординг процесс в программу.
Зарегистрироваться: https://epa.ms/anywherewebinar-15
#вопросы_с_собеседований
Для чего нужны функциональные интерфейсы ObjDoubleConsumer<T>, ObjIntConsumer<T> и ObjLongConsumer<T>?
Для чего нужны функциональные интерфейсы ObjDoubleConsumer<T>, ObjIntConsumer<T> и ObjLongConsumer<T>?
☕️ ObjDoubleConsumer<T> - операция, которая принимает два аргумента классов T и Double, производит с ними некоторое действие и ничего не возвращает;
☕️ ObjLongConsumer<T> - операция, которая принимает два аргумента классов T и Long, производит с ними некоторое действие и ничего не возвращает;
☕️ ObjIntConsumer<T> - операция, которая принимает два аргумента классов T и Integer, производит с ними некоторое действие и ничего не возвращает.
☕️ ObjLongConsumer<T> - операция, которая принимает два аргумента классов T и Long, производит с ними некоторое действие и ничего не возвращает;
☕️ ObjIntConsumer<T> - операция, которая принимает два аргумента классов T и Integer, производит с ними некоторое действие и ничего не возвращает.
В ВТБ открыта вакансия Java-разработчика. На позиции вы будете:
— разрабатывать приложения с использованием микросервисной архитектуры;
— участвовать в code review;
— заниматься написанием unit-тестов.
Присоединяйтесь к ВТБ и вы получите:
— достойную заработную плату и соц.пакет;
— живые и интересные проекты;
— команда из лучших профессионалов, среди более 5000 IT-специалистов компании;
— карьерный рост и возможность выбора направления развития.
Отправляйте резюме до 23 апреля включительно: https://clc.am/lTzxjA
— разрабатывать приложения с использованием микросервисной архитектуры;
— участвовать в code review;
— заниматься написанием unit-тестов.
Присоединяйтесь к ВТБ и вы получите:
— достойную заработную плату и соц.пакет;
— живые и интересные проекты;
— команда из лучших профессионалов, среди более 5000 IT-специалистов компании;
— карьерный рост и возможность выбора направления развития.
Отправляйте резюме до 23 апреля включительно: https://clc.am/lTzxjA
#вопросы_с_собеседований
Как вызывать default метод интерфейса в реализующем этот интерфейс классе?
Как вызывать default метод интерфейса в реализующем этот интерфейс классе?
interface Paper {
default void show() {
System.out.println("default show()");
}
}
class Licence implements Paper {
public void show() {
Paper.super.show();
}
}
default void show() {
System.out.println("default show()");
}
}
class Licence implements Paper {
public void show() {
Paper.super.show();
}
}
#вопросы_с_собеседований
Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
Объявляем конкурс на самый интересный контент в телеграм-каналах Proglib!
Призовой фонд — 280 тысяч рублей.
Автор лучшего поста в отдельно взятом канале получает 20 тысяч рублей.
В каналах по языкам программирования, data science и мобильной разработке интересно увидеть топовые материалы по этим темам, в канале @progbook топовые рецензии на книги, в @proglibrary материалы по общим темам: проектирование, базы данных, linux, алгоритмы и структуры данных. Поощряются интерактивные форматы — авторские тесты, квизы, функционал которых встроен в Telegram, гифки, шпаргалки, неочевидные фишки.
Полный список каналов:
https://yangx.top/progbook
https://yangx.top/proglibrary
https://yangx.top/pyproglib
https://yangx.top/frontendproglib
https://yangx.top/javaproglib
https://yangx.top/dsproglib
https://yangx.top/phpproglib
https://yangx.top/cppproglib
https://yangx.top/mobileproglib
https://yangx.top/goproglib
https://yangx.top/csharpproglib
https://yangx.top/devopsslib
https://yangx.top/testerlib
https://yangx.top/hackproglib
Все посты будут с лайками и дизлайками и хэштегом #proglib_contest. Ссылки мы будем прогонять через наш сокращатель, будут браться в расчет лайки, дизлайки, охваты, клики по ссылкам. Чем больше лайков/охватов/кликов по ссылкам в публикации, тем больше шансов статьи победителем в конкурсе. Присылайте посты боту @proglib_contest_bot с указанием, на какой канал идет публикация. Юридическая информация здесь.
Призовой фонд — 280 тысяч рублей.
Автор лучшего поста в отдельно взятом канале получает 20 тысяч рублей.
В каналах по языкам программирования, data science и мобильной разработке интересно увидеть топовые материалы по этим темам, в канале @progbook топовые рецензии на книги, в @proglibrary материалы по общим темам: проектирование, базы данных, linux, алгоритмы и структуры данных. Поощряются интерактивные форматы — авторские тесты, квизы, функционал которых встроен в Telegram, гифки, шпаргалки, неочевидные фишки.
Полный список каналов:
https://yangx.top/progbook
https://yangx.top/proglibrary
https://yangx.top/pyproglib
https://yangx.top/frontendproglib
https://yangx.top/javaproglib
https://yangx.top/dsproglib
https://yangx.top/phpproglib
https://yangx.top/cppproglib
https://yangx.top/mobileproglib
https://yangx.top/goproglib
https://yangx.top/csharpproglib
https://yangx.top/devopsslib
https://yangx.top/testerlib
https://yangx.top/hackproglib
Все посты будут с лайками и дизлайками и хэштегом #proglib_contest. Ссылки мы будем прогонять через наш сокращатель, будут браться в расчет лайки, дизлайки, охваты, клики по ссылкам. Чем больше лайков/охватов/кликов по ссылкам в публикации, тем больше шансов статьи победителем в конкурсе. Присылайте посты боту @proglib_contest_bot с указанием, на какой канал идет публикация. Юридическая информация здесь.
Telegram
Книги для программистов
Все о книгах из мира IT.
По рекламе: @proglib_adv
Учиться у нас: https://proglib.io/w/de94a698
Работать у нас: https://job.proglib.io/
Наши каналы: https://yangx.top/proglibrary/9197
РКН: https://www.gosuslugi.ru/snet/67931954509aba565214777d
По рекламе: @proglib_adv
Учиться у нас: https://proglib.io/w/de94a698
Работать у нас: https://job.proglib.io/
Наши каналы: https://yangx.top/proglibrary/9197
РКН: https://www.gosuslugi.ru/snet/67931954509aba565214777d
☕️ OutputStreamWriter — «мост» между классом OutputStream и классом Writer. Символы, записанные в поток, преобразовываются в байты.
☕️ InputStreamReader — аналог для чтения. При помощи методов класса Reader читаются байты из потока InputStream и далее преобразуются в символы.
☕️ InputStreamReader — аналог для чтения. При помощи методов класса Reader читаются байты из потока InputStream и далее преобразуются в символы.
Что такое Java-модули?
Java Platform Module System (JPMS) – система модулей, появившаяся в Java версии 9. Она разрабатывалась под названием Project Jigsaw, и ожидалась еще с Java 7.
Модуль – группа связанных пакетов и ресурсов. Механизм модулей определяет видимость содержимого одних модулей для других. Скрытые модули недоступны ни для обычного использования в коде, ни даже для рефлекшна:
Вдобавок, модули инкапсулируют собственные ресурсы – конфиги и медиафайлы больше не хранятся в общей куче.
Модуль определяется файлом объявления
JVM может работать относительно модулей в трех режимах:
• Legacy mode – применяется, когда код компилируется в режиме совместимости с версиями Java 8 и меньше. Весь код работает как безымянный модуль, флаги для настройки модулярности не работают.
• Single module mode – когда не используется флаг
• Multi-module mode – каждый модуль находится в собственной директории. Общая корневая директория передается в
#Модули
Java Platform Module System (JPMS) – система модулей, появившаяся в Java версии 9. Она разрабатывалась под названием Project Jigsaw, и ожидалась еще с Java 7.
Модуль – группа связанных пакетов и ресурсов. Механизм модулей определяет видимость содержимого одних модулей для других. Скрытые модули недоступны ни для обычного использования в коде, ни даже для рефлекшна:
Class.forName()
выбросит ClassNotFoundException
. Вдобавок, модули инкапсулируют собственные ресурсы – конфиги и медиафайлы больше не хранятся в общей куче.
Модуль определяется файлом объявления
module-info.java
.JVM может работать относительно модулей в трех режимах:
• Legacy mode – применяется, когда код компилируется в режиме совместимости с версиями Java 8 и меньше. Весь код работает как безымянный модуль, флаги для настройки модулярности не работают.
• Single module mode – когда не используется флаг
--module-source-path
. Структура проекта остается старой, файл module-info.java
лежит в директории /src
. Поэтому иметь несколько модулей в одном проекте не получится.• Multi-module mode – каждый модуль находится в собственной директории. Общая корневая директория передается в
--module-source-path
. Полноценное использование JPMS.#Модули