He estado involucrado en Android durante un año y me siento bastante profundo (incluido el resumen de la fábrica de reclutamiento de otoño de 2020)

El tiempo vuela Desde la graduación el año pasado hasta la epidemia de este año y luego hasta el final del año en curso , he estado trabajando durante un año sin saberlo. Hace un año, yo era un joven que acababa de ingresar a la sociedad, y ahora me he convertido en un "trabajador" trabajador. Daño ~

Este es el final de las tonterías, volvemos al tema, al fin y al cabo, este blog sigue siendo un resumen de la entrevista de mi primer año en el trabajo de desarrollo de Android, debo afrontarlo.

Después de graduarme con una licenciatura en 19 años, escribí elocuentemente más de un año de código comercial. Antes de prepararme para una entrevista con una importante empresa de Internet en septiembre, comprendí a fondo los conocimientos básicos de las entrevistas de Android. Me tomó más de un mes antes y después. Ahora compartiré con ustedes algunas de las preguntas de la entrevista de Android de las principales empresas de Internet y los puntos de conocimiento básicos de la entrevista de Android que recopilé . Espero que sea de ayuda para todos, y puedo obtener una oferta de una gran fábrica en la contratación de primavera del próximo año.

Para ponerlo en perspectiva, las especialidades de Internet básicamente preguntan lo mismo para el desarrollo de Android 1-3 de nivel junior y medio. Aquí no los clasificaré por empresa. No los clasificaré por empresa. Encontraré cosas, leyendo, B station, Jingdong, Ctrip, Baidu, TouchPal, Tencent, Pinduoduo, y finalmente Xiaopozhan y Goose Factory cuelgan (Penguin está realmente enojado, básicamente no preguntes según el currículum).

texto

Aquí hay algunas preguntas de la entrevista en mi impresión:

Java

1. ¿Entiende la reflexión, la anotación, los genéricos y las excepciones?

Básicamente, se les preguntará. Al responder, no es suficiente con responder el uso básico. Puede hablar sobre sus principios de implementación en la JVM. como:

① ¿Dónde está la pérdida de rendimiento de la reflexión y cómo optimizarla?
②. ¿Dónde se almacena la información anotada? Dos formas de procesar anotaciones (reflexión y APT).
③ ¿Cómo entender el borrado genérico?
④ ¿Cómo entender el principio PECS genérico (un ejemplo típico es el método Collections.copy)?
⑤ ¿Explica las dos formas de excepción (Excepción y Error) por separado?
⑥ ¿La estructura de la instancia anormal? Tabla de excepciones? ¿Por qué finalmente siempre se ejecuta?

2. Código fuente de la colección Java

La pregunta más frecuente es HashMap. El mecanismo de expansión de HashMap, la resolución de conflictos de hash, ¿por qué el factor de carga es 0,75 y por qué el valor límite de la lista enlazada tiene una longitud de 8 y se toma el índice? No es seguro para subprocesos, por lo que involucra ConcurrentHashmap, luego CAS y así sucesivamente.

Finalmente, también puede hablar sobre la optimización de SparseArray y ArrayMap (hay dos colas de caché) recomendadas en Android, y también se debe mirar el código fuente.

ArrayList es relativamente simple, hay una empresa que me permite implementarlo directamente a mano, para que pueda practicarlo. Entonces puede involucrar Vector y CopyOnWriteArrayList seguros para subprocesos.

3. JVM

Las preguntas más frecuentes son la división del área de memoria y GC. Al responder, debe prestar atención a que el borrado de marcas es borrar los objetos no marcados; ¿qué son los objetos GCRoots? No hables de CMS, ha sido abandonado, puedes hablar de G1 y ZGC. Luego está el recuento de referencias y el análisis de accesibilidad. Esto se puede ampliar para hablar sobre el puntero inteligente utilizado por la capa de Android Framework, que es el recuento de referencia utilizado, y luego hablar sobre cómo resuelve el problema de referencia circular.

También hay muchas preguntas sobre el mecanismo de carga de clases.Además de Java, también puedes hablar sobre DexClassLoader en Android y los cambios en Android 8? Luego se puede extender para enchufar y reparar en caliente.

