Partager l'expérience d'entretien Android [Sélectionné]

藏色散人
Libérer: 2020-07-31 17:07:00
avant
4857 Les gens l'ont consulté

Recommandation : "Résumé des questions d'entretien Android 2020 [Collection] "

J'ai participé à des entretiens avec de nombreuses entreprises depuis le début de l'année, et aussi a reçu plusieurs offres de géants et d'autres sociétés. Résumer l’expérience est aussi une revue et un résumé du passé.

1. CV

Il existe de nombreux conseils sur les CV des programmeurs sur Internet, je ne les répéterai donc pas ici. Vous pouvez rechercher les résumés d'autres experts sur Internet et. modifiez-les en fonction de votre propre situation. J'ai quelques suggestions :

1. Essayez de ne pas être sophistiqué. Les programmeurs ne sont pas les mêmes que les concepteurs ou les opérateurs de produits. La décision de savoir si notre CV est réussi ou non appartient à l'intervieweur technique et à ce qu'il fait. la valeur est la description du contenu et de la technologie de votre expérience de projet.

2. Dans la description de la compétence, essayez d'écrire uniquement ce que vous savez et comprenez en profondeur. Vous pouvez ajouter de nouvelles technologies ou des frameworks populaires de manière appropriée, mais cela doit être compris si vous n'avez pas eu le temps de le faire. lisez le code source, vous pouvez vérifier ce que les experts en ont dit. Il existe de nombreux résumés sur Internet.

