Preguntas de la entrevista en Java

Preguntas de la entrevista para los programadores de Java

Cuando se habla de la preparación para una entrevista de programación en Java, el enfoque se centra típicamente en el entrevistado. Los candidatos quieren saber qué tipo de preguntas pueden esperar para prepararse mejor. Sin embargo, el punto en cuestión sigue siendo – ¿qué tipo de preguntas de entrevista en Java hace un empleador a los candidatos potenciales para evaluar mejor sus habilidades?

En una empresa de desarrollo de software, independientemente de si el lenguaje de programación java o incluso la programación orientada a objetos es estándar, llegar a las preguntas y respuestas de programación es sencillo. Es fácil emplear Google, por ejemplo, para buscar la sintaxis del lenguaje para ayudar a escribir la entrevista principal de java. Sin embargo, ¿qué sucede en los casos en que (o cuando) la empresa necesita contratar a un contratista para un proyecto simple? O, de manera similar, el equipo existente no es técnico y se está expandiendo para incluir su propio grupo de software interno?

 

 

 

 

Antes de comenzar, aquí hay una rápida definición del término Java que debería ayudarle si no está familiarizado con este lenguaje:

Java es un lenguaje de programación de alto nivel desarrollado por Sun Microsystems. Originalmente fue diseñado para desarrollar programas para decodificadores y dispositivos de mano, pero más tarde se convirtió en una opción popular para la creación de aplicaciones web.

La sintaxis de Java es similar a la de C++, pero es estrictamente un lenguaje de programación orientado a objetos. Por ejemplo, la mayoría de los programas de Java contienen clases, que se utilizan para definir objetos, y métodos, que se asignan a clases individuales. Java también es conocido por ser más estricto que C++, lo que significa que las variables y funciones deben ser definidas explícitamente. Esto significa que el código fuente de Java puede producir errores o “excepciones” con mayor facilidad que otros lenguajes, pero también limita otros tipos de errores que pueden ser causados por variables no definidas o tipos no asignados.

Christensson, P., Java Definition, techterms.com

El objetivo de este artículo es ayudar a preparar al entrevistador, sea cual sea su experiencia con Java. Determinar qué candidato de entre muchos ha presentado la mejor entrevista en java no es una tarea fácil. Al mismo tiempo, no se encontrará usando preguntas de entrevista puramente relacionadas con el código o difíciles. La programación a menudo se basa en la lógica, en lugar de la sintaxis, y sería un grave error penalizar demasiado a los candidatos por no estar totalmente familiarizados con algo que puede ser fácilmente buscado a través de Google.

Dicho esto, es importante recordar que la entrevista es, de hecho, para un puesto de programación en Java. El candidato debe tener conocimientos del entorno de tiempo de ejecución de Java (JRE), la máquina virtual de Java (JVM), el kit de desarrollo de Java (JDK) y más. Las bibliotecas de uso común como java lang, java util no deben ser un misterio. Del mismo modo, aunque se haya dejado de usar, la biblioteca Swing debería al menos sonar familiar mientras que está bien no conocer la biblioteca Awt, que está completamente obsoleta. Finalmente, los candidatos pueden no tener una amplia experiencia, pero deberían al menos estar al tanto de la existencia de frameworks y otras tecnologías como Spring framework, JavaServer Pages (JSP), y Java Database Connectivity (JDBC).

Las preguntas de la entrevista en Java deben ser específicas en algunos aspectos, pero generales en otros. Por ejemplo, ¿es necesario incluir preguntas específicas de la entrevista de JDBC? No es probable. Sin embargo, un candidato debe saber absolutamente qué es la interfaz de la Lista. Del mismo modo, uno puede ser perdonado por no saber inmediatamente cómo interactuar con Oracle usando JDBC, mientras que al mismo tiempo debe tener alguna experiencia en la construcción de una aplicación haciendo uso de los hilos.

Con tantos objetivos en competencia, ¿cómo se encuentra el candidato ideal? La respuesta se basa en un amplio conjunto de preguntas de la entrevista que cubre el tema desde más de una perspectiva.  Este artículo tiene como objetivo abordar estas preocupaciones proporcionando la pregunta de la entrevista en Java, la respuesta o respuestas correctas y la justificación para hacer cada pregunta.

