導入
これは、ソフトウェア エンジニアのインタビュー シリーズの 3 回目の投稿です。私は数年前にチャレンジしたことを持参し、実際にそのポジションを獲得しました。過去の経験選考など、他の技術面の面接も含まれていました。
このシリーズの以前の投稿を見逃した場合は、ここで見つけることができます。
挑戦
この課題は持ち帰り用のコーディング タスクでもあり、OEIS (整数シーケンスのオンライン百科事典) にクエリを実行し、結果の総数と最初の結果の名前を返す CLI プログラムを開発する必要がありました。クエリによって返された 5 つのシーケンス。
ありがたいことに、OEIS クエリ システムには JSON 出力形式が含まれているため、URL を呼び出し、シーケンスをクエリ文字列として渡すことで結果を取得できます。
入力と出力の例:
oeis 1 1 2 3 5 7
Found 1096 results. Showing first five: 1. The prime numbers. 2. a(n) is the number of partitions of n (the partition numbers). 3. Prime numbers at the beginning of the 20th century (today 1 is no longer regarded as a prime). 4. Palindromic primes: prime numbers whose decimal expansion is a palindrome. 5. a(n) = floor(3^n / 2^n).
注: この結果は古いです!
課題を解決する
この課題を解決するための計画は次のとおりです:
- CLI エントリポイントとなる Python ファイルから始めます
- 引数としてスペースで区切られた数値のリストを受け取る必要があります
- OEIS クエリ システムからデータをフェッチするクライアント ファイルを作成します
- コンソール用にフォーマットされた出力を返す処理を行うフォーマッタ
これはコーディングの課題であるため、プロジェクトの構造を作成し、プロジェクトの実行を容易にするために Poetry を使用します。 Poetry のインストール方法と使用方法は Web サイトで確認できます。
まず、次のパッケージを作成します。
poetry new oeis
これにより、oeis というフォルダーが作成されます。このフォルダーには、詩の構成ファイル、テスト フォルダー、およびプロジェクトのルートとなる oeis というフォルダーも含まれます。
CLI ツールの構築に役立つ Click というオプションのパッケージも追加します。これは必須ではなく、あまり洗練されていませんが、Python の他のネイティブ ツールで置き換えることができます。
プロジェクトのフォルダー内で次のコマンドを実行します。
poetry add click
これにより、クリックが依存関係としてプロジェクトに追加されます。
これで、エントリポイント ファイルに移動できます。 oeis/oeis フォルダーを開くと、すでに __init__.py ファイルがあることがわかります。 Click をインポートし、次のコマンドで main 関数を呼び出すように更新しましょう:
# oeis/oeis/__init__.py import click @click.command() def oeis(): pass if __name__ == "__main__": oeis()
これが CLI の開始点です。 @click.コマンドを参照してください。これは click のラッパーで、oeis をコマンドとして定義するのに役立ちます。
さて、スペースで区切られた一連の数字を受け取る必要があることを思い出してください。これを引数として追加する必要があります。クリックにはそのためのオプションがあります:
oeis 1 1 2 3 5 7
これにより、sequence という引数が追加され、nargs=-1 オプションはクリックにスペースで区切られるように指示します。引数が正しく渡されているかどうかをテストできるように、出力を追加しました。
Poetry にコマンドがあることを伝えるには、pyproject.toml を開いて次の行を追加する必要があります:
Found 1096 results. Showing first five: 1. The prime numbers. 2. a(n) is the number of partitions of n (the partition numbers). 3. Prime numbers at the beginning of the 20th century (today 1 is no longer regarded as a prime). 4. Palindromic primes: prime numbers whose decimal expansion is a palindrome. 5. a(n) = floor(3^n / 2^n).
これは、oeis モジュールの oeis 関数を呼び出す oeis というスクリプトを追加しています。ここで、次を実行します:
poetry new oeis
これにより、スクリプトを呼び出すことができます。試してみましょう:
poetry add click
完璧です。コマンドと引数が期待どおりに解析されています。クライアントの話に移りましょう。 oeis/oeis フォルダーの下に、clients というフォルダー、__init__.py というファイル、および oeis_client.py というファイルを作成します。
このプロジェクトに他のクライアントが含まれることが予想される場合は、基本クライアント クラスを開発できますが、このクラスしか持たないため、これはオーバーエンジニアリングとみなされる可能性があります。 OEIS クライアント クラスには、パスを除いた URL であるベース URL が必要です。これをクエリに使用します。
# oeis/oeis/__init__.py import click @click.command() def oeis(): pass if __name__ == "__main__": oeis()
ご覧のとおり、リクエスト パッケージをインポートしています。使用する前に、Poetry に追加する必要があります:
# oeis/oeis/__init__.py import click @click.command() @click.argument("sequence", nargs=-1) def oeis(sequence: tuple[str]): print(sequence) if __name__ == "__main__": oeis()
これで、クライアントには変更されないベース URL が設定されました。他のメソッドを見てみましょう:
-
build_url_params
- CLI から引数として渡されたシーケンスを受け取り、それをカンマで区切られた数値の文字列に変換します
- パラメータを使用して辞書を構築します。q は実行するクエリ、fmt は予想される出力形式です
- 最後に、URL エンコードされたバージョンの params を返します。これは、文字列が URL と互換性があることを確認する優れた方法です
-
クエリ結果
- CLI から引数として渡されたシーケンスを受け取り、build_url_params メソッドを通じて URL エンコードされたパラメータを構築します
- データのクエリに使用される完全な URL を構築します
- 構築された URL へのリクエストを続行し、予期しない HTTP ステータスを発生させます
- JSON データを返します
このメソッドを呼び出すために、メイン ファイルも更新する必要があります。
# oeis/pyproject.toml [tool.poetry.scripts] oeis = "oeis:oeis"
ここでは、メソッドの外側でクライアント インスタンスを構築しています。これにより、コマンドが呼び出されるたびにインスタンスが作成されるのではなく、コマンド内でインスタンスが呼び出されます。
OEIS には数千のエントリがあるため、これを実行すると非常に長い応答が発生します。合計サイズと上位 5 つのエントリのみを知る必要があるため、次のことができます:
poetry install
これを実行すると、以前よりもはるかに優れています。ここで、合計サイズと、上位 5 つのエントリ (存在する場合) を出力します。
しかし、それらすべてが必要なわけでもありません。出力を正しくフォーマットするフォーマッタを構築しましょう。 formatters というフォルダーを作成します。このフォルダーには、__init__.py ファイルと oeis_formatter.py ファイルが含まれます。
oeis 1 1 2 3 5 7
このファイルは基本的に、上位 5 つの結果を出力に必要なものにフォーマットします。これをメインファイルで使用してみましょう:
Found 1096 results. Showing first five: 1. The prime numbers. 2. a(n) is the number of partitions of n (the partition numbers). 3. Prime numbers at the beginning of the 20th century (today 1 is no longer regarded as a prime). 4. Palindromic primes: prime numbers whose decimal expansion is a palindrome. 5. a(n) = floor(3^n / 2^n).
このコードを実行すると、次の結果が得られます:
poetry new oeis
期待した形式で返されていますが、10 件の結果が見つかったと表示されていることに注目してください。これは間違いです。OEIS Web サイトで検索すると、さらに多くの結果があることがわかります。残念ながら、OEIS API が更新され、結果は結果の数を含むカウントを返さなくなりました。ただし、このカウントはテキスト形式の出力には引き続き表示されます。これを使用して、結果がいくつあるかを知ることができます。
これを行うには、fmt=text を使用するように URL を変更し、必要な値を見つけるために正規表現を使用します。クライアント コードを更新してテキスト データを取得し、フォーマッタを更新してこのデータを使用して出力できるようにしましょう。
poetry add click
ご覧のとおり、2 つの新しいメソッドが追加されました。
-
get_count
- テキスト API のパラメータを構築し、それを正規表現を使用して検索している番号を見つけるメソッドに渡します
-
get_response_count
- クラスの初期化に組み込まれた正規表現を使用して検索を実行し、最初のグループを取得します
# oeis/oeis/__init__.py import click @click.command() def oeis(): pass if __name__ == "__main__": oeis()
このファイルでは、メソッドの新しいパラメータのみを追加し、クエリ結果の長さの代わりにそれを使用しました。
# oeis/oeis/__init__.py import click @click.command() @click.argument("sequence", nargs=-1) def oeis(sequence: tuple[str]): print(sequence) if __name__ == "__main__": oeis()
ここでは、クライアント上で新しいメソッドを呼び出し、情報をフォーマッタに渡しているだけです。再度実行すると、期待していた出力が得られます。
# oeis/pyproject.toml [tool.poetry.scripts] oeis = "oeis:oeis"
コードは基本的に準備ができています。しかし、実際の課題に取り組む場合は、可能な限り Git を使用し、小さなコミットを実行し、もちろん単体テスト、コード フォーマット ライブラリ、型チェッカー、その他必要と思われるものはすべて追加することを忘れないでください。
頑張ってください!
以上がソフトウェア エンジニアのインタビュー - #EIS CLIの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

