Je suis impliqué dans Android depuis un an, et je me sens assez profond (y compris le résumé de l'usine de recrutement automne 2020)

Le temps passe vite, de la remise des diplômes l'année dernière à l'épidémie de cette année, puis à la fin de l'année en cours , je travaille depuis un an sans le savoir. Il y a un an, j'étais un jeune homme qui venait d'entrer dans la société, et maintenant je suis devenu un «travailleur» assidu. Dommage ~

C'est la fin du non-sens, on revient sur le sujet, après tout, ce blog est toujours un résumé de l'interview pour ma première année de travail de développement Android, je dois y faire face.

Après avoir obtenu un baccalauréat en 19 ans, j'ai rédigé avec éloquence plus d'un an de code d'entreprise. Avant de me préparer à un entretien avec une grande entreprise Internet en septembre, j'ai parfaitement compris les connaissances de base des entretiens Android. Il a fallu plus qu'un mois avant et après. Maintenant, je vais partager avec vous quelques-unes des questions d'entretien Android des principales sociétés Internet et les points de connaissance de base des entretiens Android que j'ai compilés . J'espère que cela sera utile à tout le monde, et je pourrai obtenir une offre d'une grande usine lors du recrutement de printemps de l'année prochaine.

Pour mettre les choses en perspective, les majors Internet demandent essentiellement la même chose pour 1-3 Android développement junior et de niveau intermédiaire. Ici, je ne les classerai pas par entreprise. Je ne les classerai pas par entreprise. Je trouverai des choses, en lisant, B station, Jingdong, Ctrip, Baidu, TouchPal, Tencent, Pinduoduo, et enfin Xiaopozhan et Goose Factory raccrochent (Penguin est vraiment en colère, fondamentalement ne demandez pas selon CV).

texte

Voici quelques questions d'entrevue dans mon impression:

Java

1. Comprenez-vous la réflexion, l'annotation, les génériques et les exceptions?

En gros, on leur demandera. En répondant, il ne suffit pas de répondre à l'utilisation de base. Vous pouvez parler de leurs principes d'implémentation dans la JVM. tel que:

① Où se situe la perte de réflexion des performances et comment l'optimiser?
② Où les informations annotées sont-elles stockées? Deux modes de traitement des annotations (réflexion et APT).
③ Comment comprendre l'effacement générique?
④ Comment comprendre le principe générique du PECS (un exemple typique est la méthode Collections.copy)?
⑤ Expliquez séparément les deux modes d'exception (exception et erreur)?
⑥ La structure de l'instance anormale? Table d'exception? Pourquoi est finalement toujours exécuté?

2. Code source de la collection Java

La question la plus posée est HashMap. Le mécanisme d'expansion de HashMap, la résolution des conflits de hachage, pourquoi le facteur de charge est-il de 0,75, et pourquoi la valeur limite de la liste chaînée a une longueur de 8, et l'index est pris? Ce n'est pas thread-safe, donc cela implique ConcurrentHashmap, puis CAS et ainsi de suite.

Enfin, vous pouvez également parler de l'optimisation de SparseArray et ArrayMap (il y a deux files d'attente de cache) recommandées dans Android, et le code source doit également être examiné.

ArrayList est relativement simple, il existe une entreprise qui me permet de l'implémenter directement à la main, donc je peux le pratiquer. Ensuite, il peut impliquer Vector et CopyOnWriteArrayList thread-safe.

3. JVM

Les questions les plus posées sont la division de la zone mémoire et GC. Lorsque vous répondez, vous devez faire attention au fait que l'effacement des marques consiste à effacer les objets non marqués; quels sont les objets GCRoots? Ne parlez pas de CMS, il a été abandonné, vous pouvez parler de G1 et ZGC. Ensuite, il y a le comptage de références et l'analyse d'accessibilité. Cela peut être étendu pour parler du pointeur intelligent utilisé par la couche Android Framework, qui est le comptage de références utilisé, puis expliquer comment il résout le problème de référence circulaire.

Il y a aussi beaucoup de questions sur le mécanisme de chargement de classe.En plus de Java, vous pouvez également parler du DexClassLoader dans Android et des changements dans Android 8? Ensuite, il peut être étendu au plug-in et à la réparation à chaud.

