Springによる制御の反転と依存性注入の概要

1。概要 この記事では、IoC(制御の反転)とDI(依存性注入)の概念を紹介し、次にこれらがSpringフレームワークでどのように実装されているかを見ていきます。 2.制御の反転とは何ですか? 制御の反転は、ソフトウェアエンジニアリングの原則であり、プログラムのオブジェクトまたは部分の制御をコンテナまたはフレームワークに転送します。これは、オブジェクト指向プログラミングのコンテキストで最も頻繁に使用されます。 カスタムコードがライブラリを呼び出す従来のプログラミングとは対照的に、IoCを使用すると、フレームワークがプログラムのフローを制御し、カスタムコードを呼び出すことができます。これを有効にするには、フレームワークは追加の動作が組み込まれた抽象化を使用します。独自の動作を追加する場合は、フレームワークのクラスを拡張するか、独自のクラスをプラグインする必要があります。 このアーキテクチャの利点は次のとおりです。 タスクの実行をその実装から切り離す 異なる実装間の切り替えを容易にします プログラムのモジュール性の向上 コンポーネントを分離するか、その依存関係をモックし、コンポーネントがコントラクトを介して通信できるようにすることで、プログラムのテストがより簡単になります 制御の反転は、戦略設計パターン、サービスロケーターパターン、ファクトリパターン、依存性注入続きを読む »

Javaで文字列を逆にする方法

