私はかなり長い間 Go を使って働いてきたので、いくつかの古典的な低レベル設計ソリューションを Go に実装するのは楽しい挑戦になるだろうと思いました。
エレベーター システムを設計する場合、特にエレベーターに複数のリクエストがある場合に、次にどの階にサービスを提供するかをどのように決定するかが重要な側面の 1 つです。 Go の単純な構文とパフォーマンスは、このようなシステムのモデリングに最適であるため、FCFS (First Come First Serve)、SSTF (Shortest Seek Time First)、SCAN、および LOOK アルゴリズムの基本実装を作成することにしました。
1. 先着順 (FCFS)
私は最も単純なアプローチ、つまりサービスリクエストを受信した順に開始しました。実装は簡単ですが、リクエストが複数のフロアに分散すると非効率になり、移動時間の増加につながる可能性があります。
func FCFS(currentFloor int, requests []int) []int { path := []int{} for _, floor := range requests { path = append(path, floor) } return path }
FCFS では、エレベーターは指定された順序で要求された各フロアに移動するだけです。
2. 最短シーク時間優先 (SSTF)
SSTF は、次に要求された最も近いフロアを選択することで移動を最小限に抑えようとします。これにより移動時間が短縮されますが、新しい近くのリクエストが継続的に来ると、遠くのリクエストが「飢餓」になる可能性があります。
func SSTF(currentFloor int, requests []int) []int { path := []int{} remaining := append([]int{}, requests...) for len(remaining) > 0 { closestIdx := 0 minDistance := abs(currentFloor - remaining[0]) for i, floor := range remaining { distance := abs(currentFloor - floor) if distance <p>この関数は、現在のフロアに最も近いフロアを毎回検索し、移動するたびにエレベーターの位置を更新します。</p> <h2> 3. SCAN(エレベーターアルゴリズム) </h2> <p>SCAN では、エレベーターは一方向に移動し、終点に到達するまでその方向のすべてのリクエストに対応し、その後逆転します。このアプローチは飢餓を減らすため、SSTF よりも公平です。<br> </p> <pre class="brush:php;toolbar:false">func SCAN(currentFloor, maxFloor int, requests []int) []int { path := []int{} up := []int{} down := []int{} for _, floor := range requests { if floor >= currentFloor { up = append(up, floor) } else { down = append(down, floor) } } sort.Ints(up) sort.Sort(sort.Reverse(sort.IntSlice(down))) path = append(path, up...) path = append(path, down...) return path }
この機能は、リクエストを現在位置の上下のフロアに分割します。すべてのフロアを上向きに、次に下向きにサービスを提供します。
4.見てください
LOOK は SCAN のわずかなバリエーションです。エレベーターは最後まで進むのではなく、各方向の最後の要求で方向を反転します。物理的な限界ではなく、リクエストが終了するところで停止することで時間を節約します。
func LOOK(currentFloor int, requests []int) []int { path := []int{} up := []int{} down := []int{} for _, floor := range requests { if floor >= currentFloor { up = append(up, floor) } else { down = append(down, floor) } } sort.Ints(up) sort.Sort(sort.Reverse(sort.IntSlice(down))) path = append(path, up...) path = append(path, down...) return path }
SCAN と同様に、このアプローチは各方向の最後のリクエストまでしか移動しません。
各アルゴリズムにはトレードオフがあります:
- FCFS: シンプルですが非効率になる可能性があります。
- SSTF: 最も近いフロアを最適化しますが、遠くのリクエストを枯渇させる可能性があります。
- SCAN: より公平かつ効率的で、方向の変更を最小限に抑えます。
- LOOK: 最後のリクエストで停止することで、さらに時間を節約します。
正しい選択は、システムの効率、公平性、応答時間に関する特定の要件によって異なります。
LOOK アルゴリズムを使用した完全な実装については、私の github リポジトリを参照してください:
テサルツリー
/
低レベル設計-golang
Golang での低レベルのシステム設計問題の解決策
Go での低レベルのシステム設計
Go での低レベル システム設計 リポジトリへようこそ!このリポジトリには、Go で実装されたさまざまな低レベルのシステム設計の問題とその解決策が含まれています。主な目的は、実際の例を通じてシステムの設計とアーキテクチャを実証することです。
目次
- 概要
- 駐車場システム
- エレベーターシステム
概要
低レベルのシステム設計には、システム アーキテクチャの中核概念を理解し、拡張性、保守性、効率性の高いシステムを設計することが含まれます。このリポジトリは、Go を使用したさまざまな問題やシナリオの解決策をカバーしようとします。
駐車場システム
このリポジトリの最初のプロジェクトは、駐車場システムです。このシステムは、車両を駐車および駐車解除できる駐車場をシミュレートします。以下を示します:
- 駐車場インスタンスを管理するためのシングルトン設計パターン。
- さまざまな種類の車両 (乗用車、トラックなど) を扱います。
- 複数のフロアにわたる駐車スペースの管理。
- 駐車車両の支払い処理。
特徴
- 車両の追加と削除…
以上がエレベーター スケジュール アルゴリズム: FCFS、SSTF、SCAN、および LOOKの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

GO言語で文字列パッケージをマスターすると、テキスト処理機能と開発効率が向上します。 1)コンテナ機能を使用してサブストリングを確認し、2)インデックス関数を使用してサブストリング位置を見つけ、3)関数を効率的にスプライスストリングスライス、4)機能を置き換えてサブストリングを置き換えます。空の文字列や大きな文字列操作のパフォーマンスの問題をチェックしないなど、一般的なエラーを避けるように注意してください。

