10 популярных вопросов с Java-собеседований


Оглавление (нажмите, чтобы открыть):

Вопросы по Java на собеседовании (1)

1. Принципы объектно-ориентированного программирования (ООП)
2. Class и его свойства
3. Методы базового суперкласса Object
4. Отношения между классами : ассоциация, агрегация и композиция
5. Конструкторы класса
6. Абстрактный класс
7. Статический класс и его свойства
8. Модификаторы свойств класса
9. Использование this и super
10. Сигнатура метода
11. Переопределение и перегрузка методов
12. Инициализация статических полей
13. Использование оператора instanceof
14. Использование модификатора final
15. Порядок инициализации статических полей потомка и его предка
16. Определения понятия «интерфейса»
17. Вложенные и внутренние классы
18. Аннотации классов
19. Использование метода finalize
20. Отличие final, finally, finalize

1. Принципы объектно-ориентированного программирования (ООП)

Объе́ктно-ориенти́рованное программи́рование (ООП) — это методология программирования, основанная на представлении программного обеспечения в виде совокупности объектов, каждый из которых является экземпляром определенного класса. Базовой основой любого класса является Object, включающий определенный набор методов.

Основные принципы ООП : абстракция, инкапсуляция, наследование, полиморфизм.

Абстракция означает выделение значимой информации и исключение из рассмотрения незначимой. С помощью принципа абстракции программа разбивается на объекты. Информация в программе обрабатывается в виде цепочки действий между отдельными объектами. Главное достоинство абстракции связано с тем, что она позволяет отделить реализацию объектов от их описания.

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

Инкапсуляция (encapsulation) — это свойство объединения данных и методов в одном классе, позволяющее отделить внутреннее представление от внешнего (интерфейса). Инкапсуляция позволяет закрыть доступ к полям и методам класса другим объектам, либо предоставить доступ к полям класса через свои методы. Можно сказать, что, с точки зрения java, инкапсуляция – это «сокрытие реализации».

При использовании ООП желательно использовать непрямой доступ к свойствам (полям) какого-либо класса из методов других классов. Для этого в классе необходимо предусмотреть соответствующие методы.

Наследование — это свойство, позволяющее одному классу получить все или отдельные свойства другого класса. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс, наследующий свойства базового, является потомком, наследником, дочерним или производным классом.

Полиморфизм (polymorphism) — это свойство позволяет использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Полиморфные объекты наследуют один и тот же базовый класс; не обязательно, что базовый класс является родителем, он может «быть предком в третьем колене».

В качестве примера можно рассмотреть набор различных геометрических фигур (прямоугольник, квадрат, круг), которые используются в программе для рисования. Для всех этих объектов желательно создать базовый класс, в который включить поля описания параметров объекта и метод отображения в интерфейсе. Значения параметров и код методов будут определены (переопределены) в наследниках.

Подробное описание и примеры ООП представлены здесь.

2. Class и его свойства

Класс (Class) – это шаблон описания одного или нескольких объектов. Объект представляет экземпляр класса. Шаблон (класс) включает свойства, определяемые характеристиками объектов (полями объекта) и методами их управления. Поля класса определяют, например, такие характеристики объекта, как вес, размер, цвет, площадь и т.д. Методы класса позволяют «оперировать» его полями – определять значение (методы set), выдавать значение (методы get) и т.д.

Class может наследовать свойства другого класса. Первоосновой любого класса является суперкласс Object. Пример класса :

В примере представлен класс прямоугольника Rectangle, наследующий свойства класса (фигуры) Shape, и включающий переопределенные методы draw базового класса Shape и toString суперкласса Object. Метод toString возвращает описанные в Shape свойства класса width и height в текстовом виде. При описании свойств класса был использован модификатор public.

Более подробное описание класса с примерами представлено здесь.

3. Методы суперкласса Object

Object является базовым суперклассом для всех остальных объектов/классов Java, т.е. каждый класс наследует свойства Object. Соответственно все классы наследуют следующие методы суперкласса Object :

public final native Class getClass(); возвращает в run-time класс данного объекта;
public native int hashCode(); возвращает hash-код;
public boolean equals(Object obj); сравнивает текущий клас с объектом obj;
protected native Object clone() throws CloneNotSupportedException; клонирование объекта;
public String toString(); возвращает строковое представление объекта;
public final native void notify(); возобновление работа потока, находящегося в ожидании освобождения «монитора» данного объекта;
public final native void notifyAll(); возобновление работы всех потоков, находящихся в ожидании освобождения «монитора» данного объекта;
public final native void wait(long timeout) throws InterruptedException; поток переходит в режим ожидания в течение указанного времени timeout;
public final void wait(long timeout, int nanos) throws InterruptedException; переход потока в режим ожидания в течение указанного времени timeout;
public final void wait() throws InterruptedException; перевод потока в ожидание, пока другой поток не вызовет notify() или notifyAll() методы для этого объекта;
protected void finalize() throws Throwable; вызывается сборщиком мусора, когда garbage collector определил, что ссылок на объект больше нет.

Подробное описание с примерами использования методов hashCode и equals представлено в разделе безопасности. Примеры использования методов многопочного программирования wait, notify, notifyAll c описанием класса Thread (поток) и интерфейса Runnable можно увидеть здесь. Метод finalize описан ниже.

4. Отношения между классами : ассоциация, агрегация и композиция

Ассоциация — это отношение, при котором объекты одного типа определенным образом связаны с объектами другого типа. Так объект одного типа может содержать или использовать объект другого типа. Например, игрок Player играет в определенной команде Team. В этом случае класс Player будет связан отношением ассоциации с классом Team. Таким образом, идея ассоциации достаточно простая — два объекта могут быть между собой связаны и это надо как-либо образом описать.

Агрегация и композиция являются разновидностью ассоциации при отношении между целым и его частями.

Агрегация определяет отношение одного объекта к другому. Так, например, студент может посещать дополнительные факультативные занятия.

Композиция определяет более «жесткое отношение», при котором один объект может быть только частью другого объекта. Например Машина и Двигатель : двигатель может существовать отдельно без машины, но он не может быть в двух или трех машинах одновременно, в отличии от студента, который может посещать различные факультативные занятия.

5. Конструкторы класса

Конструктор класса — это специальный метод, вызываемый при создании нового объекта. Наименование конструктора совпадает с именем класса с учетом регистра. По синтаксису конструктор похож на метод без возвращаемого значения. Класс может включать несколько конструкторов, которые отличаются друг от друга параметрами. Конструктор с параметрами используется для инициализации полей класса.

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

6. Абстрактный класс

Класс может быть объявлен абстрактным при помощи ключевого словом ‘abstract’. Абстрактный класс не предполагает создания экземпляров, а может быть использован только как базовый класс. Таким образом, абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс может как содержать, так и не содержать абстрактные методы. Абстрактный метод базового класса должен быть переопределен для его неабстрактных потомков; в базовом классе абстрактный метод только описывается.

Пример абстрактного класса представлен здесь.

7. Статический класс и его свойства

Класс или его свойства могут быть объявлены статическими при помощи ключевого словом ‘static’. При обращении к статическим свойствам класса необходимо в префиксе указывать наименование класса. Статический класс может обращаться к нестатическим членам класса только при помощи объекта реализации класса.

В java можно использовать статический импорт, применяемый для импорта статических членов класса или интерфейса. Так, например, для импорта статических методов Math.pow() и Math.sqrt() можно использовать в секции import следующий код :

Статический импорт позволяет использовать вызов методов без наименования класса в префиксе.

8. Модификаторы свойств класса

Модификаторы класса позволяют определить уровень доступа к свойству класса. В java существуют следующие модификаторы доступа :

public (открытый) : поле и метод доступны всем;
protected (защищённый) : поле и метод доступны всем классам пакета и наследникам;
private (закрытый) : поле и метод доступны только методам этого класса;
без модификатора : default, friendly, доступ по умолчанию только внутри своего собственного пакета.

Примечание : конструктор класса также может иметь модификатор. Если класс имеет единственный конструктор с модификатором private, то невозможно создать объект данного класса. От такого класса нельзя наследоваться. При попытке наследования будет выдаваться ошибка :
There is no default constructor available in nameClass
А при попытке создать объект этого класса:
nameClass() has private access in nameClass

Можно ли обойти отмеченное выше Примечание? Можно, если в этом классе создать метод, который возвращает экземляр данного класса. Пример :

А теперь, создаем объект класса, у которого единственный конструктор с модификатором private. Конечно, new TestPrivate() здесь не пройдет, но решить данную задачу с использованием внутреннего статического метода можно.

9. Использование this и super

Чтобы обратиться к свойству текущего класса используют this, а к свойству базового класса — super. Так, например, в следующем примере класс Dog наследует свойства класса Animal и переопределяет метод eat(). Для обращения к переопределенному методу eat() своего класса используется вызов this.eat() в методе thisEat. Но, чтобы обратиться из наследника Dog к методу eat() базового класса Animal используется вызов super.eat() в методе superEat.

Более подробное описание наследования и пример использования this и super представлено здесь.

10. Сигнатура метода

Сигнатура метода (method signature) включает наименование метода с параметрами. При этом порядок параметров методов имеет значение. В сигнатуру метода не входят модификаторы, возвращаемое значение и вызываемые методом исключения. Также в сигнатуры не включены операнды synchronized, native и аннотация метода.

11. Переопределение и перегрузка методов

Если в иерархии классов сигнатура метода класса-наследника совпадает с сигнатурой метода родительского класса, то метод подкласса переопределяет метод базового класса. Вызов переопределённого метода из своего подкласса всегда ссылается на версию, определённую подклассом, а версия метода родительского класса будет скрыта. Чтобы вызвать «переопределенный» метод родительского класса следует использовать super.

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

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

12. Инициализация статических полей

Статические поля можно инициализировать в статическом или динамическом блоке инициализации, а также при объявлении. Следующий пример демонстрирует инициализацию статических полей при объявлении и в статическом блоке.

Динамический блок является дополнением к конструктору. В следующем коде роль динамического блока играет процедура init :

Статические блоки в java выполняются до выполнения конструктора. С их помощью инициализируются статические поля.

13. Использование оператора instanceof

Оператор instanceof позволяет проверить принадлежность объекта к определенному классу/родителю. Выражение возвращает true, если объект является экземпляром класса или его потомком. В следующем примере демонстрируется использование оператора instanceof в различных условиях :

14. Использование модификатора final

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

  1. Класс с модификатором final не может иметь наследников.
  2. Метод с модификатором final не может быть переопределен в классах наследниках.
  3. Поле помеченное при помощи слова final не может изменить свое значение после инициализации. Инициализируется поле либо при описании, либо в конструкторе, либо в статическом или динамическом блоке.
  4. Значение локальных переменных, а также параметров метода помеченных при помощи слова final не могут быть изменены после присвоения.

15. Порядок инициализации статических полей потомка и его предка

