logo

Preguntas y respuestas de la entrevista de Java

Java es uno de los lenguajes de programación más populares del mundo, conocido por su versatilidad, portabilidad y amplia gama de aplicaciones. Java es el lenguaje más utilizado en empresas importantes como Uber, Airbnb, Google, Netflix, Instagram, Spotify, Amazon y muchas más debido a sus características y rendimiento.

En este artículo, proporcionaremos Más de 200 preguntas básicas de la entrevista sobre Java Diseñado tanto para principiantes como para profesionales experimentados con 3, 5 y 8 años de experiencia. Aquí, cubrimos todo, incluidos los conceptos básicos de Java, programación orientada a objetos (OOP), subprocesos múltiples, manejo de excepciones, patrones de diseño, colecciones de Java y más, que seguramente lo ayudarán a descifrar las entrevistas de Java.



Preguntas-de-entrevista-core-Java

Tabla de contenidos

Preguntas de la entrevista de Java para principiantes

1. ¿Es la plataforma Java independiente y, entonces, cómo?

Sí, Java es un lenguaje independiente de la plataforma. A diferencia de muchos lenguajes de programación, el compilador javac compila el programa para formar un código de bytes o un archivo .class. Este archivo es independiente del software o hardware que se ejecuta, pero necesita un archivo JVM (máquina virtual Java) preinstalado en el sistema operativo para una mayor ejecución del código de bytes.



A pesar de JVM depende de la plataforma , el código de bytes se puede crear en cualquier sistema y se puede ejecutar en cualquier otro sistema a pesar de que se utilice hardware o software, lo que hace que la plataforma Java sea independiente.

2. ¿Cuáles son las principales funciones de Java?

Java es uno de los lenguajes más famosos y utilizados en el mundo real, hay muchas características en Java que lo hacen mejor que cualquier otro lenguaje, algunas de ellas se mencionan a continuación:

Características de Java-768



  • Simple : Java es bastante simple de entender y la sintaxis
  • Plataforma independiente: Java es independiente de la plataforma, lo que significa que podemos ejecutar el mismo programa en cualquier software y hardware y obtendremos el mismo resultado.
  • Interpretado : Java se interpreta tan bien como un lenguaje basado en compilador.
  • Robusto : características como recolección de basura, manejo de excepciones, etc. que hacen que el lenguaje sea sólido.
  • Orientado a objetos : Java es un lenguaje orientado a objetos que admite los conceptos de clase, objetos, cuatro pilares de OOPS, etc.
  • asegurado : Como podemos compartir directamente una aplicación con el usuario sin compartir el programa real, Java es un lenguaje seguro.
  • Alto rendimiento: más rápido que otros lenguajes de programación interpretados tradicionales.
  • Dinámica : admite la carga dinámica de clases e interfaces.
  • Repartido : característica de Java nos permite acceder a archivos llamando a los métodos desde cualquier máquina conectada.
  • multiproceso : maneja múltiples tareas a la vez definiendo múltiples subprocesos
  • Arquitectura Neutra : no depende de la arquitectura.

3. ¿Qué es la JVM?

JVM-768

JVM significa Java Virtual Machine y es un intérprete de Java. Es responsable de cargar, verificar y ejecutar el código de bytes creado en Java.

Aunque depende de la plataforma, lo que significa que el software de JVM es diferente para diferentes sistemas operativos, desempeña un papel vital a la hora de hacer que la plataforma Java sea independiente.

Para saber más sobre el tema consulte JVM en Java .

4. ¿Qué es JIT?

JIT-768

JIT significa compilador (Just-in-Time) y forma parte de JRE (Java Runtime Environment), se utiliza para un mejor rendimiento de las aplicaciones Java durante el tiempo de ejecución. El uso de JIT se menciona en el proceso paso a paso que se menciona a continuación:

  1. El código fuente está compilado con javac compilador para formar código de bytes
  2. El código de bytes se pasa a JVM
  3. JIT es parte de JVM, JIT es responsable de compilar el código de bytes en código de máquina nativo en tiempo de ejecución.
  4. El compilador JIT está habilitado en todo momento, mientras que se activa cuando se invoca un método. Para un método compilado, la JVM llama directamente al código compilado, en lugar de interpretarlo.
  5. Como JVM llama al código compilado, esto aumenta el rendimiento y la velocidad de ejecución.

Para saber más sobre el tema consulte JIT en Java .

5. ¿Cuáles son los almacenamientos de memoria disponibles con JVM?

JVM-Áreas-768

JVM consta de algunos almacenamientos de memoria como se menciona a continuación:

  1. Área de clase (método): almacena datos a nivel de clase de cada clase, como el grupo de constantes de tiempo de ejecución, datos de campos y métodos, y el código de los métodos.
  2. Montón: se crean objetos o se almacenan objetos. Se utiliza para asignar memoria a objetos durante el tiempo de ejecución.
  3. Pila: almacena datos y resultados parciales que serán necesarios al devolver el valor del método y realizar enlaces dinámicos.
  4. Registro de contador de programa: almacena la dirección de la instrucción de la máquina virtual Java que se está ejecutando actualmente.
  5. Pila de métodos nativos: almacena todos los métodos nativos utilizados en la aplicación.

Para saber más sobre el tema consulte Almacenamientos de memoria JVM .

6. ¿Qué es un cargador de clases?

El cargador de clases es parte de JRE (Java Runtime Environment), durante la ejecución del código de bytes o del archivo .class creado, el cargador de clases es responsable de cargar dinámicamente las clases e interfaces de Java a JVM (Máquina virtual Java). Gracias a los cargadores de clases, el sistema de tiempo de ejecución de Java no necesita conocer archivos y sistemas de archivos.

Para saber más sobre el tema consulte Cargador de clases en Java.

7. Diferencia entre JVM, JRE y JDK.

JVM : JVM, también conocida como máquina virtual Java, es parte de JRE. JVM es un tipo de intérprete responsable de convertir código de bytes en código legible por máquina. La JVM en sí depende de la plataforma, pero interpreta el código de bytes, que es la razón independiente de la plataforma por la cual Java es independiente de la plataforma.

JRE : JRE significa Java Runtime Environment, es un paquete de instalación que proporciona un entorno para ejecutar el programa o aplicación Java en cualquier máquina.

JDK : JDK significa Java Development Kit que proporciona el entorno para desarrollar y ejecutar programas Java. JDK es un paquete que incluye dos cosas, herramientas de desarrollo para proporcionar un entorno para desarrollar sus programas Java y JRE para ejecutar programas o aplicaciones Java.

Para saber más sobre el tema consulte el Diferencias entre JVM, JRE y JDK .

8. ¿Cuáles son las diferencias entre Java y C++?

Base

C++

Java

Plataforma

C++ depende de la plataforma

Java es independiente de la plataforma

Solicitud

C++ se utiliza principalmente para la programación de sistemas.

Java se utiliza principalmente para la programación de aplicaciones.

Hardware

C++ está más cerca del hardware

Java no es tan interactivo con el hardware.

Alcance global

C++ admite alcance global y de espacio de nombres.

Java no admite el alcance global.

No apoyando

Las funciones admitidas en Java pero no en C++ son:

  • soporte de hilo
  • comentario de documentación
  • desplazamiento a la derecha sin firmar (>>>)

Las funciones admitidas en C++ pero no en Java son:

  • ir a
  • Consejos
  • Llamar por referencia
  • Estructuras y Sindicatos
  • Herencia múltiple
  • Funciones virtuales

UPS

C++ es un lenguaje orientado a objetos. No es una jerarquía de raíz única.

Java también es un lenguaje orientado a objetos. Es una jerarquía de raíz única ya que todo se deriva de una única clase (java.lang.Object).

Árbol de herencia

C++ siempre crea un nuevo árbol de herencia.

Java utiliza un árbol de herencia único ya que las clases en Java son hijas de clases de objetos en Java.

9. Explique public static void main(String args[]) en Java.

Función principal

A diferencia de cualquier otro lenguaje de programación como C, C++, etc. En Java, declaramos la función principal como una principal vacía estática pública (String args []). Los significados de los términos se mencionan a continuación:

  1. público : el público es el modificador de acceso encargado de mencionar quién puede acceder al elemento o método y cuál es el límite. Es responsable de hacer que la función principal esté disponible globalmente. Se hace público para que JVM pueda invocarlo desde fuera de la clase, ya que no está presente en la clase actual.
  2. estático : static es una palabra clave utilizada para que podamos usar el elemento sin iniciar la clase para evitar la asignación innecesaria de memoria.
  3. vacío : void es una palabra clave y se usa para especificar que un método no devuelve nada. Como la función principal no devuelve nada, usamos void.
  4. principal : main representa que la función declarada es la función principal. Ayuda a JVM a identificar que la función declarada es la función principal.
  5. Argumentos de cadena [] : Almacena argumentos de la línea de comandos de Java y es una matriz de clase java.lang.String.

10. ¿Qué es el grupo de cadenas de Java?

Un Java String Pool es un lugar en la memoria dinámica donde se almacenan todas las cadenas definidas en el programa. Un lugar separado en una pila es donde se almacena la variable que almacena la cadena. Siempre que creamos un nuevo objeto de cadena, JVM verifica la presencia del objeto en el grupo de cadenas. Si la cadena está disponible en el grupo, la misma referencia de objeto se comparte con la variable; de ​​lo contrario, se crea un nuevo objeto.

Java-String-Pool-768

Ejemplo:

String str1='Hello'; // 'Hello' will be stored in String Pool // str1 will be stored in stack memory>

11. ¿Qué pasará si declaramos que no declaramos el main como estático?

Podemos declarar el método principal sin utilizar estática y sin obtener ningún error. Pero el método principal no se tratará como el punto de entrada a la aplicación o al programa.

12. ¿Qué son los paquetes en Java?

Los paquetes en Java se pueden definir como la agrupación de tipos relacionados de clases, interfaces, etc. que brindan acceso a la protección y la gestión del espacio de nombres.

13. ¿Por qué se utilizan los Paquetes?

Los paquetes se utilizan en Java para evitar conflictos de nombres, controlar el acceso y facilitar la búsqueda, localización y uso de clases, interfaces, etc.

14. ¿Cuáles son las ventajas de los Paquetes en Java?

Existen varias ventajas al definir paquetes en Java.

  • Los paquetes evitan conflictos de nombres.
  • El Paquete proporciona un control de acceso más sencillo.
  • También podemos tener las clases ocultas que no son visibles desde el exterior y son utilizadas por el paquete.
  • Es más fácil localizar las clases relacionadas.

15. ¿Cuántos tipos de paquetes existen en Java?

Hay dos tipos de paquetes en Java.

  • Paquetes definidos por el usuario
  • Paquetes integrados

16. Explique los diferentes tipos de datos en Java.

Hay 2 tipos de datos en Java como se menciona a continuación:

  1. Tipo de datos primitivo
  2. Tipo de datos no primitivo o tipo de datos de objeto

Tipo de datos primitivos: los datos primitivos son valores únicos sin capacidades especiales. Hay 8 tipos de datos primitivos:

  • booleano : almacena el valor verdadero o falso
  • byte : almacena un entero de complemento a dos con signo de 8 bits
  • carbonizarse : almacena un único carácter Unicode de 16 bits
  • corto : almacena un entero en complemento a dos con signo de 16 bits
  • En t : almacena un entero en complemento a dos con signo de 32 bits
  • largo : almacena un entero en complemento a dos de 64 bits
  • flotar : almacena un punto flotante IEEE 754 de 32 bits de precisión simple
  • doble : almacena un punto flotante IEEE 754 de 64 bits de doble precisión

Tipo de datos no primitivo: los tipos de datos de referencia contendrán una dirección de memoria de los valores de la variable porque no pueden almacenar directamente los valores en la memoria. Los tipos de no primitivos se mencionan a continuación:

  • Instrumentos de cuerda
  • Formación
  • Clase
  • Objeto
  • Interfaz

17. ¿Cuándo se utiliza un tipo de datos de byte?

Un byte es un entero de dos complementos con signo de 8 bits. El valor mínimo admitido por bytes es -128 y 127 es el valor máximo. Se utiliza en condiciones en las que necesitamos ahorrar memoria y el límite de números necesarios está entre -128 y 127.

18. ¿Podemos declarar Pointer en Java?

No, Java no proporciona soporte para Pointer. Como Java necesitaba ser más seguro porque la característica del puntero no se proporciona en Java.

19. ¿Cuál es el valor predeterminado del tipo de datos byte en Java?

El valor predeterminado del tipo de datos byte en Java es 0.

20. ¿Cuál es el valor predeterminado de tipo de datos flotante y doble en Java?

El valor predeterminado de float es 0.0f y de double es 0.0d en Java.

21. ¿Qué es la clase Wrapper en Java?

Envoltura, en general, se refiere a una entidad más grande que encapsula una entidad más pequeña. Aquí en Java, la clase contenedora es una clase de objeto que encapsula los tipos de datos primitivos.

Los tipos de datos primitivos son aquellos a partir de los cuales se podrían crear más tipos de datos. Por ejemplo, los números enteros pueden llevar a la construcción de largos, bytes, cortos, etc. Por otro lado, la cadena no puede, por lo tanto, no es primitiva.

Volviendo a la clase contenedora, Java contiene 8 clases contenedoras. Son booleanos, bytes, cortos, enteros, caracteres, largos, flotantes y dobles. Además, también se pueden crear clases contenedoras personalizadas en Java, que es similar al concepto de estructura en el lenguaje de programación C. Creamos nuestra propia clase contenedora con los tipos de datos requeridos.

22. ¿Por qué necesitamos clases contenedoras?

La clase contenedora es una clase de objeto que encapsula los tipos de datos primitivos y los necesitamos por las siguientes razones:

  1. Las clases contenedoras son finales e inmutables.
  2. Proporciona métodos como valueOf(), parseInt(), etc.
  3. Proporciona la función de autoboxing y unboxing.

23. Diferenciar entre variables de instancia y locales.

Instancia variable

Variable local

Declarado fuera del método, invocado directamente por el método.

Declarado dentro del método.

Tiene un valor predeterminado.

Sin valor predeterminado

Se puede utilizar durante toda la clase.

El alcance se limita al método.

24. ¿Cuáles son los valores predeterminados asignados a variables e instancias en Java?

En Java, cuando no hemos inicializado las variables de instancia, el compilador las inicializa con valores predeterminados. Los valores predeterminados para instancias y variables dependen de sus tipos de datos. Algunos tipos comunes de tipos de datos predeterminados son:

  • El valor predeterminado para los tipos numéricos (byte, short, int, long, float y double) es 0.
  • El valor predeterminado para el tipo booleano es falso.
  • El valor predeterminado para los tipos de objetos (clases, interfaces y matrices) es nulo.
  • El carácter nulo, u0000, es el valor predeterminado para el tipo de carácter.

Ejemplo:

Java
// Java Program to demonstrate use of default values import java.io.*; class GFG {  // static values  static byte b;  static int i;  static long l;  static short s;  static boolean bool;  static char c;  static String str;  static Object object;  static float f;  static double d;  static int[] Arr;  public static void main(String[] args)  {  // byte value  System.out.println('byte value' + b);  // short value  System.out.println('short value' + s);  // int value  System.out.println('int value' + i);  // long value  System.out.println('long value' + l);  System.out.println('boolean value' + bool);  System.out.println('char value' + c);  System.out.println('float value' + f);  System.out.println('double value' + d);  System.out.println('string value' + str);  System.out.println('object value' + object);  System.out.println('Array value' + Arr);  } }>

Producción
byte value0 short value0 int value0 long value0 boolean valuefalse char value float value0.0 double value0.0 string valuenull object valuenull Array valuenull>

25. ¿Qué es una variable de clase?

En Java, una variable de clase (también conocida como variable estática) es una variable que se declara dentro de una clase pero fuera de cualquier método, constructor o bloque. Las variables de clase se declaran con la palabra clave estática y son compartidas por todas las instancias (objetos) de la clase, así como por la clase misma. No importa cuántos objetos se deriven de una clase, cada variable de clase sólo existirá una vez.

Ejemplo:

Java
// Java program to demonstrate use of Clas Variable class GFG {  public static int ctr = 0;  public GFG() { ctr++; }  public static void main(String[] args)  {  GFG obj1 = new GFG();  GFG obj2 = new GFG();  GFG obj3 = new GFG();  System.out.println('Number of objects created are '  + GFG.ctr);  } }>

Producción
Number of objects created are 3>

26. ¿Cuál es el valor predeterminado almacenado en las variables locales?

No hay ningún valor predeterminado almacenado con las variables locales. Además, las variables y objetos primitivos no tienen valores predeterminados.

27. Explique la diferencia entre variable de instancia y variable de clase.

