¿Cómo ingresar a una gran fábrica si la base no es confiable? ¡Estas preguntas básicas de Java se recomiendan para recopilar!

Prefacio

En el frío invierno, no puedo evitar que un programador de Java persiga una gran fábrica. Las entrevistas actuales con una gran fábrica, especialmente uno y dos lados, implican un profundo conocimiento básico de Java, por lo que el editor resume algunas preguntas frecuentes de la gran fábrica. Preguntas y respuestas de la entrevista básica de Java, comparta con usted, espero que pueda ingresar a su empresa ideal lo antes posible ~~
Inserte la descripción de la imagen aquí

1. ¿Cuál es la diferencia entre JDK y JRE?

  • JDK: La abreviatura de Java Development Kit, Java Development Kit, proporciona un entorno de desarrollo y un entorno operativo Java.
  • JRE: abreviatura de Java Runtime Environment, entorno de ejecución de Java, que proporciona el entorno necesario para el funcionamiento de Java.

Específicamente, JDK incluye JRE, así como javac, un compilador para compilar el código fuente de Java, así como muchas herramientas para depurar y analizar programas de Java. En pocas palabras: si necesita ejecutar un programa java, solo necesita instalar el JRE, si necesita escribir un programa java, necesita instalar el JDK.

2. ¿Cuál es la diferencia entre == y es igual a?

1. == Interpretación
El efecto de == para tipos básicos y tipos de referencia es diferente, como se muestra a continuación:

  • Tipo básico: compare si los valores son iguales;
  • Tipo de referencia: compare si las referencias son iguales;

Ejemplo de código:

String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

Interpretación del código: debido a que xey apuntan a la misma referencia, == también es verdadero, y el nuevo método String () se reescribe para abrir espacio en la memoria, por lo que el resultado de == es falso y la comparación de iguales es siempre un valor, por lo que Los resultados son todos verdaderos.

Dos, igual interpretación

Equals es esencialmente ==, pero String e Integer han reescrito el método equals, convirtiéndolo en una comparación de valores. Mira el siguiente código para entenderlo.
Primero, veamos el caso predeterminado que equivale a comparar un objeto con el mismo valor. El código es el siguiente:

class Cat {
    
    
    public Cat(String name) {
    
    
        this.name = name;
    }

    private String name;