Статические поля класса могут быть инициализированы как при объявлении, так и в статических и динамических блоках. Сначала по-порядку вызываются все статические блоки от первого предка до последнего наследника. После этого попарно от предка до последнего потомка вызываются динамические блоки инициализации и конструкторы.

16. Определения понятия «интерфейса»

Ключевое слово «интерфейс» (interface) используется для описания полностью абстрактного класса. В описании интерфейса определяются статические поля и методы без тела (кода). Описание методов интерфейса выполняется в классе, реализующим данный интерфейс.

Реализация интерфейса «определяет поведение» класса. Т.е. именно так должны выглядеть все классы, которые реализуют данный интерфейс : включать статические поля и методы. Таким образом, любой класс, реализующий конкретный интерфейс, «знает» только те статичесие поля и методы, которые представлены в интерфейсе, но не более этого (наследование и реализация в несколько поколений расширяет диапазон статических полей и методов наследника).

Пример описания интерфейса SomeInterface и его реализации в классе SomeClass :

По умолчанию все поля, описанные в интерфейсе автоматически являются статическими (static) и неизменными (final). Все методы и переменные неявно объявляются как public. Начиная с 8-ой версии Java в интерфейсе можно объявлять static методы, но они должны включать тело метода.

Методы в интерфейсе нельзя объявлять с модификатором final, т.к. данный модификатор предполагает, что метод нельзя переопределить. Но все методы интерфейса по умолчанию являются абстрактными и должны быть переопределены в классах-реализации.

Описание и пример использования интерфейса представлено здесь.

17. Вложенные и внутренние классы

Вложенный класс (nested classes) представляет собой класс, который объявлен внутри объявления другого класса. Вложенные классы могут быть статическими и нестатическими. Нестатические вложенные классы имеют и другое название — внутренние классы (inner classes).

Внутренние Java классы делятся на три вида :

  • внутренние классы-члены;
  • локальные классы;
  • анонимные классы.

Внутренние классы-члены (member inner classes) ассоциируются не с самим внешним классом, а с его экземпляром. Такие классы имеют доступ ко всем полям и методам внешнего класса.

Локальные классы (local classes) определяются в блоке java кода. На практике чаще всего объявление происходит в методе некоторого другого класса. Хотя объявлять локальный класс можно внутри статических и нестатических блоков инициализации.

Анонимный класс (anonymous class) — это локальный класс без имени.

Из внутреннего нестатического класса можно обратиться к нестатическому полю внешнего класса с использованием наименования внешнего класса и оператора this. Например, OuterClass.this.fieldName.

Примечание : использование вложенных классов приводит к некоторому нарушению инкапсуляции, поскольку вложенный класс может обращаться к закрытым членам внешнего класса, но не наоборот.

Описание и пример использования вложенных (внутренних) классов представлено здесь.

18. Аннотации классов

Аннотация («annotation») в языке Java – это специальная форма метаданных, которая может быть добавлена в исходный код. Аннотированы могут быть пакеты, классы, методы, переменные и параметры. Аннотации стали доступны в самом языке начиная с 5-ой версии Java. В 6-ой версии Java аннотации были интегрированы в компилятор javac.

Имеются встроенные широко используемые аннотации, которые отслеживаются средой разработки IDE и применяются к методу класса :

  • @Override — проверка переопределения метода. IDE вызывает предупреждение компиляции, если метод не найден в родительском классе;
  • @Deprecated — IDE отмечает, что метод устарел и вызывает предупреждение компиляции, если метод используется.
  • @SuppressWarnings — аннотация указывает IDE подавить предупреждения компиляции.

Аннотации, применяемые к другим аннотациям :

  • @Retention — определяет режим хранения аннотации (в исходном коде или в скомпилированном классе);
  • @Documented — отмечает аннотацию для включения в документацию;
  • @Target — отмечает аннотацию как ограничивающую (какие элементы java-аннотации могут быть к ней применены);
  • @Inherited — отмечает, что аннотация может быть расширена подклассами аннотируемого класса.

Подробнее об аннотациях можно прочитать здесь.

19. Использование метода finalize

Метод finalize предназначен для автоматического освобождения системных ресурсов, занимаемых объектом. Это может быть удобным, чтобы постоянно не помнить, что, например, необходимо закрыть соединение с каким-либо ресурсом.

Можно использовать finalize для чистки данных. Но, во-первых, нет гарантии, что он будет вызван, если где-то в коде осталась ссылка на объект. Ну, и во-вторых, нет гарантии на то, что метод будет вызван сразу. Это связано с тем, что если в объекте переопределен метод finalize, то он вызывается не сразу, а помещается в очередь, которая обрабатывается специально созданным для этого потоком. Следует отметить, что в очередь на «финализацию» попадают только те объекты, в которых переопределен метод finalize.

Порядок очистки объектов

Cборщик мусора Garbage Collector не вызывает методы finalize() напрямую (по крайней мере, в HotSpot 1.6), а только добавляет соответствующие объекты в специальный список, вызывая статический метод java.lang.ref.Finalizer.register(Object). Объект класса Finalizer формирует двусвязный список ссылок на объекты, для которых необходимо вызвать finalize(). Т.е. в списке хранятся ссылки на следующий и предыдущий finalize().

Непосредственный вызов методов finalize() происходит в отдельном потоке «Finalizer» (java.lang.ref.Finalizer.FinalizerThread), который создаётся при запуске виртуальной машины, а точнее в статической секции при загрузке класса Finalizer. Методы finalize() вызываются последовательно в том порядке, в котором были добавлены в список сборщиком мусора. Соответственно, если какой-то finalize() зависнет, то он подвесит поток «Finalizer», но не сборщик мусора. Таким образом, если объект не имеет метода finalize(), то он будут исправно удаляться, а вот объекты с методом finalize будут увеличивать очередь до тех пор, пока «не отвиснет» поток «Finalizer», не завершится приложение или не кончится память.

Есть вероятность того, что метод finalize() не будет вызван совсем. Это может произойти в том случае, когда сборщик мусора будет готов вызвать метод объекта, но программа завершила свою работу.

20. Отличие final, finally, finalize

У этих операторов общим является только корень final, и то, что они являются зарезервированными словами в Java.

final — модификатор, применяющийся к классам, методам, переменным.

finally является частью конструкции try-catch-finally, где играет роль блока, который выполняется независимо от событий происходящих в try-catch и выполняется в любом случае.

Interview Review

Подготовка к собеседованиям

Мы собираем для вас ответы на самые популярные вопросы с собеседований на Java и Android разработчика.


Вопросы регулярно публикуются в каналах Телеграм.

Здесь вы найдете:

  • Частые вопросы на собеседовании, и ответы на них. О чем бы вас не спросили на интервью – скорее всего у нас есть развернутый ответ, целая мини-статья. Набор ссылок на различные статьи и книги даст направление для дальнейшего изучения темы.
  • Как проходить собеседование на программиста вообще. В некоторых вопросах важно не только что вы рассказываете, но и как. Для этих случаев, мы приоткроем для вас завесу тайны, и расскажем, что же на самом деле в этих случаях ждет ваш интервьюер.
  • Тонкости прохождения собеседования Java программиста. В каждом отдельном направлении есть свои особенности. Java разработка бывает разной: финансовый энтерпрайз ждет от работника не тех же самых навыков, что маленький стартап, десктопная разработка сильно отличается от web. Наши публикации помогут вам к этому подготовиться.
  • Особенности собеседований Andro >Чат по программированию. И для Android, и для Java каналов у нас работает чат-обсуждение. Перейдите в него по кнопке «обсудить» в Telegram, и пообщайтесь с коллегами и единомышленниками.
Мастер Йода рекомендует:  4 причины, которые обязывают нас тестировать приложения

Присылайте свои варианты вопросов для собеседований программистов нашему админу @SobesAdmin.

10 популярных вопросов с Java-собеседований

Ты не поверишь, какой ценный материал мне частенько подкидывают начинающие разработчики.

Один из таких — огромный список вопросов по Java, которые можно услышать на собеседовании, причем для всех уровней, Junior/Middle/Senior. Подтверждаю — мне частенько задавали эти вопросы, да и я сам, в роли интервьюера, их задавал.

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

Большое спасибо моему ученику @Alexander Metelchenko за предоставленный список.

Кстати, приличную часть этих вопросов покрывает email-курс JavaRanger и JavaEEHunter. Так же, это отличный инструмент проверить свои знания по JavaSE/EE, SQL и web.

Знаешь чем можно расширить этот список? Пиши в комментариях — я добавлю.

Интенсив Современная Java с Senior Разработчиками в эту субботу 28 января. Регистрируйся.

Оглавление:

Типы данных, переменные, операторы, циклы, массивы

  1. Сколько ключевых слов зарезервировано языком, что это за слова, какие из них не используются?
  2. Из каких символов может состоять имя переменной (корректный идентификатор)?
  3. Что значит слово «инициализация»?
  4. На какие основные группы можно поделить типы данных?
  5. Какие примитивные типы вы знаете? Назовите размерность в байтах для каждого типа.
  6. Что вы знаете о преобразовании примитивных типов данных, есть ли потеря данных, можно ли преобразовать логический тип?
  7. Какими значениями инициализируются переменные по умолчанию?
  8. Как передается значение переменной (по ссылке/значению)?
  9. Что вы знаете о функции main, какие обязательные условия ее определения?
  10. Какие логические операции и операторы вы знаете?
  11. В чем разница краткой и полной схемы записи логических операторов?
  12. Что такое таблица истинности?
  13. Что такое тернарный оператор выбора?
  14. Какие унарные операции вы знаете?
  15. Какая арифметическая операция выполняется при побитовом сдвиге вправо/влево?
  16. Какова роль и правила написания оператора выбора?
  17. Какие циклы вы знаете, в чем их отличия?
  18. Что такое «итерация цикла»?
  19. Какие параметры имеет цикл for, можно ли их не задать?
  20. Какой оператор используется для немедленной остановки цикла?
  21. Какой оператор используется для перехода к следующей итерации цикла?
  22. Что такое массив?
  23. Какие виды массивов вы знаете?
  24. Что вы знаете о классах оболочках?
  25. Что такое автоупаковка (boxing/unboxing)?

