Вопросы на собеседовании по java: Список вопросов с ответами для собеседования по Java

Содержание

Список вопросов с ответами для собеседования по Java

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

Цель – собрать не только вопросы (что-то их очень много в интернете), но и ответы на них в одном месте.

По поводу указания авторства читайте на главной странице раздела Interview

Оглавление:

  1. Типы данных, переменные, операторы, циклы, массивы
  2. ООП
  3. Исключения
  4. Коллекции
  5. Строки
  6. Потоки ввода/вывода
  7. Потоки выполнения/многопоточность
Java Enterprise Edition: Перейти в раздел вопросы и ответы для интервью по Java EE.
1. Типы данных, переменные, операторы, циклы, массивы (перейти в раздел)
  1. Сколько ключевых слов зарезервировано языком, что это за слова, какие из них не используются?
  2. Из каких символов может состоять имя переменной (корректный идентификатор)?
  3. Что значит слово “инициализация”?
  4. На какие основные группы можно поделить типы данных?
  5. Какие примитивные типы вы знаете?
  6. Что вы знаете о преобразовании примитивных типов данных, есть ли потеря данных, можно ли преобразовать логический тип?
  7. Какими значениями инициализируются переменные по умолчанию?
  8. Как передается значение переменной (по ссылке/значению)?
  9. Что вы знаете о функции main, какие обязательные условия ее определения?
  10. Какие логические операции и операторы вы знаете?
  11. В чем разница краткой и полной схемы записи логических операторов?
  12. Что такое таблица истинности?
  13. Что такое тернарный оператор выбора?
  14. Какие унарные и бинарные арифметические операции вы знаете?
  15. Какие побитовые операции вы знаете?
  16. Какова роль и правила написания оператора выбора (switch)?
  17. Какие циклы вы знаете, в чем их отличия?
  18. Что такое “итерация цикла”?
  19. Какие параметры имеет цикл for, можно ли их не задать?
  20. Какой оператор используется для немедленной остановки цикла?
  21. Какой оператор используется для перехода к следующей итерации цикла?
  22. Что такое массив?
  23. Какие виды массивов вы знаете?
  24. Что вы знаете о классах оболочках?
  25. Что такое автоупаковка (boxing/unboxing)?
к оглавлению
2. ООП (перейти в раздел)
  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. Что такое volatile и transient? Для чего и в каких случаях можно было бы использовать default?
  57. Расширение модификаторов при наследовании, переопределении и сокрытии методов. Если у класса-родителя есть метод, объявленный как private, может ли наследник расширить его видимость? А если protected? А сузить видимость?
  58. Имеет ли смысл объявлять метод private final?
  59. Какие особенности инициализации final переменных?
  60. Что будет, если единственный конструктор класса объявлен как final?
  61. Что такое finalize? Зачем он нужен? Что Вы можете рассказать о сборщике мусора и алгоритмах его работы.
  62. Почему метод clone объявлен как protected? Что необходимо для реализации клонирования?
  63. Знакомы ли Вам какие-либо паттерны проектирования?
  64. Напишите Singleton… А с ленивой загрузкой. А если он должен быть потоко-безопасным? А в каких случаях ленивая загрузка хуже?
  65. Что можете сказать про MVC? Нарисуйте диаграмму и объясните, как MVC работает.
  66. Напишите функцию вычисления факториала.
  67. Дана функция вычисления чисел Фибоначчи, известно, что она работает. Найдите логическую ошибку. Оцените сложность получившегося алгоритма.
к оглавлению
3. Исключения (перейти в раздел)
  1. Дайте определение понятию “исключение”
  2. Какова иерархия исключений.
  3. Можно/нужно ли обрабатывать ошибки jvm?
  4. Какие существуют способы обработки исключений?
  5. О чем говорит ключевое слово throws?
  6. В чем особенность блока finally? Всегда ли он исполняется?
  7. Может ли не быть ни одного блока catch при отлавливании исключений?
  8. Могли бы вы придумать ситуацию, когда блок finally не будет выполнен?
  9. Может ли один блок catch отлавливать несколько исключений (с одной и разных веток наследований)?
  10. Что вы знаете об обрабатываемых и не обрабатываемых (checked/unchecked) исключениях?
  11. В чем особенность RuntimeException?
  12. Как написать собственное (“пользовательское”) исключение? Какими мотивами вы будете руководствоваться при выборе типа исключения: checked/unchecked?
  13. Какой оператор позволяет принудительно выбросить исключение?
  14. Есть ли дополнительные условия к методу, который потенциально может выбросить исключение?
  15. Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?
  16. Если оператор return содержится и в блоке catch и в finally, какой из них “главнее”?
  17. Что вы знаете о OutOfMemoryError?
  18. Что вы знаете о SQLException? К какому типу checked или unchecked оно относится, почему?
  19. Что такое Error? В каком случае используется Error. Приведите пример Error’а.
  20. Какая конструкция используется в Java для обработки исключений?
  21. Предположим, есть блок try-finally. В блоке try возникло исключение и выполнение переместилось в блок finally. В блоке finally тоже возникло исключение. Какое из двух исключений “выпадет” из блока try-finally? Что случится со вторым исключением?
  22. Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?
к оглавлению
4. Коллекции (перейти в раздел)
  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. Как получить не модифицируемую коллекцию?
  23. Какие коллекции синхронизированы?
  24. Как получить синхронизированную коллекцию из не синхронизированной?
  25. Как получить коллекцию только для чтения?
  26. Почему Map не наследуется от Collection?
  27. В чем разница между Iterator и Enumeration?
  28. Как реализован цикл foreach?
  29. Почему нет метода iterator.add() чтобы добавить элементы в коллекцию?
  30. Почему в классе iterator нет метода для получения следующего элемента без передвижения курсора?
  31. В чем разница между Iterator и ListIterator?
  32. Какие есть способы перебора всех элементов List?
  33. В чем разница между fail-safe и fail-fast свойствами?
  34. Что делать, чтобы не возникло исключение ConcurrentModificationException?
  35. Что такое стек и очередь, расскажите в чем их отличия?
  36. В чем разница между интерфейсами Comparable и Comparator?
  37. Почему коллекции не наследуют интерфейсы Cloneable и Serializable?
к оглавлению
5. Строки (перейти в раздел)
  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?
  22. Почему строка неизменная и финализированная в Java?
  23. Почему массив символов предпочтительнее строки для хранения пароля?
  24. Почему строка является популярным ключом в HashMap в Java?
  25. Напишите метод удаления данного символа из строки.
к оглавлению
6. Потоки ввода/вывода (перейти в раздел)
  1. Какие существуют виды потоков ввода/вывода?
  2. Назовите основные предки потоков ввода/вывода.
  3. Что общего и чем отличаются следующие потоки: InputStream, OutputStream, Reader, Writer?
  4. Что вы знаете о RandomAccessFile?
  5. Какие есть режимы доступа к файлу?
  6. В каких пакетах лежат классы-потоки?
  7. Что вы знаете о классах-надстройках?
  8. Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных?
  9. Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера?
  10. Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
  11. Какой класс предназначен для работы с элементами файловой системы (ЭФС)?
  12. Какой символ является разделителем при указании пути к ЭФС?
  13. Как выбрать все ЭФС определенного каталога по критерию (например, с определенным расширением)?
  14. Что вы знаете об интерфейсе FilenameFilter?
  15. Что такое сериализация?
  16. Какие условия “благополучной” сериализации объекта?
  17. Какие классы позволяют архивировать объекты?
к оглавлению
7. Потоки выполнения/многопоточность (перейти в раздел)
  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. Модификаторы volatile и метод yield().
  31. Пакет java.util.concurrent
  32. Есть некоторый метод, который исполняет операцию i++. Переменная i типа int. Предполагается, что код будет исполнятся в многопоточной среде. Следует ли синхронизировать блок?
  33. Что используется в качестве mutex, если метод объявлен static synchronized? Можно ли создавать новые экземпляры класса, пока выполняется static synchronized метод?
  34. Предположим в методе run возник RuntimeException, который не был пойман. Что случится с потоком? Есть ли способ узнать о том, что Exception произошел (не заключая все тело run в блок try-catch)? Есть ли способ восстановить работу потока после того как это произошло?
  35. Какие стандартные инструменты Java вы бы использовали для реализации пула потоков?
  36. Что такое ThreadGroup и зачем он нужен?
  37. Что такое ThreadPool и зачем он нужен?
  38. Что такое ThreadPoolExecutor и зачем он нужен?
  39. Что такое «атомарные типы» в Java?
  40. Зачем нужен класс ThreadLocal?
  41. Что такое Executor?
  42. Что такое ExecutorService?
  43. Зачем нужен ScheduledExecutorService?
к оглавлению
Этот список из 300+ вопросов (без ответов) был найден на сайте http://becomejavasenior.com/ . Там же указаны другие авторы.
206

101973 Total Views 131 Views Today

Views: 66 418

Топ 30 вопросов для дистанционного собеседования – Программирование на Java

Иногда собеседования проводятся удалённо – по скайпу, используя программу Zoom или по телефону. Удалённое собеседование имеет свои нюансы – обычно, собеседуя на позицию Java Developer, вас не будут грузить слишком сложными вопросами и заковыристыми нюансами, которые можно знать лишь имея богатый опыт в работе с Java. В данной статье мы собрали наиболее распространённые вопросы на собеседовании, которое проводится по телефону или скайпу.

Почему в Java класс String неизменный?

String объявлен immutable (неизменяемым) из-за соображений переиспользования констант в пуле строк и в целях безопасности

Может ли абстрактный класс иметь конструктор?

Да, у абстрактного класса могут быть конструкторы

Какие методы определены в классе Object и должны быть переопределены в наследнике для использования в HashMap?

Методы equals и hashCode

В чём разница между методами sleep и wait?

Метод wait снимает блокировку с объекта, в отличие от метода sleep

В чём отличие List от Set в Java?

Элементы, помещённые в List, упорядочены и индексированы. List допускает дублирование элементов. Set не является упорядоченной коллекцией и не хранит дубли

Как в Java сделать класс неизменным (immutable)?

Объявить класс с модификатором final, сделать все поля класса final, изменять состояние только в конструкторе, копировать данные для изменных (mutable) полей

Наиболее подходящие классы для работы с деньгами?

Long (long) и BigDecimal. Класс double не годится из-за округления и плавающей точки

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

На практике наиболее важное различие между интерфейсом и абстрактным классом в Java состоит в том, что Java не поддерживает множественное наследование с помощью классов. Зато вы можете реализовывать в одном классе несколько интерфейсов. Также, раньше нельзя было реализовывать методы в интерфейсах (default methods появились в Java 8)

В чём различие между HashMap и Hashtable?

Hashtable – потокобезопасная (thread safe) коллекция и, как следствие, медленнее. HashMap не является потокобезопасным классом. А ещё Hashtable не позволяет хранить null в качестве ключа, а HashMap даёт такую возможность.

В чём различие между ArrayList и LinkedList?

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

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

