Preguntas de la entrevista de Complete Works of Java (5)

Preguntas de la entrevista de Complete Works of Java (5)

Baiyu IT Haha
41. Fecha y hora:
-¿Cómo obtener año, mes, día, hora, minuto y segundo?
-¿Cómo obtener el número de milisegundos desde 0: 0: 0 el 1 de enero de 1970 hasta el presente?
-¿Cómo conseguir el último día de un mes?
-¿Cómo formatear la fecha?
Respuesta:
Pregunta 1: Cree una instancia de java.util.Calendar, llame a su método get () y pase diferentes parámetros para obtener el valor correspondiente del parámetro. Puede usar java.time.LocalDateTimel para obtenerlo en Java 8. El código se muestra a continuación.


public class DateTimeTest {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.get(Calendar.YEAR));
        System.out.println(cal.get(Calendar.MONTH));    // 0 - 11
        System.out.println(cal.get(Calendar.DATE));
        System.out.println(cal.get(Calendar.HOUR_OF_DAY));
        System.out.println(cal.get(Calendar.MINUTE));
        System.out.println(cal.get(Calendar.SECOND));
        // Java 8
        LocalDateTime dt = LocalDateTime.now();
        System.out.println(dt.getYear());
        System.out.println(dt.getMonthValue());     // 1 - 12
        System.out.println(dt.getDayOfMonth());
        System.out.println(dt.getHour());
        System.out.println(dt.getMinute());
        System.out.println(dt.getSecond());
    }
}

Pregunta 2: El número de milisegundos se puede obtener mediante los siguientes métodos.


Calendar.getInstance().getTimeInMillis();
System.currentTimeMillis();
Clock.systemDefaultZone().millis(); // Java 8

Pregunta 3: El código se muestra a continuación.


Calendar time = Calendar.getInstance();
time.getActualMaximum(Calendar.DAY_OF_MONTH);

Pregunta 4: Utilice el método format (Date) en una subclase de java.text.DataFormat (como la clase SimpleDateFormat) para formatear la fecha. Java 8 puede usar java.time.format.DateTimeFormatter para formatear la fecha y la hora, el código se muestra a continuación.


import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
class DateFormatTest {
    public static void main(String[] args) {
        SimpleDateFormat oldFormatter = new SimpleDateFormat("yyyy/MM/dd");
        Date date1 = new Date();
        System.out.println(oldFormatter.format(date1));
        // Java 8
        DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
        LocalDate date2 = LocalDate.now();
        System.out.println(date2.format(newFormatter));
    }
}

Suplemento: la API de fecha y hora de Java siempre ha sido criticada. Para resolver este problema, Java 8 introdujo nuevas API de fecha y hora, incluidas LocalDate, LocalTime, LocalDateTime, Clock, Instant, etc., estas clases El diseño utiliza el modo inmutable, por lo que es un diseño seguro para subprocesos. Si no comprende estos contenidos, puede consultar mi otro artículo "Resumen y pensamiento sobre la programación concurrente en Java".

42. Imprime el momento actual de ayer.

responder:


import java.util.Calendar;
class YesterdayCurrent {
    public static void main(String[] args){
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -1);
        System.out.println(cal.getTime());
    }
}

En Java 8, se puede lograr la misma función con el siguiente código.


import java.time.LocalDateTime;
class YesterdayCurrent {
    public static void main(String[] args) {
        LocalDateTime today = LocalDateTime.now();
        LocalDateTime yesterday = today.minusDays(1);

        System.out.println(yesterday);
    }
}

43. Compare Java y JavaSciprt.

Respuesta: JavaScript y Java son dos productos diferentes desarrollados por las dos empresas. Java es un lenguaje de programación orientado a objetos lanzado por la compañía Sun Microsystems original, que es particularmente adecuado para el desarrollo de aplicaciones de Internet; mientras que JavaScript es un producto de Netscape, que está desarrollado para extender la funcionalidad del navegador Netscape y puede integrarse en páginas web para ejecutar Un lenguaje explicativo basado en objetos y eventos. El predecesor de JavaScript es LiveScript; el predecesor de Java es el lenguaje Oak.
A continuación, se comparan las similitudes y diferencias entre los dos idiomas:

  • Basado en objetos y orientado a objetos: Java es un verdadero lenguaje orientado a objetos, incluso si se trata de desarrollar programas simples, los objetos deben diseñarse; JavaScript es un lenguaje de scripting, que se puede utilizar para realizar interacciones complejas con usuarios que no tienen nada que ver con la red. software. Es un lenguaje de programación basado en objetos e impulsado por eventos (Event-Driven), por lo que en sí mismo proporciona objetos internos muy ricos para que los usen los diseñadores.
  • Interpretación y compilación: el código fuente de Java debe compilarse antes de la ejecución. JavaScript es un lenguaje de programación interpretado, su código fuente no necesita ser compilado y es interpretado y ejecutado por el navegador. (Casi todos los navegadores actuales utilizan la tecnología JIT (compilación justo a tiempo) para mejorar la eficiencia del funcionamiento de JavaScript)
  • Variables fuertemente tipadas y variables débilmente tipadas: Java utiliza la verificación de variables fuertemente tipadas, es decir, todas las variables deben declararse antes de ser compiladas; las variables en JavaScript tienen tipado débil e incluso pueden declararse antes de usar variables. Verificaciones del intérprete de JavaScript en tiempo de ejecución Deduzca su tipo de datos.
  • El formato del código es diferente.

Suplemento: Los cuatro puntos enumerados anteriormente son las llamadas respuestas estándar que circulan en Internet. De hecho, la diferencia más importante entre Java y JavaScript es que uno es un lenguaje estático y el otro es un lenguaje dinámico. La tendencia de desarrollo actual de los lenguajes de programación son los lenguajes funcionales y los lenguajes dinámicos. Las clases en Java son ciudadanos de primera clase y las funciones en JavaScript son ciudadanos de primera clase. Por lo tanto, JavaScript es compatible con la programación funcional y puede utilizar funciones y cierres de Lambda. Por supuesto, Java 8 también ha comenzado a admitir funciones La programación proporciona soporte para expresiones Lambda e interfaces funcionales. Para este tipo de preguntas, es mejor responder en su propio idioma durante la entrevista para ser más confiable, no recite las llamadas respuestas estándar en Internet.

44. ¿Cuándo usar asertir?

Respuesta: Las afirmaciones son un método de depuración común en el desarrollo de software y muchos lenguajes de desarrollo admiten este mecanismo. En términos generales, las afirmaciones se utilizan para garantizar la corrección más básica y crítica del programa. La comprobación de afirmaciones suele estar activada durante el desarrollo y las pruebas. Para garantizar la eficiencia de la ejecución del programa, la verificación de afirmación generalmente se cierra después de que se lanza el software. Assertion es una declaración que contiene una expresión booleana. Al ejecutar esta declaración, se asume que la expresión es verdadera; si el valor de la expresión es falso, el sistema reportará un AssertionError. El uso de la aserción se muestra en el siguiente código:
assert (a> 0); // arroja un AssertionError si una <= 0
Assertion puede tener dos formas:
assert Expression1;
assert Expression1: Expression2;
Expression1 siempre debe producir un valor booleano .
Expression2 puede ser cualquier expresión que produzca un valor; este valor se usa para generar un mensaje de cadena que muestra más información de depuración.
Para habilitar las aserciones en tiempo de ejecución, puede utilizar el distintivo -enableassertions o -ea al iniciar la JVM. Para elegir inhabilitar las aserciones en tiempo de ejecución, puede utilizar el distintivo -da o -disableassertions al iniciar la JVM. Para habilitar o deshabilitar aserciones en la clase del sistema, use los indicadores -esa o -dsa. También puede habilitar o deshabilitar las afirmaciones por paquete.

Nota: Las afirmaciones no deben cambiar el estado del programa de ninguna manera. En pocas palabras, si desea evitar la ejecución de código cuando no se cumplen ciertas condiciones, puede considerar el uso de aserciones para evitarlo.

45. ¿Cuál es la diferencia entre error y excepción?

Respuesta: Error significa errores a nivel del sistema y excepciones que el programa no necesita manejar. Es un problema serio cuando la recuperación no es imposible pero sí difícil; por ejemplo, desbordamiento de memoria, es imposible esperar que el programa maneje tal situación; Excepción significa que necesita ser detectado O una excepción que necesita ser manejada por el programa es un problema de diseño o implementación; es decir, representa una situación que nunca sucedería si el programa se ejecutara normalmente.

Pregunta de la entrevista: En la entrevista de 2005 de Motorola, una vez hice la pregunta "Si un proceso informa un error de tiempo de ejecución de desbordamiento de pila, ¿cuál es la causa más posible?", Se dieron cuatro opciones: a. Falta de memoria; b. Escribir en un espacio de memoria no válido; c. llamada de función recursiva; d. índice de matriz fuera de los límites. Los programas Java también pueden encontrar StackOverflowError cuando se ejecutan. Este es un error irrecuperable. Solo puede modificar el código nuevamente. La respuesta es c. Si escribe una recursividad que no puede converger rápidamente, es probable que provoque un error de desbordamiento de pila, como se muestra a continuación:


class StackOverflowErrorTest {
    public static void main(String[] args) {
        main(null);
    }
}

Consejos: Hay que tener en cuenta dos puntos al escribir un programa con recursividad: 1. Fórmula recursiva 2. Condiciones de convergencia (cuando no continúe la recursividad).

46. ​​Hay una declaración de retorno en try {}, entonces, ¿el código en finalmente {} se ejecutará inmediatamente después de este intento, cuando se ejecuta, antes o después de return?

Respuesta: Se ejecutará antes de que el método vuelva al llamador.

Nota: No es bueno cambiar el valor de retorno en finalmente, porque si hay un bloque de código final, la declaración de retorno en try no regresará inmediatamente a la persona que llama, pero registrará el valor de retorno y lo llamará después de que se ejecute el bloque de código final. La persona devuelve su valor, y luego, si el valor devuelto se modifica finalmente, se devolverá el valor modificado. Obviamente, devolver o modificar el valor devuelto en finalmente causará muchos problemas al programa. En C #, los errores de compilación se utilizan directamente para evitar que los programadores hagan cosas tan desagradables. En Java, el nivel de verificación de sintaxis del compilador también se puede mejorar. Para generar advertencias o errores, Eclipse se puede configurar como se muestra en la figura. Se recomienda encarecidamente configurarlo como un error de compilación.

Preguntas de la entrevista de Complete Works of Java (5)

47. ¿Cómo maneja el lenguaje Java las excepciones? ¿Cómo usar palabras clave: lanzar, lanzar, intentar, atrapar y finalmente?

Respuesta: Java usa métodos orientados a objetos para manejar excepciones, clasifica varias excepciones y proporciona una buena interfaz. En Java, cada excepción es un objeto, que es una instancia de la clase Throwable o sus subclases. Cuando ocurre una excepción en un método, se lanza un objeto de excepción, el objeto contiene información sobre la excepción y el método que llama a este objeto puede detectar la excepción y manejarla. El manejo de excepciones de Java se implementa a través de cinco palabras clave: intentar, atrapar, lanzar, lanzar y finalmente. En circunstancias normales, try se usa para ejecutar un programa. Si el sistema arroja un objeto de excepción, puede ser capturado por su tipo o procesado ejecutando siempre el bloque de código (finalmente); try se usa Para especificar un programa para evitar todas las excepciones; la cláusula catch inmediatamente después del bloque try se usa para especificar el tipo de excepción que desea capturar; la declaración throw se usa para lanzar explícitamente una excepción; throws se usa para declarar que un método puede lanzar Todo tipo de excepciones (por supuesto, se permiten gemidos al declarar excepciones); finalmente, para garantizar que se ejecute un fragmento de código sin importar las condiciones anormales que ocurran; las declaraciones try se pueden anidar, y siempre que se encuentre una declaración try, se colocará la estructura anormal Ingrese la pila de excepciones hasta que se completen todas las declaraciones de prueba. Si la declaración try del siguiente nivel no maneja una excepción, la pila de excepciones realizará una operación emergente hasta que encuentre una declaración try que maneje esta excepción o finalmente lance la excepción a la JVM.

48. ¿Cuáles son las similitudes y diferencias entre las excepciones en tiempo de ejecución y las excepciones marcadas?

Respuesta: Las anomalías indican condiciones anormales que pueden ocurrir durante la ejecución del programa. Las excepciones en tiempo de ejecución indican anomalías que se pueden encontrar en el funcionamiento normal de la máquina virtual. Es un error operativo común y generalmente no ocurre mientras el programa esté diseñado sin problemas. La excepción marcada está relacionada con el contexto en el que se ejecuta el programa. Incluso si el diseño del programa es correcto, es posible que se deba a problemas de uso. El compilador de Java requiere que el método debe declarar para lanzar excepciones comprobadas que puedan ocurrir, pero no requiere que deba declarar para lanzar excepciones de tiempo de ejecución no capturadas. Las excepciones, como la herencia, a menudo se abusa en la programación orientada a objetos. Se dan las siguientes pautas para el uso de excepciones en Effective Java:

  • No use el manejo de excepciones para el flujo de control normal (una API bien diseñada no debería obligar a quienes llaman a usar excepciones para el flujo de control normal)
  • Utilice excepciones comprobadas para condiciones recuperables y excepciones en tiempo de ejecución para errores de programación
  • Evite el uso innecesario de excepciones marcadas (se pueden usar algunos métodos de detección de estado para evitar excepciones)
  • Priorizar excepciones estándar
  • Las excepciones lanzadas por cada método deben documentarse
  • Mantener una atomicidad anormal
  • No ignore la excepción detectada en catch

    49. Enumere algunas de sus excepciones comunes en tiempo de ejecución.

    responder:

  • ArithmeticException (excepción aritmética)
  • ClassCastException (excepción de conversión de clase)
  • IllegalArgumentException (excepción de parámetro ilegal)
  • IndexOutOfBoundsException (excepción de subíndice fuera de límites)
  • NullPointerException (excepción de puntero nulo)
  • SecurityException (excepción de seguridad)

    50. Explique la diferencia entre finalizar, finalmente y finalizar.

    responder:

  • Final: Modificador (palabra clave) tiene tres usos: si una clase se declara como final, significa que ya no puede derivar nuevas subclases, es decir, no se puede heredar, por lo que es lo opuesto a abstracto. Declarar las variables como finales asegura que no se cambiarán durante el uso. Las variables declaradas como finales deben recibir valores iniciales en el momento de la declaración, y solo se pueden leer y no se pueden modificar en referencias futuras. El método declarado como final también solo se puede usar y no se puede anular en subclases.
  • Finalmente: generalmente se coloca después de try ... catch ... La estructura siempre ejecuta el bloque de código, lo que significa que no importa si el programa se ejecuta normalmente o si ocurre una excepción, el código aquí se puede ejecutar siempre que la JVM no esté cerrada y el código para liberar recursos externos se pueda escribir en finalmente bloquear.
  • finalize: Un método definido en la clase Object. El método finalize () está permitido en Java para realizar el trabajo de limpieza necesario antes de que el recolector de basura borre el objeto de la memoria. El recolector de basura llama a este método cuando se destruye el objeto. Al anular el método finalize (), se pueden realizar los recursos del sistema u otras tareas de limpieza.

Supongo que te gusta

Origin blog.51cto.com/15061944/2593691
Recomendado
Clasificación