Android-Interviewerfahrung teilen [Ausgewählt]

藏色散人
Freigeben: 2020-07-31 17:07:00
nach vorne
4857 Leute haben es durchsucht

Empfehlung: „Zusammenfassung der Android-Interviewfragen 2020 [Sammlung]

Ich habe seit Anfang des Jahres an Interviews mit vielen Unternehmen teilgenommen, und auch erhielt mehrere Angebote von Riesen und anderen Unternehmen. Das Zusammenfassen der Erfahrung ist auch ein Rückblick und eine Zusammenfassung der Vergangenheit.

1. Lebenslauf

Es gibt viele Anleitungen zu Lebensläufen von Programmierern, daher werde ich sie hier nicht wiederholen. Sie können im Internet nach Zusammenfassungen anderer Experten suchen Ändern Sie sie entsprechend Ihrer eigenen Situation. Ich habe ein paar Vorschläge:

1. Versuchen Sie, nicht ausgefallen zu sein wie Designer oder Produktbetreiber. Die Entscheidung darüber, ob unser Lebenslauf erfolgreich ist oder nicht, liegt beim technischen Interviewer Der Wert ist eine Beschreibung des Inhalts und der Technologie Ihrer Projekterfahrung.

2. Versuchen Sie, in der Fertigkeitsbeschreibung nur das zu schreiben, was Sie genau kennen und verstehen. Sie können einige neue Technologien oder beliebte Frameworks entsprechend hinzufügen, aber dies muss verstanden werden, wenn Sie keine Zeit dazu haben Lesen Sie den Quellcode, Sie können nachlesen, was die Experten dazu gesagt haben. Es gibt viele Zusammenfassungen im Internet.

3. Versuchen Sie, Schlüsselwörter zum Projekterlebnis hinzuzufügen, z. B. welche Technologie verwendet wurde, welche Entwurfsmuster verwendet wurden, optimierter Datenvergleich, erweiterte Zusammenfassung usw. Anstatt einfach den Inhalt dieses Projekts einzuführen (das ist die Beschreibung des Produktmanagers), wird die Leistungsoptimierung beispielsweise in UI-Leistungsoptimierung, Speicheroptimierung, Datenbankoptimierung, Netzwerkoptimierung, Stromverbrauchsoptimierung usw. unterteilt. Es kann unter folgenden Aspekten beschrieben werden: 1. Wie wird das Problem entdeckt, 2. Wie wird das Problem gelöst, 3. Vergleich der Lösungseffekte. Um ein einfaches Beispiel zu geben: UI-Optimierung: Sie können sehen, welche Probleme in der UI auftreten (steckengeblieben und nicht reibungslos), wie das Problem gefunden wird (Mobile-Entwickler-Berechtigungen > GPU-Überzeichnung, gefundene Ebenenprobleme, TraceView-CPU-Nutzungsanalyse), So lösen Sie das Problem (Absenken des Levels, Probleme mit der benutzerdefinierten Ansichtszeichnung usw.) Vergleichen Sie die Leistung erneut, nachdem Sie das Problem gelöst haben.

2. Fähigkeitsreserve

(1) Java

1. Was ist der Unterschied zwischen HashMap und Hashtable?

Dazu müssen Sie den Quellcode lesen! Schauen Sie sich den Quellcode an! Schauen Sie sich den Quellcode an! Wenn Sie es wirklich nicht ertragen können, können Sie online die Analysen anderer Leute lesen. Eine kurze Zusammenfassung:

1. HashMap unterstützt null Key und null Value lässt dies nicht zu. Dies liegt daran, dass HashMap eine spezielle Verarbeitung für Null durchführt, den HashCode-Wert von Null auf 0 setzt und ihn im 0. Bucket der Hash-Tabelle speichert.

2.HashMap ist nicht Thread-sicher. Die Methode zum Implementieren der Thread-Sicherheit in HashMap ist Map map = Collections.synchronziedMap(new HashMap()); .Die Standardlänge von HashMap beträgt 16. Die Standardlänge von Hashtable beträgt 11, und die Erweiterung ist das Original 2n+1

4. HashMap erbt AbstractMap

Erweiterung, HashMap vergleicht mit ConcurrentHashMap, HashMap vergleicht SparseArray, LinkedArray vs. ArrayList, ArrayList vs. Vector