ООП (оглавление)

  1. Назовите принципы ООП и расскажите о каждом.
  2. Дайте определение понятию «класс».
  3. Что такое поле/атрибут класса?
  4. Как правильно организовать доступ к полям класса?
  5. Дайте определение понятию «конструктор».
  6. Чем отличаются конструкторы по-умолчанию, копирования и конструктор с параметрами?
  7. Какие модификации уровня доступа вы знаете, расскажите про каждый из них.
  8. Расскажите об особенностях класса с единственным закрытым (private) конструктором.
  9. О чем говорят ключевые слова «this», «super», где и как их можно использовать?
  10. Дайте определение понятию «метод».
  11. Что такое сигнатура метода?
  12. Какие методы называются перегруженными?
  13. Могут ли нестатические методы перегрузить статические?
  14. Расскажите о переопределение методов.
  15. Может ли метод принимать разное количество параметров (аргументы переменной длины)?
  16. Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?
  17. Как получить доступ к переопределенным методам родительского класса?
  18. Какие преобразования называются нисходящими и восходящими?
  19. Чем отличается переопределение от перегрузки?
  20. Где можно инициилизировать статические/нестатические поля?
  21. Зачем нужен оператор instanceof?
  22. Зачем нужны и какие бывают блоки инициализации?
  23. Каков порядок вызова конструкторов и блоков инициализации двух классов: потомка и его предка?
  24. Где и для чего используется модификатор abstract?
  25. Можно ли объявить метод абстрактым и статическим одновременно?
  26. Что означает ключевое поле static?
  27. К каким конструкциям Java применим модификатор static?
  28. Что будет, если в static блоке кода возникнет исключительная ситуация?
  29. Можно ли перегрузить static метод?
  30. Что такое статический класс, какие особенности его использования?
  31. Какие особенности инициализации final static переменных?
  32. Как влияет модификатор static на класс/метод/поле?
  33. О чем говорит ключевое слово final?
  34. Дайте определение понятию «интерфейс».
  35. Какие модификаторы по умолчанию имеют поля и методы интерфейсов?
  36. Почему нельзя объявить метод интерфейса с модификатором final или static?
  37. Какие типы классов бывают в java (вложенные… и.т.д.)
  38. Что вы знаете о вложенных классах, зачем они используются? Классификация, варианты использования, о нарушении инкапсуляции.
  39. Каким образом из вложенного класса получить досуп к полю внешнего класса?
  40. Какие особенности создания вложенных классов: простых и статических.
  41. В чем разница вложенных и внутренних классов?
  42. Какие классы называются анонимными?
  43. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли каке-нибудь ограничения для такой переменной?
  44. Как связан любой пользовательский класс с классом Object?
  45. Расскажите про каждый из методов класса Object.
  46. Что такое метод equals(). Чем он отличается от операции ==.
  47. Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?
  48. Если equals() переопределен, есть ли какие-либо другие методы, которые следует переопределить?
  49. В чем особенность работы методов hashCode и equals? Каким образом реализованы методы hashCode и equals в классе Object? Какие правила и соглашения существуют для реализации этих методов? Когда они применяются?
  50. Какой метод возвращает строковое представление объекта?
  51. Что будет, если переопределить equals не переопределяя hashCode? Какие могут возникнуть проблемы?
  52. Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете hashCode?
  53. Как вы думаете, будут ли какие-то проблемы, если у объекта, который используется в качестве ключа в hashMap изменится поле, которое участвует в определении hashCode?
  54. Чем отличается абстрактый класс о интерфейса, в каких случаях что вы будете использовать?
  55. Можно ли получить доступ к private переменным классам и если да, то каким образом?
  56. Модификаторы. Назначение и варианты использования.

  57. Что такое volatile и transient? Для чего и в каких случаях можно было бы использовать default?
  58. Контексты использования модификаторов (класс/поле/метод)
  59. Какой из модификаторов более строгий: protected или package-private?
  60. Расширение модификаторов при наследовании, переопределение и сокрытие методов. Если у класса-родителя есть метод, объявленный как private, может ли наследник расширить его видимость? А если protected? А сузить видимость?
  61. Модификатор abstract и final для классов/методов
  62. Имеет ли смысл объявлять метод private final?
  63. Какие особенности инициализации final переменных?
  64. Что будет, если единственный конструктор класса объявлен как final?
  65. Расширение/сужение типов в аргументах переопределяемых методов в случае, если бы в Java список формальных параметров не входил бы в сигнатуру метода.
  66. Что такое finalize? Зачем он нужен? Что Вы можете рассказать о сборщике мусора и алгоритмах его работы.
  67. Почему метод clone объявлен как protected? Что необходимо для реализации клонирования?
  68. Знакомы ли Вам какие-либо паттерны проектирования?
  69. Напишите Singleton… А с ленивой загрузкой. А если он должен быть потоко-безопасным? А в каких случаях ленивая загрузка хуже?
  70. Что можете сказать про MVC? Нарисуйте диаграмму и объясните, как MVC работает.
  71. Напишите функцию вычисления факториала.
  72. Дана функция вычисления чисел Фибоначчи, известно, что она работает. Найдите логическую ошибку. Оцените сложность получившегося алгоритма.

Исключения (оглавление)

  1. Дайте определение понятию «исключение»
  2. Какова иерархия исключений.
  3. Можно/нужно ли обрабатывать ошибки jvm?
  4. Какие существуют способы обработки исключений?
  5. О чем говорит ключевое слово throws?
  6. В чем особенность блока finally? Всегда ли он исполняется?
  7. Может ли не быть ни одного блока catch при отлавливании исключений?
  8. Могли бы вы придумать ситуацию, когда блок finally не будет выполнен?
  9. Может ли один блок catch отлавливать несколько исключений (с одной и разных веток наследований)?
  10. Что вы знаете об обрабатываемых и не обрабатываемых (catched/uncatched) исключениях?
  11. В чем особенность RuntimeException?
  12. Как написать собственное («пользовательское») исключение? Какими мотивами вы будете руководствоваться при выборе типа исключения: checked/unchecked?
  13. Какой оператор позволяет принудительно выбросить исключение?
  14. Есть ли дополнительные условия к методу, который потенциально может выбросить исключение?
  15. Может ли метод main выбровить исключение во вне и если да, то где будет происходить обработка данного исключения?
  16. Если оператор return содержится и в блоке catch и в finally, какой из них «главнее»?
  17. OutOfMemoryError
  18. SQLException и поинтересоваться, оно chekced или unchecked и нормально ли это по мнению кандидата.
  19. Что такое Error? В каком случае используется Error. Приведите пример Error’а.
  20. Какая конструкция используется в Java для обработки исключений?
  21. Возможно ли использование блока try-finally (без catch)?
  22. Предположим, есть блок try-finally. В блоке try возникло исключение и выполнение переместилось в блок finally. В блоке finally тоже возникло исключение. Какое из двух исключений “выпадет” из блока try-finally? Что случится со вторым исключением?
  23. Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой оследовательности должны идти блоки catch? Сколько блоков catch будет выполнено?

Коллекции (оглавление)

  1. Дайте определение понятию «коллекция».
  2. Назовите преимущества использования коллекций.
  3. Какие данные могут хранить коллекции?
  4. Какова иерархия коллекций?
  5. Что вы знаете о коллекциях типа List?
  6. Что вы знаете о коллекциях типа Set?
  7. Что вы знаете о коллекциях типа Queue?
  8. Что вы знаете о коллекциях типа Map, в чем их принципиальное отличие?
  9. Назовите основные реализации List, Set, Map.
  10. Какие реализации SortedSet вы знаете и в чем их особенность?
  11. В чем отличия/сходства List и Set?
  12. Что разного/общего у классов ArrayList и LinkedList, когда лучше использовать ArrayList, а когда LinkedList?
  13. В каких случаях разумно использовать массив, а не ArrayList?
  14. Чем отличается ArrayList от Vector?
  15. Что вы знаете о реализации классов HashSet и TreeSet?
  16. Чем отличаются HashMap и TreeMap? Как они устроены и работают? Что со временем доступа к объектам, какие зависимости?
  17. Что такое Hashtable, чем она отличается от HashMap? На сегодняшний день она deprecated, как все-таки использовать нужную функциональность?
  18. Что будет, если в Map положить два значения с одинаковым ключем?
  19. Как задается порядок следования объектов в коллекции, как отсортировать коллекцию?
  20. Дайте определение понятию «итератор».
  21. Какую функциональность представляет класс Collections?
  22. В чем разница между HashMap и HashTable?
  23. Какой предок у класса HashTable?
  24. Как получить не модифицируемую коллекцию?
  25. Какие коллекции синхронизированы?
  26. Как получить синхронизированную коллекцию из не синхронизированной?
  27. Как получить коллекцию только для чтения?
  28. Почему Map не наследуется от Collection?
  29. В чем разница между Iterator и Enumeration?
  30. Как реализован цикл foreach?
  31. Почему нет метода iterator.add() чтобы добавить элементы в коллекцию?
  32. Почему в классе iterator нет метода для получения следующего элемента без передвижения курсора?
  33. В чем разница между Iterator и ListIterator?
  34. Какие естьспособы перебора всех элементов List?
  35. В чем разница между fail-safe и fail-fast свойствами?
  36. В каких случаях может быть выброшено ConcurrentModificationException?
  37. Что такое стек и очередь, расскажите в чем их отличия?
  38. В чем разница между интерфейсами Comparable и Comparator?
  39. Почему коллекции не наследуют интерфейсы Cloneable и Serializable?
  40. Какие алгоритмы сортировки Вам известны? Какие вообще знаете алгоритмы?
  41. Алгоритмы. Методы сортировки: quick sort, merge sort, radix sort; hash map, linked list, binary search tree; semaphore, thread pool, blocking queue
  42. Как посчитать среднее массива?
  43. Что быстрее, HashMap или TreeMap?

Строки (оглавление)

  1. Какие «строковые» классы вы знаете?
  2. Какие основные свойства «строковых» классов (их особенности)?
  3. Можно ли наследовать строковый тип, почему?
  4. Дайте определение понятию конкатенация строк.
  5. Как преобразовать строку в число?
  6. Как сравнить значение двух строк?
  7. Как перевернуть строку?
  8. Как работает сравнение двух строк?
  9. Как обрезать пробелы в конце строки?
  10. Как заменить символ в строке?
  11. Как получить часть строки?
  12. Дайте определение понятию «пул строк».
  13. Какой метод позволяет выделить подстроку в строке?

  14. Как разбить строку на подстроки по заданному разделителю?
  15. Какой метод вызывается для преобразования переменной в строку?
  16. Как узнать значение конкретного символа строки, знаю его порядковый номер в строке?
  17. Как найти необходимый символ в строке?
  18. Можно ли синхронизировать доступ к строке?
  19. Что делает метод intern()?
  20. Чем отличаются и что общего у классов String, StringBuffer и StringBuilder?
  21. Как правильно сравнить значения строк двух различных объектов типа String и StringBuffer?

Потоки ввода/вывода (оглавление)

  1. Какие существуют виды потоков ввода/вывода?
  2. Назовите основные предки потоков ввода/вывода.
  3. Что общего и чем отличаются следующие потоки: InputStream, OutputStream, Reader, Writer?
  4. Что вы знаете о RandomAccessFile?
  5. Какие есть режимы доступа к файлу?
  6. В каких пакетах лежат классы-потоки?
  7. Что вы знаете о классах-надстройках?
  8. Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных?
  9. Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера?
  10. Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
  11. Какой класс предназначен для работы с элементами файловой системы (ЭФС)?
  12. Какой символ является разделителем при указании пути к ЭФС?
  13. Как выбрать все ЭФС определенного каталога по критерию (например, с определенным расширением)?
  14. Что вы знаете об интерфейсе FileFilter?
  15. Что такое сериализация?
  16. Какие условия «благополучной» сериализации объекта?
  17. Какие классы позволяют архивировать объекты?

