Fragen zum Android-Interview im Jahr 2020

1. Die vier Hauptkomponenten von Android

1. Was sind die Android-Designmuster? Was ist der Proxy-Modus, der Factory-Modus? Was ist der Unterschied zwischen einem einfachen Fabrikmuster und einem abstrakten Fabrikmuster?

Singleton-Modus:

 Schreiben Sie einen Singleton-Mustercode. Es gibt viele Möglichkeiten, Singletons zu implementieren, z. B. Lazy Style, Hungriger Stil, statische innere Klasse, doppelte Sperrprüfung, Aufzählung usw. Daher ist es notwendig, die Hauptmerkmale und Verwendungsszenarien jedes Implementierungsstils zu kennen.

Der Hungrig-Man-Modus hat bei der Initialisierung der Klasse bereits Objekte im Speicher erstellt und Raum gegen Zeit ausgetauscht, sodass kein Problem mit der Thread-Sicherheit besteht.

Der Lazy-Man-Modus erstellt das Objekt nach dem Aufruf der Methode und tauscht Zeit gegen Speicherplatz, was in einer Multithread-Umgebung riskant ist.


2. Was ist der Unterschied zwischen den beiden Startmodi des Dienstes? Beim Erstellen eines Dienstes im bindService-Modus kann ServiceConnection den Status des Dienstes überwachen. Wie viele Identifikationsstatus gibt es?

Unterschied im Lebenszyklus; Beziehung zum Aktivitätslebenszyklus.

ServiceConnection kann den Status des Dienstes überwachen. Beim Binden des Dienstes können seine Flags die folgenden Typen haben (hier sind 3 Typen):

1).Context.BIND_AUTO_CREATE    

  Beschreibung: Wenn der Dienst beim Empfang der Bindungsanforderung nicht erstellt wurde, wird er sofort erstellt. Wenn der Systemspeicher nicht ausreicht, muss die Prioritätskomponente zuerst zerstört werden, um den Speicher freizugeben, und nur dann, wenn der Prozess, in dem sie sich befindet, ausgeführt wird Der Dienst wird zum zerstörten Objekt, der Dienst wird zerstört. zerstört werden

2).Context.BIND_DEBUG_UNBIND    

  Beschreibung: Es wird normalerweise in Debugging-Szenarien verwendet, um zu beurteilen, ob der gebundene Dienst korrekt ist. Es kann jedoch leicht zu Speicherverlusten führen und wird daher nicht für Nicht-Debugging-Zwecke empfohlen

3).Context.BIND_NOT_FOREGROUND    

  Beschreibung: Gibt an, dass das System verhindert, dass der Prozess, der sich im Dienst befindet, Vordergrundpriorität hat und nur im Hintergrund ausgeführt wird. Dieses Flag wird in Froyo eingeführt.

3. Vier Startmodi für Aktivität, Pop-Out- und Push-Stapel-Mechanismus.

10. Frameworks, die häufig in Projekten verwendet werden

11. Aktivität, Fragment, Service-Lebenszyklus

Referenz: https://blog.csdn.net/q1113225201/article/details/76595460

Aktivität:

onCreate(): Wird ausgeführt, wenn die Aktivität zum ersten Mal startet.

onStart(): Wird ausgeführt, wenn die Aktivität sichtbar ist.

onResume(): Wird ausgeführt, wenn die Aktivität den Fokus des Benutzers erhalten kann.

onPause(): Wird ausgeführt, wenn die Aktivität sichtbar ist, aber den Fokus verliert.

onStop(): Wird ausgeführt, wenn sich die Aktivität in einem unsichtbaren Zustand befindet.

onRestart(): Wird ausgeführt, wenn die Aktivität erneut aufgerufen wird und die Aktivität nicht zerstört wird.

onDestory(): Wird ausgeführt, wenn die Aktivität zerstört wird;
Fragment:

onAttach(): Fragment und Aktivität vervollständigen die Bindung;

onCreate(): Fragment initialisieren, nur einmal aufgerufen;

onCreateView(): Initialisiert das Layout des Fragments;

onActivityCreated(): Wird aufgerufen, nachdem die onCreate-Methode der Aktivität ausgeführt wurde.

