¿Qué preguntas se pueden hacer durante una entrevista para probar el verdadero nivel de un desarrollador de aplicaciones de Android?
Entonces, cuando hago preguntas, a menudo es un ciclo de “dos pasos”:
1. Pregúntale qué hizo. Puedo verlo más claramente si hay un producto terminado.
2. Encuentra problemas de lo que ha hecho y plantéalos. Los problemas específicos dependen de la situación, que pueden ser la implementación de la interfaz o efecto, la eliminación de errores relacionados y el análisis de esta parte del principio.
Tome la conversación de la entrevista como ejemplo:
Primero diré:
"¿Este currículum es el mismo que el enviado en línea?"
"Bueno, debería ser lo mismo."
"Bueno, está bien. ¿Cuál era tu posición en el equipo anterior?"
"Senior".
" ¿Qué pasa con el trabajo específico? "
"Escribe un marco para que sea más fácil para las nuevas personas comenzar y trabajar."
"¿Qué hace exactamente el marco? incluir?"
"Algunas cosas que * * * se pueden usar se pueden escribir para que los recién llegados puedan completar bien el trabajo incluso si acaban de llegar".
"¿Estás encapsulando? la red?"
"Sí."
"¿Qué estás usando para conectarte a Internet?"
"Este es... el HttpClient que viene con Android."
"¿Usado directamente?"
"Hmm."
"Entonces, ¿cómo haces que tus solicitudes de red sean asincrónicas?"
"Um... usa Handler y AsyncTask...
“¿Puedes ser más específico? "
"Bueno... eso es... bueno..."
"Por ejemplo, cuándo usar Handler y cuándo usar AsyncTask, ¿cómo decides? "
"Bueno..."
"O, ¿cuál es la diferencia entre ellos? ¿Por qué Google está construyendo dos en lugar de uno? "
"Diferencia... diferencia... tienen que ser diferentes, de lo contrario Google no podría hacer dos. Bueno..." (Esta pregunta puede terminar aquí. La calificación se reduce en un nivel).
"Bueno, tu currículum menciona que estás "familiarizado con la carga de imágenes grandes". ¿Puedes decirme cómo cargar imágenes grandes? ”
”Caché. "
"¿Almacenamiento en caché? ”
“Bueno, ¿no es lo mismo cargar imágenes grandes que cargar imágenes grandes en ListView? para evitar el desbordamiento de la memoria.
"Debe haber una imagen grande en ListView, ¿verdad?"
"Hmm..." (Si dices que estás familiarizado con algo que no sabes, tu la calificación se reducirá en uno. Sigue preguntando.)
p>
"Entonces, ¿cómo almacenar en caché las imágenes en ListView?"
"Tres niveles de almacenamiento en caché". p>
"¿Cuáles tres niveles?"
"Si hay uno en la memoria, use el que está en la memoria; si no, use el local; si no hay uno local, obtenga desde Internet."
"¿Esto también se llama almacenamiento en caché de red?"
"Ah. Puedes considerarlo como un caché, o no". ...)
"¿Cómo se implementa el almacenamiento en caché de memoria?"
"Usar una tabla hash".
"¿Usar HashMap directamente?"
"Hmm...hmm."
"Si usa HashMap directamente, ¿cómo evitar el desbordamiento de memoria que acabo de mencionar? "
"Puede usar comillas suaves. " (En primer lugar, hay problemas con la respuesta. Además, cuando escuchas la palabra clave "puedes", la mayoría En este caso, esta pregunta se puede terminar; probablemente no, me acabo de enterar, pero por precaución, continuó preguntando)
"¿Pueden las referencias suaves evitar el desbordamiento de la memoria?"
"Y... y un empleado de Google llamado LRUCache". Evite responder directamente, asegurándose de que no lo haga. Este problema se acabó. Calificación rebajada en un nivel. No hay necesidad de hablar de esto. )
Una breve transición puso fin a la entrevista.
Como puede ver, solo necesita hacer una pregunta simple y luego la respuesta de la otra parte continuará haciendo preguntas más profundas y preguntando todo.
-
Alguien en los comentarios me preguntó las respuestas a las preguntas que no terminé en esta entrevista. Si quieres saber más, búscalo en Google tú mismo.
Handler y AsyncTask: estas dos clases se utilizan para implementar AsyncTask. Asynctask está altamente integrado y es fácil de usar. Además, Handler necesita escribir código Runnable o Thread, porque AsyncTask implementa un grupo de subprocesos muy simple; , por lo que en realidad solo es adecuado para operaciones asincrónicas ligeras y, en general, no debe usarse para operaciones de red. Le pregunté la diferencia entre Handler y AsyncTask. Por un lado, dijo que usara AsyncTask para redes, así que creo que no está familiarizado con AsyncTask. Pero lo más importante es que cuando le pregunté sobre los medios específicos para lograr la asincronía, mencionó Handler y AsyncTask al mismo tiempo: escribir un marco de red en esta forma "mashup", incluso si no se tiene en cuenta la disponibilidad de la tarea asincrónica. Parece muy complicado. Es extraño, suena más como "enumerar las clases más utilizadas en Android para implementar operaciones asincrónicas" en lugar de "decir las formas específicas de implementar operaciones asincrónicas en la red". En otras palabras, después de escuchar esta frase, comencé a dudar de la autenticidad de su encapsulación del marco de trabajo en red. Pero simplemente tenía dudas e inseguridad, así que pregunté lo que quería preguntar.
Almacenamiento en caché de imágenes: en la mayoría de los casos, lo más apropiado es utilizar LRUCache en la memoria. Si usa HashMap para implementarlo, no es imposible, ¡pero es completamente innecesario! Debe tener cuidado de liberar el caché en el momento adecuado. En cuanto a cómo liberarlo, todavía no lo he pensado, pero el problema con las referencias suaves es que te resulta difícil controlar el tamaño del caché, es decir, tu caché de imágenes no se reciclará hasta que la memoria está casi lleno. ¿Te sientes estúpido?
Para ingenieros junior e intermedios, prefiero considerar la capacidad de aprendizaje de la otra persona, es decir, si sabe lo suficiente sobre lo que ha hecho, en lugar de exigirle que sea fuerte allí, porque como comencé. Dijo que cada uno es bueno en diferentes cosas y tiene diferentes experiencias. No me gusta criticar a los demás. ¡Mientras tengas una gran capacidad de aprendizaje, me sentiré seguro!