>Java >Java인터뷰 질문들 >2023년 최신 SSH 프레임워크 인터뷰 질문 요약

2023년 최신 SSH 프레임워크 인터뷰 질문 요약

王林
王林앞으로
2020-10-19 17:02:593465검색

2023년 최신 SSH 프레임워크 인터뷰 질문 요약

Hibernate는 어떻게 작동하며 왜 Hibernate를 사용해야 합니까?

(더 많은 관련 면접 질문 추천: java 면접 질문 및 답변)

작동 원리:

1. 구성 파일을 읽고 구문 분석합니다.

2. 매핑 정보를 읽고 구문 분석하고, SessionFactory를 생성합니다

3 . 세션 열기

4. 트랜잭션 만들기 트랜잭션

5. 지속성 작업

6. 트랜잭션 제출

7. 세션 닫기

8. SesstionFactory 닫기

Hibernate를 사용하는 이유(예: . 장점):

1. 데이터베이스에 대한 JDBC 액세스 코드가 캡슐화되어 데이터 액세스 계층의 지루하고 반복적인 코드가 크게 단순화됩니다.

2. Hibernate는 JDBC와 뛰어난 ORM 구현을 기반으로 하는 주류 지속성 프레임워크입니다. 이는 DAO 레이어의 코딩 작업을 크게 단순화합니다

3. 최대 절전 모드는 투명성을 달성하기 위해 바이트 코드 향상 프로그램 대신 Java 반사 메커니즘을 사용합니다.

4. 최대 절전 모드 매핑의 유연성이 뛰어납니다. 다양한 관계형 데이터베이스와 일대일부터 다대다까지 다양하고 복잡한 관계를 지원합니다. N2, Hibernate의 get 메소드와 load 메소드의 차이점

Hibernate는 데이터 메소드가 데이터베이스에 존재해야 한다는 점입니다. E Hibernate는 GET 메소드에 대한 실제 데이터를 가져와야 한다는 점을 확신할 수 있습니다. 실제 데이터, 그렇지 않으면 Null을 반환합니다.

자세한 소개:

1. get 메서드의 경우 Hibernate는 해당 ID에 해당하는 데이터가 있는지 먼저 확인하고, 그렇지 않은 경우에는 두 번째 수준 캐시를 검색합니다. 데이터베이스를 쿼리합니다. 데이터베이스에 없으면 null이 반환됩니다.

2. 로드 메소드가 엔터티 객체를 로드할 때 매핑 파일의 클래스 수준에서 지연 속성에 따라 구성됩니다(기본값은 true).

사례별로 논의:

                                  (1) true인 경우 먼저 세션 캐시에서 검색하여 해당 ID에 해당하는 개체가 있는지 확인합니다. 그렇지 않은 경우 지연 로딩을 사용하여 엔터티의 프록시를 반환합니다. 클래스 객체(프록시 클래스는 엔터티 클래스의 하위 클래스이며 CGLIB에 의해 동적으로 생성됩니다). 객체가 실제로 사용될 때(OID 획득 제외), 두 번째 수준 캐시와 데이터베이스가 쿼리됩니다. 일치하는 레코드가 없으면 ObjectNotFoundException이 발생합니다. +              (2) false인 경우 검색 순서는 get 메소드와 동일하지만, 결국 조건에 맞는 레코드가 발견되지 않으면 ObjectNotFoundException이 발생합니다.

3. Hibernate 지연 로드는 어떻게 이루어지나요?

Hibernate3는 속성의 지연 로딩 기능을 제공합니다. Hibernate가 데이터를 쿼리할 때 데이터는 메모리에 존재하지 않고, 프로그램이 실제로 데이터를 실행할 때 객체가 메모리에 존재하게 됩니다. 이를 통해 서버의 메모리 오버헤드를 절약할 수 있어 서버 성능이 향상됩니다. .

4. Hibernate에서 클래스 간의 관계를 구현하는 방법은 무엇입니까?

클래스 간의 관계는 주로 테이블과 테이블 간의 관계에 반영됩니다. 우리는 이를 모두 프로그램에 넣습니다. 함께 사용되며 구성 파일에서 다대일, 일대다 및 다대다를 통해 작동합니다.


5. Hibernate에서 update()와 saveOrUpdate()의 차이점은 무엇입니까?

saveOrUpdate():

1. 객체가 이 세션에 이미 지속되어 있는 경우 아무 작업도 수행하지 마세요.

2. 이 세션과 연결된 다른 객체가 동일한 지속성 식별자(식별자)를 갖는 경우 예외를 발생시킵니다.

3. 다음과 같은 경우 객체에 영구 식별자(식별자) 속성이 없으면 해당 객체에 대해 save()를 호출하세요

4. 객체의 영구 식별자(식별자)가 새로 인스턴스화된 객체임을 나타내면 해당 객체에 대해 save()를 호출하세요. )

5. 객체에 버전 정보( 또는 를 통해)가 있고 버전 속성 값이 새로 인스턴스화된 객체임을 나타내는 경우 save()를 호출합니다. 그렇지 않으면 이 객체를 업데이트()하세요.

update():

은 무료 엔터티 객체를 직접 업데이트하는 것입니다.

6. Hibernate의 캐싱 메커니즘에 대해 이야기해 보겠습니다.

1. 1차 캐시: 내부 캐시는 Hibernate에 존재하며 애플리케이션 트랜잭션 레벨 캐시입니다.

2. 두 번째 수준 캐시: 애플리케이션 수준 캐시, 분산 캐시.

사용 시나리오: 데이터는 제3자에 의해 수정되지 않으며, 데이터 크기는 허용 가능한 범위 내에 있으며, 데이터 업데이트 빈도는 낮고, 동일한 데이터가 시스템에서 자주 사용되며, 중요하지 않은 데이터

3. 타사 캐시(예: ehcache 등)를 도입합니다.

7. 최대 절전 모드를 최적화하는 방법은 무엇입니까?

1. 단방향 일대다 연결 대신 양방향 일대다 연결을 사용하세요.

2. 일대일 연결 대신 유연하게 사용하세요.

3. 대신 다대일

4. 객체 캐시를 구성하고 컬렉션 캐시를 사용하지 마세요

5. 일대다 컬렉션에는 Bag을 사용하고 다대다 컬렉션에는 Set을 사용하세요.

6. 상속된 클래스

7. 테이블 필드가 적어야 하며 테이블 연관이 너무 많아도 걱정하지 마세요. 2단계 캐시는 허리를 지원합니다. 8. Hibernate의 지연 로딩과 OpenSessionInView

지연 로딩에 대해 이야기하세요. 세션 범위 내에서 로드된 다음 로드되어야 합니다. 즉, 요청 중에 세션이 항상 열려 있어 세션에서 지연 로드가 전제됩니다.

(영상 추천:

java 강좌

)

9, struts2

1의 작업 흐름을 간략하게 설명합니다. 1. 클라이언트 브라우저가 HTTP 요청을 발행합니다.


2. web.xml 구성에 따라 FilterDispatcher가 요청을 받습니다.

3. struts.xml 구성에 따라 호출해야 하는 Action 클래스와 메서드를 찾아 IoC를 통해 Aciton에 값을 주입합니다.

4. 액션은 비즈니스 로직 구성요소를 호출하여 비즈니스 로직을 처리합니다.

5. Action이 실행된 후 struts.xml의 구성에 따라 해당 반환 결과를 찾아 해당 페이지로 이동합니다.

6. 클라이언트 브라우저에 HTTP 응답을 반환합니다.

10. Struts의 디자인 패턴에 대해 이야기해 보겠습니다.

MVC 패턴

1. 웹 애플리케이션이 시작되면 ActionServlet이 로드되고 초기화됩니다.


2. 사용자가 양식을 제출하면 구성된 ActionForm 객체가 생성됩니다.

3. ActionServlet은 Struts-config.xml 파일에 구성된 설정을 기반으로 양식 확인이 필요한지 여부를 결정합니다. 필요한 경우 ActionForm의 Validate()를 호출하여 확인하고 선택합니다. 요청을 보낼 액션입니다. Action이 없으면 ActionServlet은 먼저 이 객체를 생성한 다음 Action의 Execute() 메서드를 호출합니다. 4. Execute()는 ActionForm 객체에서 데이터를 가져와서 비즈니스 로직을 완성합니다. ActionForward 객체를 반환하고 ActionServlet은 고객 요청을 ActionForward 객체가 지정한 jsp 구성 요소로 전달합니다.

5. ActionForward 객체가 지정한 jsp는 동적 웹 페이지를 생성하여 고객에게 반환합니다.

11, Struts의 장점과 단점

장점:

1. 명확한 구조로 MVC 모델을 구현하므로 개발자는 비즈니스 로직 구현에만 집중할 수 있습니다.

2. Struts에는 풍부한 태그가 있습니다. ' 태그 라이브러리(Taglib)를 유연하게 사용하면 개발 효율성을 크게 향상시킬 수 있습니다. 또한, 국내 JSP 개발자의 경우 JSP에 포함된 공통 태그를 사용하는 것 외에 자체 태그를 개발하는 경우는 거의 없습니다. 아마도 Struts가 좋은 출발점이 될 것입니다.


3. 페이지 탐색. 실제로 페이지 탐색은 시스템의 맥락을 더욱 명확하게 만들어줄 것입니다. 구성 파일을 통해 전체 시스템의 다양한 부분 간의 연결을 파악할 수 있으므로 향후 유지 관리에 큰 이점이 있습니다. 이러한 이점은 다른 개발자 그룹이 프로젝트를 맡을 때 더욱 분명해집니다.

4. 예외 처리 메커니즘 제공

5. 데이터베이스 연결 풀 관리

6. I18N 지원

단점:

1. 디스플레이 계층으로 이동할 때마다 앞으로 구성해야 합니다. Display Layer는 대부분 JSP로 바로 전달되는 것으로 알고 있는데, Redirection의 경우 Forward를 설정해야 하는데, Display Layer JSP가 10개라면 Struts를 10번씩 설정해야 하는데, 여기에는 포함되지 않습니다. 디렉터리 및 파일이 변경되면 Forward를 다시 수정해야 합니다. 구성이 수정될 때마다 전체 프로젝트를 재배포해야 하며, 복잡하고 복잡한 시스템에서 비즈니스가 변경되면 tomcate와 같은 서버를 다시 시작해야 합니다. 빈번한 변경으로 인해 이러한 작업은 간단하고 상상할 수 없습니다. 지금은 수십, 수백 명의 사람들이 우리 시스템을 동시에 온라인으로 사용하고 있습니다. 제가 얼마나 고민하고 있는지 짐작하실 수 있을 것입니다.

2. Struts Action은 스레드로부터 안전해야 하며 하나의 인스턴스만 모든 요청을 처리할 수 있도록 허용합니다. 따라서 작업에 사용되는 모든 리소스는 균일하게 동기화되어야 하며 이로 인해 스레드 안전성 문제가 발생합니다.

3. 테스트가 불편하다 Struts의 각 Action은 웹 레이어와 결합되어 테스트가 웹 컨테이너에 의존하고 단위 테스트도 구현하기 어렵습니다. 그러나 단위 테스트를 구현할 수 있는 Junit 확장 도구 Struts TestCase가 있습니다.

4. 유형 변환 Struts의 FormBean은 모든 데이터를 문자열 유형으로 처리하며 유형 변환을 위해 Commons-Beanutils 도구를 사용할 수 있습니다. 그러나 해당 변환은 모두 클래스 수준에서 이루어지며 변환 유형은 구성할 수 없습니다. 유형 변환 중에 사용자에게 오류 메시지를 반환하는 것도 매우 어렵습니다.

5. Servlet에 대한 의존도가 너무 높습니다. Struts는 Action을 처리할 때 ServletRequest 및 ServletResponse에 의존해야 하므로 Servlet 컨테이너를 제거할 수 없습니다.

6. 프론트 엔드 표현 언어의 경우 Struts는 JSTL을 통합하므로 주로 JSTL 표현 언어를 사용하여 데이터를 얻습니다. 그러나 JSTL의 표현 언어는 Collection 및 인덱스 속성을 처리하는 데 매우 약합니다.

7. Action의 실행을 제어하기가 어렵습니다. Struts가 Action을 생성할 때 실행 순서를 제어하는 ​​것은 매우 어렵습니다. 기능적 요구 사항을 실현하기 위해 서블릿을 다시 작성해야 할 수도 있습니다.

8. Action 실행 전후 처리 Struts에서 Action을 처리할 때 클래스 계층 구조를 기반으로 하기 때문에 Action 처리 전후에 작업이 어렵습니다.

9. 이벤트에 대한 지원 부족 Struts에서 폼은 실제로 Action 클래스(또는 DispatchAction)에 해당합니다. 즉, Struts에서 폼은 실제로 하나의 이벤트에만 해당합니다. , 애플리케이션 이벤트는 구성 요소 이벤트에 비해 대략적인 이벤트입니다.

12. 스프링을 사용하는 이유(즉, 장점)?

1. Spring은 EJB 사용 여부에 관계없이 중간 계층 객체를 효과적으로 구성할 수 있습니다. J2EE API용으로 특별히 설계된 Struts 또는 기타 프레임워크를 사용하는 경우 Spring은 나머지 문제를 해결하기 위해 최선을 다합니다.

2. Spring은 많은 프로젝트에서 흔히 발생하는 과도한 싱글톤 사용을 제거할 수 있습니다. 싱글톤을 과도하게 사용하면 시스템의 테스트 가능성과 객체 지향성이 저하됩니다.

3. 다양한 애플리케이션과 프로젝트에서 일관된 방식으로 구성 파일을 처리함으로써 Spring은 다양한 사용자 정의 형식의 속성 파일이 필요하지 않습니다. 특정 클래스가 어떤 마법 속성이나 시스템 속성을 찾고 있는지 궁금하고 이를 위해 Javadoc이나 소스 코드를 읽어야 하는 경우가 있습니까? Spring을 사용하면 클래스의 JavaBean 속성만 보면 됩니다. Inversion of Control(아래 설명)을 사용하면 이러한 단순화를 달성하는 데 도움이 됩니다.

4. Spring은 클래스가 아닌 프로그래밍 인터페이스 비용을 거의 0으로 줄임으로써 좋은 프로그래밍 습관 개발을 촉진할 수 있습니다.

5. Spring은 Spring을 사용하여 생성된 애플리케이션이 API에 최소한으로 의존하도록 설계되었습니다. Spring 애플리케이션의 대부분의 비즈니스 객체는 Spring에 대한 종속성이 없습니다.

6. Spring으로 구축된 애플리케이션은 단위 테스트가 쉽습니다.

7. Spring은 EJB 사용을 애플리케이션 아키텍처의 불가피한 선택이 아닌 구현 선택으로 만들 수 있습니다. 호출 코드에 영향을 주지 않고 비즈니스 인터페이스를 구현하기 위해 POJO 또는 로컬 EJB를 사용하도록 선택할 수 있습니다.

8. Spring은 EJB를 사용하지 않고도 많은 문제를 해결할 수 있도록 도와줍니다. Spring은 많은 웹 애플리케이션에 적합한 EJB 대체품을 제공할 수 있습니다. 예를 들어 Spring은 EJB 컨테이너를 통하지 않고 AOP를 사용하여 선언적 트랜잭션 관리를 제공할 수 있으며 단일 데이터베이스만 처리해야 하는 경우 JTA 구현도 필요하지 않습니다.

9. Spring은 JDBC를 사용하든 O/R 매핑 제품(예: Hibernate)을 사용하든 데이터 액세스를 위한 일관된 프레임워크를 제공합니다.

13 스프링 트랜잭션을 구현하기 위해 알고 있는 몇 가지 방법을 나열하세요

(1), 프로그래밍 방식 트랜잭션 관리: 코드를 수동으로 작성해야 하며 실제 개발에서는 거의 사용되지 않습니다.

(2) 선언적용 TransactionProxyFactoryBean의 설명을 기반으로 합니다. 트랜잭션 관리를 위해서는 트랜잭션 관리를 수행하는 각 클래스에 해당하는 구성을 만들어야 합니다

