Heim >Java >javaLernprogramm >Zusammenfassung oft vergessener Java-Interviewfragen

Zusammenfassung oft vergessener Java-Interviewfragen

黄舟
黄舟Original
2017-03-23 10:43:461437Durchsuche

Statische Klassen und statische Methoden

Wenn eine Klasse als statisch deklariert werden soll, gibt es nur einen Fall, nämlich eine statische innere Klasse.

Statische innere Klassen sind eigentlich die gleichen wie gewöhnliche Klassen (d. h. Klassen der obersten Ebene, deren Klassennamen mit den Dateinamen identisch sein müssen), mit der Ausnahme, dass statische innere Klassen innerhalb einer bestimmten Klasse definiert sind Es handelt sich um Klassen. Wenn Sie sie verwenden möchten, müssen Sie sie instanziieren. Vom Konzept her unterscheiden sie sich von statischen Variablen und statischen Methoden. Lassen Sie sich nicht durch das Wort „statisch“ verwirren (denken Sie nicht, dass alle statischen Dinge direkt ohne Instanziierung verwendet werden können. Statische innere Klassen gibt es ist ein Unterschied) und es gibt nur statische innere Klassen, aber es gibt kein Konzept für statische Klassen (Klassen der obersten Ebene).

z.B.

public class Singleton{
    private Singleton(){}

    private static class SingletonHolder{
        private final static Singleton instance;
    }

    public Singleton getInstance(){
        return SingletonHolder.instance;
    }
}

Statische Methoden können nur auf statische Mitglieder zugreifen, Instanzmethoden können sowohl auf statische als auch auf Instanzmitglieder zugreifen. Der Grund, warum statische Methoden nicht auf Instanzmitgliedsvariablen zugreifen dürfen, liegt darin, dass Instanzmitgliedsvariablen zu einem bestimmten Objekt gehören und das Objekt nicht unbedingt vorhanden ist, wenn eine statische Methode ausgeführt wird. Das Schlüsselwort this kann in statischen Methoden nicht verwendet werden.

Invertierter Index

Invertierter Index

Es ist möglicherweise einfacher zu verstehen, wenn es in einen transponierten Index übersetzt wird, was einer Matrixtransponierung entspricht.

Invertierter Index ist eine Indexierungsmethode, die zum Speichern einer Zuordnung des Speicherorts eines Worts in einem Dokument oder einer Gruppe von Dokumenten im Rahmen einer Volltextsuche verwendet wird.

Reflection

ReflectionDer in der API bereitgestellte dynamische Proxy ist ebenfalls eine sehr leistungsstarke Funktion und kann die Methodenabfangfunktion in AOP nativ implementieren. Genau wie die Bedeutung des englischen Wortes „Reflection“ ist die Verwendung der Reflection-API so, als würde man die Reflektion einer Java-Klasse im Wasser betrachten. Nachdem Sie die interne Struktur einer Java-Klasse kennen, können Sie mit ihr interagieren, einschließlich der Erstellung neuer Objekte und dem Aufruf von Methoden in den Objekten.

Diese Interaktionsmethode hat den gleichen Effekt wie die Verwendung direkt im Quellcode, bietet jedoch zusätzliche Laufzeitflexibilität. Einer der größten Nachteile der Verwendung von Reflektion ist die schlechte Leistung. Für denselben Vorgang ist die Zeit, die für die Verwendung der Reflection-API erforderlich ist, wahrscheinlich ein oder zwei Größenordnungen langsamer als für die direkte Verwendung. In der aktuellen JVM-Implementierung wurde die Leistung von Reflexionsoperationen jedoch erheblich verbessert.

Die erste Hauptfunktion der Java Reflection API besteht darin, die interne Struktur des Programms zur Laufzeit abzurufen.

Mehrweg-Zusammenführungsalgorithmus

Merge-Sortierung ist ebenfalls ein effektiver Sortieralgorithmus, der mit der Divide-and-Conquer-Methode implementiert wurde. Er wurde 1990 von John von Neumann, dem Begründer der modernen Computer, erfunden 1945.