Instancia variable: Una variable de clase sin un modificador estático conocida como variable de instancia suele ser compartida por todas las instancias de la clase. Estas variables pueden tener distintos valores entre varios objetos. El contenido de una variable de instancia es completamente independiente de una instancia de objeto de otra porque están relacionados con una instancia de objeto específica de la clase.

Ejemplo:

Java
// Java Program to demonstrate Instance Variable import java.io.*; class GFG {  private String name;  public void setName(String name) { this.name = name; }  public String getName() { return name; }  public static void main(String[] args)  {  GFG obj = new GFG();  obj.setName('John');  System.out.println('Name ' + obj.getName());  } }>

Producción
Name John>

Variable de clase: Variable de clase La variable se puede declarar en cualquier lugar del nivel de clase utilizando la palabra clave estática. Estas variables sólo pueden tener un valor cuando se aplican a varios objetos. Estas variables pueden ser compartidas por todos los miembros de la clase ya que no están conectadas a ningún objeto específico de la clase.

Ejemplo:

Java
// Java Program to demonstrate Class Variable import java.io.*; class GFG {  // class variable  private static final double PI = 3.14159;  private double radius;  public GFG(double radius) { this.radius = radius; }  public double getArea() { return PI * radius * radius; }  public static void main(String[] args)  {  GFG obj = new GFG(5.0);  System.out.println('Area of circle: '  + obj.getArea());  } }>

Producción
Area of circle: 78.53975>

28. ¿Qué es una variable estática?

La palabra clave estática se utiliza para compartir la misma variable o método de una clase determinada. Las variables estáticas son las variables que, una vez declaradas, se crea una única copia de la variable y se comparte entre todos los objetos a nivel de clase.

29. ¿Cuál es la diferencia entre System.out, System.err y System.in?

Salida del sistema – Es un PrintStream que se utiliza para escribir caracteres o se puede decir que puede generar los datos que queremos escribir en la consola/terminal de la interfaz de línea de comandos.

Ejemplo:

Java
// Java Program to implement // System.out import java.io.*; // Driver Class class GFG {  // Main Function  public static void main(String[] args)  {  // Use of System.out  System.out.println('');  } }>


Sistema.err – Se utiliza para mostrar mensajes de error.

Ejemplo:

Java
// Java program to demonstrate // System.err import java.io.*; // Driver Class class GFG {  // Main function  public static void main(String[] args)  {  // Printing error  System.err.println(  'This is how we throw error with System.err');  } }>

Producción:

This is how we throw error with System.err>

Aunque System.err tiene muchas similitudes, ambos también tienen muchas diferencias, comprobémoslas.

salida del sistema sistema.err

Se imprimirá según el estándar fuera del sistema.

Se imprimirá con el error estándar.

Se utiliza principalmente para mostrar resultados en la consola.

Se utiliza principalmente para generar textos de error.

Da salida en la consola con el color predeterminado (negro).

También da salida a la consola, pero la mayoría de los IDE le dan un color rojo para diferenciarlo.

System.in – Es un InputStream que se utiliza para leer la entrada desde la ventana del terminal. No podemos usar System.in directamente, por lo que usamos la clase Scanner para recibir información con system.in.

Ejemplo:

Java
// Java Program to demonstrate // System.in import java.util.*; // Driver Class class Main {  // Main Function  public static void main(String[] args)  {  // Scanner class with System.in  Scanner sc = new Scanner(System.in);  // Taking input from the user  int x = sc.nextInt();  int y = sc.nextInt();  // Printing the output  System.out.printf('Addition: %d', x + y);  } }>

Producción:

3 4 Addition: 7>

30. ¿Qué entiendes por flujo IO?

2-768

Java trae varios Streams con su paquete de E/S que ayuda al usuario a realizar todas las operaciones de entrada y salida. Estos flujos admiten todo tipo de objetos, tipos de datos, caracteres, archivos, etc. para ejecutar completamente las operaciones de E/S.

31. ¿Cuál es la diferencia entre la jerarquía de clases Lector/Escritor y la jerarquía de clases InputStream/OutputStream?

La diferencia clave entre ellos es que los datos del flujo de bytes son leídos y escritos por clases de flujo de entrada/salida. Los personajes son manejados por las clases Reader y Writer. A diferencia de las clases Lector/Escritor, que aceptan matrices de caracteres como parámetros, los métodos de clase de flujo de entrada/salida aceptan matrices de bytes. En comparación con los flujos de entrada/salida, las clases Lector/Escritor son más eficientes, manejan todos los caracteres Unicode y son útiles para la internalización. Utilice clases de Lector/Escritor en lugar de datos binarios, como imágenes, a menos que lo haga.

Ejemplo:

Java
// Java Program to demonstrate Reading Writing Binary Data // with InputStream/OutputStream import java.io.*; class GFG {  public static void main(String[] args) {  try {  // Writing binary data to a file using OutputStream  byte[] data = {(byte) 0xe0, 0x4f, (byte) 0xd0, 0x20, (byte) 0xea};  OutputStream os = new FileOutputStream('data.bin');  os.write(data);  os.close();  // Reading binary data from a file using InputStream  InputStream is = new FileInputStream('data.bin');  byte[] newData = new byte[5];  is.read(newData);  is.close();  // Printing the read data  for (byte b : newData) {  System.out.println(b);  }  } catch (IOException e) {  e.printStackTrace();  }  } }>

Producción
-32 79 -48 32 -22>

32. ¿Cuáles son las súper clases para todas las transmisiones?

Todas las clases de transmisión se pueden dividir en dos tipos de clases que son clases ByteStream y clases CharacterStream. Las clases ByteStream se dividen a su vez en clases InputStream y clases OutputStream. Las clases de CharacterStream también se dividen en clases de lector y clases de escritor. Las clases SuperMost para todas las clases de InputStream son java.io.InputStream y para todas las clases de flujo de salida son java.io.OutPutStream. De manera similar, para todas las clases de lector, la clase principal es java.io.Reader, y para todas las clases de escritor, es java.io.Writer.

33. ¿Qué son FileInputStream y FileOutputStream?

Para leer y escribir datos, Java ofrece flujos de E/S. Un Stream representa una fuente de entrada o un destino de salida, que podría ser un archivo, un dispositivo de E/S, otro programa, etc. flujo de entrada de archivos en Java se utiliza para leer datos de un archivo como un flujo de bytes. Se utiliza principalmente para leer datos binarios como imágenes, archivos de audio u objetos serializados.

Ejemplo:

File file = new File('path_of_the_file'); FileInputStream inputStream = new FileInputStream(file);>

En Java, el Flujo de salida de archivos La función se utiliza para escribir datos byte a byte en un archivo o descriptor de archivo determinado. Por lo general, los datos de bytes sin procesar, como imágenes, se escriben en un archivo mediante FileOutputStream.

Ejemplo:

File file = new File('path_of_the_file'); FileOutputStream outputStream = new FileOutputStream(file);>

34. ¿Cuál es el propósito de utilizar las clases BufferedInputStream y BufferedOutputStream?

Cuando trabajamos con archivos o transmisiones, para aumentar el rendimiento de entrada/salida del programa, necesitamos usar las clases BufferedInputStream y BufferedOutputStream. Ambas clases proporcionan la capacidad de almacenamiento en búfer, lo que significa que los datos se almacenarán en un búfer antes de escribirlos en un archivo o leerlos de una secuencia. También reduce la cantidad de veces que nuestro sistema operativo necesita interactuar con la red o el disco. El almacenamiento en búfer permite a los programas escribir una gran cantidad de datos en lugar de escribirlos en pequeños fragmentos. Esto también reduce la sobrecarga de acceso a la red o al disco.

BufferedInputStream(InputStream inp); // used to create the bufferinput stream and save the arguments.>
BufferedOutputStream(OutputStream output); // used to create a new buffer with the default size.>

35. ¿Qué son los FilterStreams?

Filtro de flujo o Filtrar flujos devuelve una secuencia que consta de los elementos de esta secuencia que coinciden con el predicado dado. Mientras trabaja con filter(), en realidad no realiza filtrado, sino que crea una nueva secuencia que, cuando se recorre, contiene los elementos de las secuencias iniciales que coinciden con el predicado dado.

Ejemplo:

FileInputStream fis =new FileInoutStream('file_path');  FilterInputStream = new BufferedInputStream(fis);>


36. ¿Qué es un filtro de E/S?

Un filtro de E/S, también definido como filtro de entrada y salida, es un objeto que lee de una secuencia y escribe datos en fuentes de entrada y salida. Usó el paquete java.io para usar este filtro.

37. ¿De cuántas maneras puedes recibir información desde la consola?

Hay dos métodos para recibir información desde la consola en Java que se mencionan a continuación:

  1. Usando el argumento de la línea de comando
  2. Uso de la clase de lector almacenado en búfer
  3. Usando la clase de consola
  4. Usando la clase de escáner

El programa que demuestra el uso de cada método se proporciona a continuación.

Ejemplo:

Java
// Java Program to implement input // using Command line argument import java.io.*; class GFG {  public static void main(String[] args)  {  // check if length of args array is  // greater than 0  if (args.length > 0) {  System.out.println(  'The command line arguments are:');  // iterating the args array and printing  // the command line arguments  for (String val : args)  System.out.println(val);  }  else  System.out.println('No command line '  + 'arguments found.');  } } // Use below commands to run the code // javac GFG.java // java Main techcodeview.com>
Java
// Java Program to implement // Buffer Reader Class import java.io.*; class GFG {  public static void main(String[] args)  throws IOException  {  // Enter data using BufferReader  BufferedReader read = new BufferedReader(  new InputStreamReader(System.in));  // Reading data using readLine  String x = read.readLine();  // Printing the read line  System.out.println(x);  } }>
Java
// Java program to implement input // Using Console Class public class GfG {  public static void main(String[] args)  {  // Using Console to input data from user  String x = System.console().readLine();  System.out.println('You entered string ' + x);  } }>
Java
// Java program to demonstrate // working of Scanner in Java import java.util.Scanner; class GfG {  public static void main(String args[])  {  // Using Scanner for Getting Input from User  Scanner in = new Scanner(System.in);  String str = in.nextLine();  System.out.println('You entered string ' + str);  } }>

Producción:

techcodeview.com>

38. Diferencia en el uso de print, println y printf.

print, println y printf se utilizan para imprimir los elementos, pero print imprime todos los elementos y el cursor permanece en la misma línea. println desplaza el cursor a la siguiente línea. Y con printf también podemos usar identificadores de formato.

39. ¿Qué son los operadores?

Los operadores son tipos especiales de símbolos que se utilizan para realizar algunas operaciones sobre variables y valores.

40. ¿Cuántos tipos de operadores hay disponibles en Java?

Todos los tipos de operadores en Java se mencionan a continuación:

  1. Operadores aritméticos
  2. Operadores unarios
  3. Operador de asignación
  4. Operadores relacionales
  5. Operadores logicos
  6. Operador ternario
  7. Operadores bit a bit
  8. Operadores de turno
  9. instancia de operador

Los operadores Postfix se consideran de mayor precedencia según la precedencia de los operadores Java.

41. Explique la diferencia entre los operadores>> y>>>.

Operadores como>> y>>> parecen ser iguales pero actúan de manera un poco diferente. El operador>> desplaza los bits de signo y el operador>>> se utiliza para desplazar los bits llenos de ceros.

Ejemplo:

Java
// Java Program to demostrate //>Los operadores> y>>> importan java.io.*; // Clase de controlador GFG { public static void main(String[] args) { int a = -16, b = 1;  // Uso de>> System.out.println(a >> b);  a = -17;  segundo = 1;  // Uso de>>> System.out.println(a >>> b);  } }>

Producción
-8 2147483639>

42. ¿Qué operador de Java es asociativo correcto?

Sólo hay un operador que es asociativo derecho y que es el operador =.

43. ¿Qué es el operador de punto?

El operador Dot en Java se utiliza para acceder a las variables de instancia y métodos de objetos de clase. También se utiliza para acceder a clases y subpaquetes del paquete.

44. ¿Qué es el tipo de retorno covariante?

El tipo de retorno covariante especifica que el tipo de retorno puede variar en la misma dirección que la subclase. Es posible tener diferentes tipos de devolución para un método primordial en la clase secundaria, pero el tipo de devolución del niño debe ser un subtipo del tipo de devolución principal y debido a ese método primordial se vuelve variante con respecto al tipo de devolución.

Usamos el tipo de retorno covariante por las siguientes razones:

  • Evita las confusas conversiones de tipos presentes en la jerarquía de clases y hace que el código sea legible, utilizable y mantenible.
  • Da libertad para tener tipos de retorno más específicos al anular métodos.
  • Ayuda para evitar ClassCastExceptions en tiempo de ejecución en las devoluciones.

45. ¿Cuál es la palabra clave transitoria?

La palabra clave transitoria se usa en el momento de la serialización si no queremos guardar el valor de una variable particular en un archivo. Cuando JVM encuentra una palabra clave transitoria, ignora el valor original de la variable y guarda el valor predeterminado de ese tipo de datos variable.

46. ​​¿Cuál es la diferencia entre los métodos dormir() y esperar()?

Dormir()

Esperar()

El método sleep() pertenece a la clase thread.

El método Wait() pertenece a la clase de objeto.

La suspensión no libera el bloqueo que mantiene el hilo actual.

wait() libera el bloqueo que permite que otros subprocesos lo adquieran.

Este método es un método estático.

Este método no es un método estático.

Sleep() no arroja una excepción interrumpida.Se muestra InterruptedException si el hilo se interrumpe mientras se espera.

Se utiliza principalmente para retrasar un hilo durante un tiempo específico.

Se utiliza principalmente para pausar un hilo hasta que otro hilo lo notifique.

Sleep() tiene dos métodos sobrecargados:

  • dormir (millis largos)millis: milisegundos
  • dormir (millis largos, int nanos) nanos: nanosegundos

Wait() tiene tres métodos sobrecargados:

  • esperar()
  • espera (tiempo de espera largo)
  • esperar (tiempo de espera largo, int nanos)

47. ¿Cuáles son las diferencias entre String y StringBuffer?

Cadena

búfer de cadena

Almacén de una secuencia de caracteres.Proporciona funcionalidad para trabajar con las cadenas.
Es inmutable.Es mutable (se puede modificar y se pueden realizar otras operaciones de cadena sobre ellos).
No hay operaciones de subprocesos en una cadena.Es seguro para subprocesos (dos subprocesos no pueden llamar a los métodos de StringBuffer simultáneamente)

48. ¿Cuáles son las diferencias entre StringBuffer y StringBuilder?

búfer de cadena

Constructor de cadenas

StringBuffer proporciona funcionalidad para trabajar con las cadenas.StringBuilder es una clase utilizada para construir una cadena mutable.
Es seguro para subprocesos (dos subprocesos no pueden llamar a los métodos de StringBuffer simultáneamente)No es seguro para subprocesos (dos subprocesos pueden llamar a los métodos simultáneamente)
Comparativamente lento ya que está sincronizado.Al no estar sincronizado, la implementación es más rápida

49. ¿Cuál entre String o String Buffer debería preferirse cuando es necesario realizar muchas actualizaciones en los datos?

Se prefiere la cadena a StringBuffer ya que StringBuilder es más rápido que StringBuffer, pero los objetos StringBuffer son los preferidos ya que proporcionan más seguridad para los subprocesos.


50. ¿Por qué StringBuffer se llama mutable?

La clase StringBuffer en Java se utiliza para representar una cadena de caracteres modificable. Ofrece una alternativa a la clase String inmutable al permitirle cambiar el contenido de una cadena sin crear constantemente nuevos objetos. Las cadenas mutables (modificables) se crean con la ayuda de la clase StringBuffer. La clase StringBuffer en Java es idéntica a la clase String excepto que se puede cambiar.

Ejemplo:

Java
// Java Program to demonstrate use of stringbuffer public class StringBufferExample {  public static void main(String[] args)  {  StringBuffer s = new StringBuffer();  s.append('Geeks');  s.append('for');  s.append('Geeks');  String message = s.toString();  System.out.println(message);  } }>

Producción
techcodeview.com>

51. ¿En qué se diferencia la creación de un String usando new() de la de un literal?

La cadena que usa new() es diferente del literal ya que cuando declaramos una cadena, almacena los elementos dentro de la memoria de la pila, mientras que cuando se declara usando new() asigna una memoria dinámica en la memoria del montón. El objeto se crea en la memoria del montón incluso si el mismo objeto de contenido está presente.

Sintaxis:

String x = new String('ABC');>


3-768

52. ¿Qué es una matriz en Java?

Una matriz en Java es una estructura de datos que se utiliza para almacenar una secuencia de elementos del mismo tipo de tamaño fijo. Se puede acceder a los elementos de una matriz por su índice, que comienza desde 0 y llega hasta una longitud de menos 1. La declaración de matriz en Java se realiza con la ayuda de corchetes y el tamaño también se especifica durante la declaración.

Sintaxis:

int[] Arr = new int[5];>

53. ¿En qué matrices de memoria se crean en Java?

Las matrices en Java se crean en la memoria del montón. Cuando se crea una matriz con la ayuda de una nueva palabra clave, se asigna memoria en el montón para almacenar los elementos de la matriz. En Java, la memoria del montón es administrada por la Máquina Virtual Java (JVM) y también se comparte entre todos los subprocesos del Programa Java. La memoria que el programa ya no utiliza, JVM utiliza un recolector de basura para recuperar la memoria. Las matrices en Java se crean dinámicamente, lo que significa que el tamaño de la matriz se determina durante el tiempo de ejecución del programa. El tamaño de la matriz se especifica durante la declaración de la matriz y no se puede cambiar una vez que se crea la matriz.

54. ¿Cuáles son los tipos de matriz?

Hay dos tipos de matrices, es decir, matrices primitivas y matrices de referencia.

  • Matrices unidimensionales: Las matrices que tienen una sola dimensión, es decir, una matriz de números enteros o una matriz de cadenas, se conocen como matrices unidimensionales.

4-768

Sintaxis:

data_type[] Array_Name = new data_type[ArraySize];>
  • Matrices multidimensionales: Matrices que tienen dos o más dimensiones, como matrices bidimensionales o tridimensionales.

55. ¿Por qué el índice de la matriz Java comienza con 0?

El índice de una matriz significa la distancia desde el inicio de la matriz. Entonces, el primer elemento tiene una distancia de 0, por lo que el índice inicial es 0.

Sintaxis:

[Base Address + (index * no_of_bytes)]>

56. ¿Cuál es la diferencia entre int array[] e int[] array?

Tanto int array[] como int[] array se utilizan para declarar una matriz de números enteros en Java. La única diferencia entre ellos está en su sintaxis, no hay diferencias de funcionalidad entre ellos.

int arr[] is a C-Style syntax to declare an Array.>
int[] arr is a Java-Style syntax to declare an Array.>

Sin embargo, generalmente se recomienda utilizar una sintaxis de estilo Java para declarar una matriz. Como es fácil de leer y comprender, también es más coherente con otras construcciones del lenguaje Java.

57. ¿Cómo copiar una matriz en Java?

En Java existen varias formas de copiar una matriz según los requisitos.

  • Método clone() en Java: Este método en Java se utiliza para crear una copia superficial de la matriz dada, lo que significa que la nueva matriz compartirá la misma memoria que la matriz original.
int[] Arr = { 1, 2, 3, 5, 0}; int[] tempArr = Arr.clone();>
  • método arraycopy(): Para crear una copia profunda de la matriz, podemos usar este método que crea una nueva matriz con los mismos valores que la matriz original.
int[] Arr = {1, 2, 7, 9, 8}; int[] tempArr = new int[Arr.length]; System.arraycopy(Arr, 0, tempArr, 0, Arr.length);>
  • método copyOf(): Este método se utiliza para crear una nueva matriz con una longitud específica y copia el contenido de la matriz original en la nueva matriz.
int[] Arr = {1, 2, 4, 8}; int[] tempArr = Arrays.copyOf(Arr, Arr.length);>
  • método copyOfRange(): Este método es muy similar al método copyOf() en Java, pero este método también nos permite especificar el rango de elementos a copiar de la matriz original.
int[] Arr = {1, 2, 4, 8}; int[] temArr = Arrays.copyOfRange(Arr, 0, Arr.length);>

58. ¿Qué entiendes por matriz dentada?

Una matriz irregular en Java es solo una matriz bidimensional en la que cada fila de la matriz puede tener una longitud diferente. Dado que todas las filas en una matriz 2-d tienen la misma longitud, una matriz irregular permite una mayor flexibilidad en el tamaño de cada fila. Esta función es muy útil en condiciones en las que los datos tienen diferentes longitudes o cuando es necesario optimizar el uso de la memoria.

Sintaxis:

int[][] Arr = new int[][] {  {1, 2, 8},   {7, 5},   {6, 7, 2, 6} };>

59. ¿Es posible hacer volátil una matriz?

En Java, no es posible convertirlo en volátil. Las palabras clave volátiles en Java solo se pueden aplicar a variables individuales, pero no a matrices o colecciones. El valor de la variable siempre se lee y se escribe en la memoria principal cuando se define como volátil en lugar de almacenarse en caché en la memoria local de un subproceso. Esto hace que sea más fácil asegurarse de que todos los subprocesos que acceden a la variable puedan ver los cambios realizados en ella.

60. ¿Cuáles son las ventajas y desventajas de una matriz?

5-768

Las ventajas de los Arrays son:

  • El acceso directo y efectivo a cualquier elemento de la colección es posible gracias a las matrices. Se puede acceder a los elementos de una matriz mediante una operación O(1), lo que significa que la cantidad de tiempo necesaria para hacerlo es constante e independiente del tamaño de la matriz.
  • Los datos se pueden almacenar eficazmente en la memoria mediante matrices. El tamaño de una matriz se conoce en el momento de la compilación, ya que sus elementos se almacenan en regiones de memoria contiguas.
  • Debido al hecho de que los datos se almacenan en áreas de memoria contiguas, las matrices proporcionan una recuperación rápida de datos.
  • Las matrices son fáciles de implementar y comprender, lo que las convierte en una opción ideal para principiantes que aprenden programación informática.

Las desventajas de las matrices son:

  • Los arrays se crean con un tamaño predeterminado que se elige en ese momento. Esto significa que si es necesario ampliar el tamaño de la matriz, será necesario crear una nueva matriz y copiar los datos de la matriz anterior a la nueva, lo que puede consumir mucho tiempo y memoria.
  • Es posible que haya espacio de memoria no utilizado en el espacio de memoria de una matriz si la matriz no está completamente ocupada. Si no recuerda bien, esto puede ser un problema.
  • En comparación con otras estructuras de datos, como listas enlazadas y árboles, las matrices pueden ser rígidas debido a su tamaño fijo y su soporte limitado para tipos de datos sofisticados.
  • Debido a que todos los elementos de una matriz deben ser del mismo tipo de datos, no admite tipos de datos complejos como objetos y estructuras.

61. ¿Qué es un paradigma orientado a objetos?

Paradigma significa literalmente un patrón o un método. Los paradigmas de programación son los métodos para resolver un programa de cuatro tipos, a saber, imperativo, lógico, funcional y orientado a objetos. Cuando los objetos se utilizan como entidades base sobre las cuales se aplican los métodos, se realizan funcionalidades de encapsulación o herencia, se conoce como paradigma orientado a objetos.

62. ¿Cuáles son los conceptos principales de la programación orientada a objetos en Java?

Los conceptos principales de POO en Java se mencionan a continuación:

  • Herencia
  • Polimorfismo
  • Abstracción
  • Encapsulación

63. ¿Cuál es la diferencia entre un lenguaje de programación orientado a objetos y un lenguaje de programación basado en objetos?

Lenguaje de programación orientado a objetos

Lenguaje de programación basado en objetos

El lenguaje de programación orientado a objetos cubre conceptos más amplios como herencia, polimorfismo, abstracción, etc.El alcance de la programación basada en objetos se limita al uso de objetos y la encapsulación.
Soporta todos los objetos integrados.No es compatible con todos los objetos integrados.
Ejemplos: Java, C#, etc.Ejemplos: script Java, conceptos básicos visuales, etc.

64. ¿En qué se diferencia el operador 'nuevo' del operador 'nuevaInstancia()' en Java?

El nuevo operador se usa para crear objetos, pero si queremos decidir el tipo de objeto a crear en tiempo de ejecución, no hay forma de que podamos usar el nuevo operador. En este caso tenemos que utilizar el método nuevaInstancia() .

65. ¿Qué son las clases en Java?

En Java, las clases son la colección de objetos que comparten características y atributos similares. Las clases representan el modelo o plantilla a partir del cual se crean los objetos. Las clases no son entidades del mundo real, pero nos ayudan a crear objetos que son entidades del mundo real.

66. ¿Cuál es la diferencia entre el método estático (clase) y el método de instancia?

Método estático (clase)

método de instancia

El método estático está asociado con una clase en lugar de un objeto.

El método de instancia está asociado con un objeto en lugar de una clase.

Los métodos estáticos se pueden llamar usando el nombre de la clase solo sin crear una instancia de una clase.

El método de instancia se puede invocar en una instancia específica de una clase utilizando la referencia del objeto.

Los métodos estáticos no tienen acceso a este palabra clave .

Los métodos de instancia tienen acceso a este palabra clave .

Este método solo puede acceder a miembros estáticos de la clase.

Este método puede acceder a métodos estáticos y no estáticos de la clase.

67. ¿Cuál es esta palabra clave en Java?

6

'esto' es una palabra clave utilizada para hacer referencia a una variable que hace referencia al objeto actual.

68. ¿Qué son los especificadores de acceso breve y los tipos de especificadores de acceso?

Access_modifiers_in_java-768

Los especificadores de acceso en Java ayudan a restringir el alcance de una clase, constructor, variable, método o miembro de datos. Hay cuatro tipos de especificadores de acceso en Java que se mencionan a continuación:

  1. Público
  2. Privado
  3. Protegido
  4. Por defecto

69. ¿Cuál será el valor inicial de una referencia de objeto que se define como una variable de instancia?

El valor inicial de una referencia de objeto que se define como una variable de instancia es un valor NULL.

70. ¿Qué es un objeto?

El objeto es una entidad de la vida real que tiene ciertas propiedades y métodos asociados. El objeto también se define como la instancia de una clase. Un objeto se puede declarar usando una nueva palabra clave.

71. ¿Cuáles son las diferentes formas de crear objetos en Java?

Los métodos para crear objetos en Java se mencionan a continuación:

  1. Usando nueva palabra clave
  2. Usando una nueva instancia
  3. Usando el método clonar()
  4. Usando deserialización
  5. Usando el método newInstance() de la clase Constructor

Para saber más sobre los métodos para crear objetos en Java, consulte Este artículo .

72. ¿Cuáles son las ventajas y desventajas de la clonación de objetos?

Existen muchas ventajas y desventajas de utilizar la clonación de objetos, como se menciona a continuación:

Ventajas:

  • En Java, el operador de asignación '=' no se puede utilizar para clonar ya que simplemente crea una copia de las variables de referencia. Para superar dicha discrepancia, se puede utilizar el método clone() de la clase Object sobre el operador de asignación.
  • El método clone() es un método protegido de la clase Objeto, lo que significa que solo la clase Empleado puede clonar objetos Empleado. Esto significa que ninguna clase que no sea Empleado puede clonar objetos Empleado ya que no conoce los atributos de la clase Empleado.
  • El tamaño del código disminuye a medida que disminuye la repetición.
  • Permite la replicación (algo así como un patrón de prototipo). La inicialización manual de cada campo crea un código grande si el objeto es complejo, es más rápido con la clonación.

Desventajas:

  • Como el método Object.clone() está protegido, debemos proporcionar nuestro propio clone() y llamar indirectamente a Object.clone() desde él.
  • Si no tenemos ningún método, entonces debemos proporcionar una interfaz clonable, ya que necesitamos proporcionar información de JVM para que podamos realizar una clonación () en nuestro objeto. Si no, no podemos clonar. La clonación hace una copia superficial de los campos si simplemente devuelva super.clone() del método de clonación que puede ser problemático.

73. ¿Cuáles son las ventajas de pasar esto a un método en lugar del propio objeto de clase actual?

Hay algunas ventajas de pasar esto a un método en lugar del propio objeto de clase actual:

  • esta es la variable final por lo que no se puede asignar a ningún valor nuevo, mientras que el objeto de clase actual puede no ser final y se puede cambiar.
  • esto se puede utilizar en el bloque sincronizado.

74. ¿Qué es el constructor?

Constructor es un método especial que se utiliza para inicializar objetos. Se llama al constructor cuando se crea un objeto. El nombre del constructor es el mismo que el de la clase.

Ejemplo:

// Class Created class XYZ{  private int val;    // Constructor  XYZ(){  val=0;  } };>

75. ¿Qué sucede si no proporcionas un constructor en una clase?

Si no proporciona un constructor en una clase en Java, el compilador genera automáticamente un constructor predeterminado sin argumentos ni operación, que es un constructor predeterminado.

76. ¿Cuántos tipos de constructores se utilizan en Java?

Hay dos tipos de constructores en Java como se menciona a continuación:

  1. Constructor predeterminado
  2. Constructor parametrizado

Constructor predeterminado: Es el tipo que no acepta ningún valor de parámetro. Se utiliza para establecer valores iniciales para los atributos del objeto.

class_Name(); // Default constructor called>

Constructor parametrizado: Es el tipo de constructor que acepta parámetros como argumentos. Se utilizan para asignar valores a variables de instancia durante la inicialización de objetos.

class_Name(parameter1, parameter2......); // All the values passed as parameter will be // allocated accordingly>

77. ¿Cuál es el propósito de un constructor predeterminado?

Los constructores ayudan a crear instancias de una clase o se puede decir que crean objetos de una clase. Se llama al constructor durante la inicialización de objetos. Un constructor predeterminado es un tipo de constructor que no acepta ningún parámetro, por lo que cualquier valor asignado a las propiedades de los objetos se considera valores predeterminados.

78. ¿Qué entiendes por constructor de copias en Java?

El constructor de copia es el tipo de constructor en el que pasamos otro objeto como parámetro porque las propiedades de ambos objetos parecen iguales, es por eso que parece que los constructores crean una copia de un objeto.

79. ¿Dónde y cómo se puede recurrir a un constructor privado?

Se utiliza un constructor privado si no desea que ninguna otra clase cree una instancia del objeto para evitar la creación de subclases. El uso del constructor privado se puede ver tal como se implementa en el ejemplo.

Ejemplo:

Java
// Java program to demonstrate implementation of Singleton // pattern using private constructors. import java.io.*; class GFG {  static GFG instance = null;  public int x = 10;  // private constructor can't be accessed outside the  // class  private GFG() {}  // Factory method to provide the users with instances  static public GFG getInstance()  {  if (instance == null)  instance = new GFG();  return instance;  } } // Driver Class class Main {  public static void main(String args[])  {  GFG a = GFG.getInstance();  GFG b = GFG.getInstance();  a.x = a.x + 10;  System.out.println('Value of a.x = ' + a.x);  System.out.println('Value of b.x = ' + b.x);  } }>

Producción
Value of a.x = 20 Value of b.x = 20>

80. ¿Cuáles son las diferencias entre los constructores y los métodos?

Los constructores de Java se utilizan para inicializar objetos. Durante la creación, se llama a los constructores para establecer atributos para los objetos. Además, algunas diferencias básicas entre ellos son:

  1. Los constructores solo se llaman cuando se crea el objeto, pero se pueden llamar a otros métodos varias veces durante la vida de un objeto.
  2. Los constructores no devuelven nada, mientras que otros métodos pueden devolver cualquier cosa.
  3. Los constructores están acostumbrados a configurar el estado inicial, pero los métodos se utilizan para realizar acciones específicas.

81. ¿Qué es una interfaz?

Una interfaz en Java es una colección de variables finales estáticas y métodos abstractos que definen el contrato o acuerdo para un conjunto de clases vinculadas. Cualquier clase que implemente una interfaz debe implementar un conjunto específico de métodos. Especifica el comportamiento que debe exhibir una clase, pero no los detalles de cómo debe implementarse.

Sintaxis:

interface  {  // constant fields  // methds that are abstract by default }>

Ejemplo:

Java
// Java Program to demonstrate Interface import java.io.*; interface Shape {  double getArea();  double getPerimeter(); } class Circle implements Shape {  private double radius;  public Circle(double radius) { this.radius = radius; }  public double getArea()  {  return Math.PI * radius * radius;  }  public double getPerimeter()  {  return 2 * Math.PI * radius;  } } class GFG {  public static void main(String[] args)  {  Circle circle = new Circle(5.0);  System.out.println('Area of circle is '  + circle.getArea());  System.out.println('Perimeter of circle is'  + circle.getPerimeter());  } }>

Producción
Area of circle is 78.53981633974483 Perimeter of circle is31.41592653589793>

82. Dé algunas características de la Interfaz.

Una interfaz en el lenguaje de programación Java se define como un tipo abstracto utilizado para especificar el comportamiento de una clase. Una interfaz en Java es un modelo de un comportamiento. Una interfaz Java contiene constantes estáticas y métodos abstractos.

Las características de la interfaz se mencionan a continuación:

  • La interfaz puede ayudar a lograr una abstracción total.
  • Nos permite utilizar múltiples herencias en Java.
  • Cualquier clase puede implementar múltiples interfaces incluso cuando una clase puede extender solo una clase.
  • También se utiliza para lograr un acoplamiento flojo.

83. ¿Qué es una interfaz de marcador?

Una interfaz se reconoce como una interfaz vacía (sin campos ni métodos) y se denomina interfaz de marcador. Ejemplos de interfaces de marcador son interfaces serializables, clonables y remotas.

84. ¿Cuáles son las diferencias entre clase abstracta e interfaz?

Clase-abstracta-e-interfaz-768

Clase abstracta

Clase de interfaz

En una clase abstracta se pueden encontrar métodos tanto abstractos como no abstractos.

La interfaz contiene sólo métodos abstractos.

La clase abstracta admite métodos finales.

La clase de interfaz no admite métodos finales.

La clase Abstract no admite la herencia múltiple.

La clase de interfaz admite herencias múltiples.

La palabra clave abstracta se utiliza para declarar la clase abstracta.

La palabra clave de interfaz se utiliza para declarar la clase de interfaz.

extender La palabra clave se utiliza para ampliar una clase abstracta. implementos La palabra clave se utiliza para implementar la interfaz.

La clase abstracta tiene miembros como protegido, privado, etc.

Todos los miembros de la clase son públicos de forma predeterminada.

85. ¿Qué quieres decir con encapsulación de datos?

Encapsulación-en-Java-300

La encapsulación de datos es el concepto de propiedades y características de OOPS de las clases que la interfaz está unida. Básicamente, agrupa datos y métodos que operan con esos datos dentro de una sola unidad. La encapsulación se logra declarando las variables de instancia de una clase como privadas, lo que significa que solo se puede acceder a ellas dentro de la clase.

86. ¿Cuáles son las ventajas de la encapsulación en Java?

Las ventajas de la encapsulación en Java se mencionan a continuación:

  1. Ocultación de datos: es una forma de restringir el acceso de nuestros miembros a los datos ocultando los detalles de implementación. La encapsulación también proporciona una forma de ocultar datos. El usuario no tendrá idea acerca de la implementación interna de la clase.
  2. Mayor flexibilidad: Podemos hacer que las variables de la clase sean de solo lectura o de solo escritura según nuestros requisitos.
  3. Reutilizabilidad: la encapsulación también mejora la reutilización y es fácil de cambiar con nuevos requisitos.
  4. Probar el código es fácil: el código se hace fácil de probar para pruebas unitarias.

87. ¿Cuál es el principal beneficio de la encapsulación?

La principal ventaja de la encapsulación en Java es su capacidad para proteger el estado interno de un objeto contra modificaciones o accesos externos. Es una forma de ocultar los detalles de implementación de una clase al acceso externo y solo exponer una interfaz pública que se puede usar para interactuar con la clase. El principal beneficio es proporcionar una forma de controlar y gestionar el estado y el comportamiento de un objeto y también protegerlo de modificaciones y accesos no autorizados al mismo tiempo.

Ejemplo:

Java
// Java Program to demonstrate use of Encapsulation import java.io.*; class Person {  private String Name;  private int age;  public String getName() { return Name; }  public void setName(String Name) { this.Name = Name; }  public int getAge() { return age; }  public void setAge(int age) { this.age = age; } } // Driver class class GFG {  // main function  public static void main(String[] args)  {  Person p = new Person();  p.setName('Rohan');  p.setAge(29);  System.out.println('Name is ' + p.getName());  System.out.println('Age is ' + p.getAge());  } }>

Producción
Name is Rohan Age is 29>

88. ¿Qué quieres decir con agregación?

Agregación en Java

Agregación es un término relacionado con la relación entre dos clases que se describe mejor como una relación tiene-un. Este tipo es la versión más especializada de asociación. Es una asociación unidireccional, significa que es una relación unidireccional. Contiene la referencia a otra clase y se dice que tiene propiedad sobre esa clase.

89. ¿Cuál es la relación 'IS-A' en OOP Java?

'IS-A' es un tipo de relación en OOP Java donde una clase hereda otra clase.

90. Defina herencia.

Cuando un objeto que pertenece a una subclase adquiere todas las propiedades y comportamiento de un objeto padre que es de la superclase, se le conoce como herencia. Una clase dentro de una clase se denomina subclase y esta última se denomina superclase. Se dice que la subclase o clase secundaria es específica, mientras que la superclase o clase principal es genérica. La herencia proporciona reutilización del código.

91. ¿Cuáles son los diferentes tipos de herencia en Java?

La herencia es el método mediante el cual la clase Child puede heredar las características de la clase Super o Parent. En Java, la herencia es de cuatro tipos:

  • Herencia única: Cuando un hijo o una subclase extiende solo una superclase, se sabe que es herencia única. Las propiedades de la clase monoparental se transmiten a la clase secundaria.
  • Herencia multinivel: Cuando un hijo o una subclase extiende cualquier otra subclase, se crea una jerarquía de herencia que se conoce como herencia multinivel. En otras palabras, una subclase se convierte en la clase padre de otra.
  • Herencia jerárquica: Cuando varias subclases derivan de la misma clase principal, se conoce como herencia jerárquica. En otras palabras, una clase que tiene un solo padre tiene muchas subclases.
  • Herencia múltiple: Cuando una clase secundaria hereda de varias clases principales se conoce como herencia múltiple. En Java, solo admite herencia múltiple de interfaces, no de clases.

92. ¿Qué es la herencia múltiple? ¿Es compatible con Java?

Un componente de la noción orientada a objetos conocido como herencia múltiple permite que una clase herede propiedades de muchas clases principales. Cuando hay métodos con la misma firma tanto en superclases como en subclases, surge un problema. La persona que llama al método no puede especificar al compilador qué método de clase se debe llamar o incluso a qué método de clase se le debe dar prioridad.

Nota: Java no admite herencia múltiple

Ejemplo:

Java
// Java Program to show multiple Inheritance import java.io.*; interface Animal {  void eat(); } interface Mammal {  void drink(); } class Dog implements Animal, Mammal {  public void eat() { System.out.println('Eating'); }  public void drink() { System.out.println('Drinking'); }  void bark() { System.out.println('Barking'); } } class GFG {  public static void main(String[] args)  {  Dog d = new Dog();  d.eat();  d.drink();  d.bark();  } }>

Producción
Eating Drinking Barking>

93. ¿En qué se diferencia la herencia en C++ de la de Java?

Herencia en C++

desviación estándar de los pandas

Herencia en Java

C++ permite al usuario heredar múltiples clases.Java no admite herencias múltiples.
Cuando se crea una clase en C++, no hereda de la clase de objeto, sino que existe por sí sola.Siempre se dice que Java tiene una herencia única ya que todas las clases heredan de una forma u otra de la clase de objeto.

94. ¿Existe alguna limitación para el uso de Herencia?

Sí, existe una limitación en el uso de la herencia en Java, ya que debido a la herencia uno puede heredar todo de la superclase y la interfaz, por lo que la subclase está demasiado agrupada y, a veces, propensa a errores cuando se realiza una anulación dinámica o una sobrecarga dinámica en determinadas situaciones.

95. Aunque la herencia es un concepto popular de programación orientada a objetos, es menos ventajoso que la composición. Explicar.

La herencia es un concepto popular de programación orientada a objetos (POO), en el que una clase puede heredar las propiedades y métodos de cualquier otra clase, a la que se hace referencia como padre o superclase. Por otro lado, en Composición, una clase puede contener una instancia de otra clase como variable miembro, a la que a menudo se hace referencia como parte o componente. A continuación se presentan algunas razones por las que la composición es más ventajosa que la herencia:

  • Acoplamiento apretado: Siempre que se realizan cambios en la superclase, estos cambios pueden afectar el comportamiento de todos sus hijos o subclases. Este problema hace que el código sea menos flexible y también crea problemas durante el mantenimiento. Este problema también conduce al estrecho acoplamiento entre las clases.
  • Problema de clase base frágil: Cuando los cambios en la clase base pueden romper la funcionalidad de sus clases derivadas. Este problema puede dificultar la adición de nuevas funciones o la modificación de las existentes. Este problema se conoce como problema de clase de base frágil.
  • Reutilización limitada: La herencia en Java puede conducir a una reutilización limitada del código y también a su duplicación. Como una subclase hereda todas las propiedades y métodos de su superclase, a veces puede terminar con código innecesario que no es necesario. Esto conduce a una base de código menos mantenible.

96. ¿Qué es una asociación?

La asociación es una relación entre dos clases separadas establecida a través de sus Objetos. Representa la relación de Has-A.

97. ¿Qué quieres decir con agregación?

La composición es una forma restringida de agregación en la que dos entidades dependen en gran medida entre sí. Representa parte de la relación.

98. ¿Cuál es la composición de Java?

La composición implica una relación donde el niño no puede existir independientemente del padre. Por ejemplo, el corazón humano, el corazón no existe separado del ser humano.

99. Indique la diferencia entre composición y agregación.

Agregación

Composición

Define que tiene una relación entre los objetos.

Representa la parte de la relación.

Los objetos son independientes unos de otros.

Los objetos dependen unos de otros.

Represéntalo usando el diamante relleno.

Represéntalo usando el diamante vacío.

Los objetos secundarios no tienen vida útil.

Los objetos secundarios tienen una vida útil.

100. ¿Se puede heredar el constructor?

No, no podemos heredar un constructor.


101. ¿Qué es el polimorfismo?

El polimorfismo se define como la capacidad de tomar más de una forma. Es de dos tipos, a saber, polimorfismo en tiempo de compilación o sobrecarga de métodos: una función llamada durante el tiempo de compilación. Por ejemplo, tomemos una clase 'área'. Según la cantidad de parámetros, puede calcular el área de un cuadrado, triángulo o círculo. Polimorfismo en tiempo de ejecución o anulación de métodos: enlaces durante el tiempo de ejecución. El método dentro de una clase anula el método de la clase principal.

102. ¿Qué es el polimorfismo en tiempo de ejecución o el envío de métodos dinámicos?

El envío de métodos dinámicos es un mecanismo de resolución para la anulación de métodos durante el tiempo de ejecución. La anulación de método es aquella en la que el método de una subclase tiene el mismo nombre, parámetros y tipo de retorno que un método de la superclase. Cuando se llama al método anulado a través de una referencia de superclase, Java determina qué versión (superclase o subclase) de ese método se ejecutará en función del tipo de objeto al que se hace referencia en el momento en que se produce la llamada. Por tanto, la decisión se toma en tiempo de ejecución. Esto se conoce como envío de método dinámico.

103. ¿Qué es la anulación de métodos?

La anulación de métodos, también conocida como polimorfismo en tiempo de ejecución, es aquella en la que la clase secundaria contiene el mismo método que la clase principal. Por ejemplo, tenemos un método llamado 'gfg()' en la clase principal. Se vuelve a definir un método gfg() en la subclase. Por lo tanto, cuando se llama a gfg() en la subclase, se ejecuta el método dentro de la identificación de la clase. Aquí, gfg() dentro de la clase anuló el método externo.

104. ¿Qué es la sobrecarga de métodos?

Sobrecarga-en-Java-768

La anulación de métodos es un método para lograr el polimorfismo en tiempo de ejecución en Java. La anulación de métodos es una característica que permite a una clase secundaria proporcionar una implementación específica de un método que ya proporciona una de sus clases principales. Cuando un método en una clase secundaria tiene el mismo nombre, los mismos parámetros o firma y el mismo tipo de retorno (o subtipo) que un método en su clase principal, entonces se dice que el método en la subclase anula el método en la superclase.

105. ¿Podemos anular el método estático?

No, como los métodos estáticos son parte de la clase y no del objeto, no podemos anularlos.

106. ¿Podemos anular el método sobrecargado?

Sí, ya que el método sobrecargado es un método completamente diferente a los ojos del compilador. Anular no es lo mismo en absoluto. La decisión sobre qué método llamar se difiere al tiempo de ejecución.

107. ¿Podemos sobrecargar el método main()?

Sí, en Java podemos sobrecargar el método principal para llamar al método principal con la ayuda de su método de llamada predefinido.

108. ¿Qué son la sobrecarga de métodos y la anulación de métodos?

Sobrecarga de métodos: También se conoce como polimorfismo en tiempo de compilación. En la sobrecarga de métodos, dos o más métodos se comparten en la misma clase con una firma diferente.

Ejemplo:

Java
// Java Program to demonstrate use of Method Overloading import java.io.*; class GFG {  static int multiply(int a, int b) { return a * b; }  static int multiply(int a, int b, int c)  {  return a * b * c;  }  static int multiply(int a, int b, int c, int d)  {  return a * b * c * d;  }  public static void main(String[] args)  {  System.out.println('multiply() with 2 parameters');  System.out.println(multiply(4, 5));  System.out.println('multiply() with 3 parameters');  System.out.println(multiply(2, 3, 4));  System.out.println('multiply() with 4 parameters');  System.out.println(multiply(2, 3, 4, 1));  } }>

Producción
multiply() with 2 parameters 20 multiply() with 3 parameters 24 multiply() with 4 parameters 24>

Anulación de método: La anulación de métodos ocurre cuando una subclase puede proporcionar la implementación de un método que ya está definido en la clase principal o superclase. El tipo de retorno, el nombre y los argumentos deben ser similares a los métodos de la superclase.

Ejemplo:

Java
// Java Program to demonstrate use of Method Overriding import java.io.*; class Vehicle {  void drive()  {  System.out.println('drive() method of base class');  System.out.println('driving the Car.');  } } class Car extends Vehicle {  void drive()  {  System.out.println(  'drive() method of derived class');  System.out.println('Car is driving.');  } } class GFG {  public static void main(String[] args)  {  Car c1 = new Car();  Vehicle v1 = new Vehicle();  c1.drive();  v1.drive();  Vehicle vehicle = new Car();  // drive() method of Vehicle class is overridden by  // Car class drive()  vehicle.drive();  } }>

Producción
drive() method of derived class Car is driving. drive() method of base class driving the Car. drive() method of derived class Car is driving.>

Sobrecarga de métodos

Anulación de métodos

Cuando dos o varios métodos están en la misma clase con diferentes parámetros pero el mismo nombre.

Cuando una subclase proporciona su propia implementación de un método que ya está definido en la clase principal.

La sobrecarga de métodos solo puede ocurrir en la misma clase o entre una subclase o clase principal.

La anulación de métodos solo puede ocurrir en la subclase.

Cuando ocurre un error, se detecta en el momento de la compilación del programa.

Cuando ocurre un error, se detecta en el tiempo de ejecución del programa.

Ejemplo de polimorfismo en tiempo de compilación.

Ejemplo de polimorfismo en tiempo de ejecución.

La sobrecarga de métodos puede requerir o no herencia.

La anulación de métodos siempre necesita herencia.

Ocurre dentro de la clase.

Se realiza en dos clases con relación de herencia.

109. ¿Podemos anular los métodos privados?

No es posible anular los métodos privados en Java. La anulación de métodos es donde se implementa el método de la subclase en lugar del método de la clase principal. Los métodos privados sólo son accesibles dentro de la clase en la que están declarados. Dado que este método no es visible para otras clases y no se puede acceder a él, no se puede anular.

110. ¿Podemos cambiar el alcance del método anulado en la subclase?

En Java, no es posible modificar el alcance del método anulado. El alcance del método de la subclase debe ser igual o más amplio que el alcance del método anulado del método de la superclase. El método anulado en la subclase, por ejemplo, puede tener un alcance público o un alcance más accesible como protected o default si el método anulado en la superclase tiene un alcance público. No puede, sin embargo, tener un ámbito más exclusivo que el privado.

111. ¿Podemos modificar la cláusula throws del método de la superclase mientras la anulamos en la subclase?

Podemos modificar la cláusula throws del método de superclase con algunas limitaciones, podemos cambiar la cláusula throws del método de superclase mientras la anulamos en la subclase. El método anulado de la subclase solo puede especificar excepciones no verificadas si el método de la superclase no declara ninguna excepción. Si el método de superclase declara una excepción, el método de subclase puede declarar la misma excepción, una excepción de subclase o ninguna excepción. Sin embargo, el método de la subclase no puede declarar una excepción principal que sea más amplia que las declaradas en el método de la superclase.

112. ¿Se pueden tener funciones virtuales en Java?

Sí, Java admite funciones virtuales. Las funciones son virtuales por defecto y pueden hacerse no virtuales usando la palabra clave final.

113. ¿Qué es la abstracción?

La abstracción se refiere al acto de representar características esenciales sin incluir detalles de fondo. La información detallada o la implementación está oculta. El ejemplo más común de abstracción es un automóvil, sabemos cómo encender el motor, acelerar y moverse, sin embargo, la forma en que funciona el motor y sus componentes internos son una lógica compleja oculta a los usuarios en general. Esto generalmente se hace para manejar la complejidad.

114. ¿Qué es la clase abstracta?

No se puede crear una instancia de una clase declarada como abstracta, es decir, el objeto no se puede crear. Puede contener o no métodos abstractos, pero si una clase tiene al menos un método abstracto, debe declararse abstracta.

Ejemplo de una clase abstracta con método abstracto:

Java
// Java Program to implement // abstract method import java.io.*; // Abstract class abstract class Fruits {  abstract void run(); } // Driver Class class Apple extends Fruits {  void run()  {  System.out.println('Abstract class example');  }  // main method  public static void main(String args[])  {  Fruits obj = new Apple();  obj.run();  } }>

115. ¿Cuándo se utilizan métodos abstractos?

Un método abstracto se usa cuando queremos usar un método pero queremos que las clases secundarias decidan la implementación, en ese caso usamos métodos abstractos con las clases principales.

116. ¿Cómo se puede evitar la serialización en la clase secundaria si la clase base está implementando la interfaz Serializable?

Serialización en la clase secundaria, si la clase base está implementando la interfaz Serializable, podemos evitarla definiendo el método writeObject() y lanzando NotSerializableException().

117. ¿Qué es Collection Framework en Java?

Las colecciones son unidades de objetos en Java. El marco de colección es un conjunto de interfaces y clases en Java que se utilizan para representar y manipular colecciones de objetos de diversas formas. El marco de la colección contiene clases (ArrayList, Vector, LinkedList, PriorityQueue, TreeSet) y múltiples interfaces (Set, List, Queue, Deque) donde cada interfaz se utiliza para almacenar un tipo específico de datos.

118. Explique varias interfaces utilizadas en el marco de la Colección.

Implementos del marco de colección

  1. Interfaz de colección
  2. Interfaz de lista
  3. Establecer interfaz
  4. Interfaz de cola
  5. y la interfaz
  6. Interfaz de mapa

Interfaz de colección: Collection es la interfaz principal disponible que se puede importar usando java.util.Collection.

Sintaxis:

public interface Collection extends iterable>

119. ¿Cómo se puede sincronizar un ArrayList en Java?

Una ArrayList se puede sincronizar utilizando dos métodos que se mencionan a continuación:

  1. Usando Colecciones.synchronizedList()
  2. Usando CopyOnWriteArrayList

Usando Collections.synchronizedList():

public static List synchronizedList(List list)>

Usando CopyOnWriteArrayList:

  1. Crea una lista vacía.
  2. Implementa la interfaz Lista.
  3. Es una variante segura para subprocesos de ArrayList.
  4. T representa genérico

120. ¿Por qué necesitamos un ArrayList sincronizado cuando tenemos vectores (que están sincronizados) en Java?

ArrayList es necesario incluso cuando tenemos vectores por ciertas razones:

  1. ArrayList es más rápido que Vectors.
  2. ArrayList admite subprocesos múltiples, mientras que Vectors solo admite el uso de un solo subproceso.
  3. ArrayList es más seguro de usar, ya que Vectors admite subprocesos únicos y las operaciones individuales son menos seguras y tardan más en sincronizarse.
  4. Los vectores se consideran obsoletos en Java debido a su naturaleza sincronizada.

121. ¿Por qué no podemos crear una matriz genérica?

No se pueden crear matrices genéricas porque formación lleva escriba información de sus elementos en tiempo de ejecución, por lo que durante el tiempo de ejecución arroja 'ArrayStoreException' si el tipo de los elementos no es similar. Dado que Type Erasure borra la información de tipos genéricos en tiempo de compilación, la verificación del almacén de matrices se habría pasado donde debería haber fallado.

122. Las ubicaciones de memoria contiguas generalmente se usan para almacenar valores reales en una matriz pero no en ArrayList. Explicar.

Los elementos de una matriz se almacenan en ubicaciones de memoria contiguas, lo que significa que cada elemento se almacena en un bloque separado basado en él ubicado dentro de la matriz. Dado que los elementos de la matriz se almacenan en ubicaciones contiguas, puede ser relativamente fácil acceder a cualquier elemento por su índice, ya que la dirección del elemento se puede calcular en función de la ubicación del elemento. Pero Java implementa ArrayLists como matrices dinámicas, lo que significa que el tamaño puede cambiar a medida que se eliminan o agregan elementos. Los elementos ArrayList no se almacenan en ubicaciones de memoria contiguas para adaptarse a esta naturaleza dinámica. En su lugar, ArrayList utiliza un método conocido como matriz expandible en el que la matriz subyacente se expande a un tamaño mayor según sea necesario y luego los elementos se copian en la nueva ubicación. A diferencia de una ArrayList, que tiene un tamaño dinámico y no almacena sus elementos en ubicaciones de memoria contiguas, una matriz tiene un tamaño fijo y sus elementos se almacenan allí.

123. Explique el método para convertir ArrayList en Array y Array en ArrayList.

Conversión de lista a ArrayList

Existen varios métodos para convertir List en ArrayList

Convertir-matriz-en-ArrayList-768

Los programadores pueden convertir un Array en ArrayList usando el método asList() de la clase Arrays. Es un método estático de la clase Arrays que acepta el objeto List.

Sintaxis:

Arrays.asList(item)>

Ejemplo:

Java
// Java program to demonstrate conversion of // Array to ArrayList of fixed-size. import java.util.*; // Driver Class class GFG {  // Main Function  public static void main(String[] args)  {  String[] temp = { 'Abc', 'Def', 'Ghi', 'Jkl' };  // Conversion of array to ArrayList  // using Arrays.asList  List conv = Arrays.asList(temp);  System.out.println(conv);  } }>

Producción
[Abc, Def, Ghi, Jkl]>

Conversión de ArrayList a Array

Convertir-ArrayList-a-Array-768

Los programadores de Java pueden convertir ArrayList a

Sintaxis:

List_object.toArray(new String[List_object.size()])>

Ejemplo:

Java
// Java program to demonstrate working of // Objectp[] toArray() import java.io.*; import java.util.List; import java.util.ArrayList; // Driver Class class GFG {  // Main Function  public static void main(String[] args)  {  // List declared  List<Integer>  arr = new ArrayList<Integer>();  arr.add(1);  arr.add(2);  arr.add(3);  arr.add(2);  arr.add(1);  // Conversion  Object[] objects = arr.toArray();  // Printing array of objects  for (Object obj : objects)  System.out.print(obj + ' ');  } }>

Producción
1 2 3 2 1>

124. ¿Cómo crece dinámicamente el tamaño de ArrayList? Y también indicar cómo se implementa internamente.

Debido a la naturaleza basada en matrices de ArrayLists, su tamaño crece dinámicamente, lo que garantiza que siempre haya suficiente espacio para los elementos. Cuando se crea por primera vez un elemento ArrayList, la capacidad predeterminada es de entre 10 y 16 elementos, lo que básicamente depende de la versión de Java. Los elementos ArrayList se copian de la matriz original a la nueva matriz cuando la capacidad de la matriz original está llena. A medida que el tamaño de ArrayList aumenta dinámicamente, la clase crea una nueva matriz de tamaños más grandes y copia todos los elementos de la matriz anterior a la nueva matriz. Ahora, la referencia de la nueva matriz se usa internamente. Este proceso de hacer crecer dinámicamente una matriz se conoce como cambio de tamaño.

125. ¿Qué es un vector en Java?

Los vectores en Java son similares y pueden almacenar múltiples elementos dentro de ellos. Los vectores siguen ciertas reglas que se mencionan a continuación:

  1. Los vectores se pueden importar usando Java.util.Vector.
  2. El vector se implementa utilizando una matriz dinámica a medida que el tamaño del vector aumenta y disminuye según los elementos insertados en él.
  3. Elementos del Vector utilizando números índice.
  4. Los vectores están sincronizados por naturaleza, lo que significa que solo usan un único subproceso (solo se realiza un proceso en un momento particular).
  5. El vector contiene muchos métodos que no forman parte del marco de colecciones.

Sintaxis:

Vector gfg = new Vector(size, increment);>

126. ¿Cómo hacer que Java ArrayList sea de solo lectura?

Una ArrayList solo se puede preparar usando el método proporcionado por Collections usando el método Collections.unmodifiableList().

Sintaxis:

array_readonly = Collections.unmodifiableList(ArrayList);>

Ejemplo:

Java
// Java program to demonstrate // unmodifiableList() method import java.util.*; public class Main {  public static void main(String[] argv) throws Exception  {  try {  // creating object of ArrayList  <Character> ArrayList<Character>  temp  = new ArrayList<Character>();  // populate the list  temp.add('X');  temp.add('Y');  temp.add('Z');  // printing the list  System.out.println('Initial list: ' + temp);  // getting readonly list  // using unmodifiableList() method  List<Character>  new_array  = Collections.unmodifiableList(temp);  // printing the list  System.out.println('ReadOnly ArrayList: '  + new_array);  // Adding element to new Collection  System.out.println('
If add element in '  + ' the ReadOnly ArrayList');  new_array.add('A');  }  catch (UnsupportedOperationException e) {  System.out.println('Exception is thrown : '  + e);  }  } }>

Producción
Initial list: [X, Y, Z] ReadOnly ArrayList: [X, Y, Z] If add element in the ReadOnly ArrayList Exception is thrown : java.lang.UnsupportedOperationException>

127. ¿Qué es una cola prioritaria en Java?

Cola-prioritaria-768

Una cola de prioridad es un tipo de datos abstracto similar a una cola normal o una estructura de datos de pila. Los elementos almacenados en elementos dependen de la prioridad definida de menor a mayor. PriorityQueue se basa en el montón de prioridades.

Sintaxis:

Java
// Java program to demonstrate the // working of PriorityQueue import java.util.*; class PriorityQueueDemo {  // Main Method  public static void main(String args[])  {  // Creating empty priority queue  PriorityQueue<Integer>  var1  = new PriorityQueue<Integer>();  // Adding items to the pQueue using add()  var1.add(10);  var1.add(20);  var1.add(15);  // Printing the top element of PriorityQueue  System.out.println(var1.peek());  } }>

Producción
10>

128. Explique la clase LinkedList.

La clase LinkedList es Java que utiliza una lista doblemente enlazada para almacenar elementos. Hereda la clase AbstractList e implementa las interfaces List y Deque. Las propiedades de la clase LinkedList se mencionan a continuación:

  1. Las clases LinkedList no están sincronizadas.
  2. Mantiene el orden de inserción.
  3. Se puede utilizar como lista, pila o cola.

Sintaxis:

LinkedList list_name=new LinkedList();>

129. ¿Qué es la clase Stack en Java y cuáles son los diversos métodos que proporciona?

Una clase Stack en Java es una estructura de datos LIFO que implementa la estructura de datos Last In First Out. Se deriva de una clase Vector pero tiene funciones específicas para pilas. La clase Stack en Java proporciona los siguientes métodos:

  • ojeada(): devuelve el elemento superior de la pila sin eliminarlo
  • vacío(): devuelve verdadero si la pila está vacía y falso en caso contrario
  • empujar(): empuja un artículo a la parte superior de la pila
  • estallido(): elimina y devuelve el elemento superior de la pila
  • buscar(): devuelve la posición basada en 1 del objeto desde la parte superior de la pila. Si el objeto no está en la pila, devuelve -1

130. ¿Qué se establece en el marco de colecciones de Java y enumera sus diversas implementaciones?

Los conjuntos son colecciones que no almacenan elementos duplicados. No mantienen ningún orden de los elementos. El marco de colecciones de Java proporciona varias implementaciones de la interfaz Set, que incluyen:

  • Conjunto de hash: HashSet en Java almacena los elementos en una tabla has que proporciona búsquedas e inserción más rápidas. HashSet no está ordenado.
  • LinkedHashSet: LinkedHashSet es una implementación de HashSet que mantiene el orden de inserción de los elementos.
  • Conjunto de árboles: TreeSet almacena los elementos en un orden determinado por el orden natural de los elementos o por un comparador personalizado proporcionado en el momento de la creación.

131. ¿Qué es la clase HashSet en Java y cómo almacena elementos?

La clase HashSet implementa la interfaz Set en Java Collections Framework y es miembro de la clase HashSet. A diferencia de los valores duplicados, almacena una colección de elementos distintos. En esta implementación, cada elemento se asigna a un índice en una matriz mediante una función hash, y el índice se utiliza para acceder rápidamente al elemento. Produce un índice para el elemento en la matriz donde se almacena en función del elemento de entrada. Suponiendo que la función hash distribuya los elementos entre los depósitos de manera adecuada, la clase HashSet proporciona un rendimiento en tiempo constante para operaciones básicas (agregar, eliminar, contener y dimensionar).

132. ¿Qué es LinkedHashSet en Java Collections Framework?

LinkedHashSet es una versión ordenada de Hashset mantenida por una Lista doblemente vinculada en todos los elementos. Es muy útil cuando se necesita un orden de iteración. Durante la iteración en LinkedHashSet, los elementos se devuelven en el mismo orden en que se insertan.

Sintaxis:

LinkedHashSet hs = new LinkedHashSet();>

Ejemplo:

Java
// Java Program to implement // LinkedHashSet import java.io.*; import java.util.*; // Driver Class class GFG {  // Main Function  public static void main(String[] args)  {  // LinkedHashSet declared  LinkedHashSet<Integer>  hs = new LinkedHashSet<Integer>();  // Add elements in HashSet  hs.add(1);  hs.add(2);  hs.add(5);  hs.add(3);  // Print values  System.out.println('Values:' + hs);  } }>

Producción
Values:[1, 2, 5, 3]>

133. ¿Qué es una interfaz de mapa en Java?

Interfaz-de-mapa-en-Java-660

La interfaz del mapa está presente en la colección Java y se puede utilizar con el paquete Java.util. Se utiliza una interfaz de mapa para asignar valores en forma de clave-valor. El mapa contiene todas las claves únicas. Además, proporciona métodos asociados a él como contieneKey(), contiene valor (), etc.

Hay varios tipos de mapas en la interfaz de mapas como se menciona a continuación:

  1. Mapa ordenado
  2. ÁrbolMapa
  3. HashMap
  4. LinkedHashMap

134. Explicar Treemap en Java

TreeMap es un tipo de mapa que almacena datos en forma de par clave-valor. Se implementa utilizando el árbol rojo-negro. Las características de TreeMap son:

  1. Contiene sólo elementos únicos.
  2. No puede tener una clave NULL
  3. Puede tener múltiples valores NULL.
  4. No está sincronizado.
  5. Mantiene un orden ascendente.

135. ¿Qué es EnumSet?

EnumSet es una implementación especializada de la interfaz Set para usar con tipos de enumeración. Algunas características de EnumSet son:

  1. No está sincronizado.
  2. Más rápido que HashSet.
  3. Todos los elementos de un EnumSet deben provenir de un único tipo de enumeración.
  4. No permite objetos nulos y lanza NullPointerException para excepciones.
  5. Utiliza un iterador a prueba de fallos.

Sintaxis:

public abstract class EnumSet>

Parámetro: E especifica los elementos.

136. ¿Qué es BlockingQueue?

Cola de bloqueo-768

Una cola de bloqueo es una cola que admite operaciones que esperan a que la cola no esté vacía mientras se recupera y elimina el elemento, y esperan a que haya espacio disponible en la cola mientras se agrega el elemento.

Sintaxis:

public interface BlockingQueue extends Queue>

Parámetros: E es el tipo de elementos almacenados en la Colección.

137. ¿Qué es ConcurrentHashMap en Java y lo implementas?

ConcurrentHashMap se implementa utilizando Hashtable.

Sintaxis:

public class ConcurrentHashMap  extends AbstractMap  implements ConcurrentMap, Serializable>

Parámetros : K es el tipo de objeto clave y V es el tipo de objeto de valor

138. ¿Puedes usar cualquier clase como clave de mapa?

Sí, podemos usar cualquier clase como clave de mapa si sigue ciertas reglas predefinidas que se mencionan a continuación:

  1. La clase que anula el método equals() también debe anular el método hashCode()
  2. La clase concurrentHashMap es segura para subprocesos.
  3. El nivel de simultaneidad predeterminado de ConcurrentHashMap es 16.
  4. Insertar objetos nulos en ConcurrentHashMap no es posible como clave o valor.

139. ¿Qué es un iterador?

Iterador-en-Java-768

La interfaz Iterator proporciona métodos para iterar sobre cualquier colección en Java. Iterator es el reemplazo de Enumeration en Java Collections Framework. Puede obtener una instancia de iterador de una Colección utilizando el método _iterator()_. También permite a la persona que llama eliminar elementos de la colección subyacente durante la iteración.

140. ¿Qué es una enumeración?

La enumeración es un tipo de datos definido por el usuario. Se utiliza principalmente para asignar nombres a constantes integrales; los nombres hacen que un programa sea fácil de leer y mantener. El objetivo principal de la enumeración es definir tipos de datos definidos por el usuario.

Ejemplo:

// A simple enum example where enum is declared  // outside any class (Note enum keyword instead of  // class keyword)  enum Color  {   RED, GREEN, BLUE;  }>

141. ¿Cuál es la diferencia entre Colección y Colecciones?

Recopilación

Colecciones

La colección es una interfaz.

Colecciones es una clase.

Proporciona la funcionalidad estándar de la estructura de datos.

Es para ordenar y sincronizar los elementos de la colección.

Proporciona los métodos que se pueden utilizar para la estructura de datos.

Proporciona métodos estáticos que se pueden utilizar para diversas operaciones.

142. Diferenciar entre Array y ArrayList en Java.

Formación

Lista de arreglo

Unidimensional o multidimensional

unidimensional

Para y para cada utilizado para la iteración.

Aquí el iterador se usa para atravesar riverArrayList

La palabra clave length devuelve el tamaño de la matriz.

El método size() se utiliza para calcular el tamaño de ArrayList.

La matriz tiene un tamaño fijo.

El tamaño de ArrayList es dinámico y se puede aumentar o disminuir cuando sea necesario.

Es más rápido como arriba lo vemos de tamaño fijo.

Es relativamente más lento debido a su naturaleza dinámica.

Los tipos de datos primitivos se pueden almacenar directamente en objetos improbables.

Los tipos de datos primitivos no se agregan directamente a matrices improbables, se agregan indirectamente con la ayuda de autoboxing y unboxing.

No se pueden agregar aquí, por lo tanto, el tipo no es seguro.

Se pueden agregar aquí, lo que hace que ArrayList sea seguro para tipos.

El operador de asignación solo sirve para el propósito

Aquí se utiliza un método especial conocido como método add()

143. ¿Cuál es la diferencia entre matriz y colección en Java?

Formación

Colecciones

La matriz en Java tiene un tamaño fijo.

Las colecciones en Java tienen tamaños dinámicos.

En una matriz, los elementos se almacenan en ubicaciones de memoria contiguas.

En las colecciones, los elementos no se almacenan necesariamente en ubicaciones de memoria contiguas.

Los objetos y tipos de datos primitivos se pueden almacenar en una matriz.

Sólo podemos almacenar objetos en colecciones.

Se requiere manipulación manual para cambiar el tamaño de la matriz.

El cambio de tamaño en las colecciones se realiza automáticamente.

La matriz tiene métodos básicos de manipulación.

Las colecciones tienen métodos avanzados de manipulación e iteración.

La matriz está disponible desde el comienzo de Java.

Las colecciones se introdujeron en Java 1.2.

144. Diferencia entre ArrayList y LinkedList.

Lista de arreglo

Lista enlazada

ArrayList se implementa como una matriz expandible.

LinkedList se implementa como una lista doblemente enlazada.

En ArrayList, los elementos se almacenan en ubicaciones de memoria contiguas

Los elementos LinkedList se almacenan en ubicaciones de memoria no contiguas, ya que cada elemento tiene una referencia a los elementos anteriores y siguientes.

Las ArrayLists son más rápidas para el acceso aleatorio.

Las LinkedLists son más rápidas para las operaciones de inserción y eliminación

Las ArrayLists son más eficientes en cuanto a memoria.

LinkedList es menos eficiente en memoria

ArrayLists Utiliza más memoria debido a que mantiene el tamaño de la matriz.

LinkedList Utiliza menos memoria ya que solo tiene referencias a elementos

descargar videos de youtube en vlc

La operación de búsqueda es más rápida en ArrayList.

La operación de búsqueda es más lenta en LinkedList

145. Diferenciar entre ArrayList y Vector en Java.

Lista de arreglo

Vector

ArrayLists se implementan como una matriz expandible.

Vector se implementa como una matriz cultivable.

ArrayList no está sincronizado.

El vector está sincronizado.

Las ArrayLists son más rápidas para operaciones no concurrentes.

Vector es más lento para operaciones no simultáneas debido a la sobrecarga adicional de sincronización.

ArrayLists se introdujeron en Java 1.2.

Vector se introdujo en JDK 1.0.

Recomendado para su uso en un entorno de un solo subproceso.

Se recomienda el uso de vectores en un entorno multiproceso.

La capacidad inicial predeterminada de ArrayLists es 10.

En Vectors, la capacidad inicial predeterminada es 10 pero el incremento predeterminado es el doble del tamaño.

El rendimiento de ArrayList es alto.

El rendimiento del vector es bajo.

146. ¿Cuál es la diferencia entre Iterator y ListIterator?

Iterador

ListaIterador

Puede atravesar elementos presentes en la Colección solo en dirección hacia adelante.

Puede atravesar elementos presentes en la Colección tanto hacia adelante como hacia atrás.

Se utiliza para recorrer Mapa, Lista y Conjunto.

Solo se puede atravesar List y no los otros dos.

Los índices no se pueden obtener usando Iterator

Tiene métodos como nextIndex() y anteriorIndex() para obtener índices de elementos en cualquier momento mientras recorre la Lista.

No se pueden modificar ni reemplazar elementos presentes en la Colección

Puede modificar o reemplazar elementos con la ayuda de set(E e)

No se pueden agregar elementos y también arroja ConcurrentModificationException.

Puede agregar elementos fácilmente a una colección en cualquier momento.

Ciertos métodos de Iterator son next(), remove() y hasNext().

Ciertos métodos de ListIterator son next(), anterior(), hasNext(), hasPrevious(), add(E e).

147. Diferenciar entre HashMap y HashTable.

HashMap

Tabla de picadillo

HashMap no está sincronizado

HashTable está sincronizado

Una clave puede ser un valor NULL

Valores NULL no permitidos

El iterador se utiliza para atravesar HashMap.

Se pueden utilizar tanto Iterator como Enumertar.

HashMap es más rápido.

HashTable es más lento en comparación con HashMap.

148. ¿Cuál es la diferencia entre iterador y enumeración?

Iterador

Enumeración

El iterador puede atravesar elementos heredados y no heredados.

La enumeración solo puede atravesar elementos heredados.

El iterador no falla.

La enumeración no es rápida.

Los iteradores son más lentos.

La enumeración es más rápida.

El iterador puede realizar una operación de eliminación mientras atraviesa la colección.

La enumeración solo puede realizar operaciones transversales en la colección.

149. ¿Cuál es la diferencia entre comparable y comparador?

Comparable

Comparador

La interfaz está presente en el paquete java.lang.

La interfaz está presente en el paquete java.util.

Proporciona el método compareTo() para ordenar elementos.

Proporciona el método compare() para ordenar elementos.

Proporciona secuencias de clasificación únicas.

Proporciona múltiples secuencias de clasificación.

La lógica de clasificación debe estar en la misma clase cuyo objeto vas a ordenar.

La lógica de clasificación debe estar en una clase separada para escribir una clasificación diferente basada en diferentes atributos de los objetos.

El método clasifica los datos según un orden de clasificación fijo.

El método clasifica los datos según el orden de clasificación personalizado.

Afecta a la clase original.

No afecta la clase original.

Implementado con frecuencia en la API mediante Calendario, clases Wrapper, Fecha y Cadena.

Se implementa para ordenar instancias de clases de terceros.

150. ¿Cuál es la diferencia entre Conjunto y Mapa?

Colocar

Mapa

La interfaz Set se implementa utilizando el paquete java.util.

El mapa se implementa utilizando el paquete java.util.

Puede ampliar la interfaz de colección.

No amplía la interfaz de colección.

No permite valores duplicados.

Permite valores duplicados.

El conjunto sólo puede ordenar un valor nulo.

El mapa puede ordenar varios valores nulos.

Preguntas de la entrevista intermedia de Java

151. Explique el iterador FailFast y el iterador FailSafe junto con ejemplos para cada uno.

Un iterador FailFast es un iterador que lanza un ConcurrentModificationException si detecta que la colección subyacente se ha modificado mientras se utiliza el iterador. Este es el comportamiento predeterminado de los iteradores en Java Collections Framework. Por ejemplo, el iterador de un HashMap es FailFast.

Ejemplo:

Java
// Java Program to demonstrate FailFast iterator import java.io.*; import java.util.HashMap; import java.util.Iterator; import java.util.Map; class GFG {  public static void main(String[] args)  {  HashMap<Integer, String> map = new HashMap<>();  map.put(1, 'one');  map.put(2, 'two');  Iterator<Map.Entry<Integer, String> > iterator  = map.entrySet().iterator();  while (iterator.hasNext()) {  Map.Entry<Integer, String> entry  = iterator.next();  // this will throw a  // ConcurrentModificationException  if (entry.getKey() == 1) {  map.remove(1);  }  }  } }>

Producción:

Exception in thread 'main' java.util.ConcurrentModificationException>

Un iterador FailSafe no arroja un ConcurrentModificationException si la colección subyacente se modifica mientras se utiliza el iterador. Alternativamente, crea una instantánea de la colección en el momento en que se crea el iterador e itera sobre la instantánea. Por ejemplo, el iterador de ConcurrentHashMap es FailSafe.

Ejemplo:

Java
// Java Program to demonstrate FailSafe import java.io.*; import java.util.Iterator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; class GFG {  public static void main(String[] args)  {  ConcurrentHashMap<Integer, String> map  = new ConcurrentHashMap<>();  map.put(1, 'one');  map.put(2, 'two');  Iterator<Map.Entry<Integer, String> > iterator  = map.entrySet().iterator();  while (iterator.hasNext()) {  Map.Entry<Integer, String> entry = iterator.next();  // this will not throw an exception  if (entry.getKey() == 1) {  map.remove(1);  }  }  } }>

152. ¿Qué es el manejo de excepciones?

Un Excepción es un evento que interrumpe el flujo normal del programa y requiere un procesamiento especial. Durante la ejecución de un programa, los errores y las ocurrencias no planificadas se pueden solucionar utilizando el mecanismo de manejo de excepciones de Java. A continuación se detallan algunas razones por las que ocurren excepciones en Java:

  • Fallo del dispositivo
  • Pérdida de conexión de red
  • Errores de código
  • Abrir un archivo no disponible
  • Entrada de usuario no válida
  • Limitaciones físicas (sin memoria en el disco)

153. ¿Cuántos tipos de excepciones pueden ocurrir en un programa Java?

Tipos-de-excepción-en-Java-660

Generalmente existen dos tipos de excepciones en Java:

  • Excepciones integradas: Las excepciones integradas en Java las proporcionan las bibliotecas de Java. Estas excepciones se pueden dividir en dos subcategorías, es decir, excepciones marcadas y no marcadas. A continuación se muestran algunas de las excepciones integradas en Java:
    • ArrayIndexOutOfBoundsExceptions
    • Excepción de clase no encontrada
    • Excepción de archivo no encontrado
    • IOExcepción
    • Excepción de puntero nulo
    • Excepción aritmética
    • Excepción interrumpida
    • Excepción en tiempo de ejecución
  • Excepciones definidas por el usuario: Las excepciones definidas por el usuario las definen los propios programadores para manejar algunas situaciones o errores específicos que no están cubiertos por las excepciones integradas. Para definir excepciones definidas por el usuario, se debe definir una nueva clase que extienda la clase de excepción apropiada. Las excepciones definidas por el usuario en Java se utilizan cuando las excepciones integradas están en Java.

154. Diferencia entre un Error y una Excepción.

Errores

Excepciones

No es posible recuperarse de errores.

Recupérese de las excepciones utilizando un bloque try-catch o devolviendo excepciones a la persona que llama.

Todos los errores son tipos no verificados en Java.

Incluye tanto los tipos marcados como los no marcados que ocurren.

Los errores son causados ​​principalmente por el entorno en el que se ejecuta el programa.

El programa es el principal responsable de provocar excepciones.

Los errores pueden ocurrir tanto en tiempo de compilación como en tiempo de ejecución. Tiempo de compilación: error de sintaxis, tiempo de ejecución: error lógico.

Todas las excepciones ocurren en tiempo de ejecución, pero el compilador conoce las excepciones marcadas, mientras que las no marcadas no.

Están definidos en el paquete java.lang.Error.

Están definidos en el paquete java.lang.Exception

Ejemplos : java.lang.StackOverflowError, java.lang.OutOfMemoryError

Ejemplos : Excepciones marcadas: SQLException, IOException Excepciones no marcadas: ArrayIndexOutOfBoundException, NullPointerException, ArithmeticException.

155. Explique la jerarquía de las clases de excepción de Java.

Manejo de excepciones-768

Todos los tipos de excepciones y errores en Java son subclases de la clase throwable, que es la clase base de la jerarquía. Luego, esta clase se utiliza para condiciones excepcionales que los programas de usuario deberían detectar. NullPointerException es un ejemplo de tal excepción. El sistema de tiempo de ejecución de Java utiliza otra rama, error, para indicar errores relacionados con el JRE. StackOverflowError es un ejemplo de uno de esos errores.

156. Explique las excepciones en tiempo de ejecución.

Las excepciones en tiempo de ejecución son excepciones que ocurren durante la ejecución de un código, a diferencia de las excepciones en tiempo de compilación que ocurren durante la compilación. Las excepciones de tiempo de ejecución son excepciones no comprobadas, ya que la JVM no las tiene en cuenta.

Ejemplos de excepciones de tiempo de ejecución en Java incluyen:

  • NullPointerException: esto ocurre cuando una aplicación intenta utilizar una referencia de objeto nulo.
  • ArrayIndexOutOfBoundsException: esto ocurre cuando una aplicación intenta acceder a un índice de matriz que está fuera de los límites.
  • ArithmeticException: esto ocurre cuando una aplicación intenta dividir por cero.
  • IllegalArgumentException: esto ocurre cuando a un método se le pasa un argumento ilegal o inapropiado.

A diferencia de las excepciones marcadas, las excepciones en tiempo de ejecución no requieren una declaración en la cláusula throws ni una captura en un bloque try-catch. Sin embargo, se recomienda manejar las excepciones del tiempo de ejecución para proporcionar mensajes de error significativos y evitar una falla del sistema. Debido a que las excepciones en tiempo de ejecución brindan información más específica sobre el problema que las excepciones marcadas, permiten a los desarrolladores detectar y corregir errores de programación de manera más fácil y rápida.

157. ¿Qué es NullPointerException?

Es un tipo de excepción en tiempo de ejecución que se produce cuando el programa intenta utilizar una referencia de objeto que tiene un valor nulo. El uso principal de NullPointerException es indicar que no se asigna ningún valor a una variable de referencia; también se usa para implementar estructuras de datos como listas enlazadas y árboles.

158. ¿Cuándo se lanza ArrayStoreException?

ArrayStoreException se genera cuando se intenta almacenar el tipo incorrecto de objeto en una matriz de objetos.

Ejemplo:

Java
// Java Program to implement // ArrayStoreException public class GFG {  public static void main(String args[])  {  // Since Double class extends Number class  // only Double type numbers  // can be stored in this array  Number[] a = new Double[2];  // Trying to store an integer value  // in this Double type array  a[0] = new Integer(4);  } }>

Ejemplo:

Exception in thread 'main' java.lang.ArrayStoreException: java.lang.Integer  at GFG.main(GFG.java:6)>

159. ¿Cuál es la diferencia entre excepción marcada y excepción no marcada?

Excepción marcada:

Las excepciones marcadas son las excepciones que se verifican durante el tiempo de compilación de un programa. En un programa, si algún código dentro de un método arroja una excepción marcada, entonces el método debe manejar la excepción o especificar la excepción usando la palabra clave throws.

Las excepciones marcadas son de dos tipos:

