5 ~ 6 回の開発経験を持つプログラマー向けの Core Java に関する 15 の質問
すべての質問は、5 年以上の経験を持つ現役の上級開発者から寄せられました。開発者は、電話面接や対面面接など、雇用のさまざまな段階でこれらの質問に直面しました。-
Java では
get
クラスメソッドはどのように機能するのでしょうか?HashMap
はい、これは依然として上級開発者にとって最も人気のある質問の 1 つです。電話インタビューで聞かれることが予想されます。おそらくその後も関連する質問がたくさんあるでしょう。それらの回答はここで確認してください。
-
キーオブジェクトはどの 2 つのメソッドを実装する必要がありますか
HashMap
?equals
そしてhashcode
-
キーとして使用されるオブジェクトはなぜ不変でなければならないのでしょうか?
そのため、ハッシュ コードは常に同じ値を返します。
-
スケーラビリティはどのように実現されるのでしょうか
ConcurrentHashMap
?ConcurrentHashMap
インタビューでは、この質問が次のように聞こえることがあります。「 Java のと の違い、ここでHashtable
答えを探してください」。 -
異なるスレッド間でオブジェクトを共有するにはどうすればよいですか? あるいは、あるスレッドから別のスレッドにオブジェクトを渡すにはどうすればよいでしょうか?
Есть много путей реализации этого, такие How очереди, обменники, но блокируемые очереди с шаблоном проектирования Producer/Consumer это самый простой способ, чтобы передать an object из одного потока в другой.
-
Как узнать что в вашей программе есть взаимная блокировка?
(Получив дамп потока, используя kill -3, применяя JConsole or VisualVM). Я предлагаю подготовиться к этому вопросу на интервью очень тщательно, так How интервьюеры любят детали, они спрашивают бывали ли в вашем проекте подобные проблемы и How вам удалось их решить.
-
Как избежать взаимных блокировок при codeировании?
What бы разобраться с блокировками и получить полную информацию о теме, прочтите это.
-
What такое ожидание занятости ("Busy spinning")? Почему вы должны использовать его?
Один из интереснейших вопросов многопоточности для старшего разработчика Java, Busy spinning это стратегия ожидания, когда поток выполняет ожидание в цикле, при этом не используя ресурсы процессора и How бы засыпая. Эту стратегию используют когда время ожидания очень мало, при этом не нагружается процессор и не останавливается поток, сохраняются все данные, которые могут быть потеряны при запуске потока на другом ядре процессора. Этот вопрос популярен у программистов создающих высоко нагруженные проекты, где программисты добиваются чрезвычайно низких задержек в работе, в диапазоне микро- и мor- секунд.
-
What такое блокировка Чтения и Записи (
ReadWriteLock
)? Использует лиConcurrentHashMap ReadWrite
блокировки?Блокировка Чтения и Записи это такая реализация блокировки, когда несколько разных потоков пытаются произвести операцию чтения и записи с одним an objectом. сама по себе операция чтения не изменяет an object, что допускает многопоточные операции чтения без блокировок. Java предоставляет реализацию
ReadWriteLock
с которой стоит ознакомиться. НапримерConcurrentHashMap
не применяетReadWriteLock
, instead of этого он делитHash
на отдельные части и блокирует их отдельно, таким образом в любой момент времени заблокирована только часть хеша, а не он весь. Этот вопрос популярен у опытных разработчиков, обычно просят ответить подробнее, спрашивают разные реализации ReadWriteLock для разных случаев. -
Как сделать an object иммутабельным (не изменяемым) в Java? Зачем делать an object иммутабельным?
Иммутабельность предполагает несколько преимуществ включая потокобезопасность, возможность кеширования, а так же делает многопоточный code более читаемым.
Посмотрите это и научитесь делать an objectы иммутабельными. На собеседовании по этому вопросу возможны дополнительные уточнения, в зависимости от полноты вашего ответа. Например когда вы говорите, что Spring иммутабельный, будьте готовы ответить почему строки так же иммутабельны в Java.
-
Какие шаблоны проектирования в используете?
Всегда ожидайте вопрос о шаблонах проектирования на собеседовании к вакансии старшего разработчика. Лучше отметить любой GOF шаблон, а не Singleton or MVC который использует каждый второй Java программист. Лучший ответ может быть шаблон Декоратор or шаблон Внедрение зависимости, которые довольно популярны в Spring Framework. Так же хорошо если называемые вами шаблоны проектирования вы действительно использовали и знаете к Howому компромиссу ведет их применение. Как только вы произнесете название шаблона проектирования, например: "Фабрика", интервьюер тут же спросит: "Вы использовали это в своих проектах ?" Поэтому будьте готовы привести примеры и рассказать почему вы выбрали в своем проекте именно этот шаблон.
-
Знаете ли вы о принципе Открытости/Закрытости or Принцип подстановки Барбары Лисков?
Шаблоны проектирования основаны на принципах an objectно-ориентированного проектирования.
Настоятельно рекомендую посмотреть мою статью 10 принципов an objectно ориентированного дизайна, которые должен знать программист Java, по крайней мере иметь представление о том How эти принципы помогут вам писать an objectно ориентированный code. Если у вас нет ответа на этот вопрос, вы можете вежливо ответить "нет" , никто не ожидает от вас знания ответов на все вопросы. Однако зная ответ на вопрос, который вызывает затруднения у большинства разработчиков, вы делаете свою кандиdateру на собеседовании очень сильной.
- Какой шаблон проектирования будете использовать, что бы защитить ваш code от сторонней библиотеки, которая будет заменена через пару лет ?
Это всего лишь один из возможных вариаций вопроса о шаблонах проектирования, которые могут быть заданы вам в зависимости от того о чем вы говорите сейчас на собеседовании. Один из способов How оградить свой code от сторонней библиотеки, это зависимость от интерфейса, а не от реализации и использование зависимостей что бы обеспечить конкретную реализацию. Подобные вопросы часто задают старшим разработчикам с 5-7 годами опыта работы.
-
Как предотвратить SQL инъекцию в codeе на Java?
Этот вопрос чаще задают Java EE разработчикам, чем обычным Java программистам, тем не менее это отличный повод узнать о PreparedStatement. PreparedStatement — это an object, который представляет предварительно скомпorрованный SQL-оператор. PreparedStatement не только обеспечивает более высокую производительность, но и защищает от SQL инъекций. Если вы работаете по большей части с Java EE or J2EE, вы должны быть знакомы с некоторыми вопросами безопасности, в том числе "атака Фиксации Сессии" or "межсайтовый скриптинг", так же вам нужно уметь избегать этих атак.
-
Расскажите об отличиях типов ссылок в Java, таких How WeakReference, SoftReference и PhantomReference? И почему вы должны их использовать?
実際、すべてのタイプの参照の違いは 1 つだけです。それは、参照するオブジェクトに対する Java ガベージ コレクターの動作です。Java では、new 演算子を使用して作成されたオブジェクトは、強参照によって作成されます。ガベージ コレクターは、そのようなオブジェクトへの強い参照がなくなった場合にのみ、そのようなオブジェクトを破棄します。java.lang.ref パッケージには、SoftReference、WeakReference、PhantomReference の 3 種類のリンクを記述する 3 つのクラスがあります。SoftReference 経由で作成されたオブジェクトは、JVM がメモリを必要とする場合に収集されます。つまり、JVM が OutOfMemoryError 例外をスローする前に、すべての SoftReference オブジェクトが収集されることが保証されます。SoftReference は、多くの場合、メモリを大量に使用するキャッシュに使用されます。WeakReference は、十分な空きメモリがある場合でも、オブジェクトのファイナライズを保存しません。オブジェクトに対する強参照とソフト参照がなくなるとすぐに、オブジェクトを終了できます。キャッシュと、相互接続されたオブジェクトのチェーンの作成に使用されます。PhantomReference を通じて作成されたオブジェクトは、参照されたオブジェクトの割り当てを解除できると GC が判断したときに破棄されます。このタイプの参照は、(より柔軟なリソース解放のため) ファイナライゼーションの代替として使用されます。
これは、上級 Java 開発者の面接の質問の全リストです。上級開発者の間で非常に人気のある、例外処理、ガベージ コレクター、JVM 構成に関する重要な質問はあまり含めていませんが、次のパートで含める可能性があります。ただし、質問に対する答えが見つからない場合は、お知らせください。定期読者向けにこの投稿を更新します。
GO TO FULL VERSION