Preguntas y respuestas sobre programación

Este artículo contiene 14 preguntas y respuestas de la entrevista. Las primeras 5 son del nivel de principiante, mientras que las restantes varían tanto en el tema como en el nivel de dificultad. Un puntaje perfecto no necesariamente será el que resulte de responder cada pregunta con algún nivel de satisfacción. Más bien, la discusión sobre las soluciones dará el mejor indicador tanto de la capacidad como de la experiencia.

Preguntas de la entrevista de programación para principiantes

Pregunta de Entrevista de Java #1 – El código de Java proporciona métodos de clase con especificadores de acceso tanto públicos como privados. ¿Cuál es la diferencia entre estos dos modificadores?

Rationale

En la programación orientada a objetos es común limitar el alcance tanto de las variables como de las funciones a clases específicas dentro de una jerarquía de clases. Esto se logra usando varios especificadores de acceso, y conocer la diferencia entre estos componentes fundamentales es una pregunta de entrevista muy relevante en Java.

Particularmente en Java, donde las clases sólo pueden ser declaradas públicas, o no pueden serlo en absoluto – mientras que las funciones de los miembros tienen cuatro modificadores diferentes – este es un tema delicado para los principiantes.

Correct answers

Un especificador de acceso público indica que el método sea accesible tanto dentro como fuera de la clase. Esto es cierto siempre y cuando la clase, en sí misma, sea declarada como pública, o la clase que la llama esté dentro del mismo paquete. Si la clase no especifica un modificador, entonces se asume que tiene acceso por defecto (paquete), y las declaraciones de sus métodos no lo anulan.

Un especificador de acceso privado indica que el método sea accesible sólo dentro de la clase.

Bonus

>Si el candidato sabe que también hay especificadores para protegido y paquete (por defecto) entonces demuestra un buen entendimiento de este tema.

Very bad

Si el candidato no es consciente de la diferencia entre público y privado, entonces indica una falta de experiencia tanto en Java como en otros lenguajes orientados a objetos como C++. Si la respuesta es correcta, pero no se menciona el hecho de que el modificador de clase anula los métodos, debe ser penalizado.

#2 Pregunta de la entrevista en Java – Considere el siguiente código que contiene una clase, una variable estática y un método público. ¿Cuántos bocados se tomaron por cada manzana?

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Apple {
 
    static int bites = 0;
 
    public void takeBite() {
        bites++;
    }
 
    public static void main(String[] args) {
        // Instantiate red and green apples for our example public class
        Apple macintosh = new Apple();
        Apple grannySmith = new Apple();
 
        // Take a bite out of each of the two apples
        macintosh.takeBite();
        grannySmith.takeBite();
 
        // Display the contents of each class
        System.out.println("The Macintosh apple has " + macintosh.bites + " bite(s) out of it.");
        System.out.println("The Granny Smith apple has " + grannySmith.bites + " bite(s) out of it.");
    }
}

Rationale

Las variables estáticas son una característica de java que es utilizada regularmente por los desarrolladores. Al igual que en el caso de las variables globales, es importante que los programadores comprendan el alcance de estos objetos para evitar efectos secundarios no deseados y otros errores.
No declarar una variable. Esto ayuda a evitar escribir mal el nombre de una variable, ya que la variable mal escrita aparecerá como una nueva variable no declarada.

Correct answer

La clase Apple comparte la variable estática, bites, entre todas sus instancias. Por lo tanto, cuando se llama al método takeBite() en cada una de las instancias, la variable común se actualiza. El resultado final es

The Macintosh apple has 2 bite(s) out of it. 
The Granny Smith apple has 2 bite(s) out of it.

Very Bad

Si el candidato responde que cada una de las dos instancias tiene una sola mordida, entonces indica una falta de experiencia con las variables estáticas. Aunque este es un tema trivial que se aprende fácilmente, es uno que se encuentra con frecuencia. El desconocimiento del mismo es un indicador de que el candidato carece de experiencia práctica con el idioma.

Java Interview Question #3 – ¿Qué es una excepción? Describa brevemente los dos tipos de excepción utilizados en el código Java.

Rationale

Las excepciones son eventos inesperados que ocurren en el tiempo de ejecución, y difieren de los errores en que “atraparlos” es un curso de acción razonable. Por otra parte, los errores suelen indicar un problema más grave. El manejo de las excepciones es muy común y debería ser entendido, al menos a un nivel básico, por todos los programadores de java.

Correct answers

Los dos tipos de excepciones en java son excepciones marcadas y no marcadas.

Una excepción comprobada es aquella que está “comprobada” en el momento de la compilación. Cuando hay código en un método que “lanza” una excepción comprobada, se requiere que el método la reconozca. Esto puede lograrse ya sea entregando la excepción con un bloque de prueba/tratamiento, o especificándola usando la palabra clave “throws”. Una excepción no verificada es aquella que no se verifica en tiempo de compilación. Depende del programador especificar o capturar este tipo de excepción. Por el contrario, todas las excepciones en C++ están desmarcadas.

Bonus

En java, todas las excepciones en las clases Error y RuntimeException están desmarcadas. Todo lo demás en Throwable está marcado. Si el entrevistado plantea este punto, entonces demuestra una comprensión más profunda de cuándo se utiliza cada una de ellas.

Very Bad

Si el candidato no conoce las excepciones, entonces le falta una parte crítica del lenguaje que es responsable del control de la ejecución. Esta funcionalidad representa un paso adelante con respecto a lenguajes como el C, que no soporta el manejo de excepciones. Aunque no es absolutamente necesario, los beneficios de usar excepciones son muchos.

Java Interview Question #4 – What are wrapper classes? Give examples of two and their corresponding primitive. How does each relate to an object?

Rationale

Las clases Wrapper son fundamentales en la programación en Java. De hecho, su existencia implica que java no está 100% orientado a objetos (bonus para el candidato que lo señale). Esto es así porque java contiene 8 tipos de datos primitivos que no son, por definición, objetos.

Correct answers

Una clase de envoltura es aquella que contiene una variable que es un tipo de dato primitivo, y envuelve la primitiva para proporcionar funcionalidad para interactuar con ella. Esencialmente, convierte la primitiva en un objeto. Esto es útil, por ejemplo, cuando un método espera que se le pase un objeto. La clase envolvente es válida, mientras que el tipo de datos de la primitiva no lo es. El candidato debe ser capaz de nombrar al menos dos de los siguientes pares:

PrimativeWrapper Class
booleanBoolean
byteByte 
charChar 
doubleDouble 
float Float 
int Int 
long Long  
short Short 

Very Bad

Las clases de wrapper están definidas en java.lang, y son necesarias porque hay muchas clases que sólo soportan objetos. No tener conocimiento de estas clases de envoltura, o de por qué se usarían, es una seria insuficiencia.

Pregunta #5 de la entrevista sobre Java – Defina los siguientes términos que son comunes en la programación en Java

  1. Abstract class
  2. Garbage collector (or garbage collection)
  3. Autoboxing
  4. Serialization

Rationale

Esta lista incluye los términos que se utilizan en java, así como en otros idiomas. Las preguntas de la entrevista para los programadores experimentados incluyen tales definiciones porque pone a prueba el conocimiento profundo y la capacidad de discernir entre los lenguajes con conceptos similares, pero no idénticos.