  • Excepciones completamente verificadas: todas sus clases secundarias también se verifican, como IOException e InterruptedException.
  • Excepciones parcialmente marcadas: algunas de sus clases secundarias no están marcadas, como una excepción.

Excepción no marcada:

No marcadas son las excepciones que no se verifican en el momento de la compilación de un programa. Las excepciones en las clases Error y RuntimeException son excepciones no verificadas, todo lo demás en throwable está verificado.

160. ¿Cuál es la clase base para Error y Excepción?

Manejo de excepciones-768

Un error es una operación ilegal realizada por el usuario que provoca una anomalía en el programa. Las excepciones son los eventos o condiciones inesperados que surgen mientras se ejecuta el programa; la excepción interrumpe el flujo normal de las instrucciones del programa.

Tanto los errores como las excepciones tienen una clase principal común que es la clase java.lang.Throwable.

161. ¿Es necesario que a cada bloque try le siga un bloque catch?

No, no es necesario utilizar el bloque catch después del bloque try en Java, ya que podemos crear otra combinación con el bloque finalmente. Finalmente está el bloque que se ejecuta independientemente de que se lance o no la excepción.

162. ¿Qué es la propagación de excepciones?

La propagación de excepciones es un proceso en el que la excepción se elimina desde el principio hasta el final de la pila. Si no se detecta una vez, la excepción vuelve a caer al método anterior, y así sucesivamente hasta que se detecta o hasta que llega al final de la pila de llamadas.

163. ¿Qué pasará si pones System.exit(0) en el bloque try o catch? ¿Se ejecutará finalmente el bloqueo?

System.exit(int) tiene la capacidad de lanzar SecurityException. Entonces, si en caso de seguridad, se lanza la excepción, finalmente se ejecutará el bloqueo; de lo contrario, JVM se cerrará al llamar a System. exit(0) por lo que el bloque finalmente no se ejecutará.

164. ¿Qué entiendes por Clonación de Objetos y cómo se logra en Java?

Es el proceso de crear una copia exacta de cualquier objeto. Para admitir esto, una clase Java debe implementar la interfaz Cloneable del paquete java.lang y anular el método clone() proporcionado por la clase Object cuya sintaxis es:

El objeto protegido clone() lanza CloneNotSupportedException{ return (Object)super.clone();}En caso de que la interfaz Cloneable no esté implementada y solo se anule el método, da como resultado CloneNotSupportedException en Java.

165. ¿Cómo afectan las excepciones al programa si no las maneja?

Las excepciones son responsables de finalizar abruptamente la ejecución del programa mientras se ejecuta y el código escrito después de que ocurre la excepción no se ejecuta.

166. ¿Para qué sirve la palabra clave final?

La palabra clave final se utiliza para hacer que las funciones no sean virtuales. De forma predeterminada, todas las funciones son virtuales, por lo que para hacerlas no virtuales usamos la palabra clave final.

167. ¿Qué propósito cumplen las palabras clave final, finalmente y finalizar?

i). final:

final es una palabra clave que se usa con la variable, método o clase para que no se puedan anular.

Ejemplo:

Java
// Java Program to use final // keyword import java.io.*; // Driver Class class GFG {  // Main function  public static void main(String[] args)  {  final int x = 100;  x = 50;  } }>

Producción:

./GFG.java:6: error: cannot assign a value to final variable x  x=50;  ^ 1 error>

ii). finalmente

Finalmente es un bloque de código usado con try-catch en el manejo de excepciones. El código escrito en el bloque finalmente se ejecuta independientemente de si se lanza o no una excepción.

Ejemplo:

Java
// Java Program to implement finally import java.io.*; // Driver class class GFG {  // Main function  public static void main(String[] args)  {  int x = 10;  // try block  try {  System.out.println('Try block');  }  // finally block  finally {  System.out.println(  'Always runs even without exceptions');  }  } }>

Producción
Try block Always runs even without exceptions>

iii). finalizar

Es un método que se llama justo antes de eliminar/destruir los objetos que son elegibles para la recolección de basura para realizar la actividad de limpieza.

Ejemplo:

Java
/*package whatever // do not write package name here */ import java.io.*; class GFG {  public static void main(String[] args)  {  System.out.println('Main function running');  System.gc();  }  // Here overriding finalize method  public void finalize()  {  System.out.println('finalize method overridden');  } }>

Producción
Main function running>

168. ¿Cuál es la diferencia entre this() y super() en Java?

este( )

súper( )

Representa la instancia actual de la clase.

Representa la instancia actual de la clase padre.

Llama al constructor predeterminado de la misma clase.

Llama al constructor predeterminado de la clase base.

Accede a los métodos de la misma clase.

Acceda a los métodos de la clase padre.

Puntos instancia de clase actual.

Señala la instancia de superclase.

169. ¿Qué es la multitarea?

La multitarea en Java se refiere a la capacidad de un programa de realizar varias tareas a la vez. Los subprocesos, que son operaciones rápidas contenidas dentro de un único programa, pueden hacer esto. Ejecutar numerosas cosas a la vez se conoce como multitarea.

Ejemplo:

Java
// Java program for multitasking import java.io.*; public class MyThread extends Thread {  public void run()  {  // Code to be executed in this thread  for (int i = 0; i < 10; i++) {  System.out.println(  'Thread ' + Thread.currentThread().getId()  + ': ' + i);  }  } } public class GFG {  public static void main(String[] args)  {  MyThread thread1 = new MyThread();  MyThread thread2 = new MyThread();  // Start the threads  thread1.start();  thread2.start();  } }>

170. ¿Qué quieres decir con un programa multiproceso?

Los programas multiproceso en Java contienen subprocesos que se ejecutan simultáneamente en lugar de secuencialmente. Una computadora puede utilizar sus recursos de manera más eficiente combinando múltiples tareas a la vez. Cualquier programa con subprocesos múltiples permite que más de un usuario use el programa simultáneamente sin ejecutar múltiples copias. Un programa multiproceso está diseñado para ejecutar múltiples procesos al mismo tiempo, lo que puede mejorar el rendimiento de un programa y permite que el programa utilice múltiples procesadores y mejora el rendimiento general.

171. ¿Cuáles son las ventajas del subproceso múltiple?

Existen múltiples ventajas de utilizar subprocesos múltiples, que son las siguientes:

  • Capacidad de respuesta: la capacidad de respuesta del usuario aumenta porque la aplicación interactiva multiproceso permite ejecutar código incluso cuando la sección está bloqueada o ejecuta un proceso largo.
  • Uso compartido de recursos: el proceso puede realizar transferencia de mensajes y memoria compartida debido al subproceso múltiple.
  • Economía: Podemos compartir memoria por lo que los procesos son económicos.
  • Escalabilidad: el subproceso múltiple en múltiples máquinas con CPU aumenta el paralelismo.
  • Mejor comunicación: las funciones de sincronización de subprocesos mejoran la comunicación entre procesos.
  • Utilización de la arquitectura multiprocesador.
  • Uso minimizado de recursos del sistema.

172. ¿Cuáles son las dos formas en que se puede crear Thread?

Multithreading es una característica de Java que permite la ejecución simultánea de dos o más partes de un programa para una utilización máxima de la CPU. En general, los subprocesos son procesos pequeños y livianos con rutas de ejecución separadas. Estos subprocesos utilizan memoria compartida, pero actúan de forma independiente, por lo que si alguno de ellos falla, no afecta a los demás. Hay dos formas de crear un hilo:

  • Extendiendo la clase Thread
  • Implementando una interfaz Runnable.

Extendiendo la clase Thread

Creamos una clase que extiende la clase java.lang.Thread . Esta clase anula el método run() disponible en la clase Thread. Un hilo comienza su vida dentro del método run().

Sintaxis:

public class MyThread extends Thread { public void run() {  // thread code goes here  } }>

Implementando la interfaz Runnable

Creamos una nueva clase que implementa java.lang.Runnable interfaz y anular el método run(). Luego creamos una instancia de un objeto Thread y llamamos al método start() en este objeto.

Sintaxis:

public class MyRunnable implements Runnable { public void run() {  // thread code goes here  } }>

173. ¿Qué es un hilo?

Los subprocesos en Java son subprocesos livianos con la unidad de proceso más pequeña y también tienen rutas de ejecución separadas. Estos subprocesos usan memoria compartida pero actúan de forma independiente, por lo tanto, si hay una excepción en los subprocesos que no afectan el funcionamiento de otros subprocesos a pesar de que comparten la misma memoria. Un subproceso tiene su propio contador de programa, pila de ejecución y variables locales, pero comparte el mismo espacio de memoria con otros subprocesos del mismo proceso. Java proporciona soporte integrado para subprocesos múltiples a través del Interfaz ejecutable y el Clase de hilo .

174. ¿Diferenciar entre proceso e hilo?

Un proceso y un hilo son unidades de ejecución en un sistema informático, pero se diferencian en varios aspectos:

Proceso

Hilo

Un proceso es un programa en ejecución.

Un hilo es una secuencia única de instrucciones dentro de un proceso.

El proceso tarda más en finalizar.

El hilo tarda menos en terminar.

El proceso lleva más tiempo para el cambio de contexto.

El hilo tarda menos tiempo en cambiar de contexto.

El proceso es menos eficiente en términos de comunicación.

Thread es más eficiente en términos de comunicación.

El proceso está aislado.

Los hilos comparten memoria.

El proceso tiene su propio bloque de control de proceso, pila y espacio de direcciones.

Thread tiene una PCB principal, su propio bloque de control de subprocesos y una pila y un espacio de direcciones común.

El proceso no comparte datos entre sí.

Los hilos comparten datos entre sí.

175. ¿Describe el ciclo de vida del hilo?

Ciclo-de-hilo-768

A hilo en Java en cualquier momento existe en cualquiera de los siguientes estados. Un hilo se encuentra sólo en uno de los estados mostrados en cualquier instante:

  1. Nuevo: El hilo ha sido creado pero aún no ha comenzado.
  2. Ejecutable: El subproceso se está ejecutando, ejecutando su tarea o está listo para ejecutarse si no hay otros subprocesos de mayor prioridad.
  3. Obstruido: El hilo está suspendido temporalmente, esperando un recurso o un evento.
  4. Espera: El hilo está esperando a que otro hilo realice una tarea o que transcurra un período de tiempo específico.
  5. Terminado: El hilo ha completado su tarea o ha sido terminado por otro hilo.

176. Explique el método suspender() en la clase Thread.

El método suspender() de la clase Thread en Java suspende temporalmente la ejecución de un hilo. Cuando se suspende un hilo, pasa a un estado bloqueado y el sistema operativo no lo programará, lo que significa que no podrá ejecutar su tarea hasta que se reanude. Existen alternativas más seguras y flexibles a los métodos suspend() en el lenguaje de programación Java moderno. Este método no devuelve ningún valor.

Sintaxis:

  public final void   suspend();>

Ejemplo:

Java
// Java program to show thread suspend() method import java.io.*; class MyThread extends Thread {  public void run()  {  for (int i = 0; i < 10; i++) {  System.out.println(' Running thread : ' + i);  try {  Thread.sleep(1000);  }  catch (Interrupted_Exception e) {  e.printStackTrace();  }  }  } } class GFG {  public static void main(String[] args)  {  MyThread t1 = new MyThread();  t1.start();  try {  Thread.sleep(3000);  }  catch (InterruptedException e) {  e.printStackTrace();  }  // suspend the execution of the thread  t1.suspend();  System.out.println('Suspended thread ');  try {  Thread.sleep(3000);  }  catch (InterruptedException e) {  e.printStackTrace();  }  // resume the execution of the thread  t1.resume();  System.out.println('Resumed thread');  } }>

Producción:

Thread running: 0 Thread running: 1 Thread running: 2 Suspended thread Resumed thread Thread running: 3 Thread running: 4 Thread running: 5 Thread running: 6 Thread running: 7 Thread running: 8 Thread running: 9>

177. Explique el hilo principal en Ejecución de la clase Thread.

Java proporciona soporte integrado para programación multiproceso. El hilo principal se considera el hilo padre de todos los demás hilos que se crean durante la ejecución del programa. El hilo principal se crea automáticamente cuando el programa comienza a ejecutarse. Este hilo ejecuta el método principal del programa. Es responsable de ejecutar la lógica principal del programa Java, así como de manejar las operaciones de entrada del usuario. El hilo principal sirve como hilo base a partir del cual se generan todos los demás hilos secundarios.

Thread-Class-Ejecución-768

178. ¿Qué es un hilo de demonio?

Un subproceso de demonio en Java es un subproceso de baja prioridad que se utiliza para realizar operaciones en segundo plano o tareas que se utilizan para realizar de forma continua. como recolección de basura, envíos de señales, escuchas de acciones, etc. Los subprocesos de Daemon en Java tienen menor prioridad que los subprocesos de usuario, lo que significa que solo se pueden ejecutar cuando no se está ejecutando ningún subproceso de usuario. Los subprocesos de Daemon en Java son funciones útiles que se requieren para tareas en segundo plano que no requieren un cierre o finalización explícitos. Permite un uso más eficiente de los recursos del sistema y se utiliza para simplificar los recursos y puede simplificar tareas de larga duración.

179. ¿Cuáles son las formas en que un hilo puede entrar en estado de espera?

Un subproceso es un proceso liviano que se ejecuta simultáneamente con el otro subproceso dentro de un solo proceso. Cada hilo puede ejecutar una tarea diferente y compartir los recursos dentro de un solo proceso. Los subprocesos en Java pueden entrar en estado de espera de muchas formas diferentes:

  • Llamada al método Sleep(): El sueño () El método se utiliza para pausar la ejecución del hilo durante un período de tiempo específico. Mientras el hilo está en pausa, pasa al estado de espera.
  • Método de espera (): Este método se utiliza para esperar un hilo hasta que el otro hilo le indique que se despierte. El hilo entra en estado de espera hasta que recibe una notificación de otro hilo.
  • Método unirse(): El método Join() se puede utilizar para esperar a que el hilo finalice la ejecución. El hilo de llamada entra en estado de espera hasta que se completa el hilo de destino.
  • Esperando operaciones de E/S: Si el subproceso está esperando que se complete la operación de Entrada/Salida, entra en estado de espera hasta que finalice la operación.
  • Problemas de sincronización: Si hay algún problema de sincronización en una aplicación multiproceso, los subprocesos pueden entrar en estado de espera hasta que se resuelvan los problemas de sincronización.

180. ¿Cómo se realiza el subproceso múltiple en una computadora con una sola CPU?

Java utiliza una técnica llamada tiempo compartido, comúnmente conocida como división de tiempo, para implementar subprocesos múltiples en computadoras con una sola CPU. La apariencia de ejecución paralela se crea cuando la CPU cambia entre subprocesos activos. El sistema operativo se encarga de asignar tiempo de CPU a cada subproceso de forma secuencial y programar los subprocesos.

Para evitar que los subprocesos interactúen entre sí y creen situaciones de carrera u otros problemas, Java tiene varias formas de controlar el comportamiento de los subprocesos, incluida la sincronización y el bloqueo. Es factible crear programadores de subprocesos múltiples que funcionen correcta y eficazmente en una máquina con una sola CPU regulando la interacción entre subprocesos y asegurándose de que las partes cruciales del código estén sincronizadas. A diferencia de ejecutar el mismo programa en una computadora con múltiples CPU o núcleos, el uso de subprocesos múltiples en una sola CPU sólo puede dar la apariencia de paralelismo y las ganancias reales de rendimiento pueden ser modestas. El sistema operativo divide el tiempo de CPU que está disponible cuando se ejecutan numerosos subprocesos en una sola CPU en pequeños intervalos de tiempo y le da a cada subproceso un intervalo de tiempo para ejecutar. El cambio rápido entre subprocesos por parte del sistema operativo crea la apariencia de ejecución paralela. El cambio entre subprocesos parece ser inmediato porque los intervalos de tiempo suelen ser muy pequeños, del orden de milisegundos o microsegundos.

Preguntas de la entrevista de Java para experimentados

181. ¿Cuáles son los diferentes tipos de prioridades de subprocesos en Java? ¿Y cuál es la prioridad predeterminada de un hilo asignado por JVM?

Las prioridades en los subprocesos es un concepto en el que cada subproceso tiene una prioridad que, en lenguaje sencillo, se puede decir que cada objeto tiene prioridad aquí, lo cual está representado por números que van del 1 al 10. Hay diferentes tipos de propiedades de subprocesos en Java que se mencionan a continuación:

  • PRIORIDAD_MINA
  • MAX_PRIORITY
  • NORM_PRIORIDAD

De forma predeterminada, al hilo se le asigna NORM_PRIORITY.

182. ¿Por qué es necesaria la recolección de basura en Java?

Para Java, la recolección de basura es necesaria para evitar pérdidas de memoria que pueden provocar que el programa falle y se vuelva inestable. No hay forma de evitar la recolección de basura en Java. A diferencia de C++, la recolección de basura en Java ayuda a los programadores a concentrarse en el desarrollo de la aplicación en lugar de administrar los recursos de memoria y preocuparse por la pérdida de memoria. Java Virtual Machine (JVM) administra automáticamente la memoria periódicamente ejecutando un recolector de basura que libera la memoria no utilizada en la aplicación. La recolección de basura hace que la memoria Java sea eficiente porque elimina objetos sin referencia de la memoria del montón.

183. ¿Cuál es el inconveniente de la recogida de basura?

Además de muchas ventajas, Garbage Collector tiene ciertos inconvenientes que se mencionan a continuación:

  1. El principal inconveniente de la recolección de basura es que puede causar pausas en la ejecución de una aplicación mientras limpia la memoria, lo que ralentiza el rendimiento de la aplicación.
  2. El proceso de recolección de basura no es determinista, lo que dificulta predecir cuándo ocurre la recolección de basura, lo que provoca un comportamiento impredecible en las aplicaciones. Por ejemplo, si escribimos cualquier programa, a los programadores les resultará difícil decidir si el problema se debe a la recolección de basura o a cualquier otro factor del programa.
  3. La recolección de basura también puede aumentar el uso de memoria si el programa crea y descarta muchos objetos de corta duración.

184. Explique la diferencia entre recolección de basura menor, mayor y completa.

La Máquina Virtual Java (JVM) elimina los objetos que ya no están en uso mediante un recolector de basura que verifica y elimina periódicamente estos objetos. Existen diferentes tipos de recolección de basura en la JVM, cada uno con diferentes características e implicaciones de rendimiento. Los principales tipos de recolección de basura son:

  • Recolección de basura menor: También conocida como recolección de basura de generación joven, este tipo de recolección de basura se utiliza para recolectar y recuperar la memoria que utilizan los objetos de corta duración (objetos que se crean y descartan rápidamente).
  • Recolección importante de basura: También conocido como recolección de basura de antigua generación, este tipo de recolección de basura se utiliza para recolectar y recuperar la memoria que utilizan los objetos de larga duración (objetos que sobreviven a múltiples recolecciones de basura menores y se promueven a la generación anterior).
  • Recolección completa de basura: Durante la recolección completa de basura, se recolectan y recuperan recuerdos de todas las generaciones, incluidos recuerdos de jóvenes y mayores. Una recolección de basura completa normalmente tarda más en completarse que una recolección de basura menor o mayor, lo que hace que la aplicación se detenga temporalmente.

185. ¿Cómo identificará las recolecciones de basura mayores y menores en Java?

La recolección de basura mayor funciona en el espacio de sobrevivientes y la recolección de basura menor funciona en el espacio de Eden para realizar una rutina de marcar y barrer. Y podemos identificar ambos en función del resultado donde la colección menor imprime GC, mientras que la colección principal imprime GC completo para el caso en el que el registro de recolección de basura está habilitado con -XX:PrintGCDetails o detallado:gc.

186. ¿Qué es una pérdida de memoria y cómo afecta la recolección de basura?

En Java, las pérdidas de memoria pueden deberse a una variedad de factores, como no cerrar los recursos correctamente, retener referencias a objetos más tiempo del necesario o crear demasiados objetos innecesariamente. Hay situaciones en las que el recolector de basura no recopila objetos porque hay una referencia a esos objetos. En estas situaciones donde la aplicación crea muchos objetos y no los usa y cada objeto tiene algunas referencias válidas, un recolector de basura en Java no puede destruir los objetos. Estos objetos inútiles que no aportan ningún valor al programa se conocen como pérdidas de memoria. Las pérdidas de memoria pueden afectar negativamente a la recolección de basura al impedir que el recolector de basura recupere la memoria no utilizada. Este comportamiento provocará un rendimiento lento o, en ocasiones, fallos del sistema. En un programa, es importante evitar pérdidas de memoria gestionando adecuadamente los recursos y las referencias a objetos.

Ejemplo:

Java
// Java Program to demonstrate memory leaks import java.io.*; import java.util.Vector; class GFG {  public static void main(String[] args)  {  Vector a = new Vector(21312312);  Vector b = new Vector(2147412344);  Vector c = new Vector(219944);  System.out.println('Memory Leak in Java');  } }>

Producción:

Exception in thread 'main' java.lang.OutOfMemoryError: Java heap space  at java.base/java.util.Vector.(Vector.java:142)  at java.base/java.util.Vector.(Vector.java:155)  at GFG.main(GFG.java:9)>

187. Nombra algunas clases presentes en el paquete java.util.regex.

Las expresiones regulares o Regex en Java son una API utilizada para buscar y manipular cadenas en Java. Crea patrones de cadenas que pueden extraer los datos necesarios de las cadenas o pueden generalizar un patrón.

Hay 3 clases presentes en java.util.regex que se mencionan a continuación:

  • Clase de patrón: puede definir patrones
  • Clase Matcher: puede realizar operaciones de coincidencia en texto usando patrones
  • Clase PatternSyntaxException: puede indicar un error de sintaxis en un patrón de expresión regular.

Además, aparte del paquete de 3 clases, consta de una única interfaz MatchResult que se puede utilizar para representar el resultado de una operación de coincidencia.

188. Escribe una expresión regular para validar una contraseña. Una contraseña debe comenzar con un alfabeto y seguida de caracteres alfanuméricos; Su longitud debe estar entre 8 y 20.

regex = ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&-+=()])(?=S+$).{8, 20}$>

Explicación:

  • ^ utilizado para el carácter inicial de la cadena.
  • (?=.*[0-9]) utilizado para un dígito debe aparecer al menos una vez.
  • (?=.*[a-z]) utilizado para un alfabeto en minúsculas debe aparecer al menos una vez.
  • (?=.*[A-Z]) utilizado para un alfabeto en mayúsculas que debe aparecer al menos una vez en la subcadena.
  • (?=.*[@#$%^&-+=()] usado para un carácter especial que debe aparecer al menos una vez.
  • (?=S+$) los espacios en blanco no se permiten en toda la cadena.
  • .{8, 20} se utiliza para al menos 8 caracteres y como máximo 20 caracteres.
  • $ usado para el final de la cadena.

189. ¿Qué es JDBC?

JDBC La API estándar se utiliza para vincular aplicaciones Java y bases de datos relacionales. Proporciona una colección de clases e interfaces que permiten a los programadores utilizar el lenguaje de programación Java para comunicarse con la base de datos. Las clases y la interfaz de JDBC permiten que la aplicación envíe solicitudes realizadas por los usuarios a la base de datos especificada. Generalmente hay cuatro componentes de JDBC mediante los cuales interactúa con la base de datos:

  • API JDBC
  • Administrador de controladores JDBC
  • Conjunto de pruebas JDBC
  • Controladores de puente JDBC-ODBC

JDBC-768

190. ¿Qué es el controlador JDBC?

Controlador JDBC es un componente de software que se utiliza para permitir que una aplicación Java interactúe con la base de datos. JDBC proporciona la implementación de la API JDBC para un sistema de gestión de bases de datos específico, lo que le permite conectar la base de datos, ejecutar declaraciones SQL y recuperar datos. Hay cuatro tipos de controladores JDBC:

  • Controlador de puente JDBC-ODBC
  • Controlador API nativo
  • Controlador de protocolo de red
  • Controlador delgado

Controlador JDBC-660

191. ¿Cuáles son los pasos para conectarse a la base de datos en Java?

Hay ciertos pasos para conectar la base de datos y el programa Java como se menciona a continuación:

  • Importar los paquetes
  • Cargue los controladores usando el método forName()
  • Registre los controladores usando DriverManager
  • Establecer una conexión utilizando el objeto de clase Conexión
  • Crear una declaración
  • Ejecutar la consulta
  • cerrar las conexiones

192. ¿Cuáles son los componentes de la API JDBC?

Los componentes de la API de JDBC proporcionan varios métodos e interfaces para una fácil comunicación con las bases de datos. También proporciona paquetes como java Se y java EE que brindan la capacidad de escribir una vez que se ejecuta en cualquier lugar (WORA).

Sintaxis:

java.sql.*;>

193. ¿Qué es la interfaz de conexión JDBC?

La interfaz de conectividad de bases de datos Java (JDBC) es un componente de software que permite que las aplicaciones Java interactúen con bases de datos. Para mejorar la conexión, JDBC requiere controladores para cada base de datos.

194. ¿Qué hace la interfaz JDBC ResultSet?

La interfaz JDBC ResultSet se utiliza para almacenar los datos de la base de datos y utilizarlos en nuestro programa Java. También podemos usar ResultSet para actualizar los datos usando los métodos updateXXX(). El objeto ResultSet apunta el cursor antes de la primera fila de los datos del resultado. Usando el método next(), podemos iterar a través del ResultSet.

195. ¿Qué es el conjunto de filas JDBC?

Un JDBC RowSet proporciona una forma de almacenar los datos en forma tabular. RowSet es una interfaz en Java que se puede utilizar dentro del paquete java.sql. La conexión entre el objeto RowSet y la fuente de datos se mantiene durante todo su ciclo de vida. Los RowSets se clasifican en cinco categorías según la implementación que se menciona a continuación:

  1. JdbcRowSet
  2. Conjunto de filas en caché
  3. Conjunto de filas web
  4. Conjunto de filas filtradas
  5. Unirse a conjunto de filas

196. ¿Cuál es la función de la clase JDBC DriverManager?

La clase JDBC DriverManager actúa como una interfaz para usuarios y controladores. Se utiliza de muchas maneras como se menciona a continuación:

  • Se utiliza para crear una conexión entre una aplicación Java y la base de datos.
  • Ayuda a realizar un seguimiento de los controladores que están disponibles.
  • Puede ayudar a establecer una conexión entre una base de datos y los controladores apropiados.
  • Contiene todos los métodos que pueden registrar y cancelar el registro de las clases de controladores de bases de datos.
  • El método DriverManager.registerDriver() puede mantener la lista de clases de controladores que se han registrado.

Preguntas de la entrevista sobre la diferencia de Java

197. Diferenciar entre Iterable e Iterador.

iterable

Iterador

Iterable proporciona una forma de iterar sobre una secuencia de elementos.

Iterator ayuda a iterar sobre una colección de elementos de forma secuencial.

iterador() El método devuelve un iterador. tieneSiguiente() y próximo() Se requieren métodos.
eliminar() El método es opcional. eliminar() Se requiere un método en el iterador.

Ejemplos son Listar, poner en cola y configurar.

Ejemplos son ListIterator, Enumeración y ArrayIterator.

198. Diferenciar entre Lista y Conjunto.

Lista

Colocar

Ordenado

desordenado

La lista permite duplicados.

El conjunto no permite valores duplicados.

Se accede a la lista por índice.

Se accede al conjunto mediante código hash.

Se pueden almacenar varios elementos nulos.

El elemento nulo solo se puede almacenar una vez.

Algunos ejemplos son ArrayList, LinkedList, etc.

Algunos ejemplos son HashSet y TreeSet. LinkedHashSet, etc.

199. Diferenciar entre Lista y Mapa.

Lista

Mapa

La interfaz de lista permite elementos duplicados.

El mapa no permite elementos duplicados.

La lista mantiene el orden de inserción.

El mapa no mantiene el orden de inserción.

Se pueden almacenar varios elementos nulos.

El mapa permite una única clave nula como máximo y cualquier número de valores nulos.

La lista proporciona el método get() para obtener el elemento en un índice específico.

El mapa no proporciona un método get para obtener los elementos en un índice específico.

La lista se implementa mediante ArrayList, etc.

El mapa es implementado por HashMap, TreeMap, LinkedHashMap

200. Diferenciar entre Cola y Pila.

Cola

Pila

La estructura de datos de la cola se utiliza para almacenar elementos y se utiliza para realizar operaciones como poner en cola, sacar de la cola desde el final o al final de la cola.

La estructura de datos de la pila se usa para almacenar elementos y se usa para realizar operaciones como empujar y sacar desde la parte superior de la pila.

Estructura de datos de la cola Implementa el orden FIFO.

Estructura de datos de pila Implementa el orden LIFO.

La inserción y eliminación en colas se realiza desde los extremos opuestos de la lista. La eliminación se realiza desde el principio de la lista y la inserción se realiza al final de la lista.

La inserción y eliminación en pilas se realiza solo desde un extremo de la lista llamado parte superior.

La operación de inserción se llama operación de puesta en cola.

La operación de inserción se llama operación Push.

La cola se utiliza generalmente para resolver problemas relacionados con el procesamiento secuencial.

Stack se usa generalmente para resolver problemas relacionados con la recursividad.

201. Diferenciar entre PriorityQueue y TreeSet.

Cola de prioridad

Conjunto de árboles

Utiliza Queue como estructura de datos subyacente.

Utiliza un conjunto como estructura de datos subyacente.

Esta estructura de datos permite elementos duplicados.

Esta estructura de datos no permite elementos duplicados.

Priority Queue se implementa mediante la clase PriorityQueue.

TreeSet se implementa mediante la clase TreeSet.

PriorityQueue viene en JDK 1.5.

TreeSet viene en JDK 1.4.

PriorityQueue pq = nueva PriorityQueue();

reeSet ts = nuevo TreeSet();

202. Diferenciar entre Lista Simple Enlazada y Lista Doblemente Enlazada.

Lista enlazada individualmente

Lista doblemente enlazada

La lista enlazada individualmente contiene solo dos segmentos, es decir, datos y enlace.

La lista doblemente enlazada contiene tres segmentos, es decir, datos y dos punteros.

El recorrido en una lista enlazada individualmente sólo es posible en dirección hacia adelante.

El recorrido en una lista doblemente enlazada sólo es posible en ambas direcciones, hacia adelante y hacia atrás.

Utiliza menos memoria ya que cada nodo tiene un solo puntero.

Requiere más memoria que una lista enlazada individualmente ya que cada nodo tiene dos punteros.

Fácil de usar e insertar nodos al principio de la lista.

Ligeramente más complejo de usar y fácil de insertar al final de la lista.

La complejidad temporal de la inserción y eliminación es O (n).

La complejidad temporal de la inserción y eliminación es O (1).

Lista-enlazada-simplemente-660

Lista-doblemente-enlazada-660

203. Diferenciar entre Failfast y Failsafe.

Fallar rapido

A prueba de fallos

Failsfast falla inmediatamente cuando detecta modificaciones simultáneas durante el tiempo de iteración.

Failsafe continúa iterando sobre la colección original y también crea una copia para modificar.

Failfast se utiliza generalmente en entornos de un solo subproceso.

Failsafe se utiliza en entornos multiproceso.

Failfast no permite ninguna modificación durante la iteración.

Failsafe permite modificaciones durante el tiempo de iteración.

Failfast es rápido en comparación con Failsafe ya que no implica la copia de la colección.

La seguridad contra fallas es generalmente lenta en comparación con la seguridad contra fallas.

FalloLanzamientos rápidos ConcurrentModificationException si la colección se modifica durante la iteración.


FailSafe no genera ninguna excepción, sino que crea una copia de la colección para iterar.

204. Diferenciar entre HashMap y TreeMap.

HashMap

ÁrbolMapa

Hasmap utiliza una tabla hash para almacenar pares clave-valor.

Treemap utiliza árboles rojo-negro para almacenar pares clave-valor.

Hashmap no mantiene ningún orden específico para los pares clave-valor.

Treemap mantiene un orden natural basado en las claves.

El orden de iteración no está garantizado en el mapa hash.

La iteración está ordenada según las claves.

Los Hashmaps son más rápidos de recuperar en comparación con Treemap.

La recuperación en Treemap es más lenta ya que utiliza el recorrido del árbol para encontrar claves.

Hashmap se implementa mediante el uso de una matriz de listas vinculadas.

TreeMap se implementa utilizando un árbol rojo-negro.

Hashmap usa el método equals() de la clase Object para comparar claves.

TreeMap utiliza el método compareTo() para comparar claves.

205. Diferenciar entre cola y deque.

Cola

Deque

La cola es una estructura de datos lineal que se utiliza para almacenar una colección de elementos.

Deque, también conocida como cola de dos extremos, también es una estructura de datos lineal que almacena una colección de elementos con operaciones para eliminar y agregar desde ambos extremos.

Los elementos de la cola solo se pueden insertar al final de la estructura de datos.

Se pueden insertar elementos desde ambos extremos de la estructura de datos.

La cola se puede implementar usando Array o Linked List.

La eliminación de la cola se puede implementar utilizando una matriz circular o una lista doblemente enlazada.

Las colas se utilizan generalmente para implementar una lista de espera o una cola de tareas.

Deque se utiliza para implementar una pila o quitar elementos de la cola desde ambos extremos.

Cola-660

Cola-de-dos-finales-660

206. Diferenciar entre HashSet y TreeSet.

Conjunto de hash

Conjunto de árboles

HashSet está desordenado.

TreeSet se basa en el orden natural.

HashSet permite elementos nulos.

TreeSet no permite elementos nulos.

HashSet es implementado por la clase HashSet.

TreeSet es implementado por la clase TreeSet.

HashSet hs = nuevo HashSet();

TreeSet ts = nuevo TreeSet();

Preguntas de la entrevista de Java: preguntas frecuentes

P1. ¿Cuál es el salario de un desarrollador de Java en la India?

Según diversos recursos, el salario promedio de un desarrollador backend de Java es más de 14 lakhs por año, que es un 30% más que cualquier otro rol de desarrollador . Aquí también puedes consultar nuestro último curso sobre Portal de práctica GeekforGeeks también puede ser útil.

P5. ¿Cómo puedo destacar en una entrevista de Java?

Para destacar en una entrevista de Java, demuestre una comprensión profunda de los conceptos y aplicaciones prácticas de Java. Muestre sus habilidades para resolver problemas explicando su enfoque ante escenarios complejos y brindando soluciones eficientes. Además, resalte cualquier proyecto o contribución relevante que haya realizado a la comunidad Java. Mostrar entusiasmo, buena comunicación y voluntad de aprender también puede dejar una impresión positiva.