文字列の操作を簡素化し、コードをより明確かつ効率的にすることができるため、GOの文字列パッケージを気にする必要があります。 1)文字列を使用して、弦を効率的にスプライスするために参加します。 2)文字列を使用して、空白の文字で文字列を分割します。 3)文字列を介してサブストリング位置を見つけます。Indexと文字列lastindex; 4)文字列を使用して、文字列を置き換える。 5)文字列を使用して、ビルダーを効率的にスプライスします。 6)予期しない結果を避けるために、常に入力を確認してください。

theStringspackageIngoisESSENTINEFOREFFSTRINGMANIPULATION.1)ITOFFERSSSIMPLEYETPOWERFULFUNCTIONS FORTOSSCHECKINGSUBSTRINGSNINGSTRINGS.2)ITHANDLESUNICODEWELL、ITHANDLESUNICODEWELL

whendeciding botedego'sbytespackageandstringspackage、usebytes.bufferbinarydataandstrings.builderforstringoperations.1)usebytes.bufferforkithbyteslices、binarydata、appendingdatatypes、およびwritioio.writioio.writioio.writioio.writioio.

Goの文字列パッケージは、さまざまな文字列操作機能を提供します。 1)文字列を使用して、サブストリングを確認します。 2)文字列を使用して、ストリングをサブストリングスライスに分割します。 3)文字列を通して文字列をマージします。 4)文字列または文字列を使用して、文字列の最初と端でブランクまたは指定された文字を削除します。 5)指定されたすべてのサブストリングを文字列に置き換えます。ReplaceAll。 6)文字列を使用して、hasprefixまたは文字列hassuffixを使用して、文字列の接頭辞または接尾辞を確認します。

GO言語文字列パッケージを使用すると、コードの品質が向上します。 1)文字列を使用して()join()を使用して、パフォーマンスのオーバーヘッドを避けるために、文字列アレイをエレガントに接続します。 2)strings.split()とstrings.contains()を組み合わせて、テキストを処理し、ケースの感度の問題に注意を払います。 3)文字列の乱用を避け、replace()を回避し、多数の置換に正規表現を使用することを検討します。 4)文字列を使用して、ビルダーを使用して、頻繁にスプライシング文字列の性能を向上させます。

GoのBYTESパッケージは、バイトスライスを処理するためのさまざまな実用的な機能を提供します。 1.bites.containsは、バイトスライスに特定のシーケンスが含まれているかどうかを確認するために使用されます。 2.bites.splitは、バイトスライスをスモールピースに分割するために使用されます。 3.bites.joinは、複数のバイトスライスを1つに連結するために使用されます。 4.bites.trimspaceは、バイトスライスのフロントブランクとバックブランクを削除するために使用されます。 5.バイト。エクアルは、2つのバイトスライスが等しいかどうかを比較するために使用されます。 6.bytes.indexは、大規模なスライスでサブスライスの開始インデックスを見つけるために使用されます。

エンコード/binaryPackageIngoisESSENTINESTENTINESTINESTIDANDARDIZEDWAIDTOREADANDWRITEBINIRYDATA、クロスプラットフォームコンパティビティアンドハンドリングの可能性を確保することを確認します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、