Correct answers

  1. Una clase abstracta se utiliza como clase base para subclases que extenderán o anularán sus métodos. Como ejemplo, considere una clase “Shape”. Una forma puede contener un número de lados, caras o incluso dimensiones. Tomada aisladamente una “Forma” puede ser de poca utilidad. Por otra parte, si esta clase abstracta se utiliza como clase base para un “cuadrado”, “triángulo” u otro tipo de polígono, puede ser útil en la parte superior de la jerarquía de la clase.
    – No es posible instanciar una clase abstracta.
    – Puede contener métodos abstractos, pero no es necesario.
    – Las subclases de la clase abstracta deben implementar todos los métodos abstractos, a menos que también sea una clase abstracta. No es posible instanciar una clase abstracta.

    El desconocimiento de las clases abstractas no es crítico, aunque es muy probable que se encuentren mientras se mantiene o depura una base de código existente. Además, los programadores orientados a objetos experimentados hacen un uso muy eficiente de las clases abstractas.

  2. La recogida de basura (realizada por el recolector de basura) es el proceso de detección y borrado de los objetos en la memoria que ya no se utilizan o a los que no se hace referencia. En java, la recogida de basura es automática, pero también puede ser solicitada.

    Los comandos System.gc() y Runtime.gc() “indicarán” al recolector de basura que debe ejecutarse, aunque no está garantizado.

    Los hilos que se ejecutan se pausan durante la recolección de basura. Esto necesariamente ralentiza la ejecución, lo que significa que en las aplicaciones que responden, la recogida de basura debe mantenerse al mínimo. No tener conocimiento del recolector de basura no es un factor decisivo, especialmente para un programador junior. Sin embargo, debe tenerse en cuenta que cuando se viene de un lenguaje como C, donde toda la memoria se gestiona manualmente, el programador debe ser consciente de esta funcionalidad.

  3. El Autoboxeo es la envoltura automática de un tipo primitivo, como se discutió en la pregunta #4. Por ejemplo, convertirá automáticamente un flotador en un flotador. Lo opuesto a esto es el desboxeo, donde el tipo primitivo es extraído de la clase de envoltura. Esto es algo con lo que la mayoría de los programadores de java deberían estar familiarizados.
  4. La serialización se refiere a la codificación de objetos en la memoria en un flujo de bytes que puede ser fácilmente almacenado o transmitido. Lo contrario es la deserialización, que reconstruye los objetos a partir de un flujo de bytes. Existen diferentes enfoques para lograr la serialización. Dos métodos comunes son la conversión del objeto a XML (eXtensible Markup Language), o JSON (JavaScript Object Notation). Se trata de tipos de archivo muy conocidos, cada uno de ellos con un amplio soporte. Java también soporta la serialización como parte del lenguaje. El lenguaje incluye la interfaz Serializable, que puede utilizarse tanto para la serialización como para la deserialización. El método writeObject() se utiliza para codificar los datos, mientras que el método readObject() se utiliza para reconstruir los objetos.

#6 Pregunta de la entrevista de Java – Java define una clase String para representar matrices de caracteres. Conteste las siguientes preguntas:

A constructor initializes an object when it is created. However, constructors have no explicit return type.

Generally, you will use a constructor to give initial values to the instance variables defined by the class, or to perform any other start-up procedures required to create a fully formed object.

All classes have constructors, whether you define one or not, because Java automatically provides a default constructor that initializes all member variables to zero. However, once you define your own constructor, the default constructor is no longer used.

 

El hecho de tener conocimientos sobre los hilos de Java, pero no ser consciente de los problemas relacionados con la concurrencia puede conducir a graves errores. La mayoría de los dispositivos, desde los ordenadores de sobremesa hasta los dispositivos móviles y los ordenadores monoplaca, ahora generalmente soportan multihilo y concurrencia. Es importante entender el uso apropiado de los hilos, y ser consciente de los métodos proporcionados por java en apoyo de ellos.

Conclusion

Las preguntas de este artículo son útiles para evaluar la competencia de un posible programador de Java. En el tema de las preguntas de la entrevista para preparar a un desarrollador de Java, es importante recordar que se puede hacer referencia a los detalles del lenguaje fácilmente utilizando la ayuda y la documentación en línea. Los puntos sutiles de un lenguaje no son tan importantes como la forma en que uno aplica la lógica. Dicho esto, se espera que los candidatos a un puesto de trabajo de este tipo conozcan el idioma y no necesiten una formación exhaustiva antes de que comience el trabajo real. Las habilidades requeridas serán dictadas por el trabajo que se necesita hacer, y la variación en las preguntas dadas arriba ayudarán a hacer esta evaluación. No olvide que una de las mejores maneras de evaluar las habilidades del candidato para su proyecto es realizar una evaluación de programación práctica, que es mucho más eficiente que las preguntas de la entrevista oral para contratar a un programador de Java altamente calificado.

Ready to see CodinGame

Assessment in action?