国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ Java &#&面接の質問 Java 面接でよくある質問 (回答付き)

Java 面接でよくある質問 (回答付き)

Nov 26, 2019 pm 03:02 PM
java

Java 面接でよくある質問 (回答付き)

#配列を使用してキューを実裝するにはどうすればよいですか?

配列を使用してキューを実裝する場合、オーバーフロー現象に注意する必要がありますが、この場合は配列をループする、つまり両端を接続する方法を使用して解決できます。配列の。フロント ポインタを使用してキューの最初の位置を指し、テール ポインタを使用してキューの最後の位置を指します。 (推奨される學習:

java の一般的な面接の質問 )

內部クラスがローカル変數にアクセスするとき、変數を Final で変更する必要があるのはなぜですか?

ライフサイクルが違うからです。ローカル変數はメソッド終了後に破棄されますが、內部クラスのオブジェクトは必ずしも破棄されるわけではなく、內部クラスが存在しない変數を參照することになります。

したがって、コンパイラは內部クラスにローカル変數のコピーを生成しますが、このコピーのライフサイクルは內部クラスのオブジェクトと同じであるため、上記の問題は発生しません。

しかし、これにより、変數の 1 つが変更され、2 つの変數の値が異なる可能性があるという問題が発生します。この問題を解決するために、コンパイラは、2 つの変數が同じ値を持つようにローカル変數を最終的に変更する必要があることを要求します。

JDK8 以降、コンパイラは、內部クラスによってアクセスされるローカル変數を最終的に変更する必要はありませんが、ローカル変數の値は (メソッド內でも內部クラス內でも) 変更できません。変更しないとコンパイルが失敗します。エラーが報告されます。 javap を使用してコンパイルされたバイトコードを表示すると、コンパイラーが Final を追加していることがわかります。

long s = 499999999 * 499999999 上記のコードでは、s の値は何ですか?

コードの計算結果によれば、s の値は -1371654655 となるはずですが、これは Java の右辺の値の計算がデフォルトで int 型になっているためです。

非靜的內部クラスは靜的メソッドを定義できますか?

public class OuterClass{
    private static float f = 1.0f;

    class InnerClass{
        public static float func(){return f;}
    }
}

靜的メソッドを定義できるのは靜的內部クラスのみであるため、上記のコードはコンパイル エラーを引き起こします。

ロックと同期の違いは何ですか?

1. 使用方法的區(qū)別
- **Synchronized**:在需要同步的對象中加入此控制,`synchronized`可以加在方法上,也可以加在特定代碼塊中,括號中表示需要鎖的對象。
- **Lock**:需要顯示指定起始位置和終止位置。一般使用`ReentrantLock`類做為鎖,多個線程中必須要使用一個`ReentrantLock`類做為對象才能保證鎖的生效。且在加鎖和解鎖處需要通過`lock()`和`unlock()`顯示指出。所以一般會在`finally`塊中寫`unlock()`以防死鎖。
2. 性能的區(qū)別
`synchronized`是托管給JVM執(zhí)行的,而`lock`是java寫的控制鎖的代碼。在Java1.5中,`synchronize`是性能低效的。因為這是一個重量級操作,需要調用操作接口,導致有可能加鎖消耗的系統(tǒng)時間比加鎖以外的操作還多。相比之下使用Java提供的Lock對象,性能更高一些。但是到了Java1.6,發(fā)生了變化。`synchronize`在語義上很清晰,可以進行很多優(yōu)化,有適應自旋,鎖消除,鎖粗化,輕量級鎖,偏向鎖等等。導致在Java1.6上`synchronize`的性能并不比Lock差。
  - **Synchronized**:采用的是CPU悲觀鎖機制,即線程獲得的是獨占鎖。獨占鎖意味著 **其他線程只能依靠阻塞來等待線程釋放鎖**。而在CPU轉換線程阻塞時會引起線程上下文切換,當有很多線程競爭鎖的時候,會引起CPU頻繁的上下文切換導致效率很低。
  - **Lock**:用的是樂觀鎖方式。所謂樂觀鎖就是,**每次不加鎖而是假設沒有沖突而去完成某項操作,如果因為沖突失敗就重試,直到成功為止**。樂觀鎖實現的機制就是`CAS`操作。我們可以進一步研究`ReentrantLock`的源代碼,會發(fā)現其中比較重要的獲得鎖的一個方法是`compareAndSetState`。這里其實就是調用的CPU提供的特殊指令。
3. `ReentrantLock`:具有更好的可伸縮性:比如時間鎖等候、可中斷鎖等候、無塊結構鎖、多個條件變量或者鎖投票。

float 変數は 0 とどのように比較されるのでしょうか?

folat 型と double 型があり、これら 10 進數型は 0 に近づくと直接 0 になる可能性は非常に低く、一般的には限りなく 0 に近づくため、= で判定することはできません。 |x-0|
//用程序表示就是

fabs(x) < 0.00001f

新しい非靜的內部クラスを作成するにはどうすればよいですか?

內部クラスは、 int a と同様に、宣言されるときは、Outer.Inner a である必要があります。靜的內部クラスと非靜的內部クラス new に関しては、違いがあります:

Outer .Inner a = new inner().new Inner() (非靜的、新しい內部クラスを作成する前に、Outer オブジェクトが存在する必要があります)

Outer.Inner a = new inner.Inner() (靜的內部クラス)

Java 識別子の命名規(guī)則

次の文字、數字、$、_ (アンダースコア) を含めることができます。數字で始めることはできません。 Java のキーワードまたは予約語。

JDK で使用されているデザイン パターンを知っていますか?

デコレーション モード: java.io

シングル ケース モード: ランタイム クラス

シンプル ファクトリ モード: Integer.valueOf メソッド

フライウェイト モード :文字列定數プール、Integer.valueOf(int i)、Character.valueOf(char c)

イテレータ モード: Iterator

責任連鎖モード: ClassLoader の親委任モデル

インタプリタ モード: 正規(guī)表現 java.util.regex.Pattern

ConcurrentHashMap がスレッド セーフを確保する方法

JDK 1.7 以前:

ConcurrentHashMap では複數の変更が可能鍵となるのは、ロック分離テクノロジーの使用です。複數のロックを使用して、ハッシュ テーブルのさまざまな部分への変更を制御します。 ConcurrentHashMap は、これらのさまざまな部分を表すために內部的にセグメントを使用します。各セグメントは実際には小さなハッシュ テーブルであり、獨自のロックを持っています。複數の変更操作は、異なるセグメントで実行される限り、同時に実行できます。

JDK 1.8:

セグメントは保持されますが、その屬性は古いバージョンとの互換性を保つために簡素化されています。

挿入時に CAS アルゴリズムを使用します: unsafe.compareAndSwapInt(this, valueOffset, Expect, update)。 CAS (Compare And Swap) は、valueOffset 位置に含まれる値が期待値と同じである場合、valueOffset 位置の値を更新して true を返し、それ以外の場合は更新せずに false を返すことを意味します。挿入するときにキーまたは値を null にすることはできません。

これは Java8 の HashMap に似ています。最下層は引き続き「配列」リンク リストの赤黒ツリーで構成されます。

最下位構造體には TreeBin オブジェクトが格納されますが、TreeNode オブジェクトではありません。

CAS はよく知られたロックフリー アルゴリズムなので、ConcurrentHashMap にはロックがありませんか?もちろんそうではありません。ハッシュ値がリンク リストのヘッド ノードと同じである場合でも、同期されてロックされ、リンク リストはロックされます。

Thread.sleep() と Thread.yield()&Thread.wait() の違い

sleep() と yield() はどちらも CPU を解放します。

sleep() は、優(yōu)先順位の低いスレッドに実行の機會を與えることができます。もちろん、同じ優(yōu)先順位と高い優(yōu)先順位のスレッドに実行の機會を與えることもできます。yield() は、同じ優(yōu)先度の場合、実行の可能性があります。 実行の可能性があります。

Thread.sleep と Thread.yield() はロックの動作を変更しません?,F在のスレッドがロックを所有している場合、Thread.sleep はスレッドにロックを解放させません。覚えておくと役立つと思いますが、ロック関連のメソッドは Object クラスで定義されているため、Thread.sleep を呼び出してもロック関連の動作には影響しないと考えてください。

Thread.sleep と Object.wait は現在のスレッドを一時停止します。CPU リソースに関しては、どのスレッドが一時停止されても、CPU 実行時間が不要になることを意味します。 OS は実行時間を他のスレッドに割り當てます。違いは、wait を呼び出した後、他のスレッドが CPU 実行時間を取り戻すために、notify/notifyAll を実行する必要があることです。

配列リストとリンクリストの違いは何ですか?

ArrayList と LinkedList は両方とも List インターフェイスを実裝していますが、それらの間にはいくつかの違いがあります。

(1) ArrayList は Array でサポートされるインデックスに基づくデータ構造であるため、要素へのランダム アクセスを提供します

(2) ArrayList と比較して、要素の挿入、追加、削除は、より高速になります

(3) LinkedList の各ノードには前後のノードの參照が格納されるため、LinkedList は ArrayList よりも多くのメモリを消費します。

以上がJava 面接でよくある質問 (回答付き)の詳細內容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動コミットモードをオフにし、次に複數の操作を実行し、結果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開始します。 2。挿入や更新など、複數のSQL操作を実行します。 3。すべての操作が成功した場合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場合はconn.rollback()を呼び出します。同時に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設定して部分的なロールバックを達成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお勧めします。

Javaでカレンダーを操作する方法は? Javaでカレンダーを操作する方法は? Aug 02, 2025 am 02:38 AM

Java.Timeパッケージのクラスを使用して、古い日付とカレンダーのクラスを置き換えます。 2。LocalDate、LocalDateTime、LocalTimeを通じて現在の日付と時刻を取得します。 3。of()メソッドを使用して特定の日付と時刻を作成します。 4.プラス/マイナスメソッドを使用して、時間を不正に増加させて短縮します。 5. ZonedDateTimeとZoneIDを使用して、タイムゾーンを処理します。 6。DateTimeFormatterを介したフォーマットおよび解析の文字列。 7.インスタントを使用して、必要に応じて古い日付型と互換性があります?,F代のJavaでの日付処理は、java.timeapiを使用することを優(yōu)先する必要があります。

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

Garbage CollectionはJavaでどのように機能しますか? Garbage CollectionはJavaでどのように機能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動的に管理するメカニズムであり、到達不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數、アクティブスレッド、靜的フィールドなど)、および到達不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 3.世代の収集戦略を採用する:新世代(Eden、S0、S1)は頻繁にMinorGCを実行します。高齢者のパフォーマンスは少なくなりますが、MajorGCを実行するのに時間がかかります。 Metaspaceはクラスメタデータを保存します。 4。JVMはさまざまなGCデバイスを提供します。SerialGCは小さなアプリケーションに適しています。 ParallelGCはスループットを改善します。 CMSが減少します

HTTPミドルウェアロギングの例を例に進めます HTTPミドルウェアロギングの例を例に進めます Aug 03, 2025 am 11:35 AM

GOのHTTPログミドルウェアは、リクエストメソッド、パス、クライアントIP、および時間がかかることを記録できます。 1. http.handlerfuncを使用してプロセッサをラップします。2。next.servehttpを呼び出す前後の開始時間と終了時間を記録します。完全なサンプルコードの実行が検証されており、中小のプロジェクトの開始に適しています。拡張機能の提案には、ステータスコードのキャプチャ、JSONログのサポート、リクエストIDトラッキングが含まれます。

ユーザーデータにHTML「入力」タイプを使用します ユーザーデータにHTML「入力」タイプを使用します Aug 03, 2025 am 11:07 AM

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるURL、色、範囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

説明された延期聲明の例で進みます 説明された延期聲明の例で進みます Aug 02, 2025 am 06:26 AM

Deferは、クリーニングリソースなど、関數が戻る前に指定された操作を実行するために使用されます。パラメーターは、延期時にすぐに評価され、関數は最後のファーストアウト(LIFO)の順に実行されます。 1.複數の債務は、宣言の逆の順序で実行されます。 2.ファイルの閉鎖などの安全なクリーニングに一般的に使用されます。 3。指定された返品値を変更できます。 4.回復に適したパニックが発生した場合でも実行されます。 5。リソースの漏れを防ぐために、ループで延期の亂用を避けます。正しい使用により、コードのセキュリティと読みやすさが向上します。

See all articles