java-developer について
java-developerは、Javaでの問題解決、アルゴリズム実装、テストを支援するスキルです。Java 8の規約や代表的なアルゴリズムのパターン、性能と境界条件への対応を案内します。
主な機能
- 01Java 8のプロジェクト規約
- 02代表的なアルゴリズムパターンの案内
- 03計算量とメモリ使用量の指針
- 04JUnit 5のテスト手順
- 05Javaでよくあるミスへの注意
活用シーン
- 01LeetCodeのJava解答作成
- 02他言語の解答をJavaに変換
- 03データ構造とアルゴリズムの実装
- 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]);
ワークフローの例
- leetcode_java/ から問題を読み込むか、新しいファイルを作成します
- パターンを特定します(2 ポインター、スライディングウィンドウ、DP など)
- 分かりやすい変数名を使ってソリューションを書きます
- コメントに計算量の分析を追加します
- エッジケースを含む例でテストします
- 正しいソリューションが動作した後、必要に応じて最適化します
プロジェクト固有の注意事項
- Maven プロジェクトです。
mvn compileでビルドし、mvn testでテストしてください - テストには JUnit 5 が設定されています
- 問題はアルゴリズムの種類ごとに整理されています
- パッケージ内の既存のコードスタイルに従ってください
コメント
Markdown 対応