1。概要 このクイックチュートリアルでは、Javaで文字列を逆にする方法を見ていきます。 プレーンJavaソリューションを使用してこの処理を開始します。次に、ApacheCommonsなどのサードパーティライブラリが提供するオプションについて説明します。 さらに、文中の語順を逆にする方法を示します。 2.従来のforループ Javaでは文字列が不変であることはわかっています。不変オブジェクトは、完全に作成された後も内部状態が一定のままであるオブジェクトです。 したがって、文字列を変更して元に戻すことはできません。このため、別の文字列を作成する必要があります。 まず、forループを使用した基本的な例を見てみましょう。最後の要素から最初の要素までの文字列入力を繰り返し処理し、すべての文字を新しい文字列に連結します。 public String reverse(String input) { 続きを読む »

Javaでのクイックソートアルゴリズムの実装

1。概要 このチュートリアルでは、Javaの実装に焦点を当てて、QuickSortアルゴリズムについて詳しく説明します。 また、その長所と短所について説明し、時間の複雑さを分析します。 2.クイックソートアルゴリズム クイックソートは、分割統治法を活用したソートアルゴリズムです。平均的なO(n log n)の複雑さを持ち、特にビッグデータ量に対して最も使用されるソートアルゴリズムの1つです。 クイックソートは安定したアルゴリズムではないことを覚えておくことが重要です。安定ソートアルゴリズムは、同じ値を持つ要素が、入力リストに表示されるのと同じ順序でソートされた出力に表示されるアルゴリズムです。 入力リストは、ピボットと呼ばれる要素によって2つのサブリストに分割されます。ピボットよりも小さい要素を持つサブリストと、ピボットよりも大きい要素を持つサブリスト。このプロセスは、サブリストごとに繰り返されます。 最後に、ソートされたすべてのサブリストがマージされて、最終出力が形成されます。 2.1。アルゴリズムの手順 リストからピボットと呼ばれる要素を選択します。これを使用して、リストを2つのサブリストに分割します。 ピボットの周りのすべての要素を並べ替えます。値が小さい要素はその前に配置され、ピボットよりも大きい要素はすべて後に配置されます。このステップの後、ピボットは続きを読む »

Javaでの二分探索アルゴリズム

1。概要 この記事では、単純な線形検索に対するバイナリ検索の利点について説明し、Javaでの実装について説明します。 2.効率的な検索の必要性 私たちがワイン販売ビジネスに従事していて、何百万ものバイヤーが毎日私たちのアプリケーションにアクセスしているとしましょう。 私たちのアプリを介して、顧客はnドル未満の価格のアイテムを除外し、検索結果からボトルを選択して、カートに追加することができます。毎秒価格制限のあるワインを求める何百万人ものユーザーがいます。結果は速い必要があります。 バックエンドでは、アルゴリズムがワインのリスト全体を線形検索して、顧客が入力した価格制限とリスト内のすべてのワインボトルの価格を比較します。 次に、価格が制限価格以下のアイテムを返します。この線形探索の時間計算量はO(n)です。 これは、システム内のワインボトルの数が多いほど、時間がかかることを意味します。検索時間は、導入された新しいアイテムの数に比例して増加します。 アイテムをソートされた順序で保存し始め、バイナリ検索を使用してアイテムを検索すると、O(log n)の複雑さを実現できます。 バイナリ検索では、検索結果にかかる時間はデータセットのサイズに応じて自然に増加しますが、比例するわけではありません。 3.二分探索 簡単に言えば、アルゴリズムはキー値を配列の中央の要素と比較します。続きを読む »

Javaのモジュロ演算子

1。概要 この短いチュートリアルでは、モジュロ演算子とは何か、およびいくつかの一般的なユースケースでJavaでモジュロ演算子を使用する方法を示します。 2.モジュロ演算子 Javaの単純な除算の欠点から始めましょう。 除算演算子の両側のオペランドの型がintの場合、演算の結果は別のintになります。 @Test public void whenIntegerDivision_thenLosesRemainder() { assertThat(11 / 4).isEqualTo(2); } オペランドの少なくとも1つがfloat型またはdouble型の場合、同じ除算で異なる結果が得られます。 @Test public void whenDoubleDivision_thenKeepsRemainder() { assertThat(11 / 4.0).isEqualTo(2.75); } 整数を除算すると、除算演算の余りが失われることがわかります。 モジュロ演算子は、まさにこの剰余を与えます。 @Test public void whenModulo_th続きを読む »

Javaタイマー

1.タイマー–基本 TimerとTimerTaskは、バックグラウンドスレッドでタスクをスケジュールするために使用されるjavautilクラスです。一言で言えば– TimerTaskは実行するタスクであり、Timerはスケジューラーです。 2.タスクを1回スケジュールする 2.1。与えられた遅延の後 タイマーを使用して単一のタスクを実行することから始めましょう: @Test public void givenUsingTimer_whenSchedulingTaskOnce_thenCorrect() { TimerTask task = new TimerTask() { public void run() { System.out続きを読む »

Javaジェネリックスの基礎

1.はじめに Java Genericsは、バグを減らし、型に抽象化レイヤーを追加することを目的として、JDK5.0で導入されました。 この記事は、Javaのジェネリックスの簡単な紹介であり、その背後にある目標と、それらを使用してコードの品質を向上させる方法を示しています。 2.ジェネリック医薬品の必要性 整数を格納するためにJavaでリストを作成したいシナリオを想像してみましょう。私たちは書きたくなることがあります: List list = new LinkedList(); list.add(new Integer(1)); Integer i = list.iterator().next(); 驚いたことに、コンパイラは最後の行について文句を言います。どのデータ型が返されるかはわかりません。コンパ続きを読む »

Java8の新機能

1。概要 この記事では、Java8の最も興味深い新機能のいくつかを簡単に見ていきます。 ここでは、インターフェイスのデフォルトメソッドと静的メソッド、メソッド参照、およびオプションについて説明します。 Java 8のリリースのいくつかの機能(ストリームAPI、ラムダ式、関数型インターフェース)については、個別に検討する価値のある包括的なトピックであるため、すでに説明しました。 2.インターフェイスのデフォルトメソッドと静的メソッド Java 8より前は、インターフェースはパブリック抽象メソッドしか持つことができませんでした。すべての実装クラスに新しいメソッドの実装を作成させることなく、既存のインターフェイスに新しい機能を追加することはできませんでした。また、実装を使用してインターフェイスメソッドを作成することもできませんでした。 Java 8以降、インターフェイスには静的メソッドとデフォルトメソッドを含めることができ、インターフェイスで宣言されているにもかかわらず、動作が定義されています。 2.1。静的メソッド インターフェイスの次のメソッドを検討してください(このインターフェイスをVehicleと呼びましょう)。 static String続きを読む »

Javaのスタックメモリとヒープスペース

1.はじめに アプリケーションを最適な方法で実行するために、JVMはメモリをスタックメモリとヒープメモリに分割します。新しい変数とオブジェクトを宣言したり、新しいメソッドを呼び出したり、文字列を宣言したり、同様の操作を実行したりするたびに、JVMはスタックメモリまたはヒープスペースからこれらの操作にメモリを指定します。 このチュートリアルでは、これらのメモリモデルについて説明します。それらの間のいくつかの重要な違い、それらがRAMに格納される方法、それらが提供する機能、およびそれらを使用する場所をリストアップします。 2.Javaのスタックメモリ Javaのスタックメモリは、静的メモリの割り当てとスレッドの実行に使用されます。これには、メソッドに固有のプリミティブ値と、メソッドから参照されるヒープ内のオブジェクトへの参照が含まれます。 このメモリへのアクセスは後入れ先出し(LIFO)の順序です。新しいメソッドが呼び出されるたびに、スタックの最上位に、プリミティブ変数やオブジェクトへの参照など、そのメソッドに固有の値を含む新しいブロックが作成されます。 メソッドが実行を終了すると、対応するスタックフレームがフラッシュされ、フローは呼び出し元のメソッドに戻り、次のメソッドに使用できるスペースができます。 2.1。スタックメモリの主な機能 これまでに説明したこととは別に、スタ続きを読む »

オンラインJavaコンパイラ

1.はじめに オンラインコンパイラは、ソースコードをコンパイルしてオンラインで実行できるようにするツールです。これは、特にJavaの新入生、家庭教師、またはインタビュアーにとって素晴らしいオプションです。さらに、コードを共有したり、プライベートセッションやグループセッションで共同作業したりするのは非常に簡単です。 それ以外に、JDKやIDEをインストールする必要はありません。 この記事では、そこにあるトップのJavaオンラインコンパイラについて説明します。 2. JDoodle JDoodleは、Javaを含む多くのプログラミング言語でソースコードをコンパイルして実行するための簡単で迅速な方法です。さらに、JDoodleは、MySqlおよびMongoDBと連携するための端末、ピアプログラミングツール、コードをリモートで実行するためのAPI、およびブログやWebサイトの埋め込み機能を提供します。 そのUIには、ユーザーフレンドリーなエディターと次のような入力フィールドがあります。 コマンドライン引数 インタラクティブモード JDKバージョン8から10が利用可能です Mavenリポジトリから直接外部ライブラリをアタッチします。必要なのは、グループ、アーティファクトID、およびライブラリのバージョンを指定することだけです。 さらに、ソースファイルを開いて保存続きを読む »