onStart(): ausführen, wenn das Fragment sichtbar ist;

onResume(): Wird ausgeführt, wenn das Fragment den Fokus erhalten kann;

onPause(): Wird ausgeführt, wenn das Fragment sichtbar ist, aber den Fokus verliert;

onStop(): Wird ausgeführt, wenn das Fragment unsichtbar ist.

onDestoryView(): Fragmentlayout wird entfernt, aber nicht von der Aktivität gelöst;

onDestory(): Fragment zerstören;

onDetch(): Mit Aktivität trennen;

Service:
startService启动:onCreate,onStartCommand,onDestroy

bindService-Funktionen: onCreate, onBind, onUnBind, onDestroy

12. Android 6.0, 7.0 und höher, Dinge, auf die bei der Entwicklung geachtet werden muss.

13. Binder-Kommunikationsmechanismus, wie Binder von verschiedenen App-Prozessen verwendet wird, wie Binder gestartet wird

Zweitens: Multithreading

1. Zwei Möglichkeiten zum Erstellen von Threads in Android und deren Vergleich

    Thread erben; Runnable-Schnittstelle implementieren.

2. Einstellung der Thread-Priorität

setPriority legt die Priorität des Threads fest. Der Bereich liegt zwischen 0 und 10, der Standardwert ist 5

3. Wie implementiert AsyncTask die asynchrone Kommunikation zwischen dem Hauptthread und dem Arbeitsthread?

4. Die Verwendung von HandlerThread

Erben Sie die Thread-Klasse und kapseln Sie die Handler-Klasse

5. Thread-Pool-Implementierungsmechanismus, vier häufig verwendete Thread-Pools.

FixedThreadPool – ein Thread-Pool mit einer festen Anzahl wiederverwendbarer Threads , ein Thread-Pool mit einer festen Anzahl, und die Aufgabenwarteschlange hat keine Größenbeschränkung;
        es gibt nur Kern-Threads, und die Kern-Threads haben hier keine Zeitüberschreitungsbeschränkung, weil Es wird nicht recycelt und kann daher schneller reagieren.
CachedThreadPool – ein Thread-Pool, der     Threads entsprechend den Anforderungen erstellt
Die maximale Anzahl von Threads ist Integer. MAX_VALUE eignet sich
    für eine große Anzahl weniger zeitaufwändiger Aufgaben. Task
SingleThreadExecutor – der Thread-Pool eines einzelnen Arbeitsthreads
    verfügt nur über einen Kernthread, und alle Aufgaben werden nacheinander im selben Thread ausgeführt Es besteht keine Notwendigkeit, sich mit der Thread-Synchronisierung zu befassen. ScheduledThreadPool – ein
Thread- Pool, der Timing- und periodische Aufgaben implementieren kann
    . Die Anzahl der Kern-Threads ist festgelegt, während Nicht-Kern-Threads unbegrenzt sind und Nicht-Kern-Threads recycelt werden, wenn sie inaktiv sind. Es eignet sich zur Ausführung geplanter Aufgaben und Aufgaben mit festem Zeitraum

Warum verwendet der Thread-Pool (blockierende) Warteschlangen?

Denn wenn der Thread unbegrenzt erstellt wird, kann es aufgrund übermäßiger Speichernutzung zu OOM und zu übermäßigem CPU-Umschalten kommen.
Die Kosten für die Erstellung eines Thread-Pools sind hoch. Thread-Pool-Erstellungsthreads müssen die globale Sperre „Mainlock“ erwerben, was sich auf die Effizienz der Parallelität auswirkt und Blockierungswarteschlangen gut gepuffert werden kann.


Warum verwendet der Thread-Pool blockierende Warteschlangen anstelle von nicht blockierenden Warteschlangen?
Die Blockierungswarteschlange kann sicherstellen, dass der Thread, der die Aufgabe abruft, blockiert wird, wenn sich keine Aufgabe in der Aufgabenwarteschlange befindet, sodass der Thread in den Wartezustand wechselt und CPU-Ressourcen freigibt. Wenn sich eine Aufgabe in der Warteschlange befindet, wird der entsprechende Thread aktiviert, um die Nachricht zur Ausführung aus der Warteschlange zu entnehmen. Damit der Thread nicht ständig CPU-Ressourcen belegt.


