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

Более 20 Основных вопросов для интервью на Java для опытных специалистов из инвестиционных банков

Некоторые из наиболее часто задаваемых основных вопросов для интервью Java от инвестиционных банков, таких как Barclays, Credit Suisse, Citibank, Nomura и др. С пометкой java, карьера, новички, программирование.

Раскрытие информации: Этот пост содержит партнерские ссылки; Я могу получить компенсацию, если вы приобретете товары или услуги по различным ссылкам, предоставленным в этой статье.

Есть много разработчиков Java , пытающихся занять должность разработчика Java в инвестиционных банках, таких как Barclays, Credit Suisse, Citibank и т. Д., Но многие из них не имеют ни малейшего представления о том, какие вопросы для собеседования они могут ожидать там.

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

Раскрытие информации: Этот пост содержит партнерские ссылки; Я могу получить компенсацию, если вы приобретете товары или услуги по различным ссылкам, предоставленным в этой статье.

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

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

Если вы считаете, что этих 21 основных вопросов java недостаточно, и вам нужно больше, чем просто проверить эти дополнительный 40 Java-вопросы для телефонного интервью и эти 200+ Java-вопросов за последние 5 лет.

Как только вы это сделаете, вы будете более уверены в том, что дадите любое интервью на Java, будь то собеседование по телефону или лицом к лицу.

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

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

Вопрос 1. Не влияет ли переопределение метода hashCode() на производительность? ( ответ ) \ Это хороший вопрос и открыт для всех, насколько мне известно, плохая функция хэш-кода приведет к частому столкновению в HashMap

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

Вопрос 2: Как работает подстрока () внутри строки? ( ответ )

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

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

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

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

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

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

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

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

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

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

Вопрос 4: Можете ли вы использовать HashMap в многопоточной среде? В чем может быть проблема? Когда метод get() переходит в бесконечный цикл? ( ответ ) \ Ответ: Ну, в этом нет ничего плохого, это зависит от того, как вы его используете. Например, если вы инициализируете хэш-карту только одним потоком, а затем все потоки только читают из нее, тогда все в порядке.

Одним из примеров этого является карта , которая содержит свойства конфигурации .

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

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

Вопрос 5: Можете ли вы написать код критического раздела для синглтона? ( ответ ) \ Этот основной вопрос Java является еще одним распространенным вопросом и ожидает, что кандидат напишет Java singleton, используя блокировку с двойной проверкой .

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

Вот код для критического раздела потокобезопасного одноэлементного шаблона, использующего идиому блокировки с двойной проверкой :

public class Singleton {

private static volatile Singleton _instance;

/** * Double checked locking code on Singleton\
    * @return Singelton instance\
*/

public static Singleton getInstance() {

if (_instance == null) {

synchronized (Singleton.class) {

if (_instance == null) {

_instance = new Singleton();

}

}

}

return _instance; }

}

На той же ноте полезно знать о классических шаблонах дизайна, таких как Синглтон, Фабрика, Декоратор и т. Д. Если вас это интересует, то этот Шаблон проектирования в Java является хорошей коллекцией этого.

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

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

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

В Effective Java 3rd Edition также есть несколько полезных советов по работе с ошибками и исключениями в Java, которые стоит прочитать.

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

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

Ответ на этот вопрос Java-интервью заключается в том, что former возвращает объект Future , который можно использовать для поиска результата из рабочего потока)

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

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

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

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

Это продвинутый курс, основанный на классическом Практика параллелизма Java книга не кого иного, как Брайана Гетца , который считается библией для разработчиков Java. Курс определенно стоит вашего времени и денег. Поскольку параллелизм – сложная и сложная тема, сочетание этой книги и курса – лучший способ ее изучить.

Вопрос 8: В чем разница между фабрикой и абстрактным фабричным шаблоном? ( ответ ) \ Ответ: Абстрактная фабрика обеспечивает еще один уровень абстракции. Рассмотрим различные фабрики, каждая из которых является продолжением абстрактной фабрики и отвечает за создание различных иерархий объектов в зависимости от типа фабрики. Например, Абстрактная фабрика, расширенная автомобильной фабрикой, пользовательской фабрикой, ролевой фабрикой и т. Д. Каждая отдельная фабрика будет отвечать за создание объектов в этом жанре.

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

Вот UML-диаграмма фабрики и абстрактный шаблон фабрики:

Если вам нужно больше вариантов, вы также можете ознакомиться с моим списком Топ-5 шаблонов проектирования Java курсов.

Вопрос 9: Что такое Синглтон? лучше ли синхронизировать весь метод или синхронизировать только критическую секцию? ( ответ )\ Синглтон в Java – это класс, имеющий только один экземпляр во всем приложении Java, например, java.lang. Среда выполнения является одноэлементным классом.

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

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

Вопрос 10: Можете ли вы написать код для перебора хэш-карты в Java 4 и Java 5? ( ответ ) \ Хитрый, но ему удалось написать, используя while и a для цикла. На самом деле, существует четыре способа перебора любой карты в Java, один из которых включает использование Набора ключей() и повторение по ключу, а затем использование метода get() для извлечения значений, что немного дороже.

Второй метод включает использование entrySet() и повторение их либо с помощью для каждого цикла , либо с помощью метода Iterator.hasNext().

Этот подход является лучшим, потому что как объект ключа, так и объект значения доступны вам во время итерации, и вам не нужно вызывать get() метод извлечения значения, который может обеспечить производительность O (n) в случае огромного связанного списка

Далее вы можете ознакомиться с моим сообщением 4 способа перебора карты в Java для подробного объяснения и примеров кода.

Вопрос 11: Когда вы переопределяете hashCode() и equals()? ( ответ ) \ Всякий раз, когда это необходимо, особенно если вы хотите выполнить проверку равенства на основе бизнес-логики, а не равенства объектов, например, два объекта employee равны, если они имеют одинаковый emp_id , несмотря на то, что это два разных объекта, созданных разными частями кода.

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

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

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

Вопрос 12: В чем будет проблема, если вы не переопределите метод hashCode()? ( ответ ) \ Если вы не переопределите метод equals, то контракт между equals и хэш-кодом не будет работать, согласно которому два объекта, равные по equals(), должны иметь одинаковый хэш-код .

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

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

Если вы хотите узнать больше о роли equals() и hashCode() в коллекциях Java, таких как Map и Set, я предлагаю вам пройти через Основы Java: Коллекции курс по Pluralsight Ричарда Уорбертона

Вопрос 13: Лучше ли синхронизировать критический раздел метода getInstance() или весь метод getInstance()? ( ответ ) \ Ответ – это только критический раздел, потому что, если мы заблокируем весь метод, каждый раз, когда кто-то вызывает этот метод, ему придется подождать, даже если мы не создаем объект.

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

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

Вот UML-диаграмма Одноэлементного шаблона проектирования :

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

Если вы хотите узнать больше, вы также можете проверить Изучение шаблонов творческого проектирования на Java — БЕСПЛАТНЫЙ курс # от Udemy.

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

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

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

Вопросы 15: Как избежать взаимоблокировки в Java? ( ответ ) \ Если вы знаете, взаимоблокировка возникает, когда два потока пытаются получить доступ к двум ресурсам, которые принадлежат друг другу, но для этого необходимо выполнить следующие четыре условия:

  1. Взаимное исключение\ По крайней мере один процесс должен выполняться в режиме, недоступном для совместного использования.
  2. Удерживать и ждать\ Должен быть процесс, удерживающий один ресурс и ожидающий другого.
  3. Никакое вытеснение\ ресурсы не могут быть вытеснены.
  4. Циклическое ожидание\ Должен существовать набор процессов

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

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

Далее вы можете ознакомиться с моим сообщением как избежать взаимоблокировки в Java для примера кода и более подробного объяснения.

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

Вопрос 16: В чем разница между созданием Strong как new() и literal? ( ответ ) \ Когда мы создаем строковый объект в Java с помощью оператора new(), он создается в куче и не добавляется в пул строк, в то время как строки, созданные с использованием литерала , создаются в самом пуле строк, который существует в области PermGen кучи.

Строка Строка(“Тест”)

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

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

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

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

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

Вопрос 17: Что такое Неизменяемый объект? Можете ли вы написать Неизменяемый класс? ( ответ ) \ Неизменяемые классы – это классы Java, объекты которых не могут быть изменены после их создания. Любое изменение неизменяемого объекта приводит к созданию нового объекта, например, Строка неизменяема в Java .

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

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

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

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

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

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

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

Вопрос 19: Какие два метода вам нужно реализовать, чтобы использовать любой объект в качестве ключа в HashMap? ( ответ ) \ Чтобы использовать любой объект в качестве ключа в хэш-карте или хэш-таблице, он должен реализовать равно и хэш-код метод в Java.

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

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

Дальнейшее Обучение

  1. Полный Мастер-класс по Java
  2. Основы Java: Язык Java
  3. Ядро Java SE 9 для нетерпеливых
  4. Более 200 вопросов для интервью на Java
  5. Пройди собеседование по Java-кодированию

Заключительные замечания

Отлично!! , вы добрались до конца статьи… Удачи вам в вашем собеседовании по программированию на Java! Это, конечно, будет нелегко, но, следуя этим вопросам, вы станете на шаг ближе к достижению своей цели.

Пожалуйста, подумайте о том, чтобы подписаться на меня ( джавин пол ) на Medium, если вы хотите получать уведомления о моем новом посте, и не забудьте подписаться на меня на Твиттер !

Оригинал: “https://dev.to/javinpaul/20-core-java-interview-questions-for-experienced-professionals-from-investment-banks-53b7”