2. Java-Garbage-Collection-Mechanismus

Sie müssen JVM und Speicheraufteilung verstehen - Methodenbereich, Speicherheap, Stapel der virtuellen Maschine (privater Thread), lokaler Methodenstapel (privater Thread), Programmzähler (privater Thread), Verständnis des Recycling-Algorithmus - Algorithmus zum Markieren und Löschen, Algorithmus zur Erreichbarkeitsanalyse, Algorithmus zum Markieren und Sortieren, Kopieren Algorithmus, Generationsalgorithmus, verstehen Sie die Vor- und Nachteile.

Für Einzelheiten können Sie lesen, was andere Schüler geschrieben haben.

3. Klassenlademechanismus

Dies kann mit einer Hot-Reparatur kombiniert werden -tiefes Verständnis. Klicken Sie hier, um den Link zu öffnen

4. Threads und Thread-Pools, Parallelität, Sperren und eine Reihe von Problemen

Dies kann selbst erweitert werden.

5. HandlerThread und IntentService verstehen

Der Unterschied zwischen schwacher Referenz und weicher Referenz

Bewerten Sie hauptsächlich Probleme bei der Wertübertragung und der Referenzübergabe

8. Handschriftliches Produzenten-/Konsumentenmodell

(2) Android

1. Android-Startmodus

Muss Aktivitätsstapel und TaskAffinität verstehen

1.Standard: Systemstandard, jedes Mal wird eine weitere Aktivitätsinstanz gestartet

2.SingleTop: Die Oberseite des Stapels wird wiederverwendet, wenn sie sich oben befindet Im Stapel durchläuft der Lebenszyklus nicht onCreate() und onStart(), sondern onNewIntent() wird aufgerufen, was zum Pushen von Nachrichtendetailseiten geeignet ist, z. B. Nachrichten-Push-Details Aktivität

3.SingleTask : Multiplexing im Stapel. Wenn es im Stapel vorhanden ist, werden alle darauf befindlichen Aktivitäten aus dem Stapel entfernt, sodass sie sich oben auf dem Stapel befinden. Der Lebenszyklus ist im Grunde derselbe wie bei SingleTop

4. SingleInstance: Dies ist die erweiterte Version von SingleTask. Das System öffnet einen separaten Stapel für die zu startende Aktivität. Es ist der einzige in diesem Stapel. Es ist für neu geöffnete Aktivitäten und Apps geeignet Das kann unabhängig voneinander geöffnet werden, z. B. der Systemwecker und die Video-Chat-Oberfläche. Ich weiß nicht, ob es dasselbe ist. Lassen Sie es mich wissen.

Außerdem scheinen SingleTask und SingleInstance den Rückruf von onActivityResult zu beeinflussen. Bitte suchen Sie nach bestimmten Problemen, daher werde ich nicht näher darauf eingehen.

Absicht erfordert auch ein tieferes Verständnis der jeweiligen Verwendung und Funktion von Aktion, Daten, Kategorie sowie des häufig verwendeten

Intent.FLAG_ACTIVITY_SINGLE_TOP
Intent.FLAG_ACTIVITY_NEW_TASK
Intent.FLAG_ACTIVITY_CLEAR_TOP
Nach dem Login kopieren

usw. Bitte werfen Sie einen Blick auf den Quellcode für Details .

2. Zeichenprozess anzeigen

ViewRoot
-> performTraversal()
-> performMeasure()
-> performLayout()
-> perfromDraw()
-> View/ViewGroup measure()
-> View/ViewGroup onMeasure()
-> View/ViewGroup layout()
-> View/ViewGroup onLayout()
-> View/ViewGroup draw()
-> View/ViewGroup onDraw()
Nach dem Login kopieren

Werfen wir einen Blick auf die Invalidate-Methode. Es gibt 4 Parameter. Was ist der Unterschied zwischen den Triggern „requestLayout“ und „Layout“? Implementieren Sie eine lokale Neumessung, um das Problem der globalen Neumessung zu vermeiden.

3. Ereignisverteilungsmechanismus

-> dispatchTouchEvent()
-> onInterceptTouchEvent()
-> onTouchEvent()
requestDisallowInterceptTouchEvent(boolean)
Nach dem Login kopieren

und die Reihenfolge von onTouchEvent(), onTouchListener, onClickListener

