Рубрики
Без рубрики

20 Вопросов и ответов на Java-интервью от инвестиционных банков

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

Автор оригинала: javinpaul.

Это новая серия общих основных вопросов и ответов для интервью на Java в области финансов и, в основном, в крупных инвестиционных банках. Многие из этих вопросов для интервью на Java задаются в JPMorgan, Morgan Stanley, Barclays или Goldman Sachs. Банки в основном задавали основные вопросы для интервью на Java из многопоточности , коллекции , сериализации, кодирования и принципов проектирования OOPS.

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

Пожалуйста, поделитесь ответами на оставшиеся без ответа вопросы интервью Java и сообщите нам, насколько хороши эти вопросы для интервью Java? Если вы серьезно готовитесь к собеседованиям на Java и посещаете собеседования, то я также предлагаю взглянуть на Интервью по программированию на Java, представленные Маркхэмом .

Это конкретная книга по Java, созданная по образцу их предыдущего бестселлера, также посвященная интервью по программированию. Эта книга содержит вопросы не только из Java, но и из соответствующего технологического стека, например JUnit, Maven, шаблоны проектирования, внутренние компоненты JVM, Android и лучшие практики. Вопросы хороши, а ответы четкие и очень хорошо объяснены, что также делает чтение интересным.

20+ Ответов На Основные Вопросы Интервью Java

Эти вопросы для интервью на Java представляют собой смесь простых, сложных и сложных вопросов на Java, например Почему множественное наследование не поддерживается в Java, является одним из сложных вопросов. Большинство вопросов задается на старшем и опытном уровне, т. е. 3, 4, 5 или 6 лет опыта работы на Java например, как работает HashMap на Java, который наиболее популярен на опытных собеседованиях на Java.

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

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

Вопрос 1: Что плохого в использовании HashMap в многопоточной среде? Когда метод get() переходит в бесконечный цикл? ( ответ )

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

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

Вопрос 2. Влияет ли переопределение метода hashCode() на производительность? ( ответ )

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

Однако начиная с Java 8 и далее, столкновение не будет влиять на производительность так сильно, как в более ранних версиях, потому что после порогового значения связанный список будет заменен двоичным деревом, что в худшем случае даст вам производительность O(logN) по сравнению с O(n) связанного списка.

Вопрос 3. Должны ли все свойства Неизменяемого объекта быть окончательными? ( ответ )

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

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

Вопрос 4. Как работает метод substring() внутри строки? ( ответ )

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

Этот вопрос был задан в основном для того, чтобы выяснить, знаком ли разработчик с риском утечки памяти, которую может создать подстрока. До Java 1.7 подстрока содержит ссылку на исходный массив символов, что означает, что даже подстрока длиной 5 символов может предотвратить сборку мусора из массива символов объемом 1 ГБ, удерживая сильную ссылку.

Как работает подстрока в Java

Эта проблема исправлена в Java 1.7, где исходный массив символов больше не упоминается, но это изменение также сделало создание подстроки немного более дорогостоящим с точки зрения времени. Ранее он находился в диапазоне O(1), который мог быть O(n) в худшем случае на Java 7.

Вопрос ** 5: Можете ли вы написать код критического раздела для синглтона? ** ( ответ )

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

Вопрос 6. Как вы обрабатываете состояние ошибки при написании хранимой процедуры или доступе к хранимой процедуре с java? ( ответ )

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

Вопрос 7: В чем разница между методами Executor.submit() и Execute.execute ()? ( ответ )

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

Существует разница при рассмотрении обработки исключений. Если ваши задачи создают исключение, и если оно было отправлено с выполнением этого исключения, оно перейдет в обработчик неперехваченных исключений (если вы не указали его явно, то по умолчанию будет просто напечатана трассировка стека в System.err).

Если вы отправили задачу с отправкой любого возникшего исключения, проверенное исключение или нет, это является частью статуса возврата задачи. Для задачи, которая была отправлена с отправкой и которая завершается исключением, Future.get() повторно создаст это исключение, завернутое в Исключение ExecutionException .

Вопрос 8: В чем разница между фабричным и абстрактным фабричным шаблоном? ( ответ )

Абстрактная фабрика обеспечивает еще один уровень абстракции. Рассмотрим различные фабрики, каждая из которых расширена от абстрактной фабрики и отвечает за создание различных иерархий объектов в зависимости от типа фабрики. Например, Абстрактная фабрика, расширенная Автомобильный завод , Фабрика пользователей , Фабрика ролей и т.д. Каждая отдельная фабрика будет отвечать за создание объектов в этом жанре. Вот UML – схема фабрики и абстрактный шаблон фабрики:

фабрика против абстрактного фабричного шаблона