Чем отличаются перегрузка (overloading) и переопределение (overriding) методов?

  • Overloading: перегрузка методов это создание нескольких методов с одним и тем же названием, но с разными сигнатурами
  • Overriding: переопределение методов это определение метода, изначально определённого в классе-родителе, в классе-потомке

Назовите типы данных в Java

В Java существует два основных типа данных:

  • Примитивные типы: int, long, float, double, short, byte, char, boolean
  • Сылочные типы: классы, интерфейсы, массивы, переменные типов

Назовите различия между checked и unchecked исключениями

  • Checked exceptions (проверяемые исключения): исключения, которые проверяются на этапе компиляции. Они должны оборачиваться в try-catch/try-finally блоки.
    Эти исключения наследуются от класса Exception.
    Примеры chechked исключений: IOEception, SQLException
  • Unchecked exceptions (непроверяемые исключение): исключения, которые не проверяются компилятором, но могут быть словлены в блоке try-catch/try-finally. Эти исключения наследуются от RuntimeException. Примеры таких исключений: NullPointerException, IllegalArgumentException

Являются ли массивы в Java экземплярами Object?

Да, массивы в Java – объекты. Это одно из ярких отличий Java от C++: массивы в Java имеют все методы класса Object и дополнительное неизменное свойство length – длина массива.

Может ли список List<Number> содержать в себе объекты типа Integer?

Да, так как Integer это подкласс от Number.

Можно ли передать в метод, принимающий параметр типа List<Number>, передать аргумент типа ArrayList<Number>?

Да, так как ArrayList<Number> является потомком типа List<Number>

Можно ли в метод, принимающий параметр типа List<Number>, передать аргумент типа ArrayList<Integer>?

Нет, так как ArrayList<Integer> не является потомком типа List<Number>. Но используя wildcards, можно этого добиться. Если изменить метод на приём параметра типа List<? extends Number>, в него можно будет передать аргумент типа ArrayList<Integer>

Что такое volatile переменная?

Ключевое слово volatile используется для переменных, которые могут читаться и изменяться разными потоками. Volatile гарантирует отношение happens-before

В чём разница между CountDownLatch и CyclicBarrier?

Оба класса впервые появились в Java 5. Основное их предназначение – ожидание завершения работы нескольких потоков. Ключевое отличие между ними в том, что CountDownLatch не может быть переиспользован после того, как счётчик достиг нуля (затворка сработала).

Является ли класс BlockingQueue потокобезопасным?

Да, методы put() и take() класса BlockingQueue являются потокобезопасными.

Для каких задач методы wait и notify вызывают в цикле?

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

В чём отличие между вызовами методов «abc».equals(str) и str.equals(«abc»)?

Вызов «abc».equals(str) гарантирует, что вызов метода equals будет осуществлён на существующем объекте «abc». Вызов str.equals(«abc») потенциально может выбросить исключение NullPointerException, так как переменная str может быть null

Что такое интерфейс-маркер?

Интерфейс-маркер / marker interface / tag interface – интерфейс, присутствие которого особым образом интерпретируется компилятором или JVM. Стоить отметить, что аннотации, появившиеся в Java 5, лучше подходят для этой задачи. Примеры интерфейсов-маркеров: Serializable, Cloneable

В чём разница между интерфейсами Serializable и Externalizable?

Интерфейс Externalizable даёт больше контроля над процессом сериализации и позволяет вам использовать собственный бинарный формат для ваших объектов.

Может ли тип Enum (перечисление) реализовывать интерфейс?

Да

Может ли тип Enum расширять класс?

Нет, так как Java позволяет наследоваться только от одного предка, а enum по умолчанию расширяет класс java.lang.Enum

Как предотвратить класс от наследования?

Можно объявить класс с модификатором final или объявить конструктор с модификатором private.

Возможно ли переопределение (overriding) статических методов?

Нет

Какие паттерны программирования вы знаете?

Наиболее распространёнными паттернами (шаблонами) программирования являются Singleton, Builder, Factory.

Чем различаются классы StringBuffer и StringBuilder?

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

Подборка психологических и нетипичных технических вопросов с собеседований Java-разработчика

Как и у всех разработчиков, у меня настал период затишья. Проект подходил к концу, задач практически не было, хотелось выше зарплату, ну и пошла получать свой заветный job offer.

Так вышло, что некоторые собеседования занимали 2-3 этапа, и я накопила парад вопросов, которыми спешу с Вами поделиться.

Психологические вопросы

Представители отдела кадров и не IT-руководители качественно выполняют свою работу и тоже хотят тебя о чем-нибудь спросить, но некоторые из них удивляют меня все больше и больше. Руководитель одной из контор устроил мне даже блиц-опрос с таймером. Если раньше обходились двумя вопросами: “Кем Вы видите себя через 5 лет?” и “Что Вас не устраивает на старом месте работы? Сейчас же, все вокруг только и говорят, что о психологии, вот и появляются подобные вопросы.

Мои любимые, простенькие короткие вопросики:
— “Вы конфликтный человек?”
— “Допустим у Вас конфликт, как вы будете его решать?”
— “Если в pull-request вы не согласны с коллегой, какие Ваши действия?”
— “Как часто вы пьете чай на рабочем месте?”
— “Как вы решаете споры в команде?”
— “Опишите работу вашей мечты”
— “Опишите рабочее место Вашей мечты”
— “Если бы вы выиграли в лотерею кругосветное путешествие длиной в год. Какова вероятность, что после приезда вы пойдете на прежнее место работы?”

Однажды мне прислали психологический тест, состоящий из 2 частей в общей сложности на 300 вопросов, потому что: «Данная вакансия предполагает конкурсный отбор в 3 этапа — 2 тестирования по электронной почте (психологическое и профессиональное) и собеседование (очное или скайп, как вам удобно)»

Естественно все 300 вопросов я описывать здесь не буду, предоставлю просто ссылочку на репозиторий с этими тестами (тесты). Но прикреплю тут Вам некоторые вопросы.

Первый тест. Выбрать вариант ответа
  1. Моя память не меняется заметно со дня на день:
    а) верно
    б) не уверен
    в) неверно
  2. Даже в обществе знакомых людей меня иногда охватывает чувство одиночества и ненужности никому:
    а) верно
    б) нечто среднее
    в) неверно
  3. Я испытываю беспокойство, как будто я что-то хочу, но не знаю, что:
    а) очень редко
    б) иногда
    в) часто
  4. Если бы я держал в руках заряженное ружье, то чувствовал бы себя нервозно до тех пор, пока не разрядил бы его:
    а) верно
    б) нечто среднее
    в) неверно
  5. Слово «собака» так относится к слову «кость», как слово «корова» к слову:
    а) молоко
    б) трава
    в) соль
  6. Разыскивая какое-либо место в чужом городе, я:
    а) просто спрашиваю у людей, где это место
    б) бывает по-разному
    в) беру с собой карту и ищу это место сам
  7. Если я собираюсь на поезд или на самолет, то становлюсь несколько возбужденным, напряженным и тревожным, даже если знаю, что у меня еще есть время:
    а) верно
    б) бывает по-разному
    в) неверно
  8. Я считаю, что люди должны хорошо подумать, прежде чем осуждать мудрость прошлых поколений:
    а) верно
    б) не уверен
    в) неверно
  9. Я всегда очень старательно контролирую, в каком состоянии возвращаю людям вещи, взятые на время, и в каком они их возвращают мне:
    а) верно
    б) бывает по-разному
    в) неверно
  10. Шутки на тему смерти в разговоре вполне допустимы и приличны:
    а) верно
    б) не уверен
    в) неверно
  11. Способности и черты характера, унаследованные от родителей, являются более существенными, чем это признают многие люди:
    а) верно
    б) не имею определенного мнения
    в) неверно
  12. Если бы я мог свою жизнь начать сначала:
    а) я хотел бы ее спланировать иначе
    б) не имею определенного мнения
    в) в основном я хотел бы прожить ее так же
  13. Мне доставляет удовольствие отпускать беззлобные шуточки, которые никому не приносят серьезного вреда:
    а) верно
    б) бывает по-разному
    в) неверно
  14. Я переживаю, если кто-то думает обо мне плохо:
    а) едва ли
    б) возможно
    в) весьма вероятно
  15. Бывает, что все утро и значительную часть дня у меня не возникает желания с кем-нибудь пообщаться:
    а) никогда
    б) иногда
    в) часто


Второй тест. Выбрать Да/Нет
  1. Вы все чувствуете острее, чем большинство других людей?
  2. Иногда Вы с удовольствием слушаете неприличные анекдоты?
  3. В Вашей жизни были случаи (может быть, только один), когда Вы чувствовали, что на Вас кто-то воздействует гипнозом?
  4. Иногда без причины (или даже при неприятностях) у Вас бывает приподнятое настроение, чувство радости?
  5. Вам часто случалось подчиняться родителям, даже если Вы считали, что они неправы?
  6. Большую часть времени Вы чувствуете общую слабость?
  7. Обычно Вы удовлетворены своей судьбой?
  8. У Вас такое впечатление, что Вас никто не понимает?
  9. У Вас бывает чувство, что трудностей так много, что преодолеть их невозможно?
  10. У Вас редко болит голова?
  11. У Вас более чем достаточно причин для беспокойства.
  12. Обычно Вы осторожны с людьми, которые относятся к Вам дружелюбнее, чем Вы ожидали.
  13. Вам приятно иметь значительных людей среди своих знакомых, потому что это увеличивает Ваш престиж.
  14. Вам неловко входить в комнату, где уже собрались и разговаривают люди.
  15. У Вас бывают периоды, во время которых Вы необычайно веселы без особой причины.


На одном из интервью мне устроили вечеринку вопросов.
Чтобы легче было воспринимать диалог введем обозначения: Разработчик (Р) и Кадровик (К)

Вопрос № 1
К: Ночь, трасса, остановка. На остановке стоит мужчина твоей мечты, друг, старушка. Ты едешь на двухместной машине и можешь взять всего лишь одного человека. Твои действия?
Р: Заберу друга
К: Хорошо, а теперь представь, что мы “Out of Box”. Твои действия?
Р: Что Вы понимаете под “Out of Box”?
K: Давай представим, что ты программист, как бы ты действовала?

(Тут у меня был пинг секунд так на 30)

Р: Посмотрю свойства объектов и решу, что с ними делать

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

Вопрос № 2
K: У тебя есть друзья?
Р: Ну да
К: Сколько у тебя друзей?
Р: Близких или не очень?
К: Близких
Р: Допустим 3
К: Назови их Имя и Фамилию

(Кадровик берет листок и готовится писать под диктовку)

Р: Листкова Марина, Костенко Артем, Мартынова Дарья
К: Я встретила на улице Листкову Марину, что она мне скажет о тебе?
Р: ЭЭЭ, что?
К: Назови три своих качества, которые Марина может о тебе сказать?
Р: Ответственность, усидчивость, коммуникабельность
К: Я встретила на улице Костенко Артема, что он мне скажет о тебе?
Р: Мммм, Ответственность, усидчивость, коммуникабельность
К: Я встретила на улице Мартынову Дарью, что она мне скажет о тебе?
Р: Пускай будет тоже самое