4. Nachrichtenverteilungsmechanismus

Dieser Test ist sehr verbreitet. Schauen Sie sich unbedingt den Quellcode an, da gibt es nicht viel Code. Schauen wir uns das mit ein paar Fragen an:

1. Warum hat ein Thread nur einen Looper und nur eine MessageQueue?

2. Wie bekomme ich den Looper des aktuellen Threads? Wie wird es erreicht? (ThreadLocal verstehen)

3. Kann jeder Thread einen Handler instanziieren? Gibt es Einschränkungen?

4.Looper.loop ist eine Endlosschleife. Es wird blockiert, wenn die zu verarbeitende Nachricht nicht abgerufen werden kann. Warum verursacht es also keine ANR im UI-Thread?

5. Wie implementiert Handler.sendMessageDelayed() die Verzögerung? Kombiniert mit der Schleife Looper.loop(), der Analyse Message=messageQueue.next() und MessageQueue.enqueueMessage().

5. AsyncTask-Quellcode-Analyse

Analyse der Vor- und Nachteile Es gibt viele davon im Internet, daher werde ich sie nicht wiederholen.

6. Wie kann sichergestellt werden, dass der Dienst nicht beendet wird? Wie kann sichergestellt werden, dass der Prozess nicht abgebrochen wird?

Drei Unternehmen haben mir während meines Vorstellungsgesprächs diese beiden Fragen gestellt.

7. Binder-Mechanismus, Prozesskommunikation

Die unterste Ebene der von Android verwendeten Prozesskommunikation ist im Wesentlichen Binder, AIDL, Messager, Broadcast und ContentProvider. Ich verstehe nicht genau, wie ADIL und Messager geschrieben und gelesen werden können. Darüber hinaus muss das Buch zur Erkundung der Android-Kunstentwicklung verglichen werden von Ren Yugang.

8. Probleme bei der dynamischen Berechtigungsanpassung und hautverändernde Implementierungsprinzipien

Schauen wir uns diesbezüglich Hongyangs Blog-Beitrag an

9. SharedPreference-Prinzip, kann es kreuzweise sein? -Verfahren? Wie erreichen?

(3) Leistungsoptimierungsprobleme

1. UI-Optimierung

a. Eine angemessene Auswahl von RelativeLayout, LinearLayout, RelativeLayout führt dazu, dass die untergeordnete Ansicht zweimal onMeasure aufruft. und das Layout Wenn es relativ komplex ist, ist onMeasure relativ komplex und ineffizient. LinearLayout lässt die Unteransicht onMeasure auch zweimal aufrufen, wenn das Gewicht> 0 ist. LinearLayout-Gewichtsverteilungsprinzip.

b. Verwenden Sie die Tags

c. Reduzieren Sie die Layoutebene, Sie können die mobilen Entwickleroptionen>GPU-Übergangszeichnungsansicht verwenden Ebenenkontrolle Wenn innerhalb von 4 Ebenen mehr als 5 Ebenen vorhanden sind, müssen Sie überlegen, ob das Layout neu angeordnet werden soll.

d. Überschreiben Sie beim Anpassen von View die Methode onDraw() und erstellen Sie keine neuen Objekte in dieser Methode, da dies sonst leicht zu GC führt und zu Leistungseinbußen führt

e Wenn Sie ListView contentView verwenden, verwenden Sie Holder, um findViewById zu reduzieren und View zu laden.

f. Entfernen Sie unnötigen Hintergrund, getWindow().setBackgroundDrawable(null)

g. Verwenden Sie das leftDrawabel/rightDrawable-Layout von TextView

2. Speicheroptimierung

Hauptsächlich um Leistungseinbußen durch OOM und häufiges Auslösen von GC zu vermeiden

a.Bitmap.recycle(), Cursor.close, inputStream.close()

b große Anzahl Laden Sie die Bitmap entsprechend der Ansichtsgröße und wählen Sie sinnvollerweise die Kodierungsmethode inSampleSize und RGB_565 aus. Verwenden Sie den LruCache-Cache

d. Verwenden Sie einen Thread-Pool, um Threads zu verwalten und das Erstellen neuer Threads zu vermeiden

e. Verwenden Sie einen Singleton, um den Kontext zu speichern und daran zu denken, ihn freizugeben, oder verwenden Sie einen globalen Kontext

