¿Cómo debo prepararme para las preguntas de concurrencia que se hacen en las entrevistas de Dropbox?

Hay preguntas estándar que parecen formularse en entrevistas sobre concurrencia, es probable que se le hagan algunas de las siguientes preguntas:

Los mayores problemas de concurrencia son los puntos muertos y las condiciones de carrera.

Los puntos muertos se producen porque para acceder de forma segura a los recursos compartidos en un entorno de subprocesos múltiples, debe “bloquear” el recurso; debe usar un mutex para evitar que cualquier otro subproceso acceda a ese recurso.

Espere preguntas como:

¿Qué es un punto muerto?
R: Un punto muerto es donde múltiples subprocesos compiten por recursos bloqueados por otros subprocesos, por ejemplo, cuando dos subprocesos intentan adquirir un recurso retenido por el otro subproceso.

¿Cómo se reduce el riesgo de un punto muerto?
R: Intente asegurarse de que el código siempre adquiera un bloqueo de recursos en un orden establecido. Entonces, por ejemplo, si el Hilo 1 y el Hilo 2 quieren el recurso A y el recurso B, y siempre intentan adquirir el recurso A primero, luego el recurso B en ese orden, entonces no puede ocurrir un punto muerto. Un punto muerto solo ocurre si el hilo 1 intenta adquirir el recurso A primero, y el hilo 2 intenta adquirir el recurso B primero.

Las condiciones de carrera se producen porque ha olvidado bloquear un recurso compartido, porque varios subprocesos pueden actualizar o leer un recurso simultáneamente al mismo tiempo. El resultado es el caos, porque no hay forma de predecir qué hilo intentará actualizar el recurso primero.

¿Qué es una condición de carrera?
R: Una condición de carrera es cuando varios subprocesos intentan actualizar o leer un recurso sin bloquear el recurso. El estado de la aplicación depende de qué subproceso llegue primero, de ahí el término “condición de carrera”.

¿Cómo se previenen las condiciones de carrera?
R: Asegúrese de que los recursos compartidos se administren correctamente, con mutexes u otras herramientas de administración de concurrencia para garantizar un acceso ordenado al recurso.

Otra pregunta que a veces surge es el bloqueo de lector y escritor. Normalmente, si está accediendo a un recurso, lo bloquea, pero en un sistema de alto rendimiento esto puede causar un retraso excesivo: si tiene 50 hilos que intentan acceder al recurso al mismo tiempo, hacer que todos esperen su turno puede tener un Impacto grave en el rendimiento.

Una solución es un bloqueo de lector y escritor. El bloqueo de lector y escritor tiene dos niveles diferentes de bloqueo, uno para lecturas y otro para escrituras. Si un hilo quiere leer el valor del recurso compartido, no hay problema en que otros hilos también adquieran un bloqueo de lectura al mismo tiempo. Entonces, si los 50 hilos solo quieren leer el valor del recurso, todos pueden hacerlo al mismo tiempo.

Pero si un hilo quiere escribir el recurso (actualizar el valor), todos están bloqueados hasta que se libere el bloqueo de escritura.

Espero que esto ayude, pero le recomiendo que también experimente con la concurrencia, escribiendo su propio código. No hay sustituto para aprender a través de la experiencia.

Sí, definitivamente se le harán preguntas sobre concurrencia y subprocesamiento múltiple. Es una buena inversión de tiempo para preparar estas preguntas.

He creado una lista de preguntas de entrevistas simultáneas formuladas en empresas como Google, Facebook y Dropbox.

Aquí está el enlace: Preguntas de la entrevista de Java MultiThreading

¿Quieres aprender cómo descifrar la entrevista de codificación en dropBox?

Entonces, esta guía podría ayudar: Cómo tener éxito en las entrevistas técnicas

Buena suerte

Si codifica principalmente en Java, la “concurrencia de Java en la práctica” y la Lección: Concurrencia (Tutorial de concurrencia de Oracle) cubre casi todo. El descanso es solo una cuestión de practicar la implementación de esos conceptos.

More Interesting

¿Dónde encuentro más preguntas de diseño de software con una posible respuesta como se proporciona en la entrevista de Cracking the Coding?

Antes de una entrevista, ¿los entrevistadores de las principales compañías de software están actualizando su conocimiento de algoritmos / estructura de datos?

¿Es aconsejable no dar las respuestas de inmediato en una entrevista de programación para dar una buena impresión de que conozco todas las respuestas, así como reducir el número de preguntas del entrevistador ya que está programado?

¿Cómo encuentra la distancia de edición entre una cadena dada y un RegExp?

¿Cuáles son algunos ejemplos de configuraciones de problemas de entrevistas técnicas que son buenas para evaluar candidatos de aprendizaje automático?

¿Cuáles son algunas de las preguntas de la entrevista en lenguaje HDL?

Cómo dominar una entrevista de programación

¿Cómo puede un ingeniero de ECE aclarar la ronda de entrevistas técnicas?

¿Qué se cumple en el medio algoritmo wrt programación competitiva?

¿Qué debo hacer cuando me quedo atrapado en una entrevista de codificación?

Mañana tengo una entrevista para un puesto de ingeniero integrado (ver descripción). ¿Qué preguntas puedo esperar en general y en el aspecto técnico?

¿Qué se supone que debo hacer para resolver este ejercicio de programación (ver los detalles)?

Cómo encontrar la subcadena de repetición máxima de tamaño n

¿Cómo escribirías el código para encontrar la tarjeta faltante del mazo en una complejidad mejor que O (n)?

¿Existe alguna otra forma de mejorar mis habilidades de programación contribuyendo a mi propia fuerza en un proyecto de código abierto?