Si alguna vez se preparó para una entrevista para un puesto de programador de Java o aprobó algún examen de certificación (no necesariamente sobre programación), probablemente ya haya notado que las preguntas que se hacen allí son muy específicas. Muchos de ellos te obligan a pensar en el diseño del lenguaje. Algunos están diseñados para sondear las profundidades de su conocimiento. Hay preguntas que parecen más acertijos que otra cosa, mientras que otras se relacionan con matices del lenguaje que son muy difíciles de percibir sin práctica. En este artículo, el desarrollador Sarans Sing presenta algunas preguntas sobre Java. Con respuestas, por supuesto.
1. ¿Qué sucede si coloco una declaración de devolución o System.exit() en un bloque try/catch? Esta es una pregunta de Java muy popular y sutil. El truco es que muchos programadores creen que el

finally
bloque siempre se ejecuta. Al colocar una return
declaración en un try/catch
bloque o llamar System.exit()
desde dentro de un try/catch
bloque, la pregunta pone en duda esta creencia. La respuesta a esta pregunta engañosa es: el finally
bloque se ejecutará cuando return
se coloque una declaración en un try/catch
bloque, pero no se ejecutará cuando System.exit()
se llame desde dentro de un try/catch
bloque. 2. ¿Java admite la herencia múltiple? Esta es una pregunta muy difícil. Los entrevistadores a menudo preguntan: "Si C ++ es compatible con la herencia múltiple directa, ¿por qué no lo es Java?" la respuestaes un poco más complicado de lo que parece, ya que Java admite la herencia de tipos múltiples. Después de todo, una interfaz Java puede extender otras interfaces. Dicho esto, Java no admite la herencia múltiple de implementaciones. 3. Si un método en una clase principal arroja NullPointerException
s, ¿puede ser anulado por un método que arroja RuntimeException
s? Esta es otra pregunta complicada relacionada con la sobrecarga y la anulación. Respuesta: un método anulado puede generar de manera segura NullPointerException
la clase principal de RuntimeException, pero no puede hacer lo mismo con un tipo de excepción verificado como Exception
. 4. ¿Cómo garantiza que N
los subprocesos puedan acceder N
a los recursos sin interbloqueos? Si escribir código de subprocesos múltiples no es su fuerte, es posible que realmente se tope con esta pregunta. Puede ser difícil incluso para un programador experimentado que no haya encontrado interbloqueos ni condiciones de carrera. Todo el truco aquí está en el orden: puede evitar bloqueos liberando recursos en el orden inverso al que fueron adquiridos. 5. ¿Cuál es la diferencia entre las clases StringBuffer
y StringBuilder
en Java? Esta es una pregunta clásica del lenguaje Java que algunos desarrolladores encuentran complicada y otros, muy simple. La StringBuilder
clase apareció en JDK 1.5. La única diferencia entre estas clases es que StringBuffer
los métodos de , como length()
, capacity()
y append()
, están sincronizados, mientras que los métodos correspondientes enStringBuilder
no son. Esta diferencia fundamental significa que la concatenación de cadenas es más rápida StringBuilder
con StringBuffer
. StringBuffer
En realidad, no se recomienda su uso , ya que la concatenación de cadenas se realiza en el mismo subproceso el 99 % de las veces. 6. ¿Cuál es el resultado de evaluar la expresión 1.0/0.0? ¿Producirá una excepción o un error de compilación? Esta es otra pregunta engañosa sobre la clase. Los desarrolladores de Java son conscientes de la existencia de un tipo de datos doble primitivo y una clase , pero cuando realizan operaciones de punto flotante no prestan suficiente atención a , , y las reglas que rigen los cálculos aritméticos asociados. La respuesta a esta pregunta es simple: un
Double
Double
Double.POSITIVE_INFINITY
Double.NEGATIVE_INFINITY
NaN
-0.0
ArithmeticException
no será arrojado; la expresión se evalúa como Double.POSITIVE_INFINITY
. 7. ¿Qué sucede si intenta insertar una clave en un HashMap
que ya contiene esa clave? Esta pregunta engañosa es parte de otra pregunta frecuente: ¿cómo funciona HashMap
Java? HashMap
es una fuente popular de preguntas confusas y engañosas sobre Java. Aquí está la respuesta: si intenta volver a insertar una clave en un HashMap
, la clave anterior será reemplazada, ya que la HashMap
clase no permite claves duplicadas. Y la misma clave obtendrá el mismo código hash, lo que significa que terminará en el mismo lugar en el cubo hash. Basado en materiales de Quora
GO TO FULL VERSION