ホームページ >Java >&#&チュートリアル >Java 面接の質問と練習用の回答
開示: この投稿にはアフィリエイト リンクが含まれています。この記事に記載されている別のリンクから製品やサービスを購入すると、補償を受ける場合があります。
_
こんにちは開発者の皆さん、Java 開発者インタビューの準備をしていますか? 「はい」の場合、2 年から 5 年の経験を持つ経験豊富な Java プログラマー向けに、役立つ Java 面接の質問のリストを次に示します。
経験豊富な開発者として、OOP の概念、Java の基本、Java コレクション フレームワーク、Java 5 および 6 で導入されたマルチスレッドと同時実行ユーティリティ、Java アプリケーションのデバッグ、アルゴリズムとデータ構造について学ぶことが期待されています。 、デザイン パターン、JVM、ガベージ コレクション、およびいくつかのパズルに関するいくつかの質問。
実際には、日常の仕事で行うすべてのことを組み合わせたものです。
Web 開発にある程度の経験がある Java 開発者を目指す場合は、Spring、Hibernate、Struts 2.0 などの人気のある Java フレームワークについても尋ねられるでしょう。
5 年以上の経験がある場合は、Maven、ANT、Gradle などのビルド ツール、Java のベスト プラクティス、単体テスト、JUnit に関する質問や、運用上の問題の解決に関する経験も期待できます。
私が直面した最も一般的な質問の 1 つは、あなたが最後に直面した生産上の問題と、それをどのように解決したかについて話すことです。
同じ質問をされた場合は、問題の分析から戦術的な修正、戦略的な解決策に至るまで、段階的に詳しく説明してください。
この記事では、2 ~ 5 年の経験を持つ Java 担当者向けの Java 面接の質問リストを共有します。私も数年前に同様の経験をしたので、どのような質問が聞かれるか知っています。自分のリストを作成しておくことは、キャリアで新たな挑戦を始めるときに常に役に立ちます。
この投稿ではこれらの質問に対する回答を提供しません。理由は 2 つあります。質問は非常に単純で、皆さんはおそらく答えをご存知でしょう。2 番目に回答を提供するということは、この投稿を後で自分の準備に使用できないことを意味します。こちらの方が重要です。 .
ただし、誰かがリクエストしたり、必要としていると感じたりする場合は、これらすべての質問に答える別の記事を書くこともできます。
ところで、Java プログラミング言語を初めて使用する場合、または Java スキルを向上させたい場合は、CodeGym、ZTM、karpado などのサイトをチェックアウトして、ゲームやプロジェクトを構築して Java を学習することもできます。
このリストには、さまざまなトピックからの質問が含まれています。 OOP の概念、マルチスレッドと同時実行性、Java コレクション、Web サービス、Spring、Hibernate、データベース、JDBC など、準備が必要なすべてのトピックをカバーしているわけではありません。
後で時間があるときにトピックをいくつか追加します。今のところ、Google を使わずにこれらの質問に答えてみてください :)
ここでは、OOP 設計、SOLID 原則、および基本的なプログラミング概念に関するいくつかの質問を示します
疎結合ではコンポーネント間の依存関係を最小限に抑えながら相互作用できますが、密結合ではコンポーネント間に強い依存関係が作成されます。
凝集度はモジュール内の要素が互いに属する度合いを指し、結合はモジュール間の相互依存度を指します。
リスコフ置換原則では、プログラムの正確さに影響を与えることなく、スーパークラスのオブジェクトをそのサブクラスのオブジェクトに置き換えることができる必要があると述べています。
たとえば、スーパークラス「Shape」とサブクラス「Circle」および「Square」を持つクラス階層がある場合、Shape で動作するメソッドはエラーを発生させることなく、Circle または Square でも動作するはずです。
抽象クラスは抽象メソッドと具象メソッドの両方を持つことができますが、インターフェイスは抽象メソッドのみを持つことができます。さらに、クラスは複数のインターフェイスを実装できますが、拡張できる抽象クラスは 1 つだけです。
構成は、含まれるオブジェクトの有効期間がコンテナに依存する強い所有権関係を意味します。
集約は、含まれるオブジェクトがコンテナとは独立して存在できる、より弱い関係を意味します。関連とは、所有権やライフサイクル依存関係のない 2 つのクラス間の関係を意味します。
それでは、コレクションとストリームからの質問をいくつか見てみましょう
リストは要素を連続した順序で維持し、重複を許可します (ArrayList、LinkedList など)。セットでは重複は許可されず、順序も保証されません (HashSet、TreeSet など)。マップはキーと値のペアを保存し、重複キーを許可しません (例: HashMap、TreeMap)。
同期コレクションは明示的なロックを使用してスレッドセーフを実現し、一度に 1 つのスレッドのみがコレクションを変更できるようにします。同時コレクションは非ブロッキング アルゴリズムを使用し、高い同時実行性を実現するように設計されており、複数のスレッドが明示的なロックを行わずにコレクションを同時に変更できるようになります。
HashMap の get メソッドは、指定されたキーのハッシュ コードを計算し、ハッシュ コードに基づいて基になる配列内のインデックスを決定し、そのインデックスでキーを検索します。見つかった場合は、対応する値を返します。それ以外の場合は、null を返します。
ConcurrentHashMap はブロックすることなくマップへの同時アクセスを許可しますが、Hashtable は同期メソッドを使用してスレッドセーフを実現するため、潜在的なパフォーマンスのボトルネックが発生します。 ConcurrentHashMap は、マップをロックのあるセグメントに分割することでスレッド セーフを実現し、複数のスレッドが異なるセグメントを同時に変更できるようにします。
LinkedList は任意の位置で一定時間の挿入と削除を提供するため、頻繁に挿入と削除の操作が必要な場合は LinkedList を使用します。 ArrayList はインデックスによる定時アクセスを提供するため、ランダム アクセスと反復が頻繁に行われる場合は ArrayList を使用します。
ここで、Java マルチスレッドと同時実行の概念からの質問を見てみましょう。
notify と NoticeAll は両方とも、モニターで待機している (つまり、オブジェクトのロックの取得を待機している) スレッドを起動するために使用される Java のメソッドです。 Notice はランダムに選択された 1 つのスレッドを起動し、notifyAll は待機中のすべてのスレッドを起動します。これにより、待機中のすべてのスレッドが確実に通知され、潜在的な無限の待機が防止され、システムの応答性が向上するため、notifyAll が推奨されます。
競合状態は、プログラムの結果が複数のスレッドのタイミングまたはインターリーブに依存する場合に発生します。競合状態を回避するには、ロック、セマフォ、アトミック操作などの同期メカニズムを使用して、コードの重要なセクションがアトミックに、または一度に 1 つのスレッドのみによって実行されるようにすることができます。
デッドロックは、2 つ以上のスレッドが、続行するために必要なリソースを互いに解放するのを待ってスタックしているときに発生します。デッドロックを回避するには、リソースの順序付け、ネストされたロックの回避、ロック取得のタイムアウトの使用などの手法を使用できます。さらに、明確で一貫したロック順序を使用してコードを設計すると、デッドロックの防止に役立ちます。
java.util.concurrent によって提供される高レベルの同時実行クラスには、ExecutorService、ThreadPoolExecutor、CountDownLatch、Semaphore、CyclicBarrier、BlockingQueue、ConcurrentHashMap などがあります。これらのクラスは、スレッド プール、同期プリミティブ、同時データ構造などの一般的な同時実行パターンとメカニズムのスレッドセーフな実装を提供します。
はい、コードは次のとおりです:
import java.util.concurrent.ArrayBlockingQueue; class Producer implements Runnable { private final ArrayBlockingQueue<Integer> queue; private int count = 0; Producer(ArrayBlockingQueue<Integer> queue) { this.queue = queue; } public void run() { try { while (true) { queue.put(produce()); Thread.sleep(1000); // Simulate some work } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } private int produce() { System.out.println("Producing: " + count); return count++; } } class Consumer implements Runnable { private final ArrayBlockingQueue<Integer> queue; Consumer(ArrayBlockingQueue<Integer> queue) { this.queue = queue; } public void run() { try { while (true) { consume(queue.take()); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } private void consume(int item) { System.out.println("Consuming: " + item); } } public class Main { public static void main(String[] args) { ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10); Producer producer = new Producer(queue); Consumer consumer = new Consumer(queue); Thread producerThread = new Thread(producer); Thread consumerThread = new Thread(consumer); producerThread.start(); consumerThread.start(); } }
JDBC は Java プログラムからデータベースに接続するために使用されます。データベースと JDBC についていくつか質問してみましょう
SQL インジェクション攻撃を防ぐには、バインドされたパラメーター、入力検証、エスケープ文字を含むパラメーター化されたクエリ (準備されたステートメント) を使用します。ユーザー入力を連結して構築された動的 SQL クエリは避けてください。
The WHERE clause filters rows before the grouping and aggregation process, while the HAVING clause filters aggregated data after the grouping process based on specified conditions.
Transactions are a set of SQL statements that are executed as a single unit of work. ACID is an acronym for Atomicity, Consistency, Isolation, and Durability, which are properties that ensure the reliability of transactions in a database system.
Window functions perform calculations across a set of rows related to the current row within a query result set. They allow you to perform aggregate functions (such as SUM, AVG, COUNT) over a specified window or subset of rows, defined by the OVER clause. Window functions operate on a set of rows and return a single value for each row based on that set of rows. They are often used for tasks such as ranking, aggregation, and calculating running totals.
See, Grokking the SQL Interview book if you need more questions on Database and SQL
Now, its time to see questions from Hibernate, one of the popular Java framework:
It's better to use plain SQL when:
In Java, a sorted collection maintains elements in a specific order defined by a comparator or by the natural ordering of elements, while an ordered collection maintains elements in the order they were inserted.
Second level cache in Hibernate stores objects in a shared cache region, typically across multiple sessions. When an entity is queried for the first time, it is fetched from the database and stored in the second level cache. Subsequent queries for the same entity can then be satisfied from the cache instead of hitting the database, improving performance.
Both save() and persist() methods in Hibernate are used to save an entity to the database. However, save() returns the generated identifier immediately, while persist() doesn't guarantee immediate execution of the SQL INSERT statement; it may be executed later during flush time. Additionally, persist() is part of the JPA specification, while save() is specific to Hibernate.
Now, let's see questions form Microservice architecture and REST web services
SOAP is protocol-based with rigid structure, while REST is architectural style based on stateless communication with flexible endpoints.
It encapsulates the entire SOAP message and defines its structure.
Implement SSL/TLS for encryption and authentication.
It's the data transmitted in the body of the HTTP request or response.
It's an architectural style where applications are composed of small, independent services.
Microservices refer to architectural design, while REST is an architectural style for networked applications.
Monolithic has single codebase, while Microservices have multiple, independent components; Monolithic can have higher latency.
It manages distributed transactions in Microservices architecture.
It's the mechanism for locating services dynamically within a Microservices architecture.
Before any Java and Spring Developer interview, I always read the Grokking the Java Interview and Grokking the Spring boot Interviw
Here are few more questions from these books:
and,
And, if you are new to Java then you can also checkout sites like CodeGym, ZTM and karpado to learn Java by building Games and projects.
Thank you guys for now. You can find the answers in web easily but if there are enough interest, I can also update the post. Let me know if you have also asked these questions before. If anyone knows answer, can also post as comment.
Good luck for your Java Interview.
By the way, if you are new to Java programming language or want to improve Java skills then you can also checkout following best Java courses to get better:
以上がJava 面接の質問と練習用の回答の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。