Потоки выполнения/многопоточность (оглавление)

  1. Дайте определение понятию «процесс».
  2. Дайте определение понятию «поток».
  3. Дайте определение понятию «синхронизация потоков».
  4. Как взаимодействуют программы, процессы и потоки?
  5. В каких случаях целесообразно создавать несколько потоков?
  6. Что может произойти если два потока будут выполнять один и тот же код в программе?
  7. Что вы знаете о главном потоке программы?
  8. Какие есть способы создания и запуска потоков?
  9. Какой метод запускает поток на выполнение?
  10. Какой метод описывает действие потока во время выполнения?
  11. Когда поток завершает свое выполнение?
  12. Как синхронизировать метод?
  13. Как принудительно остановить поток?
  14. Дайте определение понятию «поток-демон».
  15. Как создать поток-демон?
  16. Как получить текущий поток?
  17. Дайте определение понятию «монитор».
  18. Как приостановить выполнение потока?
  19. В каких состояниях может прибыватьпоток?
  20. Что является монитором при вызове нестатического и статического метода?
  21. Что является монитором при выполнении участка кода метода?
  22. Какие методы позволяют синхронизировать выполнение потоков?
  23. Какой метод переводит поток в режим ожидания?
  24. Какова функциональность методов notify и notifyAll?
  25. Что позволяет сделать метод join?
  26. Каковы условия вызова метода wait/notify?
  27. Дайте определение понятию «взаимная блокировка».
  28. Чем отличаются методы interrupt, interrupted, isInterrupted?
  29. В каком случае будет выброшено исключение InterruptedException, какие методы могут его выбросить?
  30. Модификаторы synchronized и volatile
  31. Пакет java.util.concurrent
  32. Какие вы знаете способы запустить некоторое действие в отдельном потоке?
  33. Какие вы знаете способы прекратить выполнение потока?
  34. Какие ключевые слова Java, связанные с многопоточностью Вы знаете?
  35. Есть некоторый метод, который исполняет операцию i++. Переменная i типа int. Предполагается, что код будет исполнятся в многопоточной среде. Следует ли синхронизировать блок?
  36. Что служит в качестве mutex, если метод объявлен synchronized?
  37. Можно ли вызвать в разных потоках два synchronized метода одного и того же объекта?
  38. Что используется в качестве mutex, если метод объявлен static synchronized? Можно ли создавать новые кземпляры класса, пока выполняется static synchronized метод?
  39. Объясните, что такое deadlock? Приведите пример кода, который демонстрирует deadlock.
  40. Какие особенности использования метода wait? При каких условиях поток может выйти из режима ожидания?
  41. Предположим в методе run возник RuntimeException, который не был пойман. Что случится с потоком? Есть ли способ узнать о том, что Exception произошел (не заключая все тело run в блок try-catch)? Есть ли способ восстановить работу потока после того как это произошло?
  42. Какие стандартные инструменты Java вы бы использовали для реализации пула потоков?

SQL, JDBC (оглавление)

  1. ANSI SQL
  2. Основные элементы баз данных — таблицы, процедуры, функции, констрейнты и т.д.
  3. Констрейнты: как вы понимаете null в базах данных.
  4. Агрегатные функции, как они работают с null. Не забудьте о group by и having
  5. JDBC: Connection, Statement, PreparedStatement, CallableStatement, ResulSet, зачем каждая из этих сущностей нужна. Чем они являются: абстрактными классамм, конкретными классами или интерфейсами и почему.
  6. Как создать соединение в JDBC?
  7. Каким образом лучше добавлять большое количество записей в таблицу?
  8. Транзакции и autocommit
  9. Что такое первая нормальная форма и процесс нормализации? Какие бывают нормальные формы?
  10. В чем смысл индекса СУБД, как они устроены, как хранятся? Как бы вы реализовали тот же функционал? Последний вопрос задают в случае, если нет четкого понимания индексов.
  11. Нарисуйте отношение Многие-ко-многим. Например: таблицы Авторы и Книги. У одного автора может быть несколько книг, и книга может быть написана несколькими авторами. Составьте SQL запрос на выборку книг определенного автора.

JSP (оглавление)

  1. Что такое jsp и зачем он нужен?
  2. Расскажите об этапах жизненного цикла jsp.
  3. Расскажите о методах жизненного цикла jsp.
  4. Как закомментировать код в jsp?
  5. Какие есть способы вставки java кода в jsp страницу?
  6. Почему не рекомендуется использовать скриптовые элементы в jsp?
  7. Какие неявные, внутренние объекты есть на jsp странице?
  8. Что вы знаете о PageContext?
  9. Как можно запретить использование скриптов и java кода на jsp странице?
  10. Что вы знаете о jsp тегах?
  11. Что вы знаете о языке выражений jsp (JSP Expression Language — EL)?
  12. Назовите неявные, внутренние объекты JSP EL и их отличия от объектов jsp.
  13. Как узнать http метод использую JSP EL?
  14. Что такое JSTL (Jsp Standard tag library)?

  15. На какие категории можно разделить JSTL теги, приведите примеры.
  16. Что вы знаете о написании пользовательских jsp тегов?
  17. Как можно обработать ошибки jsp страниц?
  18. Как происходит обработка ошибок с помощью jstl?
  19. Как деактивировать использование EL на JSP?
  20. Можно ли использовать javascript на jsp странице?
  21. Всегда ли создается объект сессии на jsp странице, можно ли отключить его создание?
  22. Как можно расширить функциональность jsp?

Servlet (оглавление)

  1. Какова структура веб-проекта?
  2. Что такое сервлет?
  3. Что такое контейнер сервлетов?
  4. Каковы задачи, функциональность контейнера сервлетов?
  5. Что вы знаете о сервлет фильтрах?
  6. Зачем нужны слушатели в сервлетах?
  7. Когда вы будете использовать фильтры а когда слушатели?
  8. Как обработать исключения, выброшенные другим сервлетом в приложении?
  9. Что такое дискриптор развертывания?
  10. Как реализовать запуск сервлета с запуском приложения?
  11. Что представляет собой объект ServletConfig?
  12. Что представляет собой объект ServletContext?
  13. В чем отличия ServletContext и ServletConfig?
  14. Что такое Request Dispatcher?
  15. Как можно создать блокировку (deadlock) в сервлете?
  16. Как получить адрес сервлета на сервере?
  17. Как получить информацию о сервере с сервлета?
  18. Как получить ip адрес клиента на сервере?
  19. Что вы знаете о классах обертках (wrapper) для сервлетов?
  20. Каков жизненный цикл сервлета и когда какие методы вызываются?
  21. Какие методы необходимо определить при создании сервлетов?
  22. В каком случае вы будете переопределять метод service()?
  23. Есть ли смысл определить конструктор для сервлета, как лучше инициализировать данные?
  24. В чем отличия GenericServlet и HttpServlet?
  25. Как вызватьиз сервлета другой сервлет этого же и другого приложения?
  26. Что вы знаете и в чем отличия методов forward() и sendRedirect()?
  27. Стоит ли волноваться о «многопоточной безопасности» работая с сервлетами?
  28. Что такое servlet scope (область видимости — время жизни) и какие вы знаете?
  29. Что вы знаете и зачем нужны методы java.net.URLEncoder.encode() и decode()?
  30. Зачем нужны и чем отличаются методы encodeUrl() и encodeRedirectUrl()?

Web (оглавление)

  1. Что такое www?
  2. Что такое w3c?
  3. Что такое TCP/IP?
  4. Что такое ftp?
  5. Чем отличаются http и https?
  6. Что такое протокол передачи данных, какие вы знаете?
  7. Что такое web server?
  8. Что такое web приложение?
  9. Что такое application server?
  10. Чем отличаются web server и application server?
  11. Какие методы передачи данных вы знаете?
  12. Чем отличаются методы get и post?
  13. Что такое html?
  14. Что такое xml?
  15. Что такое css?
  16. Что такое MIME type?
  17. Что такое cookies?
  18. Что такое сессия?
  19. Дайте определение понятиям «авторизация» и «аутентификация», в чем их различия?
  20. Что такое Ajax? Как принципиально устроена эта технология?
  21. Что такое ORM, как это перевести и как это должно работать?

А ты знаешь ответы на все вопросы для Java Interview?

Junior Java Developer – вопросы на собеседовании

В этой статье мы рассмотрим 25 наиболее часто встречающихся вопросов на интервью для новичков в программировании на Java. Все это реальные вопросы на собеседовании Java Junior Developer.

Можно ли в Java переопределить статический метод?

Нет, статический метод в Java мы не можем переопределить. Мы можем только скрыть его.

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

Статический метод в Java не может быть переопределен по таким причинам:

  • Статические методы — это те, которые принадлежат непосредственно классу. Они не принадлежат объекту, и при переопределении объект решает, какой метод должен быть вызван.
  • Переопределение метода происходит динамически (во время выполнения), это означает, что определение того, какая версия метода будет использоваться происходит во время выполнения в соответствии с объектом, используемым для вызова, в то время как статические методы ищутся статически (во время компиляции).

Когда вы запустите программу выше, вы получите следующий результат:

Согласно правилам переопределения методов, вызов метода разрешается во время выполнения по типу object. Таким образом, в нашем примере выше d.hello (), во втором вызове, должен вызывать метод hello () класса DisplayMessage, поскольку ссылочная переменная класса Display ссылается на объект DisplayMessage, но вызывает hello () самого класса Display. Это происходит потому, что выполнение статического метода разрешается во время компиляции.

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

Можно ли выполнить перегрузку метода main() в Java?

Достаточно распространенный по языку Java вопрос на интервью.

Да, вы можете перегрузить метод main() в Java.

В Java можно выполнить перегрузку метода main(), но когда мы запустим нашу программу, JVM будет искать общедоступный статический void main (String [] args) и выполнит этот метод.

Мастер Йода рекомендует:  «Альтернативный Telegram» от «Крымтехнологий» взламывается за 3 минуты

Перегрузка метода main() в Java:

Когда вы запустите программу выше, вы получите такой результат:

Видно, что метод main() у нас перегружен, но все же JVM вызывает метод с подписью public static void main (String [] args).

Обратите внимание, что JVM считает var args public static void main (String. args) таким же, как public static void main (String [] args).

Если мы хотим вызвать именно перегруженный метод, то вам нужно вызвать его из метода main с сигнатурой public static void main (String [] args).

Когда вы запустите программу выше, вы получите такой результат:

Как видите, мы вызвали перегруженные методы из main() с помощью аргумента String [].

