15 คำถามเกี่ยวกับ Core Java สำหรับโปรแกรมเมอร์ที่มีประสบการณ์การพัฒนา 5-6 ระดับ
คำถามทั้งหมดได้รับจากนักพัฒนาอาวุโสที่ทำงานด้วยประสบการณ์มากกว่า 5 ปี นักพัฒนาพบคำถามเหล่านี้ในขั้นตอนต่างๆ ของการจ้างงาน รวมถึงการสัมภาษณ์ทางโทรศัพท์และแบบตัวต่อตัว-
get
วิธี การเรียน ทำงาน อย่างไรHashMap
ใน Java?ใช่ นี่ยังคงเป็นหนึ่งในคำถามยอดนิยมสำหรับนักพัฒนาอาวุโส คุณควรคาดหวังสิ่งนี้ในการสัมภาษณ์ทางโทรศัพท์ อาจมีคำถามที่เกี่ยวข้องมากมายหลังจากนั้น ตรวจสอบคำตอบได้ที่นี่
-
2 วิธีใดที่วัตถุหลักควร
HashMap
ใช้equals
และhashcode
-
เหตุใดวัตถุที่ใช้เป็นคีย์จึงไม่เปลี่ยนรูป?
เพื่อให้รหัสแฮชส่งคืนค่าเดียวกันเสมอ
-
ความสามารถในการปรับขนาดเกิดขึ้นได้ อย่างไร
ConcurrentHashMap
?บางครั้งคำถามนี้ฟังดูเหมือนนี้ในการสัมภาษณ์: ความแตกต่างระหว่าง
ConcurrentHashMap
และHashtable
ใน Java ค้นหาคำตอบได้ที่นี่ -
จะทำให้อ็อบเจ็กต์แชร์ระหว่างเธรดต่างๆ ได้อย่างไร? หรือจะส่งวัตถุจากเธรดหนึ่งไปยังอีกเธรดได้อย่างไร?
Есть много путей реализации этого, такие 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 Garbage Collector กับอ็อบเจ็กต์ที่อ้างอิงถึง ใน Java ออบเจ็กต์ที่สร้างขึ้นโดยใช้ตัวดำเนินการใหม่จะถูกสร้างขึ้นโดยการอ้างอิงที่รัดกุม ตัวรวบรวมขยะจะทำลายอ็อบเจ็กต์ดังกล่าวเฉพาะเมื่อไม่มีการอ้างอิงถึงวัตถุเหล่านั้นอีกต่อไป แพ็คเกจ java.lang.ref มี 3 คลาสที่อธิบายลิงก์ 3 ประเภท ตามลำดับ SoftReference, WeakReference, PhantomReference ออบเจ็กต์ที่สร้างผ่าน SoftReference จะถูกรวบรวมในกรณีที่ JVM ต้องการหน่วยความจำ นั่นคือ มีการรับประกันว่าออบเจ็กต์ SoftReference ทั้งหมดจะถูกรวบรวมก่อนที่ JVM จะส่งข้อยกเว้น OutOfMemoryError SoftReference มักใช้สำหรับแคชที่ใช้หน่วยความจำมาก WeakReference จะไม่บันทึกวัตถุไม่ให้ทำการสรุป แม้ว่าจะมีหน่วยความจำว่างเพียงพอก็ตาม ทันทีที่ไม่มีการอ้างอิงที่ชัดเจนและนุ่มนวลเหลืออยู่ในออบเจ็กต์ ก็สามารถสรุปผลได้ ใช้สำหรับแคชและสร้างลูกโซ่ของวัตถุที่เชื่อมต่อถึงกัน วัตถุที่สร้างขึ้นผ่าน PhantomReference จะถูกทำลายเมื่อ GC กำหนดว่าวัตถุที่อ้างอิงสามารถจัดสรรคืนได้ การอ้างอิงประเภทนี้ใช้เป็นทางเลือกในการสรุปผล (เพื่อการปล่อยทรัพยากรที่ยืดหยุ่นมากขึ้น)
นี่คือรายการคำถามสัมภาษณ์นักพัฒนา Java อาวุโสทั้งหมด ฉันไม่ได้รวมคำถามที่สำคัญมากมายเกี่ยวกับการจัดการข้อยกเว้น ตัวรวบรวมขยะ การกำหนดค่า JVM ซึ่งเป็นที่นิยมมากในหมู่นักพัฒนาอาวุโส บางทีฉันจะรวมคำถามเหล่านั้นไว้ในส่วนถัดไป แต่ถ้าคุณไม่พบคำตอบสำหรับคำถามใด ๆ โปรดแจ้งให้เราทราบแล้วฉันจะอัปเดตโพสต์นี้สำหรับผู้อ่านประจำของฉัน
GO TO FULL VERSION