2009-10-14 7 views
7

Javaアプリケーションとシステムのパフォーマンスコンサルタントになりたい場合は、私が必要とする主なスキルは何ですか?パフォーマンスコンサルタントになるための主なスキルは何ですか?

  • のJava プロファイラ(またはショットをスタック)を使用して自体
  • との長年の経験に
  • データベース知識(一般的なパフォーマンスの誤り検出/回避するために:インデックスなど)
  • キャッシングライブラリ
  • Java 同時実行

あなたはこれらの重要性に同意しますか?何を追加しますか?

追加スキル::

  • ガベージコレクション、およびチューニング
  • 効率的な Javaコード
  • デザイン(高レベルのビジョンの回答から更新


  • UI技術(JavaScriptの、DOM、CSS、スイング、SWT)(もアヤックスに使用)
  • ネットワーキング理解
  • アルゴリズミックスは、ビッグO
  • ハードウェアがスケーリングに理解します

マインドセット(いくつかの回答がありますが私は)それを要求しませんでした:

  • 分析(実際に測定)
  • 耐圧
  • 人々/政治スキル
+2

興味深い質問です。私はこれが本当に関心を持っている誰かにとって素晴らしいニッチな仕事だと思う。確かにそこに助けを必要とする実行能力の低いプログラムがたくさんあります! – HLGEM

+0

おかげで、多くの回答が良かったし、助けになりました。私は1つだけを受け入れなければなりませんでした... :-(( – KLE

答えて

2

私は、特定のクライアントと問題に応じて、アルゴリズムの分析と最適化に優れたスキルが必要だと思います。あなたの問題は数学的アルゴリズムレベルか、それともJavaアルゴリズムレベルですか?

また、作業するJVMの実装に精通している必要があります。言語とAPIを知ることは十分ではありません。特定の状況でどの言語構造を使用するかを細かく知る必要があります。これは、使用している特定のJVMによって異なる場合があります。プロファイラは、JVM固有のパフォーマンスの問題を必ずしも明らかにするわけではありません。他の人が指摘しているように、同じJVMは、異種のハーウェアで異なる動作をすることができます。

+0

受け入れられました。多くの回答は良い、有用でしたが、私は1つを選択しなければなりません;-) – KLE

1

私は追加します。

  • うプロファイラーの結果についても懐疑的です。まず頭脳を使いましょう。
  • あなたがそれを見るまでそれを信じてはいけません。
  • 測定する前に責めないでください。
+0

私は理解しますが、これはあなたがそれをやっている間、実際のスキルよりも心の状態に関連しています。 – KLE

+1

私は最初に「あなたの脳の結果についても懐疑的である:最初にプロファイラを使う」というように変更するだろう。プロファイラなしでパフォーマンスのボトルネックを推測できるケースがあったが、通常、プロファイラは私を驚かせ、それは正しいです。 –

1

Javaコードを高速化できること。あなたは、遅いコードを見るために呼び出される可能性が高く、遅い部分を見つけて修正する必要があります。それをスピードアップすることはできません、あなたは怒っているクライアントを持って、スピードアップし、誰もが幸せです。あなたがそのようなことが好きなら、これは実行するためにいくつかのプレッシャーの下に置くことができます。

デザインにアドバイスを求めることができます。その結果、多くのベストプラクティスを理解し、良いスキルを身に付ける必要があります。

+0

ありがとう、私は理解しています。スキルに名前をつけるには、**「圧力指向」**とお考えですか?またはより良い言葉... – KLE

+1

また、あなたは良いブーツのペアが必要になります。あなたがスロッグする必要がある本当に悪いコードがいくつかあります! –

+0

私はこれらの2つの考えを質問に取り入れます。 – KLE

4

私は、最も重要なスキルは「腸の感覚」ではなく証拠に従うことができ、本当に問題を分解して測定することができる分析的な心だと思います。

その後、測定を理解するいくつかの創造的な方法が必要になります。誰かが業績コンサルタントを雇うと、彼らはしばしばスタックしてしまいます。実際のユーザーが実際のことをやっていることを意味します。つまり、Javaがスタック内の唯一のものではないということです(データベースには注意しますが、JavaScriptやネットワーキングの問題誰がほかに何を知っているか)。

洗濯物リストの点では、大きな欠点はgarbage collectionです。その仕組みとそれを調整する方法を理解することが重要です。多くのケースでは、あまりにも長い間、重要なプロセスを止めるだけで、世界的なガベージコレクションの問題が発生します。

それぞれのクライアントには異なるものが必要になるため、実際には潜在的なソリューションの広範なツールキットが必要です。一部のオブジェクトは不変オブジェクト用にオブジェクトプールを必要とし、一部は同期を減らすために不変オブジェクトを導入する必要があり、一部は過度オブジェクト作成などを防ぐために可変オブジェクトを導入する必要があります。パフォーマンスは事例ごとに異なります。それぞれのケースで助けを求めるための経験と知識の範囲が必要です。

1

また、GUIパフォーマンスの向上(金融などの高速アプリケーションの多くはSwingなどのようなものが多い)を扱うサブフィールドがあります。それは、追加のスキルの全体の束をもたらします。

+0

興味深い。いくつかの精度を与えることができますか? – KLE

+2

Swing(およびAWT)では、ペイント/無効化/クリッピングモデルとイベントディスパッチメカニズムは一般的にあまり理解されていません。誤用は、応答性を著しく低下させ、遅延、ちらつきなどを増加させる可能性がある。高速UI(例えば、金融および軍事用途のための)を必要とする企業は、これらのことを改善できる人々にしばしば支払う。私はゲーム業界にも同様のものが存在することを知っています(ただしJavaではありません)。 – Uri

+0

+1その素晴らしい入力に感謝します。 – KLE

1

アルゴリズムとBig O表記の強い理解。 O(logn)が存在するときにO(n)アルゴリズムを最適化するのに10時間を費やすと、時間が無駄になります。あなたのリストにBigOを追加します。

また、メモリとCPUの関係をよく理解しています。しばしば、一方を他方(つまりキャッシング)のために交換することができます。

+0

アルゴリズム分析には大きな力が必要だと私は非常に強く同意しますが、ビッグオーはその始まりにすぎません。私の同意にもかかわらず、私はあなたの答えがアップヴォートの価値があるとは思わない。 –

+2

投票についてはあまり気にしません。パフォーマンスのエキスパートであると主張し、適切なBigOを使ってArrayListとLinkedListの違いを教えてくれないコンサルタントには懐疑的だと言っているだけです。 – reccles

1

他の人が言ったことは、プラスthisです。それはthisthisthisと一緒に行く。

追加:DBのBig-O、JVM、キャッシュ、動作を理解することはすべて重要です。しかし、問題を特定するについては、特別なツールを必要としない非常に簡単な手順で簡単かつ迅速に見つけることができます。 複数のランダムなスタックショットを取って、を慎重に見て、要約していないものを見てください。

これは、簡単に自分自身に証明できるので、プロファイリングに関する多くの一般的な知恵を反駁します。上記のリンクはそれを長らく説明しています。

+0

これはかなりおならの答えです。あなたの答えにリンクの概要を書いてください。 –

+0

@サン:それが好きではなかったのですか? OK、もう少し言っておきます。私はそれを何度も何度も綴ることに少し疲れました。 –

+0

Downvoteが奪われました。面白いことをするのに疲れているので、1行の文章は、既に読んでいる人を助け、質問するときに考慮する方法を助けるのに大いに役立ちます。 –

2

私は、ハードウェアも理解することが重要だと考えています(パフォーマンスの高いデータベースを設計するには少なくとも重要です)。いつ問題にハードウェアを追加する必要がありますか?また、いつコードを修正する必要がありますか、どちらをいつ行う必要がありますか。

これらの種類のコンサルタントとして、深刻な人々/政治的スキルが必要となります。すでにパフォーマンス問題を修正しようとしていた人からのデータをインタビューして収集します。彼らの多くはコンサルタントが呼ばれて不幸になるでしょう。彼らの抵抗に対処しなければなりません。あなた自身のビジネスとしてこれを行うつもりなら、良い会計知識(そして税務コンサルタント)とセールススキルも必要です。潜在的な顧客にサービスを提供するための会話スキルが必要です。

測定するだけでなく、試した内容と時間の違いを記録してください。そのようなことをデータベースに保存しておけば、すぐに多くのクライアントでハード・データに基づいて試行する可能性の高いパフォーマンスチューニングを見ることができます。ナレッジベースプログラムを開発すると、時間が経つにつれて大いに役立ちます。

私はまた、データベースのパフォーマンスチューニングに関する書籍のセット(チューニングは非常にデータベースに特化しているため、主要なデータベースのバックエンドごとに少なくとも1つ)とデータベースの設計に投資します。私は、多くの、多くのパフォーマンス上の問題を悪いデータベース設計と、うまく機能する良いSQLコードを書く方法の知識がないことを追跡することができると思います。データベースのパフォーマンス・チューニングは、作成する索引を知ることよりも広範囲です。

+0

+1ありがとう、特にハードウェアと政治について。 – KLE

1

いくつかの一般的なスキル要件はThe Art of Application Performance Testingにあります。役に立つと思ったスキルは次のとおりです。

  • 統計情報 - パフォーマンステストでは全く同じタイミングが2回返されることはありません。変更が統計的に有意であるかどうかを確認するには、エラーのマージンを調べる必要があります。
  • ビジネスアナリストのスキル - エンドユーザーが何をしているのか、どの部分が遅いのかを確認し、それらのイベントの周りにテストケースを構築する必要があります。パフォーマンスの改善が終わったら、ユーザーはその違いに気付くことができ、テスト結果でこれを数値化する必要があります。
  • technology generalist - パフォーマンスの問題はどこでも発生する可能性があります。問題を特定できるようにするには、スタック内のすべてのテクノロジを理解する必要があります。パフォーマンスの問題は、遅延、ネットワーク、データベース、およびコードによって引き起こされる可能性があります。開発者はボックスに4 GBのRAMがあり、コードを使用するデータ入力ユーザーは512 MBのマシンを持っているかもしれません。

コンサルタントであることの利点は、エンドツーエンドの視点をとることができることです。開発者は、おそらく遅い実行コードの領域を知っているかもしれませんが、総処理時間にはあまり重要ではないかもしれません。はい、ArrayList#はO(n)時間で実行されるコールを含みますが、現代のハードウェアでは数ミリ秒しかかかりません。

関連する問題