Можем ли мы в Java переопределить приватные методы?

В Java мы не можем переопределить private методы, так как они видны только классу-владельцу.

Каков базовый класс для всех классов в Java?

java.lang.Object — это базовый класс для всех объектов.

Можете ли вы перечислить некоторые важные методы из класса object?

Среди важных методов класса object выделяют:

  • hashcode — в качестве возвращаемого значения имеет хеш-значение объекта;
  • equals — сравнивает ссылки на объекты;
  • wait — текущий поток ожидает, пока не будет вызвано notify или notifyAll;
  • notify — пробуждает один поток, который ожидает блокировки;
  • notifyAll — пробуждает все потоки, ожидающие блокировки;
  • toString — обеспечивает представление объекта в виде строкового значения;
  • clone — этот метод применяется для клонирования объекта;
  • finalize — этот метод вызывается, когда объект подвергается обработке сборщиком мусора.

Какие два метода вам нужно переопределить при помещении пользовательского объекта в качестве ключа для HashMap?

Вам нужно будет переопределить методы hashcode() и equals() в пользовательском классе, помещая объекты пользовательского класса в HashMap.

В чем отличия в Java между HashMap и HashSet?

HashMap

В HashMap реализован интерфейс Map, который выполняет сопоставление некого ключа со значением. Он не синхронизирован и не является потокобезопасным. Не допускаются дублирующиеся ключи, а также null ключи и null значения.

HashSet

В HashSet реализован интерфейс Set, не допускающий дублирования значений. Он не синхронизирован и не является потокобезопасным.

Выше employeeSet будет иметь 2 элемента, так как Set не допускает повторяющихся значений.
Метод add применяется для добавления элементов в HashSet. Если этот метод возвращает true, тогда элемент добавляется успешно, но, если возвращается false – это значит, что вы пытаетесь вставить дублирующее значение.

Одна из главных особенностей HashSet — объекты, которые мы собираемся добавить в HashSet, должны реализовывать методы Hashcode() и equals(), чтобы мы могли проверять наличие дублирующихся значений. Если мы добавляем пользовательские объекты в HashSet, то мы должны переопределить методы Hashcode() и equals() в соответствии с нашими потребностями. Если HashMap и HashSet не будут переопределены, объект будет принимать реализацию по умолчанию, что может быть нежелательно.

HashMap vs HashSet:

Можем ли мы иметь абстрактный класс без какого-либо абстрактного метода в нем?

Да, вы можете иметь абстрактный класс без создания какого-либо абстрактного метода.

Что вы знаете о переменной с модификатором transient? Когда вы будете ее использовать?

Переменные с модификатором transient (нерезидент) применяются при сериализации.

Если вы не хотите делать сериализуемую переменную, вы можете сделать ее переменной с модификатором transient.

Transient переменная — это переменная, значение которой не будет сериализоваться во время сериализации объекта. А при десериализации — вы получите значение по умолчанию для этих переменных.

Допустим, у вас есть класс Country, и вы не хотите сериализовать атрибут населения, поскольку он будет меняться со временем, поэтому вы можете объявить атрибут населения как transient, и он больше не будет сериализован.

Можете ли вы вызвать метод start() дважды в Java?

Нет, вы не можете вызвать метод start() дважды. Это вызовет llegalStateException.

После того как поток был запущен, он не может быть запущен снова. Если вы попытаетесь снова запустить поток, он выдаст исключение IllegalThreadStateException

Давайте разберемся с помощью примера:

Когда вы запустите программу выше, вы получите такой результат:

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

Если вы попытаетесь снова запустить поток, он выдаст исключение IllegalThreadStateException

Почему String неизменяемый (immutable) в Java?

В Java класс String неизменяемый. Если вы возьмете словарное значение слова «immutable», это означает, что он не может быть изменен с течением времени, соответственно строка не может быть изменена в Java.

Давайте разберемся с примером.

Как видите, значение str1 не изменилось. Она создала другой объект String со значением «Hellojava2blog», но не изменил String str1.

Это объясняет, что String является неизменяемым по своей природе.
Теперь давайте разберемся, каковы потенциальные причины сделать String неизменной в Java.

Пул строк:

Если вы просто присваиваете значение String, используя двойные кавычки, это значение сохраняется в области, называемой строковым пулом, и на одну строку могут ссылаться многие ссылочные переменные. Если бы String оказался изменяемым, то это повлияло бы на все ссылающиеся на нее переменные.

Потокобезопасность:

Неизменяемые объекты по умолчанию являются потокобезопасными, поэтому вам не нужно устанавливать для них синхронизацию, и экземпляр String можно безопасно разделить между несколькими потоками.

Безопасность:

Если бы String был изменяемым, это могло бы привести к множественным проблемам безопасности.
Например, при подключении к базе данных вы предоставляете имя пользователя, пароль, порт и имя хоста и т. д. в виде строки. Если бы строка — была изменяемая, то любой хакер мог бы изменить ссылочное значение, что было бы угрозой безопасности для приложения.

Хэш-значение кэша:

Когда вы используете String в качестве ключа в HashMap или HashSet или любой другой коллекции, вы можете кэшировать ее хеш-значение. Поскольку String является неизменяемым по своей природе, вам не нужно пересчитывать хэш каждый раз, поскольку он будет постоянным. Это значительно повышает производительность для этой коллекции на основе хеша.

Загрузка классов:

Строка используется в механизме загрузки классов. Она передается в качестве параметра. Если бы строка оказалась изменяемой, это вызвало бы прямую угрозу безопасности, поскольку любой хакер мог бы ее изменить.

Знаете ли вы, как сделать класс неизменным (immutable)? Можете ли вы предоставить шаги для этого?

Неизменяемый класс — это класс, состояние которого нельзя изменить после создания.
Пример: String — лучший пример неизменяемого класса. Создав строку, вы не сможете ее изменить.

Неизменяемый класс очень прост для понимания, он имеет только одно состояние.

Неизменяемые классы являются потокобезопасными. Это самое большое преимущество неизменяемого класса, потому что, — вам не нужно применять синхронизацию для неизменяемых объектов. Также, неизменяемый класс может быть полезен при помещении объекта неизменяемого класса в HashMap или может использоваться для целей кэширования, поскольку его значение не изменится.

Неизменяемые объекты по умолчанию являются потокобезопасными.

Шаги для создания неизменяемого класса:

  • Финализируйте свой класс:

Если вы финализируете свой класс — ни один класс не сможет его расширить, следовательно, не сможет переопределить методы этого класса.

  • Пометьте все переменные класса модификаторами доступа private и final:

Если вы сделаете переменную экземпляра private — ни один внешний класс не сможет получить доступ к переменным экземпляра, и, если вы сделаете их final — вы не сможете их изменить.

  • Скажите «нет» методам-мутаторам:

Не создавайте метод set для некоторых переменных класса, тогда не будет возможности явно изменить состояние переменных экземпляра.

  • Выполните клонирование изменяемых объектов при возврате из метода получения:

Если вы вернете клон объекта из метода get, то вернется объект. При этом, ваш оригинальный объект останется без изменений.

Можем ли мы иметь статический метод в интерфейсе?

Да, у нас может быть статический метод в интерфейсе из Java 8.

Можете ли вы объявить конструктор финальным (final)?

Нет, вы не можете объявить конструктор финальным.

В чем разница между StringBuffer и StringBuilder?

Что такое Java ClassPath?

ClassPath — это переменная окружения, которую виртуальная машина Java (JVM) использует для определения местоположения всех классов, используемых программой.
Например: jre / lib / rt.jar имеет все классы Java, и вам также необходимо включить файлы jar или файл классов, которые используются программой.

У вас есть список пользовательских объектов? Как вы можете их отсортировать?

Вам необходимо использовать интерфейс Comparable или Comparator для сортировки списка пользовательских объектов.

Что такое модификатор volatile в Java?

Если вы пометите любую переменную как volatile, эта переменная будет считываться из основной памяти, а не из кэша центрального процессора, поэтому каждый поток будет иметь обновленное значение в переменной.

Назовите два разных способа вызвать сборщик мусора?

System.gc() или Runtime.getRuntime().gc().

Что такое маркерный интерфейс в Java? Можете ли вы привести несколько примеров маркерного интерфейса?

Маркерные интерфейсы — это те интерфейсы, которые не содержат в себе никаких методов и полей.
Примерами интерфейсов маркеров являются: Serializable, Cloneable, Remote.

Сколько объектов будет создано ниже:

Здесь будут созданы три объекта, два в динамической памяти и один в постоянном пуле String.

Можете ли вы провести различие между проверяемым исключением (Checked Exception) и непроверяемым исключением (Unchecked Exceptions)?

Что такое исключение?

Исключением является нежелательная ситуация или условие при выполнении программы. И если вы неправильно обрабатываете исключение, то это может привести к аварийному завершению программы.

Что такое проверяемое исключение?

Проверяемые исключения — это те исключения, которые проверяются при компиляции. Если вы не обработаете их, вы получите ошибку компиляции.

Используя блок try и catch вы можете поместить код ошибки в блок try и перехватить исключение в блоке catch.

Что такое непроверяемое исключение?

Непроверяемые исключения — это те исключения, которые не проверяются во время компиляции. Java VM не будет «ругаться», если вы не обработаете такие исключения.

Если вы выполните код выше вы получите:

В чем разница между ArrayList и LinkedList? Как вы решите, какой из них вам нужно использовать?

Один из распространенных вопросов интервью: «В чем разница между ArrayList и LinkedList». Прежде чем мы действительно увидим различия, давайте кратко рассмотрим оба.

ArrayList:

  • ArrayList – является реализацией интерфейса List.
  • ArrayList не синхронизирован (поэтому не является потокобезопасным).
  • ArrayList реализован с использованием массива в качестве внутренней структуры данных. Его можно динамически изменять.

LinkedList:

  • LinkedList является реализацией интерфейса List и интерфейса Deque.
  • LinkedList не синхронизируется.
  • LinkedList реализован с использованием двусвязного списка в качестве внутренней структуры данных.

Свойство

ArrayList

LinkedList

Внутренняя структура данных

Использует динамический массив для хранения элементов внутри.

Он использует дважды связанный список для внутреннего хранения элементов.

Если нам нужно вставить или удалить элемент в ArrayList, это может занять O(n), так как он использует массив, и нам может потребоваться сместить элементы в случае вставки или удаления.

Если нам нужно вставить или удалить элемент в связанном списке, это займет O(1), так как он внутренне использует двусвязный список.

В ArrayList поиск выполняется быстрее, т.к. он использует массив, основанный на индексах. Сложность — O(1).

Поиск в LinkedList идет медленнее, т.к. он использует двусвязанный список. Сложность равна O(n).

ArrayList реализует только интерфейс List, поэтому его можно использовать только как List.

LinkedList реализует интерфейсы List, Deque, поэтому его можно использовать как List, Stack или Queue.

