JavaRush /Java Blog /Random-IT /Livello 21. Risposte alle domande dell'intervista sull'ar...
zor07
Livello 31
Санкт-Петербург

Livello 21. Risposte alle domande dell'intervista sull'argomento del livello

Pubblicato nel gruppo Random-IT
Livello 21. Risposte alle domande dell'intervista sull'argomento del livello - 1
  1. Elenco metodi di classeObject

    • equals()
    • hashCode()
    • toString()
    • getClass()
    • notify()
    • notifyAll()
    • wait()
    • wait(long timeOut)
    • wait(long timeOut, int nanos)
  2. Perché sono necessari i metodi equals& hashCode?

    Utilizzato per confrontare oggetti.

    Lo scopo del metodo equalsè determinare se gli oggetti sono internamente identici confrontando il contenuto interno degli oggetti. Funziona equalslentamente, prima vengono confrontati i codici hash degli oggetti e, se i codici hash sono uguali, viene effettuato un controlloequals

  3. Cosa succede se si esegue l'override di equals ma non si esegue l'override hashCode?

    Inizialmente hashCode, un numero casuale.

    equalsLe raccolte in Java le cercano/confrontano sempre utilizzando il metodo prima di confrontare gli oggetti utilizzando hashCode(). E se oggetti identici sono diversi hashCode, allora gli oggetti saranno considerati diversi: semplicemente non sarà possibile confrontarli utilizzandoli equals.

  4. Perché i metodi wait, notify, notifyAll?

    A volte in un programma può verificarsi una situazione in cui un thread ha inserito un blocco di codice synchronized, bloccato il monitor e non può funzionare ulteriormente, perché mancano ancora alcuni dati: ad esempio il file che dovrebbe elaborare non è stato ancora caricato o qualcosa del genere. È stato inventato un metodo per risolvere questo problema wait(). La chiamata a questo metodo fa sì che il thread rilasci il monitor e "metta in pausa".

    Per riattivare vengono utilizzati i metodi notify. notifyAllIl metodo notify“sblocca” un thread casuale, il metodo notifyAll– tutti i thread “congelati” di un determinato monitor.

  5. Come clonare correttamente un oggetto?

    Due tipi di clonazione.

    Per clonare un oggetto predefinito:

    • Aggiungi un'interfaccia Cloneablealla tua classe
    • Sostituisci il metodo clonee chiama l'implementazione di base al suo interno:
    class Point implements Cloneable
    {
     int x;
     int y;
    
     public Object clone()
     {
      return super.clone();
     }
    }

    Oppure puoi scrivere clonetu stesso l'implementazione del metodo:

    class Point
    {
     int x;
     int y;
    
     public Object clone()
     {
      Point point = new Point();
      point.x = this.x;
      point.y = this.y;
      return point;
     }
    }
  6. Perché è necessario il metodo finalize()e come funziona?

    Se ricordi, questo finalize()è un metodo speciale che viene chiamato su un oggetto prima che il garbage collector lo distrugga.

    Lo scopo principale di questo metodo è rilasciare le risorse esterne non Java utilizzate: chiudere file, flussi I/O, ecc.

    finalize()funziona instabile.

    Questo metodo non è all'altezza delle aspettative riposte su di esso. La macchina Java può ritardare la distruzione di un oggetto, così come la chiamata di un metodo, finalizeper tutto il tempo che desidera. Inoltre, non garantisce affatto che questo metodo verrà chiamato. In molte situazioni, per motivi di “ottimizzazione” non viene chiamato.

  7. Qual è la differenza final, finally, finalize?

    • final- modificatore
    • I campi non possono essere modificati, i metodi vengono sovrascritti
    • Le classi non possono essere ereditate
    • Questo modificatore si applica solo a classi, metodi e variabili (anche variabili locali)
    • Gli argomenti del metodo contrassegnati come sono di finalsola lettura; il tentativo di modificarli comporterà un errore di compilazione.
    • Переменные final не инициализируются по умолчанию, им необходимо явно присвоить meaning при объявлении or в конструкторе, иначе – ошибка компиляции
    • Если final переменная содержит ссылку на an object, an object может быть изменен, но переменная всегда будет ссылаться на тот же самый an object
    • Также это справедливо и для массивов, потому что массивы являются an objectми, – массив может быть изменен, а переменная всегда будет ссылаться на тот же самый массив
    • Если класс объявлен final и abstract (взаимоисключающие понятия), произойдет ошибка компиляции
    • Так How final класс не может наследоваться, его методы никогда не могут быть переопределены

    finally — блок в связке try-catch-finally, code в котором выполнится независимо от того вылетело ли исключение в блоке try or нет. Используется для освобождения ресурсов.

    finalize — метод в классе Object см 6.

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

    Это специальная конструкция try, называемая try-with-resources, в которой Обрати внимание – после try следуют круглые скобки, где объявляются переменные и создаются an objectы. Эти an objectы можно использовать внутри блока try, обозначенного скобками {}. Когда выполнение команд блока try закончится, независимо от того – нормально оно закончилось or было исключение, для an object, созданного внутри круглых скобок (), будет вызван метод close();

  9. Чем отличаются методы wait(1000) и sleep(1000)?

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

    wait() меняет состояние потока на WAITING

    может быть вызвано только у an object владеющего блокировкой, в противном случае выкинется исключение IllegalMonitorStateException. при срабатывании метода блокировка отпускается, что позволяет продолжить работу другим потокам ожидающим захватить ту же самую блокировку . в случае wait(int) с аргументом состояние будет TIMED_WAITING

  10. В чем отличие i++ и ++i?

    • ++i, i сначала увеличивается на 1, затем участвует в выражении.
    • i++, i сначала участвует в выражении, затем увеличивается на 1.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION