En la entrevista de desarrollo de Android, ¿qué preguntas les gusta hacer más a los entrevistadores?

Autor: Xiao Xie

"¿Qué entrevistas de Android de calidad has tenido?"

[La transferencia de la imagen del enlace externo falló, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-3Pc1xZw5-1691675604271)(//upload-images.jianshu.io/upload_images/ 24388310-aa3c732481d0749f.png?imageMogr2 /orientación automática/strip|imageView2/2/w/1200)]

Este es un tema candente que vi en Zhihu hace unos días. Después de verlo, me interesé y traté de desplazarme hacia abajo. Vi que las respuestas a continuación compartían y contaban sobre mi experiencia de entrevista, sentimientos de entrevista y reflexiones y conclusiones después la entrevista. Digamos que es maravilloso.

Pero viendo que el momento de hacer preguntas fue hace 3 años, ¿por qué todavía hay una ola de calor hoy después de 3 años?

Pensando en esta pregunta, leí las preguntas y respuestas en su totalidad. Pensé en el tiempo de preguntas y luego en el tiempo de presión que recibí. Solo entonces me di cuenta de que se acercaba el "período dorado dorado nueve plateado diez de salto de trabajo", y la mayoría de los programadores están ansiosos por intentarlo, por lo que la pregunta y la respuesta hace tres años nuevamente desencadenaron una ola de calor.

Piénselo, he estado en la industria de Internet durante tres años y he entrevistado a no menos de diez empresas importantes en los últimos años. También hay 3 empresas que recibieron la oferta, incluidas Xiaomi, Netease y Sina. Ahora están pescando en ByteDance. Si hay una oportunidad, ¡unámonos! El nivel promedio de las ofertas que recibí es de alrededor de 24K-27K (trabajando durante 1-2 años), y aproveché la oportunidad de preguntas y respuestas para hacer una ola de revisiones de entrevistas.

1. Empresa A

1. Presentar el proyecto

¡Hice una aplicación de noticias antes, lo que equivale a una imitación baja de los titulares de hoy!

habilidades básicas:

  • Carga de la página de bienvenida (3 s, haga clic para omitir) - Relacionado con la actividad

  • Registro/inicio de sesión de usuario: aplicación SQLite

  • Lista deslizante horizontal para mostrar categorías de noticias: aplicación de TabLayout, ViewPager, FragmentPagerAdapter

  • Cambio de la barra de menú inferior: aplicación Fragment

  • Página de inicio (mostrar lista de noticias) - ListView

  • Configuración (salir de la aplicación, cerrar sesión, borrar el caché) - Gestión de actividades, SharePreference

  • Mi (seguridad de la cuenta, noticias favoritas) - SQLite

  • Desplegable de la lista de noticias, deslice hacia arriba para lograr la actualización - ListView personalizado

  • Recopile noticias una por una, elimine noticias - SharePreference

  • Interfaz de interfaz de usuario de imitación: aplicación de varios controles

  • Haga clic para ver los detalles de la noticia - WebView

  • Función de reemplazo de avatar de interfaz de usuario: permisos de tiempo de ejecución de Android, multimedia, proveedor de contenido

2. ¿Habla brevemente sobre el ciclo de vida de la actividad?

La siguiente figura es el diagrama de transición de estado de actividad (tenga en cuenta que en la figura, el proceso de transición de estado se ejecuta en el cuadro, no en el estado. Como se mencionó anteriormente, solo hay tres estados: EN EJECUCIÓN / EN PAUSA / DETENIDO).

[La transferencia de la imagen del enlace externo falló, el sitio de origen puede tener un mecanismo anti-leeching, se recomienda guardar la imagen y subirla directamente (img-vJsbyXJt-1691675604273)(//upload-images.jianshu.io/upload_images/24388310 -a2e09c41ef074d05?imageMogr2/auto -orient/strip|imageView2/2/w/795)]

3. Describa brevemente el mecanismo de almacenamiento en caché de RecyclerView.

Se puede decir que RecyclerView reemplazó a la vista de lista en las aplicaciones de Android. Su configuración flexible y ensamblada y su mecanismo de almacenamiento en caché múltiple pueden adaptarse a las diversas necesidades de las listas múltiples en el desarrollo de Android.

Para el mecanismo de almacenamiento en caché de RecyclerView, siempre he querido pensar un poco más. En pocas palabras, RecyclerView tiene dos capas de soporte de almacenamiento en caché en comparación con el mecanismo de almacenamiento en caché de Listview. Listview es un caché de dos niveles y RecyclerView es un caché de cuatro niveles. -nivel de caché (por supuesto, en la mayoría de los casos, es el caché L3).

4. En una vista de lista, cada elemento tiene una vista de animación (gif), cuando hago clic en el botón del elemento, se reproduce la animación (gif). Al deslizar la vista de lista cuando se está reproduciendo una animación, ocasionalmente se producirá el evento de extravío de elementos. ¿Cuál es la razón?

Este es un problema de reutilización del elemento y la imagen está fuera de lugar debido a la carga asíncrona

5. Cuando la actividad tiene varios controladores, ¿se confundirá el mensaje del mensaje? ¿Cómo distinguir qué controlador maneja el mensaje actual?

No habrá confusión, qué controlador envía el mensaje y será procesado por este controlador en ese momento. Al enviar un mensaje, vinculará el objetivo, que es el propio controlador. Cuando el controlador necesita llamar a dispatchMessage(msg) para procesar el mensaje, el controlador es el controlador vinculado al enviar el mensaje.

No importa qué método se use para enviar el mensaje, eventualmente llamará a enqueueMessage (MessageQueue queue, Message msg, long uptimeMillis) para enviar el mensaje.

private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {
        msg.target = this;
        if (mAsynchronous) {
            msg.setAsynchronous(true);
        }
        return queue.enqueueMessage(msg, uptimeMillis);
    }

Este es el controlador actual. Al observar la necesidad de un controlador para procesar un mensaje, qué controlador se toma, el código fuente principal se publica a continuación.

public static void loop() {
  ......
        for (;;) {
            Message msg = queue.next(); // might block
            if (msg == null) {
                // No message indicates that the message queue is quitting.
                return;
            }

            // This must be in a local variable, in case a UI event sets the logger
         ......
            if (traceTag != 0 && Trace.isTagEnabled(traceTag)) {
                Trace.traceBegin(traceTag, msg.target.getTraceName(msg));
            }

            final long dispatchStart = needStartTime ? SystemClock.uptimeMillis() : 0;
            final long dispatchEnd;
            try {
                msg.target.dispatchMessage(msg);
                dispatchEnd = needEndTime ? SystemClock.uptimeMillis() : 0;
            } finally {
                if (traceTag != 0) {
                    Trace.traceEnd(traceTag);
                }
            }
           ......

            msg.recycleUnchecked();
        }
    }

Esto es parte del código cuando se repiten los mensajes. El código de procesamiento de mensajes es msg.target.dispatchMessage(msg), donde el objetivo es el controlador que envió el mensaje en ese momento.

2. Empresa B

1. Presentar el proyecto

solo dije, no mas introduccion

2. Cuénteme sobre su comprensión de las referencias sólidas, las referencias débiles y las referencias blandas en Java

Referencia fuerte: Este tipo de referencia es el tipo de referencia que usamos con frecuencia en tiempos normales.La JVM tiene por defecto este tipo de referencia.Por ejemplo, A a = new A(), esta es una referencia fuerte;

Bajo este tipo, cuando el espacio de memoria es insuficiente, la JVM prefiere OOM, lo que hace que el programa se cancele y se cierre de forma anormal, y no lo reciclará a voluntad. Solo cuando no se hace referencia al objeto, la JVM lo reciclará.

Referencia blanda: Podemos usar este tipo de referencia como esta, SoftReference sr = new SoftReference(new A()); Puede usar sr.get() para obtener este objeto, este tipo de objeto de referencia, si la JVM tiene suficiente memoria Se reciclará; si la JVM se queda sin memoria, estos objetos se reciclarán. Este tipo de referencia es adecuado para su uso como caché.

Referencia débil: este tipo de referencia se puede usar aquí, WeakReference wr = new WeakReference(new A()); y luego use wr.get() para obtener este objeto; este tipo de objeto de tipo de referencia tiene más Con un ciclo de vida más corto , cuando el recolector de basura escanea el área de memoria de la JVM y encuentra objetos de este tipo de referencia, estos objetos se reciclarán independientemente de si la memoria actual es suficiente.

3. ¿Qué es un punto muerto? ¿Cuáles son las condiciones necesarias? ¿Cómo evitarlo?

  • Un interbloqueo es una situación en la que varios procesos esperan indefinidamente los recursos que están en manos de otros. Cuando dos o más procesos solicitan el uso de múltiples recursos mutuamente excluyentes al mismo tiempo, puede producirse un interbloqueo.

  • Condiciones mutuamente excluyentes: es decir, solo un proceso puede usar recursos a la vez y otros procesos no pueden acceder a los recursos que se han asignado a otros procesos.

  • Retener y esperar: cuando un proceso espera a que otro proceso libere un recurso, se sabe que retiene el recurso.

  • No preventivo: otros procesos no pueden ocupar por la fuerza los recursos que se han asignado al proceso

  • Espera circular: hay una cadena cerrada y el proceso de la cadena ocupa al menos un recurso requerido por el siguiente proceso de la cadena.

Prevención de interbloqueos:

  • Prevención mutex: imposible de prohibir

  • Evite la posesión y la espera: Deje que el proceso se aplique a todos los recursos a la vez.

  • Prevención de la no preferencia: (1) Cuando el proceso de recursos ocupados solicita recursos, los rechaza y luego libera por la fuerza los recursos actualmente ocupados. Puede volver a aplicar si es necesario. (2) Cuando un proceso solicita un recurso ocupado por otro proceso, el sistema operativo puede adelantarse al proceso ocupado por el recurso. Solicitud de liberación de recursos. La segunda opción solo está disponible si dos procesos tienen prioridades diferentes.

  • Prevención de esperas circulares: definición de una secuencia lineal de accesos a los recursos

4. La diferencia entre TCP y UDP

  1. Basado en conexión vs. sin conexión.

  2. TCP requiere más recursos del sistema y UDP requiere menos.

  3. La estructura del programa UDP es relativamente simple.

  4. Modo flujo (TCP) y modo datagrama (UDP).

  5. TCP garantiza la exactitud de los datos y UDP puede perder paquetes.

**5. Pregunta de algoritmo:** Dada una cadena no vacía s y un diccionario wordDict que contiene una lista de palabras no vacía, determine si s se puede dividir en una o más palabras que aparecen en el diccionario.

Androide

1. ¿Qué métodos deben reescribirse para la vista personalizada?

(Combinado con las necesidades reales, si necesita deslizar, reescriba onTouchEvent, y si necesita controlar su propio diseño, reescriba onMeasure, onLayout)

2. ¿Cómo optimizar el diseño?

3. Mecanismo de mensaje del controlador

4. Hable sobre su comprensión de la optimización de la interfaz de usuario

3. Empresa C

1. Presentar el proyecto

solo dije, no mas introduccion

2. ¿Ha aprendido alguna vez sobre los complementos? ¿Cuál es la diferencia entre el complemento y la creación de componentes?

3. Cuándo usar el contexto de la aplicación y cuándo usar el contexto de la actividad

4. ¿Se debe actualizar la interfaz de usuario en el hilo principal? ¿Se puede actualizar en el subproceso secundario?

5. ¿Cómo es compatible Kotlin con Java?

Después de tantas repeticiones, de hecho, los amigos cuidadosos pueden encontrar que las entrevistas de Dachang prestan más atención a la base de Java y la base de Android, por lo que es necesario resolver una ola de conocimiento antes de la entrevista.

Después de combinar el conocimiento, también preparé una gran cantidad de documentos de aprendizaje, como libros electrónicos y notas de entrevistas. Estas notas resumen perfectamente varios puntos de conocimiento (incluido mucho contenido: conceptos básicos de Android, conceptos básicos de Java, análisis relacionado con el código fuente de Android, algunos preguntas de principio, etc.):https://qr18.cn/CgxrRy

Supongo que te gusta

Origin blog.csdn.net/weixin_61845324/article/details/132219366
Recomendado
Clasificación