Когда использовать ArrayList и LinkedList?

Это на самом деле зависит от нашей потребности.
Если нам требуется произвести большое количество вставок или удалений, то нам следует использовать LinkedList. Если у нас имеется мало вставок или удалений, но выполняется много поисковых операций, то тогда нам следует использовать ArrayList.

В чем разница между wait и sleep в Java?

Один из распространенных вопросов на интервью Java разработчика: «В чем разница между wait и sleep в Java?». Прежде чем мы действительно увидим различия, кратко ознакомимся с обоими.

sleep vs wait:

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

Вы можете использовать Java Thread Join() для достижения этого сценария.

Без использования метода Join:

Когда вы запускаете программу выше, вы получите следующий результат:

С помощью метода Join:

Когда вы запустите программу выше, вы получите следующий результат:

Как видите, основной поток завершается последним в этом сценарии.

Итоги

Мы с вами рассмотрели 25 распространенных вопросов на собеседовании на должность Junior Java Developer.

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

Как проходит JAVA собеседование? Ответы на многие вопросы тут!

Я понимаю – это может испортить ваше ожидание собеседования. Вы начинаете считать дни, а затем часы и минуты, пока наконец не сядете со своим потенциальным работодателем, чтобы обсудить свое будущее в компании. Иногда нервозность может взять верх над вами, и вы можете оказаться в трудной ситуации, не зная, что сказать или как ответить. Однако, чтобы избежать этого и пройти интервью, вы должны прийти подготовленными. Эта статья поможет вам встретить Java собеседование во всеоружии.

Эти вопросы были разделены на несколько групп. Ответы на них помогут вам подготовиться и успешно пройти Java собеседование при приеме на работу.

Введение

Мы затронем версию Java 8, сначала будут освещены более базовые вопросы, а затем уже более продвинутые. Давайте начнем с самого начала и перейдем к основам.

Java собеседование: Основы

Вопрос 1: Что такое Java?

Это кажется довольно простым вопросом, не так ли? Что ж, ваш потенциальный работодатель, вероятно, ожидает четкого и однозначного ответа, поэтому давайте подготовим хотя бы один.

Java – это объектно-ориентированный, безопасный и высокоуровневый язык программирования. Он был создан и разработан еще в 1991 году человеком по имени Джеймс Гослинг. Язык Java разработан под слоганом «WORA» – «напиши один раз, запускай угодно» (write once, run anywhere). Он известен своей гибкостью и высокой эффективностью.

Вопрос 2: Является ли Java полноценно объектно-ориентированным языком?

Это вполне возможный вопрос на Java собеседование, и нет, он не полностью объектно-ориентирован. Java использует некоторые типы данных (char, byte, float), которые не являются объектами.

Вопрос 3: Назовите несколько преимуществ Java

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

Язык программирования Java также считается очень безопасным по сравнению с другими языками программирования. Это достигается благодаря интерпретатору, называемого JVM – этот интерпретатор устанавливается вместе с самой Java, и он постоянно снабжает ваш компьютер последними обновлениями безопасности из Интернета.

Кроме того, Java полностью адаптируем. Благодаря принципу «WORA», на котором основан язык Java, его можно переносить и применять на любом компьютере и операционной системе, которые вам нужны, – он полностью гибкий и многофункциональный.

Вопрос 4: В чем особенность Java 8?

На Java собеседование вам необходимо подготовить ответы на вопросы-сравнения, подобные этому. Это одно из самых крупных обновлений языка, поэтому было бы неплохо знать, в чем они заключаются.

Java 8 представила языковую поддержку для String, предоставила улучшенный Date / Time API и способствовала разработке JVM – системы, отвечающей за многие вещи в Java, включая функции Java, отвечающие за безопасность. В целом, Java 8 сделала язык программирования более доступным и более похожим на современные языки программирования.

Скорее всего на Java собеседование вы столкнетесь именно с таким вопросом. Просто имейте в виду, что Java 8 стало огромным обновлением как с точки зрения производительности, так и в плане безопасности.

Вопрос 5: Что такое access specifiers в Java?

Всего есть четыре спецификатора доступа, про которые вас могут спросить на Java собеседование. Существуют следующие спецификаторы: public (публичные), private (частные), protected (защищенные) и default (стандартные).

Публичные спецификаторы разрешают доступ к любому классу или через любой метод (отсюда и их имя). В отличие от этого, частные спецификаторы разрешают доступ только внутри самого указанного класса. Защищенный открывает доступ, который каким-то образом коррелирует с классом – либо изнутри класса, из подкласса или просто из того же пакета. Наконец, default обозначает стандартную (по умолчанию) область и разрешает доступ только из одного пакета.

Вопрос 6: Что такое constructor?

Constructor– это часть кода, которая инициализирует конкретный объект. Язык программирования Java имеет два типа конструкторов – по умолчанию и измененный.

Вопрос 7: Что такое Object?

Общий вопрос на Java собеседование. Объект в Java имеет состояние и поведение. Наиболее распространенным и понятным определением объекта является то, что это разновидность класса.

Вопрос 8: В чем разница между ‘equals()’ и ‘==’?

public class Equaltest <
public static void main(String[] args) <
String str1= new String(“HELLO”);
String str2= new String(“HELLO”);
if(Str1 == str2)
<
System.out.println(«String 1 == String 2 is true»);
>
else
<
System.out.println(«String 1 == String 2 is false»);
String Str3 = Str2;
if( Str2 == Str3)
<
System.out.println(«String 2 == String 3 is true»);
>
else
<
System.out.println(«String 2 == String 3 is false»);
>
if(Str1.equals(str2))
<
System.out.println(«String 1 equals string 2 is true»);
>
else
<
System.out.prinltn(«String 1 equals string 2 is false»);
>
>>

Вопрос 9: Какие объектные отсылки могут быть в Java?

Из всех вопросов на Java собеседование этот вопрос один из самых простых – в Java все ссылки на объекты являются нулевыми.

Вопрос 10: В чем разница между JDK, JVM и JRE?

JDK (Java Development Kit) – это комплект разработки Java. Это основной инструмент функции Java, используемый для компиляции программ на этом языке. В пакете имеются все необходимые инструменты, чтобы начать его использовать.

Я уже упоминал JVM (Java Virtual Machine) ранее – это означает виртуальная машина Java. Это машина, которая создает среду, в которой байт-код Java обрабатывается должным образом.

JRE (Java Runtime Environment)- это среда выполнения Java. Это тип среды, предоставляемый JVM – он позволяет правильную работу байт-кода Java.

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

Продвинутые вопросы

Вопрос 1: В чем разница между ‘method overloading’ and ‘method overriding’?

Одним из первых возможных базовых вопросов на Java собеседование может быть этот. В случае с ‘method overloading’ (перегрузка методов) методы, принадлежащие к одному и тому же классу, имеют одно и то же имя, но их параметры отличаются. Это касается расширений поведения метода больше всего на свете. И наоборот, подклассы ‘method overriding’ (переопределения методов) имеют методы с одинаковыми именами и параметрами. Цель здесь – изменить поведение уже существующего метода.

Просто для примера, так выглядит ‘method overloading’:

class Adder <
Static int add(int x, int y)
<
return x+y;
>
Static double add( double x, double y)
<
return x+y;
>
public static void main(String args[])
<
System.out.println(Adder.add(33,33));
System.out.println(Adder.add(16.4,16.8));
>>

А это ‘method overriding’:

class Dog <
void run() <
System.out.println(“dog is sleeping”);
>
Class Doberman extends Dog <
void run()
<
System.out.prinltn(“doberman is sleeping at night”);
>
public static void main( String args[])
<
Dog b=new Doberman();
b.run();
>
>

Вопрос 2: Какой вывод у этой программы Java?

public class Test
<
Test(int x, int y)
<
System.out.println(«x = «+x+» y = «+y);
>
Test(int x, float y)
<
System.out.println(«x = «+x+» y = «+y);
>
public static void main (String args[])
<
byte x = 30;
byte y = 65;
Test test = new Test(x,y);
>
>

Правильный ответ выглядит так:

a = 30 b = 65

Вопрос 3: Возможно ли запустить программу без ‘main() method’?

Довольно стандартный вопрос на Java собеседование и да, это возможно. Одним из наиболее распространенных способов выполнения такой программы является использование static block (статического блока).

Вопрос 4: Что такое ‘runtime polymorphism’?

Runtime polymorphism – это процесс, в котором конкретный вызов, отправляемый по определенному методу, будет разрешен во время выполнения, а не во время компиляции. Вот пример:

class Tree <
void run()
<
System.out.println(“tree is standing”);
>
>
class Willow extends Tree <
void run()
<
System.out.prinltn(“willow is standing on a hill”);
>
public static void main(String args[])
<
Tree b= new Willow(); //upcasting
b.run();
>
>

Вопрос 5: Что такое ‘Inheritance’?

Этот термин, честно говоря, лежит на поверхности – Inheritance – это когда один объект приобретает свойства и параметры другого (другого класса). Обсуждаемый выше метод переопределения использует это. Основная идея наследования состоит в том, что вы можете создавать новые классы на уже существующих. Существует пять различных типов наследования, но язык программирования Java поддерживает только четыре (множественное наследование не поддерживается). Почему не поддерживается множественное наследование? На самом деле есть только одна конкретная причина – упростить программу. Это должно быть важным примечанием, о которых стоит помнить для Java собеседование.

Вопрос 6: Назовите самый большой класс (SuperClass) из существующих в Java

Это один из самых простых вопросов, однако я должен также упомянуть, что это один из основных вопросов. Самый большой в Java – это объектный класс.

Вопрос 7: Что значит приставка Super в Java?

Super в Java используется как ссылка для указания на непосредственный родительский объект класса. Команду также можно использовать для вызова непосредственных родительских методов класса и конструктора.

Вопрос 8: Какой будет результат выполнения этой программы?

class Animal
<
public Animal()
<
System.out.println(«Animal class constructor called»);
>
>
public class Zebra extends Animal
<
public Zebra()
<
System.out.println(«Zebra class constructor called»);
>
public static void main (String args[])
<
Zebra e = new Zebra();
>
>

Вот такое ответ:

Animal class constructor called
Zebra class constructor called

Это очень распространенные вопросы на Java собеседование. Всегда обращайте внимание на переменные – они определяют окончательный ответ.

Вопрос 9: Что такое ‘association’ в Java?

Один из наиболее часто задаваемых вопросов о Java-программировании, на первый взгляд может показаться, что он довольно простой. Однако такие вещи, как aggregation и composition, происходят из ассоциаций (association), поэтому важно понимать этот термин.

Ассоциация (association) – это когда все объекты имеют свои жизненные циклы, а конкретный владелец не существует. Оно может варьироваться от “one” до “many”.

Вопрос 10: Что такое ‘object cloning’?

Как вы уже заметили, многие из этих вопросов имеют ответ в своем названии. Этот не исключение.

