¿Preguntas que todo buen desarrollador Java / Java EE debería poder responder? [cerrado]

138

Estaba pasando por preguntas que todo buen desarrollador de .Net debería poder responder y estaba muy impresionado con el contenido y el enfoque de esta pregunta, por lo que, con el mismo espíritu, hago esta pregunta para el Desarrollador Java / Java EE.

¿Qué preguntas cree que debería ser capaz de responder un buen programador Java / Java EE?

Estoy marcando esta pregunta como wiki de comunidad, ya que no es específica del usuario y tiene como objetivo servir a la comunidad de programación en general.

Esperamos respuestas sorprendentes.

EDITAR : Responda las preguntas también, como se sugiere en los comentarios, para que las personas también puedan aprender algo nuevo sobre el idioma.

Rachel
fuente
3
¿Por qué esta pregunta no puede obtener una respuesta similar a la pregunta .Net?
Rachel
55
Dios mío :), la pregunta .Net se hizo hace un año y esta tiene solo un día y estás comparando las respuestas.
zapping
1
¿Por qué no edita su pregunta y agrega la oración "Por favor conteste su propia pregunta", para que las personas puedan aprender algo (nuevo)?
r3zn1k
9
"¿
Cuál
17
La anécdota de Albert Einstein ... UNO de los colegas de Einstein le pidió su número de teléfono un día. Einstein buscó una guía telefónica y la buscó. "¿No recuerdas tu propio número?" preguntó el hombre, sorprendido. "No", respondió Einstein. "¿Por qué debería memorizar algo que puedo obtener tan fácilmente de un libro?" ¿Estoy llegando a todos;)? Sí, lo sé, Einstein no se enfrentaba a un entrevistador ...
SB.

Respuestas:

83

¿Cuál es la relación entre hashCode () y equals ()? ¿Cuál es el significado de estos métodos? ¿Cuáles son los requisitos para implementarlos?

Jeff
fuente
Sí, cada desarrollador debe al menos ser consciente de los problemas, incluso si no necesariamente los encontrará en la práctica.
sleske 01 de
3
equals () y hashCode () en java @ technofundo.com/tech/java/equalhash.html
pramodc84
70

¿Cuál es la diferencia entre Set, Map y List?

Todavía estoy sorprendido de cuántas personas no conocen esta en una entrevista telefónica.

Jon
fuente
8
De acuerdo, pero es cuestión de 20 segundos mirando los documentos en la red ("marco de colecciones de Java"), por lo que muchas personas que valen la pena no se molestarán en guardarlo en la memoria.
Manur
127
No, lo siento, no compre eso, es un conocimiento básico que todo desarrollador debe saber.
Jon
15
Llegaría al extremo de decir que cualquiera que esté pensando en un trabajo en software necesita comprender no solo eso, sino también las diferencias entre los diferentes tipos de listas (ArrayList / LinkedList). No necesariamente la mejor implementación o incluso la notación O (n), sino una comprensión de cuándo es correcto usar qué.
Reverendo Gonzo
11
+1 @ Jon: Normalmente me suscribo a la escuela de pensamiento "no es necesario memorizar detalles", pero si ni siquiera conoce las diferencias conceptuales básicas entre esas interfaces básicas, entonces definitivamente no es un buen desarrollador de Java.
Joachim Sauer el
13
@Joachim: puede eliminar la palabra "Java" de su declaración. Conjuntos, mapas y listas son nociones algorítmicas básicas.
CPerkins
44

¿Puede una interfaz extender múltiples interfaces?

La mayoría de las personas responde "no", porque saben que Java no tiene herencia múltiple. Pero una interfaz aún puede extender múltiples interfaces (pero una clase no puede extender varias clases). Esto no conduce al problema del diamante.

Si la respuesta es "no", el entrevistador debe preguntar "¿por qué estaría prohibido?". Entonces empiezas a pensar en ello y debes darte cuenta de que no hay ningún problema.

Entonces aprendiste algo (por ti mismo) en la entrevista y le mostraste al entrevistador que puedes razonar sobre clases, objetos, herencia, polimorfismo, etc. En realidad, es mucho mejor que un candidato que sabe la respuesta de memoria pero no sabe entender porqué

