¿Qué se necesita para estar familiarizado con la programación multiproceso?
1. Comprender los conceptos básicos de subprocesos de proceso y ser capaz de utilizar un lenguaje para implementar un ejemplo de subprocesos múltiples en una plataforma. (Estos son demasiado abrumadores si no está familiarizado con los subprocesos múltiples)
2. Comprenda por qué herramientas como Mutex se utilizan como bloqueos para sincronizar y proteger recursos. Comprender conceptos como condiciones de carrera y puntos muertos. 50 preguntas de la entrevista de la compañía, utilizadas para matar a Fearless.
3. Comprender el impacto de la optimización del compilador, el impacto del caché y conceptos como volátil y barrera de memoria. Si eres principalmente Java, aprende sobre el modelo de memoria JVM. A las empresas mencionadas anteriormente, que son más rígidas y orientadas al sistema, les gusta preguntar, pero debido a que son demasiado básicas, los programadores en el campo de subprocesos múltiples que sean un poco curiosos deben entenderlo, de lo contrario se sentirán un poco intimidados.
4. Comprenda la biblioteca de herramientas proporcionada por su plataforma principal + lenguaje y conozca el uso y los escenarios de uso de las herramientas más utilizadas: Mutex, Semaphore, conjunto de operaciones atómicas, variable de condición, bloqueo de giro. Estos se usan con relativa frecuencia y tienen implementaciones correspondientes en varias plataformas e idiomas. Para ser honesto, el spinlock y la variable de condición son cosas que nunca he usado en mi trabajo, pero también me han preguntado, y las otras se usan con demasiada frecuencia. Si es Java, mire un grupo de cosas relacionadas con Executor. y las palabras clave relacionadas con subprocesos múltiples de Java, y las funciones de sincronización proporcionadas por el objeto en sí, como notificación de espera, etc., pregunté a la empresa principal de Java.
5. Comprender los paradigmas de diseño multihilo comúnmente utilizados, como Reader/Writer Lock (Reader/Writer Lock, un paradigma muy clásico, con diferentes variaciones sesgadas hacia la lectura y la escritura, y que se ha requerido para escribir). al menos 3 veces), paradigma de producción y consumo (escrito dos veces), implementación de algunos contenedores de uso común, como BlockingQueue (escrito tres veces) o concurrentHashmap (escrito dos veces). Si eres principalmente Java, puedes consultar la implementación de JDK. Familiarícese con algunos consejos que no se consideran patrones de diseño de subprocesos múltiples, como pasar objetos de solo lectura para evitar bloqueos o copiar para evitar modificaciones externas (preguntados durante la discusión). Otro pequeño detalle que vale la pena mencionar es que la seguridad de subprocesos de Singleton es un tema muy interesante y propenso a errores, que vale la pena leer (solo me preguntaron una vez, pero no respondí, así que quedé muy impresionado). También puede preguntar acerca de algunos pequeños escenarios interesantes que le permiten implementar algunas funciones que requieren seguridad de subprocesos y no pueden prepararse especialmente. Sin embargo, si puede comprender los paradigmas mencionados anteriormente, la mayoría de ellos se pueden resolver si no es estúpido.