Мастер Йода рекомендует:  Введение в CSS Scroll Snap Points

Команда ‘object cloning’ (клонирование объекта) используется для создания идентичной копии объекта. Это делается с помощью метода clone () из класса объекта.

Итак, мы закончили с основными вопросами на Java собеседование, давайте сделаем шаг назад и поговорим об общей подготовке к собеседованию.

Подсказки для интервью

Я дам вам несколько советов, которые вы можете использовать до и во время собеседования, которые помогут вам легче пройти Java собеседование.

Даже не буду говорить, что надо выспаться и хорошо позавтракать – вы, наверное, слышали это уже по крайней мере тысячу раз. Я могу точно сказать, что вам не следует вставать в 3 утра, чтобы пересмотреть вопросы на Java собеседование, если вам назначили встречу на 8 утра. Старайтесь не думать об этом и ничего не делать за 24 часа до самого собеседования – бегло пересмотрите свои заметки по дороге на собеседование.

Кроме того, действуйте расслабленно, когда вы на собеседовании. Если работодатель видит, что вы нервничаете, он может подумать, что вы беспокоитесь, потому что у вас есть что скрывать – возможно, нехватка знаний? Не ведите себя глупо – найдите идеальный баланс между уверенностью в себе и свободой для импровизации.

И наконец, не думайте, что ваше интервью – это непреодолимая стена – вам не нужно отвечать на каждый вопрос идеально. Работодатели оценивают как ваши навыки, так и вашу личность во время собеседования. Лучше чего-то не понимать и вести себя естественно, чем притворяться и стараться выглядеть тем, кем вы не являетесь.

Заключение

Всегда требуются специалисты в области программирования. Язык Java является одним из самых популярных языков программирования в мире (благодаря своей гибкости, безопасности и простоте). В этой статье мы разобрали вопросы на Java собеседование. Помимо этого существует много других вопросов, которые мы не охватили.

Все, что вам осталось сделать – пройти собеседование и получить работу мечты!

Я надеюсь, что вас возьмут на ту самую вакансию!

10 популярных вопросов с Java-собеседований

Вопросы для собеседования на Java Developer

Потоки ввода/вывода в Java

Servlets, JSP, JSTL

  • © 2020 GitHub , Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Топ 10 вопросов с Java собеседования

Просмотров: 116 455

Winderton

3к лайков, и выложу похожий видос по С++.

Nick Smith

Лажа а не вопросы

Nikolay Frolov

Static для методов не означает final. В случае только static — в сабклассе может быть такой же метод. Static final запретит это сделать.

Alt Electrics

в java все параметры передаются по значению! примитивные по значению примитива (тоесть копия примитива), а ссылочные по значению ссылки (копия ссылки). не надо путать людей.

RaTanas

Прослушал обзор и пришла мысль что JAVA промежуточный язык, как асемблер между бинарным и функцыонным, поэтому много, но непонятно чего, изза чего появился ИИ, чтобы разговор типа HTML превратить в машынный. Нет в мире одной валюты и одного языка, поэтому к месту язык относитса и прижываетса в условиях. В принцыпе стремление к возможностям надеясь упростить настолько осложнило, что нетолько разные мышления нужны для написания, но и для починки подходы отличяютса. Эта такая прослойка где одни стремятса к пользованию, а другие к управлению, поэтому JAVA как порог программисту.

Mark Sto

Всё ж таки, [static/dynamic] binding — это «связывание», а не «присваивание». Для последнего же в англоязычных источниках используется термин assignment, и он, как нетрудно догадаться, из совсем другой оперы. Интересующимся могу порекомендовать классическую статью по CS — Fundamental Concepts in Programming Languages, — где присваивание равно как и L-value с R-value это одни из первых строго формализованных терминов.

ReRuRk

Т. Е. При собеседовании не важно то что ты умеешь программировать? Главное знать что и для чего?

Adam Black

да не может быть это определением знания java

Vincent Bravia

Ничего не понял, напишу рецепт блинов
Яйцо куриное 2 штуки
Соль 1 чайная ложка
Сахар 3 столовые ложки
Молоко 2 стакана
Пшеничная мука 2 стакана
Гашеная сода 1 чайная ложка
Растительное масло ¼ стакана

TheChris Grace

Это спрашивают Джунов ?

Alex RAlex

ну а самый смешной случай с собеседованиями был пожалуй когда автора маковского Homebrew завернули в гугле, со словами мол да, мы все пользуемся твоей тулзой, но ты не умеешь инвертировать бинарное дерево, поэтому давай до свиданья)

Alex RAlex

еще интересные вопросы про дженерики/вилдкарды, в чем разница между и , спросить про , , про и возможно ли , если нет,то почему;
ну и классический вопрос про методы класса Object;

Таня Иволга

Ребят, зачем нужны внутренние и вложенные классы?

Андрей Мещеряков

Музыка норм. Можно погромче навалить.

Что означает фраза «Макнут»?

Кирилл

Скучные вопросы все тоже самое в шарпе

Автомобильный Программист

Alexander Bobrikovich

@Winderton , спасибо за видео очень интересно но позвольте вставить свои 5 копеек

OOP, в Java 8 есть уже какое никакое функциональное программирование

Кроме этого:
— GC
— Class loading
— JMM, happens-before
— Generics

Собираемся на собеседование JAVA Junior

Всем добрый день!

Нужен совет тех, кто прошел через собеседования на разработчика JAVA Junior. Проблема в том, что я занялся чисто практикой во время изучения языка и совсем забыл про теорию. Отсюда плохой словарный запас. Внимание вопрос:

Что спрашивают на собеседовании? В гугле много информации по этому поводу, но она очень разная и не понятно: взята она с практики или с воздуха. Расскажите, как вы проходили собеседования и что вас спрашивали; с какими трудностями сталкивались и что пришлось подтянуть.

Потом создам статейку с самыми полезными ответами 🙂

Дубликаты не найдены

У меня еще такой вопрос, какие задачи дают джуну вообще? Допустим тот-же банк, или андроид разработчик банковского приложения.

Всем спасибо кто откликнулся, какое то представление из ваших ответов можно составить. Надеюсь для всех будет полезно почитать.

На мой взгляд, джун — это человек, который не несет ответственность за свой код, по этому, должно быть ожидаемо, что его код будет кривым, косым, нечитабельным, но рабочим.
По этому — основной упор на базовые знания языка.
Вы должны уметь решить задачу. Не сложную, но самостоятельно.
Как пример — описанное тут — подключить ваш код к БД. Вы должны не уметь его подключать, а уметь найти способ его подключить. Понять как это работает, и на этом примере научиться делать это второй-третий-десятый раз.
Программирование, в последнее время — это ремесло, не творчество (что печально), не наука (как было когда-то), а простое ремесло, и Вам, как начинающему ремесленнику — нужно уметь лажать с минимальными потерями для бизнеса. Все остальное постигается в процессе

Как по мне основное — понимание, как будет работать то, что вы пишите. Что будет происходить, если сделать вот так, а что — если не сделать.
Отсюда и требуемый стек — Java Core (не стоит заморачиваться с многопоточкой, сложными алгоритмами, структурой данных сложнее хешмапы) плюсом будет знание SQL хотя бы на уровне join’ов.
Все остальное — это уже условности работодателя, кому-то нужны веб приложения, и тут может быть понадобится Jax-RS/Jax-WS хотя бы на базовом уровне, кому-то — работа с БД (Hibernate, MyBatis, Jooq), кому-то — работа с большими объемами данных (Hadoop. хотя врядли XD ), в общем вариативно.
Если же, на собеседовании вас просят написать алгоритм бинарного поиска, или допустим в тестовом задании просят нарисовать сайт юзающий геопозицию гугла и хранящий данные о ГП в БД — то может быть вас просто хотят взять как джуна, а юзать как мидла. Платить вам придется меньше, задачи вы будете выполнять (хоть и медленно), а как дорастете до хоть какого-то уровня (если дорастете) и попросите повыше ЗП — вас заменят на нового (к сожалению, по крайней мере в Питере, это достаточно частое явление)

Топ 10 вопросов с Java собеседования

Просмотров: 116 455

Winderton

3к лайков, и выложу похожий видос по С++.

Nick Smith

Лажа а не вопросы

Nikolay Frolov

Static для методов не означает final. В случае только static — в сабклассе может быть такой же метод. Static final запретит это сделать.

Alt Electrics

в java все параметры передаются по значению! примитивные по значению примитива (тоесть копия примитива), а ссылочные по значению ссылки (копия ссылки). не надо путать людей.

RaTanas

Прослушал обзор и пришла мысль что JAVA промежуточный язык, как асемблер между бинарным и функцыонным, поэтому много, но непонятно чего, изза чего появился ИИ, чтобы разговор типа HTML превратить в машынный. Нет в мире одной валюты и одного языка, поэтому к месту язык относитса и прижываетса в условиях. В принцыпе стремление к возможностям надеясь упростить настолько осложнило, что нетолько разные мышления нужны для написания, но и для починки подходы отличяютса. Эта такая прослойка где одни стремятса к пользованию, а другие к управлению, поэтому JAVA как порог программисту.

Mark Sto

Всё ж таки, [static/dynamic] binding — это «связывание», а не «присваивание». Для последнего же в англоязычных источниках используется термин assignment, и он, как нетрудно догадаться, из совсем другой оперы. Интересующимся могу порекомендовать классическую статью по CS — Fundamental Concepts in Programming Languages, — где присваивание равно как и L-value с R-value это одни из первых строго формализованных терминов.

ReRuRk

Т. Е. При собеседовании не важно то что ты умеешь программировать? Главное знать что и для чего?

Adam Black

да не может быть это определением знания java

Vincent Bravia

Ничего не понял, напишу рецепт блинов
Яйцо куриное 2 штуки
Соль 1 чайная ложка
Сахар 3 столовые ложки
Молоко 2 стакана
Пшеничная мука 2 стакана
Гашеная сода 1 чайная ложка
Растительное масло ¼ стакана

TheChris Grace

Это спрашивают Джунов ?

Alex RAlex

ну а самый смешной случай с собеседованиями был пожалуй когда автора маковского Homebrew завернули в гугле, со словами мол да, мы все пользуемся твоей тулзой, но ты не умеешь инвертировать бинарное дерево, поэтому давай до свиданья)

Alex RAlex

еще интересные вопросы про дженерики/вилдкарды, в чем разница между и , спросить про , , про и возможно ли , если нет,то почему;
ну и классический вопрос про методы класса Object;

Таня Иволга

Ребят, зачем нужны внутренние и вложенные классы?

Андрей Мещеряков

Музыка норм. Можно погромче навалить.

Что означает фраза «Макнут»?

Кирилл

Скучные вопросы все тоже самое в шарпе

Автомобильный Программист

Alexander Bobrikovich

