2021/1/14 Resumen de cien preguntas de Niuke

Lamentablemente, no toma mucho tiempo hacer las preguntas cada vez. Aproximadamente 30 preguntas son más de 20 minutos, pero se necesita al menos una hora para resumir las 30 preguntas, y creo que la eficiencia es un poco baja.
Después de cepillar 400 preguntas, la mayoría de los errores ahora no son puntos de conocimiento muy grandes, pero algunos detalles no se manejan correctamente. Por lo tanto, es posible que se resuman 200 preguntas en el futuro, y los puntos de conocimiento anteriores se consolidarán. Ahora básicamente Acabo de obtener un impresión general.

1. Funcionamiento básico de la conexión a la base de datos

//声明数据库驱动,数据源的url,用于登录数据库的账户和密码(将其他功能封装成方法的时候方便使用)
String driver = "数据库驱动名称";
String url = "数据库连接地址"
String user = "用来连接数据库的用户名";
String pwd = "用来连接数据库的密码"//加载数据库驱动  
Class.forName(driver);
//根据url创建数据库连接对象Connection 
Connection con = DriverManage.getConnection(url,user,pwd);
//用数据库连接对象创建Statement对象(或PrepareStatement)
Statement s = con.createStatement();
或
PrepareStatement ps = con.PrepareStatement(sql);
//做数据库的增删改查工作
ResultSet rs = s.executeQuery();
//关闭结果集对象Resultset,statement对象,connection对象,
rs.close();
s.close();
con.close();
//各个步骤的异常处理

2. La conexión de la base de datos usa el modo puente

Modo Puente:

Definición: Separar la parte abstracta de su parte de realización para que se puedan modificar de forma independiente.

Intención: desacoplar la abstracción de la implementación.

Roles involucrados en el modo puente

  1. Abstracción: Defina una interfaz abstracta y tenga una referencia de objeto del tipo Implementador.
  2. RefinedAbstraction: amplía la definición de interfaz en Abstraction
  3. Implementor: Es una interfaz de implementación específica. Las interfaces Implementor y RefinedAbstraction no son necesariamente iguales. De hecho, estas dos interfaces pueden ser completamente diferentes. Implementor proporciona métodos de operación específicos, mientras que Abstraction proporciona llamadas de nivel superior.
  4. ConcreteImplementor: implementa la interfaz Implementor y da una implementación específica

Modo puente en Jdk: JDBC

Cuando JDBC se conecta a la base de datos, puede cambiar entre las distintas bases de datos. Básicamente, no hay necesidad de mover demasiado código, o incluso ningún cambio. La razón es que JDBC proporciona una interfaz unificada y cada base de datos proporciona su propia implementación. A se utiliza el controlador de base de datos. Sólo el programa para puentear

3. Cómo inicializar el objeto

  1. Inicializar cuando sea nuevo
  2. NewInstance de fábrica estática;
  3. 反射 Class.forName () ;
  4. modo de clonación;
  5. Deserializar

4. Objeto de clase POJO de Hibernate

Los tres estados de Hibernate Pojo son transitorio (estado transitorio), persistente (estado persistente), separado (estado libre)

1. La relación oficial entre los tres estados y Session es la siguiente:

transitorio: nunca persistente, no asociado con ninguna sesión
persistente: asociado con una única sesión
separada: previamente persistente, no asociado con ninguna sesión

2. La relación de conversión entre los tres estados y su estado en la base de datos y la sesión son los siguientes:

Cuando creamos un nuevo pojo, está en un estado transitorio y no tiene conexión con la sesión o la base de datos en este momento.

b. Después de eso, obtenemos la sesión e iniciamos la transacción de hibernación, llamamos a los métodos save (), persist (), saveOrUpdate () para transformar el pojo en un estado persistente. En este momento, el pojo se almacena en la sesión, pero hasta que transaction.commit () sea Cuando se llame, se ejecutará la instrucción sql, y luego estos datos estarán en la base de datos.

c. Pero cuando se ejecutan commit () y session.close (), el pojo se convierte en un estado libre, es decir, existe el registro en la base de datos pero ya no en la sesión.

d) Una instancia de un estado persistente también puede volver a convertirse en un estado transitorio, que consiste en llamar al método delete ().

e) El pojo obtenido a través del método get () o load () es persistente.

f. Pojo en el estado libre puede volverse un estado persistente nuevamente a través de los métodos update (), saveOrUpdate (), lock () y replicate ().

g. Después de llamar al método merge (), el pojo permanece en su estado original, pero el contenido se actualizará a la base de datos

5. Cargador de clases en Java

Los cargadores de clases en Java se pueden dividir aproximadamente en dos categorías, una es proporcionada por el sistema y la otra está escrita por desarrolladores de aplicaciones Java. Hay tres cargadores de clases principales proporcionados por el sistema:

Cargador de clases Bootstrap :

Se utiliza para cargar la biblioteca central de Java, se implementa con código nativo y no hereda de java.lang.ClassLoader. Principalmente responsable de la API principal en el directorio jdk_home / lib o el empaquetado jar especificado por la opción -Xbootclasspath (donde jdk_home se refiere a la ruta de configuración donde la variable de entorno jdk está configurada para ser java_home, que generalmente es el directorio donde jdk / jre se encuentra).

Cargador de clases de extensiones (cargador de clases de extensiones) :

Se utiliza para cargar bibliotecas de extensión de Java. La implementación de la máquina virtual Java proporcionará un directorio de biblioteca de extensión. El cargador de clases de extensión busca y carga las clases de Java en este directorio. Es principalmente responsable del paquete jar en el directorio jdk_home / lib / ext o el jar en el directorio especificado -Djava.ext.dirs Pack en trabajo.

Cargador de clases de sistema:

Carga clases de Java de acuerdo con la ruta de clases (CLASSPATH) de la aplicación Java. En términos generales, las clases de aplicaciones Java las carga. Puede ser obtenido por ClassLoader.getSystemClassLoader (). Principalmente responsable del empaquetado de clases y jars en el directorio al que apunta CLASSPATH / -Djava.class.path.

Además del cargador de clases proporcionado por el sistema, los desarrolladores pueden implementar su propio cargador de clases heredando la clase java.lang.ClassLoader, para cargar dinámicamente archivos de clases para satisfacer algunas necesidades especiales. Esto refleja la clase dinámica de Java en tiempo real cargando en características.

Además del cargador de clases de arranque, todos los cargadores de clases tienen un cargador de clases padre, que se puede obtener mediante el método getParent (). Para el cargador de clases proporcionado por el sistema, el cargador de clases padre del cargador de clases del sistema es el cargador de clases extendido, y el cargador de clases padre del cargador de clases extendido es el cargador de clases de arranque; para el cargador de clases escrito por el desarrollador, diga , su cargador de clases padre es un cargador de clases que carga clases Java de este tipo de cargador. Porque las clases de Java del cargador de clases, al igual que otras clases de Java, también las carga el cargador de clases. En términos generales, el cargador de clases padre del cargador de clases escrito por el desarrollador es el cargador de clases del sistema. Los cargadores de clases se organizan de esta manera para formar una estructura de árbol. El nodo raíz del árbol es el cargador de clases de arranque. La siguiente figura muestra un diagrama de estructura de árbol de cargador de clases típico, donde la flecha apunta al cargador de clases padre.
Inserte la descripción de la imagen aquí

6. Palabras clave en Java

Inserte la descripción de la imagen aquí

7. La manifestación del polimorfismo

definición:

El polimorfismo es la capacidad de tener múltiples manifestaciones o formas diferentes del mismo comportamiento.

Condiciones necesarias para la existencia (forma de expresión):

  1. heredar
  2. Volver a escribir
  3. La referencia de la clase principal apunta al objeto de la clase secundaria: Parent p = new Child ();

8.RMI

definición:

Java RMI, a saber, Remote Method Invocation, es una API de Java que se utiliza para implementar llamadas de procedimiento remoto (RPC) (llamada de procedimiento remoto), que puede transmitir directamente objetos Java serializados y recolección de basura distribuida. Su implementación se basa en la máquina virtual Java (JVM), por lo que solo admite llamadas de una JVM a otra.
Inserte la descripción de la imagen aquí
                                              Fundamentos de la arquitectura distribuida: explicación detallada de Java RMI

9. Clase de resguardo

efecto:

Si una interfaz tiene muchos métodos, si desea implementar esta interfaz, debe implementar todos los métodos. Pero desde una perspectiva empresarial, una clase puede necesitar solo uno o dos métodos. Si implementa directamente esta interfaz, además de los métodos requeridos, se deben implementar todos los demás métodos irrelevantes. Y si la interfaz se implementa heredando la clase stub, se evitará este problema.

RMI usa stubs y esqueletos para comunicarse con objetos remotos. El stub actúa como cliente del objeto remoto y tiene la misma interfaz remota que el objeto remoto.La llamada del objeto remoto se realiza realmente llamando al stub del objeto cliente del objeto.

10. Objetos integrados y métodos de adquisición en JSP

  1. out-> response.getWriter El
    objeto out se utiliza para generar información en el navegador web y administrar el búfer de salida en el servidor de aplicaciones. Cuando utilice el objeto de salida para enviar datos, puede operar en el búfer de datos para borrar los datos residuales en el búfer a tiempo para dejar espacio para otras salidas. Una vez que se completa la salida de datos, el flujo de salida debe cerrarse a tiempo.
  2. El
    objeto de solicitud del parámetro req en la solicitud -> Método de servicio es un objeto de tipo javax.servlet.httpServletRequest. Este objeto representa la información de la solicitud del cliente y se utiliza principalmente para aceptar datos transmitidos al servidor a través del protocolo HTTP. (Incluyendo información de encabezado, información del sistema, método de solicitud y parámetros de solicitud, etc.). El alcance del objeto de solicitud es una solicitud.
  3. El parámetro de
    respuesta respuesta en la respuesta -> Método de servicio representa la respuesta al cliente, que es principalmente para pasar los objetos procesados ​​por el contenedor JSP al cliente. El objeto de respuesta también tiene un alcance, solo es válido dentro de la página JSP.
  4. session -> request.getSession
    1. Qué es una sesión: comienza cuando un cliente abre el navegador y se conecta al servidor, y finaliza cuando el cliente cierra el navegador y abandona el servidor, lo que se denomina sesión. Cuando un cliente accede a un servidor, puede conectarse repetidamente entre varias páginas del servidor y actualizar una página repetidamente.El servidor debe saber que este es el mismo cliente de alguna manera, lo que requiere un objeto de sesión.
    2. ID de objeto de sesión: cuando un cliente visita una página JSP en el servidor por primera vez, el motor JSP genera un objeto de sesión y asigna un número de ID de tipo String al mismo tiempo. El motor JSP también envía este número de ID al cliente y lo almacena en una Cookie, de esta forma se establece una correspondencia uno a uno entre el objeto de sesión y el cliente. Cuando el cliente accede a otras páginas conectadas al servidor, no se asigna ningún objeto de sesión nuevo al cliente. Después de que el cliente cierra el navegador, el objeto de sesión del cliente en el lado del servidor se cancela y la relación correspondiente con la sesión del cliente desaparece. Cuando el cliente vuelve a abrir el navegador y se conecta al servidor, el servidor crea un nuevo objeto de sesión para el cliente.
    3. El objeto de sesión tiene el problema de la caducidad de un cierto tiempo, por lo que el par nombre-valor en la sesión se perderá después de un cierto período de tiempo, esta situación se puede evitar cambiando el tiempo efectivo de la sesión. Al mismo tiempo, trate de evitar almacenar una gran cantidad de información efectiva en la sesión durante la programación, la solicitud es un buen sustituto.
  5. aplicación -> getServletContext
    1. Qué es una aplicación:
    El objeto de la aplicación se genera después de que se inicia el servidor.Cuando el cliente navega entre las páginas del sitio web visitado, el objeto de la aplicación es el mismo hasta que se apaga el servidor. Pero a diferencia de la sesión, todos los clientes tienen el mismo objeto de aplicación, es decir, todos los clientes comparten este objeto de aplicación integrado.
    2. Métodos comunes para objetos de aplicación:
    (1) public void setAttribute (String key, Object obj): agregue el objeto obj especificado por el parámetro Object al objeto de aplicación y especifique una clave de índice para el objeto agregado.
    (2) public Object getAttribute (String key): Obtiene el objeto que contiene la clave en el objeto de la aplicación.
  6. excepción ->
    instancia Throwable java.lang.Throwable, que representa excepciones y errores en otras páginas. Este objeto solo se puede usar cuando la página es una página de manejo de errores, es decir, el atributo isErrorPage de la página de instrucciones de compilación es verdadero. Los métodos más utilizados son getMessage () y printStackTrace ().
  7. La página -> este
    objeto de página representa la propia JSP y solo es válida dentro de la página JSP. El objeto implícito de la página contiene esencialmente las variables a las que hace referencia la interfaz de Servlet actual, similar al puntero this en la programación Java.
  8. pageContext -> PageContext
    La función del objeto pageContext es obtener cualquier rango de parámetros, a través de los cuales se pueden obtener, solicitud, respuesta, sesión, aplicación y otros objetos de la página JSP. La creación e inicialización del objeto pageContext las realiza el contenedor, y el objeto pageContext se puede utilizar directamente en la página JSP.
  9. Config -> getServletConfig
    La función principal del objeto de configuración es obtener información de configuración del servidor. Se puede obtener un objeto de configuración a través del método getServletConfig () del objeto pageContext. Cuando se inicializa un servlet, el contenedor pasa cierta información al servlet a través del objeto de configuración. Los desarrolladores pueden proporcionar parámetros de inicialización para programas Servlet y páginas JSP en el entorno de la aplicación en el archivo web.xml.

11. Contenido del paquete de servlet

El paquete javax.servlet contiene 7 interfaces, 3 clases y 2 clases de excepción. Son:

接口: RequestDispatcher, Servlet, ServletConfig, ServletContext, ServletRequest, ServletResponse 和 SingleThreadModel

类: GenericServlet, ServletInputStream 和 ServletOutputStream

Clase de excepción: ServletException y UnavailableException

12. Orden de inicialización del dominio estático

public class B
{
    
    
    public static B t1 = new B();
    public static B t2 = new B();
    {
    
    
        System.out.println("构造块");
    }
    static
    {
    
    
        System.out.println("静态块");
    }
    public static void main(String[] args)
    {
    
    
        B t = new B();
    }
}
//Output:构造块 构造块 静态块 构造块

El entendimiento correcto es este:

No es que el bloque estático se inicialice primero, sino el dominio estático (BM: ¡Ah! ¡Qué doloroso entendimiento!)

El dominio estático contiene variables estáticas, bloques estáticos y métodos estáticos. Las variables estáticas y los bloques estáticos que deben inicializarse son variables estáticas y bloques estáticos. ¡El orden de inicialización de los dos está determinado por sus posiciones!

¡Entonces! La secuencia de inicialización es el bloque estático t1 t2

Supongo que te gusta

Origin blog.csdn.net/qq_52212721/article/details/112571563
Recomendado
Clasificación