JavaRush /Java блог /Random UA /Рівень 21. Відповіді на запитання до співбесіди на тему р...
zor07
31 рівень
Санкт-Петербург

Рівень 21. Відповіді на запитання до співбесіди на тему рівня

Стаття з групи Random UA
Рівень 21. Відповіді на запитання до співбесіди на тему рівня - 1
  1. Перерахуйте методи класуObject

    • equals()
    • hashCode()
    • toString()
    • getClass()
    • notify()
    • notifyAll()
    • wait()
    • wait(long timeOut)
    • wait(long timeOut, int nanos)
  2. Навіщо потрібні методи equals?hashCode

    Використовуються для порівняння об'єктів.

    Мета методу equals– визначити чи ідентичні об'єкти всередині, порівнявши внутрішній зміст об'єктів. Так equalsпрацює повільно, спочатку порівнюються хеш коди об'єктів, і, в тому випадку, якщо хеш коди рівні, йде перевіркаequals

  3. Що буде, якщо перевизначити equals, але не перевизначити hashCode?

    Спочатку hashCode- випадкове число.

    Колекції Java перед тим як порівняти об'єкти за допомогою equalsзавжди шукають/порівнюють їх за допомогою методу hashCode(). І якщо у однакових об'єктів будуть різні hashCode, то об'єкти будуть вважатися різними — порівняння за допомогою equalsпросто не дійде.

  4. Навіщо потрібні методи wait?notifynotifyAll

    Іноді у програмі може бути така ситуація, що нитка увійшла блок коду synchronized, заблокувала монітор і може працювати далі, т.к. якихось даних ще не вистачає: наприклад, файл який вона повинна обробити ще не завантажився або щось таке. Для вирішення цієї проблеми і був придуманий метод wait(). Виклик цього методу призводить до того, що нитка звільняє монітор і стає на паузу.

    Для зняття з паузи використовують методи notify, notifyAll. Метод notify«розморожує» одну випадкову нитку, метод notifyAll– усі «заморожені» нитки монітора.

  5. Як правильно клонувати об'єкт?

    Два типи клонування.

    Для клонування за замовчуванням об'єкта потрібно:

    • Додати інтерфейс Cloneableдо свого класу
    • Перевизначити метод cloneта викликати в ньому базову реалізацію:
    class Point implements Cloneable
    {
     int x;
     int y;
    
     public Object clone()
     {
      return super.clone();
     }
    }

    Або можна написати реалізацію методу cloneсамому:

    class Point
    {
     int x;
     int y;
    
     public Object clone()
     {
      Point point = new Point();
      point.x = this.x;
      point.y = this.y;
      return point;
     }
    }
  6. Навіщо потрібний метод finalize()і як він працює?

    Якщо ти пам'ятаєш, то finalize()це спеціальний метод, який викликається у об'єкта перед тим, як збирач сміття його знищить.

    Основна мета цього методу – звільнити зовнішні не-Java ресурси, що використовуються: закрити файли, потоки вводу-виводу і т.п.

    finalize()працює нестабільно.

    Цей метод не виправдовує покладених на нього надій. Java-машина може відкласти знищення об'єкта, як і виклик методу finalizeскільки завгодно. Більше того, вона взагалі не гарантує, що цей метод буде викликано. У купі ситуацій заради «оптимізації» він не викликається.

  7. У чому finalвідмінність finally?finalize

    • final- Модифікатор
    • Поля не можуть бути змінені, методи перевизначені
    • Класи не можна наслідувати
    • Цей модифікатор застосовується тільки до класів, методів та змінних (також і до локальних змінних)
    • Аргументи методів, позначені як final, призначені лише для читання, при спробі зміни буде помилка компіляції
    • Змінні finalне ініціалізуються за умовчанням, їм необхідно явно надати значення при оголошенні або в конструкторі, інакше - помилка компіляції
    • Якщо final змінна містить посилання на об'єкт, об'єкт може бути змінений, але змінна завжди буде посилатися на той самий об'єкт
    • Також це справедливо і для масивів, тому що масиви є об'єктами, – масив може бути змінений, а змінна завжди посилатиметься на той самий масив.
    • Якщо клас оголошений finalі abstract(взаємовиключні поняття), буде помилка компіляції
    • Так як finalклас не може успадковуватись, його методи ніколи не можуть бути перевизначені

    finally— блок у зв'язці try-catch-finally, код у якому виконається незалежно від того, чи вилетів виняток у блоці tryчи ні. Використовується для звільнення ресурсів.

    finalize- Метод у класі Objectсм 6.

  8. Що таке try-with-resources?

    Це спеціальна конструкція try, звана try-with-resources, в якій звернути увагу - після tryйдуть круглі дужки, де оголошуються змінні і створюються об'єкти. Ці об'єкти можна використовувати всередині блоку try, позначеного дужками {}. Коли виконання команд блоку tryзакінчиться, незалежно від цього – нормально воно закінчилося чи було виняток, для об'єкта, створеного всередині круглих дужок (), буде викликаний метод close();

  9. Чим відрізняються методи wait(1000)і sleep(1000)?

    sleep()зупиняє потік на вказане. стан змінюється на TIMED_WAITING, після закінчення - RUNNABLE

    wait()змінює стан потоку на WAITING

    може бути викликано тільки у об'єкта, що володіє блокуванням, в іншому випадку викинеться виняток IllegalMonitorStateException . при спрацьовуванні методу блокування відпускається, що дозволяє продовжити роботу іншим потокам, що очікують захопити ту ж саму блокування . у випадку wait(int)з аргументом стан буде TIMED_WAITING

  10. У чому відмінність i++і ++i?

    • ++iiспочатку збільшується на 1, потім бере участь у виразі .
    • i++спочатку бере участь у виразі i, потім збільшується на 1.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