Vor dem Fenster ist es frühlingsfeucht und matschig, aber im Herbst war es am HeadHunter-Stand sehr heiß. Wir haben den
ersten Teil des Quiz veröffentlicht , heute veröffentlichen wir den zweiten, damit Sie Ihr Gehirn vor zukünftigen Konferenzen ausdehnen können.
Lass uns gehen!

Lass uns gehen!
Frage 1
ErklärungenIm Allgemeinen wurde Android ursprünglich von Android Inc. entwickelt. Die Macher planten, damit „intelligente Kameras“ zu erstellen. Im Jahr 2005 kaufte Google Android Inc und änderte den Anwendungsvektor der Plattform in Richtung mobiler Geräte.
"Genau dieselbe Plattform und dasselbe Betriebssystem, die wir für Kameras erstellt haben, wurde zu Android für Mobiltelefone", sagte Andy Rubin, Mitbegründer von Android.
Frage 2
ErklärungenADB (Android Debug Bridge) ist ein Befehlszeilentool, das Befehle auf Android-Geräten ausführt. Dies ist ein Client-Server-Programm, das aus drei Komponenten besteht:
- einen Client, mit dem Sie Befehle senden können;
- ein Daemon, der Befehle auf einem Gerät ausführt;
- Ein Server, der die Kommunikation zwischen dem Client und dem Dämon verwaltet.
Frage 3
ErklärungenAPK (Android Package) ist ein archivierbares ausführbares Dateiformat für Android. Vollgepackt mit aapt (Android Asset Packaging Tool). Bedingt kann die Arbeit dieses Dienstprogramms in zwei Stufen unterteilt werden:
- Zusammenstellung. In dieser Phase werden Ressourcen vorbereitet: Die Klasse R wird generiert, XML-Ressourcen werden in ein Binärformat übersetzt, PNG-Verarbeitung usw.
- Verpackung (Verknüpfung). Alle in der Kompilierungsphase erstellten Zwischendateien werden in die APK gepackt.
Der Prozess zum Erstellen einer Android-Anwendung wird in der Dokumentation beschrieben .
Frage 4
ErklärungenAgera ist ein reaktives Programmierframework für Android. Nicht in JetPack enthalten.
Jetpack - eine Reihe von Bibliotheken, die die Entwicklung neuer Anwendungen für Android vereinfachen.
Slices - UI-Vorlagen zum Einbetten in andere Anwendungen.
Android KTX ist eine Reihe von Kotlin-Erweiterungsfunktionen, die die Android-Entwicklung vereinfachen.
Datenbindung ist eine Technologie, mit der wir Daten automatisch direkt in XML-Code binden können.

