Библиотека собеса по Java | вопросы с собеседований
6.38K subscribers
359 photos
4 videos
202 links
Вопросы с собеседований по Java и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/08c603b6

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Как переименовать файл?

Переименовать файл можно, переместив содержимое первого файла в новый файл и удалив предыдущий файл. Java обрабатывает эту операцию, используя метод resolveSibiling. Он используется для разрешения данного пути относительно родительского пути этого пути.
Какие виды ссылок на методы вы знаете?

☕️ ссылки на статические методы;
☕️ ссылки на методы экземпляра;
☕️ ссылки на конструкторы;
☕️ ссылки на обобщенные (шаблонные) методы.
Как преобразовать строку в целое число?

Ответ на картинке.
Что такое сигнатура метода?

Сигнатура метода — это уникальная комбинация имени метода и списка его параметров. Сигнатура метода определяет, какие аргументы должны быть переданы методу при его вызове.

Сигнатура метода используется для определения перегрузки методов. Два или более метода считаются перегруженными, если они имеют одинаковое имя, но разные сигнатуры. То есть они принимают разные наборы параметров.

Важно отметить, что сигнатура метода не включает в себя возвращаемый тип и модификаторы доступа.
Может ли имя класса не совпадать с именем файла?

Компилятор требует, чтобы в .java файле был не больше чем один публичный класс верхнего уровня, и чтобы его название совпадало с названием файла. Все специальные символы также должны быть в имени файла.

Protected и private классов верхнего уровня не бывает в принципе, а вот на package-protected это ограничение не распространяется. Это значит, что класс без модификатора доступа может иметь любое имя. Также это значит, что рядом с основным публичным классом файла (или вместо него) можно объявить любое количество других классов без модификатора доступа, с произвольными именами. Они будут доступны внутри всего пакета.

Так что ответ — может.
✍️«Библиотека программиста» собирает кейсы использования нейросетей

Какие самые необычные задачи вы выполняли с помощью нейросетей? Может быть, вы просили ИИ пройти тестирование по правилам безопасности или писали с его помощью заявление на увольнение?

Заполняйте форму — лучшие истории появятся в нашей подборке по теме.

👉Ссылка тут👈
Что такое double checked locking Singleton?

double checked locking Singleton — это один из способов создания потокобезопасного класса, реализующего шаблон Одиночка. Данный метод пытается оптимизировать производительность, блокируясь только случае, когда экземпляр одиночки создаётся впервые.

Следует заметить, что требование volatile обязательно. Проблема Double Checked Lock заключается в модели памяти Java, точнее в порядке создания объектов, когда возможна ситуация, при которой другой поток может получить и начать использовать (на основании условия, что указатель не нулевой) не полностью сконструированный объект. Хотя эта проблема была частично решена в JDK 1.5, рекомендация использовать volatile для Double Cheсked Lock остаётся в силе.
Каково максимальное число значений hashCode()?

Число значений следует из сигнатуры int hashCode() и равно диапазону типа int — 2^32.
Что такое Java Virtual Machine (JVM)? Как она работает?

Java Virtual Machine (JVM) — это среда выполнения, которая позволяет выполнять Java-приложения на любой платформе, где установлена JVM. Она является ключевым компонентом технологии Java, так как обеспечивает портативность и независимость Java-кода от конкретной операционной системы.

JVM принимает скомпилированный Java-код (байт-код) и интерпретирует его в машинный код на конкретной платформе. Он выполняет множество задач, включая загрузку классов, управление памятью, выполнение потоков, оптимизацию кода и т. д.

Когда Java-приложение выполняется на JVM, оно получает доступ к богатому набору библиотек Java, которые предоставляют множество готовых классов и методов для решения различных задач. Благодаря JVM Java считается одним из самых надежных и масштабируемых языков программирования.
Что такое «интеграционное тестирование»?

Интеграционное тестирование (integration testing) — это тестирование, проверяющие работоспособность двух или более модулей системы в совокупности — то есть нескольких объектов как единого блока. В тестах взаимодействия же тестируется конкретный, определенный объект и то, как именно он взаимодействует с внешними зависимостями.
Какие есть правила переопределения метода Object.equals().

1. Использование оператора == для проверки, является ли аргумент ссылкой на указанный объект. Если является, возвращается true. Если сравниваемый объект == null, должно вернуться false.
2. Использование оператор instanceof и вызова метода getClass() для проверки, имеет ли аргумент правильный тип. Если не имеет, возвращается false.
3. Приведение аргумента к правильному типу. Поскольку эта операция следует за проверкой instanceof, она гарантированно будет выполнена.
4. Обход всех значимых полей класса и проверка того, что значение поля в текущем объекте и значение того же поля в проверяемом на эквивалентность аргументе соответствуют друг другу. Если проверки для всех полей прошли успешно, возвращается результат true, в противном случае — false.