Otros preguntaron sobre máquinas virtuales. En este momento, comience con HotSpot de Java (ejecución de interpretación y ejecución de compilación, compilación jerárquica), luego a Dalvik y finalmente a ART. ¿Cuál es la diferencia entre la compilación JIT y AOT durante el período? análisis de rendimiento del perfil? Para mejorar la recolección de basura, ¿cómo optimizar la pausa de GC (consulte el proceso de recolección de G1)?

  1. Concurrente

El más cuestionado es el principio de realización sincronizado y volátil.
① ¿Cuál es el uso básico de sincronizados?
②, 1.6 mejoras (sin bloqueo, bloqueo de deflexión, bloqueo ligero, bloqueo de peso pesado)?
③, encabezado de objeto Java?
④. Principio de implementación (ACC_SYNCHRONIZED, instrucciones de monitoreo / monitoreoxit)?
⑤ ¿El principio de realización de visibilidad volátil (prefijo de bloqueo + protocolo de coherencia de caché) y orden (barrera de memoria)?
⑥. ¿La realización de CAS (problema ABA, ciclo largo y alto costo, solo puede garantizar la atomicidad de una sola variable compartida)?
⑦, ¿la comprensión de la clase Insegura?

Hay muchas preguntas sobre los grupos de subprocesos, pero básicamente se refieren a los parámetros del grupo de subprocesos.

El siguiente es el "PDF de conocimientos básicos de la entrevista de Android" que pasé más de un mes antes de la entrevista. Tiene 837 páginas y contiene muchos puntos de conocimiento del contenido y puntos de prueba de la entrevista. El núcleo de conocimientos de Android en el PDF se ha subido recientemente a mi Github y requiere una entrevista. Los amigos que lean pueden ir a mi [Github] para descargar y leer .

Androide

1. Básico

Básicamente, la diferencia no es mala, la transferencia de datos de Actividad y Fragmento, ciclo de vida, modo de inicio;

El uso de animación, estimador, interpolador (de hecho, función trigonométrica) es relativamente simple.

El proceso de dibujo de View (desde adjuntar Activity a onResume), y luego extendido a cómo personalizar View, ¿por qué reescribir la comprensión de onMeasure y MeasureSpec?

Ver la distribución de eventos, ¿necesita prestar atención al tiempo de activación de onCancel (normalmente, haga clic y deslice RecyclerView)? Además de la ** Actividad -> ViewGroup -> Ver proceso ** escrito en el blog general. También puede decir:

① ¿De dónde vino el evento (InputManagerService)?
②. ¿El evento se distribuye primero a la Actividad (de hecho, es el mView en ViewRootImpl, que también es DecorView)?
③ ¿Cómo maneja IMS KeyEvent y TouchEvent por separado?

Cuando se habla del proceso de dibujo de View, se puede extender al mecanismo de actualización de View en scheduleTraversal. ¿Procesamiento de señal Vsync? Las primeras tres de las cuatro devoluciones de llamada son fáciles de entender ¿Cómo se activa la devolución de llamada de Commit (onTrimMemory)? Vsync calcula los fotogramas perdidos, cómo monitorear la situación atascada en la línea, uno es usar Vsync y el otro es usar la devolución de llamada Handler de BlockCanary.

Luego está el mecanismo Handler. Básicamente, todos entienden esto, pero se puede hablar sobre la barrera de la memoria, ¿por qué no está bloqueada y cómo se usa IdleHandler en proyectos reales?

2. Marco

De hecho, ya hemos hablado de muchas cosas de Framework cuando respondimos los conceptos básicos de Android. Entonces, este preguntó más directamente sobre el proceso de inicio de la actividad y el mecanismo Binder. Cuando hable sobre el proceso de Actividad, puede hablar sobre los puntos de gancho de estilo de gancho de complemento y los cambios de proceso para Android 8, 10 para iniciar la Actividad.

Mecanismo Binder, primero hable sobre los métodos de comunicación IPC en Linux  (tubería, socket, semáforo, memoria compartida, de hecho, todos se utilizan en la capa Framework, puede hablar brevemente sobre ello) . Luego se centrará en el modelo de comunicación de Binder.

① ¿Cómo se representa Binder en la capa del controlador (binder_node, estructura de datos binder_ref)?
②. ¿Obteniendo el objeto proxy de ServiceManager (getStrongProxyForHandle (0)) y registrando el Servicio?
③ ¿Tres procesos principales para abrir el mecanismo Binder?