​​​​(3) AspectJ의 XML을 기반으로 하는 선언적 트랜잭션 관리는 클래스를 변경할 필요가 없으며 XML 파일에서 구성하기만 하면 됩니다

​​(4) , 주석 기반 선언적 트랜잭션 관리, 간단한 구성, 비즈니스 계층 클래스에 주석 추가 필요

14, Spring 트랜잭션의 격리 수준 및 전파 동작에 대해 이야기

격리 수준:

- DEFAULT 데이터베이스의 기본 격리 수준을 사용합니다.

- READ_UNCOMMITTED는 더티 읽기, 반복 불가능한 읽기 및 팬텀 읽기를 발생시킵니다.

- READ_COMMITTED는 반복 읽기 및 팬텀 읽기를 발생시킵니다.

- REPEATABLE_READ는 팬텀 읽기를 발생시킵니다.

- SERIALIZABLE이 가장 안전합니다. , 그러나 비용은 가장 높으며 성능 영향은 매우 심각합니다

및 전파 라인:

- 필수 트랜잭션이 존재하면 트랜잭션에 통합되고, 존재하지 않으면 트랜잭션을 생성합니다

- 지원 트랜잭션이 존재하면 트랜잭션에 통합되고, 존재하지 않으면 트랜잭션이 생성되지 않습니다.

- 필수 트랜잭션이 존재하면 트랜잭션에 통합되고, 존재하지 않으면 오류가 발생합니다. 예외

- REQUIRES_NEW는 항상 새 트랜잭션을 생성합니다

- NOT_SUPPORTED는 트랜잭션이 존재하는 경우 일시 중지하고 항상 비트랜잭션 작업을 수행합니다.

- NEVER는 항상 비트랜잭션을 실행하고 트랜잭션이 현재 존재하는 경우 예외를 발생시킵니다.

- NESTED 임베디드 스타일 업무

15. DI 메커니즘이란 무엇인가요?
        종속성 주입(Dependency Insertion)과 제어 역전(Inversion of Control)은 동일한 개념입니다. 특히, 기존 프로그래밍 프로세스에서 역할이 다른 역할의 지원을 필요로 하는 경우 일반적으로 호출자가 인스턴스를 생성합니다. 수신자.

   그러나 봄에는 피호출자를 생성하는 작업이 더 이상 호출자가 수행하지 않으므로 이를 제어 역전이라고 합니다. 호출 수신자를 생성하는 작업은 스프링에 의해 수행되고 호출자가 주입됩니다
그래서 종속성 주입이라고도 합니다.动 Spring은 주입된 두 가지 방법, 즉 주입 주입과 구성 주입을 동적으로 관리합니다. ㅋㅋㅋ                    out out out out                       out Over Over Over Through Through Over Through Over through Over through Over through Over over through over through over through out over through through through through through through through through through through through through through through over through over through over through over through over through through through through through through through through over through over through over through over through over through through through through through through through over through over through over through over through over through through through through through through through through over through over through over through over through out out over through through through through through through over through over through over through over through out over through through through through through through over through over through over through over through over through through through through through through through through over through over through over through over through out out over through through through through through through over through over through over through over through out over through through through through through through over through over through over through over through out out over through through through through through through over through over through over through over through out out over through through through through through through over through over through over through over through out out over through through through through through through over through over through over through over through out out over through through through 통해 통해 통해 통해 통해 통해 통해 통해 통해 통해 통해 통해 통해 통해 통해 통해 통과 통해 부터부터부터부터부터 끝까지부터 내부를 통해 내려가서부터 끝까지 내버려져서 to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to to 에 ?

16.AOP란 무엇인가요?
관점 지향 프로그래밍(AOP)은 Spring의 종속성 주입(DI)을 개선합니다.

관점 지향 프로그래밍은 주로 Spring의 두 가지 측면에서 나타납니다.

1.관점 지향 프로그래밍은 선언적 트랜잭션 관리를 제공합니다.

2.spring은 사용자 정의를 지원합니다.
추천 튜토리얼:

Java 시작하기


위 내용은 2023년 최신 SSH 프레임워크 인터뷰 질문 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Java知音에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제