RejectedExecutionHandler: Sättigungsrichtlinie (insgesamt 4 Typen):
1.AbordPolicy: Neue Aufgaben können nicht verarbeitet werden und löst eine RejectedExecutionException aus.
2.CallerRunsPolicy: Verwenden Sie den Thread, in dem sich der Anrufer befindet, um die Aufgabe zu verarbeiten. Diese Strategie bietet einen einfachen Feedback-Kontrollmechanismus, der die Übermittlung neuer Aufgaben verlangsamt.
3. DiscardPolicy: Eine Aufgabe, die nicht ausgeführt werden kann. Die Aufgabe wird gelöscht.
4. DiscardOldestPolicy: Verwerfen Sie die neueste Aufgabe in der Warteschlange und führen Sie die aktuelle Aufgabe aus.

6. Die statische Methodensperre und die nicht statische Methodensperre unterscheiden sich im Zugriff.
7. Die Rolle von Volatilität

8. Warum sind Threads unsicher? Thread-unsichere Lösung?

Thread-Sicherheit bedeutet, dass in einer Multithread-Umgebung das Ergebnis jedes Laufs mit dem eines Single-Thread-Laufs übereinstimmt und die Werte anderer Variablen ebenfalls den Erwartungen entsprechen.

9. Warum ist HashMap bei Parallelität nicht threadsicher? Lösen Sie mit ConcurrentHashMap

10. Was ist ThreadLocal?

ThreadLocal ist kein Thread, sondern eine lokale Variable von Thread.

11. Eventbus-Prinzip

3. Prozess

1. Warum muss die AIDL-Kommunikation Objektdaten serialisieren? Ist das Objekt bei der Übertragung eines Objekts von einem Prozess auf einen anderen immer noch dasselbe Objekt?

Nicht dasselbe Objekt, da der Prozess keinen gemeinsamen Speicher nutzt, sodass die Objektspeicheradresse nicht gemeinsam genutzt wird und sich die Objektspeicheradresse geändert hat, sodass das Objekt kein Objekt ist.

2. AIDL-Kommunikationsmechanismus und Stub-Quellcode-Analyse

3. Haben Sie den Quellcode der Stub-Klasse gelesen, die die AIDL-Schnittstelle in Servie implementiert? Welche Methoden sind in der Stub-Klasse enthalten?

4. Netzwerk

1. Der Unterschied zwischen TCP und UDP

5. Sammlung

1. Das Funktionsprinzip von HashMap

     Das Konzept des Hashings Die Anwendung von equal() und hashCode()
     zur Lösung von Kollisionen in HashMap
    und ihre Bedeutung in HashMap
    Die Vorteile unveränderlicher Objekte
    HashMap Multithread-bedingter Wettbewerb
    Passen Sie die Größe von HashMap neu an

     Der Operationsprozess von Put und Get

    Der Unterschied und die Verbindung zwischen HashMap und Hashtable:

    Derselbe Punkt: Das Implementierungsprinzip ist dasselbe, die Funktion ist dieselbe, die unterste Ebene ist eine Hash-Tabellenstruktur, die Abfragegeschwindigkeit ist hoch und sie können in vielen Fällen austauschbar verwendet werden

   Unterschied:

    1. Hashtable ist eine zuvor bereitgestellte Schnittstelle und HashMap ist eine Schnittstelle, die von der neuen Version von JDK bereitgestellt wird.

    2. Hashtable erbt die Dictionary-Klasse und HashMap implementiert die Map-Schnittstelle.

    3. Hashtable ist Thread-sicher und HashMap ist nicht Thread-sicher.

    4. Hashtable erlaubt keine Nullwerte und HashMap erlaubt Nullwerte.

2. Der Unterschied zwischen den vier Referenztypen

Starke Referenz (Starke Referenz) unzureichender Speicher, nicht recycelt.
Soft-Referenzen (WeakReference) werden nicht wiederverwendet, wenn der Speicher nicht ausreicht, und werden wiederverwendet, wenn der Speicher nicht ausreicht.
Schwache Referenzen (SoftReference) werden jedes Mal recycelt.
Eine Phantomreferenz (PhantomReference) besitzt keine Objektinstanz und wird vom System benachrichtigt, wenn das Objekt recycelt wird.