По окончанию переопределения метода equals() следует проверить: является ли порождаемое отношение эквивалентности рефлексивным, симметричным, транзитивным и непротиворечивым? Если ответ отрицательный, метод подлежит соответствующей правке.
Оцените количество памяти на хранение одного примитива типа byte в ArrayList?

ArrayList основан на массиве, для примитивных типов данных осуществляется автоматическая упаковка значения, поэтому 16 байт тратится на хранение упакованного объекта и 4 байта (8 для x64) — на хранение ссылки на этот объект в самой структуре данных. Таким образом, в x32 JVM 4 байта используются на хранение одного элемента и 16 байт — на хранение упакованного объекта типа Byte. Для x64 — 8 байт и 24 байта соответственно.
Какие подклассы класса Reader вы знаете, для чего они предназначены?

Reader — абстрактный класс, описывающий символьный ввод;
BufferedReader — буферизованный входной символьный поток;
CharArrayReader — входной поток, который читает из символьного массива;
FileReader — входной поток, читающий файл;
FilterReader — абстрактный класс, предоставляющий интерфейс для классов-надстроек;
InputStreamReader — входной поток, транслирующий байты в символы;
LineNumberReader — входной поток, подсчитывающий строки;
PipedReader — входной канал;
PushbackReader — входной поток, позволяющий возвращать символы обратно в поток;
StringReader — входной поток, читающий из строки.
Опишите иерархию исключений.

Исключения делятся на несколько классов, но все они имеют общего предка — класс Throwable, потомками которого являются классы Exception и Error.

Ошибки (Errors) представляют собой более серьёзные проблемы, которые, согласно спецификации Java, не следует обрабатывать в собственной программе, поскольку они связаны с проблемами уровня JVM. Например, исключения такого рода возникают, если закончилась память, доступная виртуальной машине.

Исключения (Exceptions) являются результатом проблем в программе, которые в принципе решаемы, предсказуемы и последствия которых возможно устранить внутри программы. Например, произошло деление целого числа на ноль.
Чем отличается переопределение от перегрузки?

Перегрузка происходит в пределах одного класса, переопределение — в рамках иерархии классов.

Перегруженные методы должны отличаться сигнатурой, переопределенные — иметь одинаковую.

Перегрузка не нарушает инкапсуляцию, при переопределении может нарушаться.

Перегруженные методы не связаны с полиморфизмом, переопределенные позволяют реализовать полиморфное поведение.

В целом, перегрузка связана с компиляцией, а переопределение — с выполнением кода.
#вопросы_с_собеседований
Когда стоит изменять значение поля serialVersionUID?

serialVersionUID нужно изменять при внесении в класс несовместимых изменений, например при удалении какого-либо его атрибута.
Что такое «ссылка на метод»?

Если существующий в классе метод уже делает всё, что необходимо, то можно воспользоваться механизмом method reference (ссылка на метод) для непосредственной передачи этого метода. Такая ссылка передается в виде:

• имя_класса::имя_статического_метода для статического метода;
• объект_класса::имя_метода для метода экземпляра;
• название_класса::new для конструктора.

Результат будет в точности таким же, как в случае определения лямбда-выражения, которое вызывает этот метод.

Ссылки на методы потенциально более эффективны, чем использование лямбда-выражений. Кроме того, они предоставляют компилятору более качественную информацию о типе и при возможности выбора между использованием ссылки на существующий метод и использованием лямбда-выражения, следует всегда предпочитать использование ссылки на метод.
Из за чего может возникать NoClassDefFoundError, NoSuchMethodError?

🔸 NoClassDefFoundError может возникнуть, если нужной библиотеки с этим классом нет в classpath
🔸 NoSuchMethodError может возникнуть из-за несовместимости ваших библиотек, если зависимая библиотека A вызывает метод из старой версии библиотеки B, но в classpath есть более новая версия библиотеки B, c другой сигнатурой этого метода
Какие классы позволяют ускорить чтение/запись за счет использования буфера?

BufferedInputStream(InputStream in)/BufferedInputStream(InputStream in, int size),
BufferedOutputStream(OutputStream out)/BufferedOutputStream(OutputStream out, int size),
BufferedReader(Reader r)/BufferedReader(Reader in, int sz),
BufferedWriter(Writer out)/BufferedWriter(Writer out, int sz)
Прямой эфир «Технический этап собеседования: разбор задач и ошибок»

🕐 Когда?

29 августа в 19:00 мск

🗣️ Кто спикер?

Алексей Бочкарев | Engineering Manager at FAANG

🦥 Где регистрироваться?

Здесь – https://proglib.io/w/e67c7b97

🌝 О чем поговорим?

Комбинаторика и комбинаторные числа: определение и практические примеры

– Основные идеи динамического программирования

Идеи рекурсии и примеры, включая inorder обход двоичного дерева

Графы и способы их представления

– Примеры различных типов асимптотической сложности

Распространенные ошибки в коде, как избегать обращения за границы массива, разыменования нулевого указателя, некорректная логика

☄️ Регистрируйтесь, будет интересно – https://proglib.io/w/e67c7b97