Luego están el plug-in y la reparación en caliente, el tipo de proxy estático del plug-in (esto es fácil de escribir, es el apk de carga dinámica de Gang brother) y el tipo de gancho; reparación en caliente Solo conozco la instrumentación dex del mecanismo de carga de clases de Tencent Si está familiarizado con el programa de reemplazo subyacente del departamento de Ali, también puede hablar sobre él.

Finalmente, pregunté sobre el código fuente y subyacente del Framework.

3. Optimización del rendimiento

Esto puede basarse en lo que se hace realmente en el proyecto. Escribí sobre la optimización del volumen del paquete (reducción de 8M +), la optimización del diseño (sobre dibujo y anidamiento del diseño) y la optimización de la memoria (LeakCanary + Perfil de Android).

4. Gradle

Debido a que las habilidades personales y la experiencia en proyectos en mi currículum tienen que ver con Gradle, hay más preguntas sobre esta área. Pregunté principalmente sobre el proceso de compilación y empaquetado (la diferencia entre AAPT y AAPT2) y qué se hizo en algunos proyectos (optimización de compilación, escritura de un complemento de Gradle) .

Red de computadoras

1. TCP

Debo preguntar, debo responder a todos. TCP está orientado a la conexión (protocolo de enlace de tres vías, onda de cuatro tiempos), basado en flujo de bytes, dúplex completo, confiabilidad (control de flujo, control de congestión, mecanismo de retransmisión, etc.). ¿Cómo solucionar los defectos de TCP (bloqueo de cabecera de línea) y HTTP3? ¿Comprende el estado TIME_WAIT?

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

Debe preguntarse, siempre que se trate de un sistema, es fácil de responder.

Comencemos con el HTTP / 1.1 más utilizado (versión hace más de 20 años). Conexiones largas, si se transmiten big data, ¿cuáles son las medidas de optimización ahora (seis conexiones simultáneas por dominio, fragmentación de dominio, sprite, etc.), problemas de HTTP 1.x (bloqueo del encabezado de la capa de aplicación, encabezado sin comprimir, transmisión de texto plano), ¿cómo lo resuelve HTTP2 (multiplexación, algoritmo HPACK, datos binarios)? La inseguridad de HTTP (confidencialidad, integridad, verificación de identidad) ¿está garantizada por HTTPS (TLS_ECDHE_RSA_AES_128_GCM_SHA_256 + PKI)?

HTTP2 (basado en el protocolo SPDY) solo resuelve el problema del bloqueo de cabecera de línea en la capa de aplicación, pero no resuelve el problema de bloqueo de cabecera de línea en la capa de transporte. Entonces, ¿cómo lo resuelve HTTP3 (basado en el protocolo QUIC, usando UDP)? ¿Migración de conexión, corrección de errores de redundancia directa?

Artículos sobre redes informáticas en pdf de conocimientos básicos de Android

algoritmo

Cierto grado: Determine la dirección IP legal.

Un cierto número: arreglo de orden impar-par, la profundidad máxima del árbol (se debe escribir recursivo e iterativo), el algoritmo de adición determina si es una escalera de color:

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

 

Algunas noticias: problema de la isla

Un cierto tesoro: árbol binario simétrico (la recursividad y la iteración deben escribirse)

Artículos sobre algoritmos pdf sobre conocimientos básicos de Android

Expectativas futuras

Ahora, desde el final de la entrevista de reclutamiento de otoño hasta unirme a Baidu, ha pasado casi un mes. Aunque solo he trabajado durante un año, el tiempo no espera. Piensa en el futuro y planifica la carrera con anticipación para romper mejor el desarrollo profesional. embotellamiento.

En el futuro, lo que creo es que la futura transformación del desarrollo de audio y video , después de todo, en este círculo involucrado de Android, la supervivencia del más apto es la regla eterna. Vamos y vence a los trabajadores.

Los amigos que necesiten entrevistas y lectura pueden ir a mi [Github] para descargar y leer

Dirección directa: https://github.com/733gh/xiongfan

 

Supongo que te gusta

Origin blog.csdn.net/qq_39477770/article/details/110489832
Recomendado
Clasificación