Zusammenführungssortierung ist eine stabile Sortierung und unter vielen Sortieralgorithmen sehr effizient. Gleichzeitig kann Zusammenführungssortierung nicht nur für die interne Sortierung, sondern auch für die externe Sortierung verwendet werden.

Die Idee der Zusammenführungssortierung ist wie folgt (am Beispiel der bidirektionalen Zusammenführung):

  • Teilen Sie das Array in zwei Unterarrays;

  • Sortieren Sie die beiden Wortarrays

  • Fügen Sie die beiden sortierten Wortarrays zusammen.

Bei der sogenannten N-Wege-Zusammenführung wird das Array in N Unterarrays aufgeteilt, das Array sortiert und dann zusammengeführt. Daher ist die bidirektionale Zusammenführung der allgemeinste Fall der Zusammenführungssortierung.

z.B.

Legende

def msort(array):
    length = len(array)
    if length == 1:
        return array
    else:
        mid = length / 2
        left = msort(array[0: mid])
        right = msort(array[mid: length])
        return merge(left, right)

Nicht rekursiv

def msort(array):
    length = len(array)
    step = 1
    while step < length:
        for left in range(0, length - step, 2 * step):
            result = merge(array[left:left + step],
                           array[left + step: min(left + 2 * step,
             length)])
            array = array[0:left] + result + array[min(left + 2 *
                                                       
           step, length)]
        step = step * 2
    return array
def merge(left, right):
    llen = len(left)
    lcur = 0
    rlen = len(right)
    rcur = 0
    result = []
    while lcur < llen and rcur < rlen:
        lone = left[lcur]
        rone = right[rcur]
        result.append(min(lone, rone))
        if lone < rone:
            lcur += 1
        else:
            rcur += 1
    result += left[lcur:]
    result += right[rcur:]
    return result

Aufzählungstyp

Aufzählungstyp

  • Aufzählungstyp unterstützt den Konstruktor von öffentlichen und geschützten Modifikatoren nicht, daher muss der Konstruktor privat sein oder freundlich. Aus diesem Grund kann das Aufzählungsobjekt im Programm nicht durch direkten Aufruf seines Konstruktors initialisiert werden.

  • Da der Wert des Aufzählungstyps tatsächlich durch ein zur Laufzeit erstelltes Objekt dargestellt wird, erstellt in der Clusterumgebung jede virtuelle Maschine ein synonymes Aufzählungsobjekt. Daher müssen Sie bei der Durchführung von Vergleichsoperationen darauf achten, dass diese scheinbar identischen Aufzählungswerte nicht gleich sind, da es sich nicht um dieselbe Objektinstanz handelt.

Multithreading

Es gibt zwei Möglichkeiten, Multithreading in Java zu implementieren: die Thread-Klasse zu erben und die Runnable-Schnittstelle zu implementieren, sofern es sich um Multithreading handelt. In der Programmentwicklung wird immer die Runnable-Schnittstelle implementiert, da die Implementierung der Runnable-Schnittstelle die folgenden Vorteile gegenüber der Erbung der Thread-Klasse bietet:

1. Dadurch können die durch Java verursachten Einschränkungen vermieden werden Einzelvererbungsfunktion;

2. Verbessern Sie die Robustheit des Programms, der Code kann von mehreren Threads gemeinsam genutzt werden und der Code und die Daten sind unabhängig

3. Geeignet für Situationen, in denen mehrere Threads vorhanden sind Bereiche desselben Programmcodes verarbeiten dieselbe Ressource.

Das Folgende ist ein Multithread-Programm, das durch Implementierung der Runnable-Schnittstelle implementiert wird. Der Code lautet wie folgt:

lass MyThread implements Runnable{  
    private int ticket = 5;  
    public void run(){  
        for (int i=0;i<10;i++)  
        {  
            if(ticket > 0){  
                System.out.println("ticket = " + ticket--);  
            }  
        }  
    }  
}  

public class RunnableDemo{  
    public static void main(String[] args){  
        MyThread my = new MyThread();  
        new Thread(my).start();  
        new Thread(my).start();  
        new Thread(my).start();  
    }  
}

Das obige ist der detaillierte Inhalt vonZusammenfassung oft vergessener Java-Interviewfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn