Struts에 대한 이해에 대해 이야기해 주세요.
struts는 MVC 패턴에 따라 설계된 웹 레이어 프레임워크입니다. 실제로 이 서블릿은 ActionServlet 또는 ActionServlet의 하위 클래스라고 합니다. (추천 학습: java 인터뷰 질문)
web.xml 파일의 이 서블릿에 특정 특성과 일치하는 모든 요청을 전달할 수 있습니다. 그런 다음 이 서블릿은 구성 파일을 참조하여 각 요청을 처리할 다른 작업에 할당합니다. 와 함께.
(Struts는 여러 구성 파일을 가질 수 있으며 모듈에 따라 각 구성 파일을 구성할 수 있으므로 구성 파일의 과도한 확장을 방지할 수 있습니다)
2. ActionServlet은 처리를 위해 요청을 작업에 전달하기 전에 캡슐화합니다. 요청 매개변수를 formbean 객체(즉, Java 클래스, 이 클래스의 각 속성은 요청 매개변수에 해당함)
3 주의해야 할 점은 ActionServlet이 formbean 객체를 액션의 실행 메소드에 전달하기 전에 다음을 호출할 수 있다는 점입니다. 검증을 통과한 후에만 formbean 객체가 작업의 실행 메서드로 전달됩니다. 그렇지 않으면 이 오류 페이지가 입력 속성에 의해 지정됩니다.
4. 작업이 실행된 후 표시된 결과 보기가 ActionForward 개체로 표시됩니다. actionForward 개체는 struts-config.xml 구성 파일의 구성을 통해 jsp 페이지에 연결됩니다.
프로그램은 struts-config.xml 구성 파일에서 jsp 페이지에 설정된 논리적 이름을 사용하기 때문에 반환된 jsp 페이지 이름에서 액션 프로그램 코드를 분리할 수 있습니다.
(위 내용을 직접 사용해본 경험을 바탕으로 자신의 의견을 공유해도 됩니다.)
Hibernate에 대한 이해에 대해 이야기해 주세요.
1 객체지향 소프트웨어의 내부 동작 과정은 지속적으로 다양한 새로운 객체를 생성하고, 객체 간의 관계를 구축하고, 객체 메소드를 호출하여 각 객체의 상태와 객체 소멸 과정을 변경하는 것으로 이해하면 됩니다. 프로그램에 관계없이 실행되는 프로세스와 작업은 본질적으로 결과를 얻는 것입니다. 이전 순간과 다음 순간의 프로그램 실행 결과의 차이는 메모리에 있는 객체의 상태 변화에 반영됩니다.
2. 종료 시 또는 메모리 공간 부족 시 프로그램의 실행 상태를 유지하려면 메모리에 있는 객체 상태를 지속성 장치에 저장하고 객체 상태를 지속성 장치에서 복원해야 하며, 일반적으로 대량의 객체 정보를 저장하는 관계형 데이터베이스입니다.
Java 프로그램의 실행 기능 관점에서 볼 때 객체 상태를 저장하는 기능은 시스템 운영의 다른 기능에 비해 매우 눈에 띄지 않는 보조 기능이어야 하지만 Java는 이 기능을 구현하기 위해 jdbc를 사용합니다. 많은 양의 코드를 작성하는데 해야 할 일은 객체를 저장하고 객체를 복원하는 것뿐이며, 이러한 대량의 jdbc 코드에는 기술적인 내용이 전혀 없습니다. 기본적으로 일종의 일상적인 표준 코드 템플릿 세트를 사용하여 작성됩니다. 힘든 노동과 성노동.
3. Java 프로그램이 실행될 때 생성된 개체 및 복구 개체를 데이터베이스를 통해 저장하면 실제로 JDBC를 캡슐화하여 Java 개체와 관계형 데이터베이스 레코드 간의 매핑 관계를 구현할 수 있습니다. 이 기능을 포함하는 캡슐화된 제품을 ORM 프레임워크라고 하며, Hibernate는 널리 사용되는 ORM 프레임워크 중 하나입니다.
Hibernate 프레임워크를 사용하면 JDBC 코드를 작성할 필요가 없습니다. 단지 save 메소드를 호출하여 객체를 관계형 데이터베이스에 저장할 수 있습니다. get 메소드를 호출하기만 하면 데이터베이스에서 객체를 로드할 수 있습니다.
4. Hibernate를 사용하는 기본 프로세스는 구성 객체 구성, SessionFactory 생성, 세션 객체 생성, 트랜잭션 시작, CRUD 작업 완료, 트랜잭션 제출 및 세션 닫기입니다.
5. Hibernate를 사용하려면 먼저 데이터베이스 연결 정보 및 방언 등을 구성하는 hibernate.cfg.xml 파일을 구성해야 하며, 등록해야 하는 각 엔터티에 해당하는 hbm.xml 파일도 구성해야 합니다. hibernate.cfg.xml 파일에 있습니다.
6. Hibernate를 적용할 때 Session, Cascading, Lazy Loading, HQL Query의 캐싱 원리를 이해하는 것이 중요합니다.
(위에서는 JDBC를 사용하면서 겪은 번거로운 경험을 바탕으로 hibernate 경험을 이야기할 수도 있습니다.)
Spring에 대한 이해에 대해 이야기해 보세요.
1. Spring은 팩토리 패턴을 구현하는 팩토리 클래스입니다(여기서 팩토리 패턴이 무엇인지 명확하게 설명할 필요가 있음). 이 클래스는 프로그램에서 일반적으로 하위 클래스입니다. BeanFactory ApplicationContext. Spring은 대규모 팩토리 클래스와 동일합니다. 구성 파일에서 인스턴스 객체를 생성하는 데 사용되는 클래스 이름과 인스턴스 객체의 속성은
2. Spring은 IOC에 대한 좋은 지원을 제공합니다. IOC는 프로그래밍 아이디어이자 아키텍처 예술입니다. 이 아이디어는 DI(종속성 주입)라고도 합니다.
3. Spring은 AOP 기술을 훌륭하게 캡슐화합니다. AOP는 시스템에 관련되지 않은 클래스의 많은 메소드가 이러한 많은 메소드에 추가되어야 함을 의미합니다. 예를 들어 로깅 추가, 권한 판단 추가, 예외 처리 추가 등의 애플리케이션을 AOP라고 합니다.
프록시 기술은 AOP 기능을 구현하는 데 사용됩니다. 클라이언트 프로그램은 더 이상 대상을 호출하지 않지만 프록시 클래스와 대상 클래스는 외부적으로 동일한 메소드 문을 갖습니다. 동일한 Method 선언을 달성하는 두 가지 방법, 하나는 동일한 인터페이스를 구현하는 것이고 다른 하나는 대상의 하위 클래스가 되는 것입니다.
JDK에서는 Proxy 클래스를 사용하여 인터페이스에 대한 구현 클래스를 생성하는 동적 프록시를 생성합니다. 특정 클래스에 대한 하위 클래스를 생성하려면 CGLI B를 사용할 수 있습니다.
생성된 프록시 클래스의 메소드에 시스템 함수와 해당 대상 클래스를 호출하는 메소드를 추가합니다. 당연히 프록시 객체를 생성하기 위해 시스템 함수의 프록시가 제공됩니다. , 적어도 대상 클래스와 Advice는 필수 종류입니다. Spring은 이 지원을 제공하며, 프록시 및 aop 기능을 구현하려면 spring 구성 파일에서 이 두 요소만 구성하면 됩니다.
(본인의 사용 경험을 바탕으로 자신의 의견을 이야기해도 됩니다)
Struts의 장점과 단점에 대해 이야기해 보세요. #🎜 🎜#
Advantages:
1. 명확한 구조로 MVC 패턴을 구현하여 개발자가 비즈니스 로직 구현에만 집중할 수 있습니다. .#🎜🎜 #2. 사용할 수 있는 태그가 풍부하며, Struts 태그 라이브러리(Taglib)를 유연하게 사용하면 개발 효율성을 크게 향상시킬 수 있습니다
3 페이지 탐색을 통해 시스템의 컨텍스트가 더욱 명확해집니다. 구성 파일을 통해 전체 시스템의 다양한 부분 간의 연결을 파악할 수 있으므로 향후 유지 관리에 큰 이점이 있습니다. 이러한 이점은 다른 개발자 그룹이 프로젝트를 맡을 때 더욱 분명해집니다.
4. 예외 처리 메커니즘 제공
5. 데이터베이스 연결 풀 관리
6. 🎜🎜#단점:
먼저 Display 레이어로 갈 때 Forward를 구성해야 합니다. Display 레이어에 JSP가 10개라면 Struts를 10번 구성해야 합니다. 여기에는 디렉터리 및 파일 변경이 전달을 다시 수정해야 하는 경우가 포함되지 않습니다. 구성이 수정될 때마다 전체 프로젝트를 재배포해야 하며 tomcate와 같은 서버의 경우 서버를 다시 시작해야 합니다 #🎜🎜 #둘째, Struts의 작업은 하나의 인스턴스만 모든 요청을 처리할 수 있도록 허용하는 스레드 안전 모드여야 합니다. 따라서 작업에 사용되는 모든 리소스는 균일하게 동기화되어야 하며 이로 인해 스레드 안전성 문제가 발생합니다. 셋째, Struts의 각 Action은 웹 레이어와 결합되어 테스트가 웹 컨테이너에 의존하고 단위 테스트도 구현하기가 어렵습니다. 그러나 단위 테스트를 구현할 수 있는 Junit 확장 도구 Struts TestCase가 있습니다.
넷째, 유형 변환 Struts의 FormBean은 모든 데이터를 문자열 유형으로 처리하며 유형 변환을 위해 Commons-Beanutils 도구를 사용할 수 있습니다. 그러나 해당 변환은 모두 클래스 수준에서 이루어지며 변환 유형은 구성할 수 없습니다. 유형 변환 중에 사용자에게 오류 메시지를 반환하는 것도 매우 어렵습니다.
다섯째, Struts는 Action을 처리할 때 ServletRequest와 ServletResponse에 의존해야 하기 때문에 Servlet 컨테이너를 제거할 수 없습니다.
여섯, 프론트 엔드 표현 언어 Struts는 JSTL을 통합하므로 주로 JSTL 표현 언어를 사용하여 데이터를 얻습니다. 그러나 JSTL의 표현 언어는 Collection 및 인덱스 속성을 처리하는 데 매우 약합니다.
7. Struts에서 Action을 생성할 때 Action의 실행 순서를 제어하기가 매우 어렵습니다. 기능적 요구 사항을 실현하기 위해 서블릿을 다시 작성해야 할 수도 있습니다.
여덟째, 액션 실행 전후 처리 Struts는 액션 처리 시 클래스 계층 구조를 기반으로 하기 때문에 액션 처리 전후 처리가 어렵습니다.
9. Struts에서 양식은 실제로 Action 클래스(또는 DispatchAction)에 해당합니다. 즉, Struts에서 양식은 실제로 하나의 이벤트에만 해당합니다. struts의 이벤트는 컴포넌트 이벤트와 비교할 때, 애플리케이션 이벤트는 대략적인 이벤트입니다.
iBatis와 Hibernate의 차이점은 무엇인가요? jdbc api를 처리하지 않고도 데이터에 액세스할 수 있도록 jdbc api의 기본 액세스 세부 정보를 보호합니다. jdbc API 프로그래밍 프로세스가 수정되었으며 SQL 문이 Java 코드와 혼합되어 SQL 문을 함께 연결해야 하는 경우가 많으며 세부 사항이 매우 번거롭습니다. ibatis의 이점: jdbc api의 기본 액세스 세부 정보를 보호합니다. java 코드에서 sql 문을 분리하여 엔터티 개체 및 개체 컬렉션이라고 하는 결과 집합을 자동으로 캡슐화하는 기능을 제공합니다. queryForList는 개체 컬렉션을 반환합니다. queryForObject를 사용하여 단일 개체를 반환하고 엔터티 개체의 속성을 SQL 문에 자동으로 전달하는 매개 변수를 제공합니다.Hibernate는 자동으로 SQL 문을 생성할 수 있는 도구입니다. Ibatis는 ibatis보다 훨씬 더 책임감 있고 강력합니다. Hibernate는 자동으로 SQL 문장을 생성하기 때문에 우리가 문장을 제어할 수 없고, 구체적이고 효율적인 SQL을 작성할 수 없습니다.
일부 덜 복잡한 SQL 쿼리의 경우 최대 절전 모드가 이를 완료하는 데 도움이 될 수 있습니다. 그러나 특히 복잡한 쿼리의 경우 최대 절전 모드는 적응하기 어렵습니다. 현재로서는 ibatis를 사용하는 것이 좋습니다. . 자신만의 SQL 문을 작성해 보세요.
최대 절전 모드에서 다중 테이블 쿼리를 수행할 때 각 테이블에서 여러 필드를 가져옵니다. 즉, 쿼리 결과 집합에 해당하는 엔터티 클래스가 없습니다. 이 문제를 해결하시겠습니까?
해결 방법 1: Object[] 데이터에 따라 데이터를 꺼내고 직접 Bean을 구성합니다.
해결 방법 2: Bean에 대한 생성자 작성 예를 들어 표 1에서 field1과 field2 두 필드를 찾으려면 Bean(type1 file1, type2 field2)이라는 생성자가 있고 hql에서 이 Bean을 직접 생성할 수 있습니다.
Hibernate의 두 번째 수준 캐시 소개
다음 아이디어에 따라 답변하세요.
# 🎜🎜# (1) 먼저 캐시가 무엇인지 명확하게 설명하겠습니다. 🎜#(3) 마지막으로 Hibernate의 2단계 캐시를 구성하는 방법에 대해 이야기하겠습니다.
1. 캐싱은 데이터베이스에서 쿼리하고 사용한 개체를 메모리(데이터 구조)에 저장하는 것입니다. 이 데이터 구조는 일반적으로 특정 개체가 있을 때 사용됩니다. 향후 개체에 사용되는 경우 먼저 해당 개체가 캐시에 존재하는지 쿼리합니다.
있는 경우 캐시에 있는 개체를 사용합니다. 그렇지 않은 경우 데이터베이스에 쿼리하고 다음 번 사용을 위해 쿼리된 개체를 캐시에 저장합니다.
2. Hibernate의 Session은 일종의 캐시입니다. 우리는 이를 일반적으로 Hibernate의 첫 번째 수준 캐시라고 부릅니다. 세션을 사용하여 데이터베이스에서 개체를 쿼리하려는 경우 Session도 먼저 내부를 살펴봅니다. 이 객체가 존재하는 경우, 존재하지 않는 경우 직접 반환되며, 데이터베이스에 액세스하여 쿼리 결과를 내부적으로 저장합니다.
세션은 세션 프로세스를 나타내고 세션은 데이터베이스 연결과 연결되므로 세션을 오랫동안 열어두지 않는 것이 가장 좋으며 일반적으로 하나의 트랜잭션에서만 사용되어야 합니다. 거래가 끝나면 닫힙니다. 그리고 세션은 스레드에 안전하지 않으며 여러 스레드에서 공유할 때 문제가 발생하기 쉽습니다.
일반적으로 전역적 의미의 캐시만이 실제 캐시 애플리케이션이며 더 큰 캐시 값을 갖습니다. 따라서 Hibernate의 Session 레벨 캐시의 캐시 기능은 명확하지 않으며 애플리케이션 가치도 크지 않습니다. .
Hibernate의 2차 캐시는 여러 스레드와 여러 트랜잭션이 이 캐시를 공유할 수 있도록 Hibernate용 전역 캐시를 구성하는 것입니다.
한 사람이 사용했다면 다른 사람도 사용할 수 있기를 바랍니다.
3. 두 번째 수준 캐시는 Hibernate와는 별개의 소프트웨어 구성 요소이며 여러 공급업체 및 조직에서 EHCache 및 OSCache 등과 같은 캐싱 제품을 제공합니다. Hibernate에서 2차 캐시를 사용하려면 먼저 hibernate.cfg.xml 구성 파일에서 사용할 제조업체의 캐시 제품을 구성해야 합니다. 그런 다음 캐시 제품 자체 구성 파일을 구성해야 합니다. Hibernate의 객체는 두 번째 수준 캐시 관리에 포함되어야 합니다.
2차 캐시의 원리를 이해하고 이 아이디어를 가지면 Hibernate의 2차 캐시를 구성하는 것은 쉽습니다.
확장 지식: SessionFactory는 두 번째 수준 캐시와 연결될 수 있습니다. 즉, 두 번째 수준 캐시는 Hibernate의 두 번째 수준 캐시를 사용할 때 하나의 데이터베이스에 있는 데이터를 캐싱하는 역할만 담당할 수 있습니다. 캐시된 데이터가 데이터베이스의 실제 데이터와 일치하지 않도록 현재 데이터베이스의 데이터를 변경하는 다른 Apply 또는 SessionFactory를 사용하지 않도록 주의하세요.
JDO란 무엇인가요?JDO는 Java Object Persistence의 새로운 사양이며 Java Data Object에도 사용됩니다. 데이터 웨어하우스의 개체에 액세스하기 위한 표준화된 API입니다. JDO는 투명한 객체 저장소를 제공하므로 개발자는 데이터 객체를 저장하는 데 추가 코드(예: JDBC API 사용)가 필요하지 않습니다. 이 지루하고 일상적인 작업은 JDO 제품 제공업체로 이전되어 개발자가 비즈니스 로직에 시간과 에너지를 집중할 수 있게 되었습니다. 또한 JDO는 기본 데이터에서 실행될 수 있으므로 유연합니다.
비교: JDBC는 관계형 데이터베이스(RDBMS)에만 사용됩니다. JDO는 더 일반적이며 관계형 데이터베이스, 파일, XML 및 개체 데이터베이스(ODBMS) 등과 같은 모든 데이터에 대한 기본 저장 기능을 제공합니다. , 애플리케이션을 더욱 이식 가능하게 만듭니다.
Hibernate의 일대다와 다대다 양방향 연관의 차이점은 무엇입니까? ?일대다 연관 매핑과 다대일 연관 매핑의 기본 원칙은 동일합니다. 즉, 다 끝에 외래 키를 추가하여 해당 항목을 가리킵니다. 외래 키는 한쪽 끝에 있고 기본 유일한 차이점은 유지 관리 끝이 다르다는 것입니다.
차이는 유지되는 관계에 있습니다.일대다 연관 매핑은 데이터의 한쪽 끝을 로드하는 동시에 여러 개를 로드하는 것을 의미합니다. 한쪽 끝에 있는 데이터의 일대일 연관 매핑은 한쪽 끝에 데이터를 로드하는 동안 한쪽 끝에 데이터를 로드하는 것을 의미합니다.
Hibernate는 어떻게 로딩을 지연하나요?1. Hibernate2 지연 로딩 구현: a) 엔터티 객체 b) 컬렉션(Collection) #🎜🎜 #
2. Hibernate3는 속성의 지연 로딩 기능을 제공하는데, Hibernate가 데이터를 쿼리할 때 데이터는 메모리에 존재하지 않으며, 프로그램이 실제로 데이터에 대해 동작할 때는 객체가 메모리에만 존재하므로 지연 로딩이 이루어집니다. 서버의 메모리 오버헤드를 줄여 서버 성능을 향상시킵니다.
위 내용은 Java 프레임워크 면접 질문 (1)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!