トップJava面接質問—回答済み

トップJava面接質問—回答済み

  • ITOps・DevOps
6分で読めます 更新日 Apr 27, 2020

ポイント: トップJava面接質問は、求職者と採用マネージャーにとって基本的および高度なJavaの概念をカバーし、プログラミング知識と面接準備を向上させるための重要な洞察を提供します。

  • Javaのプラットフォーム独立性は重要な特徴であり、任意のオペレーティングシステムで実行できます。
  • 主なトピックには、JVM、JRE、例外処理、およびデータカプセル化が含まれます。

就職面接の準備をする際、業界特有の質問を学び、それに答える最良の方法を準備することは良い手段です。特にJavaのようなプログラミング言語の技術的知識に関しては、それが特に重要です。Javaは常に最も人気のあるプログラミング言語の一つとして評価されています。その移植性と複数のプラットフォームで実行できる能力から、Javaが企業や開発者にとって非常に求められるプログラミング言語であるのは不思議ではありません。もしあなたがJavaプログラミングのキャリアを目指しているなら、見込みのある雇用主は言語の知識を測るために、基本から高度な技術的理解と利点に関するさまざまな質問をしてくるでしょう。また、あなたが採用マネージャーやリクルーターであれば、候補者の面接から最大限の利益を得るために、基本的なJavaの概念やより高度な概念を知っておく必要があります。今回は、面接の準備を助け、より自信を持てるようにするためのトップJava質問をまとめました。仕事を探している場合でも、採用を検討している場合でも、この記事が役立つでしょう。

なぜJava?

JavaはAPIやプラットフォームを作成するために使用される最も人気のあるプログラミング言語の一つです。柔軟性を考慮して設計されており、開発者はアーキテクチャやプラットフォームに関係なく、任意のマシンで実行できるコードを書くことができます。Javaは世界中の企業の大多数に使用されています。これらのトップJava面接質問は表面をなぞるだけですが、面接の準備に必要な知識の種類を広く提供します。

基本的なJava質問

Q. なぜJavaはプラットフォームに依存しないと考えられるのか?

JavaのモットーはWORAで、「一度書けば、どこでも実行できる」という意味です。Javaはバイトコードのおかげで、すべてのオペレーティングシステム(Mac、Linux、Windowsなど)で実行できるため、プラットフォームに依存しないと考えられています。これは、企業が通常、さまざまな種類のコンピュータやデバイスを使用するネットワーク環境では有益です。

Q. JVM、JRE、およびJDKとは何か?

  • Java仮想マシン(JVM)は、Javaバイトコードの実行環境を提供する抽象マシンです。
  • Javaランタイム環境(JRE)は、Javaバイトコードが実行できる特定の実行環境を指します。JREはJVMを実装し、JVMがランタイム中に使用するすべてのサポートファイルを提供します。
  • Java開発キット(JDK)は、Javaプログラムを収集、文書化、およびパッケージ化するツールです。JREと必要な開発ツールの両方が含まれています。

Q. equals()と==の違いは何か?

equals()メソッドは、2つのオブジェクトの値を比較するために使用されます。==等価演算子は、プリミティブとオブジェクトを比較するために使用されます。

Q. ハッシングとは何か?

ハッシングは、大きな文字列を小さな文字列に変換する技術です。短い値はインデックス付けと検索を高速化します。ハッシングは、hashCode()メソッドを使用してオブジェクトを整数形式に変換します。HashMapのパフォーマンスを正確にするためには、hashCode()を適切に書く必要があります。

Q. HashMapとは何か?

HashMapは、Javaのマッピングインターフェースの基本的な実装を提供します。データは(キー、値)ペアとして保存され、値にアクセスするには、そのキーを知っている必要があります。HashMapの名前は、ハッシング技術の使用から派生しています。

Q. HashMapとHashTableの違いは何か?

HashMapでは、メソッドは同期されておらず、スレッド安全ではありません。イテレータを使用して値を反復処理し、一つのnullキーと複数のnull値を許可します。HashTableでは、キーのメソッドが同期されており、スレッド安全です。列挙子が値を反復処理し、nullを許可しません。パフォーマンスは遅く、特にHashMapと比較すると遅いです。

Q. ArrayListとベクターの違いは何か?

ArrayListは同期されていないため、はるかに高速です。ArrayListは、Iteratorのみを使用してArrayListを横断できます。ベクターは同期されており、それが遅くなります。ただし、スレッドセーフであり、一度に1つのスレッドに制限されています。HashTableとベクターは、EnumerationとIteratorの両方を使用する唯一のクラスです。

Q. 内部クラスとサブクラスの違いは何か?

内部クラスは、他のクラス内にネストされたクラスです。ネストしているクラスのアクセス権があります。外部クラスで定義されたすべての変数やメソッドにアクセスできます。サブクラスは、別のクラスから派生したクラスです。スーパークラスのすべてのパブリックおよびプロテクテッドメソッドとフィールドにアクセスできます。

Q. Javaクラスのさまざまなアクセス修飾子は何か?

アクセス指定子は、クラス名の前に使用されるキーワードで、そのアクセス範囲を定義します。Javaでは、4つの修飾子があります:

  • プライベート。変数はクラスの外部では利用できないため、外部メンバーはプライベートメンバーにアクセスできません。(クラスやインターフェースはプライベートにはできません。)
  • パブリック。メソッドや変数は、プロジェクト内の他のすべてのクラスからアクセスできます。
  • デフォルト。パッケージ内のクラスに対して可視です。
  • プロテクテッド。変数は、同じパッケージのクラスや他のパッケージのサブクラスからアクセスできます。クラスやインターフェースには使用できません。

Q. データカプセル化とは何か、その重要性は何か?

カプセル化は、オブジェクト指向プログラミングの概念で、特性とメソッドを単一のユニットに結合します。カプセル化は、プログラマーがソフトウェア開発のモジュラーアプローチを遵守するのに役立ちます。各オブジェクトには独自のメソッドと変数のセットがあり、他のオブジェクトから独立して機能を提供します。

Q. ループの3つのタイプは何か?

ループは、文または文のブロックを繰り返し実行するために使用されます。Javaには3つの種類のループがあります:

  • forループは、与えられた回数だけ文を繰り返し実行します。
  • whileループは、特定の条件が満たされるまで文を繰り返し実行するために使用されます。条件は文を実行する前にチェックされます。
  • do whileループは、whileループに似ていますが、文ブロックを実行した後にチェックされます。

Q. 無限ループはどのように宣言されるか?

無限ループは、終了条件が満たされない場合に無限にループする命令シーケンスです。それは、文ブロックの本体内で任意の破壊ロジックを定義することによって壊すことができます。

Q. 例外とは何か?

例外は、プログラムの実行中に発生し、プログラムの通常のフローを妨げるイベントです。メソッドが例外をスローすると、ランタイムシステムはそれを処理する何かを見つけようとします。その例外が処理できない場合、実行はタスクを完了する前に中止されます。

Q. 例外の種類は何か?

例外には2つの種類があります:チェック例外とチェックされない例外。チェック例外は、コンパイル時にコンパイラによってチェックされます。たとえば、スロー可能クラスを拡張するクラス(ランタイム例外やエラーを除く)。これらは、throwsキーワードを使用して例外を宣言するか、適切なtry/catchで囲む必要があります:

  • IOException
  • SQLException
  • DataAccessException
  • ClassNotFoundException
  • InvocationTargetException
  • MalformedURLException

チェックされない例外は、コンパイル時にコンパイラによって確認されません。これらの例外は、悪化したプログラミングの結果であり、プログラムはコンパイルエラーを示しません。すべてのチェックされない例外は、RuntimeExceptionクラスの直接のサブクラスです:

  • NullPointerException
  • ArrayIndexOutOfBound
  • IllegalArgumentException
  • IllegalStateException

複雑なJava質問

これらの質問を使用して、より高度なJavaの概念の理解を測ります。

Q. Javaは複数の継承をサポートしていません。これにより、「ダイヤモンド問題」をどのように防ぐことができましたか?これはもはや真実ですか?

Javaはクラスの複数の継承を許可せず、インターフェースのみに許可しています。過去には、これによりC++で一般的に見られる「ダイヤモンド問題」を防ぎました:単一の親クラスから実装を継承することができるだけでした。2014年に登場したJava 8および以降のバージョンでは、クラスは親クラスまたはインターフェースのいずれかからメソッド実装を継承することができます。これにより、コンパイラがコンパイルを拒否する可能性が高まります。

Q. リフレクションはなぜ使用されるのか?

リフレクションは、クラス、インターフェース、フィールド、およびメソッドを実行時に、クラス、メソッドなどの名前を知らなくても検査できるようにします。リフレクションは、同じシステム内の他のコードを検査できるコードを記述します。また、リフレクションを使用して新しいオブジェクトをインスタンス化し、メソッドを呼び出し、フィールドの値を取得/設定することも可能にします。リフレクションは、内部調査を利用して実行時に変更を行う能力を提供します。

Q. Javaは演算子のオーバーロードをサポートしていますか?

演算子のオーバーロードはJavaではサポートされていません。これは意図的なものであり、Javaの作成者は単純さを維持し、演算子を混乱させて使用されることを防ぎたかったのです。(たとえば、同じ演算子に異なる意味が出てくることを許可することです。)

Q. なぜ文字列は不変なのか?

不変オブジェクトは、作成された後に内部状態が一定のオブジェクトです。オブジェクトが変数に割り当てられると、そのオブジェクトは更新も変更もできません。文字列を不変に保つことは、キャッシュ、セキュリティ、同期、およびパフォーマンスを含むいくつかの活動をサポートし、利益をもたらします。Java String Poolは、JVMによって文字列が保存される特別なメモリ領域です。文字列が不変であるため、JVMはプール内の各文字列の単一コピーのみを保存することによって、割り当てられるメモリの量を最適化し、重要なメモリリソースを保存します。不変の文字列は、値が変わらない場合に機密コードを操作しやすくするため、セキュリティの観点からも意味があります。次のことを考えてみてください:文字列が可変だった場合、更新を実行するまでに、整合性チェックの間に侵害される可能性があるため、文字列のセキュリティを保証できません。不変であることで、文字列は自動的に安全になります。文字列は、複数のスレッドからアクセスされても変更されません。ハッシュ実装を使用するコレクションでは、不変性がパフォーマンスを向上させます。

Q. Javaで静的メソッドをオーバーライドするにはどうすればよいですか?サブクラスに同じメソッドを作成すると、コンパイルエラーが発生しますか?

Javaではオーバーライドを静的メソッドには許可しません。ただし、サブクラスに同じシグネチャのメソッドを宣言することはできます。これはオーバーライドとは見なされませんが、実行時の多態性がないためです。派生クラスが基底クラスの静的メソッドと同じシグネチャの静的メソッドを定義する場合、派生クラスのメソッドは基底クラスのメソッドを隠します。サブクラスに正確に同じメソッドを宣言することはコンパイルエラーにはなりません。これはメソッド隠蔽と呼ばれます。

Q. シリアル化可能なクラス内の非シリアル化可能なメンバーを修正するにはどうすればよいですか?

オブジェクトシリアル化プロセスは、オブジェクトをバイナリ形式に変換し、ネットワークを介して他の実行中のJVMに送信できるようにします。そのクラスをシリアル化しようとすると、NotSerializableExceptionで失敗します。クラス内のすべてのフィールドがシリアル化可能であれば、クラス宣言にimplements serializableを追加するだけです。そうでない場合、そのフィールドのクラスをオブジェクトグラフに対して繰り返すことができます。シリアル化できない、またはすべきでないクラスがある場合は、そのフィールド宣言にtransientキーワードを追加します。これにより、JVMはシリアル化時に指定されたフィールドを無視します。

これらの投稿は私自身の見解であり、BMCの立場、戦略、または意見を必ずしも表しているわけではありません。

ITOps・DevOpsの関連記事

The Briefを購読する

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ありがとう

あなたはThe Briefに登録されました
The Briefはメインフレームとエンタープライズオーケストレーション—BMC AMIとControl-M—および、両者に関するアナリストの研究、顧客の展開、イベントをカバーしています。