2010-05-21 19 views
12

¿Cuáles son algunas buenas preguntas y respuestas de la entrevista de java con respecto a los genéricos y las anotaciones?¿Cuáles son algunas buenas preguntas y respuestas de la entrevista de Java con respecto a los genéricos y las anotaciones?

+4

Las preguntas de la encuesta deben marcarse en la wiki de la comunidad. – danben

+0

¿Qué nivel de desarrollador estás buscando? Plomo, o competente y de nivel medio? –

+1

Esta pregunta parece estar fuera de tema porque se trata de preguntas de la entrevista –

Respuesta

1

Genéricos: Haga una pregunta diseñada para ver si entienden type erasure.

Anotaciones: Pregúnteles cuál es su anotación favorita y cómo funciona (no necesita una explicación técnica detallada, pero está buscando algo más que "magia").

+0

Una buena pregunta de borrado de tipo es qué firmas no son posibles debido al borrado de tipo (p. Ej.x (Lista ) yx (Lista ) juntos). –

1

Anotaciones: ¿Cuáles son los riesgos? (el compilador puede entrar en un ciclo infinito y atascar el proceso de compilación).

Genéricos: ¿Cómo construir mixin usando genéricos? (escriba una clase genérica que tome un parámetro y luego extiéndalo con la subclase como parámetro).

Además, +1 al borrado de tipo.

+1

La referencia en "el compilador puede entrar en un ciclo infinito" para las anotaciones como un riesgo. Pensé que las anotaciones autorreferenciales fueron explícitamente prevenidas por esta razón. – Nate

+0

@Nate - Yo también, tengo curiosidad por ver cómo podría pasar esto. –

+0

De una de estas dos formas: 1. El código de procesamiento de la anotación se atasca, sin ninguna razón, por ejemplo, imagine una anotación que calcula un factorial y obtiene @Fact (-1). 2. Un código de procesamiento de anotación que genera código, marca el nuevo código para otra ronda de compilación, y el nuevo código también incluye anotaciones ... No recuerdo la bandera exacta para eso. –

1

Aquí hay un par de los genéricos:

1)

Pregunta: Si tuviera este método, ¿cómo puedo crear una nueva instancia de tipo T y asignarlo a una variable llamada item dentro de este método (supongamos que Class<T> tiene un constructor predeterminado)?

public static <T> Collection<T> select(Class<T> c, String sqlStatement) { 
} 

respuesta:

T item = c.newInstance(); 

2)

Pregunta: Si quisiera indicar que el genérico se extiende alguna clase base, pero no sabe qué la clase que extiende la clase base va a ser hasta el tiempo de ejecución, ¿cómo podrías declarar el genérico?

respuesta: Utilice un comodín: <? extends SomeBaseClass>

+0

1.) asume el constructor predeterminado. – Nate

+0

@Nate - Punto justo, lo actualicé para reflejar esto. – dcp

2

Pregunta: ¿Cómo puede determinar qué tipo de objeto genérico es el uso en tiempo de ejecución?

Respuesta: No es posible determinar el tipo debido al borrado de tipo.

+1

No es exactamente cierto. Los buenos tokens súper antiguos solo se pueden implementar porque queda algún tipo de información. Hay otra excepción a la regla bonita pero errónea, pero lamentablemente la he olvidado. –

+1

Bueno, el tipo de un objeto en tiempo de ejecución se obtiene llamando 'object.getClass()', independientemente de cualquier cosa que lo use, por lo que es posible que desee una pregunta más cuidadosamente redactada. –

1

Si está buscando un programador Java estrella de rock, puede crear bastantes preguntas avanzadas del Generics chapter in Bloch's Effective Java. Cosas como los contenedores homogéneos o heterogéneos (los ejemplos de la jaula de pájaros y de la jaula de león de uno de los tutoriales de Java), borrado, etc.

En personas de menor rango busco principalmente la comprensión de por qué uno querría genéricos (usted se sorprenderá de cuántas personas no aprecian eso y creen que la forma de hacer Java 2 todavía gobierna), y cosas por el estilo.

En las anotaciones, me gusta preguntar sobre la anotación "Anular" y sus ventajas.También me gusta tener una discusión más profunda acerca de los pros y los contras de las anotaciones y cuándo es apropiado usarlas: no soy fanático de la meta programación demasiado entusiasta. También es una buena oportunidad para ver si alguien usó Hibernate o JUnit con anotaciones.

+0

Effective Java es un libro esencial. Veremos ese capítulo. –

3
  • ¿Qué garantiza el Class Enum<E extends Enum<E>>?
  • ¿Es <T> List<? extends T> x() una firma útil?
  • Políticas de retención de anotaciones y por qué están en su lugar?
  • Supongamos que desea reutilizar una clase en diferentes contextos, ¿usaría anotaciones o configuración externa? (es decir, las anotaciones introducen dependencias).

