웹사이트 검색

Java SE 8 인터뷰 질문 및 답변(1부)


이 게시물에서는 답변과 함께 몇 가지 중요한 Java SE 8 인터뷰 질문에 대해 논의할 것입니다. 나머지 Java SE 8 인터뷰 질문에 대해 논의하기 위해 게시물을 하나 더 작성하겠습니다.

Java 8 인터뷰 질문

  1. Java로 다시 변경해야 하는 이유는 무엇입니까?
  2. 자바 SE 8의 새로운 기능?
  3. Java SE 8 새 기능의 장점
  4. 람다 식이란 무엇입니까?
  5. 람다 식의 세 부분은 무엇입니까? 람다 식의 유형은 무엇입니까?
  6. 기능적 인터페이스란 무엇입니까? SAM 인터페이스란 무엇입니까?
  7. 자체 기능 인터페이스를 정의할 수 있습니까? @FunctionalInterface란 무엇입니까? 기능 인터페이스를 정의하는 규칙은 무엇입니까?
  8. @FunctionalInterface 주석인가요? Java에서 기능적 인터페이스가 필요한 이유는 무엇입니까?
  9. Java 8 Stream API는 언제 사용합니까? 프로젝트에서 Java 8 Stream API를 사용해야 하는 이유는 무엇입니까?
  10. 수집 API와 스트림 API의 차이점을 설명하시겠습니까?
  11. Java SE 8의 Spliterator는 무엇입니까?Java SE 8의 Iterator와 Spliterator의 차이점은 무엇입니까?
  12. Java 8에서 선택적이란 무엇입니까? 선택 사항의 용도는 무엇입니까?Java 8 선택 사항의 장점
  13. 유형 추론이란 무엇입니까? 유형 추론은 Java 7 및 이전 7과 같은 이전 버전에서 사용할 수 있습니까, 아니면 Java SE 8에서만 사용할 수 있습니까?

Java 8 인터뷰 질문 및 답변

이 섹션에서는 이전 섹션의 각 질문을 선택하고 자세한 설명과 함께 답변합니다. 더 많은 정보와 예제가 필요한 경우 JournalDEV에서 제공되는 이전 Java SE 8 게시물을 참조하십시오.

Java로 다시 변경해야 하는 이유는 무엇입니까?

Oracle Corporation은 다음과 같은 이점을 제공하기 위해 Java SE 8에 많은 새로운 개념을 도입했습니다.

  • 현재 멀티 코어 CPU를 효율적으로 활용하려면\n최근 하드웨어의 급격한 변화를 목격할 수 있습니다. 오늘날 모든 시스템은 멀티코어 CPU(2,4,8,16코어 등)를 사용하여 애플리케이션을 배포하고 실행합니다. 동시성 및 확장성이 뛰어난 응용 프로그램을 개발하기 위해 이러한 멀티 코어 프로세서를 효율적으로 활용하려면 Java의 새로운 프로그래밍 구조가 필요합니다. - FP 기능 활용\nOracle Corporation은 FP의 장점을 활용하기 위해 Java SE 8의 일부로 많은 FP(Functional Programming) 개념을 도입했습니다.

Java SE 8의 새로운 기능?

  • 람다 식
  • 기능적 인터페이스
  • 스트림 API
  • 날짜 및 시간 API
  • 인터페이스 기본 메소드 및 정적 메소드
  • 분할기
  • 메서드 및 생성자 참조
  • 컬렉션 API 향상
  • 동시성 유틸리티 향상
  • 포크/조인 프레임워크 개선 사항
  • 내부 반복
  • 병렬 배열 및 병렬 수집 작업
  • 선택사항
  • 유형 주석 및 반복 가능한 주석
  • 메서드 매개변수 반영
  • Base64 인코딩 및 디코딩
  • IO 및 NIO2 향상
  • Nashorn 자바스크립트 엔진
  • javac 향상
  • JVM 변경
  • Java 8 컴팩트 프로필: compact1,compact2,compact3
  • JDBC 4.2
  • JAXP 1.6
  • 자바 DB 10.10
  • 네트워킹
  • 보안 변경

Java SE 8 새로운 기능의 장점은 무엇입니까?

Java SE 8 New Features에서 다음과 같은 이점을 얻을 수 있습니다.

  • 더 간결하고 읽기 쉬운 코드
  • 더 많은 재사용 가능한 코드
  • 테스트 가능하고 유지 관리 가능한 코드
  • 동시성 및 확장성이 뛰어난 코드
  • 병렬 코드 작성
  • 데이터베이스 유사 작업 쓰기
  • 더 나은 성능 애플리케이션
  • 더 생산적인 코드

람다 식이란 무엇입니까?

