1つのテストタスクの履歴

Ecwidの開発部門の責任者であるVasily Vasilkovは、候補者がタスクをテストする方法とその結果について書いています。 面白かった。 単語ごとにメモを発行します。



***



1つのテストタスクのストーリーを説明します。 少し長いですが、うまくいけば面白いです。



Ecwidでは、エンジニア向けのすべてのテストケースがGitHubのgithub.com/Ecwid/new-jobに公開されています。 誰にも警告することなく、好きなタスクを簡単に開始できます。結果に満足したら、それを私と共有してください。



私が思いついた最初のタスクの1つは、HTTPを介したコンソールファイルアップローダーでした。 それは非常にシンプルで、私はまさにそのような考えでそれを発明しました。 そのような単純なことがハングアップするまで 、私は推論し、 そしてもちろん、クールなタスクを追加します。 それから私はそれを補います! 誰もが息を切らしてすぐに実行するようなクールなテストをレイアウトし、この原始的なロッキングチェアをどこかに隠し、他の人には見せないようにします。 そのようなものは、私は考えました。



ロッカーは非常に原始的なものにする必要があります。 自分で判断してください-テキストファイルでリンクのリストを提供すると、彼はこれらのファイルをダウンロードし、ローカルドライブ上の指定されたフォルダーに配置します。 複数のファイルを同時に(複数のストリーム、たとえば3つのストリームで)ダウンロードでき、ダウンロード速度の指定された制限(たとえば、毎秒500キロバイト)に耐えることができなければなりません。 それだけです



HTTPを操作するために何かを発明する必要はありません。任意のライブラリを使用できます。 速度を制限するには-ライブラリ。 いくつかのストリームで読み込むためのライブラリさえ必要ありません-すべてが標準のJavaライブラリにあります。 もちろん、すべてを発明し、膝の上に自分で書くことができますが、必ずしもそうではありません。 実際、いくつかの「キューブ」を取り、少しのプログラミングを使用して、それらを正しい形状に慎重に折りたたむ必要があります。



この任務はまもなく3歳になります。 長年にわたり、私はあらゆる色とサイズのロッカーのかけがえのないコレクションの所有者になりました。 人生でHTTPを介していくつかのストリームで何かをダウンロードするようになったら、ボアコンストリクターとして落ち着いています。あらゆる好みに合わせて100を超えるソリューションがあります。



最も単純で最も理解しやすいこのタスクがほとんどの候補者によって実行されることは驚くことではありません。 長年にわたって、このテストは新しい経験で私を豊かにし、アーカイブにコピーすることができなくなり、よりクールでファッショナブルなタスクに置き換えました。



今、彼らがさらに100台のコンソールロッカーを送ってくれたら、そこではうまくいかないと自信を持って言えます。



-提出された作品の一部は、単にコンパイルされません。 はい、作業はJava / Kotlinコンパイル言語で行われますが、コンパイルはされません。 この現象を理解しているように、ローカルITタイプの波動粒子の二重性。 もちろん、私はあなたにテストをするように頼む言語に少し精通しています、そして、誇りなしに、候補者が心に持っていたが、書かなかった部分を個人的に追加します、私に創造性の機会を残します。 通常、これは最も興味深い作品です。 候補者が彼の将来の仕事を真剣に受け止め、彼の知識をテストする機会をあなたに与えるだけでなく、あなたの知識をチェックすることは楽しいことです。



-提出された作品のいくつかは、希望から​​非常に広い広がりでジャンプの速度に耐えます。 たとえば、300KB /秒の速度でダウンロードしたい場合、プログラムは約2MB /秒でダウンロードします。 違いはわずか6倍ですが、厳密には1秒あたり2メガバイトであり、それ以上はありません。 ある候補者が言ったように、「速度は前後に一定の間隔で維持されます。」 私は「ある間隔」と「前後」について本当に気に入りました。 今、私自身、この売上高を可能な限り頻繁に使用しようとしています-「この機能は20日、5日前後で作成します」。



-並列ダウンロード。 一方では、候補者の年齢を推測するために使用できるため、この要件を削除することをよく考えますが、私はこれをしたくないです。 「複数のスレッドでReGetが好きですか?」という質問の手紙を受け取った場合、候補者はあなたよりも若くなく、モデムの時代を覚えていることがすぐにわかります。 私も、これらの無限のReGet、FlashGet、Download Master、そして90年代後半から2000年代初頭のインターネットの甘い心のすべてを覚えています。 いいえ、1つのファイルを複数のストリームにダウンロードする必要はありませんが、同時に複数のファイルをダウンロードする必要があります。



ただし、一方で、この要件は、タスクをチェックするときの喜びの尽きることのないソースを提供します。



*たとえば、3スレッドでダウンロードし、プログラムを4でダウンロードしたい。5スレッドを設定した。プログラムは6でダウンロードした。 ここでバグを作成するにはどうすればよいですか? ソースにアクセスして、「ユーザーが要求するスレッドの数を1つ増やして、スレッドをさらに速くする」というコメントを見つけます。 賭けろ