(Hr все записал на листочке и сразу следом полетел Всеми любимый нами вопрос)

K: Кем вы видите себя через 5 лет?
Р: Лидом
К: Как вы можете быть лидом, если Ваши друзья не назвали ни одного качества лидера?
(Дальше додумывайте сами, что бы вы ответили. Но подход был очень интересный)

Вопрос № 3
К: Сколько ты хочешь по зарплате?
Р: N-сумма
K: А если я тебе буду платить не каждый месяц, а в конце проекта N+R сумму?
Р: N+R будет меньше, чем если я каждый месяц буду получать по N.
K: Хорошо, а если я тебе еще добавлю?
Р: Если сумма в конце, будет выше чем месячная за этот же период, то соглашусь.
К: То есть вы работаете за деньги?

(Интересно то как =) )

Технические вопросы

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

70% вопросов и задачек, которые представлены в ссылках выше, как раз задают на собеседованиях ( Я говорю про core ). Но пока я общалась с разными лидам, смогла выделить парочку, которые показались мне где-то интересными, а где-то странными.
Однажды мне попался человек, который спросил: “Чем heap отличается от кучи?” и на полном серьезе смотрел на меня и ждал ответа.

Перечень вопросов:
1. Спрашивать про отличие LinkedList и ArrayList уже не модно, поэтому наткнулась на новый подход.
Зачем нужен LinkedList в Java, если можно заранее зарезервировать место у ArrayList вначале? (где, 0 – N – места для резерва). (Очень странный вопрос, но лид был из людей, которые «за поговорить»)

2. Зачем в Java нужен HashMap, если я могу написать функцию, которая реализовывает HashMap? (На мой взгляд такие вопросы на собеседовании задавать странно. Зачем структуру данных и алгоритмы мешать в одну кучу)

3. Как сделать так, чтоб из HashMap никогда не получить значение? (Очень хороший вопрос, сразу видно кандидата, который не просто так выучил: “Если переопределили equals, то переопредели и hashCode”)

4. Любимый Exception. Естественно, все хотят, что-нибудь про него спросить. Обычно дают задачки, либо просят рассказать зачем, куда и сколько. Но вот один человек удивил: «Зачем в джаве придумали эти иерархии, если можно просто сделать один?» (Рассказы про логи и распределение его не устроили, так я и не знаю какого ответа человек ожидал)

5. Задачка: Пользователь указывает сколько чисел после запятой он хочет видеть на экране. Функция, которая возвращает нам число, находится во внешнем API и не позволено ее модифицировать. Допустим процесс вычисления при запросе вывода больше 3 символов сильно замедляется. Как реализовать наше приложение?

Забавная задачка, чтоб посмотреть, как рассуждает кандидат. Мне она понравилась)

6. Задачка: В API находятся данные, которые необходимо получить в JAR2. JAR2 не имеет прямого доступа к API, зависимость указана стрелочками, зависимости менять нельзя. Каким способ передать данные от API к JAR2.

Тоже очень хорошая задачка, на рассуждение.

Вывод

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

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

Уточнение: здесь не расшифрован ответ полностью, а лишь предоставляется краткое описание. Развернутую версию ответа тебе придется искать в сети самостоятельно.

На Java пишут только с использованием этой парадигмы. Мысль писать код в процедурном стиле следует откинуть и больше не вспоминать. Идеально, если ты придешь к использованию ООП самостоятельно, понимая его удобство.

Основные принципы ООП – абстракция, наследование, инкапсуляция и полиморфизм. Вместе с наследованием используйте делегацию, композицию и агрегацию. И, пожалуйста, Don’t repeat yourself (DRY)! Подробнее расписано в тематической статье. Также почитай о принципе подстановки Барбары Лисков.

Тут все просто. За счет кроссплатформенности, многопоточности, удобного ООП, элементарного синтаксиса и мощи Sun/Oracle Java стала крутой и популярной. На этом языке написана уйма серверов, крупных проектов и даже микроволновок.

Не поверишь, но в качестве языка для бекенда Java превосходит PHP на голову. На последнем написано довольно мало проектов, не считая CMS. Самые большие системы основаны на Java. Есть jsoup для парсинга HTML, есть RestTemplate для опроса рестов, есть Cucumber и Selenium для имитации действий пользователя в браузере. Плюс ты всегда можешь создать гибридное решение PHP + Java.

Основная проблема большинства новичков – переход от теоретической базы о языках программирования к «Hello World!», а ведь именно основы Java хранят в себе все секреты.

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

JRE (Java Runtime Environment) – это то место, где находится JVM (виртуальная машина), весь запущенный рантайм и загруженные классы, т. е. все, что нужно для работы и функционирования кода.

JVM (Java Virtual Machine) – основная штука, с помощью которой кроссплатформенность в принципе возможна. Все примерно так:

  • написанный код компилируется в байт-код, который может запускаться на этой виртуалке;
  • виртуалка интерпретирует весь код в машинный код для конкретной платформы.

JIT (Just-in-time) – оптимизированная штука от Java, чем-то похожая на precompiled header из C++.

JNA (Java Native Access) – способ из Java вызывать нативный код для решения некоторых задач.

Лучший способ продемонстрировать разницу между этими фичами – раскрыть секреты Java и рассказать, что умеет делать каждый из “конкурсантов”.

Абстрактные классы могут иметь константы и переменные, определенные и объявленные методы с любыми модификаторами доступа.

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

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

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

Статические методы могут вызывать только другие статические методы, умеют обращаться только к статическим переменным и не могут ссылаться на this и super (о них тоже почитай).

Данное ключевое слово может применяться к методам, классам и переменным. Если это:

  1. Класс, то от него нельзя наследоваться.
  2. Метод, то его нельзя переопределять в саб-классах.
  3. Переменная, то это константа.

К примитивам Java относится byte, short, char, int, long, float, double, boolean, а кастомные типы данных (класс String) формируются уже из примитивов. Примитивы несут в себе значение, а не ссылки, как многие заблуждаются. Забегая вперед, можно сказать, что для примитивов юзается стек, а для объектов – куча. Вот такой обширный вопрос. Обязательно разберись:

  • в типах памяти
  • для чего какой тип используется
  • боксинг/анбоксинг
  • классы-обертки

В С++ и С есть понятие чистых указателей и ссылок. В языке Java (являющимся улучшенной версией C++) указатели сделали неявными для упрощения кода. Когда создается объект, то ссылка на объект хранит в себе адрес в памяти того объекта, который был создан с помощью оператора new. Если такую ссылку передать в качестве параметра функции, то в том месте, где она передается, будет создана копия, поэтому передача произойдет по значению. Но данная копия будет ссылаться на тот адрес, на который ссылается и оригинал. Если произвести действия над этой копией, оригинал тоже будет изменен. Это как указатель в C++, только разыменование происходит автоматически и неявно.

Такое поведение работает только в случае с объектами. С примитивами все проще: передав примитив в метод и изменив его там, будет изменяться копия, и это не повлияет на глобальные значения. Это важно!

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

Переопределение позволяет взять какой-то метод родительского класса и написать в каждом классе-наследнике свою реализацию этого метода.

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

Эта тема – ключ к пониманию, как работает полиморфизм.

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

А какие вопросы по Java задавали тебе на собеседовании?

Java собеседование. Коллекции / Хабр

С недавнего времени у меня появилась настойчивая мысль, что профессиональное развитие сильно замедлилось и это хочется как-то исправить. Да, читаю книги, слушаю курсы, но в то же время приходит и понимание того, что возможно пришло время сменить работу, здесь вроде как все изучено, плавно уходим в рутину. Данная мысль сподвигла меня на рассылку своего резюме в несколько компаний — лидеров рынка. После прохождения собеседования в 3 из них, я решил, как водится внести свои 5 копеек в освещение обширной темы собеседования, а именно технических вопросов по Java коллекциям, с которыми приходится сталкиваться. Да, знаю, читатель скажет: «коллекции — избитая тема, сколько можно», но часть из приведенных ниже вопросов, я задавал своим знакомым разработчикам, которые занимают именно позиции разработчиков («крепких середнячков», по меркам недалекой от Москвы глубинки, которые уверенно справляются со своей работой на практике, а вот в теории скажем так есть пробелы, потому, что работа не требует решения каких-то нетривиальных задач, да и потому что не всем это интересно — изучать как внутри работает структура данных), вызывало растерянность. Думаю, что рассмотренный материал будет не очень интересен разработчикам выше уровня Junior (я попрошу их комментировать, дополнять и критиковать изложенный здесь материал), а вот Junior`ы уверен, найдут в этой статье интересное для себя.

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

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

1. Чем отличается ArrayList от LinkedList?

В моем рейтинге это один из двух самых популярных вопросов о коллекции, задают в 90% случаев. Вызвал у меня проблему на моем первом собеседовании на Junior Developer`а. Вкратце ответ на этот вопрос сводится к следующему: ArrayList это список, реализованный на основе массива, а LinkedList — это классический связный список, основанный на объектах с ссылками между ними.

Преимущества ArrayList: в возможности доступа к произвольному элементу по индексу за постоянное время (так как это массив), минимум накладных расходов при хранении такого списка, вставка в конец списка в среднем производится так же за постоянное время. В среднем потому, что массив имеет определенный начальный размер n (в коде это параметр capacity), по умолчанию n = 10, при записи n+1 элемента, будет создан новый массив размером (n * 3) / 2 + 1, в него будут помещены все элементы из старого массива + новый, добавляемый элемент. В итоге получаем, что при добавлении элемента при необходимости расширения массива, время добавления будет значительно больше, нежели при записи элемента в готовую пустую ячейку. Тем не менее, в среднем время вставки элемента в конец списка является постоянным. Удаление последнего элемента происходит за константное время. Недостатки ArrayList проявляются при вставке/удалении элемента в середине списка — это взывает перезапись всех элементов размещенных «правее» в списке на одну позицию влево, кроме того, при удалении элементов размер массива не уменьшается, до явного вызова метода trimToSize().

LinkedList наоборот, за постоянное время может выполнять вставку/удаление элементов в списке (именно вставку и удаление, поиск позиции вставки и удаления сюда не входит). Доступ к произвольному элементу осуществляется за линейное время (но доступ к первому и последнему элементу списка всегда осуществляется за константное время — ссылки постоянно хранятся на первый и последний, так что добавление элемента в конец списка вовсе не значит, что придется перебирать весь список в поисках последнего элемента). В целом же, LinkedList в абсолютных величинах проигрывает ArrayList и по потребляемой памяти и по скорости выполнения операций. LinkedList предпочтительно применять, когда происходит активная работа (вставка/удаление) с серединой списка или в случаях, когда необходимо гарантированное время добавления элемента в список.

Для углубленного и в то же время экспресс обучения очень рекомендую к прочтению замечательные статьи tarzan82 о ArrayList и LinkedList. Так же порекомендую статью от lany о потреблении памяти коллекциями — очень познавательно.

