JavaRush /Java блог /Random UA /15 питань до технічного інтерв'ю Java програміста з 5-6 р...
dio
16 рівень
Москва

15 питань до технічного інтерв'ю Java програміста з 5-6 річним досвідом роботи

Стаття з групи Random UA
Зі зростанням досвіду програміста від рівня розробника-початківця (від 2 до 4 років досвіду роботи) до рівня старшого розробника (від 5 до 7 років) змінюються і питання на інтерв'ю по Core Java. 15 питань до технічного інтерв'ю Java програміста з 5-6-річним досвідом роботи - 1Звичайно такі основи як структури даних, алгоритми та об'єктно-орієнтоване програмуваннязалишаються, але питання та відповіді стають більш докладними. Я часто отримую питання про те, які питання щодо Core Java ставлять старшим розробникам, або яких питань варто очікувати на співбесіді на позицію старшого розробника Java. Це мене на деякий час спантеличує, адже як тільки ви станете старшими розробниками, ви автоматично почнете брати участь у співбесідах і вам треба мати уявлення про те, чого очікувати від співбесіди, але в той же час, я розумію, що знаючи питання співбесіди, вам буде легше підготуватися до нього. Звичайно, ви не отримаєте питань, які ставлять програмістам з 2-3 роками досвіду роботи з Java, хоча на початку співбесіди це не виключено. Я не бачу відмінностей між телефонними інтерв'ю і співбесідами віч-на-віч. Якісь питання залишаються тими ж, якісь питання вимагають більш докладних відповідей. У цій статті я поділюся15 технічними питаннями з Core Java , які задавалися під час співбесід старших розробників під час телефонного інтерв'ю. Я не публікую всі відповіді, але ви можете знайти їх у поточному блозі або блозі Javarevisited .

15 питань щодо Core Java для програмістів з 5-6 досвідом розробки

Всі питання були отримані від працюючих старших розробників, які мають більш ніж 5-річний досвід роботи. Розробники зустрічалися з цими питаннями на різних етапах працевлаштування, включаючи телефонні інтерв'ю та співбесіди віч-на-віч.
  1. Як працює метод getкласу HashMapJava?

    Так, це, як і раніше, одне з найпопулярніших питань для старшого розробника, ви повинні чекати його на телефонному інтерв'ю, після нього можливо буде багато суміжних питань, подивіться відповіді на них тут .

  2. Які 2 методи має реалізувати об'єкт ключа HashMap?

    equalsіhashcode

  3. Чому об'єкти, що використовуються як ключ, повинні бути іммутабельними (незмінними)?

    Щоб хеш-код завжди повертав одне й те саме значення.

  4. Завдяки чому ConcurrentHashMapдосягається масштабованість?

    Іноді це питання звучить на інтерв'ю як: різниця між ConcurrentHashMapі HashtableJava, пошукайте відповіді тут .

  5. Як зробити об'єкт спільним для різних потоків? Або як передати об'єкт від одного потоку до іншого?

    Є багато шляхів реалізації цього, такі як черги, обмінники, але блоковані черги з шаблоном проектування Producer/Consumer це найпростіший спосіб передати об'єкт з одного потоку в інший.

  6. Як дізнатися, що у вашій програмі є взаємне блокування?

    (Отримавши дамп потоку, використовуючи kill -3, застосовуючи JConsole чи VisualVM). Я пропоную підготуватися до цього питання на інтерв'ю дуже ретельно, оскільки інтерв'юери люблять деталі, вони запитують, чи були у вашому проекті подібні проблеми і як вам вдалося їх вирішити.

  7. Як уникнути взаємних блокувань під час кодування?

    Щоб розібратися з блокуваннями і отримати повну інформацію про тему, прочитайте це .

  8. Що таке очікування зайнятості ("Busy spinning")? Чому ви маєте використовувати його?

    Одне з найцікавіших питань багатопоточності для старшого розробника Java, Busy spinning – це стратегія очікування, коли потік виконує очікування в циклі, при цьому не використовуючи ресурси процесора і як би засинаючи . Цю стратегію використовують, коли час очікування дуже мало, при цьому не навантажується процесор і не зупиняється потік, зберігаються всі дані, які можуть бути втрачені при запуску потоку на іншому ядрі процесора. Це питання популярне у програмістів, які створюють високо навантажені проекти, де програмісти домагаються надзвичайно низьких затримок у роботі, в діапазоні мікро- і мілі-секунд.

  9. Що таке блокування Читання та Записи ( ReadWriteLock)? Чи використовує ConcurrentHashMap ReadWriteблокування?

    Блокування Читання та Записи це така реалізація блокування, коли кілька різних потоків намагаються зробити операцію читання та запису з одним об'єктом. сама собою операція читання не змінює об'єкт, що допускає багатопотокові операції читання без блокувань. Java надає реалізацію ReadWriteLockз якою варто ознайомитись. Наприклад , ConcurrentHashMapне застосовує ReadWriteLock, замість цього він ділить Hashна окремі частини і блокує їх окремо, таким чином у будь-який момент часу заблокована тільки частина хеша, а не він весь. Це питання популярне у досвідчених розробників, які зазвичай просять відповісти докладніше, запитують різні реалізації ReadWriteLock для різних випадків.

  10. Як зробити об'єкт іммутабельним (не змінним) Java? Навіщо робити об'єкт іммутабельним?

    Імутабельність передбачає кілька переваг, включаючи потокобезпеку, можливість кешування, а так само робить багатопоточний код більш читаним.

    Подивіться це та навчитеся робити об'єкти іммутабельними. На співбесіді з цього питання можливі додаткові уточнення залежно від повноти вашої відповіді. Наприклад коли ви кажете, що Spring іммутабельний, будьте готові відповісти чому рядки так само іммутабельні Java.

  11. Які шаблони проектування використовуєте?

    Завжди чекайте на питання про шаблони проектування на співбесіді до вакансії старшого розробника. Краще відзначити будь-який GOF шаблон, а не Singleton або MVC, який використовує кожен другий Java програміст. Найкращою відповіддю може бути шаблон Декоратор або шаблон Впровадження залежності , які досить популярні в Spring Framework. Так само добре, якщо звані вами шаблони проектування ви дійсно використовували і знаєте, до якого компромісу веде їх застосування. Як тільки ви скажете назву шаблону проектування, наприклад: "Фабрика", інтерв'юер відразу запитає: "Ви використовували це у своїх проектах?" Тому будьте готові навести приклади та розповісти чому ви вибрали у своєму проекті саме цей шаблон.

  12. Чи знаєте ви про принцип Відкритості/Закритості чи Принцип підстановки Барбари Лисків ?

    Шаблони проектування ґрунтуються на принципах об'єктно-орієнтованого проектування.

    Настійно рекомендую подивитися мою статтю 10 принципів об'єктно орієнтованого дизайну , які повинен знати програміст Java, принаймні мати уявлення про те, як ці принципи допоможуть вам писати об'єктно орієнтований код. Якщо у вас немає відповіді на це питання, ви можете ввічливо відповісти "ні", ніхто не очікує від вас знання відповіді на всі запитання. Однак, знаючи відповідь на питання, яке викликає труднощі у більшості розробників, ви робите свою кандидатуру на співбесіді дуже сильною.

  13. Який шаблон проектування використовуватимете, щоб захистити ваш код від сторонньої бібліотеки, яка буде замінена через кілька років?

    Це лише один з можливих варіацій питання про шаблони проектування, які можуть бути задані вам залежно від того, про що ви говорите зараз на співбесіді. Один із способів як захистити свій код від сторонньої бібліотеки, це залежність від інтерфейсу, а не від реалізації та використання залежностей, щоб забезпечити конкретну реалізацію. Подібні питання часто ставлять старшим розробникам із 5-7 роками досвіду роботи.

  14. Як запобігти SQL ін'єкції в коді Java?

    Це питання частіше ставлять Java EE розробникам, ніж звичайним Java програмістам, проте це чудова нагода дізнатися про PreparedStatement. PreparedStatement - це об'єкт, який представляє попередньо скомпільований SQL-оператор. Підпорядкованедержавність не тільки забезпечує більш високу продуктивність, але й захищає від SQL ін'єкцій. Якщо ви працюєте здебільшого з Java EE або J2EE, ви повинні бути знайомі з деякими питаннями безпеки, у тому числі "атака Фіксації Сесії" або "міжсайтовий скриптинг", так само вам потрібно вміти уникати цих атак.

  15. Розкажіть про відмінності типів посилань у Java, таких як WeakReference, SoftReference та PhantomReference? І чому ви маєте їх використовувати?

    По суті, різницю між усіма типами посилань лише одне — поведінка Java Garbage Collector з об'єктами, куди вони посилаються. У Java об'єкти, створювані через оператор new створюються за сильним посиланням. Складальник сміття (garbage collector) знищує такі об'єкти тільки тоді, коли на них більше не залишається сильних посилань. У пакеті java.lang.ref є 3 класи, які описують 3 типи посилань, відповідно SoftReference, WeakReference, PhantomReference. Об'єкти, створені через SoftReference, будуть зібрані, якщо JVM вимагає пам'ять. Тобто є гарантія, що всі SoftReference об'єкти будуть зібрані, перш ніж JVM викине виняток OutOfMemoryError. SoftReference часто використовується для кешів, які споживають велику кількість пам'яті. WeakReference не рятує об'єкт від фіналізації, навіть якщо є достатньо вільної пам'яті. Як тільки на об'єкт не залишиться strong та soft посилань, він може бути фіналізований. Використовується для кешів і створення ланцюгів пов'язаних між собою об'єктів. Об'єкти, створені через PhantomReference, знищуються тоді, коли GC визначають, що об'єкти, що посилаються, можуть бути звільнені. Цей тип посилань використовується як альтернатива фіналізації (для більш гнучкого звільнення ресурсів).

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

Оригінальна стаття: 15 Technical Core Java Interview Questions Answers for Experienced Developers
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