Вопрос 9. Что такое Синглтон? Лучше ли синхронизировать весь метод или синхронизировать только критическую секцию? ( ответ )

Синглтон в Java-это класс, имеющий только один экземпляр во всем приложении Java, например, java.lang. Среда выполнения является одноэлементным классом. Создание синглтона было сложным до Java 4, но как только Java 5 представила перечисление, это было очень просто.

Вопрос 10: Можете ли вы написать код для итерации по HashMap в Java 4 и Java 5? ( ответ )

Хитрый вопрос но ему удалось написать, используя цикл while и for. На самом деле существует четыре способа перебора любой карты в Java, один из которых включает использование набора ключей() и повторение ключа, а затем использование метода get() для извлечения значений, что немного дорого.

Второй метод включает использование entrySet() и повторение их либо с помощью для каждого цикла, либо с помощью метода Iterator.hasNext (). Это лучший подход, потому что во время итерации вам доступны как объекты ключа, так и значения, и вам не нужно вызывать метод get() для извлечения значения, что может дать производительность O(n) в случае огромного связанного списка в одном сегменте. Смотрите Мой пост 4 способа итерации по карте в Java для подробного объяснения и примеров кода.

Вопрос 11: Когда вы переопределяете хэш-код() и равно()? ( ответ )

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

Также переопределение обоих этих методов необходимо, если вы хотите использовать их в качестве ключа в HashMap. Теперь в рамках контракта equals-hashcode в Java, когда вы переопределяете equals, вы также должны переопределить хэш-код, иначе ваш объект не нарушит инвариант классов например, Набор, карта, которая полагается на метод equals() для правильного функционирования.

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

Вопрос 12:. В чем будет проблема, если вы не переопределите метод hashCode ()? ( ответ )

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

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

java-головоломка-равный-хэш-код

Вопрос 13: Лучше ли синхронизировать критические разделы метода getInstance() или весь метод getInstance ()? ( ответ )

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

Как только объект создан, нет необходимости в какой-либо синхронизации. На самом деле, это очень плохое кодирование с точки зрения производительности, так как синхронизированный метод снижает производительность в 10-20 раз. Вот UML-диаграмма одноэлементного шаблона:

Одноэлементный шаблон проектирования Java

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

Вопрос 14: Где в изображении появляются методы equals() и hashCode() во время операции get ()? ( ответ )

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

Вопросы 15: Как избежать тупика в Java? ( ответ )

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

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

Вопрос 16: В чем разница между созданием Strong как new() и буквальным? ( ответ )

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

String str = new String("Test")

не помещает объект str в пул строк, нам нужно вызвать метод String.intern () , который используется для явного помещения их в пул строк. Только когда вы создаете строковый объект в виде строкового литерала, например String , Java автоматически помещает его в пул строк.

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

Чтобы узнать больше о разнице между строковым литералом и строковым объектом, см. эту статью.

Вот хорошее изображение, которое довольно хорошо показывает эту разницу:

Строковый литерал против строкового объекта в Java

Вопрос 17: Что такое Неизменяемый Объект? Можете ли вы написать Неизменяемый класс? ( ответ )

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

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

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

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

Вопрос 18: Дайте самый простой способ узнать, сколько времени требуется методу для выполнения без использования какого-либо инструмента профилирования? ( ответ )

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

Чтобы поместить это в код…

long start = System.currentTimeMillis ();
method ();
long end = System.currentTimeMillis (); System.out.println ("Time taken for execution is " + (end – start));

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

Вопрос 19: Какие два метода вам необходимо реализовать, чтобы использовать объект в качестве ключа в HashMap? ( ответ )

Чтобы использовать любой объект в качестве ключа в HashMap или Hashtable, он должен реализовывать методы equals и хэш-кода в Java. Прочитайте, как работает HashMap в Java, чтобы получить подробное объяснение того, как метод equals и хэш-кода используется для размещения и получения объекта из HashMap.

Вопрос 20: Как бы вы запретили клиенту напрямую создавать экземпляры ваших конкретных классов? Например, у вас есть интерфейс кэша и два класса реализации Кэш памяти и Дисковый кэш, как вы гарантируете, что клиент не создаст объект этих двух классов с помощью ключевого слова new ().

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

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

Еще вопросы

  • 133+ Вопросов для интервью на Java за последние 5 лет ( читайте здесь )
  • 50+ Вопросов о многопоточности Java за последние 3 года ( смотрите здесь )
  • 50+ Вопросов для телефонного интервью программиста с ответами ( ссылка )

Оригинал: “https://www.codementor.io/@savingfunda/20-java-interview-questions-and-answers-from-investment-banks-98ghl6frw”