람다 식은 입력 매개 변수 집합을 수락하고 결과를 반환하는 익명 함수입니다. 람다 식은 이름이 없고, 매개변수가 있거나 없고, 결과가 있거나 없는 코드 블록입니다. 이 코드 블록은 요청 시 실행됩니다.

람다 식의 세 부분은 무엇입니까? 람다식의 종류는?

Lambda 식은 세 부분으로 구성됩니다.

  • 매개변수 목록 Lambda 표현식은 0개 또는 하나 이상의 매개변수를 포함할 수 있습니다. 선택 사항입니다.- 람다 화살표 연산자\n"->\는 Lambda 화살표 연산자로 알려져 있습니다. 매개변수 목록과 본문을 구분합니다.- Lambda Expression Body

"Journal Dev\의 유형은 java.lang.String입니다. "true\의 유형은 부울입니다. 같은 방식으로 Lambda Expression의 유형은 무엇입니까? 람다 식의 유형은 기능적 인터페이스입니다. 예:- 다음 람다 식의 유형은 무엇입니까?

   () -> System.out.println("Hello World");

이 람다 식에는 매개 변수가 없으며 결과를 반환합니다. 따라서 유형은 "java.lang.Runnable\ 기능 인터페이스입니다.

기능적 인터페이스란 무엇입니까? SAM 인터페이스란?

기능 인터페이스는 하나의 추상 메서드만 포함하는 인터페이스입니다. 기능 인터페이스는 하나의 추상 메서드만 포함하기 때문에 SAM 인터페이스라고도 합니다. SAM 인터페이스는 Single Abstract Method Interface의 약자입니다. Java SE 8 API는 많은 기능적 인터페이스를 정의했습니다.

자체 기능 인터페이스를 정의할 수 있습니까? @FunctionalInterface란 무엇입니까? 기능적 인터페이스를 정의하는 규칙은 무엇입니까?

예, 자체 기능 인터페이스를 정의할 수 있습니다. Java SE 8의 @FunctionalInterface 주석을 사용하여 인터페이스를 기능적 인터페이스로 표시합니다. 기능 인터페이스를 정의하려면 다음 규칙을 따라야 합니다.

  • 단 하나의 추상 메서드로 인터페이스를 정의합니다.
  • 하나 이상의 추상 메서드를 정의할 수 없습니다.
  • 인터페이스 정의에 @FunctionalInterface 주석을 사용하십시오.
  • 기본 메소드, 정적 메소드와 같은 기타 메소드를 얼마든지 정의할 수 있습니다.
  • java.lang.Object 클래스의 메소드를 추상 메소드로 오버라이드하면 추상 메소드로 간주되지 않습니다.

기능적 인터페이스를 정의하려면 @FunctionalInterface 주석이 필수입니까? @FunctionalInterface 주석의 용도는 무엇입니까? Java에서 기능적 인터페이스가 필요한 이유는 무엇입니까?

@FunctionalInterface 주석으로 기능 인터페이스를 정의하는 것은 필수가 아닙니다. 원하지 않으면 이 주석을 생략할 수 있습니다. 그러나 Functional Interface 정의에서 사용하면 Java Compiler는 해당 인터페이스 내에서 추상 메소드를 하나만 사용하도록 강제합니다. 기능적 인터페이스가 필요한 이유는 무엇입니까? Java SE 8의 Lambda 표현식 유형은 기능 인터페이스입니다. 함수형 인터페이스를 사용하고 있음을 의미하는 람다 식을 사용하는 곳마다.

Java 8 Stream API는 언제 사용합니까? 프로젝트에서 Java 8 Stream API를 사용해야 하는 이유는 무엇입니까?

Java 프로젝트에서 다음 작업을 수행하려는 경우 Java 8 Stream API를 사용하여 많은 이점을 얻는 것이 좋습니다.

  • 데이터베이스와 같은 작업을 수행하려는 경우. 예를 들어 groupby 작업, orderby 작업 등을 수행하려고 합니다.
  • 느리게 작업을 수행하려는 경우.
  • Functional Style 프로그래밍을 작성하고 싶을 때.
  • 병렬 작업을 수행하려는 경우.
  • 내부 반복을 사용하고 싶을 때
  • 파이프라인 작업을 수행하려는 경우.
  • 더 나은 성과를 달성하고 싶을 때

Collection API와 Stream API의 차이점을 설명하시겠습니까?

S.No. Collection API Stream API
1. It’s available since Java 1.2 It is introduced in Java SE 8
2. It is used to store Data (A set of Objects). It is used to compute data (Computation on a set of Objects).
3. We can use both Spliterator and Iterator to iterate elements. We can use forEach to performs an action for each element of this stream. We can’t use Spliterator or Iterator to iterate elements.
4. It is used to store unlimited number of elements. Stream API is used to process on the elements of a Collection.
5. Typically, it uses External Iteration concept to iterate Elements such as Iterator. Stream API uses internal iteration to iterate Elements, using forEach methods.
6. Collection Object is constructed Eagerly. Stream Object is constructed Lazily.
7. We add elements to Collection object only after it is computed completely. We can add elements to Stream Object without any prior computation. That means Stream objects are computed on-demand.
8. We can iterate and consume elements from a Collection Object at any number of times. We can iterate and consume elements from a Stream Object only once.

Java SE 8의 Spliterator는 무엇입니까?Java SE 8의 Iterator와 Spliterator의 차이점은 무엇입니까?

Spliterator는 Splitable Iterator의 약자입니다. Oracle Corporation에서 Java SE 8의 일부로 새로 도입했습니다. Iterator 및 ListIterator와 마찬가지로 Iterator 인터페이스 중 하나이기도 합니다.

S.No. Spliterator Iterator
1. It is introduced in Java SE 8. It is available since Java 1.2.
2. Splitable Iterator Non-Splitable Iterator
3. It is used in Stream API. It is used for Collection API.
4. It uses Internal Iteration concept to iterate Streams. It uses External Iteration concept to iterate Collections.
5. We can use Spliterator to iterate Streams in Parallel and Sequential order. We can use Iterator to iterate Collections only in Sequential order.
6. We can get Spliterator by calling spliterator() method on Stream Object. We can get Iterator by calling iterator() method on Collection Object.
7. Important Method: tryAdvance() Important Methods: next(), hasNext()

Java 8에서 선택적이란 무엇입니까? 선택사항의 용도는 무엇입니까?Java 8 선택사항의 장점은 무엇입니까?

선택 사항: 선택 사항은 Java SE 8의 일부로 도입된 최종 클래스입니다. java.util 패키지에 정의되어 있습니다. 존재하거나 존재하지 않는 선택적 값을 나타내는 데 사용됩니다. 하나의 값 또는 0 값을 포함할 수 있습니다. 값이 포함되어 있으면 가져올 수 있습니다. 그렇지 않으면 아무것도 얻지 못합니다. 최대 하나의 요소만 포함하는 제한된 컬렉션입니다. "null\ 값의 대안입니다. 선택 사항의 주요 이점은 다음과 같습니다.

  • null 검사를 피하기 위해 사용됩니다.
  • "NullPointerException\을 피하기 위해 사용됩니다.

유형 추론이란 무엇입니까? Type Inference는 Java 7 및 이전 7과 같은 이전 버전에서 사용할 수 있습니까, 아니면 Java SE 8에서만 사용할 수 있습니까?

Type Inference는 컴파일 타임에 컴파일러가 Type을 결정하는 것을 의미합니다. Java SE 8의 새로운 기능은 아닙니다. Java 7 및 Java 7 이전 버전에서도 사용할 수 있습니다. Java 7 이전:- Java 배열을 살펴보겠습니다. 아래와 같이 값을 사용하여 배열의 문자열을 정의합니다.

String str[] = { "Java 7", "Java 8", "Java 9" };

여기서 우리는 오른쪽에 일부 문자열 값을 할당했지만 해당 유형을 정의하지는 않았습니다. Java Compiler는 자동으로 유형을 유추하고 String of Array를 생성합니다. Java 7: Oracle Corporation은 Generics에서 불필요한 유형 정의를 피하기 위해 Java SE 7에 \다이아몬드 연산자\라는 새로운 기능을 도입했습니다.

Map<String,List<Customer>> customerInfoByCity = new HashMap<>();

여기에서는 오른쪽에 Type 정보를 정의하지 않고 Java SE 7의 Diamond Operator만 정의했습니다. Java SE 8: Oracle Corporation은 Java SE 8에서 이 유형 추론 개념을 많이 개선했습니다. 우리는 이 개념을 사용하여 람다 식, 함수, 메서드 참조 등을 정의합니다.

ToIntBiFunction<Integer,Integer> add = (a,b) -> a + b;

여기서 Java Compiler는 왼쪽에서 사용 가능한 유형 정의를 관찰하고 Lambda Expression 매개 변수 a 및 b의 유형을 정수로 결정합니다. 이것이 Java 8 인터뷰 질문에 관한 전부입니다. 이 게시물에서 몇 가지 Java SE 8 인터뷰 질문에 대해 논의했으며 다음 게시물에서 Java SE 8 인터뷰 질문에 대해 더 논의할 것입니다. 내 게시물이 마음에 들거나 문제/제안 사항이 있으면 댓글을 남겨주세요.