3. Wie sortiere ich arraylist<String>?

Collections.sort-Methode, der Standardwert ist aufsteigend.

4. Der HashMap-Schlüssel ist ein Objekt. Wie wird er sortiert?

(1) Erstellen Sie eine einfache HashMap und fügen Sie einige Schlüssel und Werte ein.

Map<String,Integer> hashMap = new HashMap<String,Integer>(); 
hashMap.put("Five", 5); 
hashMap.put("Seven", 7);
hashMap.put("Four", 4);
hashMap.put("Acht", 8); 
hashMap.put("One", 1); 
hashMap.put("Two", 2); 
hashMap.put("Three", 3); 

(2) Verwenden Sie Set enterSet (): Geben Sie den Ansichtssatz des Map.Entry-Objekts zurück, dh das Schlüsselwort/Wert-Paar im Bild.

Set<Map.Entry<String,Integer>> mapEntries = hashMap.entrySet();

(3) Erstellen Sie eine LinkedList aus den oben genannten MapEntries. Wir werden diese verknüpfte Liste sortieren, um das Bestellproblem zu lösen.

List<Map.Entry<String,Integer>> aList = new LinkedList<Map.Entry<String,Integer>>(mapEntries); 

(4) Collections.sort() ist eine integrierte Methode, die nur eine Liste von Werten sortiert, standardmäßig in aufsteigender Reihenfolge.

(5) Speichern Sie die Werte nach der Sortierung in aufsteigender Reihenfolge erneut in der HashMap.

5. Erzählen Sie mir etwas über den Unterschied zwischen List, Set und Map?

 

6. Java

1. Was ist der Unterschied zwischen einer abstrakten Klasse und einer Schnittstelle? Wann sollte eine Schnittstelle anstelle einer abstrakten Klasse verwendet werden?

2. Der Unterschied zwischen Parallelität und Parallelität

3. Die drei Prinzipien der Parallelität – Atomarität, Sichtbarkeit, Ordnung und die Prinzipien, die durch das Schlüsselwort volatile erfüllt werden?

flüchtig: Nichtatomarität, Sichtbarkeit, Ordnung.

7. Algorithmus

1. Auswahlsortierung, Schnellsortierung?

8. Quellcode

1、SystemUI

九、JNI

1. Wie erhält die JNI-Schicht die Java-Schichtklasse und was ist das Implementierungsprinzip?

2. Der Unterschied zwischen lokalen und globalen Referenzen

3. Wie ist die Java-Umgebung der JNI-Schicht aufgebaut?

10. Ergänzung

1. Was sind die drei Werte des Beschleunigungssensors x, y und z?

      Die x-, y- und z-Werte stellen den Beschleunigungswert dar, die x-Richtung ist von links nach rechts, y ist von oben nach unten und z ist von innen nach außen

2. Was ist in der Serviceklasse der interne Implementierungsmechanismus der internen Klasse des Proxy-Agenten?

      Die zugrunde liegende Implementierung der Methoden asBinder und onTransact.

3. Beispiel für einen Projektfall zur Andriod-Speicheroptimierung.

4. Beispiel: Andriod-Speicherleck-Projektfall.

5. Warum kann Dialog den Anwendungskontext nicht verwenden?

6. Der Unterschied zwischen Jvm, Dalvik und Art.

7. Es gibt verschiedene Kommunikationsmethoden zwischen Android-Modulen.

     1) Event Bus EventBus: Reflexion + Polymorphismus.

     2) Routenweiterleitung: ActivityRouter

     3) Ausstrahlung

8. Was ist ANR? Timeout zum Beispiel.

9. Geben Sie Beispiele für bekannte Anwendungsframeworks oder Plug-ins von Drittanbietern an.

10. Android-Komponentisierung

11. OpenGL-Rendering-Prozess.

 

 

 

Ich denke du magst

Origin blog.csdn.net/github_27263697/article/details/107400650
Empfohlen
Rangfolge