2. Что вы обычно используете (ArrayList или LinkedList)? Почему?

Это вопрос является слегка замаскированной версией предыдущего, так как ответ на этот вопрос приведет к постепенному изложению ответа на предыдущей вопрос. В 90% случае ArrayList будет быстрее и экономичнее LinkedList, так что обычно используют ArrayList, но тем не менее всегда есть 10% случаев для LinkedList. Я говорю, что обычно ArrayList использую, ссылаясь на тесты и последний абзац из предыдущего вопроса, но не забываю и про LinkedList (в каких случаях? так же последний абзац предыдущего вопроса помогает).

3. Что быстрее работает ArrayList или LinkedList?

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

4. Необходимо добавить 1млн. элемент, какую структуру вы используете?

Тоже довольно популярная скрытая версия первого вопроса. Так же постановка предполагает выбор одного из предложенных вариантов, хотя на самом деле информации для однозначного выбора нет. Нужно задавать дополнительные вопросы: в какую часть списка происходит добавление элементов? есть ли информация о том, что потом будет происходить с элементами списка? какие то ограничения по памяти или скорости выполнения? В целом, все тот же первый вопрос, но немного с другой стороны: вы через дополнительные вопросы, показываете глубину понимания работы Array и Linked List.
Однажды я сам «клюнул» на этот крючок, домыслив про себя, что добавить — это «вставить» в конец списка и усиленно продвигал ArrayList, хотя ничего не знал (и не пытался узнать) про дальнейшие действие с этим списком и возможные ограничения.

5. Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?

Опять же, ответ на вопрос 1 содержит ответ и на этот вопрос. При удалении произвольного элемента из списка, все элементы находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость, capacity) не изменяется никак. Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой trimToSize().

6. Предложите эффективный алгоритм удаления нескольких рядом стоящих элементов из середины списка, реализуемого ArrayList.

Неизбитый, по моим меркам вопрос, встречался мне всего однажды, когда я не знал механизма удаления элементов из ArrayList. В итоге вызвал у меня серьезные затруднения. На самом деле все довольно просто и очевидно, когда знаешь как происходит удаление одного элемента. Допустим нужно удалить n элементов с позиции m в списке. Вместо выполнения удаления одного элемента n раз (каждый раз смещая на 1 позицию элементы, стоящие «правее» в списке), нужно выполнить смещение всех элементов, стоящих «правее» n+m позиции на n элементов левее к началу списка. Таким образом, вместо выполнения n итераций перемещения элементов списка, все выполняется за 1 проход.

7. Как устроена HashMap?

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

Вкратце, HashMap состоит из «корзин» (bucket`ов). С технической точки зрения «корзины» — это элементы массива, которые хранят ссылки на списки элементов. При добавлении новой пары ключ-значение, вычисляет хеш-код ключа, на основании которого вычисляется номер корзины (номер ячейки массива), в которую попадет новый элемент. Если корзина пустая, то в нее сохраняется ссылка на вновь добавляемый элемент, если же там уже есть элемент, то происходит последовательный переход по ссылкам между элементами в цепочке, в поисках последнего элемента, от которого и ставится ссылка на вновь добавленный элемент. Если в списке был найден элемент с таким же ключом, то он заменяется. Добавление, поиск и удаление элементов выполняется за константное время. Вроде все здорово, с одной оговоркой, хеш-функций должна равномерно распределять элементы по корзинам, в этом случае временная сложность для этих 3 операций будет не ниже lg N, а в среднем случае как раз константное время.

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

Опять же, рекомендую к прочтению статью tarzan82 по HashMap.

8. Какое начальное количество корзин в HashMap?

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

Ответ здесь — 16. Отвечая, стоит заметить, что можно используя конструкторы с параметрами: через параметр capacity задавать свое начальное количество корзин.

9. Какая оценка временной сложности выборки элемента из HashMap? Гарантирует ли HashMap указанную сложность выборки элемента?

Ответ на первую часть вопроса, можно найти в ответе на вопрос 7 — константное время необходимо для выборки элемента. Вот на второй части вопроса, я недавно растерялся. И устройство HashMap знал и про хеш-функцию тоже знал, а вот к такому вопросу не был готов, в уме кинулся вообще в другом направлении и сосредоточился на строении HashMap откинув проблему хеш-кода, который в голове всегда привык считать хеш-кодом с равномерным распределением. На самом деле ответ довольно простой и следует из ответа вопроса 7.

Если вы возьмете хеш-функцию, которая постоянно будет возвращать одно и то же значение, то HashMap превратится в связный список, с отвратной производительностью. Затем даже, если вы будете использовать хеш-функцию с равномерным распределением, в предельном случае гарантироваться будет только временная сложность lg N. Так что, ответ на вторую часть вопроса — нет, не гарантируется.

10. Роль equals и hashCode в HashMap?

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

11. Максимальное число значений hashCode()?

Здесь все довольно просто, достаточно вспомнить сигнатуру метода: int hashCode(). То есть число значений равно диапазону типа int — 2^32 (точного диапазона никогда не спрашивали, хватало такого ответа).

12. Как и когда происходит увеличение количества корзин в HashMap?

Вот это довольно тонкий вопрос. Как показал мой мини-опрос, если суть устройства HashMap себе представляют многие более-менее ясно, то этот вопрос часто ставил собеседника в тупик.

Помимо capacity в HashMap есть еще параметр loadFactor, на основании которого, вычисляется предельное количество занятых корзин (capacity*loadFactor). По умолчанию loadFactor = 0,75. По достижению предельного значения, число корзин увеличивается в 2 раза. Для всех хранимых элементов вычисляется новое «местоположение» с учетом нового числа корзин.

13. В каком случае может быть потерян элемент в HashMap?

Этот интересный вопрос мне прислал LeoCcoder, у меня подобного не спрашивали и честно признаюсь, после прочтения сходу не смог придумать сценарий для потери элемента. Все опять же оказалось довольно просто, хоть и не так явно: допустим в качестве ключа используется не примитив, а объект с несколькими полями. После добавления элемента в HashMap у объекта, который выступает в качестве ключа, изменяют одно поле, которое участвует в вычислении хеш-кода. В результате при попытке найти данный элемент по исходному ключу, будет происходить обращение к правильной корзине, а вот equals (ведь equals и hashCode должны работать с одним и тем же набором полей) уже не найдет указанный ключ в списке элементов. Тем не менее, даже если equals реализован таким образом, что изменение данного поля объекта не влияет на результат, то после увеличения размера корзин и пересчета хеш-кодов элементов, указанный элемент, с измененным значением поля, с большой долей вероятности попадет совсем в другую корзину и тогда он уже совсем потеряется.

14. Почему нельзя использовать byte[] в качестве ключа в HashMap?

Еще один вопрос от LeoCcoder. Как обычно, все оказалось довольно просто — хеш-код массива не зависит от хранимых в нем элементов, а присваивается при создании массива (метод вычисления хеш-кода массива не переопределен и вычисляется по стандартному Object.hashCode() на основании адреса массива). Так же у массивов не переопределен equals и выполняет сравнение указателей. Это приводит к тому, что обратиться к сохраненному с ключом-массивом элементу не получится при использовании другого массива такого же размера и с такими же элементами, доступ можно осуществить лишь в одном случае — при использовании той же самой ссылки на массив, что использовалась для сохранения элемента. За ответ на этот вопрос отдельная благодарность уходит пользователю @dark_dimius.

15. В чем отличия TreeSet и HashSet?

Начнем с того, что Set — это множество (так же называют «набором»). Set не допускает хранение двух одинаковых элементов. Формально говоря, термин «множество» и так обозначает совокупность различных элементов, очень важно, что именно различных элементов, так как это главное свойство Set. С учетом такого определения, пояснение про хранение одинаковых элементом не требуется, но в обиходе, понятие «множество» потеряло свой строгий смысл касательно уникальности элементов, входящих в него, поэтому все же уточняйте отдельно данное свойство множества.

TreeSet обеспечивает упорядоченно хранение элементов в виде красно-черного дерева. Сложность выполнения основных операций в TreeSet lg N. HashSet использует для хранения элементов такой же подход, что и HashMap, за тем отличием, что в HashSet в качестве ключа выступает сам элемент, кроме того HashSet (как и HashMap) не поддерживает упорядоченное хранение элементов и обеспечивает временную сложность выполнения операций аналогично HashMap.

16. Устройство TreeSet?

Этот вопрос задают вместо вопроса 14 и здесь достаточно краткого ответа, что TreeSet основан на красно-черном дереве. Как правило этого хватает и собеседник сразу переходит к следующему вопросу, у меня ни разу не спрашивали механизм балансировки дерева или другие подробности его реализации.

Для экспресс углубления знаний по красно-черному дереву рекомендую вот эту статью.

17. Что будет, если добавлять элементы в TreeSet по возрастанию?

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

Если нет точного представления об устройстве TreeSet, а есть общее понимание о том, что это бинарное дерево (в чем нас дополнительно уверяет собеседник), то данный вопрос может привести к интересному результату: все элементы после доабвления в обычное бинарное дерево будут находится в одной ветви длиной N элементов, что сводит на нет, все преимущества такой структуры, как дерево (фактически получается список). На самом, деле, как выше упоминалось в основе TreeSet лежит красно-черное дерево, которое умеет само себя балансировать. В итоге, TreeSet все равно в каком порядке вы добавляете в него элементы, преимущества этой структуры данных будут сохраняться.

Заключение

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

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

План подготовки к собеседованию на позицию Java разработчика / Хабр

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

И я намеренно не пишу, для кого предназначен этот план подготовки: для senior, middle или junior разработчика — все зависит от конкретной вакансии и от требований работодателя. Поэтому опирайтесь на этот план, но фильтруйте и в то же время не воспринимайте его как исчерпывающее руководство.

  1. Java core. Здесь можно ориентироваться например на книгу «OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide: Exam 1Z0-809» для подготовки к Java сертификации уровня Professional. Есть подобная книга «OCA: Oracle Certified Associate Java SE 8 Programmer I Study Guide: Exam 1Z0-808» для уровня Associate — на нее тоже можно взглянуть. Пройдитесь по оглавлению и выделите для себя, что можно повторить. Конечно же, не стоит пускаться во все тяжкие и читать книгу от корки до корки — многие темы из этой книги можно обойти стороной, например форматирование дат. Выделите самое основное. Например для меня это были следующие темы: коллекции (стандартные вопросы «Как устроена HashMap?» или «Чем отличается LinkedList от ArrayList?» все также часто задают на собеседованиях), дженерики, функциональные интерфейсы, многопоточность (тут тоже фильтруйте — не нужны вам cyclic barrier и fork join framework).
    Также не забывайте проецировать знания на свой опыт. Например, когда вам приходилось использовать многопоточное программирование? Какие проблемы вы решали? Какие блокировки использовали?
  2. Многопоточность. Я все-таки выделю эту тему в отдельный пункт — так как в книге выше не объясняется, что такое volatile, locks и wait/notify. Если не работали с многопоточным программированием ранее — так честно и говорите на собеседовании. Но некоторые вещи, которые например были перечислены выше, было бы неплохо знать хотя бы в теории (тем более вопрос «Что такое volatile?» был у меня почти на каждом собеседовании).
  3. Алгоритмы. Эта тема актуальна не только для java разработчиков. Маловероятно, что вас попросят написать какой-нибудь алгоритм сортировки. Интервьюеру не интересно узнать, как замечательно вы заучили код сортировки слиянием (скорее всего он просто попросит рассказать общий принцип). Но решить алгоритмическую задачу, оценить сложность своего решения или например объяснить на словах принцип поиска в глубину — вполне возможный вариант.
  4. Структуры данных. Чем дерево отличается от графа? Что такое АВЛ деревья? Чем стек отличается от очереди?
    Касаемо java: какие классы в java реализуют стек или очередь? Чем LinkedList отличается от ArrayList? Что такое HashSet? Чем он отличается от TreeSet? Как работает HashMap?
    Эти и подобные вопросы с большой долей вероятности могут быть на интервью. Но стоит заметить, что вопросы про деревья и графы гораздо реже фигурируют на собеседовании — эти структуры на практике используются не так часто. От вас скорее ожидают хорошие знания того, что вы использовали ранее. Не знаете или не использовали красно-черное дерево? Так и скажите, вы не можете знать все.
  5. Базы данных. Реляционные и нереляционные. В чем разница? Что и когда использовать?
    Если говорить о реляционных, то повторите все объекты таких баз данных: таблицы, представления, индексы. Повторите sql — как строится запрос, какие виды join-ов существуют, чем having отличается от where. Также отдельно повторите транзакции — уровни изоляции, свойства ACID. Вспомните, были ли у вас в практике случаи оптимизации запросов? Приходилось ли смотреть план выполнения запроса?
    Также не забудьте повторить jpa (если эта спецификация требуется в вакансии). Что такое entity manager? Что такое persistence context? И прочее, с чем приходилось сталкиваться.
  6. Фреймворки. Какие именно фреймворки нужно повторить — зависит от конкретной вакансии. В большинстве случаев требуется Spring. Тогда не забудьте повторить, как вообще работает Spring, этапы инициализации бина. Вспомните, какие Spring фреймворки вы использовали (например Spring mvc, Spring security, Spring data) и для чего. Повторите основные аннотации (не забудьте про Qualifier, Primary и Conditional — о них любят спрашивать особенно часто). И не забудьте про bean scopes.
    Отдельно хочу коснуться аннотации Transactional. Как она работает? Что в ней можно дополнительно настроить?
  7. Устройство Jvm. Что такое куча и стек? Как хранятся объекты в jvm? Что такое string pool? Что обеспечивает принцип happens before? Как работает сборщик мусора? Повторите по возможности — лишним не будет.
  8. Паттерны. Не надо загоняться — никто не потребует перечислять все существующие паттерны. Но некоторые, используемые в Java или Spring, знать надо (например Immutable, Singleton, Prototype, Builder, Proxy, Abstract factory, Wrapper).
  9. Алгоритмические задачки. Часто на собеседованиях просят решить ту или иную задачку. Иногда на листочке, иногда на доске, иногда на конкретном сайте, если это скайп интервью. Будьте готовы что код придется писать без использования любимой среды разработки. Также попрактикуйтесь решать задачки, например на Leetcode.
  10. Сети. Повторите уровни модели OSI. И не забудьте чуть более подробно повторить основные протоколы: tcp, udp, http, https.
  11. Архитектура. SOLID, service discovery, очереди сообщений. Когда использовать микросервисы и когда монолит? Использовали ли вы eureka или consul?
  12. Остальное. Agile, Git и Gitflow, REST/SOAP, Linux (если работали), Docker и Kubernetes (если работали). А еще тесты — функциональные, интеграционные и юнит. Чем отличаются, какие писали, использовали ли TDD?
  13. Английский. Только если требуется. Разумеется, не надо повторять правила грамматики английского языка. Достаточно потренироваться рассказать о себе, возможно запомнить некоторые заранее подготовленные фразы.
  14. Про себя. Будьте готовы ответить на подобные вопросы: «Какую интересную проблему приходилось решать на работе?», «Расскажите, чем гордитесь больше всего.», «Расскажите о своих достижениях.», «Расскажите о своих неудачах.», «Как вы самообразовываетесь?», «Почему ушли с прежнего места работы?». Если у вас есть свои проекты, статьи или выступления — обязательно о них расскажите. Этими вещами очень интересуются и обязательно попросят рассказать подробнее.

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

И дам несколько советов от себя.

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

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

Помните, что вы — не энциклопедия, и не должны сходу перечислить например все функциональные интерфейсы в Java. Будет вполне нормально, если расскажете только про то, с чем работали.

И помните, что собеседование — это прежде всего беседа. Вас не допрашивают и не хотят пристыдить, если вы что-либо не знаете. Работодатель выясняет, подходящая ли вы кандидатура, а вы выясняете, подходит ли вам эта работа.

А еще хорошая книга — Cracking the Coding Interview. Можно взглянуть, особенно если собираетесь проходить интервью в иностранные компании типа Google, Facebook.

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

  • Cracking the Coding Interview.
  • OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide: Exam 1Z0-809.
  • Пост «Я вам перезвоню».
  • Leetcode.
  • Interviewbit. Еще один сайт с алгоритмическими задачами. Здесь задачи структурированы по категориям.

Удачи!

Вопросы и ответы к собеседованию на Java junior

Вопросы к собеседованию на должность Java Junior.

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

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


1)Перечислите все методы класса Object
2)Какого назначение методов equals() и hashCode()?
3)Что будет, если не переопределяя hashCode() переопределить equals()?
4)Для чего нужны методы wait(), notify(), notifyAll()?
5)Как правильно клонировать объект?
6)Для чего нужен метод finalize()?
7)В чём отличие final, finally, finalize?
Что такое try-with-resources?
9)В чём отличие wait(100) от sleep(100)?
10)В чём отличие i++ от ++i?
11)Как правильно сравнивать строки в Java?
12)Как правильно сравнивать строки в Java, игнорируя регистр букв?
13)Как отсортировать список в алфавитном порядке?
14)В какой кодировке хранятся строки в Java?
15)Как преобразовать строку в Windows-1251?
16)Как разбить строку на массив строк?
17)Как развернуть строку задом наперёд?
18)Что происходит, когда мы пишем «A»+»b»+»C»?
19)Что такое mutable и immutable типы?
20)Что даёт классу String то, что его сделали immutable?
21)Как отсортировать массив чисел?
22)Как отсортировать список строк в обратном алфавитном порядке?
23)Как отправить email из программы java?
24)Как определить, содержит ли переданный объект определённый метод?
25)В чём отличие TreeMap и HashMap?
26)Зачем в «ArrayList<?>» нужно писать «?» ?
27)Как узнать максимальное значение int?
28)Как узнать минимальное значение byte?
29)Как преобразовать число в шестнадцатеричную строку?
30)Как преобразовать число в двоичную строку?
31)Какие бывают внутренние классы?
32)Во что компилируется анонимный внутренний класс?
33)Зачем использовать ключевое слово final при создании анонимных классов?
34)Как правильно создавать объект внутреннего класса?
35)Как правильно создавать объект вложенного класса?
36)Можно ли создавать статические методы/переменные во внутреннем классе?
37)Назовите три любых внутренних класса?
38)Как внутренние классы решают проблему множественного наследования в java?
39)Чем отличаются анонимные классы созданные на основе интерфейса и на основе класса?
40)Можно ли создать анонимный статический вложенный класс?
41)Во что компилируются анонимные внутренние классы?
42)Можно ли наследовать внутренние классы?
43)Можно ли наследовать анонимные внутренние классы?
44)Можно ли переопределять внутренние классы?
45)Какие ограничения есть у локальных классов?
46)Может ли анонимный внутренний класс содержать статические методы?
47)Можно ли создать объект внутреннего класса, если у внешнего класса только private конструктор?
48))Что такое статический блок и статическая инициализация в Java?
49)Как вызвать один конструктор из другого? 
50)Что такое переопределение метода в java?
51)Что такое autoboxing?
52)Зачем используется autoboxing?
53)Альтернативы autoboxing?
54)Типы-обертки для примитивных типов mutable или immutable?
55)Как примитивные типы приводятся к непримитивным аналогам?
56)Как непримитивные типы приводятся к примитивным?
57)Как сравниваются примитивные и непримитивные типы?
58)Всегда ли создается новый объект при операции autoboxing?
59)Как работает кэширование при операции autoboxing?
60)Для каких типов и/или значений работает кэширование?
61)Какие приоритеты нитей бывают?
62)Можно ли остановить нить, снизив ее приоритет до 0?
63)Зачем нужен класс ThreadGroup?
64)В какой группе нитей состоит main-thread?
65)Что такое паттерн ThreadPool
66)Зачем нужен класс ThreadPoolExecutor?
67)Сколько способов создать нить вы знаете? (Thread, Runnable, Callable)
68)Для чего используется класс Future?
69)В чем преимущества Callable над Runnable?
70)Можно ли отменить выполнение задачи, если использовать класс Future?
71)Что такое дедлок?
72)Какие вы знаете стратегии, предотвращающие появление дедлоков?
73)Могут ли возникнуть дедлоки при использовании методов wait-notify?
74)Что чаще используется: notify или notifyAll?
75)Метод wait рекомендуется использовать с конструкциями if или while?
76)Что происходит после вызова метода notifyAll?
77)Какие выгоды получает объект, если он immutable?
78)Что такое «thread-safe»?
79)Что такое «happens-before»?
80)Что такое JMM?
81)Какое исключение вылетит, если вызвать wait не в блоке synchronized?
82)Как пользоваться интерфейсом Comparable?
83)Как пользоваться интерфейсом Comparator?
84)Какие методы есть у класса Collections?
85)Какие методы есть у класса Arrays?
86)Как называется сортировка, которая используется при вызове Collections.sort()?
87)Что такое канкаренси?
88)Какие классы из «канкаренси» ты знаешь?
89)Как устроен класс ConcurrentHashMap?
90)Что такое класс Lock?
91)Что такое итератор?
92)Что такое mutex?
93)Что такое монитор?

94)Как в java можно разделить вывод сообщений в системную консоль, а ошибок в файл?
95)Какая разница между интерфейсом и абстрактным классом?
96)Когда лучше использовать синхронизированный блок вместо синхронизированного метода?
97)Какое назначение у ключевого слова transient?
98)Как можно запустить сборщик мусора?
99)В чём разница между конструкторами и другими методами?
100)Объясните в чём смысл использования пакетов в Java?
101)В чём разница между J2SDK 1.5 и J2SDK 5.0?
102)Имеет ли значение, в каком порядке отлавливаются исключения FileNotFoundException и IOException, и почему?
103)Что произойдёт, если заменить && на & в следующем коде:

String a=null; if (a!=null && a.length()>10) {...}

104)В чём главная разница между Vector и ArrayList?
105)В чём разница между очередью и стеком?
106)Назовите все состояния объекта Thread?
107)В какие состояния может перейти нить, при входе в блок synchronized?
108)В какое состояние перейдет нить, при вызове метода wait()?
109)В какое состояние перейдет нить, при вызове метода wait(500)?
110)В какое состояние перейдет нить, при вызове метода notify()?
111)В какое состояние перейдет нить, при вызове метода notifyAll()?
112)Три нити в блоке synchronized вызвали wait() у объекта-мютекса.
113)В какое состояние перейдут эти нити, если четвертая нить вызовет notifyAll()?
114)Чем отличается join(500) от wait(500)?
115)Чем отличается wait(500) от sleep(500)?
116)В какое состояние перейдет нить при вызове метода yield()?
117)Можно ли объявлять внутренние классы private?
118)Можно ли объявлять анонимные внутренние классы private?
119)Сколько у класса максимально может быть внутренних классов?
120)В чём смысл ключевого слова super в Java?

Показать скрытое содержание


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


121)Какая разница между перегрузкой и переопределением методов в Java?
122)Благодаря чему приложения Java не зависят от платформы?
123)Что такое перегрузка(overloading) метода в Java?
124)Какие отличия между C++ и Java?
125)Что такое JIT компиляция?
126)Что такое байт-код?
127)Что такое класс(class)?
128)Что такое объект в Java?
129)Что такое метод в Java?
130)В чём смысл инкапсуляции?
131)Объясните почему у метода main() именно такая сигнатура (public, void, static)?
132)Что такое конструктор в Java?
133)В чём разница между length и length()?
134)Что такое ASCII?
135)Что такое Unicode?
136)Что такое и как используются константы в Java?
137)В чём разница между «>>» и «>>>» в Java?
138)Какие Вы знаете стандарты оформления кода?
139)Что такое «IS-A» отношение в Java?
140)Что такое «HAS-A» отношение в Java?
141)В чём разница между отношениями «HAS-A» и «IS-A»?
142)Объясните назначение оператора instanceof в java?
143)Что есть null в Java?
144)Можно ли иметь много классов одном файле?
145)Какие модификаторы доступа можно указывать для главного (top) класса?
146)Можно ли указывать более одного пакета в одном файле?
147)Можно ли объявлять пакет после объявления импорта файле?
148)Что такое ThreadGroup и зачем он нужен?
149)Что такое ThreadPool и зачем он нужен?
150)Что такое ThreadPoolExecutor и зачем он нужен?
151)Что такое Concurrency?
152)Что такое «атомарные типы» в Java?
153)Зачем нужен класс ThreadLocal?
154)Что такое модификатор volatile?
155)Что такое Executor?
156)Что такое ExecutorService?
157)Зачем нужен ScheduledExecutorService?
158)Назовите все состояния объекта Thread.
159)В какие состояния может перейти нить при входе в блок synchronized?
160)В какое состояние перейдёт нить при вызове метода wait()?
161)В какое состояние перейдёт нить при вызове метода wait(500)?
162)В какое состояние перейдёт нить при вызове метода notify()?
163)В какое состояние перейдёт нить при вызове метода notifyAll()?
164)Три нити в блоке synchronized вызвали метод wait() у объекта-мютекса. В какое состояние перейдут эти нити, если четвертая нить вызовет notifyAll()?
165)Чем отличается join(500) от wait(500)?
166)Чем отличается wait(500) от sleep(500)?
167)В какое состояние перейдёт нить при вызове метода yield()?
168)Какие модификаторы доступа могут использоваться с классами?
169)Перечислите модификаторы доступа у методов.
170)Расскажите об абстрактных классах в Java.
171)Можно ли описать конструктор в абстрактном классе?
171)Что такое абстрактный метод?
172)Что такое исключения в Java?
173)Назовите несколько вариантов применения механизма исключений.
174)Что такое перехват исключений в Java?
175)Сколько способ обработки исключений Вы знаете?
176)Назовите 5 ключевых слов, относящихся к механизму Java.
177)Можно ли использовать блок try без блока catch?
178)В чём важность блока finally?
179)Можно ли писать код между блоками try … catch?
180)Можно ли отлавливать более одного исключения в одном блоке catch?
181)Что такое проверяемое (checked exceptions) исключение?
182)Расскажите о непроверяемых (unchecked exceptions) исключениях.
183)Для чего служит ключевое слово throw?
184)Можно ли писать код после throw?
185)Для чего нужно ключевое слово throws?
186)Может ли быть так, что блок finally не будет выполнен? Если да, то когда?
187)Можно ли блоке catch перехватить проверяемое (checked) исключение?
188)Как можно создать собственное исключение?
189)Можно ли выбросить исключение из блока catch?
190)Можно ли использовать вложенность для блоков try?
191)В каком случае можно получить ClassNotFoundException?
192)Поток и процесс — это одно и тоже? Если нет, в чём разница?
193)Что такое многопоточность в Java?
194)Какие есть преимущества у многопоточного программирования?
195)Сколько способов создания потока (thread) Вы знаете?
196)Какой лучший подход создания потока(thread)?
197)Что Вы знаете о планировщике задач в JVM?
198)Можно ли стартовать мёртвую нить в Java?
199)Можно ли перезапустить нить после запуска?
200)Какие способы синхронизации Вы знаете?
201)Что такое синхронизированный метод?
202)Могут ли зайти в синхронизированный метод потоки, если в нём уже находится один поток?
203)Что такое синхронизированный блок в Java?
204)Могут ли статические методы быть синхронизированны?
205)Как в Java используются приоритеты потоков?
206)Как можно задать или изменить приоритет нити?
207)Если две нити имеют одинаковый приоритет, какая начнёт выполнение первой?
208)Получит ли шанс на повторное выполнение уступившая (yielded) нить?
209)Объясните важность метода join()
210)Что является демоном (daemon) в Java?
211)Объект или ссылку уничтожает сборщик мусора?
212)Когда и кто может вызывать finalize() метод в Java?
213)Приведите пример перечислений (enumeration) в Java.
214)Есть ли разница между коллекцией, Collection и Collections в Java?
215)Какие классы реализуют интерфейс List?

Показать скрытое содержание

1) ArrayList
2) Vector
3) LinkedList


216)В чём разница между ArrayList и LinkedList?
217)Для чего нужен класс Iterator и какие у него есть методы?
218)Какая разница между Comparator и Comparable?
219)Какие есть альтернативы у сериализации в Java?
220)Как сделать объект сериализуемым?
221)Что такое serialVersionUID и обязательно ли его определять?
222)Какие 2 метода необходимы объекту для того, что бы он мог являться ключом в HashMap?

Показать скрытое содержание

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


223)Что такое Java-апплет? Что вы о нём знаете?

Показать скрытое содержание


Java-апплет — это программа на языке Java, которая может встраиваться в HTML разметку и выполняться прямо в браузере на стороне клиента. Апплеты используются для создания динамичных и интерактивных страниц.



224)Расскажите о жизненном цикле java-апплета.

Показать скрытое содержание


Апплет может находиться в следующих состояниях:
Init: Апплет инициализируется каждый раз, когда запускается.
Start: Начинается выполнение апплета.
Stop: Останавливается выполнения апплета.
Destroy: Завершение и уборка за собой. Освобождение ресурсов, очистка.



225)Что происходит при загрузке апплета?
226)В чём разница между апплетом и Java-приложением?
227)Какие ограничения существуют у java-апплетов?
228)Что такое «ненадежный апплет»?
229)В чём разница между апплетом, загруженным через интернет и апплетом, загруженным из файловой системы?
230)Что из себя представляет загрузчик классов для апплетов?
231)Что такое и что обеспечивает менеджер безопасности апплетов?

SWING

232)В чём разница между Choice и List?
233)Для чего нужен layout manager?
234)В чём разница между Scrollbar и JScrollPane?
235)Какие есть потоко-защищённые метод в SWING?

Показать скрытое содержание


Всего 3 потоко-защищённых метода: repaint, revalidate, и invalidate.



236)Назовите 3 подкласса Component, поддерживающих рисование.

Показать скрытое содержание


237)Что такое клиппинг (clipping)?
238)В чём разница между MenuItem и CheckboxMenuItem ?
239)По какому принципу выстраиваются элементы в BorderLayout?
240)По какому принципу выстраиваются элементы в GridBagLayout?
241)Какая разница между классами Window и Frame?
242)Может ли GUI компонент сам обрабатывать свои события?
243)Какой паттерн проектирования используется для всех Swing компонентов?

JDBC

244)Что такое JDBC?
245)Для чего используется драйвер JDBC?
246)Какое назначение у метода Class.forName?
247)Какие преимущества PreparedStatement над Statement ?

Remote Method Invocation (RMI)

248)Что такое RMI?
249)Какие базовые принципы архитектуры RMI Вы знаете?
250)Какие уровни составляют архитектуру RMI?
251)Какова роль удалённого интерфейса в RMI?
252)Для чего служит java.rmi.Naming Class?
253)Как вы понимаете связывание в RMI?
254)Какая разница между использованием bind() и rebind() методов?
255)Какие шаги необходимо выполнить для запуска RMI программы?
256)Что такое «заглушка» (stub) в RMI?
257)Что такое DGC и как это работает?
258)Какая цель использования RMISecurityManager в RMI?
259)Приведите примеры Marshalling и demarshalling.
260)Приведите примеры Serialization и Deserialization.

Servlets

261)Что такое сервлет?
262)Приведите пример архитектуры сервлетов.
263)В чём разница между Applet и Servlet?
264)В чём разница между GenericServlet и HttpServlet?
265)Расскажите о жизненном цикле сервлета.
266)В чём разница между doGet() и doPost()?
267)Что означает «Веб-приложение»?
268)Что такое Server Side Include (SSI)?
269)Что такое цепочка сервлетов?
270)Как вы узнаете что клиентская машина послала запрос вашему сервлету?
271)Какая структура у HTTP заголовка?
272)Что такое cookie?
273)По какому протоколу взаимодействуют браузер и сервлет?
274)Что вы знаете о HTTP Tunneling?
275)Что такое URL Encoding и URL Decoding?

JSP

276)Что такое JSP страница?
277)Как происходит обработка JSP запроса?
278)Какие есть преимущества использования JSP?
279)Что такое директивы? Чем различаются типы директив, доступных в JSP?
280)Что такое JSP действия?
281)Что такое сценарии (скриптлеты, Scriptlets) ?

Общее

282)В чём разница между JDK и JRE?
283)Что такое JVM?
284)Почему Java называется «платформо-независимым» языком?
285)Какие есть типы данных в Java?
286)Что такое Autoboxing и unboxing?
287)Какая разница между String и StringBuffer?
288)Какая разница между байтовым и символьным потоками?
289)Что такое FileInputStream и FileOutputStream?
290)Что такое FileReader и FileWriter?
291)Как работать с классом SimpleDateFormat?
292)Как из объекта типа Date получить строку «21 Aug 1992»?
293)Что такое ClassLoader?
294)Напишите программу, проверяющую число на четность/нечетность.
295)Приведите пример двойной проверки блокировки в синглтонею
296)Как создать потоко-безопасный синглтон?
297)Когда используются volatile переменные?
298)Когда используются transient переменные?
299)В чём разница между volatile и transient переменными?
300)Можно ли переопределить приватный метод?
301)Какая разница между List и Set?
302)В чём разница между PATH и Classpath в Java?
303)Может ли абстрактный класс иметь конструктор?
304)Как сделать класс Immutable?
305)Какие типы данных используются для представления денег?
306)Какой последний паттерн проектирования Вы использовали?
307)Сколько в java зарезервированных ключевых слов? Сколько из них используются?
308)Какие символы нельзя использовать в имени переменной?
309)На какие группы делятся типы данных в Java?
310)Какие значения присваиваются разным типам по умолчанию?
311)Какие есть циклические конструкции в java? Когда и какуую использовать?
312)Как Вы понимаете слово «класс»? Опишите термин своими словами.
313)Какие вы знаете блоки инициализаций?
314)Как правильно реализовывать hashcode объекта?
315)Есть ли смысл в добавлении private методу модификатора final?
316)Какие есть коллекции типа Queue?
317)Можно ли сделать коллекцию только для чтения? Если да, то для чего? Если нет, то почему?
318)Какие главные отличия между стеком и очередью?
319)Что означает термин «конкатенация»?
320)Как можно разбить строку на подстроки встроенными средствами java?
321)К чему приведёт выполнение одного и того же участка кода разными потоками?
322)Как можно получить ссылку на текущий поток?
323)Какие условия должны выполниться перед вызовом методов wait/notify?
324)Что является мьютексом в случае синхронизированного метода?
325)Что вы знаете об агрегатных функциях? Как они работают со значением null?
326)Опишите структуру, используемую в веб-проекте.
327)Что вы знаете о ServletConfig?
328)Методы, необходимые к определению при создании сервлетов.
329)Что такое WWW?
330)Какие методы передачи данных по HTTP вы знаете?
331)Что Вы знаете об ORM?
332)Какие Вы знаете принципы ООП? Откуда Вы их знаете? Используете ли?
333)Что входит в сигнатуру метода? Что не входит?
334)В чём особенность инициализации final static переменных?
335)Какие отличия и в чём сходства между внутренними и вложенными классами?
336)Какого предназначение модификаторов abstract и final в отношении методов и классов.
337)Могут ли быть перехвачены исключения из разных веток наследования в одном блоке catch?
338)Что такое Error? Для чего используется?
339)Какие есть особенности у коллекций типа Set?
340)Возможно ли получение синхронизированной коллекции из несинхронизированной?
341)Приведите пример выброса ConcurrentModificationException.
342)Можно ли наследоваться от строкового типа?
343)Каким методом можно вырезать подстроку?
344)Какие основные классы есть в механизме ввода-вывода в Java?
345)Какой символ используется в качестве разделителя при указании пути к элементам файловой системы в Java?
346)Когда стоит рассматривать использование многопоточности в приложении? Всегда ли многопоточность — это хорошо?
347)Для чего нужны потоки-демоны? Есть ли потоки-ангелы?
348)Где используется метод join?
349)Какие есть неявные, внутренние объекты JSP EL? Чем они отличаются от объектов jsp?
350)Какой у сервлета жизненный цикл? Какие методы вызываются на его этапах?
351)Какая разница между encodeUrl() и encodeRedirectUrl()?
352)В чём заключаются отличия между web server и application server?
353)Что Вы знаете об AJAX? Какие принципы лежат в основе данной технологии?
354)Какие есть примитивные типы и сколько места они занимают в памяти?
355)Какие есть логические операции в Java?
356)Что такое побитовый сдвиг? Какая математическая операции ему соответствует?
357)С помощью какого оператора можно немедленно оборвать выполнение цикла?
358)Может ли меняться количество передаваемых в метод аргументов?
359)Как правильно выполнять инициализацию статических и нестатических полей?
360)Может ли метод являться абстрактным и статическим одновременно?
361)Может ли класс быть статическим?
362)Какие модификаторы есть по умолчанию у полей и методов интерфейсов?
363)Какой метод возвращает строковое описание объекта?
364)С помощью чего можно добраться до приватных полей класса? Возможно ли это?
365)Может ли потомок расширить видимость приватного метода класса-родителя?
366)Что Вы знаете о MVC? Каков принцип его работы?
367)Есть ли смысл в обработке ошибок jvm?
368)Бывают ли ситуации, когда блок finally не выполняется?
369)Метод может выбросить IOException и FileNotFoundException. Какая очередность должна быть у блоков catch?
370)Какие есть коллекции типа List?
371)Какие Вы знаете реализации SortedSet?
372)Какие коллекции являются синхронизированными?
373)Какова реализация метода foreach?
374)Что такое fail-safe и fail-fast свойства?
375)Что Вы знаете об алгоритмах сортировки?
376)Как развернуть строку задом-наперёд?
377)Что Вы знаете о пуле строк?
378)Как проще всего найти необходимый символ в строке?


Уважаемые пользователи! Если у Вас есть интересные вопросы к собеседованию на java junior, присылайте мне на почту [email protected] или вконтакте, я обязательно включу их в этот список. Уверен, что зная ответы на данные вопросы на собеседовании java junior, Вы легко сможете заполучить желаемую вакансию в IT отрасли. Успехов!

Top 100 Java Interview Questions с ответами

  • Home
  • Testing

      • Back
      • Agile Testing
      • BugZilla
      • Cucumber
      • Database Testing
      • JTL Testing Назад
      • JUnit
      • LoadRunner
      • Ручное тестирование
      • Мобильное тестирование
      • Mantis
      • Почтальон
      • QTP
      • Назад
      • Центр качества (ALM)
      • SAP Testing
      • Управление тестированием
      • TestLink
  • SAP

      • Назад
      • ABA P
      • APO
      • Новичок
      • Basis
      • BODS
      • BI
      • BPC
      • CO
      • Назад
      • CRM
      • Crystal Reports
      • QM4O
      • Заработная плата
      • Назад
      • PI / PO
      • PP
      • SD
      • SAPUI5
      • Безопасность
      • Менеджер решений
      • Successfactors
      • SAP Tutorials
      4
    • Web
    • Apache
    • AngularJS
    • ASP.Net
    • C
    • C #
    • C ++
    • CodeIgniter
    • СУБД
    • JavaScript
    • Назад
    • Java
    • JSP
    • Kotlin
    • Linux
    • Linux
    • Kotlin
    • Linux
    • js
    • Perl
    • Назад
    • PHP
    • PL / SQL
    • PostgreSQL
    • Python
    • ReactJS
    • Ruby & Rails
    • Scala
    • SQL
    • 000
    • SQL
    • 000 0003 SQL 000 0003 SQL 000
    • UML
    • VB.Net
    • VBScript
    • Веб-службы
    • WPF
  • Обязательно учите!

      • Назад
      • Бухгалтерский учет
      • Алгоритмы
      • Android
      • Блокчейн
      • Business Analyst
      • Создание веб-сайта
      • CCNA
      • Облачные вычисления
      • 00030003 COBOL
          9000 Compiler
            9000 Встроенные системы
          • 00030002 9000 Compiler
            • Ethical Hacking
            • Учебники по Excel
            • Программирование на Go
            • IoT
            • ITIL
            • Jenkins
            • MIS
            • Сети
            • Операционная система
            • 0003
            • Назад
            • Управление проектами Обзоры
            • Salesforce
            • SEO
            • Разработка программного обеспечения
            • VB A
        • Big Data

            • Назад
            • AWS
            • BigData
            • Cassandra
            • Cognos
            • Хранилище данных
            • 0003
            • HBOps
            • 0003
            • HBOps
            • 0003
            • MicroStrategy
        .

        Вопросы и ответы на собеседовании по Java {обновлено на 2020 год}

        Введение в вопросы для собеседований по Java для более свежих абитуриентов

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

        Часть 1 — Вопросы для собеседования по Java (базовый уровень)

        Эта первая часть охватывает основные вопросы интервью и ответы

        1. Разница между буфером строк и построителем строк в Java

        Ответ:
        Это один из самых любимых вопросов интервьюеров, однако кандидаты часто плохо отвечают на него.

        Вот несколько заметных различий между String Buffer и String Builder для лучшего понимания

        1) StringBuilder — это несинхронизированная версия класса StringBuffer.Методы в StringBuilder
        Например, вся перегруженная версия метода append () не синхронизируется.
        2) StringBuilder работает быстрее StringBuffer из-за отсутствия накладных расходов на получение и снятие блокировок, связанных с синхронизированными методами.
        3) StringBuffer считается потокобезопасным, а StringBuilder — нет, потому что, если такая синхронизация требуется, лучше использовать класс StringBuffer. Класс StringBuilder Экземпляры не могут совместно использоваться несколькими потоками
        4) StringBuffer — это старый класс; он включен в JDK с самого первого выпуска, в то время как StringBuilder является относительно новым классом
        5) Самый важный факт о StringBuffer и StringBuilder заключается в том, что, когда конкатенация строк выполняется с помощью оператора +, Java внутренне преобразует этот вызов в соответствующий StringBuilder append () класс метода.Например, «один» + «два» + «три» будут преобразованы в новый StringBuilder () .append («один»). Append («два»). Append («три»).

        2. Программа на Java для поиска наибольшего и наименьшего числа в целочисленном массиве

        Ответ:
        Простая пятерка для ответа на этот вопрос

        • Создайте исходный файл Java с именем MaximumMinimumArrayDemo.java и скопируйте код для компиляции и выполнения в вашей любимой среде IDE
        • Создайте метод, называемый наибольшим и наименьшим (числа int []), для вывода наибольшего и наименьшего числа массива int, переданного программе.
        • Используйте две наибольшие и наименьшие переменные, чтобы сохранить максимальное и минимальное значения из массива. Первоначально наибольшее значение инициализируется с помощью Integer.MIN_VALUE, а наименьшее —
        .

        вопросов для собеседования по Java — JournalDev

        Если вы готовитесь к собеседованию по Java, неплохо было бы пройти через вопросы для собеседования по Java. Я написал много статей с вопросами для интервью по Core Java, Java EE и популярным фреймворкам.

        Вопросы для собеседований по Java Часто задаваемые вопросы

        Давайте рассмотрим некоторые общие вопросы, прежде чем читать статьи, посвященные конкретным областям.

        1. Какой сайт лучше всего подходит для вопросов на собеседовании по Java?

        Существует множество веб-сайтов, на которых вы найдете вопросы для собеседований по Java.Так как же узнать, какие из них стоит прочитать?

        Ответ прост — прочтите те, которые охватывают новейшие функции. Также читайте статьи, в которых вы можете оставлять комментарии. В большинстве случаев автор допускает ошибки или запутанные утверждения. Затем исправляет их посредством отзывов пользователей, поступающих через комментарии.

        2. Какие темы наиболее популярны для собеседований по Java?

        Некоторые из популярных тем для собеседований по Java:

        • Концепции OOPS
        • Java String
        • Collections Framework
        • Многопоточность
        • Generics
        • Обработка исключений
        • Stream API
        • Lambda Expressions
        • Функции последней версии
        • Рамки Java EE — Spring, Hibernate и т. Д.

        3. Для чего используется Java?

        Мы везде используем Java-программирование. Мы используем Java для создания автономных программ, веб-приложений и веб-сервисов. Мы можем создавать распределенные корпоративные приложения с использованием фреймворков Java EE.

        4. Что такое Core Java?

        Java SE также называют Core Java. Это набор библиотек, которые входят в стандартную установку java. Например, структура коллекций является частью Core Java. Но сервлет / JSP является частью Java Enterprise Edition.

        5. Каковы дополнительные темы по Java?

        Некоторые из расширенных концепций Java:

        • Память кучи и стека
        • Сборка мусора
        • API отражения
        • Тупик потока
        • Java ClassLoader
        • API ведения журналов Java
        • Интернационализация в Java
        • Система модулей Java

        6. Является ли Java умирающим языком?

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

        7. В чем разница между JavaScript и Java?

        Некоторые из ключевых различий между JavaScript и Java:

        • Java — это объектно-ориентированный язык программирования. Но JavaScript — это объектно-ориентированный язык сценариев и .
        • Код Java запускается на виртуальной машине или в браузере (апплеты), где код JavaScript выполняется в браузере.
        • Мы должны скомпилировать исходный код Java в байтовый код, прежде чем JVM сможет его понять и выполнить. Код JavaScript основан на тексте, и нам не нужно его компилировать.
        • Мы используем JavaScript для выполнения задач, специфичных для браузера. Мы используем Java для создания автономных служебных приложений, веб-приложений и веб-служб.
        • JavaScript легкий, тогда как нам нужно установить Java и настроить ее для работы.

        8. Что лучше — Java или Python?

        Это все равно, что сравнивать яблоки с апельсинами.И Java, и Python — очень популярные языки программирования. От проекта зависит, хотите ли вы использовать Java или Python, а иногда и то и другое вместе.

        Вот некоторые исходные данные, основанные на моем личном опыте работы с Java и Python в течение длительного времени.

        • Мы предпочитаем Java над Python для создания веб-сервисов или веб-приложений. API-интерфейсы и фреймворки Java EE надежны и безопасны. Фреймворки Python, такие как Flask и Django, все еще развиваются.
        • Для создания служебных сценариев мы предпочитаем Python, а не Java, потому что он легче, чем Java.
        • Мы предпочитаем Python для приложений анализа данных, машинного обучения и искусственного интеллекта. Это потому, что большинство популярных API в этих областях основаны на Python.

        9. Кто создал Java?

        Java был впервые создан Джеймсом Гослингом в Sun Microsystems. Первая общедоступная версия была выпущена в 1996 году.

        10. Какая последняя версия Java?

        Java 12 — последняя версия, выпущенная 19 марта 2019 года. Теперь Oracle выпускает новую версию Java каждые 6 месяцев.Таким образом, вы можете ожидать релиз Java 13 в сентябре 2019 года.

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

        1. Вопросы и ответы на собеседовании по Core Java

        Core Java — это отправная точка любого собеседования по Java. Хорошее владение Core Java необходимо для прохождения собеседования по Java как для опытных, так и для новичков. В этой статье перечислены самые важные основные вопросы интервью по Java с ответами.

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

        Java 8 была основным выпуском со многими новыми функциями.Некоторые из них — это лямбды, функциональные интерфейсы, потоки и API даты и времени. Эта статья поможет вам подготовиться к собеседованию по этим API.

        Недавно я написал еще одну статью как часть 2 вопросов интервью java 8.

        3. Вопросы и ответы на собеседование с коллекциями Java

        Коллекции являются основными компонентами языка программирования Java. Они широко используются в вопросах интервью. Сообщение содержит более 40 вопросов о коллекциях java, чтобы убедиться, что все темы охвачены.

        Я также рекомендую вам прочитать учебник java collection .

        4. Java String Вопросы и ответы на собеседовании

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

        5. Вопросы на собеседовании по многопоточности и параллелизму Java

        Многопоточность и параллелизм — горячая тема в интервью по Java. Хорошо иметь хорошее знание потоков в Java.Этот пост охватывает более 30 вопросов интервью для Java Threads.

        Я также рекомендую вам прочитать Java Thread Tutorial , чтобы получить хорошие знания о потоках.

        6. Вопросы собеседования по обработке исключений Java

        Обработка исключений — одна из сложных областей. Java обеспечивает надежный и объектно-ориентированный подход к обработке исключений. В корне обработки исключений есть исключения, ошибки и выбросы. Я видел так много парней, которые запутались в отмеченных, непроверенных исключениях и исключениях времени выполнения.Здесь вы найдете список из 15 вопросов, связанных с обработкой исключений в Java.

        7. Разница между JDK, JRE и JVM

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

        8. Загрузчики классов Java

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

        9. Разница между абстрактным классом и интерфейсом

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

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

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

        10. Почему Java не поддерживает множественное наследование и композицию по сравнению с наследованием

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

        11. Вопросы для собеседования по программированию на Java

        Несколько сложных вопросов для проверки ваших навыков программирования.Также обратите внимание на java tricky code snippets .

        12. Java 7 Catch Block

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

        13. Сравнение памяти кучи Java и памяти стека

        Память времени выполнения JVM делится на память кучи и память стека. Важная статья, объясняющая разницу между памятью Heap и Stack в программе.

        14. Java — это передача по значению или передача по ссылке

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

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

        1.JDBC Interview Вопросы и ответы

        Если вы работаете с корпоративными приложениями, я уверен, что JDBC API является его частью. JDBC API обеспечивает подключение к реляционным базам данных, таким как MySQL и Oracle.

        В этой статье собрано более 40 вопросов интервью, связанных с JDBC API. Они охватывают области от базового подключения к источнику данных до объединения в пул. Это поможет вам на собеседовании по вопросам, связанным с JDBC API и тем, как его использовать.

        Если вы новичок в JDBC, я бы посоветовал вам пройти обучение по JDBC Tutorial, чтобы убедиться, что вы охватили все его основные части.

        2. Вопросы для интервью с сервлетами с ответами

        Сервлеты — одна из самых горячих тем для вопросов на собеседовании по Java Enterprise Edition. Этот пост содержит список из 50 вопросов собеседования с сервлетами с подробными ответами. Должен быть отмечен закладкой, потому что в будущем я буду добавлять больше вопросов.

        3. Вопросы и ответы на собеседовании по JSP

        JSP является неотъемлемой частью Java EE. Если вы даете собеседование веб-разработчику, очень важно хорошее знание JSP.Этот пост содержит список из 35 вопросов интервью JSP с ответами. Не забудьте добавить его в закладки, потому что я буду продолжать добавлять в список в будущем.

        4. Вопросы и ответы на собеседовании с Struts

        Struts2 — это одна из современных платформ веб-приложений Java. Эта статья содержит список из 30 вопросов с ответами по фреймворку Struts2.

        5. Spring Вопросы и ответы на собеседовании

        Spring Framework — это наиболее широко используемая среда Java EE.Он построен на основных принципах «внедрения зависимостей» и «аспектно-ориентированного программирования». Этот пост содержит более 45 вопросов, связанных с Spring Framework. Они также охватывают внедрение зависимостей, Spring AOP, Spring JDBC и Spring MVC.

        6. Вопросы для собеседования по веб-сервисам

        Веб-сервисы популярны в наши дни, потому что они не зависят от языка и платформы. Создавать веб-службы на основе SOAP и REST несложно. Этот пост поможет вам узнать о веб-сервисах и связанных с ними вопросах собеседования.Затем есть вопросы с подробными ответами для Java Web Services.

        7. Вопросы на собеседовании JSF

        Более 50 вопросов по JSF-2 с подробными ответами, просмотрите их, чтобы освежить в памяти структуру JSF.

        8. Интервью с Hibernate. Вопросы и ответы

        Hibernate — лучший инструмент ORM на основе Java на рынке. Он часто используется в большинстве корпоративных приложений для преодоления недостатков JDBC. Hibernate обеспечивает гибкую настройку с использованием аннотаций XML, JPA, а также с помощью кода.Так что наличие Hibernate в вашем резюме всегда является плюсом.

        9. Вопросы для собеседования по Scala

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

        10. Общие вопросы при собеседовании

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

        .

        Набор из 10 лучших вопросов и ответов для собеседований по Java 8 в 2020 году

        Введение в Java 8 Интервью Вопросы и ответы

        Java 8 — это новая платформа, недавно выпущенная с новыми библиотеками и классами. В основном эти функции направлены на создание более чистого и компактного кода. Новые функции, добавленные в этой версии, могут быть перечислены как лямбда-выражения, ссылки на методы, дополнительный функциональный интерфейс и методы по умолчанию, Nashorn, Stream и Date API. Потребность в изменениях в Java заключалась в том, чтобы эффективно использовать существующие многоядерные процессоры и использовать функции FP.

        Ниже самые важные вопросы, заданные в интервью:

        Теперь, если вы ищете работу, связанную с Java 8, вам нужно подготовиться к вопросам собеседования по Java 8 2020 года. Это правда, что каждое собеседование отличается в зависимости от профиля работы. Здесь мы подготовили важные вопросы и ответы для собеседований Java 8, которые помогут вам добиться успеха на собеседовании. Эти вопросы для собеседования разделены на две части:

        Часть 1 — Вопросы для собеседования по Java 8 (базовый уровень)

        В этой первой части рассматриваются базовые вопросы и ответы на собеседовании по Java 8

        Q1.Чем Java 8 отличается от предыдущих версий Java?

        Ответ:
        Различные версии Java следующие:

        • API даты: Это улучшенный API, который представляет собой неизменяемый API даты, вдохновленный JodaTime.
        • Stream API: Это специальный класс итератора, который помогает в функциональной обработке коллекции объектов.
        • Лямбда-выражение: Это новая функция языка, которая позволяет рассматривать различные действия, выполняемые как объекты.
        • Ссылка на метод: Это помогает в определении лямбда-выражений, обращаясь к различным методам напрямую, используя их имена.
        • Необязательно: Это специальный класс-оболочка, который помогает в указании дополнительных функций.
        • Функциональный интерфейс: Это интерфейс с максимум одним абстрактным методом, и его реализация обеспечивается лямбда-выражением
        • Nashorn Javascript Engine: Это Java-движок, который используется для выполнения и оценки кода JavaScript.
        2 кв. Можно ли реализовать два интерфейса с методом по умолчанию с тем же именем и подписью? Объясните на примере.

        Ответ:

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

    Ваш адрес email не будет опубликован. Обязательные поля помечены *