en
Feedback
Библиотека собеса по Java | вопросы с собеседований

Библиотека собеса по Java | вопросы с собеседований

Open in Telegram

Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: clc.to/3wECtA Для обратной связи: @proglibrary_feeedback_bot

Show more
6 468
Subscribers
+324 hours
+27 days
-930 days
Posts Archive
Что такое ключевое слово final и где его использовать? Ключевое слово final можно использовать для переменных, методов и клас
Что такое ключевое слово final и где его использовать? Ключевое слово final можно использовать для переменных, методов и классов. 1. final переменную нельзя переназначить на другой объект. 2. final класс бесплоден, у него не может быть наследников. 3. final метод не может быть переопределен у предка. Пробежали по верхам, теперь обсудим более подробно final переменные. Java даёт нам два способа создать переменную и присвоить ей некоторое значение: 1. Можно объявить переменную и инициализировать ее позже. 2. Можно объявить переменную и сразу же назначить ее. Пример с использованием final переменной для этих случаев приведен выше на картинке.

Кто еще не подписан на наш главный канал — очень рекомендуем! В «Библиотеке программиста» вас ждут фундаментальные IT-темы, G
Кто еще не подписан на наш главный канал — очень рекомендуем! В «Библиотеке программиста» вас ждут фундаментальные IT-темы, Git, рынок труда, главные новости и, конечно же, мемы😎 Вот вам топ недавних постов: 🔍про коммиты в ветках Git 🔍новость о создании сверхразумного ИИ 🔍подборка инфографик на фундаментальные темы 🔍дайджест нейросетей для разработки 👉Подписаться👈

Зачем нужны и какие бывают блоки инициализации? Блоки инициализации используются для выполнения определенного кода при создании объекта. Их использование позволяет вынести логику инициализации полей объекта за пределы конструкторов. Бывают два типа блоков инициализации: 1. Блоки инициализации экземпляра — выполняются при создании каждого нового экземпляра класса. Они объявляются с помощью ключевого слова instance и фигурных скобок. 2. Статические блоки инициализации — выполняются один раз при загрузке класса. Они объявляются с помощью ключевого слова static и фигурных скобок.

Что такое маркерный интерфейс? Каковы известные примеры таких интерфейсов в Java? Маркерный интерфейс — это интерфейс без каких-либо методов. Обычно он реализуется классом или расширяется другим интерфейсом для обозначения определенного свойства. Наиболее широко известными маркерами в стандартной библиотеке Java являются следующие: ☕️ Serializable используется для явного указания того, что этот класс может быть сериализован; ☕️ Cloneable позволяет клонировать объекты с помощью метода clone (без интерфейса Cloneable этот метод выдает исключение CloneNotSupportedException); ☕️ Remote используется в RMI для указания интерфейса, методы которого можно вызывать удаленно.

Назовите основные классы потоков ввода/вывода. Разделяют два вида потоков ввода/вывода: • байтовые - java.io.InputStream, java.io.OutputStream; • символьные - java.io.Reader, java.io.Writer.

Как одной строчкой преобразовать HashSet в ArrayList? Ответ на картинке.
Как одной строчкой преобразовать HashSet в ArrayList? Ответ на картинке.

Что будет, если переопределить equals() не переопределяя hashCode()? Какие могут возникнуть проблемы? Классы и методы, которые используют правила этого контракта могут работать некорректно. Так для HashMap это может привести к тому, что пара «ключ-значение», которая была в неё помещена при использовании нового экземпляра ключа не будет в ней найдена.

Generics: В чем преимущество, как работают? Что такое type-erasure? В чем отличие от шаблонов C++? 🔸Типы дженерики обеспечивают параметрический полиморфизм, т.е выполнение идентичного кода для различных типов. Типичный пример — коллекции, итераторы; 🔸type-erasure — это стирание информации о типе-параметре в runtime. Таким образом, в байт-коде мы увидим List, Set вместо List, Set, ну и type-cast'ы при необходимости; 🔸В отличие от дженериков в Java, в С++ шаблоны в итоге приводят к компиляции метода или типа для каждого специфицированного типа параметра (специализация шаблона).

В чём заключается различие между методами submit() и execute() у пула потоков? Оба метода являются способами подачи задачи в пул потоков, но между ними есть небольшая разница. execute(Runnable command) определён в интерфейсе Executor и выполняет поданную задачу и ничего не возвращает. submit() — перегруженный метод, определённый в интерфейсе ExecutorService. Способен принимать задачи типов Runnable и Callable и возвращать объект Future, который можно использовать для контроля и управления процессом выполнения, получения его результата.

Что вы подразумеваете под статическим блоком в Java? Статический блок в Java используется для инициализации статических переменных класса. Он выполняется только один раз: при первой загрузке класса в память.

Что такое «абстракция»? Абстрагирование — это способ выделить набор общих характеристик объекта, исключая из рассмотрения час
Что такое «абстракция»? Абстрагирование — это способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые. Соответственно, абстракция — это набор всех таких характеристик. Представьте, что водитель едет в автомобиле по оживлённому участку движения. Понятно, что в этот момент он не будет задумываться о химическом составе краски автомобиля, особенностях взаимодействия шестерёнок в коробке передач или влияния формы кузова на скорость (разве что, автомобиль стоит в глухой пробке и водителю абсолютно нечем заняться). Однако, руль, педали, указатель поворота он будет использовать регулярно. #вопросы_с_собеседований

