자바 면접 문제 스퍼트 9 일 째--마 이 바 티 스

면접 문제 1:ORM 프레임 워 크 를 어떻게 이해 합 니까?흔히 볼 수 있 는 ORM 프레임 워 크 는 어떤 것들 이 있 습 니까?
진지 하 게 대답 하 다. (Object Relational Mapping, ORM) 은 주로 프로그램 대상 이 데이터베이스 데이터 와 관련 된 매 핑 을 실현 한다.
在这里插入图片描述
JAVA 프로 그래 밍 은 데이터베이스 와 접촉 하 는 것 을 피 할 수 없다.그러면 데이터 베 이 스 를 어떻게 효율 적 이 고 편리 하 게 조작 하 는 지 하 는 것 도 대응 해 야 할 문제 이다.원생 의 JDBC 기반 방식 은 매우 비효 율 적 이 고 을 많이 써 야 하기 때문에 선택 할 가치 가 없다.ORM JDBC ,우 리 는 반복 적 으로 바퀴 를 만 들 필요 가 없습니다.현재 이미 많은 우수한 ORM 프레임 워 크 를 사용 할 수 있 습 니 다.흔히 볼 수 있 는 것 은 Mybatis(batis),Hibernate,Jpa,Jdo 등 입 니 다.
장점:
  • ORM 은 JDBC 에 대한 포장 으로 JDBC 의 각종 존재 문 제 를 해결 하고 효율 을 높 인 다
  • 개발 을 더욱 대상 화 시 켰 다
  • 이식 성 이 강하 다
  • 은 데이터 캐 시 와 같은 부가 기능 을 편리 하 게 도입 할 수 있다.
  • 단점:
  • 자동화 로 관계 데이터 베 이 스 를 매 핑 하려 면 소량의 시스템 성능 을 소모 해 야 한다.
  • 다 표 련 사,where 조건 이 복잡 하 다 는 조 회 를 처리 할 때 ORM 의 문법 은 복잡 해진 다.
  • 시중 주류 ORM 프레임 워 크:
  • EJB:중량급,고비 용의 ORM 기술 로 JPA 를 지원 합 니 다.특히 EJB 3 저 침입 식 의 설 치·계 는 Annotation
  • 을 증가 시 켰 습 니 다.
  • Hibernate:오픈 소스,JPA 지원,JBoss 의 지구 층 솔 루 션
  • 으로 선정 되 었 습 니 다.
  • iBatis:"SQL Mapping"프레임 워 크,Apache 소프트웨어 펀드 의 하위 프로젝트 를 구 글 코드 로 전환 한 후 ibatis 3.x 는 Mybatis
  • 으로 정식 이름 을 바 꾸 었 다.
  • Spring Data JPA:Spring 프레임 의 하위 모듈
  • TopLink:Oracle 회사 의 제품
  • Open JPA:Apache 소프트웨어 펀드 의 오픈 소스 프로젝트
  • 추궁 1:모두 Mybatis 를 사용 하고 있 습 니 다.Mybatis 는 어떤 장점 이 있 습 니까?
  • Mybatis 입문 간단;사용 에 있어 서 SQL 작성 에 익숙 한 학생 들 에 게 는 기본적으로 배 우 는 것 과 사용 하 는 것 이다.
  • Mybatis jdbc ,spring jdbc 가 실현 하고 자 하 는 세부 사항 이 매우 많 습 니 다.예 를 들 어 Mybatis 는 더 많은 대상 맵 을 봉 인 했 습 니 다.
  • ,인터페이스 개발 에 직면 하여 효율 이 높 고 분 단위 로 sql 을 해결 합 니 다.
  • 복잡 한 SQL 에 대해 springJDBC 는 작성 이 번 거 롭 고 동적 SQL 구문 디자인 도 번 거 로 우 며 이에 비해 Mybatis 는 더욱 유연 하고 인성 화 됩 니 다.
  • my batis 의 높이 패 키 징 으로 프로그래머 가 업무 층 에 집중 할 수 있 고 개발 효율 이 높다.그래서 my batis 를 선택 한 개발 회사 가 많 습 니 다.
  • 면접 문제 2:Hibernate 와 Mybatis 를 비교 해 보면 어떤 견 해 를 가지 고 있 습 니까?
    진지 하 게 대답 하 다.
    Hibernate 와 MyBatis 는 Session Factory Buider 를 통 해 XML 설정 파일 로 Session Factory 를 생 성 한 다음 Session Factory 에서 Session 을 생 성 하고 마지막 으로 Session 에서 실행 사무 와 SQL 문 구 를 열 수 있 습 니 다.그 중에서 도 Session Factory Buider,Session Factory,Session 의 생명 주 기 는 많 지 않다.
    Hibernate 와 MyBatis 는 모두 JDBC 와 JTA 사무 처 리 를 지원 합 니 다.
    Mybatis 우세
  • MyBatis 는 더욱 세밀 한 SQL 최 적 화 를 할 수 있 고 조회 필드 를 줄 일 수 있다.
  • MyBatis 는 쉽게 파악 할 수 있 지만 Hibernate 는 문턱 이 높다.
  • Hibernate 우세
  • Hibernate 의 DAO 층 개발 은 MyBatis 보다 간단 하 며,Mybatis 는 SQL 과 결과 맵 을 유지 해 야 합 니 다.
  • Hibernate 는 대상 에 대한 유지보수 와 캐 시 를 MyBatis 보다 잘 하고 삭제 와 검 사 를 하 는 대상 에 대한 유지보수 가 편리 합 니 다.
  • Hibernate 데이터 베 이 스 는 이식 성 이 좋 고 MyBatis 의 데이터 베 이 스 는 이식 성 이 좋 지 않 으 며 서로 다른 데이터 베 이 스 는 서로 다른 SQL 을 써 야 합 니 다.
  • Hibernate 는 더 좋 은 2 급 캐 시 메커니즘 을 가지 고 있어 제3자 캐 시 를 사용 할 수 있다.MyBatis 자체 가 제공 하 는 캐 시 메커니즘 이 좋 지 않 습 니 다.
  • 在这里插入图片描述
    어떤 위 에서 발췌 한 경전 총 결:Hibernate
  • Hibernate 기능 이 강하 고 데이터 베 이 스 는 무관 성 이 좋 으 며 O/R 매 핑 능력 이 강하 다.만약 에 Hibernate 에 상당히 정통 하고 Hibernate 에 대해 적당 한 패 키 징 을 했다 면 프로젝트 의 전체 지구 층 코드 는 상당히 간단 할 것 이다.써 야 할 코드 가 적 고 개발 속도 가 빠 르 며 매우 시원 할 것 이다.
  • 하 이 버 네 이 트 의 단점 은 학습 문턱 이 낮 지 않 고 문턱 이 높 아야 한 다 는 것 이다.그리고 O/R 맵 을 어떻게 디자인 하 는 지,성능 과 대상 모델 간 에 어떻게 균형 을 잡 는 지,그리고 하 이 버 네 이 트 를 어떻게 잘 사용 하 는 지 에 대한 경험 과 능력 이 필요 하 다 는 것 이다.
  • MyBatis
  • MyBatis 입문 은 간단 하 다.즉,배 워 서 바로 사용 할 수 있 고 데이터 베 이 스 를 조회 하 는 자동 대상 바 인 딩 기능 을 제공 하 며 좋 은 SQL 사용 경험 을 이 어 갔 기 때문에 그렇게 높 은 대상 모델 이 요구 하지 않 는 프로젝트 에 있어 완벽 하 다.
  • MyBatis 의 단점 은 구조 가 비교적 초라 하고 기능 이 부족 하 다 는 것 이다.데이터 바 인 딩 코드 를 간소화 하지만 전체 바 텀 데이터 베 이 스 를 조회 할 때 실제 적 으로 자신 이 써 야 하고 작업량 도 비교적 많 으 며 빠 른 데이터 베이스 수정 에 적응 하기 어렵다.깊이 추궁:1:Hibernate 와 Mybatis 의 캐 시 메커니즘 은 어떤 차이 가 있 습 니까?
  • 같은 점:
    Hibernate 와 Mybatis 의 2 급 캐 시 는 시스템 의 기본 캐 시 체 제 를 사용 하 는 것 을 제외 하고 자신의 캐 시 를 실현 하거나 다른 제3자 캐 시 방안 을 위해 어댑터 를 만들어 캐 시 행 위 를 완전히 덮어 쓸 수 있 습 니 다.
    다른 점:
    Hibernate 의 2 급 캐 시 설정 은 Session Factory 에서 생 성 된 설정 파일 에 상세 하 게 설정 한 다음 구체 적 인 표-대상 맵 에 설정 하 는 것 이 캐 시 입 니 다.
    MyBatis 의 2 급 캐 시 설정 은 각각 구체 적 인 표-대상 맵 에서 상세 하 게 설정 되 어 있 으 며,서로 다른 표 에 대해 서로 다른 캐 시 체 제 를 사용자 정의 할 수 있 습 니 다.또한 Mybatis 는 네 임 스페이스 에서 같은 캐 시 설정 과 인 스 턴 스 를 공유 하고 Cache-ref 를 통 해 이 루어 집 니 다.
    두 가지 비교:8195°8195°Hibernate 는 조회 대상 에 대해 좋 은 관리 체 제 를 가지 기 때문에 사용 자 는 SQL 에 관심 을 가 질 필요 가 없다.따라서 2 급 캐 시 를 사용 할 때 더러 운 데이터 가 발생 하면 시스템 이 오 류 를 보고 하고 알려 줍 니 다.
    한편,MyBatis 는 이 방면 에서 2 급 캐 시 를 사용 할 때 특히 조심해 야 한다.데이터 업데이트 작업 의 파급 범 위 를 완전히 확정 하지 못 하면 Cache 의 맹목적 인 사용 을 피 할 수 있 습 니 다.그렇지 않 으 면 더러 운 데이터 의 출현 은 시스템 의 정상 적 인 운행 에 큰 위험 을 가 져 올 것 이다.
    면접 문제 3:Mybatis 의\#{}과${}은 어떤 차이 가 있 습 니까?
    진지 하 게 대답 하 다.
    
    -- #{}
    <select id="userLogin" parameterType="java.util.Map" resultMap="userResMap">
    select id, username, password, role
    from user
    where username = #{username}
    and password = #{password}
    </select>
    -- ${}
    <select id="userLogin" parameterType="java.util.Map" resultMap="userResMap">
    select id, username, password, role
    from user
    where username = ${username}
    and password = ${password}
    </select>
    
    1.\#들 어 오 는 데 이 터 를 문자열 로 생각 하고 자동 으로 들 어 오 는 데이터 에 더 블 따옴표 를 추가 합 니 다.
    예 를 들 어 where username=#{username}, 에 들 어 오 는 값 이 111 이면 sql 로 분 석 될 때의 값 은 where username="111"이 고 들 어 오 는 값 이 id 라면 sql 은 where username="id"로 분 석 됩 니 다.
    2.$들 어 오 는 데 이 터 를 sql 에 직접 표시 합 니 다.
    예 를 들 어 where username=${username}, 에 들 어 오 는 값 이 111 이면 sql 로 분 석 될 때의 값 은 where username=111 입 니 다.
    그렇다면 들 어 오 는 값 이 :;drop table user 이 라면;어떻게 되 는 거 야?분석 한 sql 은:
    
    select id, username, password, role from user where username=;drop table user;
    
    \#방식 은 sql 주입 을 어느 정도 방지 할 수 있 습 니 다.$방식 은 Sql 주입 을 방지 할 수 없습니다.
    $방식 은 일반적으로 데이터베이스 대상,예 를 들 어 표 이름 을 입력 하 는 데 사 용 됩 니 다. # $,“${xxx}” 과 같은 인 자 를 사용 하지 않 으 면 수 동 으로 여과 작업 을 잘 하여 sql 주입 공격 을 방지 해 야 합 니 다.
    MyBatis 에서 “${xxx}” 과 같은 형식의 매개 변 수 는 SQL 컴 파일 에 직접 참여 하여 주입 공격 을 피 할 수 없습니다.그러나 동적 표 이름과 열 명 과 관련 될 때 “${xxx}” 과 같은 매개 변수 형식 만 사용 할 수 있 습 니 다.따라서 이러한 매개 변 수 는 주입 을 방지 하기 위해 코드 에서 수 동 으로 처리 해 야 한다.
    종합 적 으로,우 리 는 MyBatis 의 매 핑 문 구 를 작성 할 때,가능 한 한 “#{xxx}” 과 같은 형식 을 사용 합 니 다.“${xxx}” 과 같은 인 자 를 사용 하지 않 으 면 SQL 주입 공격 을 막 기 위해 수 동 으로 여과 작업 을 해 야 합 니 다.
    깊이 추궁:
    추궁 1:sql 주입 이 무엇 입 니까?
    sql 주입 은 코드 주입 기술 로 데이터 구동 을 공격 하 는 응용 에 사 용 됩 니 다.악의 적 인 SQL 문 구 는 실 행 된 실체 필드 에 삽입 되 었 습 니 다(예 를 들 어 데이터 베 이 스 를 저장 하기 위해 공격 자 에 게)
    在这里插入图片描述
    SQL 주입 하면 모두 가 낯 설 지 않 을 것 이 라 고 믿 는 것 은 해커 학우 들 이 자주 사용 하 는 공격 방식 이다.공격 자 는 인터페이스의 폼 정보 나 URL 에 이상 한 SQL 세 션(예 를 들 어 “or ‘1'='1')을 입력 하면 파라미터 검사 가 부족 한 응용 프로그램 에 침입 할 수 있 습 니 다.
    그래서 우리 의 응용 에서 이런 공격 방식 에 대비 하기 위해 일 을 해 야 한다.일부 안전성 에 대한 요구 가 높 은 응용 프로그램(예 를 들 어 은행 소프트웨어)에서 SQL 문 구 를 모두 저장 과정 으로 바 꾸 는 방식 을 자주 사용 하여 SQL 주입 을 방지한다.이것 은 당연히 매우 안전 한 방식 이지 만,우 리 는 평소에 개발 할 때 이런 딱딱 한 방식 이 필요 하지 않 을 것 이다.
    2:my batis 는 어떻게 sql 주입 을 방지 합 니까?
    MyBatis 프레임 워 크 는 반자동 화 된 지구 층 프레임 워 크 로 서 SQL 문 구 는 우리 가 직접 작성 해 야 합 니 다.이 럴 때 SQL 주입 을 방지 해 야 합 니 다.사실 MyBatis 의 SQL 은'입력+출력'기능 을 가지 고 함수 와 유사 한 구조 로 위의 두 가지 예 를 참고 합 니 다.
    그 중에서 parameterType 은 입력 한 매개 변수 유형 을 표시 하고 resultType 은 출력 한 매개 변수 유형 을 표시 합 니 다.위의 글 에 응답 합 니 다.SQL 주입 을 막 으 려 면 당연히 입력 매개 변수 에 공 을 들 여야 합 니 다.위 코드 에 서 는\#의 입력 매개 변수 가 SQL 에 연 결 된 부분 을 사용 합 니 다.매개 변 수 를 입력 한 후 실 행 된 SQL 문 구 를 출력 하면 SQL 이 이 렇 습 니 다.
    
    select id, username, password, role from user where username=? and password=?
    어떤 인 자 를 입력 하 든 출력 된 SQL 은 이 렇 습 니 다.MyBatis 가 사전 컴 파일 기능 을 사용 하기 때문에 SQL 이 실행 되 기 전에 위의 SQL 을 데이터베이스 에 보 내 컴 파일 합 니 다.실행 할 때 컴 파일 된 SQL 을 직접 사용 하여 자리 표시 자 를 바 꿉 니 다."?"됐 습 니 다.SQL 주입 은 컴 파일 과정 에 만 작용 하기 때문에 이러한 방식 은 SQL 주입 문 제 를 잘 피 할 수 있다.
    총결산
    이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!

    좋은 웹페이지 즐겨찾기