ホームページ  >  記事  >  Java  >  面接の質問の概要を Java で共有する

面接の質問の概要を Java で共有する

零下一度
零下一度オリジナル
2017-06-28 16:02:041075ブラウズ

1) Java 仮想マシンとは何ですか? Java が「プラットフォームに依存しないプログラミング言語」と呼ばれるのはなぜですか?

Java仮想マシンは、Javaバイトコードを実行できる仮想マシンプロセスです。 Java ソース ファイルは、Java 仮想マシンで実行できるバイトコード ファイルにコンパイルされます。
Java は、プログラマーがプラットフォームごとにアプリケーションを個別に書き直したり再コンパイルしたりする必要がなく、アプリケーションをあらゆるプラットフォームで実行できるように設計されています。 Java 仮想マシンは、基礎となるハードウェア プラットフォームの命令長やその他の特性を認識しているため、これが可能になります。

2) JDK と JRE の違いは何ですか?

Java ランタイム環境 (JRE) は、Java プログラムを実行する Java 仮想マシンです。アプレットの実行に必要なブラウザ プラグインも含まれています。 Java Development Kit (JDK) は、JRE、コンパイラ、その他のツール (JavaDoc、Java デバッガなど) を含む完全な Java ソフトウェア開発キットで、開発者はこれを使用して Java アプリケーションを開発、コンパイル、実行できます。

3) 「静的」キーワードは何を意味しますか? Java でプライベート メソッドまたは静的メソッドをオーバーライドすることはできますか?

「static」キーワードは、メンバー変数またはメンバー メソッドが、それが属するクラスのインスタンス変数なしでアクセスできることを示します。
静的メソッドはコンパイル時に静的にバインドされるのに対し、メソッドのオーバーライドは実行時の動的バインディングに基づいているため、Java の静的メソッドをオーバーライドすることはできません。静的メソッドはクラスのどのインスタンスにも関連していないため、概念的には適用されません。

4) 静的環境で非静的変数にアクセスすることは可能ですか?

静的変数はJavaのクラスに属しており、その値はすべてのインスタンスで同じです。クラスが Java 仮想マシンによってロードされると、静的変数が初期化されます。コードがインスタンスを使用せずに非静的変数にアクセスしようとすると、これらの変数はまだ作成されておらず、どのインスタンスにも関連付けられていないため、コンパイラーはエラーを報告します。

5) Java でサポートされるデータ型は何ですか?自動開梱ボックスとは何ですか?

Java 言語でサポートされている 8 つの基本データ型は、byte、short、int、long、float、double、boolean、char です
オートボックス化は、Java コンパイラーが基本データ型と対応するオブジェクト パッケージ化型の間で実行するものです。変身。例: int を Integer に、double を Double に変換します。それ以外の場合は、自動的に開梱されます。

6) Java におけるメソッドのオーバーライドとメソッドのオーバーロードは何を意味しますか?

Java でのメソッドのオーバーロードは、同じクラス内の 2 つ以上のメソッドのメソッド名は同じだがパラメーターが異なる場合に発生します。対照的に、メソッドのオーバーライドとは、サブクラスが親クラスのメソッドを再定義することを意味します。メソッドのオーバーライドは、同じメソッド名、パラメータ リスト、戻り値の型を持つ必要があります。オーバーライダーは、オーバーライドするメソッドへのアクセスを制限できない場合があります。

7) Java のコンストラクターとは何ですか?コンストラクターのオーバーロードとは何ですか?コピーコンストラクターとは何ですか?

新しいオブジェクトが作成されると、コンストラクターが呼び出されます。すべてのクラスにはコンストラクターがあります。プログラマがクラスのコンストラクタを提供しない場合、Java コンパイラはクラスのデフォルトのコンストラクタを作成します。
Java のコンストラクターのオーバーロードとメソッドのオーバーロードは非常に似ています。 1 つのクラスに対して複数のコンストラクターを作成できます。各コンストラクターには独自の一意のパラメーター リストが必要です。
Java は C++ のようなコピー コンストラクターをサポートしていません。この違いは、コンストラクターを自分で作成しない場合、Java はデフォルトのコピー コンストラクターを作成しないためです。

8) Java は多重継承をサポートしていますか?

Java のクラスは多重継承をサポートせず、単一継承のみをサポートします (つまり、クラスには親クラスが 1 つだけあります)。 ただし、Java のインターフェイスは多重継承をサポートしています。つまり、サブインターフェイスは複数の親インターフェイスを持つことができます。 (インターフェイスの機能は、オブジェクトの機能を拡張することです。サブインターフェイスは複数の親インターフェイスを継承します。これは、サブインターフェイスが複数の機能を拡張することを示します。クラスがインターフェイスを実装する場合、クラスは対応する機能を拡張します。)

9) インターフェースと抽象クラスの違いは何ですか?

Java は、抽象クラスとインターフェイスの作成を提供およびサポートします。これらの実装には共通点がありますが、違いは次のとおりです:
インターフェース内のすべてのメソッドは暗黙的に抽象です。抽象クラスには、抽象メソッドと非抽象メソッドの両方を含めることができます。
クラスは多くのインターフェイスを実装できますが、継承できる抽象クラスは 1 つだけです。
クラスは、抽象クラスとインターフェイスによって宣言されたすべてのメソッドを実装する必要はありません。もちろん、この場合、クラスも抽象として宣言する必要があります。 。
抽象クラスは、インターフェイス メソッドの実装を提供せずにインターフェイスを実装できます。
Java インターフェースで宣言された変数は、デフォルトでは Final です。抽象クラスには非最終変数を含めることができます。
Java インターフェースのメンバー関数はデフォルトでパブリックです。抽象クラスのメンバー関数は、プライベート、プロテクト、またはパブリックにすることができます。
インターフェイスは完全に抽象的であり、インスタンス化できません。抽象クラスはインスタンス化できませんが、メイン メソッドが含まれている場合は呼び出すことができます。

10) 値渡しと参照渡しとは何ですか?

オブジェクトは値によって渡されます。これは、オブジェクトのコピーが渡されることを意味します。したがって、オブジェクトのコピーを変更しても、ソース オブジェクトの値は影響を受けません。
オブジェクトは参照によって渡されます。つまり、渡されるのは実際のオブジェクトではなく、オブジェクトへの参照です。したがって、参照オブジェクトに対して外部から行われた変更は、すべてのオブジェクトに反映されます。
11) プロセスとスレッドの違いは何ですか?

プロセスは実行中のアプリケーションであり、スレッドはプロセス内の実行シーケンスです。プロセスには複数のスレッドを含めることができます。スレッドは軽量プロセスとも呼ばれます。

12) スレッドを作成する方法は何通りありますか?あなたはどちらを好みますか?なぜ?

スレッドを作成するには 3 つの方法があります:
Thread クラスを継承する
Runnable インターフェイスを実装する
アプリケーションは Executor フレームワークを使用してスレッド プールを作成できる
Runnable インターフェイスを実装する この方法は、Thread クラスを継承する必要がないため、より一般的です。アプリケーション設計で他のオブジェクトが継承されている場合、多重継承が必要となり (Java は多重継承をサポートしていません)、実装できるのはインターフェイスのみです。同時に、スレッド プールは非常に効率的で、実装と使用が簡単です。

13) スレッドで利用可能ないくつかの状態について簡単に説明します。

新規、実行可能、実行中、ブロック中、デッド


14) 同期メソッドと同期コード ブロックの違いは何ですか?

違い:
同期メソッドは、デフォルトでロックとしてこのオブジェクトまたは現在のクラス オブジェクトを使用します。
同期コード ブロックはロック対象を選択でき、同期メソッドのみを選択できます。メソッド全体ではなく、コードの一部が原因で同期の問題が発生します

15) スレッドの同期はモニター内でどのように行われますか?プログラムはどのレベルの同期を実行する必要がありますか?

Java 仮想マシンではモニターとロックが一緒に使用されます。モニターは、同期されたコード ブロックを監視して、一度に 1 つのスレッドだけが同期されたコード ブロックを実行することを確認します。各モニターはオブジェクト参照に関連付けられます。スレッドは、ロックを取得する前に同期コードを実行することはできません。

16) デッドロックとは何ですか?

デッドロックは、2 つ以上のプロセスが続行する前に他のプロセスの実行が完了するのを待っている場合に発生します。その結果、すべてのプロセスが無限待機状態になります。

17) デッドロックを引き起こすことなく N 個のスレッドが N 個のリソースにアクセスできるようにするにはどうすればよいでしょうか?

マルチスレッドを使用する場合、デッドロックを回避する非常に簡単な方法は、ロックを取得する順序を指定し、スレッドが指定された順序でロックを取得するように強制することです。したがって、すべてのスレッドが同じ順序でロックとロックの解放を行う場合、デッドロックは発生しません。

18) Java コレクション クラス フレームワークの基本インターフェイスは何ですか?

コレクション クラス インターフェイスは、要素と呼ばれるオブジェクトのセットを指定します。コレクション クラス インターフェイスの各具象実装クラスは、独自の方法で要素の保存と並べ替えを選択できます。コレクション クラスの中には、重複キーを許可するものと許可しないものがあります。
Java コレクション クラスは、オブジェクトのセットに対する操作をサポートする、適切に設計されたインターフェイスとクラスのセットを提供します。 Java コレクション クラスの最も基本的なインターフェイスは次のとおりです:
Collection: オブジェクトのグループを表し、各オブジェクトはその子要素です。
Set: 重複した要素を含まないコレクション。
リスト: 順序付けられたコレクションであり、繰り返しの要素を含めることができます。
Map: キーを値にマップできるオブジェクト。キーを繰り返すことはできません。

19) コレクション クラスが Cloneable インターフェイスと Serializable インターフェイスを実装していないのはなぜですか?

クローン作成またはシリアル化のセマンティクスと意味は、特定の実装に関連しています。したがって、コレクション クラスをどのように複製またはシリアル化するかは、コレクション クラスの特定の実装によって決まります。

20) イテレータとは何ですか?

Iterator インターフェースは、コレクション要素を反復処理するためのメソッドを多数提供します。すべてのコレクション クラスには、反復子インスタンスを返す反復メソッドが含まれています。イテレータは、反復プロセス中に基になるコレクションの要素を削除できますが、コレクションのremove(Object Obj)を直接呼び出して削除することはできません。イテレータのremove()メソッドを使用して削除できます。


以上が面接の質問の概要を Java で共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。