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.

Java Interview Question #7 – Could you name some Java frameworks?

This interview question is a basic one: any competent Java developer is able to name some frameworks written in Java language.
During the interview, the interviewed candidate must mention at least three Java frameworks among this list:

JSF (Java Server Faces), a Java web framework that makes easier the construction of user interfaces for server-based applications
GWT (Google Web Toolkit), an open-source set of tools that helps programmers to create and maintain JavaScript applications in Java
Spring, a Java framework which doesn’t impose any specific programming model
Struts
Hibernate
Grails
Play!
Vaadin
Maven

Mixed-level Programming Interview Questions

Java Interview Question #8 – Java defines a String class to represent arrays of characters. Answer the following questions:

  1. After a string is created, is it possible to modify it? Consider the following :
    1
    public static void main(String[] args) { String name = "James gosling"; // I want to change the 'g' to a 'G'. // Will this work at compile time? name.charAt(6) = 'G'; // Print with the standard system println to see “James Gosling” System.out.println(name); }

    Will this work? If not, what changes would be required in order to output the desired string?
  2. The String class has more than one Comparator. Consider the following code:
    1
    public static void main(String[] args) { // This program received 2 arguments. We want to // determine if those two strings are equal. // Compare the first argument to the second argument boolean compareResult = (XXX); if (compareResult) { System.out.println("The Strings are the same."); } else { System.out.println("The Strings are not the same."); } // Print the main string args System.out.println(args[0]); System.out.println(args[1]); }

    – What does the “XXX” have to be replaced by in order for the two main string args to be compared? If the arguments are: “Sun Microsystems” and “Sun microsystems”, what will the result of the execution be? Is there are way to guarantee that it will report them as identical?
    – If the arguments are instead: “Sun microsystem” and “Sun microsystems”, what will the result of the execution be?
  3. What is the Java string constant pool? (Or Java string pool)? Does is reside in stack memory?

Rationale

Using string representations is common in many languages, and Java is no exception. It is important to understand how strings are created, parsed, printed, and manipulated. As an important topic it makes an important interview question for java developers.   

Correct answers

  1. No, this will fail at compile time because it is not possible to modify a string once it has been initialized. This property is known as immutable. In order to make this work, the string containing “James gosling” would have to be recreated. One approach is to use an intermediate character array (by calling the toCharArray() method on the “name”), replacing the ‘g’ with the uppercase letter, and then recreating the string before printing it. A bonus to the candidate who points out that the string replace(…) function exists to replace characters, yet cannot be used because all instances of lowercase ‘g’ would be replaced.
  2. The exact drop-in comparator in this example is either equals(…) or equalsIgnoreCase(…). The return type of both of these methods is a boolean value. If the interviewee answers compareTo(…) or compareToIgnoreCase(…) then credit should be awarded, although the return type of these methods is an int, so it is technically not correct. It does, however, still demonstrate knowledge of the language.

    In the first example, the strings are identical under equalsIgnoreCase(…), but different under equals(…). In the second example there is a trailing ‘s’, which makes the strings different regardless of case.

  3. The Java Constant String Pool is an area in the Heap memory (so, not the stack memory) where strings are stored. This approach is behind the reason for which strings are immutable in java.

    For example:

    string x = “main string”;
    string y = “virtual machine”;
    string z = “main string”; 

    All three of the above strings are stored in the string pool, but the interesting part is the efficiency. Both x and y point to the same area within the string pool, therefore not requiring duplication of the space. Knowing this, it should be clear that changing the value of x is not allowed because it would have the unintended side effect of changing z.

Java Interview Question #9 – What are the differences between Stack memory and Heap space?

Rationale

In order to improve efficiency, the JVM organizes memory for applications to run in. It creates stack space and heap space, each of which is used by different operations. Understanding memory allocation at this level can lead to more predictable garbage collection and ultimately, increased efficiency.

Correct answers

Stack memory is used for static memory allocation, such as primitive values inside a method. It is always used for the execution of a thread. The stack grows when methods are called, and shrinks when they return. If the memory allocated for the stack is exceeded then the java.lang.StackOverFlowError exception is thrown.

Heap memory is used for dynamic memory allocation, such as java objects. Specifically, the object is stored in the heap, while the reference to the object is stored in the stack. The JRE classes are also stored in the heap at runtime. Accessing data in the heap is slower than doing so in stack memory. The heap requires the action of the garbage collector in order to free up unused objects. If the memory allocated for the heap is exceeded then the java.lang.OutOfMemoryError exception is thrown.

Very Bad

Having never heard of the stack or heap would indicate a shallow knowledge of the java programming language. Moreover, the terminology is typical in a general programming culture. Diagnosing memory-related errors, such as a stack overflow caused by an incorrectly behaving recursive function, would be easier with this understanding.

Java Interview Question #10 – Two class-related terms used in java programming are “subclass” and “nested class”. Explain the differences between them. Why choose one over the other? Which one is sometimes known as an “inner class”?

Rationale

In object oriented design there is often confusion about the placement of classes within the hierarchy. Nested classes are relatively rare compared to sub-classes, yet their use is beneficial in many situations. Knowledge of their existence and how they are used should be considered an asset.

Correct answers

A subclass is one that extends another class, and is often a specialization of the original. Subclasses inherit the public and protected members of their superclass. Subclasses can be instantiated independently of the superclass, and in fact, this is always the case when the superclass is an abstract class.

A nested class is a class within a class, which in some cases is an inner class. The scope of the inner class includes all of the members in its outer class, giving it access to these variables and methods. Because the body exists entirely within the enclosing class, it cannot be instantiated independently, without it.

Using an inner class can enhance the object oriented design by further organizing code. The purpose is limited in that it exists to serve its enclosing class. If the inner class offers functionality that is useful on a wider scale then it would make more sense to have it as a top-level class. Inner classes are commonly used as callback functions for GUI components.

Bonus

There are two types of nested classes. Specifically, there is a static nested class, which does not directly have access to other members of the enclosing class. These are not often used, which is why knowing about them is a bonus as opposed to ignorance of them earning a penalty. The other type is a non-static nested-class, which is the version that is referred to as an inner class. These indeed have access to all of the members of the enclosing class, including private methods.

Very Bad

The candidate should be forgiven for never having used a nested class. Although useful, and also likely to be seen if maintaining an existing code base, the concept is straightforward. Inner classes often make code more elegant and easier to maintain, but some designers consider this a matter of style. Subclasses, on the other hand, are a fundamental component in object oriented programming that every java developer should be aware of. Not being able to easily discuss subclasses within a class hierarchy is a serious red flag.

Java Interview Question #11 – Two collection classes that are available in java programming are the Array and List. How do the methods differ between these two container objects, and in what circumstances would you choose one over the other?

Rationale

The usage of containers is common in Java and other programming languages. The List is a dynamic data structure, while the Array is static. It is important to recognize that each is better suited to certain applications, and as such, the candidate should be familiar with them. Having in-depth knowledge of the available datatypes and container classes will ultimately safe on development time.

Correct answers

Array

  1. Arrays are static in size, so they cannot grow or shrink in terms of the number of elements. This means that there are methods to access and modify elements, but not to insert or delete them.
  2. Java provides methods for performing a binary search or a sort on an array. Also, an array can be initialized using the fill() method, or compared using the equals() comparator.
  3. The size of an array is set when it is created.
  4. The random access of an element in an array is very efficient.
  5. Arrays are most suitable for a fixed-length collections of elements.
  6. All of the elements are of the same type, for example:

1
2
3
int[] interviewArray = new int[5];
or
int[] arrayForInterview = {3, 1, 4, 1, 5};

Both of these Arrays contain five integers.

Vector

Candidates should know when it is appropriate and possible to use these keywords. In particular they should know that async can only be placed before the function keyword on a function definition. This marks the function as returning a Promise. The await keyword can only be used inside such an asynchronous function and must be placed before a call to a function that will return a Promise.

  1. Elements in a List can be added or deleted, meaning the size of the list can change. The methods allow for many types of manipulations, including inserting into or removing from a specific index. Ranges can be manipulated as well.
  2. The List is an interface, so when one manipulates a List, a real class, usually ArrayList, is used behind the scene
  3. A List relies on the methods from Collections for sorting, such as Collections.sort().
  4. The search methods contains(), indexOf(), and lastIndexOf() are examples that can be used to search the elements. However, to perform a binary search requires calling the more general method: Collections.binarySearch(…)
  5. Lists can store objects of mixed type, for example:

1
2
3
4
List interviewList = new ArrayList();
interviewList.add(3);
interviewList.add(1415);
interviewList.add(“Pi”);

Bonus

Arrays can store Objects, so there is a workaround available for those inclined to mix types within an array. Also, the candidate should be credited for knowing that Lists are a replacement for Vectors which are no longer commonly used in Java. The reason has to do with concurrency and the synchronization of operations. Clearly, a more detailed explanation is beyond the scope of this question – however, the mention of this issue is noteworthy.

Very Bad

Arrays and Lists, among other built-in classes and interfaces, including Collections, are very common in java programming and application development. A candidate who is not comfortable with these features is almost certainly lacking experience with the language.

Java Interview Question #12 – Unlike C++, Java does not support multiple inheritance. How will programming with an Interface provide an answer to this problem? Is an interface part of the class hierarchy?

Rationale

While there are commonalities between languages for which many programmers will be familiar, there are also distinctions that help to define them. In a java interview, there will be core java questions that help to evaluate how well the candidate knows the specifics of the java programming language. Given the issue of the Diamond Problem in C++, it is worthwhile to test the candidate’s knowledge from a java perspective.

Correct answers

An interface is similar to a class in that it can contain different types of methods, but different because it does not hold the state. Interfaces are inherently abstract, and their methods need to be implemented by a class. The interface is not instantiated – it is implemented. Unlike in C++, a class can only extend a single parent (i.e. it can only have one superclass). An interface, on the other hand, is capable of extending more than one parent interface. For example:

1
2
3
4
5
6
7
8
public interface CheckerBoard {
    public void setSize(int rowCount, int columnCount);
}
public interface Game {
public void setNumberOfPlayers();
public void play();
}
public interface ChessGame extends CheckerBoard, Game {}

In this example, the ChessGame interface inherits from both CheckerBoard and Game.

Very Bad

If the interviewee does not know what multiple inheritance is, then it suggests a lack of object oriented design experience. This is not essential for all applications, although it is important to recognize that java is inherently OO.

Java Interview Question #13 – What is the Java Virtual Machine? What is the main purpose, and what type of code does it operate with?

Rationale

No Java interview would be complete without a question on the topic of the virtual machine. The JVM is a key component of Java, and java programmers learn about it at an early stage. While the JVM is capable of running bytecode generated by other languages, such as JRuby and Jython, it does not take away from the fact that it is essential to java itself.

Correct answers

The JVM is a virtual machine that allows the computer to run Java programs that have been compiled to bytecode. The bytecode is platform independent, and will run on any computer that hosts a JVM. It includes a just-in-time (JIT) compiler than converts the bytecode into machine language instructions, allowing applications to run as quickly as a native executable.

Very Bad

The JVM is one of the main components that make Java what it is. Having no knowledge of the JVM likely indicates a lack of experience with the language.

Java Interview Question #14 – What are final methods and classes? Will an abstract class support final methods?

Rationale

The final keyword is common and should be well understood by java programmers. During the OO design phase, there is normally a decision made with respect to whether classes should be extendable. If not, they are marked final in order to limit potential side effects from sub-classes that were not envisioned. This is an important feature that should be utilized for more robust and maintainable code.

Correct answers

A method that is declared with the final keyword cannot be overridden in the subclasses. This is used in hierarchies where the implementation of the method should be consistent throughout. The final declaration for a class disallows sub-classing entirely. Yes, it is possible to include final methods in an abstract class. This ensures that the sub-classes cannot override the method.

Very Bad

If the candidate is unfamiliar with the final keyword, whether used at the level of class or method, then it suggests relative inexperience with the language. Even for inexperienced programmers that have been involved with object oriented design, the concept of a final class should be familiar.

Java Interview Question #15 – Java programming allows for different ways to create a thread. What are they and which is the preferred method? Explain.

Rationale

Unlike C++, java contains built-in support for multithreading. This is a rich and powerful feature that is both relevant and useful in many applications. As such, the candidate should be familiar with the basics.

Correct answers

What happens in the case that reduce is called on an empty array without providing the optional initial accumulator value?

1
2
3
4
5
public class JavaInterviewClass implements Runnable {
    public void run() {
    System.out.println(“My example public class prints this line from a thread.”);
    }
}  

To execute the run() method, pass an instance of the class into a Thread, as follows:

1
2
Thread interviewThread = new Thread(new JavaInterviewClass ());
interviewThread.start();

The second way to create a thread is to extend the Thread class. The subclass will override the run() method. After this, simply create an instance of the class.

1
2
3
4
5
public class JavaInterviewClass extends Thread {
    public void run() {
    System.out.println(“My example public class extends the Thread class.”);
    }
}

To execute the thread, simple instantiate the class and call start(), as follows:

1
JavaInterviewClass myInterview = new JavaInterviewClass (); myInterview.start();

Bonus

While implementing the runnable interface and extending the Thread class are two popular ways to create a thread, it is also possible using the Executor framework. This allows for working with threads directly, but is less well-known. It includes methods such as newSingleThreadExecutor(), newFixedThreadPool(), and submit() to create a run tasks. Knowledge of how to use the Executor framework implies that the candidate is very comfortable with creating and using threads in java.

Very Bad

If the candidate is uncomfortable with using threads then they are missing out on a powerful and significant feature of the language. It is important because understanding multithreading is more than just looking up the syntax for a few commands. Rather, it is an approach that should be considered when an application is being designed and developed.

Java Interview Question #16 – Java code has built-in support for concurrency in its Thread class. Concurrency has its own set of problems such as deadlock and race conditions. Briefly describe Atomic variables in Java and how they are used. Next, it is given that the start() method is used to create a separate call stack before the run() method is used to execute a thread. What do the yield(), sleep(), and join() methods do?

Rationale

Java’s support for multithreading can lead to concurrency-related problems. The candidate’s knowledge with respect to these issues should be evaluated and considered.

Correct answers

  1. An Atomic variable is one that is “atomically updated”, meaning that data integrity is ensured through the use of non-blocking algorithms. This functionality is typically implemented at the machine code level. Java supports several atomic variables, most commonly AtomicBoolean, AtomicInteger, AtomicLong, and AtomicReference. There are also several methods that support the retrieval and modification of these variables, including get(), set(), lazySet(), compareAndSet(), and weakCompareAndSet(). Used properly, atomic variables can be used to implement thread safe (multithreading safe) methods that effectively deal with certain concurrency-related issues.
  2. yield(): This method informs the environment that the current thread is not completing a task of high priority, and is prepared to pause execution. Provided that the underlying environment supports pre-emptive scheduling, it will suspend the thread if there is another one that needs to run. If there is not a second thread, or once the second thread terminates, the current thread will regain control and continue executing.
  3. sleep(): This method will cause the current thread to sleep, or pause execution, for a specified number of milliseconds. Alternatively, a specified number of milliseconds and nanoseconds combined. While the current thread is sleeping, another thread will run, or otherwise the CPU will remain idle. Subject to the accuracy of the system clock and timers, the thread will regain control once the countdown has expired.
  4. join(): This method is used to join two the execution of two threads together. To clarify, if Thread A calls join() on Thread B, then A will begin waiting. Once B has completed, or a pre-specified timer has expired, A will regain control and continue executing.

Very Bad

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?