D'autres ont posé des questions sur les machines virtuelles. À ce stade, commencez par le HotSpot de Java (exécution d'interprétation et exécution de compilation, compilation hiérarchique), puis par Dalvik, et enfin par ART. Quelle est la différence entre la compilation JIT et AOT au cours de la période? analyse de la performance du profil? Pour améliorer le garbage collection, comment optimiser la pause GC (reportez-vous au processus de collecte G1)?

  1. Concurrent

Le plus remis en question est le principe de réalisation de synchronisé et volatil.
① Quelle est l'utilisation de base de synchronized?
②, améliorations 1.6 (pas de verrouillage, verrouillage de déviation, verrouillage léger, verrouillage lourd)?
③, en-tête d'objet Java?
④. Principe de mise en œuvre (ACC_SYNCHRONIZED, instructions monitor / monitorexit)?
⑤ Le principe de réalisation de la visibilité volatile (préfixe de verrouillage + protocole de cohérence du cache) et de l'ordre (barrière mémoire)?
⑥ La réalisation de CAS (problème ABA, temps de cycle long et coût élevé, ne peut garantir l'atomicité d'une seule variable partagée)?
⑦, la compréhension de la classe UnSafe?

Il y a beaucoup de questions sur les pools de threads, mais elles concernent essentiellement les paramètres du pool de threads.

Ce qui suit est le "PDF Android Core Interview Knowledge" que j'ai passé plus d'un mois avant l'entrevue. Il compte 837 pages et contient de nombreux points de connaissances sur le contenu et des points de test pour les entretiens. Github et nécessite une interview., Les amis qui lisent peuvent accéder à mon [Github] pour télécharger et lire .

Android

1. Basique

Fondamentalement, la différence n'est pas mauvaise, le transfert de données d'Activité et de Fragment, cycle de vie, mode de démarrage;

L'utilisation de l'animation, de l'estimateur, de l'interpolateur (en fait, de la fonction trigonométrique) est relativement simple.

Le processus de dessin de View (de l'attachement de l'activité à onResume), puis étendu à la personnalisation de View, pourquoi réécrire la compréhension de onMeasure et MeasureSpec?

Afficher la distribution des événements, vous devez faire attention au moment du déclenchement de onCancel (généralement, cliquez sur RecyclerView et faites glisser)? En plus du ** Activity -> ViewGroup -> View process ** écrit sur le blog général. Vous pouvez également dire:

① D'où vient l'événement (InputManagerService)?
② L'événement est-il d'abord distribué à l'activité (en fait, il s'agit du mView dans ViewRootImpl, qui est également DecorView)?
③ Comment IMS gère-t-il KeyEvent et TouchEvent séparément?

Lorsque vous parlez du processus de dessin de View, il peut être étendu au mécanisme d'actualisation de View dans scheduleTraversal. Traitement du signal Vsync? Les trois premiers des quatre rappels sont faciles à comprendre. Comment le rappel Commit est-il déclenché (onTrimMemory)? Vsync calcule les images supprimées, comment surveiller la situation bloquée sur la ligne, l'une consiste à utiliser Vsync et l'autre à utiliser le rappel Handler de BlockCanary.

Ensuite, il y a le mécanisme Handler. Fondamentalement, tout le monde comprend cela, mais vous pouvez parler de la barrière de la mémoire, pourquoi n'est-elle pas bloquée et comment IdleHandler est-il utilisé dans des projets réels?

2. Cadre

En fait, nous avons déjà parlé de beaucoup de choses sur le Framework lorsque nous avons répondu aux bases d'Android. Donc, celui-ci a posé une question plus directe sur le processus de démarrage de l'activité et le mécanisme du classeur. Lorsque vous parlez du processus d'activité, vous pouvez parler des points d'accroche de type crochet de plug-in et des changements de processus pour Android 8, 10 pour démarrer l'activité.

Mécanisme de Binder, parlez d'abord des méthodes de communication IPC sous Linux  (pipe, Socket, sémaphore, mémoire partagée, en fait, elles sont toutes utilisées dans la couche Framework, vous pouvez en parler brièvement) . Ensuite, il se concentrera sur le modèle de communication de Binder.

① Comment Binder est-il représenté dans la couche pilote (binder_node, structure de données binder_ref)?
②. Obtention de l'objet proxy de ServiceManager (getStrongProxyForHandle (0)) et enregistrement du service?
③ Trois processus majeurs pour ouvrir le mécanisme Binder?

