Библиотека собеса по Java | вопросы с собеседований
Open in Telegram
Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/08c603b6 Для обратной связи: @proglibrary_feeedback_bot
Show more6 491
Subscribers
-224 hours
+97 days
+1830 days
Posts Archive
👀Что из этого сгенерировала нейросеть?
Подписывайтесь на наш новый канал про нейросети для создания изображений, там есть:
🌸Новые нейросети и инструменты, например, вот модель генерирует картинки по наброску
🌸Промты для разных задач
🌸Лайфхаки по использованию нейросетей
👉Подписывайтесь!
Как написать собственное исключение?
Для создания собственного исключения нужно создать новый класс, который наследуется от класса Exception или RuntimeException.
В этом примере мы создаем класс CustomException, который наследуется от класса Exception.
Далее, мы используем пользовательское исключение в методе myMethod() класса MyClass. Если выполняется определенное условие, мы выбрасываем исключение CustomException с сообщением об ошибке.
Проверяем наличие дубликатов в массиве в Java
Мы можем работать лучше, используя Хеширование. Идея состоит в том, чтобы пройти по заданному массиву и вставить каждый встреченный элемент в HashSet. Теперь, если встреченный элемент уже присутствовал в наборе, он является дубликатом. Временная сложность этого решения O(n) но вспомогательное пространство используется O(n).
Мы знаем это HashSet не допускает дублирования значений в нем. Мы можем использовать это свойство для проверки дубликатов в массиве. Идея состоит в том, чтобы вставить все элементы массива в HashSet. Теперь массив содержит дубликат, если длина массива не равна размеру набора.
Узнаем самый средний элемент коллекции
В этом примере используется List numbers, который содержит числа. С помощью Collections.sort() список чисел сортируется в порядке возрастания. Затем вычисляется индекс середины списка. Если размер списка четный, то найдутся два средних элемента, их среднее значение вычисляется и выводится на экран. Если размер списка нечетный, то выводится только один средний элемент.
Пример вывода (для списка чисел [1, 2, 3, 4, 5, 6, 7, 8]):
Средние элементы: 4, 5
Среднее значение: 4.5
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
ListIterator
ListIterator — это интерфейс в Java, который предоставляет возможность итерации по элементам списка в обоих направлениях (вперед и назад). Этот интерфейс является частью Java Collections Framework и расширяет интерфейс Iterator.
Класс Character
Класс Character в Java является классом-обёрткой для примитивного типа данных char. Он предоставляет несколько полезных методов для работы с символами, таких как проверка на принадлежность к различным категориям (цифры, буквы, пробелы и т.д.) и преобразование регистров.
Yandex DEVent PRO в Питере
Это серия офлайн-митапов для опытных бэкендеров от команды Поиска и Рекламных технологий. Здесь можно в закрытом формате познакомиться с лидами из других команд, обменяться опытом и пообщаться.
В этот раз митап пройдёт в Санкт-Петербурге 19 июня: будет настоящее раздолье для нетворкинга, а ещё обсуждение горячих и спорных тем по разработке в формате speed dating.
Спикеры и доклады:
🟡Константин Гудков, руководитель группы разработки Feature store. Расскажет о процессе создания Feature Store — интерфейса для работы с данными, который используется ML-моделями в Рекламе
🟡Сергей Скворцов, руководитель службы поискового райнтайма. Обсудит, как анализировать производительность нативных программ под Linux под нагрузкой с помощью Perforator
🟡Николай Савушкин, руководитель службы рекомендательных технологий. Расскажет о Real-time processing в рекомендательных системах Яндекса
А после докладов вас ждёт афтерпати: кальяны, аэрохоккей и прочие активности!
Узнать подробную информацию и зарегистрироваться можно по ссылке.
Ждём вас!
Реклама. ООО "Яндекс", ИНН 7736207543.
Каково максимальное число значений hashCode()?
Число значений следует из сигнатуры int hashCode() и равно диапазону типа int — 2^32.
Расскажите про приведение типов. Что такое понижение и повышение типа?
Приведение типов — это преобразование переменной одного типа в другой.
Существует два вида приведения типов:
— Повышение типа (widening): автоматическое преобразование типа в другой, более широкий тип. Например, int в long. При этом не теряется точность, так как широкий тип может представить все значения узкого типа.
— Понижение типа (narrowing): явное приведение к более узкому типу, например double в int. Здесь возможна потеря точности, поэтому требуется явное приведение в коде.
Повышение типа безопасно, компилятор делает его автоматически.
Понижение опасно потерей данных, поэтому разработчик должен явно указать такое приведение в коде, чтобы показать, что он контролирует возможную потерю точности.
System.currentTimeMillis или System.nanoTime?
В Java есть два стандартных способа проведения операций со временем, и не всегда ясно, какой из них следует выбрать.
➡️ Метод System.currentTimeMillis() возвращает текущее количество миллисекунд с начала эры Unix в формате Long. Его точность составляет от 1 до 15 тысячных долей секунды в зависимости от системы.
long startTime = System.currentTimeMillis();
long estimatedTime = System.currentTimeMillis() — startTime;
➡️ Метод System.nanoTime() имеет точность до одной миллионной секунды (наносекунды) и возвращает текущее значение наиболее точного доступного системного таймера.
long startTime = System.nanoTime();
long estimatedTime = System.nanoTime() — startTime;
Таким образом, метод System.currentTimeMillis() лучше применять для отображения и синхронизации абсолютного времени, а System.nanoTime() для измерения относительных интервалов времени.
RecursiveTask
RecursiveTask является частью фреймворка Fork/Join в Java, введенного в Java 7. Этот фреймворк предоставляет удобный способ распараллеливания выполнения задач.
RecursiveTask является подклассом ForkJoinTask. Он предназначен для использования вместе с пулом Fork/Join (ForkJoinPool) и предоставляет специальные методы для разделения задачи на подзадачи и объединения результатов.
Array или ArrayList?
Выбор между Array и ArrayList зависит от специфики задачи Java, которую вы хотите решить. Запомните следующие особенности этих типов:
— Массив имеет фиксированный размер, и память для него выделяется во время объявления, а размер ArrayList может динамически меняться.
— Массивы Java работают намного быстрее, а в ArrayList намного проще добавлять и удалять элементы.
— При работе с Array скорее всего возникнет ошибка ArrayIndexOutOfBoundsException.
— ArrayList может быть только одномерным, когда массивы Java могут быть многомерными.
Реализуйте простой кэш на Java. Класс должен поддерживать операции добавления значения по ключу, получения значения по ключу и удаления значения по ключу. Кэш должен иметь фиксированный размер, и при превышении этого размера он должен удалять самый старый элемент. Как вы обеспечите оптимальную производительность операций?
Решение:
Кэш будет представлять собой обобщенный класс SimpleCache, который может хранить пары ключ-значение. Размер кэша будет ограничен, чтобы избежать переполнения. В случае превышения размера, самый старый элемент будет удаляться.
Для хранения данных будем использовать HashMap (cache), так как это обеспечит эффективный доступ к значениям по ключу. Для отслеживания порядка ключей (чтобы определить самый старый элемент) будем использовать Queue (keyQueue), в данном случае LinkedList.
Инициализируем кэш. Конструктор SimpleCache принимает максимальный размер кэша и инициализирует cache и keyQueue. Добавляем элемент в кэш и при добавлении элемента проверяем, не превышен ли максимальный размер. Если превышен, вызываем метод evictOldest для удаления самого старого элемента.
Добавляем новый элемент в cache и помещаем ключ в keyQueue. Получаем элемент по ключу. Если элемент существует в кэше, перемещаем соответствующий ключ в конец keyQueue (чтобы отметить последнее использование) и возвращаем значение. Удаляем элемент из cache и соответствующий ключ из keyQueue. Получаем самый старый ключ из начала keyQueue, удаляем соответствующий элемент из cache.
Что такое сигнатура метода?
Это уникальная строка, которая описывает типы и порядок аргументов, а также возвращаемый тип метода. Сигнатура используется компилятором Java для различения методов с одинаковым именем, но отличающихся по своим параметрам.
Может ли метод принимать аргументы переменной длины?
В Java метод может принимать переменное количество аргументов двумя основными способами:
— Используя массив в качестве параметра. При определении метода указывается, что один из параметров — это массив некоторого типа. При вызове метода в этот параметр можно передать массив нужной длины.
— Используя специальный синтаксис с многоточием. При определении метода один из параметров объявляется с многоточием после типа. Это говорит компилятору, что это параметр переменной длины. При вызове в него можно передать сколько угодно аргументов указанного типа.
Таким образом метод становится более гибким и его можно вызывать с разным количеством аргументов в зависимости от ситуации. Это избавляет от необходимости перегружать метод для разного числа параметров.
⚡️Proglib запускает канал про ИИ для генерации звука
Там мы будем рассказывать про все существующие нейросети, которые генерируют музыку и голос — с пошаговыми инструкциями, инструментами и лайфхаками.
⭐️генерация голоса и музыки
⭐️замена и перевод речи
⭐️распознавание звуков
👉Подписывайтесь!
Как узнать значение конкретного символа строки, зная его порядковый номер в строке?
Чтобы узнать значение конкретного символа в строке по его порядковому номеру, можно воспользоваться методом charAt(int index) класса String.
Этот метод возвращает символ, расположенный в строке по указанному индексу. Индексы нумеруются от 0 до длины строки минус 1.
Если переданный индекс находится вне диапазона длины строки, будет выброшено исключение IndexOutOfBoundsException.
Хардкорный курс по математике для тех, кто правда любит математику!
Начать с вводных занятий можно здесь, ответив всего на 4 вопроса – https://proglib.io/w/12f47906
Что вас ждет:
– Вводный урок от CPO курса
– Лекции с преподавателями ВМК МГУ по темам: теория множеств, непрерывность функции, основные формулы комбинаторики, матрицы и операции над ними, градиентный спуск
– Практические задания для закрепления материала и ссылки на дополнительные материалы.
⚡️ Переходите и начинайте учиться уже сегодня – https://proglib.io/w/12f47906
Что такое «фреймворк Fork/Join»?
Фреймворк Fork/Join, представленный в JDK 7, — это набор классов и интерфейсов позволяющих использовать преимущества многопроцессорной архитектуры современных компьютеров. Он разработан для выполнения задач, которые можно рекурсивно разбить на маленькие подзадачи, которые можно решать параллельно.
• Этап Fork: большая задача разделяется на несколько меньших подзадач, которые в свою очередь также разбиваются на меньшие. И так до тех пор, пока задача не становится тривиальной и решаемой последовательным способом.
• Этап Join: далее (опционально) идёт процесс «свёртки» — решения подзадач некоторым образом объединяются пока не получится решение всей задачи.
Решение всех подзадач (в т.ч. и само разбиение на подзадачи) происходит параллельно.
Для решения некоторых задач этап Join не требуется. Например, для параллельного QuickSort — массив рекурсивно делится на всё меньшие и меньшие диапазоны, пока не вырождается в тривиальный случай из 1 элемента. Хотя в некотором смысле Join будет необходим и тут, т.к. всё равно остаётся необходимость дождаться пока не закончится выполнение всех подзадач.
Ещё одно замечательное преимущество этого фреймворка заключается в том, что он использует work-stealing алгоритм: потоки, которые завершили выполнение собственных подзадач, могут «украсть» подзадачи у других потоков, которые всё ещё заняты.
Available now! Telegram Research 2025 — the year's key insights 
