CodeGym/Java Blog/무작위의/Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요. 6부
John Squirrels
레벨 41
San Francisco

Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요. 6부

무작위의 그룹에 게시되었습니다
회원
안녕하세요, 월드! 모든 개발자가 성장을 멈추지 않는 것이 중요합니다. 결국, 그만두면 수요가 줄어들고 취업 시장에서 완전히 탈락할 위험이 있습니다. IT 세계는 끊임없이 발전하고 발전하고 있습니다. 여러분도 이에 맞춰 나아가야 합니다. 그러나 동시에 "클래식"(고전적인 소프트웨어 개발 주제)을 잊지 않도록 항상 최신 기술을 적용할 수는 없습니다. 오늘 저는 Java 개발자를 위한 "고전적인 주제"에 대한 토론을 계속하고 싶습니다. Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요.  파트 6 - 1나는 내 대답이 최종적인 말이 아니라는 점을 지적하겠습니다. 이것은 단지 정답에 대한 나의 견해일 뿐입니다. 귀하는 그 중 일부에 동의하지 않을 수도 있습니다. 괜찮으니 댓글로 여러분의 의견을 자유롭게 공유해 주세요. 기사 끝 부분에서 리뷰의 이전 부분에 대한 링크를 찾을 수 있습니다. Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요.  파트 6 - 2

라이브러리 및 표준

52. 최대 절전 모드란 무엇입니까? JPA와 최대 절전 모드의 차이점은 무엇입니까?

이 질문에 답하려면 먼저 JPA가 무엇인지부터 이해해야 할 것 같습니다. 간단한 Java 객체의 객체 관계형 매핑을 설명하고 이러한 객체를 저장, 검색 및 조작하기 위한 API를 제공하는 사양입니다. 즉, 관계형 데이터베이스(DB)는 상호 연결된 테이블 집합으로 표시됩니다. JPA는 객체가 관계형 데이터베이스와 상호 작용하는 방법을 설명하는 널리 채택된 표준입니다. 보시다시피 JPA는 추상적이고 무형의 것입니다. 그것은 아이디어 자체, 접근 방식과 같습니다. Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요.  파트 6 - 3그러나 Hibernate 는 JPA 패러다임을 구현하는 특정 라이브러리입니다. 즉, 이 라이브러리를 사용하여 데이터베이스의 데이터를 나타내는 개체(엔티티)를 통해 관계형 데이터베이스로 작업할 수 있습니다. 이 라이브러리는 JPA 이상에 매우 가깝다고 합니다. 그것이 인기를 얻은 이유일지도 모릅니다. 상상할 수 있듯이 그 인기는 추가 개발과 개선을 정당화했습니다. 또한 이 도구와 관련하여 가능한 질문과 불가능한 질문을 모두 이미 조사한 광범위한 커뮤니티에서 널리 사용되었습니다. Hibernate는 철저하게 연구되었으며, 밝혀진 바에 따르면 신뢰할 수 있습니다. Spring의 이상적인 JPA 구현에서도 일반적으로 내부적으로 Hibernate를 사용하는 데는 그럴 만한 이유가 있습니다.

53. 캐스케이딩이란 무엇입니까? Hibernate에서는 어떻게 사용되나요?

앞서 말했듯이 Hibernate에서의 통신은 엔터티라고 불리는 데이터 객체를 통해 발생합니다. 이러한 엔터티는 데이터베이스의 특정 테이블을 나타내며, 기억하시겠지만 Java 클래스에는 다른 클래스에 대한 참조가 포함될 수 있습니다. 이러한 관계는 데이터베이스에도 반영됩니다. 일반적으로 이는 외래 키(OneToOne, OneToMany, ManyToOne 관계의 경우)이거나 중간 테이블(ManyToMany 관계의 경우)입니다. 엔터티에 다른 관련 엔터티에 대한 참조가 있는 경우 @OneToOne, @OneToMany, @ManyToOne, @ManyToMany와 같은 관계 유형을 나타내기 위해 이러한 참조 위에 주석이 배치됩니다. 주석의 계단식 속성에서 이 관계에 대한 계단식 유형을 지정할 수 있습니다. JPA에는 엔터티와 상호 작용하기 위한 특정 방법(지속, 저장, 병합 ...)이 있습니다. 계단식 유형은 관련 데이터의 작동 방식을 표시하는 데 사용됩니다. 이러한 메서드는 대상 엔터티에서 사용됩니다. 그렇다면 계단식 전략(계단식 유형)은 무엇입니까? JPA 표준은 6가지 계단식 유형의 사용을 제공합니다.
  • PERSIST — 저장 작업이 계단식으로 발생합니다( save()persist() 메서드의 경우). 즉, 다른 엔터티와 연결된 엔터티를 저장하면 해당 엔터티도 데이터베이스에 저장됩니다(아직 데이터베이스에 없는 경우).

  • MERGE — 업데이트 작업이 계단식으로 발생합니다( merge() 메서드의 경우)

  • REMOVE — 삭제 작업이 계단식으로 발생합니다( remove() 메서드)

  • ALL — 한 번에 세 개의 계단식 작업 포함 — PERSISTMERGEREMOVE

JPA에는 데이터베이스의 데이터와 연결되고 현재 세션(연결)에 의해 제어되는 엔터티인 영구 엔터티라는 개념이 있습니다. 데이터베이스에 변경 사항을 저장하지 않고 변경하는 경우 데이터베이스의 엔터티 데이터는 계속 변경됩니다.
  • DETACH — 관련 엔터티는 세션( detach() 메서드)에 의해 관리되지 않습니다. 즉, 관련 엔터티의 데이터가 변경되면 데이터베이스의 데이터가 자동으로 업데이트되지 않습니다. 즉, 영구 데이터에서 분리 데이터로 변환됩니다(즉, 해당 엔터티는 JPA에서 관리되지 않습니다).

  • REFRESH — 데이터베이스의 데이터로 엔터티를 새로 고칠 때마다( refresh() — 분리된 개체를 새로 고침) 관련 엔터티도 새로 고쳐집니다. 예를 들어, 데이터베이스에서 가져온 데이터를 변경했는데 원래 값을 복원하려고 합니다. 이런 경우 이 작업이 유용할 것입니다.

Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요.  파트 6 - 4Hibernate는 이러한 표준 계단식 작업을 모두 지원하며 다음 세 가지 자체 기능도 도입합니다.
  • REPLICATE — 하나 이상의 데이터 소스가 있고 데이터를 동기화하려고 할 때 사용됩니다(Hibernate의 복제 방법). 모든 엔터티에는 문제 없이 생성될 수 있도록 식별자(id)가 있어야 합니다(동일한 엔터티가 서로 다른 데이터베이스에 대해 서로 다른 ID를 갖지 않도록 보장하기 위해).

  • SAVE_UPDATE — 계단식 저장/삭제(Hibernate의 saveOrUpdate 메소드용)

  • LOCK — DETACHED 작업 의 반대 : 분리된 엔터티를 다시 지속 상태로 변환합니다. 즉, 현재 세션이 엔터티를 다시 한 번 추적합니다.

계단식 배열 유형을 선택하지 않으면 엔터티에 대한 작업은 연관된 다른 엔터티에 영향을 미치지 않습니다.

54. Entity 클래스는 추상 클래스일 수 있나요?

JPA 사양2.1 엔터티 클래스 에 따르면 " 추상 클래스와 구상 클래스 모두 엔터티가 될 수 있습니다. " 따라서 대답은 '예'입니다. 추상 클래스는 엔터티가 될 수 있으며 @Entity 주석으로 표시될 수 있습니다.

55. 엔터티 매니저란 무엇인가요? 그것은 무엇을 담당합니까?

우선, EntityManager가 JPA 의 중요한 구성 요소라는 점에 주목하고 싶습니다 . 이는 엔터티와 데이터베이스의 상호 작용에 사용됩니다. 일반적으로 엔터티와 데이터베이스의 상호 작용을 위한 메서드는 엔터티에서 호출됩니다(지속, 병합, 제거, 분리)... 하지만 또한 이 구성 요소는 일반적으로 전체 애플리케이션에 대한 싱글톤이 아니라는 점에도 주목합니다. 이는 경량인 경우가 많으며 하나는 삭제되고 EntityManagerFactory를 사용하여 새 것이 생성됩니다 . EntityManagerFactory 가 DataSource 와 유사한 JDBC 와 평행을 이룬다면 EntityManager Connection 과 유사합니다 . 앞서 영구 엔터티는 현재 연결에 의해 관리되는 엔터티라고 언급했습니다. 이 엔터티는 현재 연결과 밀접하게 관련된 EntityManager 와 트랜잭션 열기/닫기를 담당하는 TransactionManager 에 의해 관리됩니다 . 아래 그림에서 엔터티의 수명 주기를 볼 수 있습니다. EntityManager는 관리 단계에 있을 때 엔터티를 관리합니다(엔티티가 EntityManager와 연결되어 있기 때문에 영구적인 경우 ) . 즉, 새 것이 아니며 제거되지도 않습니다. 엔터티가 새로 추가되거나 제거되면 EntityManager가 이를 관리하지 않기 때문에 해당 엔터티도 분리되었다고 말할 수 있습니다 . EntityManager 에는 다양한 전략이 있습니다 . 전체 애플리케이션에 대해 EntityManager 싱글톤을 갖거나 각 연결에 대해 매번 새로운 것을 생성할 수 있습니다. Spring을 사용하는 경우 EntityManager의 생성/삭제는 내부적으로 자동으로 관리됩니다(그러나 그렇다고 사용자 정의할 수 없다는 의미는 아닙니다 ^^). 하나 이상의 EntityManager가 지속성 컨텍스트를 형성한다는 점을 언급해야 합니다 . 지속성 컨텍스트는 엔터티 인스턴스가 데이터베이스의 유사한 엔터티와 동기화되는 환경입니다(앞서 말했듯이 이는 지속성 엔터티에만 작동합니다). JPA (제가 적극 권장하는) 에 대해 더 자세히 살펴보면 이 개념을 자주 접하게 될 것입니다. Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요.  파트 6 - 5

56. Assert 클래스란 무엇입니까? 왜 사용됩니까?

JPA 에서 그런 클래스에 대해 들어본 적이 없기 때문에 이 질문은 단위 테스트에 사용되는 JUnit 라이브러리에 있는 클래스를 참조하는 것으로 가정하겠습니다. 이 라이브러리에서 Assert 클래스는 코드 실행 결과를 확인하는 데 사용됩니다. 여기서 Assert는 코드의 특정 위치에 특정 상태/데이터가 있다는 주장을 의미합니다. 예를 들어 고양이를 생성하는 메서드를 테스트한다고 가정해 보겠습니다. 메소드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
Cat resultOfTest = createCat();
하지만 올바르게 생성되었는지 확인해야 합니다. 그렇죠? 따라서 createCat() 메서드 에서 얻은 cat에서 볼 것으로 예상되는 매개변수를 정확하게 사용하여 특정 cat( expectedCat )을 수동으로 생성합니다 . 그런 다음 Assert 클래스를 사용하여 결과를 확인합니다.
Assert.assertEquals(resultOfTest, expectedCat);
고양이가 다르면 AssertionError가 발생하여 예상한 결과를 얻지 못했다는 것을 알려줍니다. Assert 클래스에는 예상 결과를 확인하는 도움이 되는 다양한 작업을 다루는 다양한 메서드가 있습니다. 그 중 몇 가지는 다음과 같습니다.
  • AssertTrue(<boolean>) — 인수로 전달된 값은 true 일 것으로 예상됩니다.

  • AssertFalse(<boolean>) — 인수로 전달된 값은 false 일 것으로 예상됩니다.

  • AssertNotEquals(<object1>, <object2>) — 인수로 전달된 객체는 같음( false ) 을 사용하여 비교할 때 달라야 합니다.

  • AssertThrows(<ClassNameOfException>.class, <ExceptionObject>) — 두 번째 인수는 첫 번째 인수에서 발생하는 예외일 것으로 예상됩니다(예: 두 번째 인수는 일반적으로 필요한 유형의 예외를 발생시키는 메서드 호출입니다).

57. 자바의 String 클래스를 설명해보세요

String은 문자열 값(문자 시퀀스)을 저장하고 조작하는 표준 Java 클래스입니다. 이는 불변 클래스 입니다 ( 이전에 불변에 대해 여기에서 썼습니다 ). 즉, 이 클래스의 객체 데이터는 생성된 후에 변경할 수 없습니다. StringBuilderStringBuffer 클래스는 본질적으로 동일합니다 . 유일한 차이점은 둘 중 하나가 다중 스레드 환경( StringBuffer )에서 사용하기 위한 것이라는 점입니다. 이러한 클래스는 String 과 비슷 하지만 변경할 수 있다는 점에서 다릅니다 . 생성된 후에도 새 객체를 생성하지 않고도 해당 객체가 나타내는 문자열을 수정할 수 있습니다. 그들의 메소드는 표준 String 메소드와 다르며 문자열 조작을 위해 설계되었습니다(빌더라고 부르는 이유가 있습니다).

58. String 객체를 생성하는 방법은 무엇입니까? 어디서 생성되나요?

문자열을 생성하는 가장 일반적인 방법은 간단히 큰따옴표 안에 원하는 값을 지정하는 것입니다.
String str = "Hello World!";
new를 사용하여 명시적으로 수행할 수도 있습니다 .
String str = new String("Hello World!");
문자 배열에서 문자열을 만들 수도 있습니다.
char[] charArr = {'H','e','l','l','o',' ', 'W','o','r','l','d','!'};
String str = new String(charArr);
일부 객체에 대해 toString 메소드를 호출하여 이를 수행할 수 있습니다 .
String str = someObject.toString();
문자열을 반환하는 다른 메서드를 호출하여 이를 수행할 수 있습니다. 예:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str = reader.readLine();
문자열을 생성하는 방법은 매우 다양할 수 있다는 것을 이해합니다. String 개체가 생성 되면 문자열 풀 에 저장됩니다 . 이에 대해서는 아래 질문 중 하나에서 자세히 설명하겠습니다.

59. 두 개의 Java 문자열을 어떻게 비교하고 어떻게 정렬합니까?

Java는 비교를 수행하기 위해 이중 등호( == )를 사용합니다. int와 같은 간단한 값을 비교해야 하는 경우 이를 사용합니다. 그러나 이 방법은 본격적인 개체를 비교하는 데 적합하지 않습니다. 참조만 비교합니다. 즉, 참조가 동일한 개체를 가리키는지 여부를 비교합니다. 이는 == 를 사용하여 동일한 필드 값을 가진 두 객체를 비교하면 false 를 얻게 된다는 의미입니다 . 필드는 동일한 값을 갖지만 객체 자체는 메모리에서 다른 위치를 차지합니다. 문자열 객체는 믿을 수 없을 만큼 단순함에도 불구하고 여전히 객체입니다. == 를 사용하여 비교하는 것도 적절하지 않습니다(문자열 풀이 있음에도 불구하고). 적절한 해결책은 올바르게 작동하려면 재정의해야 하는 Object 클래스의 표준 equals 메서드입니다(기본적으로 비교를 위해 ==를 사용합니다 ). String 클래스 가 이를 재정의하므로 해당 구현을 사용합니다.
String firstStr = "Hello World!";
String secondStr = "Hello World!";
boolean isEquals = firstStr.equals(secondStr);
Java 개발자 직위에 대한 취업 면접의 질문과 답변을 살펴보세요.  파트 6 - 6우리는 평등에 대한 비교에 대해 이야기했습니다. 이제 정렬에 대한 비교를 알아 보겠습니다. 결국, 무언가를 정렬하려면 어떤 원리를 사용하여 정렬할지 알아야 합니다. 이를 수행하려면 표준 정렬 세트인 TreeSet을 사용할 수 있습니다. 이 데이터 구조는 레드-블랙 트리 알고리즘에 의존하며 지정된 정렬 원리에 따라 집합을 정렬합니다. 앞서 말했듯이 특정 유형의 개체를 정렬하는 방법을 이해해야 합니다. 정렬을 위한 비교 방법을 지정하려면 comparators 를 사용하세요 . 일반적으로 정렬하려는 클래스에 대해 구현해야 하지만 String 의 경우 이미 구현되어 있습니다. 따라서 우리는 문자열을 TreeSet에 추가하기만 하면 문자열 이 정렬됩니다.
TreeSet<String> sortedSet = new TreeSet<>();
sortedSet.add("B");
sortedSet.add("C");
sortedSet.add("A");
sortedSet.forEach(System.out::println);
콘솔 출력:
알파벳

60. 문자열을 문자로 변환하는 알고리즘을 제공하세요. 해당 코드를 작성하세요

앞서 말했듯 이 String 객체에는 다양하고 유용한 메서드가 많이 있습니다. 그 중 하나가 toCharArray 입니다 . 이 메서드는 문자열을 문자 배열로 변환합니다.
String str = "Hello world";
char[] charArr = str.toCharArray();
다음으로, 인덱스로 참조할 수 있는 문자 배열이 있습니다.
char firstChar = charArr[0]; // H

61. 문자열을 바이트 배열로 변환하거나 그 반대로 변환하는 방법은 무엇입니까? 해당 코드를 작성하세요

String 클래스에는 toCharArray 메서드 와 유사하고 문자열 바이트 배열로 반환하는 getBytes 메서드가 있습니다 .
String str = "Hello world";
byte[] byteArr = str.getBytes();
byte firstChar = byteArr[6]; // 119
우리는 오늘 검토의 논리적 결론에 도달했습니다. 읽어 주셔서 감사합니다!
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다