mcpField
J
java-developer

java-developer

github.com/yennanliu開発14057 回インストール今日更新
リポジトリ

java-developer について

java-developerは、Javaでの問題解決、アルゴリズム実装、テストを支援するスキルです。Java 8の規約や代表的なアルゴリズムのパターン、性能と境界条件への対応を案内します。

主な機能

  1. 01Java 8のプロジェクト規約
  2. 02代表的なアルゴリズムパターンの案内
  3. 03計算量とメモリ使用量の指針
  4. 04JUnit 5のテスト手順
  5. 05Javaでよくあるミスへの注意

活用シーン

  1. 01LeetCodeのJava解答作成
  2. 02他言語の解答をJavaに変換
  3. 03データ構造とアルゴリズムの実装
  4. 04Javaコードのテスト作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/yennanliu/cs_basics --skill java-developer

インストール後、Claude Code で/java-developerを入力して読み込まれたか確認します。

詳細

Java 開発者

この Skill を使用するタイミング

以下の場合にこの Skill を使用してください。

  • LeetCode の問題に対する新しい Java ソリューションを作成する場合
  • Java でデータ構造やアルゴリズムを実装する場合
  • 他の言語のソリューションを Java に変換する場合
  • JUnit で Java のテストケースを設定する場合

手順

1. コード構成

プロジェクトの Java 規約に従ってください。

  • パッケージ構成:AlgorithmJava、DataStructure、LeetCodeJava
  • Java 8 との互換性がある機能を使用してください
  • 適切なインポート文とクラス宣言を含めてください
  • キャメルケースの命名規則に従ってください

LeetCode の問題の場合:

package LeetCodeJava;

/**
 * Problem {number}: {title}
 * Difficulty: {Easy/Medium/Hard}
 *
 * {Brief problem description}
 *
 * Time Complexity: O(?)
 * Space Complexity: O(?)
 */
public class Problem{Number}{Title} {
    public ReturnType methodName(InputType param) {
        // Implementation
    }
}
2. ベストプラクティス

面接に備えて最適化してください。

  • まず、読みやすくすっきりしたコードを書いてください
  • 複雑なロジックにのみコメントを追加してください
  • 意味の分かる変数名を使用してください
  • エッジケースを明示的に処理してください

一般的なパターン:

  • 2 ポインター:left、right または i、j
  • スライディングウィンドウ:start、end
  • 二分探索:lo、hi、mid
  • DFS/BFS:型を明示して Stack/Queue を使用してください

優先して使用するデータ構造:

  • サイズが変わる場合は、配列ではなく List<>
  • O(1) で検索する場合は HashMap<>
  • 一意性を確認する場合は HashSet<>
  • ヒープ操作には PriorityQueue<>
  • スタックとキューを柔軟に扱う場合は Deque<>
3. パフォーマンスのガイドライン

時間計算量の目標:

  • 配列の問題:O(n) または O(n log n) を目指してください
  • 文字列の問題:HashMap/配列によるカウントで O(n) を目指してください
  • 木の問題:O(n) の走査が通常は最適です
  • グラフの問題:BFS/DFS では O(V + E) を目指してください

空間の最適化:

  • 可能な場合は入力をインプレースで変更してください
  • ブール配列にはビット操作を使用してください
  • O(1) の空間で済むように、再帰より反復を検討してください
4. テスト方法

テストケースを含めてください。

// In test class
@Test
public void testBasicCase() {
    Problem{Number}{Title} solution = new Problem{Number}{Title}();
    assertEquals(expected, solution.methodName(input));
}

@Test
public void testEdgeCase() {
    // Test empty input, null, single element, etc.
}
5. 避けるべき一般的なミス
  • 整数オーバーフロー:合計が大きい場合は long を使用してください
  • 配列のインデックス範囲外アクセス:i < arr.length を確認してください
  • NullPointerException:入力を検証してください
  • 1 つずれるエラー:ループ境界を再確認してください
  • 可変と不変の違い:参照の扱いに注意してください
6. Java 固有のヒント

便利なメソッド:

// String
s.charAt(i), s.substring(i, j), s.toCharArray()

// Collections
Collections.sort(list), Collections.reverse(list)
Arrays.sort(arr), Arrays.fill(arr, val)

// Math
Math.max(a, b), Math.min(a, b), Math.abs(x)

// Queue/Stack
queue.offer(), queue.poll(), queue.peek()
stack.push(), stack.pop(), stack.peek()

ソートでのラムダ式:

Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> a[0] - b[0]);

ワークフローの例

  1. leetcode_java/ から問題を読み込むか、新しいファイルを作成します
  2. パターンを特定します(2 ポインター、スライディングウィンドウ、DP など)
  3. 分かりやすい変数名を使ってソリューションを書きます
  4. コメントに計算量の分析を追加します
  5. エッジケースを含む例でテストします
  6. 正しいソリューションが動作した後、必要に応じて最適化します

プロジェクト固有の注意事項

  • Maven プロジェクトです。mvn compile でビルドし、mvn test でテストしてください
  • テストには JUnit 5 が設定されています
  • 問題はアルゴリズムの種類ごとに整理されています
  • パッケージ内の既存のコードスタイルに従ってください

コメント