Ensuite, il y a le plug-in et la réparation à chaud, le type de proxy statique plug-in (c'est facile à écrire, c'est-à-dire le dynamic-load-apk de Gang Brother) et le type de crochet; réparation à chaud Je ne connais que l'instrumentation dex du mécanisme de chargement de classe de Tencent Si vous connaissez le programme de remplacement sous-jacent du département Ali, vous pouvez également en parler.

Enfin, j'ai posé des questions sur le code sous-jacent et source du Framework.

3. Optimisation des performances

Cela peut être basé sur ce qui est réellement fait dans le projet. J'ai écrit sur l' optimisation du volume des packages (réduction de 8M +), l'optimisation de la mise en page (sur-dessin et imbrication de la mise en page) et l'optimisation de la mémoire (LeakCanary + profil Android).

4. Gradle

Parce que les compétences personnelles et l'expérience de projet sur mon CV concernent Gradle, il y a plus de questions sur ce domaine. J'ai principalement posé des questions sur le processus de compilation et d'empaquetage (la différence entre AAPT et AAPT2) et ce qui a été fait dans certains projets (optimisation de la construction, écriture d'un plug-in Gradle) .

réseau informatique

1. TCP

Doit demander, doit répondre à tous. TCP est orienté connexion (prise de contact à trois, onde à quatre temps), basé sur un flux d'octets, en duplex intégral, fiabilité (contrôle de flux, contrôle de congestion, mécanisme de retransmission, etc.). Comment résoudre les défauts de TCP (blocage de tête de ligne) et HTTP3? Vous comprenez l'état de TIME_WAIT?

2. HTTP / 1.x 、 HTTPS 、 HTTP2 HTTP3

Il faut se demander, tant qu'il s'agit d'un système, il est facile de répondre.

Commençons par le HTTP / 1.1 le plus utilisé (version il y a plus de 20 ans). Connexions longues, si du big data est transmis, quelles sont les mesures d'optimisation actuellement (six connexions simultanées par domaine, fragmentation de domaine, sprite, etc.), le problèmes de HTTP 1.x (blocage d'en-tête de couche d'application, en-tête non compressé, transmission en clair), comment HTTP2 le résout-il (multiplexage, algorithme HPACK, données binaires)? L'insécurité du HTTP (confidentialité, intégrité, vérification d'identité) est-elle garantie par HTTPS (TLS_ECDHE_RSA_AES_128_GCM_SHA_256 + PKI)?

HTTP2 (basé sur le protocole SPDY) résout uniquement le problème du blocage de tête de ligne au niveau de la couche application, mais ne résout pas le problème de blocage de tête de ligne au niveau de la couche de transport. Alors, comment HTTP3 le résout-il (basé sur le protocole QUIC, en utilisant UDP)? Migration de connexion, correction des erreurs de redondance avant?

Articles sur le réseau informatique PDF de connaissances de base Android

algorithme

Degré certain: déterminez l'adresse IP légale.

Un certain nombre: tableau de tri impair-pair, la profondeur maximale de l'arbre (récursif et itératif doivent être écrits), l'algorithme d'addition détermine s'il s'agit d'un flush:

花色:R : 红色,B: 黑色,M: 梅花,F: 方块;牌大小:A、2、3、4 ... K;
输入:["RA", "R2", "R3", "R4", "R5", "B4", "M2", "F1"] 
返回 true,可以构成一个同花顺。
输入:["FJ", "FQ", "FK", "FA", "F2"]
返回 false。

 

Quelques nouvelles: problème d'île

Un certain trésor: l' arbre binaire symétrique (la récursion et l'itération doivent être écrites)

Articles sur l'algorithme PDF de connaissances de base Android

Attentes futures

Maintenant, de la fin de l'entretien de recrutement d'automne à l'arrivée chez Baidu, presque un mois s'est écoulé. Bien que je n'ai travaillé que pendant un an, le temps n'attend pas. Pensez à l'avenir et planifiez tôt votre carrière pour mieux briser l'évolution de carrière. goulot.

À l'avenir, ce que je pense, c'est que la future transformation du développement audio et vidéo , après tout, dans ce cercle Android impliqué, la survie du plus apte est la règle éternelle. Venez battre les travailleurs.

Les amis qui ont besoin d'interviews et de lecture peuvent accéder à mon [Github] pour télécharger et lire

Adresse directe: https://github.com/733gh/xiongfan

 

Je suppose que tu aimes

Origine blog.csdn.net/qq_39477770/article/details/110489832
conseillé
Classement