f. Achten Sie auf die Freigabe statischer Sammlungsobjekte

g. Attributanimation verursacht Speicherverluste

h Bei Verwendung von webView muss es in Activity.onDestory, webView, entfernt und zerstört werden. removeAllViews() und webView.destory()

Vorbereitung: Verwenden Sie LeakCanary, um Speicherlecks zu erkennen

3. Reaktionsgeschwindigkeitsoptimierung

Wenn die Aktivität nicht auf Bildschirmberührungsereignisse und Tastatur reagieren kann Eingabeereignisse treten innerhalb von 5 Sekunden auf, und wenn BroadcastReceiver 10, tritt ANR auf, wenn der Vorgang nicht innerhalb von Sekunden ausgeführt wird, und ANR tritt in Serve20 Sekunden auf. Um ANR zu vermeiden, können Sie einen untergeordneten Thread starten, um Zeit auszuführen. verbrauchende Vorgänge, aber der untergeordnete Thread kann die Benutzeroberfläche nicht aktualisieren. Daher sind für die Thread-Kommunikation der Handler-Nachrichtenmechanismus, AsyncTask und IntentService erforderlich.

Hinweis: Wenn ANR auftritt, wird adb pull data/anr/tarces.txt mit der Protokollanalyse kombiniert

Andere Leistungsoptimierungen

a

b. Verwenden Sie SparseArray anstelle von HashMap

c. Verwenden Sie den Thread-Pool, um Threads zu verwalten

d >e. Verwenden Sie keine Aufzählungen, die mehr Speicherplatz beanspruchen als Ganzzahlen.

Priorisieren Sie StringBuilder und StringBuffer für das Zusammenfügen von Zeichenfolgen.

g >

(4) Designmuster

1. Singleton-Muster: Es gibt verschiedene Schreibmethoden, bei denen Sie in der Lage sein müssen, von Hand zu schreiben und die Vor- und Nachteile zu analysieren. Volatil wird im Allgemeinen in Doppelkontrollschlössern verwendet, und das Prinzip von Volatilität muss analysiert werden

2. Beobachtermodus: Es ist erforderlich, dass Sie handschriftlich schreiben können. Einige Interviewer werden Sie fragen, ob Sie es verwendet haben im Projekt? Wenn Sie wirklich noch nichts davon gehört haben, können Sie über EventBus sprechen, der den Beobachtermodus verwendet.

3. Adaptermodus: Er ist erforderlich, um von Hand schreiben zu können. Einige Unternehmen werden fragen, was das ist Gibt es einen Unterschied zum Decorator-Modus und dem Proxy-Modus?

4. Builder-Modus + Factory-Modus: Es ist erforderlich, von Hand schreiben zu können

5. Strategiemodus: Dies wird weniger häufig gefragt, aber einige E-Commerce-Leute werden danach fragen .

6.MVC, MVP, MVVM: Vergleichen Sie die Gemeinsamkeiten und Unterschiede, wählen Sie einfach eines aus, in dem Sie gut sind, und konzentrieren Sie sich darauf

(5) Datenstruktur

1. Was sind die Unterschiede in der Verwendung und den Prinzipien zwischen HashMap, LinkedHashMap und ConcurrentHashMap? Viele Unternehmen werden das HashMap-Prinzip in Betracht ziehen und einige Erweiterungen vornehmen, beispielsweise Chinas 1,3 Milliarden Bevölkerungsalter Sortierproblem, das Alter entspricht der Anzahl der Buckets, das gleiche Alter und das gleiche Hash-Problem sind ähnlich.

2. Der Vergleich von ArrayList und LinkedList ist relativ einfach.

3. Ich wurde auch an ausgeglichenen Binärbäumen, binären Suchbäumen und rot-schwarzen Bäumen getestet.

4. Das Set-Prinzip ähnelt in gewisser Weise dem HashMap-Test. Der Test bezieht sich auf den häufig verwendeten Hash-Algorithmus. HashSet verwendet intern HashMap

(6) Algorithmus

Der Algorithmus wird hauptsächlich zum Testen der Fragen verwendet. Gehen Sie zum Auffrischen zu LeetCode und Niuke.com.

(7) Verständnis des Quellcodes