@Winderton , спасибо за видео очень интересно но позвольте вставить свои 5 копеек

OOP, в Java 8 есть уже какое никакое функциональное программирование

Кроме этого:
— GC
— Class loading
— JMM, happens-before
— Generics

Топ 10 вопросов с Java собеседования

KOMMENTARE • 186

3к лайков, и выложу похожий видос по С++.

Ну. на 12 августа уже 4.2к лайков (и не спроста), а где видео?

Нож мне в печень, C++ вечен.

Winderton где видос про С++

Это мне показалась, что ты перепутал Overriding (разные типы входных параметров), и Overloadin (переопределения методов)?

@AntiBlog ну так решетки — это клон явы

Лажа а не вопросы

Static для методов не означает final. В случае только static — в сабклассе может быть такой же метод. Static final запретит это сделать.

в java все параметры передаются по значению! примитивные по значению примитива (тоесть копия примитива), а ссылочные по значению ссылки (копия ссылки). не надо путать людей.

public class Main <
public static void main(String[] args) <
Animal animal = new Animal(10);
changeAnimalAge(animal);
System.out.println(animal); //Animal

int intNum = 100;
changeInt(intNum);
System.out.println(intNum); //100
>

public static void changeAnimalAge(Animal animal) < // passed by link (reference)
animal.setAge(animal.getAge() * 2);
// link to the same animal object in memory
>

public static void changeInt(int integer) < //passed by value
integer *= 2;
// copy of intNum
>
>

Прослушал обзор и пришла мысль что JAVA промежуточный язык, как асемблер между бинарным и функцыонным, поэтому много, но непонятно чего, изза чего появился ИИ, чтобы разговор типа HTML превратить в машынный. Нет в мире одной валюты и одного языка, поэтому к месту язык относитса и прижываетса в условиях. В принцыпе стремление к возможностям надеясь упростить настолько осложнило, что нетолько разные мышления нужны для написания, но и для починки подходы отличяютса. Эта такая прослойка где одни стремятса к пользованию, а другие к управлению, поэтому JAVA как порог программисту.

Всё ж таки, [static/dynamic] binding — это «связывание», а не «присваивание». Для последнего же в англоязычных источниках используется термин assignment, и он, как нетрудно догадаться, из совсем другой оперы. Интересующимся могу порекомендовать классическую статью по CS — Fundamental Concepts in Programming Languages, — где присваивание равно как и L-value с R-value это одни из первых строго формализованных терминов.

Т. Е. При собеседовании не важно то что ты умеешь программировать? Главное знать что и для чего?

да не может быть это определением знания java

Ничего не понял, напишу рецепт блинов
Яйцо куриное 2 штуки
Соль 1 чайная ложка
Сахар 3 столовые ложки
Молоко 2 стакана
Пшеничная мука 2 стакана
Гашеная сода 1 чайная ложка
Растительное масло ¼ стакана

Спасибо за рецепт

Опа! Схоронил к себе

Это спрашивают Джунов ?

ну а самый смешной случай с собеседованиями был пожалуй когда автора маковского Homebrew завернули в гугле, со словами мол да, мы все пользуемся твоей тулзой, но ты не умеешь инвертировать бинарное дерево, поэтому давай до свиданья)

еще интересные вопросы про дженерики/вилдкарды, в чем разница между

Ребят, зачем нужны внутренние и вложенные классы?

Музыка норм. Можно погромче навалить.

Что означает фраза «Макнут»?

Скучные вопросы все тоже самое в шарпе

@Winderton , спасибо за видео очень интересно но позвольте вставить свои 5 копеек
OOP, в Java 8 есть уже какое никакое функциональное программирование
Кроме этого:
— GC
— Class loading
— JMM, happens-before
— Generics

Если говорить про уровень middle и выше

Frontend на яве?
спасибо пооооорал)

Есть и такое, когда ты смотришь на JS как на говно =)

а я на пхп взламываю сайты

Давнокода, а не говнокода

Завтра сппівбесіда. В основі підготовки — це відео. Подивимося )

+
Питання(були/небули)
1)+
2)-
3)+; конкретно, як завантажується клас
4)+; конкретно анонімні класи, лямбди.
5)+
6)+
7)++; я тут їм прямо цитати windertona ) . Ледь не посипався на exception в сигнатурах при overloading;
8) + Вони ах*їли коли про хіп і стек задвинув ))) і Джошуа Блоха згадав ))) Хоча книгу в очі не бачив
9)+
10) —
Winderton, i will make donat for you from my first salary upper than 500$
Thanks you. You are the best )

Ну как, ходил уже на собес? Делись инфой)

помогите как учить конспекты?

Никак, не ваше это. Ищите что-то попроще: слесарь, токарь, сантехник.

Я понял, что я ни*уя не понял => ни*уя не знаю, но было очень интересно, спасибо!)

что за непонятные слова боже >:О

Подскажите какие проги нужно скачать новичку для начала работы в Java

Для начала не использовать ide, а писать код в простом редакторе, с подсветкой синтаксиса максимум. Так лучше разберётесь с разными тонкостями языка.

..скачать нужно среду разработки (IDE):
intellij idea, или eclipse,
..как установить и написать первый hello world, на youtube много соответствующих видео для начинающих)

Многие пишут на Java, ровно также, я раз в месяц иду на почту

а почему Джава а не Ява?

..потому что Jazz не Яз, а M. Jackson не Майкл Ексон))

Что-то не показал мне этот сайт данный видос когда он вышел. Предполагаю, что ютуб написан на джаве, и просто тогда гуглу не хватило памяти порекомендовать мне его.
Так вот: когда вы пытаетесь запустить любой проект, выполненный на яве — приготовьтесь, что у вас не хватит памяти. Ведь если взять примитивные текстовые редакторы, которые написаны топовыми ява-разработчиками мира, они требуют от 1.5 Гб озу на копию. Программа, складывающая 2+2 может у вас потребовать пары минут свопа, если специально для неё не было выделено 16Гб оперативы. В текущий момент к изучению явы призывает только одна вещь: если вы на поддержке конторы-динозавра. Иначе есть котлин, есть всякие поддержки глобальных переменных типа Dagger2. В общем дебилов, придумовших джаву сейчас догнали и нагнули, и она стала похожа на полноценный ЯП. Но не возгордитесь. Всё равно этот монстр в своей самой примитивной ипостаси лагает на смартфоне даже с 8Гб ОЗУ,

Чувак, не драматизируй так. Тот же питон, работает медленнее современной джавы и жрёт памяти не меньше — и ничего, много где применяется.

Ссылка по ООП дизайну на момент написания комментария не работает, сайт butunclebob.com/ тоже не открывается.

утверждение об интерфейсах устарело. И Java8 в 2020-ом уже была.

. говорили о JAVA, а потом. нате C++

Да уж, последние слова ну просто супер.
как так — то?

Все,что ты только что сказал,применимо отчасти и для c# и было бы не плохо если бы ты сделал видео на тему : «Почему Java а не C#» или что-то в этом роде.

С# как по мне так проще. Языки ОЧЕНЬ схожи, но в Шарпе как-то проще много что реализованно.

Хоть и дотнетчик, но видео все равно понравилось. Почти все вопросы относятся и к C#, если провести параллели. Просто некоторые вещи чуть по другому называются.

было бы классно, если бы были ссылки на какие-нибудь книги или ресурсы для изучения этих важных концепций

9:10 пегас — это лашадь и птица

Начало вопросов и ответов с 2:51

Уважаемый автор! Вот мне интересно я как начинающий программист, а каким образом написанный код в том же компиляторе потом преобразуется в какую либо программу? Почему все программисты об этом умалчивают? В компиляторе не достаточно ведь просто нажать Ctrl+shift+f10 и получить готовую программу, как это работает все?!

Уважаемый Френк Ли. С одной стороны я высказал свое мнение в отношении резкозти ответа на ваш вопрос предыдущим комментатором, но с другой стороны он дал исчерпывающий ответ ( хоть повторюсь, в не обоснованно резкой форме) Вам нужно понять, что в сфере программирования, вы очень часто будете сталкиваться с огромным множеством задачь и вашей прямой задачей будет поиск решений. Не имеет значения, вы начинающий или уже проффи, по мере продвижения вас в этой проффессии и степени преобретения опыта, задачи будут усложняться. Вам как начинающиму нужно научиться тому, как именно искать ответы и где это делать. Я поясню, для вас сейчас стоит задача понять как впринципе работает программа, как запустить фаил. Вы не получили ответ лишь по тому, что те кто сегодня работает в этой сфере, понимает на сколько это элементарная вещь и ответив на этот вопрос, вас подтолкнут в направлении того, что в первую очередь вы будете искать ответы у кого то спрашивая. Это отличный метод и для этого есть множество форумов, но до того, что бы у кого то спростть, нужно самому попробовать найти ответ, после, если все таки не нашли ответ, узнать у других, где можно найти ответ и только если вы не поняли, то тогда спросить. Почему именно так? Все просто, Вы пытаетесь разобраться с сферой, в которой создается продукт, но подходите к нему не как разработчик, а как потребитель ( Какую кнопку нажать, что бы было так?) Так вы врядле продвинетесь. По тому, что если работник не может самостоятельно решить поставленную задачу, а каждые 5 мин. всех переспрашивает или ничего не делает по тому, что ему где то еще не ответили из за этого тормозя проект и всю команду, то впринципе такой работник будет не нужен. А почему будет именно так? По тому, что если вы не привыкнете к самостоятельному поиску решений, а будете эти решения перекладывать на других ( а именно это вы делаете, если спрашиваете не попытавшись самостоятельно найти решение) то ваша деятельность будет совершенно не результативна. Ответ полученный вы не поймете, и на следующем же шаге, сново потребуется обьяснения. Вот к примеру это видео, вы же явно не поняли и 10% из того, что тут сказали. И это здорово! По тому, что потребитель (пользователь) в этом видео искал ответ, автор дал ответы, но вы как обычный пользователь не поняли ни слова. Для вас это видео не ответы, а вопросы, которые нужно изучить. По этому начните с малого, найдите ответ на ваш вопрос (это не сложно) а после, если вы хотите продвигаться в этом направлении, берите один вопрос из этого видео и ищите на него ответ, поняв его переходите к следующиму. Повторюсь, в программировании, вашей задачей будет поиск ответов на все новые и новые вопросы. Суть этой работы в постоянном развитии и раз уж вы пошли путем самостоятельного познания, то начинайте учиться самому принципу выполнения работы с самого начала. Удачи вам в вашем начинании и успеха в открытии новых возможностей.��

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

у тебя инета нету что бы там посмотреть? Я в ахуе с тебя и тебе подобных, все что угодно есть в инете, но нет блять его нужно обязательно надо задать, а то так сложно запрос в гугле сделать.

халтурный видос в плане ценности освоения, неплохой видос, чтобы пойти на собес и вспомнить, что же спросить джависта.

Добавить комментарий