Какими значениями инициализируются переменные по умолчанию? • Числа инициализируются 0 или 0.0; • char — \u0000; • boolean — false; • Объекты (в том числе String) — null. #вопросы_с_собеседований

Что такое «SQL»? SQL, Structured query language («язык структурированных запросов») — формальный непроцедурный язык программирования, применяемый для создания, модификации и управления данными в произвольной реляционной базе данных, управляемой соответствующей системой управления базами данных (СУБД).

Для чего используется PushbackInputStream? Разновидность буферизации, обеспечивающая чтение байта с последующим его возвратом в поток. Класс PushbackInputStream представляет механизм «заглянуть» во входной поток и увидеть, что оттуда поступит в следующий момент, не извлекая информации. У класса есть дополнительный метод unread(). #вопросы_с_собеседований

При помощи чего формируются запросы к базе данных? Для выполнения запросов к базе данных в Java используются три интерфейса: ☕️ java.sql.Statement — для операторов SQL без параметров; ☕️ java.sql.PreparedStatement — для операторов SQL с параметрами и часто выполняемых операторов; ☕️ java.sql.CallableStatement — для исполнения хранимых в базе процедур. Объекты-носители интерфейсов создаются при помощи методов объекта java.sql.Connection: ☕️ java.sql.createStatement() возвращает объект Statement; ☕️ java.sql.prepareStatement() возвращает объект PreparedStatement; ☕️ java.sql.prepareCall() возвращает объект CallableStatement.

В чем разница между PrintWriter и ServletOutputStream? PrintWriter — класс для работы с символьным потоком, экземпляр которого можно получить через метод ServletResponse getWriter(); ServletOutputStream — класс для работы байтовым потоком. Для получения его экземпляра используется метод ServletResponse getOutputStream().

#вопросы_с_собеседований Что такое модификаторы доступа? Модификаторы доступа — это инструмент, при помощи которого можно настроить доступ к классам, методам и переменным. Бывают следующие модификаторы, упорядоченные в порядке повышения доступа: 1) private — используется для методов, полей и конструкторов. Уровень доступа — только класс, внутри которого он объявлен. 2) package-private (default) — может использоваться для классов. Доступ только в конкретном пакете (package), в котором объявлен класс, метод, переменная, конструктор. 3) protected — такой же доступ, как и package-private + для тех классов, которые наследуются от класса с модификатором protected. 4) public — используется и для классов. Полноценный доступ во всем приложении.

Расскажите об интерфейсе SingleThreadModel. Интерфейс SingleThreadModel является маркерным - в нем не объявлен ни один метод, однако, если сервлет реализует этот интерфейс, то метод service() этого сервлета гарантированно не будет одновременно выполняться в двух потоках. Контейнер сервлетов либо синхронизирует обращения к единственному экземпляру, либо обеспечивает поддержку пула экземпляров и перенаправление запроса свободному сервлету. Другими словами, контейнер гарантирует отсутствие конфликтов при одновременном обращении к переменным или методам экземпляра сервлета. Однако существуют также и другие разделяемые ресурсы, которые даже при использовании этого интерфейса остаются всё так же доступны обработчикам запросов в других потоках. Т.е. пользы от использования этого интерфейса немного и в спецификации Servlet 2.4 он был объявлен deprecated.

Какие существуют уровни изолированности транзакций? В порядке увеличения изолированности транзакций и, соответственно, надёжности работы с данными: • Чтение неподтверждённых данных (грязное чтение) (read uncommitted, dirty read) — чтение незафиксированных изменений как своей транзакции, так и параллельных транзакций. Нет гарантии, что данные, изменённые другими транзакциями, не будут в любой момент изменены в результате их отката, поэтому такое чтение является потенциальным источником ошибок. Невозможны потерянные изменения, возможны неповторяемое чтение и фантомы. • Чтение подтверждённых данных (read committed) — чтение всех изменений своей транзакции и зафиксированных изменений параллельных транзакций. Потерянные изменения и грязное чтение не допускается, возможны неповторяемое чтение и фантомы. • Повторяемость чтения (repeatable read, snapshot) — чтение всех изменений своей транзакции, любые изменения, внесённые параллельными транзакциями после начала своей, недоступны. Потерянные изменения, грязное и неповторяемое чтение невозможны, возможны фантомы. • Упорядочиваемость (serializable) — результат параллельного выполнения сериализуемой транзакции с другими транзакциями должен быть логически эквивалентен результату их какого-либо последовательного выполнения. Проблемы синхронизации не возникают.

Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable? Метод clone() объявлен в классе Object с указанием модификатора native, чтобы обеспечить доступ к стандартному механизму поверхностного копирования объектов. Одновременно он объявлен и как protected, чтобы нельзя было вызвать этот метод у не переопределивших его объектов. Непосредственно интерфейс Cloneable является маркерным (не содержит объявлений методов) и нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone() у не Cloneable объекта вызовет выбрасывание CloneNotSupportedException.