¿Por qué incluso los llamados desarrolladores experimentados de Java luchan con las preguntas de la entrevista de trabajo de subprocesos múltiples?

Como indica la respuesta de Vilnis, la concurrencia es difícil. Es difícil incluso para programadores experimentados. Es difícil incluso para desarrolladores con experiencia significativa en concurrencia.

En las entrevistas no hago preguntas difíciles de concurrencia. Sin embargo, quiero ver que el candidato tenga una comprensión básica de los patrones que promueven la seguridad de los hilos. Por ejemplo, espero que sepan qué es un objeto inmutable y por qué podría ser ventajoso “favorecer la inmutabilidad” (como escribió Joshua Bloch). También quiero ver una comprensión básica de cuándo usar colecciones sincronizadas y / o métodos sincronizados.

Es sorprendente cuántos programadores intermedios y superiores fallan en estas pruebas básicas, incluso cuando les doy pistas.

Más allá de esto, sin embargo, es un poco irracional esperar demasiado, especialmente en una entrevista. Cuando se trata de concurrencia, intentamos asegurarnos de que dicho código sea revisado por más de un desarrollador senior y guardamos un par de copias de “Concurrencia de Java en la práctica” de Goetz et al. En la oficina. Todos los desarrolladores senior bromean acerca de cómo ese libro nos asusta (especialmente los primeros capítulos). Recomiendo a cualquier desarrollador serio de Java que obtenga una copia de ese libro e intente aprender de él, aunque sea un poco hora. El desarrollo serio de software requiere una competencia razonable con concurrencia práctica.

Porque no es intuitivo. Hacer concurrencia de Java utilizando las primitivas de subprocesos es casi como programar la JVM en lenguaje máquina. (Y, Java Concurrency in Practice también es bastante difícil).

Afortunadamente, tenemos mejores abstracciones, como Akka y el modelo de actor, y los trabajadores y las colecciones paralelas en las versiones posteriores de Java.

Muy pocas personas realmente pueden reclamar experiencia en concurrencia.

Al comienzo de mi carrera (luego de aproximadamente 1,5 años de experiencia en Java), tuve la oportunidad de ser entrevistado por JP Morgan Chase. La entrevista se centró principalmente en la concurrencia y tenía un conocimiento de concurrencia muy básico. preguntas anticipadas

Fue una pesadilla. Estaba sudando y solo contando minutos para que la entrevista terminara.

Supongo que la entrevista me resultó difícil porque nunca tuve que usar mucha concurrencia en mis proyectos. En realidad, en mis 4 meses de capacitación al comienzo de mi trabajo, se prestó menos atención a la concurrencia.

Hay algunos temas desafiantes en Java para una nueva abeja Java: “Genéricos”, “Colecciones”, “E / S” , Polimorfismo , etc., pero el tema más desafiante en mi opinión (incluyendo incluso cualquier marco de Java. Los marcos son relativamente fáciles de aprender en realidad).

Desde mi entrevista con JP Morgan Chase, he estado aprendiendo concurrencia de vez en cuando y los Libros que encontré útiles son los siguientes:

Primero tomé el libro ” Concurrencia de Java en la práctica “, pero lo encontré desafiante. Por lo tanto, no comiences con este libro al principio.

  1. Hace un año, estaba revisando el sistema operativo a través del libro “Galvin ” y hay 2 capítulos completamente dedicados a la concurrencia. Encontré que esos 2 capítulos son una muy buena introducción a la concurrencia (aunque no en Java).
  2. Oracle Certified Professional Java SE 7 Programmer Exams 1Z0-804 y 1Z0-805 por SG Ganesh & Tushar sharma . – excelente libro. Tiene 2 capítulos sobre concurrencia y cubre aproximadamente el 80% de los temas del libro “Concurrencia de Java en la práctica”. Para ser sincero, en realidad no esperaba tan buena cobertura de concurrencia en este libro. Creo que este es el mejor libro para comenzar concurrencia en java. Ganará mucha confianza después de leer esos 2 capítulos de este libro.
  3. OCP Java SE 7 Programmer II -por Mala gupta- este libro también tiene una muy buena cobertura sobre concurrencia y te hace sentir cómodo, pero el libro mencionado anteriormente tiene una mejor cobertura sobre concurrencia.
  4. Ahora que se siente cómodo con este tema, comience con el libro “Concurrencia de Java en la práctica” para consolidar su conocimiento de concurrencia . En realidad, dejando al descubierto 2–3 capítulos, no encontrará dificultades para leer este libro.
  5. Un curso muy bueno e integral sobre temas avanzados: “Ececutors” en Simultaneidad: Multithreading Java eficiente con ejecutores – Udemy
  6. Pluralsight tiene un curso increíble sobre subprocesos múltiples: aplicación de concurrencia y subprocesos múltiples a patrones comunes de Java. Encontré estos cursos mucho más tarde, de lo contrario, no tendré que pasar por todo el dolor de los subprocesos múltiples.

Todavía no soy un experto en este tema, pero el miedo por este tema se ha ido.

Espero que encuentres los libros y cursos anteriores útiles!

Porque apenas tienen que codificar eso. La mayoría de los desarrolladores de Java trabaja en aplicaciones web creadas con frameworks. Todos estos marcos vienen con soporte incorporado para generar hilo para cada solicitud. Han pasado 9 años y, por primera vez en mi vida, investigué el código que involucra Threads.

Estas preguntas pueden ayudar – Java / J2EE – Preguntas y respuestas de la entrevista sobre subprocesos y subprocesos múltiples

Hay un video de Bjarne Stroustrup en YouTube (que no pude encontrar en este momento) en el que afirma, con calma y sin ambigüedades, que la programación multiproceso es algo que es mejor dejar a “las personas que saben lo que están haciendo”.