    public String getName() {
    
    
        return name;
    }

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

Cat c1 = new Cat("王磊");
Cat c2 = new Cat("王磊");
System.out.println(c1.equals(c2)); // false

El resultado está más allá de nuestras expectativas, ¿resulta ser falso? Lo que está sucediendo, puede ver el código fuente de iguales, el código fuente es el siguiente:

public boolean equals(Object obj){
    
    
        return (this == obj);
}

Resulta que igual es esencialmente ==.
La pregunta es, ¿por qué dos objetos String con el mismo valor devuelven verdadero? el código se muestra a continuación:

String s1 = new String("老王");
String s2 = new String("老王");
System.out.println(s1.equals(s2)); // true

De manera similar, cuando ingresamos el método equals de String y encontramos la respuesta, el código es el siguiente:

public boolean equals(Object anObject) {
    
    
    if (this == anObject) {
    
    
        return true;
    }
    if (anObject instanceof String) {
    
    
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
    
    
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
    
    
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

Resulta que String reescribe el método equals de Object, cambiando la comparación de referencia a la comparación de valores.

Resumen: == para los tipos básicos es una comparación de valores, para los tipos de referencia, es una comparación de referencia; e igual por defecto es una comparación de referencia, pero muchas clases anulan el método equals, como String, Integer, etc. para cambiarlo Se convierte en una comparación de valores, por lo que, en general, es igual a comparar si los valores son iguales.

3. Si el hashCode () de dos objetos es el mismo, equals () también debe ser verdadero, ¿verdad?

No, el hashCode () de los dos objetos es el mismo, equals () no es necesariamente cierto.
Ejemplo de código:

String str1 = "通话";
String str2 = "重地";
System.out.println(String.format("str1:%d | str2:%d",  str1.hashCode(),str2.hashCode()));
System.out.println(str1.equals(str2));

El resultado de la ejecución:

str1:1179395 | str2:1179395
false

** Interpretación del código: ** Obviamente, el hashCode () de "call" y "heavy ground" son lo mismo, pero equals () es falso, porque en la tabla hash, hashCode () es igual al valor hash de los dos pares clave-valor Igual, pero el valor hash es igual y el par clave-valor no es necesariamente igual.

4. ¿Cuál es el papel de final en Java?

  • La clase final modificada se llama clase final, que no se puede heredar.
  • Los métodos modificados finales no se pueden anular.
  • La variable final modificada se llama constante. La constante debe inicializarse y el valor no se puede modificar después de la inicialización.

5. ¿Cuánto cuesta Math.round (-1.5) en Java?

Igual a -1.

6. ¿Es String un tipo de datos básico?

String no es un tipo básico, hay 8 tipos básicos: byte, boolean, char, short, int, float, long, double y String es un objeto.

7. ¿Cuáles son las clases de cadenas de manipulación en Java? ¿Cuál es la diferencia entre ellos?

Las clases para manipular cadenas son: String, StringBuffer, StringBuilder.

La diferencia entre String y StringBuffer y StringBuilder es que String declara un objeto inmutable. Cada operación genera un nuevo objeto String y luego apunta el puntero al nuevo objeto String. StringBuffer y StringBuilder pueden operar sobre la base del objeto original. Por lo tanto, es mejor no utilizar String cuando el contenido de una cadena se cambia con frecuencia.

La mayor diferencia entre StringBuffer y StringBuilder es que StringBuffer es seguro para subprocesos, mientras que StringBuilder no es seguro para subprocesos, pero el rendimiento de StringBuilder es superior al de StringBuffer, por lo que se recomienda StringBuilder en un entorno de un solo subproceso y StringBuffer en un entorno de subprocesos múltiples.

8. ¿Es String str = "i" lo mismo que String str = new String ("i")?

No es lo mismo, porque el método de asignación de memoria es diferente. Con String str = "i", la máquina virtual java lo asignará al grupo de constantes y String str = new String ("i") se asignará a la memoria del montón.

9. ¿Cómo invertir la cuerda?

Utilice el método reverse () de StringBuilder o stringBuffer.
Código de muestra:

// StringBuffer reverse
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("abcdefg");
System.out.println(stringBuffer.reverse()); // gfedcba
// StringBuilder reverse
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("abcdefg");
System.out.println(stringBuilder.reverse()); // gfedcba

10. ¿Cuáles son los métodos más utilizados de la clase String?

  • indexOf (): Devuelve el índice del carácter especificado.
  • charAt (): Devuelve el carácter en el índice especificado.
  • replace (): reemplazo de cadena.
  • trim (): Elimina los espacios en blanco en ambos extremos de la cadena.
  • split (): divide la cadena y devuelve una matriz de cadena dividida.
  • getBytes (): devuelve la matriz de tipo de bytes de la cadena.
  • length (): Devuelve la longitud de la cadena.
  • toLowerCase (): convierte la cadena en letras minúsculas.
  • toUpperCase (): convierte una cadena en caracteres en mayúscula.
  • substring (): intercepta una cadena.
  • equals (): comparación de cadenas.

11. ¿Una clase abstracta tiene que tener métodos abstractos?

No, las clases abstractas no tienen por qué tener métodos abstractos.
Código de muestra

abstract class Cat {
    
    
    public static void sayHi() {
    
    
        System.out.println("hi~");
    }
}

En el código anterior, la clase abstracta no tiene métodos abstractos pero puede ejecutarse normalmente.

12. ¿Cuáles son las diferencias entre clases ordinarias y abstractas?

  • Las clases ordinarias no pueden contener métodos abstractos y las clases abstractas pueden contener métodos abstractos.
  • Las clases abstractas no se pueden instanciar directamente, las clases ordinarias se pueden instanciar directamente.

13. ¿Pueden las clases abstractas utilizar modificaciones finales?

No, la definición de una clase abstracta es para que otras clases la hereden. Si se define como final, la clase no se puede heredar. Esto provocará conflictos entre sí. Por lo tanto, final no puede modificar la clase abstracta. Como se muestra en la figura siguiente, el editor también mostrará un mensaje de error:
Modificación anormal

14. ¿Cuál es la diferencia entre una interfaz y una clase abstracta?

  • Implementación: el uso de subclases de clases abstractas se extiende a heredar; las interfaces deben usar implementos para implementar interfaces.
  • Constructor: las clases abstractas pueden tener constructores, las interfaces no.
  • Método principal: una clase abstracta puede tener un método principal y podemos ejecutarlo; una interfaz no puede tener un método principal.
  • Número de implementaciones: una clase puede implementar muchas interfaces, pero solo puede heredar una clase abstracta.
  • Modificador de acceso: los métodos de la interfaz utilizan la modificación pública de forma predeterminada; los métodos de la clase abstracta pueden ser cualquier modificador de acceso.

15. ¿Cuáles son los tipos de flujos de E / S en Java?

Dividido por función: flujo de entrada (entrada), flujo de salida (salida).
Dividido por tipo: flujo de bytes y flujo de caracteres.
La diferencia entre el flujo de bytes y el flujo de caracteres es: el flujo de bytes transfiere datos de entrada y salida en bytes según 8 bits, y el flujo de caracteres transfiere datos de entrada y salida en caracteres según 16 bits.

16. ¿Cuál es la diferencia entre BIO, NIO y AIO?

  • BIO: Block IO El IO de bloqueo síncrono es el IO tradicional que usamos habitualmente, se caracteriza por su modo simple y cómodo de usar, y su baja capacidad de procesamiento concurrente.
  • NIO: El nuevo IO síncrono sin bloqueo de IO es una actualización del IO tradicional. El cliente y el servidor se comunican a través del canal para lograr la multiplexación.
  • AIO: Asynchronous IO es una actualización de NIO, también llamado NIO2, que implementa IO asincrónico sin bloqueo. El funcionamiento de IO asincrónico se basa en eventos y mecanismos de devolución de llamada.

17. ¿Cuáles son los métodos habituales de Archivos?

  • Files.exists (): compruebe si existe la ruta del archivo.
  • Files.createFile (): crea un archivo.
  • Files.createDirectory (): crea una carpeta.
  • Files.delete (): elimina un archivo o directorio.
  • Files.copy (): copia archivos.
  • Files.move (): mueve archivos.
  • Tamaño de archivos (): muestra el número de archivos.
  • Files.read (): leer archivos.
  • Files.write (): escribe archivos.

para resumir

Por razones de espacio, no los mostraré todos aquí.
El editor también resolvió la mayoría de las preguntas de la entrevista y las respuestas involucradas en la entrevista con los programadores de Java de Dachang para compartir con usted de forma gratuita, con la esperanza de ayudar a todos, los amigos que lo necesiten pueden ver la forma gratuita de obtenerlas a continuación .

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Obtenga
información aquí: contraseña CSDN

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Para obtener la información, haga clic aquí: CSDN
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

Finalmente, gracias por su apoyo y espero que la información recopilada por el editor pueda ayudarlo. ¡También les deseo a todos un ascenso y un aumento de salario!
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_47955802/article/details/109341188
Recomendado
Clasificación