Frage 5
ErklärungenDie Frage stand am Horizont der Programmiersprachen.
Die Option "hh = 1" befindet sich in Python, "def hh = 1" in Groovy und die letzte Option in Java, in der der Datentyp angegeben werden muss.
Frage 6
ErklärungenNormal - Diese Kategorie enthält Berechtigungen, die keinen Zugriff auf vertrauliche Benutzerdaten erfordern oder den Betrieb anderer Anwendungen nicht beeinträchtigen. Das System gewährt der Anwendung diese Berechtigungen während der Installation automatisch und Benutzer können sie nicht widerrufen.
Signatur - werden der Anwendung vom System während der Installation automatisch zur Verfügung gestellt, ebenso wie normale Berechtigungen. Der Unterschied besteht jedoch darin, dass nicht jede Anwendung diese Berechtigungen erhalten kann. Dazu muss es mit demselben Zertifikat signiert sein wie die Anwendung, die diese Berechtigung angekündigt hat.
Gefährlich - Diese Kategorie umfasst Berechtigungen, die Zugriff auf vertrauliche Benutzerdaten erfordern oder den Betrieb anderer Anwendungen beeinträchtigen können.
Spezial ist SYSTEM_ALERT_WINDOW und WRITE_SETTINGS.
Die Dokumentation
Frage 7
Die Antwort Principle Of Least Astonishment
ErklärungenOh, diese fünf Buchstaben.
Prinzip der Einzelverantwortung - eine Klasse muss eines tun.
O pen Closed Principle - Software-Entitäten müssen für Erweiterungen geöffnet, für Änderungen jedoch geschlossen sein.
L iskov-Substitutionsprinzip (Barbara Liskov-Substitutionsprinzip) - Das Verhalten der Erbenklasse darf dem von der Elternklasse angegebenen Verhalten nicht widersprechen.
Prinzip der Schnittstellentrennung - Software-Entitäten sollten nicht von Methoden abhängen, die sie nicht verwenden
D ependenzinversionsprinzip - Abstraktionen sollten nicht von Details abhängen. Details sollten von Abstraktionen abhängen.
Das „Prinzip des geringsten Erstaunens“ ist in SOLID jedoch nicht enthalten. Diese Regel besagt, dass, wenn der Zweck eines Elements unklar ist, sein Verhalten für den Benutzer erwartet werden sollte (Prinzip der geringsten Überraschung).
Frage 8
ErklärungenÜber Datenbindung und Slices haben wir etwas höher gesprochen. Toast und Snackbar sind Elemente zum Benachrichtigen von Benutzern in Android-Anwendungen und können nicht in andere Anwendungen eingebettet werden. Obwohl Toast nach und nach dem Minimieren der Anwendung angezeigt werden kann, kann es im Gegensatz zu Slices nirgendwo eingebettet werden.
Frage 9
ErklärungenDie Dex-Dateispezifikation begrenzt die Gesamtzahl der Methoden, auf die verwiesen werden kann, auf 65.536.
In Versionen mit Dalvik an Bord (vor API 21) muss zur Umgehung dieser Einschränkung die Multidex-Bibliothek verbunden werden, die Teil der Haupt-Dex-Datei wird und den Zugriff auf den Rest steuert.
ART unterstützt wiederum das Laden vieler Dex-Dateien aus der Box. Bei der Installation der Anwendung scannt ART die classesN.dex-Dateien und kompiliert sie zur weiteren Initialisierung der Anwendung in eine einzige .oat-Datei.
Multidex
Frage 10
ErklärungenonPostCreate () - wird aufgerufen, nachdem onStart () und onRestoreInstanceState () aufgerufen wurden.
onPostResume () - wird nach dem Aufruf von onResume () aufgerufen
onResumeFragments () ist eine fragmentierte Version der onResume () -Methode. Wird in onPostResume () aufgerufen, nachdem onResume () die Fragmente aufgerufen hat.
Frage 11
Erklärungen9-Patch ist ein reguläres PNG-Bild, in dem 1px-Kanten Dienstinformationen enthalten, die vom Android-Grafiksubsystem wie folgt interpretiert werden:
Der linke und obere Rand definieren den Inhaltsbereich, der gestreckt wird.
Der rechte und untere Rand definieren den Bereich, in dem der Inhalt platziert wird.
Frage 12
ErklärungenZygote ist eine der Schlüsselkomponenten jedes Android-Systems. Er ist verantwortlich für das Initialisieren, Starten von Systemdiensten, Starten und Stoppen von Benutzeranwendungen und vielen anderen Aufgaben. Während der Initialisierung bildet Zygote die Laufzeitumgebung für Java-Anwendungen (durch Laden aller Java-Klassen des Frameworks) und startet übergeordnete Systemdienste (WindowManager, ActivityManager usw.). Danach wird der Ruhezustand aktiviert. Nach Erhalt einer Anforderung zum Starten der Anwendung kopiert sich Zygote selbst (gegabelt) und startet die gewünschte Anwendung über der empfangenen Kopie der virtuellen Maschine. Mit diesem Funktionsprinzip können Sie den Speicherverbrauch reduzieren (Linux kopiert während des Verzweigens Copy-on-Write-Speicher) und den Anwendungsstart beschleunigen (der Verzweigungsprozess ist viel schneller als das Starten einer neuen virtuellen Maschine).
Frage 13
ErklärungenDie Ebenen der Android-Architektur wurden im vorherigen Quiz in Frage 14 analysiert.
Frage 14
ErklärungenEs gibt zwei Möglichkeiten, eine virtuelle Maschine zu implementieren: Stack (Java, .Net CLR) und Register (Lua VM, Dalvik VM). Der Hauptunterschied zwischen den beiden Ansätzen ist der Mechanismus zum Schreiben und Empfangen von Operanden und Befehlsausführungsergebnissen.
Die Stapel-VM verwendet den Stapel zum Speichern von Operanden. Operationen empfangen Daten vom Stapel, verarbeiten sie und schieben das Ergebnis gemäß der LIFO-Regel zurück auf den Stapel.
Register VM verwendet Prozessorregister, um Operanden zuzuweisen. Die Anweisungen einer solchen VM müssen explizit die Adressen (Register) enthalten, in denen die Operanden enthalten sind.
Aufgrund dieses Unterschieds sind Anweisungen in der Register-VM schneller als ähnliche Anweisungen in der Stapel-VM, beanspruchen jedoch im Durchschnitt mehr Speicher, indem Operanden explizit angegeben werden.
Ein weiterer Vorteil der Register-VM ist die Möglichkeit, den berechneten Wert im Register zu speichern, wodurch Zeit für die Neuberechnung von Ausdrücken gespart wird.
Gründe für die Auswahl einer Dalvik VM-Implementierung als Register-VM ( Videos oder Folien (35.36)
Frage 15
ErklärungenJNI - Java Native Interface - bietet die Möglichkeit, nativen C / C ++ - Code von Java aus auszuführen und umgekehrt.
Um eine Java-Funktion aus C ++ - Code aufzurufen, müssen Sie ihre Signatur korrekt beschreiben. Angenommen, wir möchten eine Funktion aufrufen:
boolean f(String s)
Dann können wir in JNI einen Link dazu bekommen, wie folgt:
jmethodID myFunc = env->GetMethodID( activityClass, "myFunc", "(Ljava/lang/String;)Z");
In Bezug auf die Typen in der Beschreibung der Signatur: 'B' wird für Byte verwendet, 'C' ist char, 'I' ist int.
Typ Signatur | Java-Typ |
---|
Z. | Boolescher Wert |
B. | Byte |
C. | char |
S. | kurz |
Ich | int |
J. | lang |
F. | float |
D. | doppelt |
L vollqualifizierte Klasse; | voll qualifizierte Klasse |
[Typ | Typ [] |
(Arg-Typen) Ret-Typ | Methodentyp |
( Quelle )
Es ist merkwürdig, dass der Rechen mit 'B' und 'Z' anscheinend so beliebt ist, dass die Android-Docks eindeutig angeben: "Denken Sie daran, dass 'B' Byte und 'Z' Boolesch ist . "
Nun, wir erinnern uns)