Harder:

  • ejemplos de un tipo genérico válido que no puede ser expresado con el sistema de tipo Java y dará lugar a las advertencias del compilador.
  • Ejemplos en los que el compilador de Java infectará o no el tipo genérico? (ejemplos de código donde el compilador incluirá el tipo incorrecto)
  • ¿Qué tipo de información genérica no se borra y se puede recuperar del código de bytes? (Super type tokes son una aplicación)
  • ¿Qué es APT (casos de uso cuando no se utiliza el reflejo)?
+0

Thomas, ¿podría elaborar (o proporcionar un enlace) información de tipo genérico que no se borre (viñeta 3 de las preguntas más difíciles)? Es muy interesante ... – Oak

+1

@Oak - Se agregó. –

1

Estas son algunas acabo compuesto por:

- [genéricos Cagey] ¿Le descomentando cualquiera de estas líneas causan problemas? ¿Cuáles, si hay alguno? ¿Por qué o por qué no?

public class Cage<T> { ... } 
public class Animal { ... } 
public class Bear extends Animal { ... } 
// Cage<Animal> c = new Cage<Bear>(); 
// Cage<Bear> c = new Cage<Animal>(); 
// Cage<?> c = new Cage<Animal>(); 
// Cage<Animal> c = new Cage<?>(); 

- [Restricciones] Sólo Animals deben entrar en Cages. ¿Cómo podemos ajustar las definiciones de clase anteriores para que reflejen este nuevo requisito?

- [Problemas legales] No se puede crear una instancia de una matriz de un tipo genérico. Por lo tanto, algo como new List<Animal>[10] es ilegal. ¿Puede pensar en un escenario donde, si este fuera legal, se encontraría con problemas?

Respuestas dejadas como un ejercicio para el lector: ¡no aprenderá nada si no las descifra! Pero aquí hay algunos consejos.

  • [Cagey generics]: ¿Qué significa ?? ¿Recuerdas el término "covarianza"?
  • [Restricciones]: Java le permite restringir los valores de un parámetro de tipo. ¿Recuerdas la sintaxis para esto?
  • [Problemas legales]: Supongamos que puede hacer Object[] arr = new List<String>[]. ¿Puedes escribir algún código que ponga algo en arrLists que no debería entrar ahí?
1

"¿A qué tipo de cosas son buenas las anotaciones?" y "¿en qué tipo de cosas son malas las anotaciones?" me viene a la mente.

Las anotaciones son buenas en la metaprogramación, pero como una posible mejor práctica, código que funcionó con las anotaciones aún deberían funcionar si las elimina.

O no. Su millaje puede variar, pero probablemente quiera que todos sus desarrolladores sénior acuerden sobre eso.

7

Desde Java 5 salió, he visto decenas de personas no entienden por qué, dada una interfaz I y clases A y B extends A no se puede pasar un I<B> que se requiere un I<A>. Mucha gente lo encuentra contra-intuitivo.

para probar la capacidad de una persona para razón sobre los genéricos, entonces yo les pregunto primero si es posible asignar una I<B> a una referencia I<A> como se describió anteriormente. ¿Si no, porque no? Si se equivocan, les digo que están equivocados y pedirles que tratar de llenar los espacios en blanco aquí para mostrar por qué este ejemplo podría ser de tipo no-seguro si podría compilar:

//... 
    List<String> list = new LinkedList<String>(); 
    someMethod(list); 
    //blank 1 
} 
public void someMethod(List<Object> list) { 
    //blank 2 
} 

En este punto, debería ser bastante fácil y estaría un poco preocupado si no pudieran construir ese ejemplo. Un ejemplo es

//blank 1 
String item = list.get(0); 

//blank 2 
list.add(Integer.valueOf(5)); 
+0

Ahora lo tengo, gracias –

2
  1. genérico:

Q: ¿Cuál es la diferencia entre un Hashmap y una tabla hash?

A: Hashtable está sincronizado, Hashmap no lo está.

  1. Anotaciones:

Q: Describe serializar objetos Java con la interfaz javax.xml.bind.Marshaller y anotaciones.

R: Al describir algo como esto en un contexto significativo debería ser aceptable:

@XmlRootElement
class Employee {
...
}

+6

Creo que está confundiendo genéricos con la biblioteca de colecciones de Java. –

6

Esta prueba:

http://tests4geeks.com/test/java

contiene algunas preguntas acerca de las anotaciones.

No contiene preguntas sobre genéricos. Pero en lugar de ello, hay algunos otros temas interesantes como:

Multi-Threading,

memoria,

Algoritmos y Estructuras de Datos,

programación orientada a objetos,

etc.

+0

Prefiero tu solución ... – Guru

+0

algunas de las preguntas están escritas por hablantes no nativos de inglés (o todas las preguntas). para la mayoría no importa, pero para algunos hace la pregunta. – tgkprog

Cuestiones relacionadas