numpyarraysarasarebetterfornumeroperations andmulti-dimensionaldata、whilethearraymoduleissuitable forbasic、1)numpyexcelsinperformance and forlargedatasentassandcomplexoperations.2)thearraymuremememory-effictientivearientfa

NumPyArraySareBetterforHeavyNumericalComputing、whilethearrayarayismoreSuitableformemory-constrainedprojectswithsimpledatatypes.1)numpyarraysofferarays andatiledance andpeperancedatasandatassandcomplexoperations.2)thearraymoduleisuleiseightweightandmemememe-ef

ctypesallowsinging andmanipulatingc-stylearraysinpython.1)usectypestointerfacewithclibrariesforperformance.2)createc-stylearraysfornumericalcomputations.3)passarraystocfunctions foreffientientoperations.how、how、becuutiousmorymanagemation、performanceo

Inpython、「リスト」は、「リスト」、自由主義的なもの、samememory効率が高く、均質な偶然の瞬間の想起された「アレイ」の「アレイ」の「アレイ」の均質な偶発的な想起されたものです

pythonlistsandarraysaraybothmutable.1)listsareflexibleandsupportheTeterdatabutarlessmemory-efficient.2)Arraysaremorememory-efficientiant forhomogeneousdative、ressivelessatile、ressing comerttytytypecodeusageodoavoiderorors。

PythonとCにはそれぞれ独自の利点があり、選択はプロジェクトの要件に基づいている必要があります。 1)Pythonは、簡潔な構文と動的タイピングのため、迅速な開発とデータ処理に適しています。 2)Cは、静的なタイピングと手動メモリ管理により、高性能およびシステムプログラミングに適しています。

PythonまたはCの選択は、プロジェクトの要件に依存します。1)迅速な開発、データ処理、およびプロトタイプ設計が必要な場合は、Pythonを選択します。 2)高性能、低レイテンシ、および緊密なハードウェアコントロールが必要な場合は、Cを選択します。

毎日2時間のPython学習を投資することで、プログラミングスキルを効果的に改善できます。 1.新しい知識を学ぶ:ドキュメントを読むか、チュートリアルを見る。 2。練習:コードと完全な演習を書きます。 3。レビュー:学んだコンテンツを統合します。 4。プロジェクトの実践:実際のプロジェクトで学んだことを適用します。このような構造化された学習計画は、Pythonを体系的にマスターし、キャリア目標を達成するのに役立ちます。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

ホットトピック