*別の例-候補者は「プログラムはN個のストリームにファイルをダウンロードできますが、N個以上の場合はまだサポートされていません。」と書いています。 フレーズは最後のポイントまでずっと美しいです。 読みながら、彼は耳弁で汗を拭き、人間の器用さに驚嘆し、数学と室内楽団についての冗談を思い出した。



並外れた人々による無数の単純に興味深いソリューション:



*たとえば、このような解決策がある場合-タスクは、ダウンロードに必要な速度でサイズとサイズのファイルを見つけ、サイズを速度で除算し、受信した秒数でスリープ状態になります。 私も、私の魂のどこか深いところで、この解決策は論理的だと思います-プログラムはNN秒動作するはずです、動作します、あなたは何を底に入れましたか?! どうやら、候補者は、検査官が単にプログラムを拾い上げて見ただけではないことを期待していませんでした(なんて陰湿!)。 非常に難しい決定です。



*そして、ここで、明らかに、空のメイン関数(そしてそれ以上)を持つ1つのクラスを送信して説明した非常に賢い人:「どういうわけか、このスタイルでこのタスクを実行する予定です。 私の考えがすでに明確になっていることを望みますか?」



このファイルを5行で見て真剣に努力しましたが、ファイルから明確になっていないため、候補者にアイデアをさらに広げるよう依頼しました。 しかし、私は希望を失うことなく、2年目を待っています。



* HTTP経由でのファイルのダウンロードは完全に簡単なタスクであり、それを実行できないと書いた素晴らしい人を覚えていますか? もちろん、あなたにはできないという精神で答えました。私たちは友達として別れました。 二度と彼の声を聞いたり見たりしませんでした。 男は私に手紙で私に何かをしてはいけないかと単純に尋ねました。私にとっては、彼がこれをすることを禁じる力が見つかりませんでした。 それだけです 私の答えが人がnを達成するのを助け、彼がまだ何もしないことを願っています。



* Javaを知らず、Goでタスクを実行することは可能だと言った素晴らしい候補者ですか? 「彼と一緒に行きましょう」という意味で私は答えました-「素晴らしい、私も知らない、学び、それをやる!」 率直に言って、私はそのような頑固な人との知り合い(キャップ​​にもかかわらず)を誇りに思っています。



最も興味深い事件は、ペンザ(SECON、こんにちは!)で私に起こりました。アフターパーティーの後の路上での夜。 夜、通り、人はほとんどいません。私は立ち上がってタクシーがホテルに向かうのを待ちます。 突然、暗闇のどこかから男がやって来て、「まさしく、私はエクウィドで仕事を得ようとしました、あなたは私を拒否しました、それから私は本当にあなたと直接会いたいです!!」



それらの数秒で頭に浮かんだ考えを語り直すのは難しい。 おい、これらの行を読んだら-経験のおかげで、そのようなあいまいな文言で誰も私に夜に駆け寄っていない。



実際、私はこの軽薄な物語で2つの重大なことを言いたかったのです。



1)親愛なる候補者。 あなたは、行われた仕事を捨てて最初からやり直すことをためらうことによって台無しにされます。 たとえば、タスクを実行し始めたときに、マルチスレッドをねじ込むのを忘れたことが突然わかりました。 パニックでは、同時実行松葉杖をコードに挿入し始めますが、これは意図されていません。 これをする必要はありません。 最も正しい方法は、満たされていない要件を考慮して、書き込まれたものをすべて破棄し、ゼロから書き込むことです。 真剣に。 これは製品コードではなく、松葉杖はここではありません。



2)候補者とそのテストタスクについて、私はどういうわけか真剣ではないという印象を得ることができました。 これは完全に間違っています。 好奇心と喜びを込めて、提出されたすべての作品をチェックします。 表示されたほぼすべての仕事は新しい経験を与え、私は以前は知らなかった何かを学びます。 より多くのタスクをテストし、より頻繁に行い、送ってください。



Ecwidは常に開発者に目を光らせています。 今も。 大規模な非レガシープロジェクト、地理的に分散したクラスター、深刻なワークロード、スマートなチーム、高い責任があります。 一般的に、簡単ではありませんが、興味深いです。 メインスタックはJava / Kotlinですが、ReactNativeの専門家も必要です。



私たちは、ジュニアレベル以上のほぼすべてのレベルの開発者を探しています(Ulyanovsk、Samara)。 恥ずかしがらずに、「私が来ますか?」と思ってはいけません。テストを行うだけです。または、必要に応じて、最初に私と話してから、テストを行ってください。 そして多分彼はテストをするでしょうし、する必要はありません。それはあなたの話し方に依存します。



Java、Kotlin、PostgreSQL、Cassandra、Redis、AWS、Consul、Docker、マイクロサービス-理解できない単語と略語の形式でのスタック。 まあ、まだすべてがいっぱいです。



すべての質問については、コメントを記入するか、join @ ecwid.com



All Articles