Open-Source-Frameworks werden mehr oder weniger in Projekten verwendet. Viele Unternehmen fragen gerne nach den Prinzipien und ob sie den Quellcode gesehen haben, z. B. das Netzwerk Framework Okhttp, das am häufigsten verwendet wird, Retrofit+RxJava ist mittlerweile auch sehr beliebt.

1. Netzwerk-Framework-Bibliothek Okhttp

Lesen Sie unbedingt den darin enthaltenen Schlüsselklassen sowie Verbindungspools und Interceptoren. Ich wurde gefragt, wie man URLs bestimmter Domänennamen Header hinzufügt. Wenn der Code von Ihnen selbst gekapselt ist, kann er in der gekapselten Anforderung gelöst werden, oder Sie können einen Interceptor hinzufügen und dies über den Interceptor tun.

Empfehlen Sie einen guten Artikel, der Okhttp erklärt

2. EventBus-Benachrichtigungsprinzip

1. Es wird empfohlen, sich den Quellcode anzusehen, da gibt es nicht viel. Interne Implementierung: Beobachtermuster + Anmerkungen + Reflexion

2. Kann EventBus prozessübergreifend arbeiten? Methoden zum Ersetzen von EventBus (RxBus)

3. Bildladebibliotheken (Fresco, Glide, Picasso)

1 Welche Bildladebibliothek wurde im Projekt ausgewählt? Warum es wählen? Sind andere Bibliotheken schlecht? Der Unterschied zwischen diesen Bibliotheken

2. Wählen Sie das Prinzip der Bildbibliothek im Projekt aus, z. B. Glide (LruCache kombiniert mit schwachen Referenzen), dann fragt der Interviewer nach dem Prinzip von LruCache und dann nach dem Prinzip von LinkedHashMap, also Schicht für Schicht. Die Leute stellen Fragen. Daher wird empfohlen, dass Sie hineingehen und einen Blick darauf werfen, wenn Sie etwas sehen, das Sie nicht verstehen. Beispielsweise wird Fresco im MVC-Entwurfsmuster verwendet, und Shared Memory wird unter 5.0 verwendet. Wie erreicht man abgerundete Ecken in Fresco? Wie konfiguriere ich den Cache in Fresco?

4. Message Push

1. Haben Sie den Message Push im Projekt selbst durchgeführt oder haben Sie einen Dritten eingesetzt? Wie das Polarlicht. Haben Sie andere verwendet? Was sind die Vorteile und Unterschiede zwischen diesen Unternehmen und warum haben Sie sich für sie entschieden?

2. Was ist das Prinzip von Message Push? Wie implementiert man eine Heartbeat-Verbindung?

5. TCP/IP, Http/Https

Wenn in Ihrem Lebenslauf steht, dass Sie mit dem TCP/IP-Protokoll und dem Http/Https-Protokoll vertraut sind, werden Sie dies auf jeden Fall tun werde gefragt, und ich werde es überprüfen. Im Allgemeinen werde ich auf die Beziehung der Netzwerkschicht, den Unterschied zwischen TCP und UDP, den TCP-Drei-Wege-Handshake (stellen Sie eine klare Erklärung ein, Sie müssen mit Flag-Bits wie SYN, ACK und der Nachrichtenstruktur vertraut sein) usw. antworten viermal winken. Warum drei Händeschütteln? DDoS-Angriff. Warum schütteln wir uns dreimal die Hand und winken viermal? HTTP-Nachrichtenstruktur, wie läuft eine Netzwerkanforderung ab? Was ist der Unterschied zwischen HTTP und HTTPS? Wie führt SSL/TLS einen verschlüsselten Handshake durch? Wie verifiziert man das Zertifikat? Was sind symmetrische Verschlüsselungsalgorithmen und asymmetrische Verschlüsselungsalgorithmen? Einen bekannten Verschlüsselungsalgorithmus wählen und ihn kurz vorstellen? Wie funktioniert die DNS-Auflösung?

6. Hot-Update, Hot-Reparatur und Plug-in (dieser Bereich ist anspruchsvoller und im Allgemeinen müssen leitende Ingenieure ihn verstehen)

ClassLoader verstehen

Neu Technologien