ewernli
fuente
Ayer confundí a una profesora de C ++ con el problema de la herencia del diamante, ella no lo sabía en absoluto :)
Esko
2
Una vez me hicieron esta pregunta y respondí "no". Creo que fue estrés y respondí demasiado rápido. siempre es difícil saber respuestas a cosas que nunca usas.
IAdapter
1
Elaboro un poco más en el texto. Responder "no" en realidad está bien. Lo bueno de esta pregunta es que es una buena forma de iniciar una discusión sobre los conceptos de OO y ver cómo razona el candidato. Si el entrevistador que acababa de querer escuchar "sí", no tiene sentido. La herencia múltiple de interfaces no es tan común de memoria.
ewernli
3
Una versión más complicada de esta pregunta es "¿Java admite herencia múltiple?" para lo cual la respuesta es "más o menos" solo para interfaces
nsfyn55
23

Uso de la palabra clave final en llamadas a métodos. Por ejemplo, ¿por qué la prueba del método en el código siguiente no da ningún error de compilación a pesar de usar el calificador final para el parámetro del método?

class Name {
    private String name;

    public Name (String s) {
        this.name = s;
    }

    public void setName(String s) {
        this.name = s;
    }
}

private void test (final Name n) {
    n.setName("test");
}

revs sateesh
fuente
Realmente me encantaría saber la respuesta a esta pregunta. Suena muy interesante
Rachel
@Rachel: La razón es porque la finalpalabra clave se aplica al Nameobjeto, no al namecampo de claseName
ryanprayogo
20
Bueno, el parámetro nse declara como final, lo que significa que no se puede reasignar en el testcuerpo del método. No causa un error porque el método testno intenta reasignar el parámetro, simplemente establece una propiedad en el parámetro ... n = new Name("test");causaría un error de compilación ...
rjohnston
77
Agregando a los comentarios de @ rjohnston: el uso del parámetro final para el método no garantiza la inmutabilidad de una instancia de clase. Si hay una necesidad de la inmutabilidad de la clase (Nombre en el presente caso) debe ser diseñado de forma (por ejemplo, en este caso no proporcionan el colocador)
Sateesh
Gracias a todos por compartir información valiosa. Realmente aprecio tus comentarios sobre esto.
Rachel
19

Uno seguro es la comparación de la cadena. Diferencia entre

String helloWorld = "Hola mundo";
helloWorld == "Hola mundo";
"Hello World" .equals (helloWorld);

zapping
fuente
14
Estoy bastante seguro de que necesitarías hacer algo como una nueva cadena ("Hello World"). ¿No son las constantes de cadena extraídas de un grupo, como el efecto interno () tendría, por lo tanto, hacer ambas afirmaciones verdaderas?
Steven Schlansker
17

Pregunta capciosa: ¿Qué tipos de parámetros se pasan por referencia en Java?

Es sorprendente cuántas personas siguen repitiendo el mantra "las primitivas pasan por valor, los objetos pasan por referencia" mantra.

Chinmay Kanchi
fuente
44
Me pregunto si la respuesta correcta es siempre la que se debe dar en una entrevista. En un lugar para el que entrevisté, el entrevistador también repitió lo mismo.
MAK
2
He notado una diferencia entre las personas que estudiaron C como primer idioma y las personas que estudiaron C ++ como primer idioma al responder esta pregunta sobre Java. Probablemente porque a los usuarios de C se les enseña que pasar un puntero a un valor es un "paso por referencia".
Uri
23
Esa es una pregunta estúpida, ya que la respuesta "incorrecta" probablemente sea técnicamente correcta si también pregunta "¿qué consecuencias tiene pasar por referencia?" . Es solo una cuestión de definición de lo que pasa por medio de referencia y, por lo tanto, no tiene mucho valor en el mundo de Java, ya que solo hay una forma de pasar objetos. Es más importante comprender lo que realmente sucede que usar una definición arbitraria para pasar por referencia de la manera que desee.
x4u
3
Esta pregunta es al menos problemática, porque depende principalmente de la definición exacta de "pasar por valor" / "pasar por referencia", que a menudo se usa incorrectamente. Si bien estoy de acuerdo en que un buen desarrollador debe conocer las definiciones, es más importante comprender las consecuencias. Si comprende el comportamiento real de Java, entonces conocer el nombre correcto para el concepto no es muy significativo, porque no es algo que discuta en la práctica, ya que nunca cambia.
sleske
3
Erm, los objetos se pasan por referencia en Java. No puede pasar un objeto por valor; entre otras cosas, los objetos nunca existen en la pila. Las referencias se pasan por valor, claro.
Sean Owen
17

Dijiste "Bueno", "Desarrollador". Aquí están mis 2 centavos también .. :)

  • ¿Qué significa una "excepción marcada"?
  • ¿Cuál es mejor usar y cuándo: Afirmaciones o Excepciones para manejar condiciones inesperadas?
  • ¿Por qué la clase String es final? (¿o no es así?;))
  • Cuáles son los métodos de esperar, notificar y notificar a todos en la clase Object?
  • ¿Por qué la clase Thread no es final? ¿Por qué debería extender Thread, alguna vez?
  • ¿Por qué hay dos clases de fecha? uno en el paquete java.util y otro en java.sql?
  • ¿Qué sucede si se lanza una excepción en el bloque finalmente? ¿El resto finalmente se ejecuta o no?
  • Hay un recolector de basura bien, pero ¿está la pérdida de memoria totalmente ausente en las aplicaciones Java? Si no, ¿cómo es eso?

Para J2EE:

  • ¿Es bueno tener variables instancia / estáticas en un servlet? Por qué no? Entonces, ¿dónde guardas "estado"?
  • continuando con la pregunta anterior: ¿qué y dónde es un "estado" para una aplicación (web)?
  • ¿Qué sucede si comencé a crear / cerrar conexiones DB en "JSP"?
  • ¿Cuáles son las formas de manejar las excepciones JSP? ¿trata de atraparlo? Hmmm ... ¿hay algo más?

Puedo pensar en muchos, muchos más, pero esto funcionará por ahora :)

Elister
fuente
8
Las respuestas serían buenas, no sé la respuesta a algunas de ellas.
MAK
Las excepciones marcadas son aquellas que un programa debe tener un plan para manejar en caso de que ocurran. Si no hay un bloque try / catch alrededor de algo que arroje una excepción marcada, el programa no se compilará. esperar, notificar y notificar a todos son para sincronizar hilos, y en Java todos los objetos se pueden sincronizar. Extendería Thread (en lugar de implementar Runnable) si conceptualmente la clase requiere su propio hilo, es decir, necesita hacer algo de gestión y no representa una tarea que podría ejecutarse en otro hilo de trabajo.
ZoFreX
Si se lanza una excepción en un bloque finalmente, el resto no se ejecutará. En un programa Java "puro", no existen fugas de memoria canónicas. Sin embargo, la memoria aún podría usarse, lo que no debería ser si las estructuras de datos contienen referencias a objetos que ya no son necesarios. Si usa bibliotecas nativas, entonces es posible que sea necesario administrar sus recursos, por ejemplo, en SWT es importante llamar a .dispose () en ciertos activos para asegurarse de que no se filtren.
ZoFreX
2
Utilice las aserciones para los errores "Esto nunca debería suceder nunca" que deben tratarse en el desarrollo. Use excepciones para los errores que realmente puedan ocurrir en tiempo de ejecución, y el programa deberá tratarlos de alguna manera.
MatrixFrog
16

¿Cuál es la diferencia entre String, StringBuffer y StringBuilder?

Thunderhashy
fuente
55
Cadena: clase inmutable que representa una cadena. StringBuffer: patrón de creación introducido en versiones anteriores de Java que se sincroniza en cada operación (o la mayoría de ellas) para usar para construir una cadena. StringBuilder: introducido en Java 5 (JDK 1.5), una clase que comparte la API StringBuffer para usar para construir una cadena que no se sincroniza en todas las operaciones (o la mayoría de ellas). Debido a que la construcción de cadenas tiende a ocurrir en un solo hilo, se prefiere StringBuilder para este propósito en los tiempos de ejecución / JDK de Java que lo admiten.
MetroidFan2002
13

"¿Qué es un descriptor de despliegue?"

Si el candidato se estremece involuntariamente, tiene experiencia trabajando con EJB anteriores a 3.0.

Michael Borgwardt
fuente
hazlo "se estremece involuntariamente + transpira pesadamente + cae muerto después de repetir esta pregunta 2 veces más", ¡a veces siento que es la razón "única" por la que agregaron / apoyaron todo el asunto de las Anotaciones! :)
Elister el
12

Muchas preguntas y entrevistas están disponibles en http://www.techinterviews.com/interview-questions/java y realmente no veo valor en copiar / pegar una selección de ellas.

No, depende de usted crear su propia compilación de cosas que considera importantes. Personalmente, procedo siempre en dos pasos: primero algunas preguntas para tener una idea básica de la experiencia y las habilidades, luego una situación de resolución de problemas. De hecho, no estoy convencido de que poder responder cualquier pregunta conocida lo convierta en un solucionador de problemas desconocido bueno o malo . Por lo tanto, prefiero pedirles a las personas que resuelvan un problema determinado, que les den algunos requisitos y que escriban un código (pero no en papel). Les doy algo de tiempo para que vuelvan y comprueben cómo lo hicieron, su estilo de codificación, cómo usaron las API sugeridas, etc.

Dicho todo esto, mi pregunta favorita es "¿qué no te gusta de Java?" (en el espíritu de este ). Realmente es una excelente pregunta, le brinda una retroalimentación inmediata sobre cuánto un candidato ha utilizado Java y ha explorado su API y si es religioso o no (como escribió el OP).

Actualización: según lo sugerido por CPerkins, una mejor redacción para la pregunta sugerida anteriormente podría ser "¿Qué es lo que más le gustaría ver cambiado en Java?". Y de hecho, prefiero de esta manera.

Pascal Thivent
fuente
No me gusta la pregunta "¿qué no te gusta de Java?", Mentiría, porque suena como "¿por qué dejaste tu última empresa?". Además, podrían pensar: "si odias a Java, no te ofreceremos el trabajo".
IAdapter
@ 01 Es su derecho, pero no estoy de acuerdo con usted y creo que se perdió el punto de esa pregunta.
Pascal Thivent el
1
Por lo general, he visto poner esto más como: "¿Qué es lo que más te gustaría ver cambiado en Java", en lugar de "no me gusta"?
CPerkins
@CPerkins Esa es una redacción mejor, mejor que "no me gusta" y mucho mejor que "odio" (en la referencia). Gracias.
Pascal Thivent
11

¿Qué es 'System', 'out', 'println' en System.out.println? ¿Qué sucede cuando llamas a 'poner' en HashMap?

Adisesha
fuente
¿Cuál es la respuesta? ¡Nunca pienso en qué clase de sistema! Me pregunto si conozco a la respuesta :)
palAlaa
10
  1. Explicar los diversos modificadores de acceso utilizados en Java. He tenido mucha gente luchando con esto, especialmente el acceso predeterminado.
  2. Si pudieras cambiar una cosa sobre el lenguaje o la plataforma Java, ¿cuál sería? Los buenos desarrolladores tendrán una respuesta aquí, mientras que aquellos que no están realmente interesados ​​en el desarrollo probablemente no les importa.
  3. Si su CV dice algo así como que usan EJB2.1, pregunte sobre EJB3 para ver qué saben al respecto. Los mejores desarrolladores se mantendrán al día con los últimos desarrollos, incluso si no utilizan las versiones más recientes.
