Este artículo cuenta la clásica entrevista Preguntas de prueba escritas y sus respuestas de referencia. Compártelo para su referencia, como sigue:
1. ¿Cómo funciona Hibernate y por qué debe usarse?
principio:
1. Lea y analiza archivos de configuración
2. Lea y analice la información de mapeo y cree una Factory de Session
3. Sesión abierta
4. Cree una transacción de transacción
5. Operación de persistencia
6. Envíe transacciones
7. Sesión cerrada
8. Cerrar sestionFactory
Por qué usar:
①. El código para las bases de datos de acceso JDBC se ha encapsulado, simplificando enormemente el engorroso código repetitivo en la capa de acceso de datos.
②. Hibernate es un marco de persistencia convencional basado en JDBC y es una excelente implementación de ORM. Simplifica enormemente el trabajo de codificación de la capa DAO en gran medida
③. Hibernate utiliza el mecanismo de reflexión de Java, en lugar de los programas de mejora del código de byto para lograr la transparencia.
④. Hibernate funciona muy bien porque es un marco liviano. La flexibilidad del mapeo es excelente. Admite varias bases de datos relacionales, de una a una a muchas a muchas relaciones complejas.
2. ¿Cómo se retrasa la carga de retraso de hibernación?
①. Implementación de carga de retraso de Hibernate2: a) Objeto de entidad b) Colección (colección)
②. Hibernate3 proporciona la función de carga tardía de los atributos. Cuando Hibernate consulta los datos, los datos no existen y la memoria. Cuando el programa realmente opera en los datos, el objeto existe y la memoria, lo que realiza la carga retrasada. Guarda la sobrecarga de memoria del servidor y, por lo tanto, mejora el rendimiento del servidor.
3. ¿Cómo implementar la relación entre clases en Hibernate? (como una relación de uno a muchos, muchos a muchos)
La relación entre clases se refleja principalmente en la relación entre las tablas. Operan en objetos de la ciudad. Nuestro programa mapea todas las tablas y clases juntas, y se pasan a través de muchos a uno, de uno a muchos, muchos a muchos y muchos a muchos en el archivo de configuración.
4. Hablemos del mecanismo de caché de Hibernate
①. El caché interno también se llama caché de primer nivel en Hibernate, que pertenece a la memoria caché de nivel de aplicación
②. Cache de nivel 2:
a) Aplicación y caché
b) Condiciones de caché distribuidos: los datos no serán modificados por terceros, el tamaño de los datos está dentro de un rango aceptable, la frecuencia de actualización de datos es baja, los mismos datos son utilizados con frecuencia por el sistema y los datos no críticos
c) Implementación de caché de terceros
5. Método de consulta de hibernación
SQL, criterios, composición de objetos
HQL:
1. Consulta de atributos
2. Consulta de parámetros, llamada consulta de parámetros
3. Consulta relacionada
4. Consulta de paginación
5. Funciones estadísticas
6. ¿Cómo optimizar Hibernate?
①. Use la asociación bidireccional de uno a muchos, no de uno a muchos a muchos ②. Use una asociación flexible de uno a muchos a muchos ③. No use uno a uno, use muchos a uno en su lugar ④. Configure el caché de objeto, no use el caché de establecimiento ⑤. Use la bolsa para colecciones de uno a muchos y use el set para colecciones de muchas a muchos.
⑥. Use el polimorfismo explícito en las clases de herencia⑦. Debe haber menos campos de mesa, y no tenga miedo de muchas asociaciones de mesa. Hay un caché secundario para soportarlo.
7. Struts Mecanismo de trabajo? ¿Por qué usar puntales?
Mecanismo de trabajo:
Flujo de trabajo de Struts:
La inicialización ActionServlet se cargará cuando se inicie la aplicación web. El ActionServlet se cargará desde
Lea la información de configuración del archivo Struts-Config.xml y guárdela en varios objetos de configuración
Cuando el ActionServlet recibe una solicitud del cliente, se ejecutará el siguiente proceso.
-(1) Recupere la instancia de ActionMapping que coincida con la solicitud del usuario. Si no existe, devuelve la información inválida de la ruta de solicitud;
-(2) Si la instancia de ActionForm no existe, cree un objeto ActionForm y guarde los datos de formulario enviados por el cliente al objeto ActionForm;
-(3) Decide si se necesita verificación de formulario en función de la información de configuración. Si se requiere verificación, llame al método Validate () de ActionForm;
-(4) Si el método Validate () de ActionForm devuelve NULL o devuelve un objeto ActuiberRors que no contiene ActionMessage, significa que la verificación de formulario es exitosa;
-(5) El ActionServlet decide qué acción reenviar la solicitud en función de la información de mapeo contenida en ActionMapping. Si la instancia de acción correspondiente no existe, cree esta instancia primero y luego llame al método Execute () de la acción;
-(6) El método Execute () de Action devuelve un objeto ActionForward, y el ActionServlet reenvía la solicitud del cliente al componente JSP apuntado por el objeto ActionForward;
-(7) el objeto ActionForward apunta al componente JSP para generar una página web dinámica y la devuelve al cliente;
Por qué usar:
La aparición de tecnologías JSP, Servlet y Javabean nos proporciona la posibilidad de construir potentes sistemas de aplicación empresarial. Pero el sistema construido con estas tecnologías es muy caótico, por lo que, además, necesitamos una regla y una regla para organizar estas tecnologías. Este es el marco, y los puntales surgieron.
Las aplicaciones desarrolladas basadas en puntales se componen de tres tipos de componentes: componentes del controlador, componentes del modelo y componentes de vista
8. ¿Cómo se valida el marco Validate de Struts?
Configure las indicaciones de error específicas en el archivo de configuración de Struts y luego llame al método Validate () en FormBean.
9. Hablemos del patrón de diseño de Struts
Modo MVC: ActionServler se carga e inicializa cuando se inicia la aplicación web. Cuando el usuario envía un formulario, se crea y llena un objeto ActionForm configurado en los datos correspondientes del formulario. ActionServler decide si la verificación de formulario se necesita en función de la configuración configurada por el archivo struts-config.xml. Si es necesario, llame a la verificación Validate () de ActionForm y seleccione a qué acción enviar la solicitud. Si la acción no existe, el ActionServlet creará primero este objeto y luego llamará al método Execute () de la acción. Ejecutar () obtiene datos del objeto ActionForm, completa la lógica comercial y devuelve un objeto ActionForward. ActionServlet reenvía la solicitud del cliente al componente JSP especificado por el objeto ActionForward. El JSP especificado por el objeto ActionForward genera una página web dinámica y la devuelve al cliente.
10. Mecanismo de trabajo de primavera y ¿por qué?
①.
②.DispatcherServlet consulta una o más Handlermappings y encuentra el controlador que maneja la solicitud.
③.Dispatcherservlet Por favor envíe la solicitud al controlador de destino
④. Después de que el controlador realice el procesamiento de la lógica empresarial, devolverá un ModelAndView.
⑤.Dispathcher consulta uno o más resoluciones ViewResolver View y encuentra el objeto de vista especificado por el objeto ModelAndView ⑥. El objeto de vista es responsable de representarlo y devolverlo al cliente.
Por qué usar:
{AOP permite a los desarrolladores crear preocupaciones no conductuales, llamadas preocupaciones transversales e insertarlas en el código de aplicación. Después de usar AOP, los servicios públicos (como registros, persistencia, transacciones, etc.) pueden descomponerse en aspectos y aplicarse a objetos de dominio sin aumentar la complejidad del modelo de objetos de los objetos de dominio.
El COI permite crear un entorno de aplicación donde se pueden construir objetos y luego pasar sus objetos de colaboración a esos objetos. Como indica la palabra inversión, el COI es como el reverso JNDI. Sin usar un montón de fábricas abstractas, localizadores de servicios, singletons y construcción recta, cada objeto está construido con sus objetos de colaboración. Por lo tanto, el colaborador es administrado por el contenedor.
Spring es un contenedor de COI incluso si es un marco AOP. Lo mejor de la primavera es que te ayuda a reemplazar los objetos. Con Spring, solo agregue dependencias (objetos de colaboración) utilizando propiedades y archivos de configuración de Javabean. Los objetos de colaboración con interfaces similares se pueden reemplazar fácilmente cuando sea necesario. }
El marco de primavera es una arquitectura jerárquica que consta de 7 módulos bien definidos. Los módulos de resorte se construyen sobre los contenedores centrales que definen cómo se crean, configuran y administran frijoles.
Cada módulo (o componente) que constituye el marco de resorte puede existir solo o ser implementado junto con uno o más otros módulos. Las funciones de cada módulo son las siguientes:
☆ Core Container: Core Container proporciona las funciones básicas del marco de Spring. El componente principal del contenedor central es BeanFactory, que es una implementación del patrón de fábrica. BeanFactory utiliza el modo Inversión de Control (COI) para separar las especificaciones de configuración y dependencia de una aplicación del código de aplicación real.
☆ Contexto de Spring: el contexto de Spring es un archivo de configuración que proporciona información de contexto al marco de Spring. El contexto de primavera incluye servicios empresariales como JNDI, EJB, correo electrónico, internacionalización, capacidades de programación de suma de verificación.
☆ Spring AOP: a través de la función de administración de configuración, el módulo AOP Spring integra directamente las funciones de programación orientadas al aspecto en el marco de Spring. Por lo tanto, es fácil hacer que cualquier objeto administrado por Spring Framework Support AOP. El módulo AOP Spring proporciona servicios de gestión de transacciones para objetos en aplicaciones basadas en primavera. Al usar Spring AOP, la gestión de transacciones declarativas se puede integrar en la aplicación sin depender de los componentes EJB.
☆ Spring DAO: la capa de abstracción JDBC DAO proporciona una jerarquía de excepción significativa que puede usarse para administrar el manejo de excepciones y los mensajes de error lanzados por diferentes proveedores de bases de datos. La jerarquía de excepciones simplifica el manejo de errores y reduce en gran medida la cantidad de código de excepción que debe escribirse (como las conexiones de apertura y cierre). Las excepciones orientadas a JDBC de Spring Dao siguen la jerarquía de excepción DAO común.
☆ Spring ORM: El marco de Spring inserta varios marcos de ORM, proporcionando así herramientas de relación de objetos ORM, incluidos JDO, Hibernate e Ibatis SQL Map. Todo esto sigue a la transacción común de Spring y la jerarquía de excepciones DAO.
☆ Módulo web Spring: el módulo de contexto web se basa en el módulo de contexto de la aplicación y proporciona contexto para aplicaciones basadas en la web. Por lo tanto, el marco de primavera admite la integración con los puntales de Yakarta. El módulo web también simplifica el trabajo de manejo de solicitudes de múltiples partes y parámetros de solicitud de enlace a objetos de dominio.
☆ Marco de Spring MVC: el marco MVC es una implementación de MVC completamente funcional para la creación de aplicaciones web. A través de la interfaz de política, el marco MVC se vuelve altamente configurable, y MVC alberga una gran cantidad de tecnologías de vista, incluidas JSP, Velocity, Tiles, IText y POI.
Las capacidades del marco de Spring se pueden usar en cualquier servidor J2EE, y la mayoría de ellas son adecuadas para entornos no administrados. El punto central de Spring es: soporte para objetos de acceso a negocios y datos reutilizables que no están vinculados a servicios específicos de J2EE. No hay duda de que tales objetos pueden reutilizarse entre diferentes entornos J2EE (Web o EJB), aplicaciones independientes, entornos de prueba.
COI y AOP
El concepto básico de controlar los patrones de inversión (también conocidos como intervención de dependencia) es no crear objetos, sino describir cómo se crean. No se conecta directamente a objetos y servicios en el código, pero describe qué componente requiere qué servicio en el archivo de configuración. Los contenedores (contenedores del COI en el marco de primavera) son responsables de vincularlos.
En un escenario típico del COI, el contenedor crea todos los objetos y establece las propiedades necesarias para conectarlos, decidiendo cuándo se llama al método. La siguiente tabla enumera un patrón de implementación del COI.
El contenedor IOC del marco de Spring se implementa utilizando Tipo 2 y Tipo 3.
Programación orientada a los aspectos
La programación orientada a los aspectos, AOP, es una técnica de programación que permite a los programadores modularizar comportamientos que cortan las preocupaciones o las líneas divisorias típicas de la responsabilidad típicas (como el registro y la gestión de transacciones). La construcción central de AOP es el aspecto, que encapsula aquellos comportamientos que afectan múltiples clases en módulos reutilizables.
AOP y el COI son tecnologías complementarias, las cuales utilizan enfoques modulares para resolver problemas complejos en el desarrollo de aplicaciones empresariales. En el desarrollo típico orientado a objetos, se pueden requerir declaraciones de registro para colocar en todos los métodos y clases de Java para implementar la funcionalidad de registro. En el enfoque de AOP, los servicios de registro se pueden modularizar a su vez y aplicarse declarativamente a componentes que requieren registros. Por supuesto, la ventaja es que las clases de Java no necesitan conocer la existencia de servicios de registro, ni necesitan considerar el código relevante. Por lo tanto, el código de aplicación escrito en primavera AOP está libremente acoplado.
La funcionalidad de AOP está completamente integrada en el contexto de la gestión de transacciones de Spring, el registro y otras características.
Contenedor de COI
En el corazón del diseño de Spring se encuentra el paquete org.springframework.beans, que está diseñado para usarse con componentes de Javabean. El usuario generalmente no usa directamente este paquete, sino por el servidor como el intermediario subyacente para la mayoría de las otras funciones. La siguiente abstracción más avanzada es la interfaz BeanFactory, que es una implementación del patrón de diseño de fábrica que permite que los objetos se creen y recuperen los nombres. BeanFactory también puede gestionar las relaciones entre objetos.
BeanFactory admite dos modelos de objetos.
□ El modelo Singleton proporciona instancias compartidas de objetos con nombres específicos que se pueden recuperar al consultar. Singleton es el modelo de objeto predeterminado y más comúnmente utilizado. Ideal para objetos de servicio sin estado.
□ El modelo prototipo asegura que se creen objetos separados cada vez que se recuperan. Los prototipos son los más adecuados cuando cada usuario necesita su propio objeto.
El concepto de fábrica de frijoles es la base de la primavera como contenedor del COI. El COI cambia la responsabilidad de manejar cosas del código de aplicación al marco. Como demostraré en el siguiente ejemplo, el marco de Spring utiliza propiedades y datos de configuración de Javabean para indicar las dependencias que deben establecerse.
Interfaz beanfactory
Debido a que org.springframework.beans.factory.beanfactory es una interfaz simple, se puede implementar para varios métodos de almacenamiento subyacentes. La definición BeanFactory más utilizada es XMLBeanFactory, que carga frijoles de acuerdo con las definiciones en los archivos XML, como se muestra en el Listado 1.
Listado 1. XMLBeanFactory
BeanFactory Factory = new XMLBeanFactory (new FileInputSteam ("myBean.xml"));Los frijoles definidos en los archivos XML se cargan negativamente, lo que significa que el bean en sí no se inicializará hasta que sea necesario. Para recuperar un frijol de BeanFactory, simplemente llame al método getBean () y pase en el nombre del bean para recuperarse, como se muestra en el Listado 2.
Listado 2. GetBean ()
Mybean mybean = (mybean) fábrica.getbean ("mybean");La definición de cada bean puede ser un POJO (definido con el nombre de la clase y la propiedad de inicialización de Javabean) o una fábrica. La interfaz FactoryBean agrega un nivel indirecto a las aplicaciones construidas utilizando el marco Spring.
Ejemplo del COI
La forma más fácil de comprender la inversión de control es analizar su aplicación práctica. Al resumir la parte 1 de la serie de primavera de tres partes, utilicé un ejemplo que demuestra cómo inyectar dependencias de una aplicación a través de contenedores de COI de primavera (en lugar de construirlos).
Utilizo el caso de uso de abrir una cuenta de crédito en línea como punto de partida. Para esta implementación, habilitar una cuenta de crédito requiere que el usuario interactúe con los siguientes servicios:
☆ Servicio de evaluación de nivel de crédito, consulta información sobre el historial de crédito del usuario.
☆ Servicio de enlace de información remota, inserte información del cliente, conecte la información del cliente con la tarjeta de crédito y la información bancaria para débito automático (si es necesario).
☆ Servicio de correo electrónico, enviando correos electrónicos de los usuarios sobre el estado de la tarjeta de crédito.
Tres interfaces
Para este ejemplo, supongo que los servicios ya existen, e idealmente es integrarlos juntos de una manera poco acoplada. La siguiente lista muestra las interfaces del programa de aplicación para los tres servicios.
Listado 3. CreditRatingInterface
interfaz pública creditRatingInterface {public boolean getUsercredithistoryInformation (iCustomer icustomer);}La interfaz de evaluación del nivel de crédito que se muestra en el Listado 3 proporciona información sobre historial de crédito. Requiere un objeto del cliente que contenga información del cliente. La implementación de esta interfaz es proporcionada por la clase de credibilidad.
Listado 4. CreditLinkingInterface
Interfaz pública CreditLinkingInterface {public String getUrl (); public void seturl (url de cadena); public void linkcreditBankAccount () arroja excepción;}La interfaz de enlace de crédito conecta la información del historial de crédito con la información del banco (si es necesario) e inserta la información de la tarjeta de crédito del usuario. La interfaz de enlace de crédito es un servicio remoto, y su consulta se realiza a través del método getURL (). La URL se establece mediante el mecanismo de configuración de frijoles del marco de Spring, que discutiré más adelante. La implementación de esta interfaz es proporcionada por la Clase de Locos de Crédito.
Listado 5. Interfaz de correo electrónico
public interface EmailInterface {public void sendEmail(ICustomer iCustomer);public String getFromEmail();public void setFromEmail(String fromEmail);public String getPassword();public void setPassword(String password);public String getSmtpHost();public void setSmtpHost(String smtpHost);public String getUserId();public void setUserId(String userId);Espero que este artículo sea útil para la programación Java de todos.