RxJava, RxBus, RxAndroid. Wenn Sie ein Interview mit dem Unternehmen führen, zu dem Sie gehen möchten, können Sie deren Pakete dekompilieren und sehen, ob sie verwendet werden. Wenn sie verwendet werden, werden Sie während des Interviews unweigerlich Fragen stellen. Wenn nicht, wie können Sie es ignorieren, aber Studenten mit starkem Lernwillen können es sich ansehen. Es ist ein relativ beliebtes Framework.

Retrofit, Studenten, die mit okhttp vertraut sind, empfehlen, es auszuprobieren. Ich habe gehört, dass es sehr cool ist, es mit RxJava zu kombinieren.

Kotlin

3. Schließlich

Die bevorzugte Methode der internen Empfehlung für Lebensläufe ist schnell und effizient! Dann können Sie einen Blick auf den Haken, den Chef, Maimai und die Straße werfen. In Ihrem Lebenslauf steht: Wenn Sie sich mit einer Technologie auskennen, müssen Sie damit vertraut sein, sonst wird es nicht peinlich, wenn Sie gefragt werden! Welche Art von Projekten haben Sie durchgeführt? Auch wenn die Projektgröße nicht groß ist, müssen Sie mit den Umsetzungsprinzipien vertraut sein! Wenn es nicht der Teil ist, für den Sie verantwortlich sind, können Sie sich auch ansehen, wie Ihre Kollegen es umgesetzt haben. Was würden Sie tun, wenn Sie es wären? Was Sie getan haben und was Sie wissen, ist eine Frage der Breite, abhängig vom Inhalt des Projekts. Aber was Sie getan haben und welchen Stand Sie erreicht haben, sind tiefgreifende Fragen im Zusammenhang mit Ihrer persönlichen Lernfähigkeit und Einstellung zur Problemlösung. Große Unternehmen achten auf die Tiefe, kleine Unternehmen auf die Breite. Bei Vorstellungsgesprächen mit großen Unternehmen wissen Sie, was Sie wissen, aber ob Sie wissen, was sie bei Vorstellungsgesprächen mit kleinen Unternehmen verwenden, nennt man Job-Matching.

Nachdem Sie einige Unternehmen ausgewählt haben, zu denen Sie gehen möchten, gehen Sie zunächst zu einigen kleinen Unternehmen, um Interviewfähigkeiten zu üben und zu erlernen. Zusammenfassend können Sie mit Kollegen oder Produkt-PKs sprechen . Es ist sehr klar und deutlich, wenn man vor Ort ist, wie man alles beschreibt, was man tut.

Seien Sie im Vorstellungsgespräch höflich! Auch wenn Sie das Gefühl haben, dass der Gesprächspartner Sie nicht respektiert und Ihre Erklärungen oft unterbricht, oder Sie das Gefühl haben, dass er nicht so gut ist wie Sie und die Fragen, die er stellt, nicht professionell sind, müssen Sie ihn respektieren, denn er ist derjenige, der Sie jetzt auswählt und wartet Damit Sie das Angebot erhalten, entscheiden Sie sich letztendlich für ihn.

Beschreiben Sie das Problem außerdem langsam! Reden Sie nicht viel auf einmal. Langsamkeit zeigt, dass Sie ruhig und selbstbewusst sind und noch Zeit haben, über Ihre Ideen nachzudenken, wie Sie als nächstes besser reden können. Heutzutage hängt die Entwicklung zu sehr von der IDE ab, daher gibt es einen Nachteil. Wenn wir es im Interview erklären, ist es leicht, nicht zu wissen, wie man eine bestimmte Methode ausspricht ... Wir müssen also das Gemeinsame kennen Schlüsselklassennamen, Methodennamen und Schlüsselwörter sollten genau gelesen werden. Einige Interviewer werden ungeduldig sein und fragen: „Über welche sprechen Sie?“ Korrekte Aussprache + ruhige Beschreibung + nette Stimme sind auf jeden Fall ein Plus!

Das Wichtigste ist die Mentalität! Mentalität! Mentalität! Sagen Sie wichtige Dinge dreimal! Die Interviewzeit ist sehr kurz und es ist für die andere Partei relativ unrealistisch, Ihren Hintergrund in kurzer Zeit herauszufinden. Dies ist daher immer noch eine Ära des Gesichts.

Ich hoffe, dass jeder einen passenden und zufriedenstellenden Job findet! Kampf!

Das obige ist der detaillierte Inhalt vonAndroid-Interviewerfahrung teilen [Ausgewählt]. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jianshu.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage