2022年のJavaインタビューの質問と回答

公開: 2022-08-03

あなたはプログラマーですか? また、キャリアを築くためのニッチ分野として Java プログラミング言語を選択しましたか? おめでとう! あなたは正しく選択しました。 統計によると、米国のプログラマーは年間平均 105,801 ドルを稼いでいます。 これは、平均して 1 時間あたり 50.87 ドル、1 週間あたり 2,035 ドル、1 か月あたり 8,817 ドルです。 それは印象的ではありませんか?

しかし、Java プログラマーとして夢の仕事に就くチャンスを得ることは、希望的観測ではありません。 世界の 800 万人の Java プログラマーのうち、米国で有給雇用されているのは約 56,585 人だけであり、Java プログラマーとしての就職活動は非常に競争力があります。 その夢の仕事に就かなければならないのであれば、Java プログラミング言語の基本的な側面と複雑な側面の両方を十分に備えている必要があります。

これで、Java プログラマーとして就職するのがいかに競争が激しいか、そして Java プログラマーとして就職するための数少ない資格を取得するための要件が​​わかったはずです。 成功は機会との出会いの準備の機能であることを忘れないでください。 前進するにつれて、面接段階をスケールアップし、夢の仕事に就く可能性を高めるのに役立つ質問と回答のガイドを設計しました. このリストは、Apollotechnical に関する Java インタビューの質問と回答の準備という記事の助けを借りて編集されました。 先に進みましょう。

新入生向けの基本的な Java 面接の質問

新入生向けの基本的な Java 面接の質問

Javaで何を理解していますか?

Java は、汎用性のあるオブジェクト指向のクロスプラットフォーム プログラミング言語であり、世界中の 30 億台のデバイスで、ソーシャル ネットワーキング アプリケーション、オーディオおよびビデオ プログラム、ゲーム、大規模データ処理、組み込みデバイスなどのさまざまなタスクに使用されています。

Java と Python の比較

Java はその単純さにおいて、クラスに基づく汎用のオブジェクト中心のプログラミング言語ですが、必要な仕様は少なくなります。 迅速で信頼性が高く、結果重視であるという評判により、Python は、携帯電話、ゲーム コンソール、ラップトップ、ハイエンドの科学計算用コンピューターなどでアプリケーションを開発するための頼りになるプログラミング言語です。反対に、Python は翻訳された、オブジェクトに焦点を当てた、昇格した動的に構造化されたプログラミング言語。 Python は、モジュールとパッケージを有効にすることで、プログラムの柔軟性とコードの再利用を容易にします。

主な Java 機能の概要

  • Javaはオブジェクト中心です
  • Java はプラットフォームに依存しない
  • 優れたマルチスレッド実装を備えています
  • シンプルな言語を使用
  • そしてアーキテクチャはニュートラルです

Javaのオブジェクトとはどういう意味ですか

Java では、オブジェクトは「クラス」と呼ばれる別の Java グループのコンポーネント (「インスタンス」とも呼ばれます) です。 すべてのオブジェクトには、固有の状態、動作/アクション、およびアイデンティティがあります。 フィールド (変数) はオブジェクトの状態を格納し、メソッド (操作) はオブジェクトのアクションを示します。 実行時に、クラスとして識別されるフレームワークからオブジェクトが作成されます。

オブジェクトは、実世界のエンティティを表すオブジェクトベース プログラミングの基本要素になることもあります。

JavaプログラミングでStringbufferとStringbuilderを区別する

StringBuffer と StringBuilder は主に、パフォーマンス/速度、スレッド セーフ、可用性、および同期の 4 つのパラメーターが異なります。 StringBuilder は、StringBuffer クラスの非同期バリアントです。

StringBuffer と StringBuilder のもう 1 つの違いは、前者はスレッド セーフであるのに対し、後者はそうでないことです。

JDK、JRE、および JVM を区別する

Java Development Kit (JDK) には、Java プログラミング ツールの作成、トラブルシューティング、および分析が含まれています。 JRE は、JVM がアプリケーションを実行するために必要な一連のクラスとオブジェクト、およびその他の付属ファイルです。 JVM はソフトウェア開発ツールを提供しません。

Java Development Kit (JDK) は、Java アプリケーションを作成するためのソフトウェア製品です。 JRE は、Java プログラミングの実行に必要な Java クラス ライブラリとその他のコンポーネントを含むソフトウェア パッケージです。 Java Virtual Machine (JVM) は Java バイト言語を解釈し、実行に適した雰囲気を作り出します。 JDK はプラットフォーム固有であり、JRE はプラットフォームに依存し、JVM は大規模ではプラットフォームに依存します。

継承を定義する

Java では、継承はあるクラスの特性を別のクラスに転送する原則です。 これは、あるクラスが別のクラスからプロパティを取得したり、あるクラスが別のクラスの特性 (メソッドと属性) を所有できるようにする Java のフレームワークです。

Javaのクラスとは何ですか?

クラスは、オブジェクト指向プログラミングの基本要素です。 クラスのインスタンス化に起因する状態と機能を定義する形式です。 クラスは、同様の属性とメソッドを共有するモデルを構築するために使用されるため、論理テンプレートでもあります。

Java でのオーバーロードとオーバーライドの比較

オーバーロードとは、同じ名前の同じクラスのメソッドを持つことを指しますが、それぞれにさまざまな基準があるか、さまざまな型と順序を持つ同じ基準があります。 オーバーライドとは、スーパークラスと同じタイトルで同じテクニックを使用し、同じタイプの基準と戻り値を持つサブクラスを持つことを意味します。

さらに、オーバーロードは、静的結合と静的メソッドのオーバーロードを伴うコマンドライン ポリモーフィズムです。 オーバーライドは、柔軟な結合と静的メソッドをオーバーライドできないプログラム実行ポリモーフィズムです。

ダブルチェック ロックを使用して Java でスレッド セーフなシングルトンを作成する方法を説明する

シングルトン パターンはよく知られた設計パターンであり、クラスはその存続期間を通じて 1 つのインスタンスのみに制限され、複数のクライアントがそのインスタンスを共有します。 シングルトン パターンは、2 つの主要な役割で具現化されています。1 つ目は、クラス インスタンスが 1 つだけ生成されるようにすることです。 2 つ目は、誰もがその特定のインスタンスに世界中からアクセスできる方法を提供することです。

シングルトン設計がマルチスレッド プログラムで直面する課題の 1 つは、さまざまなユーザーが同時に getInstance() 手法を呼び出しても、クラスのインスタンスが 1 つだけ生成されるようにすることです。 二重チェックのロック システムは、 getInstance() 関数が初めて呼び出されたときはいつでも Singleton の個々のケースが作成されたときにのみ同期が使用され、上記の同期なしで同じインスタンスが再び戻されるようにすることで、このジレンマを修正します。他のすべてのインスタンス。

中級Javaインタビューの質問.

中級Javaインタビューの質問.

JDKとは? JDK のバリアントについて言及しますか?

JDKはJava開発キットの略です。 Java Development Kit (JDK) は、あらゆる Java アプリケーション開発の際に頼りになるソフトウェアです。 Java Development Kit (JDK) には、Java プログラミング ツールの作成、トラブルシューティング、および分析が含まれています。

基本的に、JDK は Java Standard Edition または Java Enterprise Edition の実装です。 Java は、プラットフォームの大幅なアップグレードにより、1998 年に Java 2 (Java 2 SDK または J2SDK に短縮) に名前が変更されました。 さまざまなアプリケーションをサポートするために、3 つの個別の Java バージョンを開発しました。

  • J2SE は Java 2 Platform、Basic and Usual Edition の略で、デスクトップおよびサーバー コンテキストを対象としています。
  • J2EE は Java 2 Platform, Corporate Edition の略で、ビジネス アプリケーション向けに設計されており、クラウドベースのストレージやオンライン サービス サポートなどの機能が含まれています。
  • J2ME (Java 2 プラットフォーム、マイクロ エディション) は、インストール済みおよびモバイルのガジェットまたはプラットフォームに割り当てられています。

ただし、2004 年に、亜種のラベルがそれぞれ Java ME (Java プラットフォームの Micro Edition)、Java EE (Java Platform の Enterprise Edition)、および Java SE (Java Platform の Standard Edition) に変更されました。 開発キットのモニカも「Java 2 SDK」から「JDK」に変更されました。 また、オペレーティング コンテキストの名前が「J2RE」ではなく「JRE」に変更されました。 Java SE 6 および Java EE 5 バージョンのバリアントは、現在も使用されています。

コンストラクタは値を返すことができますか?

コンストラクターは、Java でのプログラミング中に使用される従来の手法とは異なり、何らかの形で指定された結果を返さない、または返さないことを理解すると、コードに大きな影響または影響を与える可能性があります。 コンストラクターには無制限の命令を含めることができますが、ステートメントの値または結果を元に戻すことはできません。

Javaで「THIS」キーワードを説明する

「これ」は、プログラマーが現在実行しているエンティティーを指定する Java の特定の用語です。 キーワードは、メソッドまたはコンストラクターの内部から使用できる演算子であるピリオド (.) の使用に関連する異なるパラメーターの前に付けられるだけです。 「This」キーワードは、ほとんどのアプリケーションが必要な状況を回避することを目的としているため、あまり使用されません。 インスタンス変数へのアクセスは、「this」という用語を通じて提供されます。

Java の「SUPER」キーワードについて説明する

Java では、「スーパー」という標語は、派生クラスが親クラスと同じ名前のグループまたはメソッドにパラメーターを持っていると仮定して、親クラスのインスタンスを参照する継承の概念に関連付けられた相対パラメーターです。 この用語は主に、サブクラスが基本クラスのパラメーター、関数、またはコンストラクターにアクセスする必要がある場合に使用されます。

Java でのメソッドのオーバーロードについて説明する

Java では、オーバーロードは、同じ名前とクラスを持つがさまざまな基準を持つメソッドを指し、その逆も同様です。 2 つ以上の手法の名前とクラスは統一されていますが、オーバーロードのシグネチャは異なります。 オーバーロードは、メソッドの動作を拡張してオーバーロードを引き起こすコマンド ライン ポリモーフィズムです。

Javaで静的メソッドをオーバーロードできますか?

Java では、静的メソッドはオーバーロードの通常の方法論と同様に動作するため、オーバーロードされる可能性があります。 ただし、目的が静的メソッドをオーバーロードすることである場合は、同じ名前でさまざまな手法シグネチャを持つ追加の静的メソッドを提供する必要があります。

遅延バインディングを定義する

レイト バインディングは、コンパイラがメソッド呼び出しで型チェックを実行せず、引数チェックも実行せず、すべてをランタイムに任せるべきであることを示す形式です (インスタンスは COM プログラミングにあります)。

動的メソッド ディスパッチを定義する

動的メソッド ディスパッチとは、コンパイル時ではなく実行時に、オーバーライドされたメソッドへの呼び出しを解決または修正することです。

連結リストの方が配列よりも削除関数の方が速いのはなぜですか

LinkedList の削除操作は O(1) を返します。 ただし、ArrayList の削除操作は、最悪の場合、つまり最初のエントリを削除する場合に O(n) を返し、最後の要素を削除する際に最良のシナリオで O(1) を返します。 ArrayList と比較すると、LinkedList 要素の削除はより高速です。 この理由は、各 LinkedList 要素には、リスト内の両方の隣接メンバーを指す 2 つのポインター (アドレス) があるためです。 その結果、ノードを削除するには、ノードの 2 つの隣接するコンポーネントの参照位置を変更する必要があります。

経験者向けの高度なJavaインタビューの質問.

経験者向けの高度なJavaインタビューの質問.

継承は一般的なおっと概念ですが、合成ほど有利ではありません。 説明!

言語では複数の継承がサポートされていないため、Java クラスはスーパークラスを 1 つだけ持つことができます。 ファイルの読み取りや書き込みなどのさまざまな機能では、コンパイル構造が推奨されます。 プライベート メンバーのライターおよびリーダー機能と比較できます。 コンポジションの助けを借りて、大幅な柔軟性を実現しながらカプセル化の破壊を防ぐことができます。 継承のために不可能な単体テストは、構成の助けを借りて達成できます。

new() を使用した文字列の作成は、リテラルの作成とどう違うのですか?

new() を使用して文字列を生成すると、新しいオブジェクトがヒープ メモリに構築されます。 実行に時間がかかるため、文字列リテラルと比較して遅れます。 ただし、String リテラルを使用して作成された String の String に既に確立されたデータがある場合は、String プール内の String 変数と同じデータのリンクがあります。 そして、これは、同じ確立されたデータを使用してまったく新しい文字列を構築する必要なく達成されます。

ガベージコレクタがあるにもかかわらず、プログラムでメモリ制限を超えることは可能ですか?

はい。 ガベージ コレクターが存在しても、プログラムがメモリ不足になるのを止めたり妨げたりすることはありません。

同期が必要な理由関連する例を使って説明する

同期は、一致するすべてのスレッドが同時に実行されるようにするメカニズムです。 同期により、一貫性のない相乗的なメモリ ビューによって生じるメモリの一貫性の問題が回避されます。 同期メソッドでは、オブジェクトは監視され、スレッドによって所定の位置に保持されます。 別のスレッドが同期メソッドを実行している場合、現在のスレッドは、前のスレッドがモニターを解放するまで停止します。

たとえば、特定の URL に対して行われたリクエストの数を確認する必要がある状況で、複数のリクエストを実行すると、カウントが不規則になります。 スレッド 1 がカウントを 12 と見なしているとします。 1つ追加すると13になります。 同時に、別のスレッド 2 もカウントを 12 と見なし、同じように 1 を追加して 13 に増やします。このカウント値の予測不能性は、予想される最終値 14 ではなく、最終値として得られるものであるため発生します。値は 13 になります。ここで、関数が増加するにつれて同期が開始されるため ()、カウントへの同時アクセスが防止されます。

Java スレッドのライフサイクルについて説明できますか?

Java では、スレッドのライフサイクルは、スレッドの誕生から消滅までの状態変換として定義されます。 スレッドインスタンスが生成され、Thread クラスの start() 関数が呼び出されると、スレッドは実行可能な状態になります。 Thread クラスが sleep() または wait() メソッドを呼び出すと、スレッドは実行できなくなります。

順序付けされていない配列の使用と順序付けられた配列の使用の間のトレードオフは何でしょうか?

順序付き配列の大きな利点の 1 つは、O(log n) の検索時間の複雑さがあることです。 順序付けられた配列に対する挿入操作の時間的な複雑さは O(n) です。スコアが大きいメンバーをシフトして新しいバリアントを作成する必要があるためです。 反対に、順序付けられていない配列の挿入操作には、O(1) の定常時間が必要です。

Javaで同じクラスまたはパッケージを2回インポートすることは可能ですか?実行時に何が起こりますか?

はい。 クラスまたはパッケージがインポートされる頻度に関係なく、JVM は実行時に 1 回内部的にロードします。

コード system.Exit(o) が try ブロックの最後に記述されている場合、「Finally」ブロックは実行されますか?

いいえ、このシナリオでは 'finally' ブロックは実行されません。System.exit (0) がアクティブ化されると、制御は即座にプログラムから離れ、したがって "finally" は決して実行されないためです。 システムの場合。 exit(0) は例外なく呼び出されます。 プログラムは実行されません。

Javaのマーカーインターフェースで何を理解していますか

定数またはメソッドを持たないインターフェースは、オブジェクトのランタイムのタイプに関するコンパイラーおよび JVM 情報を提供するため、マーカー・インターフェースまたはタグ付けインターフェースとして知られています。 リモート インターフェイス、Serializable、および Cloneable はマーカー インターフェイスの例であり、これらのインターフェイスはすべて空です。

Java で「二重ブレースの初期化」という用語を説明する

Java では、二重ブレースの初期化は 2 つの別個のプロセスの混合です。 この状況では、2 つの中かっこ ({) が関係しています。 二重中かっこの初期化は、Java コードで 2 つの連続した中かっこが示されている場合に発生します。

名前のない内部クラスの構築は最初のブレースであり、初期化ブロックは 2 番目のブレースです。 名前のない内部クラスが初期化ブロックを使用すると、Java 二重ブレースの初期化が発生します。

結論

初心者のプログラマーや経験豊富なプログラマーにとって、これらの面接の質問は少し難しいように思えるかもしれません。 しかし、これらの質問を実践することを約束すれば、次の機会に確実に対応できます。