面向具有 5-6 种开发经验的程序员的 15 个问题关于 Core Java 的问题
所有问题均来自具有 5 年以上经验的高级开发人员。开发人员在就业的各个阶段都会遇到这些问题,包括电话面试和面对面面试。-
get
Java 中的类方法如何工作HashMap
?是的,这仍然是高级开发人员最常见的问题之一,你应该在电话面试中期待它,之后可能会有很多相关问题,请在此处查看它们的答案。
-
关键对象应该实现哪两个方法
HashMap
?equals
和hashcode
-
为什么用作键的对象应该是不可变的?
这样哈希码总是返回相同的值。
-
可扩展性是如何
ConcurrentHashMap
实现的?ConcurrentHashMap
有时这个问题在面试中听起来像这样:Java和in 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? И почему вы должны их использовать?
事实上,所有类型的引用之间只有一个区别:Java 垃圾收集器的行为及其所引用的对象。在Java中,使用new运算符创建的对象是通过强引用创建的。仅当不再有对这些对象的强引用时,垃圾收集器才会销毁这些对象。java.lang.ref包中有3个类,描述了3种类型的链接,分别是SoftReference、WeakReference、PhantomReference。如果 JVM 需要内存,将收集通过 SoftReference 创建的对象。也就是说,可以保证在 JVM 抛出 OutOfMemoryError 异常之前收集所有 SoftReference 对象。SoftReference 通常用于内存密集型缓存。即使有足够的可用内存,WeakReference 也不会阻止对象被终结。一旦对象不再存在强引用和软引用,它就可以被最终确定。用于缓存和创建互连对象链。当 GC 确定可以释放引用的对象时,通过 PhantomReference 创建的对象将被销毁。这种类型的引用用作最终确定的替代方案(以实现更灵活的资源释放)。
这是高级 Java 开发人员面试问题的完整列表。我没有包含很多在高级开发人员中非常流行的关于异常处理、垃圾收集器、JVM 配置的重要问题,也许我会在下一部分中包含它们。但如果您没有找到任何问题的答案,请告诉我,我将为我的普通读者更新这篇文章。
GO TO FULL VERSION