3. Essayez d'ajouter des mots-clés à l'expérience du projet, tels que la technologie utilisée, les modèles de conception utilisés, la comparaison optimisée des données, le résumé étendu, etc. Au lieu de simplement introduire le contenu de ce projet (c'est-à-dire la description du chef de produit), par exemple, l'optimisation des performances est divisée en optimisation des performances de l'interface utilisateur, optimisation de la mémoire, optimisation de la base de données, optimisation du réseau, optimisation de la consommation d'énergie, etc. Il peut être décrit sous les aspects suivants : 1. Comment découvrir le problème, 2. Comment résoudre le problème, 3. Comparaison des effets de la solution. Pour donner un exemple simple : optimisation de l'interface utilisateur, vous pouvez examiner les problèmes qui surviennent dans l'interface utilisateur (bloqués et non fluides), comment trouver le problème (autorisations des développeurs mobiles> problèmes de couche détectés par surdessin du GPU, analyse de l'utilisation du processeur TraceView), comment résoudre le problème (diminution du niveau, problèmes avec le dessin de vue personnalisé, etc.). Comparez à nouveau les performances après avoir résolu le problème.

2. Réserve de compétences

(1) Java

1 Quelle est la différence entre HashMap et Hashtable ?

Vous devez lire le code source pour cela ! Regardez le code source ! Regardez le code source ! Si vous ne pouvez vraiment pas le supporter, vous pouvez aller en ligne et lire les analyses des autres. Un bref résumé :

1. HashMap prend en charge la clé null et la valeur null ne le permet pas. En effet, HashMap gère null spécialement et définit la valeur hashCode de null sur 0, la stockant ainsi dans le 0ème compartiment de la table de hachage.

2.HashMap n'est pas thread-safe. La méthode pour implémenter la sécurité des threads dans HashMap est Map map = Collections.synchronziedMap(new HashMap()); .La longueur par défaut de HashMap est 16. L'extension est 2 fois l'originale ; la longueur par défaut de Hashtable est 11 et l'extension est l'original 2n+1

4. 🎜>

extension, HashMap se compare à ConcurrentHashMap, HashMap compare SparseArray, LinkedArray vs ArrayList, ArrayList vs Vector

2. Mécanisme de récupération de place Java

Besoin de comprendre JVM, division de la mémoire - zone de méthode, tas de mémoire, pile de machine virtuelle (thread privé), pile de méthodes locale (thread privé), compteur de programme (thread privé), comprendre l'algorithme de recyclage - algorithme de marquage et d'effacement, algorithme d'analyse d'accessibilité, algorithme de marquage et de tri, copie algorithme, algorithme générationnel, comprendre les avantages et les inconvénients.

Pour plus de détails, vous pouvez lire ce que d'autres étudiants ont écrit. Cliquez pour ouvrir le lien

3 Mécanisme de chargement de classe

Ceci peut être combiné avec une réparation à chaud pour une entrée. -compréhension approfondie. Cliquez pour ouvrir le lien

4. Threads et pools de threads, concurrence, verrous et une série de problèmes

Cela peut être étendu Comment implémenter vous-même un pool de threads ?

5. Comprendre HandlerThread et IntentService

6. La différence entre une référence faible et une référence douce

7. Quelle est la différence entre int et Integer

Évaluer principalement les problèmes de transfert de valeur et de passage de références

8. Modèle de producteur/consommateur manuscrit

(2) Android

1. Mode de démarrage Android

Besoin de comprendre Activity Stack et taskAffinity

1.Standard : système par défaut, une instance d'activité supplémentaire est démarrée à chaque fois

2.SingleTop : le haut de la pile est réutilisé s'il se trouve en haut de. la pile, le cycle de vie ne passera pas par onCreate() et onStart(), onNewIntent() sera appelé, ce qui convient pour pousser les pages de détails des messages, telles que les détails push des actualités Activity

3.SingleTask; : multiplexage dans la pile, s'il existe dans la pile, toutes les activités qui s'y trouvent sont toutes sorties de la pile afin qu'elles soient en haut de la pile. Le cycle de vie est le même que celui de SingleTop. La page d'accueil de l'application l'utilise essentiellement.

4. SingleInstance : il s'agit de la version améliorée de SingleTask. Le système ouvrira une pile distincte pour l'activité à démarrer. C'est la seule de cette pile. Elle convient aux activités et applications nouvellement ouvertes. qui peut être ouvert indépendamment, comme le réveil du système et l'interface de chat vidéo de WeChat, je ne sais pas si c'est la même chose. Si vous le savez, faites-le-moi savoir.

De plus, SingleTask et SingleInstance semblent affecter le rappel de onActivityResult. Veuillez rechercher des problèmes spécifiques, je ne vais donc pas développer.

L'intention nécessite également une compréhension plus approfondie, l'utilisation et les fonctions respectives de l'action, des données, de la catégorie, ainsi que le

Intent.FLAG_ACTIVITY_SINGLE_TOP
Intent.FLAG_ACTIVITY_NEW_TASK
Intent.FLAG_ACTIVITY_CLEAR_TOP
Copier après la connexion

couramment utilisé, etc. Veuillez consulter le code source pour plus de détails .

2. Afficher le processus de dessin

ViewRoot
-> performTraversal()
-> performMeasure()
-> performLayout()
-> perfromDraw()
-> View/ViewGroup measure()
-> View/ViewGroup onMeasure()
-> View/ViewGroup layout()
-> View/ViewGroup onLayout()
-> View/ViewGroup draw()
-> View/ViewGroup onDraw()
Copier après la connexion

Jetons un coup d'œil à la méthode d'invalidation. Il y a 4 paramètres, et quelle est la différence entre ceux sans paramètres qui déclenchent la mesure et la mise en page, comment procéder. mettre en œuvre une ré-mesure locale, pour éviter le problème de ré-mesure globale.

3. Mécanisme de distribution d'événements

-> dispatchTouchEvent()
-> onInterceptTouchEvent()
-> onTouchEvent()
requestDisallowInterceptTouchEvent(boolean)
Copier après la connexion

et l'ordre de onTouchEvent(), onTouchListener, onClickListener

4. Mécanisme de distribution des messages

Ce test est très courant. Assurez-vous de regarder le code source, il n'y a pas beaucoup de code. Regardons-le avec quelques questions :

1. Pourquoi un fil de discussion n'a-t-il qu'un seul Looper et un seul MessageQueue ?

2. Comment récupérer le Looper du fil de discussion en cours ? Comment y parvient-on ? (Comprendre ThreadLocal)

3. N'importe quel thread peut-il instancier un gestionnaire ? Y a-t-il des contraintes ?

4.Looper.loop est une boucle infinie. Elle se bloquera si elle ne parvient pas à obtenir le message qui doit être traité. Alors pourquoi ne provoque-t-il pas d'ANR dans le thread de l'interface utilisateur ?

5. Comment Handler.sendMessageDelayed() implémente-t-il le délai ? Combiné avec la boucle Looper.loop(), l'analyse Message=messageQueue.next() et MessageQueue.enqueueMessage().

5. Analyse du code source d'AsyncTask

Analyse des avantages et des inconvénients, il y en a beaucoup sur Internet, je ne les répéterai donc pas.

6. Comment s'assurer que le service n'est pas tué ? Comment s’assurer que le processus n’est pas tué ?

Trois entreprises m'ont posé ces deux questions lors de mon entretien.

7. Mécanisme Binder, communication de processus

La couche inférieure de communication de processus utilisée par Android est essentiellement Binder, AIDL, Messager, Broadcast et ContentProvider. Je ne comprends pas très bien. Au moins, comment utiliser ADIL et comment utiliser Messager peuvent être écrits et lus. De plus, la sérialisation (Parcelable et Serilisable) doit être comparée. À cet égard, vous pouvez lire l'art Android. livre d'exploration du développement par Ren Yugang.

8. Problèmes d'adaptation des autorisations dynamiques et principes de mise en œuvre qui changent la peau

Jetons un coup d'œil au billet de blog de Hongyang à cet égard

9. Le principe de SharedPreference, peut-il être croisé -processus? Comment y parvenir ?

(3) Problèmes d'optimisation des performances

1. Optimisation de l'interface utilisateur

a Une sélection raisonnable de RelativeLayout, LinearLayout, FrameLayout, RelativeLayout amènera la vue enfant à appeler onMeasure deux fois, et la mise en page Lorsqu'elle est relativement complexe, onMeasure est relativement complexe et inefficace. LinearLayout permettra également à la sous-vue d'appeler onMeasure deux fois lorsque le poids est > 0. Principe de distribution des mesures de poids LinearLayout.

b. Utilisez les balises

c. Réduisez le niveau de mise en page, vous pouvez utiliser les options du développeur mobile> Vue de dessin de transition GPU, niveau général. contrôle Dans les 4 couches, s'il dépasse 5 couches, vous devez envisager de réorganiser la mise en page.

d. Lors de la personnalisation de View, remplacez la méthode onDraw() et ne créez pas de nouveaux objets dans cette méthode, sinon cela déclenchera facilement GC et entraînera une dégradation des performances

e. lorsque vous utilisez ListView contentView et utilisez Holder pour réduire findViewById pour charger View.

f. Supprimez l'arrière-plan inutile, getWindow().setBackgroundDrawable(null)

g. Utilisez la disposition leftDrawabel/rightDrawable de TextView au lieu de ImageView+TextView

2. Optimisation de la mémoire

Principalement pour éviter le MOO et les déclenchements fréquents de GC entraînant une dégradation des performances

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

b. grand nombre Lors du chargement de Bitmap, chargez Bitmap en fonction de la taille de la vue, sélectionnez raisonnablement inSampleSize, méthode d'encodage RGB_565 ; utilisez le cache LruCache

c Utilisez des classes internes statiques + WeakReference au lieu de classes internes, telles que Handler, thread, AsyncTask.

d. Utilisez un pool de threads pour gérer les threads et évitez de créer de nouveaux threads

e. Utilisez un singleton pour contenir le contexte et n'oubliez pas de le libérer, ou utilisez un contexte global

f. Faites attention à la libération des objets de collection statiques

g. L'animation des attributs provoque des fuites de mémoire

h Lors de l'utilisation de webView, elle doit être supprimée et détruite dans Activity.onDestory, webView. removeAllViews() et webView.destory()

Préparation : utilisez LeakCanary pour détecter les fuites de mémoire

3. Optimisation de la vitesse de réponse

Si l'activité ne peut pas répondre aux événements tactiles de l'écran et du clavier. événements d'entrée dans les 5 secondes, l'ANR se produira, et si BroadcastReceiver 10, l'ANR se produira si l'opération n'est pas effectuée dans les secondes, et l'ANR se produira dans Serve20 secondes. Afin d'éviter l'ANR, vous pouvez démarrer un thread enfant pour effectuer un time-. opérations consommatrices, mais le thread enfant ne peut pas mettre à jour l'interface utilisateur, donc le mécanisme de message du gestionnaire, AsyncTask et IntentService sont requis pour la communication du thread.

Remarque : lorsque l'ANR se produit, adb extrait data/anr/tarces.txt combiné à l'analyse du journal

4 Autres optimisations de performances

Utiliser la modification finale statique pour les constantes.

b. Utilisez SparseArray au lieu de HashMap

c. Utilisez le pool de threads pour gérer les threads

d. >e. Ne pas utiliser excessivement les énumérations, qui occupent plus d'espace mémoire que les entiers

f Donner la priorité à StringBuilder et StringBuffer pour l'épissage de chaînes

g. >

(4) Modèles de conception

1. Modèle Singleton : Il existe plusieurs méthodes d'écriture, nécessitant que vous soyez capable d'écrire à la main et d'analyser les avantages et les inconvénients. Le volatile est généralement utilisé dans les serrures à double contrôle, et le principe du volatile doit être analysé

2. Mode observateur : Il est nécessaire de pouvoir écrire à la main. Certains enquêteurs vous demanderont si vous l'avez utilisé. dans le projet ? Si vous n'en avez vraiment pas entendu parler, vous pouvez parler d'EventBus, qui utilise le mode observateur

3. Mode adaptateur : Il est nécessaire de pouvoir écrire à la main. Certaines entreprises demanderont quel est le mode. différence entre celui-ci et le mode décorateur et le mode proxy ?

4. Mode constructeur + mode usine : Il est nécessaire de pouvoir écrire à la main

5. Mode stratégie : Ceci est demandé moins fréquemment, mais certains e-commerçants le demanderont. .

6.MVC, MVP, MVVM : comparez les similitudes et les différences, choisissez simplement celle pour laquelle vous êtes bon et concentrez-vous dessus

(5) Structure des données

1. Quelles sont les différences d'utilisation et de principes entre HashMap, LinkedHashMap et ConcurrentHashMap ? âge de la population Problème de tri, l'âge correspond au nombre de buckets, le même âge et le même problème de hachage sont similaires.

2. En comparant ArrayList et LinkedList, celui-ci est relativement simple.

3. J'ai également été testé sur des arbres binaires équilibrés, des arbres de recherche binaires et des arbres rouge-noir.

4. Principe d'ensemble, ceci est quelque peu similaire au test HashMap. Le test est lié à l'algorithme de hachage. On m'a posé des questions sur l'algorithme de hachage couramment utilisé. HashSet utilise en interne HashMap

(6) Algorithme

L'algorithme est principalement utilisé pour tester les questions. Allez sur LeetCode et Niuke.com pour rafraîchir.

(7) Compréhension du code source

Les frameworks open source sont plus ou moins utilisés dans les projets, comme le réseau. framework Okhttp, qui est le plus couramment utilisé, Retrofit+RxJava est également très populaire maintenant.

1. Bibliothèque de framework réseau Okhttp

Assurez-vous de lire le code source d'okhttp, ainsi que les pools de connexions et les intercepteurs. On m'a demandé comment ajouter des en-têtes aux URL de certains noms de domaine spécifiques. Si le code est encapsulé par vous-même, il peut être résolu dans la requête encapsulée, ou vous pouvez ajouter un intercepteur et le faire via l'intercepteur.

Recommander un bon article expliquant Okhttp

2. Notification de message EventBus

1. Principe EventBus : Il est recommandé de lire le code source, il n'y a pas grand chose. Implémentation interne : modèle d'observateur + annotations + réflexion

2. EventBus peut-il effectuer des processus croisés ? Méthodes pour remplacer EventBus (RxBus)

3. Bibliothèques de chargement d'images (Fresco, Glide, Picasso)

1. Quelle bibliothèque de chargement d'images a été sélectionnée dans le projet ? Pourquoi le choisir ? Les autres bibliothèques sont-elles mauvaises ? La différence entre ces bibliothèques

2. Choisissez le principe de la bibliothèque d'images dans le projet, comme Glide (LruCache combiné avec des références faibles), puis l'intervieweur posera des questions sur le principe de LruCache, puis sur le principe de LinkedHashMap, donc couche par couche, les gens posent des questions, il est donc recommandé que si vous voyez quelque chose que vous ne comprenez pas, vous devriez y aller et y jeter un œil. Par exemple, Fresco est utilisé dans le modèle de conception MVC et la mémoire partagée est utilisée sous la version 5.0. Comment utiliser la mémoire partagée ? Comment réaliser des coins arrondis dans Fresco ? Comment configurer le cache dans Fresco ?

4. Message Push

1. Avez-vous effectué vous-même le message push dans le projet ou avez-vous fait appel à un tiers ? Comme l'aurore. En avez-vous utilisé d'autres ? Quels sont les avantages et les différences entre ces entreprises, et pourquoi les avez-vous choisies ?

2. Quel est le principe du push de message ? Comment implémenter la connexion Heartbeat ?

5. TCP/IP, Http/Https

Dans le domaine réseau, s'il est indiqué dans votre CV que vous connaissez le protocole TCP/IP et le protocole Http/Https, vous le ferez certainement être demandé, et je le vérifierai. En général, je répondrai à la relation entre la couche réseau, à la différence entre TCP et UDP, à la négociation à trois voies TCP (assurez-vous d'expliquer clairement, vous devez être familier avec les bits d'indicateur tels que SYN, ACK et la structure du message), et agitez quatre fois. Pourquoi trois poignées de main ? Attaque DDoS. Pourquoi devons-nous nous serrer la main trois fois et saluer quatre fois ? Structure du message Http, quel est le processus d'une requête réseau ? Quelle est la différence entre HTTP et HTTPS ? Comment SSL/TLS effectue-t-il une négociation cryptée ? Comment vérifier le certificat ? Que sont les algorithmes de chiffrement symétriques et les algorithmes de chiffrement asymétriques ? Choisir un algorithme de chiffrement familier et le présenter brièvement ? Comment fonctionne la résolution DNS ?

6. Mise à jour à chaud, réparation à chaud et plug-in (ce domaine est plus exigeant et les ingénieurs expérimentés doivent généralement le comprendre)

Comprendre classLoader

7. technologies

RxJava, RxBus, RxAndroid, lors d'un entretien avec l'entreprise dans laquelle vous souhaitez vous rendre, vous pouvez décompiler leurs packages et voir s'ils sont utilisés, vous poserez forcément des questions lors de l'entretien. Sinon, comment pouvez-vous les utiliser ? Il peut être ignoré, mais les étudiants ayant un fort désir d'apprendre peuvent y jeter un œil.

Retrofit, les étudiants qui connaissent okhttp recommandent d'y jeter un œil. J'ai entendu dire que c'était très cool de le combiner avec RxJava.

Kotlin

3. Enfin

La méthode privilégiée de recommandation interne pour les CV est rapide et efficace ! Ensuite, vous pourrez jeter un œil au crochet, au patron, à Maimai et à la rue. Il est dit sur votre CV que si vous connaissez une technologie, vous devez la connaître, sinon ce ne sera pas gênant lorsqu'on vous le demandera ! Quel genre de projets avez-vous réalisé ? Même si la taille du projet n'est pas de grande envergure, vous devez connaître les principes de mise en œuvre ! Ce n'est pas la partie dont vous êtes responsable. Vous pouvez également regarder comment vos collègues la mettent en œuvre. Que feriez-vous si c'était vous ? Ce que vous avez fait et ce que vous savez est une question d’ampleur, qui dépend du contenu du projet. Mais ce que vous avez fait et l’état que vous avez atteint sont des problèmes profonds liés à votre capacité d’apprentissage personnelle et à votre attitude envers la résolution de problèmes. Les grandes entreprises regardent en profondeur, les petites entreprises en profondeur. Vous savez ce que vous savez lorsque vous interviewez avec de grandes entreprises, mais si vous savez ce qu'elles utilisent lors des entretiens avec de petites entreprises, c'est le degré d'adéquation à l'emploi.

Après avoir sélectionné quelques entreprises dans lesquelles vous souhaitez vous rendre, rendez-vous d'abord dans certaines petites entreprises pour pratiquer et acquérir des techniques d'entretien. En résumé, vous pouvez également vous familiariser avec l'atmosphère de l'entretien. rivaliser avec des collègues ou des produits. C'est très clair et clair quand on arrive sur scène. Comment décrire tout ce que vous faites est définitivement une question académique !

Soyez poli lors de l’entretien ! Même si vous sentez que l'intervieweur ne vous respecte pas et interrompt souvent vos explications, ou si vous sentez qu'il n'est pas aussi bon que vous et que les questions qu'il pose manquent de professionnalisme, vous devez le respecter car c'est lui qui vous choisit maintenant et attend. pour que vous obteniez l'offre. C'est vous qui le choisissez à la fin.

Assurez-vous également de décrire le problème lentement ! Ne parlez pas beaucoup à la fois. La lenteur montre que vous êtes calme et confiant et que vous avez encore le temps de réfléchir à vos idées sur la façon de mieux parler ensuite. De nos jours, le développement s'appuie trop sur l'IDE, donc il y aura un inconvénient quand on l'expliquera dans l'interview, il est facile de ne pas savoir comment prononcer une certaine méthode. C'est un défaut... Il faut donc connaître le commun. Les noms de classes clés, les noms de méthodes et les mots-clés doivent être lus avec précision. Certains intervieweurs seront impatients et diront : « De quoi parlez-vous à ce moment-là ? Une prononciation correcte + une description calme + une belle voix sont définitivement un plus !

Le plus important c'est la mentalité ! Mentalité! Mentalité! Dites les choses importantes trois fois ! La durée de l'entretien est très courte et il est relativement irréaliste pour l'autre partie de découvrir vos antécédents en peu de temps. Par conséquent, cela repose parfois également sur la vue.

J'espère que chacun pourra trouver un emploi adapté et satisfaisant ! lutte!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jianshu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal