Preguntas de la entrevista de Android en 2020

1. Los cuatro componentes principales de Android

1. ¿Cuáles son los patrones de diseño de Android? ¿Qué es el modo proxy, el modo de fábrica? ¿Cuál es la diferencia entre el patrón de fábrica simple y el patrón de fábrica abstracto?

Modo singleton:

 Escribir código de patrón singleton. Hay muchas formas de implementar singletons, como estilo perezoso, estilo hambriento, clase interna estática, verificación de doble bloqueo, enumeración, etc., por lo que es necesario conocer las principales características y escenarios de uso de cada estilo de implementación.

El modo de hombre hambriento ya ha creado objetos en la memoria cuando se inicializa la clase, intercambiando espacio por tiempo, por lo que no hay problema de seguridad de subprocesos.

El modo de hombre perezoso crea el objeto después de que se llama al método, intercambiando tiempo por espacio, lo cual es arriesgado en un entorno de subprocesos múltiples.


2. ¿Cuál es la diferencia entre los dos modos de inicio del Servicio? Al crear un servicio en modo bindService, ServiceConnection puede monitorear el estado del servicio ¿Cuántos estados de identificación hay?

Diferencia de ciclo de vida, relación con el ciclo de vida de la actividad.

ServiceConnection puede monitorear el estado del servicio. Al vincular el servicio, sus banderas pueden ser de los siguientes tipos (aquí hay 3 tipos):

1).Contexto.BIND_AUTO_CREATE    

  Descripción: Al recibir la solicitud vinculante, si el servicio no se ha creado, se creará inmediatamente. Cuando la memoria del sistema es insuficiente, el componente prioritario debe destruirse primero para liberar la memoria, y solo cuando el proceso que reside en el servicio se convierte en el objeto destruido, el servicio será destruido.

2).Contexto.BIND_DEBUG_UNBIND    

  Descripción: generalmente se usa en escenarios de depuración para juzgar si el servicio enlazado es correcto, pero es fácil causar pérdidas de memoria, por lo que no se recomienda para fines que no sean de depuración.

3).Contexto.BIND_NOT_FOREGROUND    

  Descripción: Indica que el sistema evitará que el proceso que reside en el servicio tenga prioridad en primer plano y solo se ejecute en segundo plano.Esta bandera se introduce en Froyo.

3. Cuatro modos de inicio de actividad, mecanismo emergente y de pila de empuje.

10. Frameworks comúnmente utilizados en proyectos

11. Actividad, Fragmento, Ciclo de vida del servicio

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

Actividad:

onCreate(): Ejecutado cuando la Actividad comienza por primera vez;

onStart(): Ejecutado cuando la Actividad es visible;

onResume(): se ejecuta cuando la Actividad puede obtener el foco del usuario;

onPause(): se ejecuta cuando la actividad está visible pero pierde el foco;

onStop(): Ejecutado cuando la Actividad está en un estado invisible;

onRestart(): se ejecuta cuando se vuelve a llamar a la actividad cuando la actividad no se destruye;

onDestory(): Ejecutado cuando se destruye la Actividad;
Fragmento:

onAttach(): Fragmento y Actividad completan el enlace;

onCreate (): inicializar fragmento, solo se llama una vez;

onCreateView(): inicializa el diseño del Fragmento;

onActivityCreated(): se llama después de ejecutar el método onCreate de la actividad;

onStart(): se ejecuta cuando el Fragmento es visible;

onResume (): se ejecuta cuando el Fragmento puede obtener el foco;

onPause(): se ejecuta cuando el Fragmento está visible pero pierde el foco;

onStop(): Ejecutado cuando el Fragmento es invisible;

onDestoryView (): el diseño del fragmento se elimina, pero no se desvincula de la actividad;

onDestory(): Destruir Fragmento;

onDetch(): Desasociarse con Actividad;

Servicio:
startService启动:onCreate,onStartCommand,onDestroy

bindService启动:onCreate,onBind,onUnBind,onDestroy

12. Android 6.0, 7.0 y versiones superiores, cosas a las que se debe prestar atención durante el desarrollo.

13. Mecanismo de comunicación de Binder, cómo los diferentes procesos de aplicaciones utilizan Binder, cómo se inicia Binder

Dos, multiproceso

1. Dos formas de crear hilos en Android y su comparación

    Heredar subproceso; implementar la interfaz Runnable.

2. Configuración de prioridad de subprocesos

setPriority para establecer la prioridad del hilo, el rango es 0-10, el valor predeterminado es 5

3. ¿Cómo implementa AsyncTask la comunicación asincrónica entre el subproceso principal y el subproceso de trabajo?

4. El uso de HandlerThread

Herede la clase Thread y encapsule la clase del controlador

5. Mecanismo de implementación del grupo de subprocesos, cuatro grupos de subprocesos de uso común.

FixedThreadPool: un grupo de subprocesos con un número fijo de subprocesos que se pueden reutilizar , un grupo de subprocesos con un número fijo y la cola de tareas no tiene límite de tamaño;
        solo hay subprocesos principales, y los subprocesos principales aquí no tienen límite de tiempo de espera, porque no se reciclará, por lo que puede Respuesta más rápida
CachedThreadPool: un grupo de subprocesos que crea subprocesos según las necesidades
    El número de subprocesos en el grupo de subprocesos no es fijo; se puede realizar el reciclaje automático de subprocesos, solo subprocesos no centrales y el el número máximo de subprocesos es Integer.MAX_VALUE es
    adecuado para una gran cantidad de tareas que consumen menos tiempo. Tarea
SingleThreadExecutor : el grupo de subprocesos de un solo subproceso de trabajo
    tiene solo un subproceso central y todas las tareas se ejecutan secuencialmente en el mismo subproceso, por lo que no hay no es necesario lidiar con la sincronización de subprocesos ScheduledThreadPool: un grupo
de subprocesos que puede implementar tareas periódicas y de tiempo
    Su número de subprocesos centrales es fijo, mientras que los subprocesos no centrales son ilimitados, y los subprocesos no centrales se reciclarán cuando estén inactivos; es adecuado para realizar tareas programadas y tareas con un período fijo

¿Por qué el grupo de subprocesos utiliza colas (de bloqueo)?

Porque si el subproceso se crea sin límite, puede causar OOM debido al uso excesivo de memoria y provocar un cambio de CPU excesivo.
El costo de crear un grupo de subprocesos es alto. Los subprocesos de creación de grupos de subprocesos deben adquirir el bloqueo principal de bloqueo global, lo que afecta la eficiencia de la concurrencia, y las colas de bloqueo se pueden almacenar en búfer.


¿Por qué el grupo de subprocesos utiliza colas de bloqueo en lugar de colas de no bloqueo?
La cola de bloqueo puede garantizar que cuando no haya ninguna tarea en la cola de tareas, el subproceso que adquiere la tarea se bloquee, de modo que el subproceso entre en estado de espera y libere recursos de la CPU. Cuando hay una tarea en la cola, el subproceso correspondiente se despierta para sacar el mensaje de la cola para su ejecución. Para que el subproceso no ocupe recursos de la CPU todo el tiempo.


RejectedExecutionHandler: política de saturación (4 tipos en total):
1. AbordPolicy: no se pueden procesar nuevas tareas y genera una excepción RejectedExecutionException.
2. CallerRunsPolicy: use el subproceso donde se encuentra la persona que llama para procesar la tarea. Esta estrategia proporciona un mecanismo de control de retroalimentación simple que ralentiza el envío de nuevas tareas.
3. DiscardPolicy: una tarea que no se puede ejecutar y se eliminará.
4. DiscardOldestPolicy: descarta la última tarea de la cola y ejecuta la tarea actual.

6. El bloqueo del método estático y el bloqueo del método no estático tienen un acceso diferente.
7. El papel de los volátiles

8. ¿Por qué los hilos no son seguros? ¿Solución insegura para subprocesos?

La seguridad de subprocesos significa que, en un entorno de subprocesos múltiples, el resultado de cada ejecución es el mismo que el de una ejecución de un solo subproceso, y los valores de otras variables también son los mismos que se esperaba.

9. ¿Por qué HashMap no es seguro para subprocesos en concurrencia? Resolver con ConcurrentHashMap

10. ¿Qué es ThreadLocal?

ThreadLocal no es un Thread, sino una variable local de Thread.

11. principio de bus de eventos

3. Proceso

1. ¿Por qué la comunicación AIDL necesita serializar datos de objetos? Al transferir un objeto de un proceso a otro, ¿el objeto sigue siendo el mismo?

No es el mismo objeto, porque el proceso no comparte memoria, por lo que la dirección de almacenamiento del objeto no se comparte, la dirección de almacenamiento del objeto ha cambiado, por lo que el objeto no es un objeto.

2. Mecanismo de comunicación AIDL y análisis de código fuente Stub

3. ¿Ha leído el código fuente de la clase Stub que implementa la interfaz AIDL en Servie? ¿Qué métodos están contenidos dentro de la clase Stub?

4. Red

1. La diferencia entre tcp y udp

5. Colección

1. El principio de funcionamiento de HashMap

     El concepto de hash La aplicación de equals() y hashCode()
     para resolver colisiones en HashMap
    , y su importancia en HashMap
    Los beneficios de los objetos inmutables
    HashMap Competencia condicional multiproceso
    Reajustar el tamaño de HashMap

     El proceso de operación de poner y obtener

    La diferencia y conexión entre HashMap y Hashtable:

    El mismo punto: el principio de implementación es el mismo, la función es la misma, la capa inferior es una estructura de tabla hash, la velocidad de consulta es rápida y se pueden usar indistintamente en muchos casos

   diferencia:

    1. Hashtable es una interfaz proporcionada anteriormente y HashMap es una interfaz proporcionada por la nueva versión de JDK.

    2. Hashtable hereda la clase Dictionary y HashMap implementa la interfaz Map.

    3. Hashtable es seguro para subprocesos y HashMap no es seguro para subprocesos.

    4. Hashtable no permite valores nulos y HashMap permite valores nulos.

2. La diferencia entre los cuatro tipos de referencia

Referencia fuerte (Strong Reference) Memoria insuficiente, no reciclada.
La referencia suave (WeakReference) no se recicla cuando la memoria es insuficiente y se recicla si la memoria es insuficiente.
Las referencias débiles (SoftReference) se reciclan cada vez.
Una referencia fantasma (PhantomReference) no posee una instancia de objeto y el sistema le notificará cuando se recicle el objeto.

3. ¿Cómo ordenar arraylist<String>?

Collections.sort método, el valor predeterminado es ascendente.

4. La clave hashMap es un objeto, ¿cómo ordenarlo?

(1) Cree un HashMap simple e inserte algunas claves y valores.

Map<String,Integer> hashMap = new HashMap<String,Integer>(); 
hashMap.put("Cinco", 5); 
hashMap.put("Siete", 7);
hashMap.put("Cuatro", 4);
hashMap.put("Ocho", 8); 
hashMap.put("Uno", 1); 
hashMap.put("Dos", 2); 
hashMap.put("Tres", 3); 

(2) Use Set entrySet(): devuelva el conjunto de vistas del objeto Map.Entry, es decir, el par de palabra clave/valor en la imagen.

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

(3) Cree una LinkedList a partir de las entradas de mapas anteriores. Ordenaremos esta lista enlazada para resolver el problema del orden.

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

(4) Collections.sort() es un método integrado que solo ordena una lista de valores, en orden ascendente de forma predeterminada.

(5) Vuelva a almacenar los valores después de clasificarlos en orden ascendente en hashMap.

5. Cuénteme sobre la diferencia entre Lista, Conjunto y Mapa.

 

6.Java

1. ¿Cuál es la diferencia entre una clase abstracta y una interfaz? ¿Cuándo usar la interfaz en lugar de la clase abstracta?

2. La diferencia entre paralelismo y concurrencia

3. ¿Los tres principios de concurrencia: atomicidad, visibilidad, orden y los principios satisfechos por la palabra clave volátil?

volátil: no atomicidad, visibilidad, orden.

7. Algoritmo

1. ¿Ordenación por selección, ordenación rápida?

8. Código fuente

1, interfaz de usuario del sistema

九、JNI

1. ¿Cómo obtiene la capa jni la clase de capa java y cuál es el principio de implementación?

2. La diferencia entre Referencias Locales y Globales

3. ¿Cómo se construye el entorno java de la capa jni?

10. Suplemento

1. ¿Cuáles son los tres valores del sensor de aceleración x, y y z?

      Los valores x, y y z representan el valor de la aceleración, la dirección x es de izquierda a derecha, y es de arriba a abajo y z es de adentro hacia afuera

2. En la clase de servicio, ¿cuál es el mecanismo de implementación interna de la clase interna del agente proxy?

      La implementación subyacente de los métodos asBinder y onTransact.

3. Caso de proyecto de optimización de memoria Android, por ejemplo.

4. Caso de proyecto de fuga de memoria de Andriod, por ejemplo.

5. ¿Por qué Dialog no puede usar el contexto de la aplicación?

6. La diferencia entre Jvm, Dalvik y el art.

7. Hay varios métodos de comunicación entre los módulos de Android.

     1) Event Bus EventBus: reflexión + polimorfismo.

     2) Reenvío de rutas: ActivityRouter

     3) transmitir

8. ¿Qué es ANR? Tiempo de espera, por ejemplo.

9. Para complementos o frameworks de aplicaciones de terceros familiares, dé ejemplos.

10. Componentes de Android

11. Proceso de renderizado OpenGL.

 

 

 

Supongo que te gusta

Origin blog.csdn.net/github_27263697/article/details/107400650
Recomendado
Clasificación