Mark
fuente
3
Si hubiera una sola cosa que pudiera cambiar, agregaría la sobrecarga de operadores al idioma, probablemente con solo un conjunto restringido de operadores sobrecargables (es decir, sin sobrecarga newo ^o >>, <<y >>>). Si pudiera cambiar otra cosa, sería agregar una verdadera semántica de llamada por referencia. Una tercera cosa sería agregar unsignedtipos integrales.
Chinmay Kanchi
1
delegados y cierres y tal vez una expresión lambda, pero eso no es realmente necesario. Los métodos de extensión también serían grandiosos. Realmente pueden limpiar el código si se usan correctamente.
Joel
10
  • ¿Cuál es el contrato general al anular iguales?
  • ¿Es mejor opción preferir listas o matrices?
  • ¿Cuáles son las convenciones de nomenclatura generalmente aceptadas?
  • ¿Cómo funciona la serialización?
  • ¿Cómo implementar Comparable?
  • ¿Cuáles son las ventajas de usar las declaraciones preparadas de JDBC?
  • ¿Qué es Java EE?
  • ¿Qué es un contenedor y qué servicios proporciona?
JuanZe
fuente
9

Si está contratando graduados con Java "experiencia", una pregunta simple como Escribir un código que hará que se arroje una NullPointerException puede distinguir qué candidatos han usado Java recientemente y no se detuvieron cuando terminaron su unidad / curso.

David
fuente
16
¿Es "throw new NullPointerException ()" una respuesta correcta?
Thorbjørn Ravn Andersen
1
Bueno, depende del entrevistador. Si mostraran un ejemplo de probar una variable y lanzar un NPE con un mensaje útil, entonces estaría feliz. Si pensara que usaron esa respuesta porque no pudieron encontrar un código que arrojaría legítimamente un NPE, entonces me preocuparía.
David
9

¿Qué se imprimirá?

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder.append("+1");
    }
}

Respuesta : CoolReturn + 1

Un poco más difícil:

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder=null;  /* ;) */
    }
}

Respuesta : CoolReturn

zaletniy
fuente
el primer código indica que finalmente siempre se ejecuta incluso si la declaración de devolución estaba disponible en el bloque try, pero no obtuve el segundo código. lo que sucedió cuando el creador de sentencias = nulo; ocurrir ??
palAlaa
3
@Alaa, es casi como si se estableciera un valor temporal en el generador, el generador se establece en nulo en el bloque finalmente, y luego el valor temporal es lo que se devuelve.
determinar
1
@VextoR, sí, Alaa ha dado una buena descripción. Que se compruebe el código de cómo entrevistado entiende el intento ... por último bloque con el interior de retorno, y las variables de alcance, en general, las variables de manejo
zaletniy
44
La declaración return devuelve la referencia al objeto StringBuilder. Cambiar la referencia en el finalmente no hace nada a la referencia que realmente se devuelve. Sin embargo, cambiar el contenido del objeto afecta lo que se devuelve, como en el primer ejemplo.
Derek Litz
8

¿Cuál es la diferencia entre una clase abstracta y una interfaz? ¿Cuándo usarías cada uno de ellos?

Muchos desarrolladores de Java no saben esto, le pregunté a la mayoría de las personas en mi curso de informática en la universidad y la gran mayoría no pudo responder.

ZoFreX
fuente
La única diferencia es que la clase abstracta puede contener métodos no abstractos.
TBH
1
Esa es la respuesta que tendría si leyera un libro de Java, claro. Aunque entonces también podría agregar que también pueden contener variables miembro: P Pero la diferencia en cuándo usarlas y por qué es aún más interesante.
ZoFreX
1
El uso de la interfaz me proporciona una técnica muy poderosa, que es el polimorfismo, que puede llamar a cualquier método anulado de las clases que implementa la interfaz de una manera aparentemente simple, que no necesita saber el tipo de cada clase secundaria.
palAlaa
@TBH: no olvide que, en el modelo de herencia único que Java usa actualmente, solo puede extender una clase abstracta, para un conjunto de funcionalidades, pero puede combinar múltiples interfaces en una sola clase para implementar múltiples funcionalidades sin la única restricción de herencia.
MetroidFan2002
8

Preguntas simples como,

  • ¿Qué es JRE y JDK?
  • ¿Por qué Java afirma la interoperabilidad?

Aunque estos son muy básicos, muchos desarrolladores no conocen las respuestas. Sugiero que se hagan antes de las consultas relacionadas con el código.

