2020년 봄 신규 Java 면접 질문(2)
1. 봄의 콩은 스레드로부터 안전한가요?
(관련 권장사항: java 인터뷰 질문)
Spring 컨테이너의 Bean이 스레드로부터 안전한지 여부는 컨테이너 자체가 Bean에 대한 스레드로부터 안전한 전략을 제공하지 않으므로 Bean이 스레드로부터 안전한지 여부를 알 수 있습니다. 스프링 컨테이너 자체에는 스레드 안전성 특성이 없지만 세부 사항은 여전히 특정 범위의 Bean과 함께 연구되어야 합니다.
2. Spring은 몇 개의 Bean 범위를 지원합니까?
스프링 컨테이너를 통해 Bean 인스턴스를 생성하면 Bean 인스턴스의 인스턴스화를 완료할 수 있을 뿐만 아니라 Bean에 대해 특정 범위를 지정할 수도 있습니다. Spring은 다음 5가지 범위를 지원합니다:
싱글톤: 싱글톤 모드. 전체 Spring IoC 컨테이너에서 싱글톤을 사용하여 정의된 Bean은 단 하나의 인스턴스만 갖습니다.
prototype: 프로토타입 모드, getBean 메소드를 통해 프로토타입 정의를 얻을 때마다. 컨테이너 Bean의 새로운 Bean 인스턴스가 생성됩니다
request: 각 HTTP 요청에 대해 request를 사용하여 정의된 Bean은 새 인스턴스를 생성합니다. 즉, 각 HTTP 요청은 다른 Bean 인스턴스를 생성합니다. 이 범위는 웹 애플리케이션에서 Spring을 사용할 때만 유효합니다.
세션: 각 HTTP 세션에 대해 세션에서 정의한 Bean Bean을 사용하여 새 인스턴스가 생성됩니다. 이 범위는 웹 애플리케이션에서 Spring을 사용할 때만 유효합니다.
globalsession: 세션을 사용하여 정의된 각 전역 HTTP 세션과 Bean은 새 인스턴스를 생성합니다. 일반적으로 이는 포틀릿 컨텍스트를 사용할 때만 유효합니다. 이 범위는 웹 애플리케이션에서 Spring을 사용할 때만 유효합니다. 더 일반적으로 사용되는 범위는 싱글톤과 프로토타입입니다. 싱글톤 범위 Bean의 경우 Bean을 요청할 때마다 동일한 인스턴스를 얻게 됩니다. 컨테이너는 Bean 인스턴스의 상태를 추적하고 Bean 인스턴스의 라이프사이클 동작을 유지하는 역할을 담당합니다.
Bean이 프로토타입 범위로 설정되면 프로그램이 이 ID로 Bean을 요청할 때마다 Spring은 새로운 Bean 인스턴스를 만들어 프로그램에 반환합니다. 이 경우 Spring 컨테이너는 Bean 인스턴스를 생성하기 위해 new 키워드만 사용합니다. 생성이 성공하면 컨테이너는 더 이상 인스턴스를 추적하지 않으며 Bean 인스턴스의 상태를 유지하지 않습니다.
빈의 범위를 지정하지 않으면 Spring은 기본적으로 싱글톤 범위를 사용합니다.
Java는 Java 인스턴스를 생성할 때 메모리를 적용해야 하며, 인스턴스를 삭제할 때 가비지 수집을 완료해야 합니다. 이러한 작업은 시스템 오버헤드를 증가시킵니다. 따라서 프로토타입 범위 Bean을 생성하고 삭제하는 데는 상대적으로 비용이 많이 듭니다. 싱글톤 범위의 Bean 인스턴스가 성공적으로 생성되면 재사용할 수 있습니다.
따라서 필요한 경우가 아니면 Bean을 프로토타입 범위로 설정하지 마십시오.
3. 스프링이 콩을 자동으로 조립하는 방법은 무엇인가요?Spring 컨테이너는 애플리케이션에서 Bean을 생성하고 ID를 통해 이러한 객체 간의 관계를 조정하는 역할을 담당합니다. 개발자로서 우리는 Spring에게 생성할 빈과 이들을 함께 연결하는 방법을 알려주어야 합니다.
Spring에서 Bean을 조립하는 방법에는 두 가지가 있습니다.
1. 암시적 Bean 검색 메커니즘 및 자동 조립
2. Java 코드 또는 XML의 명시적 구성
물론 이러한 방법을 함께 사용할 수도 있습니다.
4. 스프링 트랜잭션 구현 방법은 무엇입니까?프로그래밍 방식의 트랜잭션 관리는 POJO 기반 애플리케이션의 유일한 옵션입니다. 코드에서 BeginTransaction(), commit(), Rollback() 및 기타 트랜잭션 관리 관련 메서드를 호출해야 합니다. 이것이 프로그래밍 방식의 트랜잭션 관리입니다.
TransactionProxyFactoryBean 기반의 선언적 트랜잭션 관리
@Transactional 기반의 선언적 트랜잭션 관리
Aspectj AOP 기반 트랜잭션 구성
5. Spring의 트랜잭션 격리에 대해 이야기해 보세요.트랜잭션 격리 수준은 하나의 트랜잭션과 다른 병렬 트랜잭션에 의한 데이터 수정 간의 격리 정도를 나타냅니다. 여러 트랜잭션이 동시에 동일한 데이터에 액세스할 때 필요한 격리 메커니즘이 채택되지 않으면 다음과 같은 문제가 발생할 수 있습니다.
더티 읽기(Dirty read): 하나의 트랜잭션이 다른 트랜잭션에서 커밋되지 않은 업데이트 데이터를 읽습니다.
팬텀 읽기: 예를 들어 첫 번째 트랜잭션은 테이블의 데이터를 수정합니다. 예를 들어 이 수정에는 테이블의 "모든 데이터 행"이 포함됩니다. 동시에 두 번째 트랜잭션도 이 테이블의 데이터를 수정합니다. 이 수정은 테이블에 "새 데이터 행"을 삽입하는 것입니다.
그러면 첫 번째 트랜잭션을 실행한 사용자는 마치 환각에 빠진 것처럼 테이블에 아직 수정되지 않은 데이터 행이 있다는 것을 알게 됩니다.
비반복 읽기: 예를 들어 동일한 트랜잭션에서 두 개의 동일한 select 문이 연속적으로 실행되었습니다. 이 기간 동안 이 트랜잭션에서는 DDL 문이 실행되지 않았지만 연속적으로 얻은 결과는 일관성이 없습니다.
위 내용은 2020년 봄 신규 Java 면접 질문(2)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Maven은 Java 프로젝트 관리 및 건설을위한 표준 도구입니다. 답은 POM.XML을 사용하여 프로젝트 구조, 종속성 관리, 건설 라이프 사이클 자동화 및 플러그인 확장을 표준화한다는 사실에 있습니다. 1. pom.xml을 사용하여 groupId, artifactid, 버전 및 종속성을 정의하십시오. 2. MVNClean, 컴파일, 테스트, 패키지, 설치 및 배포와 같은 마스터 코어 명령; 3. 종속성 버전 및 충돌을 관리하기 위해 종속성 관리 및 제외를 사용합니다. 4. 다중 모듈 프로젝트 구조를 통해 대규모 응용 프로그램을 구성하고 부모 POM에 의해 균일하게 관리됩니다. 5.

setupamaven/gradleProjectwithJax-rsddependencies likejersey; 2. createarestresourceUsingAnnotationsSuchas@pathand@get;

Java를 사용하여 해시 값을 생성하려면 MessageDigest 클래스를 통해 구현할 수 있습니다. 1. MD5 또는 SHA-256과 같은 지정된 알고리즘의 인스턴스를 가져옵니다. 2. 암호화 할 데이터를 전달하려면 .update () 메소드를 호출하십시오. 3. 해시 바이트 배열을 얻으려면 .digest () 메소드를 호출하십시오. 4. 바이트 배열을 읽기를 위해 16 진수 문자열로 변환합니다. 큰 파일과 같은 입력의 경우 청크로 읽고 .update ()를 여러 번 호출하십시오. 보안을 보장하기 위해 MD5 또는 SHA-1 대신 SHA-256을 사용하는 것이 좋습니다.

블록, 해시, 체인 구조, 합의 메커니즘 및 불변성을 포함한 블록 체인의 핵심 구성 요소를 이해합니다. 2. 데이터, 타임 스탬프, 이전 해시 및 비 세가 포함 된 블록 클래스를 생성하고 SHA-256 해시 계산 및 작업 채굴 증명을 구현합니다. 3. 블록 목록을 관리하고 블록 목록을 관리하고, 창세기 블록을 초기화하고, 새 블록을 추가하고 체인의 무결성을 확인하기 위해 블록 체인 클래스를 구축하십시오. 4. 메인 테스트 블록 체인을 작성하고 트랜잭션 데이터 블록을 차례로 추가하고 출력 체인 상태를 추가하십시오. 5. 선택적 향상 기능에는 트랜잭션 지원, P2P 네트워크, 디지털 서명, RESTAPI 및 데이터 지속성; 6. 생산 수준 오프닝에는 HyperledgerFabric, Web3J 또는 Corda와 같은 Java 블록 체인 라이브러리를 사용할 수 있습니다.

예, 공통 CSS 드롭 다운 메뉴는 JavaScript가없는 순수한 HTML 및 CSS를 통해 구현할 수 있습니다. 1. 중첩 UL과 Li를 사용하여 메뉴 구조를 구축하십시오. 2. 호버 의사 클래스를 사용하여 디스플레이를 제어하고 풀다운 컨텐츠의 숨기기; 3. 설정 위치 : 부모 Li의 상대적, 하위 메뉴는 위치를 사용하여 위치합니다. 절대; 4. 하위 메뉴가 표시되는 기본값 : 없음, 디스플레이가됩니다 : 호버링시 블록; 5. 다중 레벨 풀다운은 중첩을 통해 달성하고, 전환과 결합하고, 페이드 인 애니메이션을 추가하고 미디어 쿼리가있는 모바일 터미널에 조정될 수 있습니다. 전체 솔루션은 간단하며 JavaScript 지원이 필요하지 않으므로 대형에 적합합니다.

@Property Decorator는 속성의 판독, 설정 및 삭제 제어를 구현하기 위해 메소드를 속성으로 변환하는 데 사용됩니다. 1. 기본 사용 : @property를 통해 읽기 전용 속성을 정의하고, 예를 들어 반경을 기준으로 계산되고 직접 액세스되는 경우; 2. 고급 사용 : @name.setter 및 @name.deleter를 사용하여 속성 할당 확인 및 삭제 작업을 구현합니다. 3. 실제 응용 프로그램 : BankAccount와 같은 세터에서 데이터 검증을 수행하여 잔액이 음수가 아닌지 확인하십시오. 4. 이름 지정 사양 : 내부 변수는 접두사이며 속성 메소드 이름은 속성과 일치하며 통합 액세스 제어는 코드 보안 및 유지 관리에 사용됩니다.

먼저 JavaScript를 사용하여 사용자 시스템 환경 설정과 로컬로 저장된 테마 설정을 얻고 페이지 테마를 초기화하십시오. 1. HTML 구조에는 주제 스위칭을 트리거하는 버튼이 포함되어 있습니다. 2. CSS 사용 : 루트는 밝은 테마 변수를 정의하기 위해 루트, .dark-mode 클래스는 어두운 테마 변수를 정의하고 var ()를 통해 이러한 변수를 적용합니다. 3. JavaScript는 색채를 선호하는 것을 감지하고 초기 테마를 결정하기 위해 LocalStorage를 읽습니다. 4. 버튼을 클릭 할 때 HTML 요소에서 Dark-Mode 클래스를 전환하고 현재 상태를 LocalStorage에 저장합니다. 5. 모든 색상 변경 사항은 0.3 초 전환 애니메이션을 동반하여 사용자를 향상시킵니다.

Flexbox 또는 그리드를 사용하여 전체 화면 레이아웃을 달성 할 수 있습니다. 핵심은 페이지의 최소 높이를 뷰포트 높이 (Min-Height : 100VH)로 만드는 것입니다. 2. Flex : 1 또는 그리드 테드 플레이트 열 : Auto1frauto를 사용하여 콘텐츠 영역이 나머지 공간을 차지하게합니다. 3. 상자 크기 설정 : 마진이 컨테이너를 초과하지 않도록 테두리 박스; 4. 응답 미디어 쿼리로 모바일 경험을 최적화합니다. 이 솔루션은 우수한 구조와 호환되며 로그인 페이지, 대시 보드 및 기타 시나리오에 적합하며 수직 센터링 및 전체 뷰포트가있는 전체 화면 페이지 레이아웃을 실현합니다.
