Java は 1995 年に Sun Microsystems によって初めてリリースされました。Java の開発は、James Gosling と彼のチームが主導して 1990 年代初頭に始まりました。この言語はもともと「Oak」と呼ばれていましたが、後にコーヒーの種類にちなんで「Java」と改名されました。
Java は、基盤となるハードウェアやオペレーティング システムに関係なく、あらゆるデバイス上で実行できるソフトウェアの作成に使用できる、プラットフォームに依存しないプログラミング言語のニーズに対処するために作成されました。主な目標は、開発者が「一度書けば、どこでも実行できる」ようにすることでした。これは、Java で書かれたコードが、Java 仮想マシン (JVM) をサポートするあらゆるプラットフォームで実行できることを意味します。
Java は、シンプルさ、移植性、セキュリティに重点を置いて設計されており、Web 開発からエンタープライズ ソフトウェアまで、幅広いアプリケーションに適しています。その汎用性と、さまざまなプラットフォームにわたって堅牢で高性能なアプリケーションを構築できる機能により、すぐに人気が高まりました。
今日のソフトウェア開発で最も広く使用されている言語の 1 つであり、私はこれを長い間研究してきたので、Java の素晴らしい世界に関するいくつかの質問と回答をここに集めました。
多くの人に嫌われていますが、他の人には愛されています。
質問
1. JDK と JRE の違いは何ですか?
JDK( Java Development kit ) は、開発者が Java アプリケーションを作成するために使用し、必要なツール、ライブラリ、コンパイラが含まれています。 JRE (Java ランタイム環境) は、エンドユーザーが Java アプリケーションを実行するために使用し、ランタイム環境と必須のクラス ライブラリを提供しますが、開発ツールは含まれません。
2. Java を使用する利点は何ですか?
Java を使用する利点は次のとおりです:
移植性: Java コードは、Java 仮想マシン (JVM) を備えた任意のプラットフォームで実行できます。
セキュリティ: Java には、悪意のあるコードからユーザーを保護するのに役立つセキュリティ モデルが組み込まれています。
オブジェクト指向: Java はオブジェクト指向プログラミング言語であり、モジュール式で再利用可能なコードを簡単に作成できます。
堅牢: Java は、信頼性が高く効率的になるように設計された堅牢な言語です。
広く使用されています: Java は、開発者とサポート リソースの大規模なコミュニティがあり、広く使用されている言語です。
3. Java プラットフォームのさまざまなコンポーネントとは何ですか?
Java プラットフォームは、Java アプリケーションを開発および実行するための標準的な方法を提供するソフトウェア環境です。これは次のコンポーネントで構成されます:
Java 仮想マシン (JVM)。
Java ランタイム環境 (JRE)。
Java 開発キット (JDK)。
4. Java データ型にはどのような種類がありますか?
Java には、プリミティブ データ型と非プリミティブ データ型の 2 種類のデータ型があります。
プリミティブデータ型
非プリミティブ データ型
5. Java 制御ステートメントにはどのような種類がありますか?
Java には 3 種類の制御ステートメントがあります:
6. Java クラスと Java インターフェイスのさまざまな種類とは何ですか?
Java クラスには主に 2 つのタイプがあります:
通常のクラス は、Java で最も一般的なタイプのクラスです。フィールド、メソッド、コンストラクターを含めることができます。
抽象クラス はインスタンス化できないクラスです。これらは、他のクラスの基本クラスとしてのみ使用できます。
Java インターフェースには主に 2 つのタイプがあります:
通常のインターフェース は、抽象メソッドのコレクションです。クラスはインターフェイスを実装できるため、インターフェイスの抽象メソッドを継承できます。
Maker インターフェース はメソッドを含まないインターフェースです。これらは、クラスに特定のプロパティまたは動作があることを示すために使用されます。
7. Java ライブラリと Java フレームワークにはどのような種類がありますか?
Java ライブラリは、再利用可能な Java クラスとインターフェースのコレクションです。
** Java ライブラリの例:**
Apache Commons Google Guava Joda-Time JUnit Mockito
Java フレームワークは、特定の機能を提供する再利用可能な Java クラス、インターフェース、およびコードのコレクションです。
Java ライブラリの例:
8. Java ツールにはどのような種類がありますか?
Java にはユーザー スレッドとデーモン スレッドの 2 種類のスレッドがあります。
ユーザー スレッド は、ユーザーまたはアプリケーションによって作成されるスレッドです。これらは優先度の高いスレッドであり、JVM はユーザー スレッドがタスクを終了するまで待機してから終了します。
デーモン スレッド は、ユーザー スレッドにサービスを提供するために作成されたスレッドです。これらは優先度の低いスレッドであり、ユーザー スレッドの実行中にのみ必要となります。すべてのユーザー スレッドの実行が完了すると、実行中のデーモン スレッドが存在する場合でも、JVM は終了します。
9. Java ネットワークにはどのような種類がありますか?
Java ネットワーキングには主に 2 つのタイプがあります:
クライアント/サーバー ネットワーキング は、サーバー アプリケーションにサービスを要求するクライアント アプリケーションが存在するネットワーキングの一種です。その後、サーバー アプリケーションはクライアント アプリケーションにサービスを提供します。
ピアツーピア ネットワーキングは、2 つ以上のアプリケーションがサーバーを必要とせずに相互に直接通信するネットワーキングの一種です。
10.手続き型プログラミングと OOP の違いは何ですか?
手続き型プログラミングは、プログラミングに対するトップダウンのアプローチであり、プログラムは、それぞれが特定のタスクを実行する一連の関数に分割されます。
一方、OOP はプログラミングへのボトムアップ アプローチであり、プログラムは現実世界の実体をそれぞれ表すオブジェクトに分割されます。
11. OOP の中核となる概念は何ですか?
OOP の中心的な概念は次のとおりです:
抽象化: 抽象化は、オブジェクトの実装の詳細をユーザーから隠すプロセスです。これにより、ユーザーは許可されます。これにより、ユーザーはオブジェクトがどのように動作するかを気にすることなく、オブジェクトの機能に集中できるようになります。
12.オーバーロードとオーバーライドの違いは何ですか?
オーバーロードとは、名前は同じだがパラメーターが異なる複数のメソッドを持つ機能を指します。
オーバーライドとは、スーパークラスのメソッドと同じシグネチャを持つメソッドをサブクラスに含めることができる機能を指します。
13.静的バインディングと動的バインディングの違いは何ですか?
静的バインディングと動的バインディングは、オブジェクト指向プログラミング (OOP) で関数呼び出しを解決する 2 つの異なる方法です。
-静的バインディング: は、コンパイラがコンパイル時に呼び出すメソッドを決定するときに発生します。これは OOP で最も一般的なタイプのバインディングであり、静的メソッドと非仮想メソッドの両方に使用されます。
-動的バインディング: は、呼び出されるメソッドが実行時まで決定されない場合に発生します。これは、ポリモーフィズムを可能にする仮想メソッドに使用されます。
14. Java が多重継承をサポートしないのはなぜですか?
Java は、次のような多くの問題を引き起こす可能性があるため、多重継承をサポートしていません。
15. Java でインターフェイスと抽象クラスをいつ使用しますか?
抽象クラスと抽象インターフェイスはどちらも、オブジェクト指向プログラミングで抽象化を実現するために使用されます。
抽象クラスは通常のクラスに似ていますが、本体のないメソッドである抽象メソッドを含めることができる点が異なります。抽象クラスはインスタンス化できません。
Interfaces are a kind of code contract, which must be implemented by a concrete class. Interfaces cannot have state, whereas the abstract class can have state whith instance variables.
16. What are the challenges of using OOP in Java?
There are some challenges associated with using OOP in Java.
These challenges include:
Complexity: OOP can make code more complex, especially when dealing with large and complex systems.
17. What is the difference between an array and a linked list?
In general, arrays are good choice for data structures where the data is accessed frequently and the order of the data is important.
Linked lists are a good choice for data structures where the data is inserted or deleted frequently and the order of the data is not important.
18. Explain the concept of a hash table.
A hash table is a data structure that maps keys to values. It is a very efficient data structure for storing and retrieving data, as it can access data in constant time.
put(key, value): This method stores the key-value pair in the hash table.
get(key): This method returns the value associated with the key.
remove(key): This method removes the key-value pair from the hash table.
19. What is the time complexity of various operations in a binary search tree (BST)?
The time complexity of various operations in a binary search tree (BST) depends on the height of the tree. The height of a BST is the number of nodes on the longest path from the root node to a leaf node.
The following table shows the time complexity of various operations in a BST:
Operation---------------Time complexity
20. Describe the difference between breadth-first search (BFS) and depth-first search (DFS) algorithms.
Here is a table that summarizes the key differences between BFS and DFS:
21. Explain the concept of a priority queue and provide an example of its application.
A priority queue is a data structure that stores elements along with their associated priorities. It allows efficient retrieval of the element with the highest (or lowest) priority. The priority determines the order in which elements are processed or accessed.
22. Explain the concept of dynamic programming and provide an example problem where it can be applied.
Dynamic programming is a problem-solving technique that involves breaking down complex problems into smaller, overlapping subproblems and solving them in a bottom-up manner.
23. How does a HashSet work internally in Java?
A HashSet internally uses a HashMap to store its elements. When you add an element to a HashSet, it is first hashed using the hashCode() method.
The hash code is then used to find the corresponding bucket in the HashMap. If the bucket is not empty, the element is compared to the other elements in the bucket using the equals() method. If the element is equal to any of the other elements in the bucket, it is not added to the HashSet.
24. What is the time complexity of various operations in a hash table?
The time complexity of various operations in a hash table depends on the hash function used and the number of elements in the hash table. In general, the time complexity of the following operations is:
25. What is multithreading, and why is it important in Java?
Multithreading is a programming concept that allows multiple tasks to be executed concurrently. In Java, multithreading is implemented using the thread class. A thread object represents a single thread of execution.
Java でマルチスレッドが重要である理由はたくさんあります。
最も重要な理由には次のようなものがあります:
26. Java でスレッドを作成するにはどうすればよいですか?
Java でスレッドを作成するには 2 つの方法があります:
27.プロセスとスレッドの違いは何ですか?
プロセスとは、実行中のプログラムです。独自のメモリ空間、独自のスタック、独自のリソースのセットを持っています。
スレッドは、同じプロセス内の他のスレッドと同じメモリ空間とリソースを共有する軽量プロセスです。
プロセスとスレッドの主な違いのいくつか:
- プロセスは互いに独立しています。
- プロセスはスレッドよりも重いです。
- プロセスはスレッドよりも作成および管理が困難です。
28. Java では同期はどのように機能しますか?同期されたメソッドとブロックの概念を説明します。
Java の同期は、複数のスレッドが共有リソースに安全にアクセスできるようにするメカニズムです。スレッドがリソース上で同期されている場合、そのスレッドはそのリソースにアクセスできる唯一のスレッドです。
これにより、2 つ以上のスレッドが同時に同じリソースにアクセスしようとする状況である競合状態が防止されます。
Java で同期するには 2 つの方法があります:
同期メソッド:
同期メソッドは、一度に 1 つのスレッドでのみ実行できるメソッドです。メソッドを同期済みとして宣言するには、synchronized キーワードを使用する必要があります。
同期ブロック
同期ブロックは、一度に 1 つのスレッドによってのみ実行できるコードのブロックです。コードのブロックを同期済みとして宣言するには、synchronized キーワードを使用し、ブロックが同期されるオブジェクトを指定する必要があります。
29.デッドロックとは何ですか?また、それを回避するにはどうすればよいですか?
デッドロックとは、2 つ以上のスレッドが互いの終了を待っている状況です。これは、2 つのスレッドがそれぞれ同じリソースのロックを取得しようとしているときに発生する可能性があります。
デッドロックを回避するには、次のようにします。
30. Java の volatile キーワードの目的は何ですか?
volatile キーワードは、値が別のスレッドによって変更された場合でも、すべてのスレッドが変数の同じ値を参照できるようにするために使用されます。
31.スレッド スケジューリングのコンテキストで、プリエンプティブ スケジューリングとタイム スライスの違いを説明します。
プリエンプティブ スケジューリングとは、オペレーティング システムが CPU からスレッドを強制的に削除し、別のスレッドに割り当てることができる場合です。タイムスライスとは、各スレッドに CPU 上で実行する一定の時間が与えられることです。
主な違いは、プリエンプティブ スケジューリングでは、オペレーティング システムがいつでもスレッドを中断できるのに対し、タイム スライスでは、割り当てられた時間を使い果たした場合にのみスレッドが中断されることです。
32. Java の例外とは何ですか?また、例外処理が重要なのはなぜですか?
Java では、例外とは、プログラムの実行中に発生し、通常の命令フローを中断するイベントです。実行時にスローされるオブジェクトです。
例外処理の利点の一部を次に示します。
33. Java は例外をどのように処理しますか。
Java は、例外伝播と呼ばれるメカニズムを使用して例外を処理します。例外がスローされると、例外はキャッチされるまでコール スタックに伝播されます。例外がキャッチされないと、プログラムはクラッシュします。
34. try-catch-finally ブロックと例外処理におけるその目的について説明します。
try-catch-finally ブロックは、例外を適切に処理できるようにする Java 構文です。これは 3 つの部分で構成されています:
try-catch-finally ブロックを使用する利点の一部を次に示します。
35. Java の throw キーワードと throws キーワードの違いは何ですか?
Java の throw および throws キーワードは、例外を処理するために使用されます。
36. Java でカスタム例外を作成するにはどうすればよいですか?
Java でカスタム例外を作成するには、Exception クラスを拡張するクラスを作成する必要があります。カスタム例外クラスは、独自のコンストラクター、メソッド、およびフィールドを持つことができます。
参考文献: https://medium.com/@spinjosovsky/practical-comparison-between- Depth-first-search-dfs-vs-breadth-first-serch-bfs-bf360240cf72
https://docs.oracle.com/en/java/
https://www.algotutor.io/campus-program
以上がJava の基本的な質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。