Ravisha
fuente
No sé sobre la parte JDK / JRE. Por ejemplo, no existe tal distinción en Mac. Entonces, como desarrollador de Java en Mac, realmente no hay necesidad de saberlo.
Fabian Steeg el
Creo que esta es una buena pregunta, y si ayuda a exponer a las personas que están lo suficientemente equivocadas como para intentar un desarrollo serio de Java en una Mac, mucho mejor. En serio, si afirma ser un desarrollador de Java pero no sabe en qué enlace de descarga hacer clic en java.sun.com, entonces hay un problema.
Mark B
Para ser un desarrollador de Java, uno no tiene que preocuparse en absoluto por la plataforma en la que se está preocupando. Entender las herramientas de Java parece un requisito básico. Por lo menos, lo considero. sobre el sistema operativo en el que trabajo.
Ravisha
@mbaird Eso viene como un comentario bastante malo. Aunque desarrollo en una Mac y sé lo que son los JRE / JDK, seamos honestos, en un desarrollo real, ¿realmente importa? Especialmente con los IDE que hacen que el uso de la línea de comandos sea cosa del pasado, un desarrollador de Java necesita saber cómo usar el lenguaje más que cualquier otra cosa.
Alexis King
6

Las 5 preguntas más frecuentes de J2EE / JEE

La lista de preguntas de middleware J2EE / JEE que he enfrentado es excepcionalmente larga, pero aquí están las 5 principales que me han preguntado y han llevado a buenas discusiones:

  1. ¿Qué sucede cuando un MDB encuentra una excepción que no puede manejar?
    Esta pregunta generalmente lleva a varias discusiones interesantes sobre mensajes de envenenamiento, colas de error, etc.
  2. Dado un tema de JMS, y algunos consumidores en diferentes JVM, preguntas sobre diversos escenarios con y sin consumidores duraderos.
    Esta pregunta generalmente me permite discutir en términos de cuándo usar suscriptores duraderos, cuándo usar colas, etc.
  3. Si se atasca en una situación en la que acceder a un contenido de Hibernate / JPA POJO conduce a excepciones, ¿cómo se resolvería?
    Esto lleva a discusiones maravillosas sobre la carga diferida, la rehidratación, etc. Incluso ha llevado a comparar y contrastar JPA con Entity beans. Me ha resultado útil estar preparado y ser claro en los conceptos.
  4. ¿Cómo se podría proporcionar un servicio web simple?
    Cualquier solución, desde un simple servidor web basado en sofisticadas soluciones SOAP / REST, y cualquier otra en el medio, debería ser lo suficientemente buena. Además, según el entrevistador, a veces conduce a discusiones muy interesantes sobre temas como algunas ideas de diseño: WSDL primero, estilo doc, intermediarios SOAP, etc. -RPC, o SOAP1.2 sobre SOAP1.1, cuyas respuestas generalmente se basan en cuánto recuerdo.
  5. Inyección de recursos JEE 5
    Esta pregunta se plantea de muchas maneras, comenzando desde el patrón del Localizador de servicio hasta las javax.naming.Contextpreguntas.

Otra pregunta difícil que encuentro problemática, pero que he enfrentado muchas veces es, ¿cómo se empaquetan las bibliotecas dependientes en un archivo?
o Visibilidad de varias clases en un archivo incluido.
Si la discusión no conduce a la jerarquía del cargador de clases de diferentes servidores de aplicaciones, archivos de recursos, etc., es mejor renunciar y seguir adelante.

Las 5 preguntas principales de Java:

  1. Preguntas sobre java.util.collections
    Esta es la madre de todas las preguntas. Una vez que pueda aterrizar efectivamente al entrevistador en esta área, y si está preparado, el resto de la entrevista generalmente se queda aquí. Asegúrese de saber Set, List, Map, y la importancia de Object.equals()y Object.hashCode()en cada implementación de estas interfaces.
  2. Preguntas de refactorización
    Estas son buenas si el entrevistador tiene una mente abierta. Si el entrevistador ya tiene una solución específica en mente, y la suya no coincide con la suya, está prácticamente condenado. Es mejor estar de acuerdo con la respuesta "Entiendo que otras soluciones son posibles".
  3. Preguntas sobre subprocesos múltiples en JDK5, en comparación con versiones anteriores de JDK , he encontrado que es mejor estar preparado con las clases de paquetes java.util.concurrent . El libro de Doug Lea tiene la mayoría de las respuestas.
  4. ¿Qué hay de nuevo en JDK1.6 / JDK1.7 ...?
    Esta es una pregunta segura con muchos entrevistadores. Por mucho que odie esto, es mejor estar preparado. Al menos recordar algunos con los que he trabajado y liderar la discusión en otra dirección, esquiva y resuelve el problema de manera amplia y efectiva.
  5. Patrones en la API de Java
    Una y otra vez me han pedido que señale un patrón de GoF en la API de Java. Mejor prepárate para este.
CMR
fuente
5

Diferencia entre un servidor web y un contenedor web

usuario256777
fuente
5

¿Qué es lo que más te gusta / menos de Java y por qué?

Carsten
fuente
5

¿Por qué anularía el método toString ()?

SWD
fuente
4

Una pregunta más pura de Java:

¿Cuál es la diferencia entre dormir y esperar? No mucha gente realmente comprende cómo funciona la espera.

¿Cómo necesita manejar las interrupciones interrumpidas?

David Nouls
fuente
4

Esta es la pregunta que enfrenté en mi entrevista.

¿Por qué el método main en Java se llama public static void main (String [] args)?

Responder:

1. main () debe declararse público porque JVM lo invoca cada vez que comienza la ejecución del programa. JVM no pertenece a nuestro paquete de programas.

Para acceder a main fuera del paquete, tenemos que declararlo como público. Si lo declaramos como algo que no sea público, muestra un Error de tiempo de ejecución pero no un error de tiempo de compilación

2. main () debe declararse como estático porque si un método se declara como estático, entonces podemos llamar a ese método fuera de la clase usando ClassName.methodName ();

class Sample
{
     static void fun()
     {
           System.out.println("Hello");       
     }
}

class Test
{
      public static void main(String[] args)
      {
                Sample.fun();
      }
}

La JVM primero cargará la clase de prueba, verificará los argumentos de la línea de comandos y llamará al método principal como Test.main ();

3. main () debe declararse como void main () porque JVM no espera ningún valor de main (). Por lo tanto, debe declararse como void.

Si se proporciona otro tipo de retorno, es un RunTimeError, es decir; NoSuchMethodFoundError.

4. main () debe tener argumentos de cadena como matrices porque JVM llama al método principal al pasar el argumento de la línea de comandos. Como se almacenan en un objeto de matriz de cadena, se pasa como argumento a main ().

Sai Upadhyayula
fuente
Puede usarlo public static void main(String... args)si está tan inclinado :-) Tiene la misma firma que[]
corsiKa
3

¿Cuál es la diferencia entre J2SE y J2EE (o JSE y JEE)?

Un desarrollador debe poder señalar que la edición empresarial es básicamente una definición de interfaz (es decir, una especificación) que los proveedores pueden implementar. Mientras que la edición estándar es una implementación en sí misma

oxbow_lakes
fuente
44
¿Es la capacidad de mantener la terminología de marketing recta realmente tan importante al final del día?
Laurence Gonsalves
@ Laurence - eso es algo ridículo que decir. Hay una diferencia real entre las dos cosas que se sorprenderá de cómo muchos desarrolladores supuestamente experimentados simplemente no entienden
oxbow_lakes
Mi punto es que si alguien es un buen programador, no podría importarme menos si saben la diferencia entre J2SE y J2EE.
Laurence Gonsalves
Leí la pregunta como "cosas que un desarrollador de JEE + JSE debería saber", en cuyo caso creo que entender la diferencia entre las dos tecnologías es relevante.
oxbow_lakes
44
@ Thorbjørn Ravn Andersen Dudo que la mayoría de los codificadores de Java, incluidos los buenos, sean muy conscientes de la distinción anterior, "la edición empresarial es básicamente una definición de interfaz ... Mientras que la edición estándar es una implementación por derecho propio". Para la mayoría de los buenos programadores de Java, la distinción que importa es qué API están disponibles. por ejemplo: los servlets son parte de EE, etc. En cualquier caso, así como creo que es más importante encontrar buenos programadores que buenos programadores de lenguaje X, creo que es más importante encontrar buenos programadores Java que buenos programadores JSE / JEE.
Laurence Gonsalves
3

¿Cómo volatileafecta la optimización del código por compilador?

romano
fuente
3
Esa entrada también debe contener la respuesta correcta.
Thorbjørn Ravn Andersen
No recuerdo la respuesta completa, mira esta sección youtube.com/… para una buena explicación. En pocas palabras: suponga que el método usa una variable volátil en algún momento. Entonces el compilador no optimiza el código de este método después de ese punto.
Romano
2

¿Qué tal un bean de sesión? Describa algunas diferencias entre beans de sesión sin estado y con estado.

Kristian
fuente
2

Escriba un programa para aceptar dos enteros y envíe el mayor de dos números a un archivo en la ubicación que elija. Ahora describe lo que hace cada declaración.

Es posible profundizar bastante a partir de la importancia de la declaración de importación, hasta la terminación anormal

Todo el mundo
fuente
2

Núcleo: 1. ¿Qué son las excepciones marcadas y no marcadas? 2. Al agregar una nueva excepción en el código, ¿qué tipo (marcado / sin marcar) usar cuándo?

Servlet: 1. ¿Cuál es la diferencia entre response.sendRedirect () y request.forward ()?

YoK
fuente
¿Puedes responder estas preguntas? ¡Es la primera vez que conozco las "excepciones marcadas y no marcadas"!
palAlaa
La búsqueda simple en Google puede llevarlo a respuestas: google.co.in/…
YoK
1

¿Cómo se threadstrabaja? ¿Qué es synchronized? Si hay dos synchronizedmétodos en una clase, ¿pueden ser ejecutados simultáneamente por dos hilos? Te sorprenderá escuchar a muchas personas responder que . Luego, todas las preguntas relacionadas con hilos, por ejemplo , punto muerto , hambre , etc.

fastcodejava
fuente
2
Eso se debe a que la respuesta es sí ...
Fortega
@Fortega - ¿Cómo puede ser eso? Cada método tiene un bloqueo en el objeto. Si uno threadestá ejecutando el método, ningún otro threadpuede obtener el bloqueo.
fastcodejava
1
Si tiene dos objetos del mismo tipo, puede llamar al primer método en el primer objeto y al segundo método en el segundo objeto simultáneamente. A menos que los métodos sean estáticos, por supuesto.
Fortega
2
Si no comprende correctamente cómo se realiza el bloqueo, eso no es realmente obvio. Además, aunque podría ser obvio, eso no significa que mi respuesta fue incorrecta :-)
Fortega
1
La respuesta podría hacer confusión para progrmmers que no utilizaron hilos en su trabajo, pero creo que es una buena :)
palAlaa
1

Una cosa que muchos programadores de Java no saben es que las cadenas son inmutables, ¡así que use StringBuilder o StringBuffer!

String s = "";
for(int i = 0; i < 100; i++) {
  s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint";
}
Shervin Asgari
fuente
Y números como Integer, Long, etc.
Arthur Ronald el
En cuanto al rendimiento, ya no hay una diferencia entre concatenar cadenas inmutables y usar StringBuilder. Esto se debe a que los compiladores modernos de Java optimizarán la concatenación: java.sun.com/docs/books/jls/third_edition/html/... Es mejor usar cualquier método que sea más legible.
Brent Wilson
1
@BrentWilson lo que vincules no hará lo que piensas. Se convertirá s += "a" + "b" + "c"en un Stringbuilder.append(...)escenario. Pero no optimizará un forbucle. El código en esta respuesta terminará creando un total de 201 Strings, 100 StringBuilders y (dependiendo de la implementación) 300 char[]s diferentes dentro de esos StringBuilders, y un estimado de 425k + caracteres. Cambiarlo para usar un StringBuilder directamente lo reducirá a 1 String, 1 StringBuilder y 13-15 char[]s internos usando solo ~ 8k caracteres como debería.
corsiKa 01 de