2010-06-22 7 views
6

Al entrevistar a los graduados generalmente les hago preguntas sobre estructuras de datos, algoritmos y teoría de la complejidad. Realmente me gustaría hacer una pregunta que les permita mostrar su familiaridad con los conceptos de subprocesos múltiples, sin tener en cuenta los problemas específicos del lenguaje.¿Alguna pregunta relacionada con la entrevista de trabajo relacionada con los buenos hilos?

¿Alguna buena pregunta? La única pregunta que se me ocurre es cómo escribir un Singleton que admita el acceso de subprocesos múltiples.

+0

Hombre, fallaría en la entrevista de trabajo porque no me molesto con cerraduras, etc. Usar un lenguaje diseñado para la concurrencia sana tiene sus ventajas . –

Respuesta

3

La clásica pregunta "escríbeme una cola de productor consumidor" es bastante buena. Puede hablar de sincronización de forma manual de antemano durante cinco minutos más o menos (por ejemplo, comience con "¿Qué hace Object.wait()?" ¿Con qué otros métodos en Object está relacionado? ¿Puede darme un ejemplo de cuándo podría usarlos? las técnicas de concurrencia podrían usarse en la práctica [porque realmente, es bastante raro que el uso de las primitivas wait/notify sea el mejor enfoque]? "). Asegúrese de que el candidato aborde (o al menos deje en claro que conoce) tanto la atomicidad ("actualizaciones perdidas") como la volatilidad (visibilidad del nuevo valor en otros hilos)

Luego, después de haber conversado sobre la teoría de estos, haga que dediquen unos minutos a escribir el código para una cola primitiva productor-consumidor. Esto debería ser sencillo para cualquiera que realmente entienda de lo que estaban hablando anteriormente, pero eliminará a los que pueden "hablar la charla" pero en realidad no lo entienden en la práctica (podría decirse que es el grupo más peligroso).

Lo que me gusta de estos mini-ejercicios de codificación, es que a menudo son fáciles de extender. Por ejemplo, si el candidato completa la tarea fácilmente, puede preguntar cómo la extenderían para la situación XXX: invente requisitos que sepa que superarán los límites de la solución de cabeza hueca que solicitó. Esto no solo le permite adaptar la profundidad de las preguntas que hace, sino que le da una idea de qué tan bien maneja el candidato la aclaración de los requisitos y las modificaciones del diseño existente (que es bastante importante en esta industria).

1

Aquí se pueden encontrar algunos temas para discutir:

  • hilos de ejecución (kernel vs espacio de usuario)
  • almacenamiento local de subprocesos
  • primitivas de sincronización
  • interbloqueos, livelocks
1
  • Diferencias entre mutex y semáforo.
  • Uso de variables de condición.
  • Cuándo no utilizar subprocesos. (por ej., multiplexación IO)
1

Hable con ellos acerca de un tema popular, pero no muy conocido, donde el manejo de los hilos es esencial.

Te recomiendo, construye un servidor web con ellos, por supuesto, solo en papel o simplemente en palabras. El resultado debería verse más o menos así: hay un hilo principal, está escuchando en un socket. Cuando algo llega, pasa el socket al pool, luego este thread regresa al socket que escucha. El grupo tiene un número fijo de ranuras. Los subprocesos de procesamiento de solicitud están dedicados a obtener trabajo del grupo. Descubra, lo que es mejor, si los subprocesos comprueban el grupo al mismo tiempo, o el subproceso principal del planificador selecciona un intervalo/subproceso libre para la nueva solicitud entrante. Intente escribir un pequeño pseudocódigo o un gráfico para ambos lados del manejo de la agrupación.

Vamos a presentar una pequeña aplicación: contador de páginas, que indica cuántas solicitudes de página se han realizado desde el inicio del servidor. No les diga que el contador debe estar protegido contra la modificación concurrente, que descubran cómo hacerlo con mutexes o sincronización o lo que sea. Tal vez podría omitir la parte del servidor web, la aplicación de contador de página es más fácil de especificar.

Otro ejemplo es un chat, con más de 2 clientes y un servidor, descubra cómo resolver el problema, que todos los mensajes deben llegar en el mismo orden para todos los clientes. O juego reflejo: el servidor espera durante 1, 5 segundos al azar, luego dice "peek-a-boo", y el jugador gana primero que presionar la tecla de espacio. Especifíquelo con 2 jugadores, luego intente expandirlo a N jugadores.


Además, tenga en cuenta las centrales nucleares. NPP está parado: "programador que no programa". Hay tipos que pueden hablar sobre problemas de programación, conocen todas las abreviaturas de 3/4 letras (hay lote en el mundo Java, EJB, JSP, XSLT, y mi favorito: POJO, lo que significa Pure Old Java Objetos, lol), entienden y modifican códigos, o hacen programas similares desde una base, pero fallan incluso con pequeños problemas, tiene que hacerlo ellos mismos, por ejemplo encontrar el elemento más cercano a una base en una matriz. A veces lleva meses, hasta que resulta. Se desempeñan bien en las entrevistas, porque se preparan para ello. Tal vez ni siquiera saben, que son centrales nucleares, este es un efecto conocido: http://en.wikipedia.org/wiki/Dunning-Kruger_effect

Es difícil reconocer a los tipos opuestos, que no han oído hablar de bibliotecas o patrones de moda, pero pueden aprenderlo incluso en la entrevista de trabajo. (Comentario personal: mi última entrevista fue en 1999, y parece que ya no haré más entrevistas. Nunca había escuchado sobre páginas web dinámicas, pero descubrí el término "sesión" durante la entrevista, la pregunta era que cómo construir una aplicación web simple para colgar al hombre. Fui contratado)

Cuestiones relacionadas