#вопросы_с_собеседований
Реализуйте симметрическую разность двух коллекций, используя методы Collection (addAll(...), removeAll(...), retainAll(...)).
Симметрическая разность двух коллекций — это множество элементов, одновременно не принадлежащих обоим исходным коллекциям.
alibaba/fastjson
Библиотека для быстрого преобразования любых произвольных Java-объектов в JSON-представление и обратно. Поддерживает даже объекты со сложной структурой (глубокими иерархиями наследования и использованием универсальных типов).
FastJson улучшает производительность сервера и клиента и позволяет использовать для объектов любые пользовательские представления.
https://github.com/alibaba/fastjson
TheAlgorithms/Java
Коллекция популярных и не очень алгоритмов, реализованных на Java. Тут можно найти решение для любой задачи программирования: сортировки, поиска, сжатия, конвертации и т. д.
Не все из этих алгоритмов удобны и оптимальны, иногда можно найти в стандартной библиотеке Java примеры получше. Однако для демонстрационных и образовательных целей этот репозиторий подходит замечательно.
https://github.com/TheAlgorithms/Java
#вопросы_с_собеседований
Какой результат выведет вызов метода foo()?
Ответ: “HelloHello”
Разберем решение детально: С первым выводом Hello
вопросов быть не должно, далее в метод bar
передаем копию ссылки на строку, теперь на данную строку ссылаются две переменные: m
из метода foo
и m
из метода bar
. Так как строки в Java являются immutable, при попытке присоединить к уже существующей строке дополнительное значение World!
, в методе bar
произойдет создание новой строки и локальная переменная m
этого метода будет ссылаться на новую строку со значением Hello World!
, при этом в методе foo
в результат будет выведено значение переменной m
которая по прежнему ссылается на строку Hello
.
Телеграм-канал MY GAMEDEV проводит стрим для айтишников, которые хотят построить карьеру в геймдеве. 8 декабря в 18:00 Мск менеджер IT-подбора в MY.GAMES Ксения Сухорукова и руководитель проекта в Allods Team Виктор Щепкин расскажут:
✅ про роли разработчиков внутри геймдев-команд
✅ какие бывают карьерные траектории и поделятся успешными переходами в геймдев
✅ как составить резюме и написать сопроводительное письмо
✅ какие навыки особенно пригодятся
Кроме того, для всех участников стрима будет проведен конкурс. Условия участия:
🔔 быть подписанным на канал MY GAMEDEV
📝 пройти тест, ответы на который вы сможете найти в самой трансляции
Среди всех подписчиков, которые наберут максимальное количество правильных ответов, будет разыграно три набора мерча от MY.GAMES.
📆 Добавляйте в календари: 08.12 18:00, телеграм-канал MY GAMEDEV
🔗 Ссылка на стрим
❗️Тест по Kotlin от OTUS.
Пройдите вступительный тест и проверьте, насколько вы готовы к обучению на курсе — "Kotlin Backend Developer". Результат теста получите сразу.
👉 ПРОЙТИ ТЕСТ — https://otus.pw/O0hQ/
💣 Выполните успешно тест - получите доступ к курсу по специальной цене + курс по Git и доступ к 2 открытым урокам курса.
#вопросы_с_собеседований
Могут ли у разных объектов быть одинаковые hashCode()?
Да, могут. Метод hashCode() не гарантирует уникальность возвращаемого значения. Ситуация, когда у разных объектов одинаковые хэш коды называется коллизией. Вероятность возникновения коллизии зависит от используемого алгоритма генерации хэш кода.
assert может принимать 2 аргумента
Обычно assert используется для проверки некоторого условия и бросает AssertionError если условие не удовлетворяется. Чаще всего проверка выглядит так(см 1 на картинке)
Однако, она может быть и такой(см 2 на картинке)
Сообразительный читатель уже догадался, что второе выражение (кстати, оно ленивое) возвращает значение типа Object, которое передаётся в AssertionError и несёт пользователю дополнительные сведения об ошибке. Более формальное описание можно посмотреть тут.
#вопросы_с_собеседований
Какое худшее время работы метода add() для ArrayList?
O(N). Вставка элемента в конец списка осуществляется за время O(1), но если вместимость массива недостаточна, то происходит создание нового массива с увеличенным размером и копирование всех элементов из старого массива в новый.
😀 Хотите выучить html с нуля? Тогда этот бесплатный справочник по html то, что вам нужно.
🎁 Оставьте заявку на тест-драйв курса специализация «Fullstack developer» и получите:
- справочник по html;
- приглашение на бесплатные уроки курса по html, css, javascript
👉 https://vk.cc/cjlCC8
Узнаем IP-адрес своего компьютераInetAddress.getLocalHost()
используется для поиска частных IP - адресов, используемых в локальной сети или любой другой локальной сети.
Подробнее объяснение кода можно найти здесь.
Что такое механизм try-with-resources?
Данная конструкция, которая появилась в Java 7, позволяет использовать блок try-catch не заботясь о закрытии ресурсов, используемых в данном сегменте кода. Ресурсы объявляются в скобках сразу после try
, а компилятор уже сам неявно создаёт секцию finally
, в которой и происходит освобождение занятых в блоке ресурсов. Под ресурсами подразумеваются сущности, реализующие интерфейс java.lang.Autocloseable
.
Стоит заметить, что блоки catch
и явный finally
выполняются уже после того, как закрываются ресурсы в неявном finally
.
#вопросы_с_собеседований
Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?
Метод clone()
объявлен в классе Object
с указанием модификатора native
, чтобы обеспечить доступ к стандартному механизму поверхностного копирования объектов. Одновременно он объявлен и как protected
, чтобы нельзя было вызвать этот метод у не переопределивших его объектов. Непосредственно интерфейс Cloneable
является маркерным (не содержит объявлений методов) и нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone()
у не Cloneable
объекта вызовет выбрасывание CloneNotSupportedException
.
#вопросы_с_собеседований
О чем говорит ключевое слово throws?
Ответ:
Модификатор throws прописывается в заголовке метода и указывает на то, что метод потенциально может выбросить исключение с указанным типом.
#вопросы_с_собеседований
Что такое «блокирующий метод»?
Блокирующий метод – метод, который блокируется, до тех пор, пока задание не выполнится, например метод accept() у ServerSocket блокируется в ожидании подключения клиента. Здесь блокирование означает, что контроль не вернётся к вызывающему методу до тех пор, пока не выполнится задание. Так же существуют асинхронные или неблокирующиеся методы, которые могут завершится до выполнения задачи.
Преобразование строки в дату
Класс SimpleDateFormat имеет некоторые дополнительные методы, в частности parse(), который в Java поможет нам перевести строку в дату соответствии с форматом, хранящимся в данном объекте SimpleDateFormat. Пример на картинке.
ReactiveX/RxJava
Библиотека RxJava, основанная на API ReactiveX. Она позволяет писать асинхронные событийно-управляемые программы для виртуальной Java машины, поддерживает последовательности событий и их комбинации. В основе работы лежит классический паттерн Наблюдатель, только вместо одного объекта используется целый поток данных.
C RxJava можно больше не беспокоиться о низкоуровневом распараллеливании, синхронизации, потокобезопасности и обработке ошибок.
https://github.com/ReactiveX/RxJava
#вопросы_с_собеседований
Каким будет результат сравнения в следующем коде?
Ответ:
s1 == s2 ? true
s1 == s3 ? false
s1 equals s3 ? true
Вопрос на понимание работы пула строк в Java и на понимание сравнения строк. Разберем детально: Переменная s1 ссылается на строку в пуле уникальных строк в памяти, переменная s2 ссылается на ту же саму строку в пуле уникальных строк, что и переменная s1, первое сравнение будет true, так как s1 и s2 ссылаются на один и тот же объект. Переменная s3 ссылается на новый объект, который не находится в пуле уникальных строк, так как он создан через new, следовательно второе сравнение будет false, так как сравниваем переменные которые ссылаются на на два разных объекта. Третье сравнение будет true, так как мы сравниваем строки посимвольно на эквивалентность через equals, а содержимое данных строк одинаково.
Метод matches()
Возвращает значение true, если, и только в том случае, если эта строка соответствует заданному регулярному выражению.
Генерируем код и пароль
Часто мы забываем наши пароли и выбираем опцию «Забыть пароль», и в кратчайшие сроки мы получаем новый пароль на наш зарегистрированный адрес электронной почты или номер телефона для входа в нашу учетную запись.
Иногда мы получаем доступ к нашим банковским счетам во время покупок в интернет-магазине и чтобы подтвердить наш переход с банковского счета, нам отправляют нам OTP (одноразовый пароль) на наш зарегистрированный номер телефона или адрес электронной почты.
Следующий код объясняет, как быстро генерировать такие пароли и OTP.
Зубчатый массив в Java
Зубчатый массив — это массив массивов, в котором массивы элементов могут быть разных размеров, т. е. мы можем создать двумерный массив, но с переменным числом столбцов в каждой строке. Эти типы массивов также известны как зубчатые массивы.
Подробнее о зубчатых массивах можно почитать здесь.
Хотите развиваться в карьере тестировщика? Освойте автоматизацию тестирования с нуля в школе QA.GURU
Сделайте первые шаги навстречу своей новой профессии! Уже 14-го декабря в 20:00 по МСК пройдет открытый урок “Разрабатываем первый автотест на Java/Selenide”
❓ Почему стоит сходить?
- расскажем о профессии инженер по тестированию
- разработаем ваш первый автотест на форму авторизации и на поиск в Google
- поговорим о рынке QA
- расскажем про актуальный фреймворк на Java
- покажем боевой проект с полной инфраструктурой (Web, Mobile, API)
- проведем сессию вопросов с QA Lead
📒 Каждый участник получит домашнее задание, а мы проверим его.
Для участия вступайте в чат - @qa_guru_chat или регистрируйся на сайте - https://clck.ru/32efFZ
Очень скоро долгожданный митап Сбера в Рязани – 8 декабря в 19:00 поговорим о Service Mesh и SBER NDR.
Ещё недавно Service Mesh был самой хайповой технологией, а сейчас стал стандартом для проектирования backend сервисов. Максим Чудновский, лидер направления мультикластерных сервисов в проекте Platform V Synapse Service Mesh, расскажет, как получить Service Mesh из коробки в gRPC, используя протокол XDS.
О попытке объять необъятное, или о том, как была разработана система по детектированию и анализу сетевых атак, узнаете из доклада владельца продукта Sber NDR, руководителя направления Центра киберзащиты Сбера, Алины Светловой.
Также в программе вечера нетворкинг, кофе-брейки и вручение призов.
Встречаемся в четверг, 8 декабря, на площадке «Свобода Лофт».
Регистрируйтесь на митап по ссылке.
#вопросы_с_собеседований
Как одной строчкой скопировать элементы любой collection в массив?
Ответ на картинке.
#вопросы_с_собеседований
Что такое «ссылка на метод»?
Если существующий в классе метод уже делает все, что необходимо, то можно воспользоваться механизмом method reference (ссылка на метод) для непосредственной передачи этого метода. Такая ссылка передается в виде:
• имя_класса::имя_статического_метода
для статического метода;
• объект_класса::имя_метода
для метода экземпляра;
• название_класса::new
для конструктора.
Результат будет в точности таким же, как в случае определения лямбда-выражения, которое вызывает этот метод.
Ссылки на методы потенциально более эффективны, чем использование лямбда-выражений. Кроме того, они предоставляют компилятору более качественную информацию о типе и при возможности выбора между использованием ссылки на существующий метод и использованием лямбда-выражения, следует всегда предпочитать использование ссылки на метод.
Замер времени с помощью Instant и Duration
В Java 8 добавили новый java.time API. В частности, ля измерения времени подойдут два новых класса – Instant и Duration. Оба эти класса иммутабельны.
Instant обозначает момент времени с начала эпохи Unix (1970-01-01T00:00:00Z). Для создания момента мы используем метод Instant.nоw(). После того, как мы создали два момент, вычислим разницу в миллисекундах.
Рекомендуется использовать именно этот подход в Java 8 и выше.
Проверка нечетности
Можно ли использовать первый код для точного определения нечетности числа?
Надеюсь, вы заметили подвох. Если мы решим проверить таким образом отрицательное нечетное число (-5, к примеру), остаток от деления не будет равен единице (а чему он равен?). Поэтому используйте более точный второй метод.
Он не только решает проблему отрицательных чисел, но и работает более продуктивно, чем его предшественник. Арифметические и логические операции выполняются гораздо быстрее умножения и деления.
Метод equalsIgnoreCase()
Сравнивает данную строку с другой строкой, игнорируя регистр. Две строки считаются равными, если они имеют одинаковую длину и соответствующие символы у двух строк равны, игнорируя регистр букв.
Возвращает значение true, если аргумент не равен null и строки равны, без учета регистра букв; в противном случае значение false.
Метод before()
Метод before() класса Date проверяет, была ли наша дата раньше той, которую мы передаем в качестве аргумента.
Дайте краткую характеристику Enum в Java
Enum — перечисление, набор строковых констант, объединенных общим типом. Объявляется через ключевое слово — enum.
Вот пример с enum — допустимые роли в некоторой школе (см. картинку).
Слова, написанные большими буквами, и есть те самые константы перечисления, которые объявляются упрощенно, без использования оператора new.
Использование перечислений заметно упрощает жизнь, так как они помогают избежать ошибок и путаницы в наименованиях.