35 以上の Java 8 面接の質問と回答 (2024)

技術者であれ、その他の専門家であれ、面接では常に緊張からアドレナリンが分泌されます。 ただし、群衆の中で目立つためには、スキルを磨き、自分の能力に賭けることが重要です。 さらに、Java 8 の面接でよく聞かれる質問と回答を実際に読んでおくと、より知識が深まります。

したがって、今後の面接を勝ち抜くために、経験豊富な初心者と初心者向けにこれらの Java 8 面接の質問を深く掘り下げてください。

新人および経験者向けの Java 8 面接の質問

1) Java 8 はどのプログラミング パラダイムに該当しますか?

Java 8 は以下に該当しますwing プログラミングパラダイム:

  • オブジェクト指向またはクラス指向のプログラミング言語。
  • 関数型プログラミング言語。
  • 指定された手続き型プログラミング言語。
  • 論理プログラミング言語。

2) なぜ Optional クラスを使用する必要があるのでしょうか?

Optional クラスは、既存または存在しないオプションの値を示すのに役立つ、新しく導入されたコンテナー クラスです。 その主な利点は、null および void チェックを回避し、特定の変数の値の存在をチェックするのに役立つメソッドを容易にすることです。


Java 8 の面接の質問

3) Java 8 で導入された最近の機能をいくつか挙げてください。

以下は、Java 8 で導入された最新の機能です。

  • ラムダ式: これは、オブジェクトとして共有または参照できる Java 関数です。
  • メソッドの干渉: メソッドを実装するための基準として関数を使用します。
  • 機能的干渉: すべての機能的干渉は、機能的メソッドとして知られる単一の抽象メソッドに関連付けられています。
  • デフォルトの方法: これは、「インターフェイスの進化」の可能性を可能にするメソッドをインターフェイスに実装する場合に役立ちます。
  • 日時API: これは、以前のバージョンの欠点に対処するために、Java 時間 API の改良版であり、インスピレーションを得たバージョンです。
  • ストリームAPI は抽象層と呼ばれ、データの処理をパイプライン化するのに役立ちます。
  • 任意: ラッパー クラスは、null 値をチェックし、さらにデータを処理する場合に役立ちます。
  • JavaScript と Nashorn エンジン: これは JavaScript エンジンの改良版であり、Rhino に代わって Java でその機能を有効にするのに役立ちます。

4) Java 8 を使用する利点を指定する

Java 8 を使用する利点は次のとおりです。

  • これは、アプリケーションをより迅速かつ簡単に作成するのに役立ちます。
  • 開発者に非常に安定した環境を提供します。
  • 簡潔で再利用可能で理解しやすいコード。
  • 改善された効果的なサポート。
  • さまざまなオペレーティング システム間での移植が簡単です。
  • 最小限の定型コード。

5) コレクションとは何ですか? ストリームとの違いは何ですか?

コレクションは、現在のデータ構造に従ってすべての値を記録するメモリ内データベースです。 したがって、コレクションに追加する前に、それぞれを計算することが重要です。 一方、ストリームは視覚的に固定されたデータ構造であり、必要に応じて要素を計算できます。


6) ランバダ式とは何ですか?

ランバダ式は名前のない関数の一種であり、独自の種類の情報を持たないため、匿名関数と呼ばれることもあります。 これは必要に応じて使用でき、コレクションからのデータの繰り返し、フィルタリング、抽出に非常に役立ちます。

例:

import java. util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class LambdaExpressionExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");
        List<String> filteredNames = names.stream()
                .filter(name -> name.startsWith("C"))
                .map(name -> name.toUpperCase())
                .collect(Collectors.toList());
        System.out.println(filteredNames);
    }
}

出力:

Charlie

7) ストリームパイプラインを定義する

ストリーム パイプラインは、さまざまな操作をまとめてグループ化する方法です。 これは、ストリーム操作を XNUMX つの部分に分類することで実現できます。 中間および末端の操作。

中間操作が実行されるたびに、インスタンスがストリーム パイプラインに戻されます。 したがって、どのユーザーも不合理な数の中間操作を設定してデータを合理化し、最終的に処理パイプラインを形成することができます。

さらに、パイプラインを終了するには、プロセスの最後に端末操作が必要です。


8) Java 8 の述語とコンシューマとは何ですか?

述語は、通常は引数を受け取り、ブール値を取得する関数インターフェイスです。 これを使用して、オブジェクトのコレクションにフィルターを適用できます。

一方、コンシューマは、Java.util.function パッケージにある組み込み関数インターフェイスと呼ばれます。 これを使用して任意のオブジェクトを消費でき、入力値を受け取り、何も出力しません。


9) Java 8 で Peak () メソッドが使用されるのはなぜですか?

Peak() メソッドは、パイプラインの特定のポイントから要素が流れる傾向にある要素に注目したい場合のデバッグのサポートに役立ちます。 これは、各要素がどのように通過するかを観察した結果を表したものです。

構文: public Object peek()


10) あなたが Java 開発者の役割に最適な候補者である理由は何ですか?

Java 開発者の役割に最適な候補者となるための重要な資質をいくつか紹介します。

  • 明確で理解しやすく、効率的なコードを作成する能力が必要です。
  • 「」のパターンと概念を深く理解するOOP またはオブジェクト指向プログラミングに設立された地域オフィスに加えて、さらにローカルカスタマーサポートを提供できるようになります。」
  • A good knowledge of various architectural and design patterns.
  • Java 同時実行パターンに関する知識。
  • Experience and knowledge of working with various web application frameworks such as Spark and Play.
  • Java 仮想マシン (JVM) の基礎知識、欠点、回避策など。
  • 組み込みデータベースおよび外部データベースの使用に関する優れた経験。

11) 「関数インターフェース」について説明します。

抽象が XNUMX つだけあるインターフェイスは、関数型インターフェイスと呼ばれます。 これは、単一抽象メソッド (SAM) とも呼ばれます。 ただし、注釈 @FunctionalInterface はオプションであり、存在しない場合でも使用できます。 抽象がない場合は、他のインターフェイスに拡張されます。


12) Java 8 ではなぜ静的メソッドが必要ですか?

静的メソッド参照は、インターフェイスにリンクされたユーティリティまたはヘルパー メソッドと呼ばれます。 これは、どのオブジェクトにもリンクされていないクラスでもあります。

Java で静的メソッドを使用する理由は次のとおりです。

  • API の保守と拡張に役立ちます。
  • Entails 責任の分担が明確かつ簡潔であり、ユーティリティ コレクションを持つために 1 つのユーティリティ クラスを持つ必要はありません。
  • すべてのインターフェイスを特定のインターフェイスではなく共通のインターフェイスに保持する場合に便利です。

13) ナショーンの利点は何ですか?

Nashorn は最も先進的で新しい JavaScriptを Java 8 で導入された処理エンジン。以前は Mozilla Rhino に基づいていました。 これにより、ECMA JavaScript への準拠が強化されます。 以前のバージョンよりも高速です。


14) コレクション API とストリーム API はどう違うのですか?

Collection API と Stream API の重要な違いをいくつか示します。

コレクションAPI ストリームAPI
コレクション API は Java 1.2 で初めて使用されました ストリーム API は Java SE 8 で初めて導入されました。
無制限のデータを保存するために使用できます。 これを使用して無制限のデータを計算できます。
Collection API を使用すると、Iterator と Spilterator を使用してデータを反復処理できます。 Stream API を使用すると、データを反復するために Iterator と Spilterator を使用できます。
コレクション API へのアクセスは簡単です。 インストリーム API には、特定の要素に直接アクセスする方法はありません。
ニーズに応じて加工するのも簡単です。 Stream API は XNUMX 回だけ処理できます。

15) PermGenSpace と MetaSpace について説明します。

PermGen または Permanent Generation Space は、保存されたメタデータを追跡するために使用される固有のタイプのヒープ領域です。このヒープ領域は Java 8 で削除されました。

この新しいバージョンでは、メタデータの保存は「MetaSpace」として知られる同様のメモリで行われます。 これは転送可能な Java ヒープ メモリではなく、自動チューニングの点で PermGen の改良版です。 ごみ収集, etc.


16) Java 8 では関数型インターフェイスはどのように作成されますか?

ラムダ式を使用して、Java 8 の関数型インターフェイスの抽象メソッドを実装できます。以下は同じコーディング例です。

import java.util.function.Consumer;
public class FunctionalInterfaceExample {
    public static void main(String[] args) {
        Consumer<String> printer = System.out::println;
        printer.accept("Hello, world!");
    }
}

出力:

Hello, world!

17) Java 8 の関数と述語の違いと類似点は何ですか?

Java 8 の Function と Predicate の違いは次のとおりです。

  • 関数は変換に役立ちますが、述語は任意の条件をテストするために使用できます。
  • 関数は引数を受け取って結果を返すことができますが、述語も引数を受け取ることができますが、ブール値のみを返します。
  • 関数は次のように表されます、述語は のみで表されます。 ここで、T は関数の型、R は結果です。

以下に、関数と述語の類似点を示します。

  • 関数と述語はどちらも関数インターフェイスです。
  • 関数と述語はどちらも単一引数の関数です。

18) 例を使用して、skip(long) とlimit(long) の違いを説明します。

スキップ (ロング) は、特定のストリームの最初の n 要素を削除した後に残った要素を取得する中間操作です。

例:

import java.util.Arrays;
import java.util.List;
public class SkipExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Eve");
        // Create a stream from the names list
        names.stream()
                // Skip the first two elements of the stream
                .skip(2)
                // Print the remaining elements to the console
                .forEach(System.out::println);
    }
}

出力:

Charlie
Dave
Eve

制限 (ロング) は、特定のサイズの要素のストリームを取得します。

例:

import java.util.Arrays;
import java.util.List;
public class LimitExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Eve");
        // Create a stream from the names list
        names.stream()
                // Limit the stream to the first three elements
                .limit(3)
                // Print the elements to the console
                .forEach(System.out::println);
    }
}

出力:

AliceBob
Charlie

19) Java 8 でストリーム API を使用するのに最適な状況はどれですか?

Java 8 ではストリーム API を使用できます。以下の操作が必要です。

  • 並列処理を行うことができます。
  • 遅延操作を実行する場合
  • データベース操作を実行するには
  • 内部反復に使用します。
  • 関数型プログラミングを作成する場合
  • パイプライン操作を使用するために使用できます。

20) 型推論の機能は何ですか?

型推論は、対応する宣言とメソッド呼び出しの概要を把握するだけで、コンパイラーが引数の型を識別または認識するのに役立ちます。


21) Java 8 でリストから重複要素を特定して削除する最も簡単な方法はどれですか?

重複要素を特定して削除する最も簡単な方法は、ストリーム操作を使用してコレクションを実行し、その後 Collections.toSet() メソッドを使用することです。


22) 機能インターフェイスのガイドラインは何ですか?

以下は、Java 8 プログラミングで最もよく聞かれる質問の XNUMX つである関数型インターフェースのガイドラインです。

  • 抽象メソッドは XNUMX つだけ持つ必要があります。
  • デフォルトのメソッドは抽象的ではないため、いくつでも持つことができ、実装は同じものによって先に与えられます。
  • Java.lang のパブリック メソッドの主要な要素である抽象メソッドは、関数型インターフェイスで知られています。 オブジェクトは依然として有用なインターフェイスとみなされています。

注: これについての説明は、このインターフェイスの各実装クラスは、実装クラス自体によって定義されるか、スーパークラスから取得されるこの抽象メソッドの実装を持つことができるということです。


23) スプリッテレータとイテレータを区別します。

スプリッテレータとイテレータの違いは次のとおりです。

スプリッター イテレータ
Java 1.2で導入されました。 Java 1.8で導入されました。
すべての要素を個別に反復するだけです。 すべての要素を個別に、また一括して横断します。
これは、API の完全なコレクションのイテレータとして機能します。 これは、ストリーム API とコレクション API の両方のイテレータとして機能します。
並列プログラミングはサポートされません。 並列プログラミングはサポートされています。

24) クラス内のインターフェイスのデフォルト メソッドを呼び出すにはどうすればよいですか?

メソッド シグネチャの先頭にあるデフォルト キーワードは、インターフェイス内のメソッド宣言をデフォルト メソッドとして指定するために使用されます。 デフォルト メソッドを含むインターフェイス内のすべてのメソッド宣言は自動的に public になるため、public 修飾子をスキップできます。


25) デフォルトのメソッドを定義します。 いつから使えますか?

デフォルトのメソッドはインターフェイスに存在し、実装が含まれています。 このメソッドは、インターフェイスに既に実装されているクラスとの下位互換性を維持しながら、特定のインターフェイスに新しい機能を追加するのに役立ちます。


26) ストリームは Java でどのように作成されますか? それは Java 8 ストリームの面接で最もよく聞かれる質問の XNUMX つですか?

Java のストリームは、集合操作をサポートするコレクションなど、特定のソースからのオブジェクトのシーケンスを記述します。 これを利用して、データ構造を収集、フィルタリング、印刷し、あるデータ構造を別のデータ構造に変更することができます。

Java でストリームを作成する方法の例を次に示します。

import java.util.stream.Stream;
public class StreamExample {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("Alice", "Bob", "Charlie", "Dave", "Eve");
        stream.forEach(System.out::println);
    }
}

出力:

Alice
Bob
Charlie
Dave
Eve

27) Map および FlatMap ストリーム操作とは何ですか?

Map と FlatMap は、関数を受け入れるストリームおよび中間ストリーム操作とみなされます。 また、指定された関数を残りの要素に適用するのにも役立ちます。


28) Java プログラミング言語を頻繁に変更する必要があるのはなぜですか?

以下の理由により、Java プログラミング言語を頻繁に変更する必要があります。


29) Java 8 で使用される関数インターフェイスをいくつか挙げてください。

以下に、Java 8 で使用される関数インターフェイスをいくつか示します。

  • 二項演算子
  • 消費財
  • 演算
  • サプライヤー
  • 単項演算子
  • バイファンクション
  • 述語

30) 時刻と日付に関する主な API クラスは何ですか?

Java 8 で使用される時刻と日付の主な API クラスを以下に示します。

  • 現地時間
  • ローカル日時
  • ローカル日付

31) ラムダ式の基本構造/構文を教えてください。

ラムダ式の基本的な構造/構文は次のとおりです。

(arugument - list) - > {body}

ここでは、

  • 引数 - リスト: 満たしたままにすることも、空のままにすることもできます。
  • 矢印トークン: これは、本文の式と引数 (リスト) をリンクするのに役立ちます。
  • 体: これは、ラムダ式のステートメントと式で構成されます。

32) ストリームの主な特徴は何ですか?

Stream の主な特徴は次のとおりです。

  • パイプライン
  • ソース
  • 集計操作
  • 要素のシーケンス
  • 自動反復

33) 最も一般的な中間操作は何ですか?

最も一般的なタイプの中間式には、次のようなものがあります。

  • 明確な ()
  • スキップ (長い n)
  • フィルター(述語)
  • 制限 (長さ n)
  • マップ(機能)

34) 最も一般的なターミナル操作の種類は何ですか?

以下は、最も一般的な端末操作のタイプです。

  • ワンランク上の
  • 減らす
  • 最小値
  • すべて一致
  • 最大値
  • エニーマッチ
  • 配列へ

35) Java 8 のメソッド参照とは何ですか?

Java 8 のメソッド参照は、関数インターフェイスを参照する方法です。 これは、ラムダ式のより簡単で効率的な形式として知られています。 ラムダ式を使用してメソッドを参照する場合、それをメソッド参照に置き換えることができます。


36) 内部反復と外部反復はどのように異なりますか?

以下は、内部反復と外部反復の違いです。

内部反復 外部反復
これは、受動的反復子または暗黙的反復子とも呼ばれます。 これは、アクティブまたは明示的なイテレータとも呼ばれます。
それはさまざまなオブジェクトの内部に保持されます。 それはさまざまな物体の外部に運ばれます。
関数型プログラミングで利用されます。 オブジェクト指向プログラミングで利用されます。
これによりエラーが非常に少なくなります。 ただし、そのためにはコーディングが必須です。 これにより、さらに多くのエラーが発生します。 ただし、コーディングは必要ありません。

37) 型推論は以前のバージョンの Java で使用されていましたか?

Java は Java 5 で型干渉を導入しましたが、アクセスは非常に制限されていました。 しかし、年月が経つにつれ、型干渉の可能性は増大しており、それは Java 8 で最高の状態になります。


38) ストリームの最小数と最大数を見つけることができる Java 8 プログラムを書き留めてください。

import java.util.Arrays;
import java.util.stream.IntStream;
public class MinMaxExample {
    public static void main(String[] args) {
        int[] numbers = {9, 3, 8, 1, 5, 7, 2, 6, 4};
        int min = IntStream.of(numbers).min().getAsInt();
        int max = IntStream.of(numbers).max().getAsInt();
        System.out.println("Minimum number: " + min);
        System.out.println("Maximum number: " + max);
    }
}

出力:

Minimum number: 1
Maximum number: 9

39) StringJoiner クラスを介して複数の文字列を結合するにはどうすればよいですか?

StringJoiner は XNUMX つ以上の結合に役立ちます 文字列、特定の結合子または区切り文字を使用して実行できます。 たとえば、複数の文字列をカンマ (,) で区切ることで結合できます。

CSV 文字列を作成する場合、Linux では特定のディレクトリのフル パスを生成できます。これは、スラッシュ「/」を使用して文字列を結合することで実行できます。


40) Java 8 におけるラムダ式の最良の代替品は何ですか?

一般に、ラムダ式を利用して、目的の出力を得るのに役立つ匿名メソッドを作成します。 ただし、ラムダ式が機能せず、既存のメソッドのみを使用する場合があります。

So, to avoid this, you can use method reference that can help in getting the desired output. The method reference is depicted using the: (double colon) symbol.