用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/microwind/ai-skills --skill java命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | Java编程 |
| description | 当进行Java开发、性能优化、并发编程或设计模式应用时,分析代码质量和最佳实践。 |
| license | MIT |
Java是企业级应用开发的主流语言,从Java 8到Java 21的演进引入了大量现代特性。不同版本的Java在特性支持、性能、和编程范式上有显著差异。选择合适的特性和避免性能陷阱对于构建高质量应用至关重要。
核心原则: 好的Java代码应该清晰高效、资源管理清楚、并发安全、充分利用语言特性。坏的Java代码会内存泄漏、性能低下、难以维护。
始终:
触发短语:
问题: String拼接性能
原因: 循环中使用String +操作
解决: 使用StringBuilder或StringBuffer
问题: 集合初始化过小
原因: 不设置初始容量导致频繁扩容
解决: 根据预期数据量设置初始容量
问题: 流慢速的I/O操作
原因: 没有使用缓冲
解决: 使用BufferedReader/BufferedWriter
问题: 竞态条件
原因: 多线程访问共享数据没有同步
解决: 使用synchronized、Lock或线程安全容器
问题: 死锁
原因: 获取锁的顺序不一致
解决: 规定统一的锁获取顺序
问题: 内存可见性问题
原因: 没有使用volatile或happens-before关系
解决: 正确使用同步机制建立happens-before关系
import java.util.*;
import java.util.stream.*;
public class Java8Features {
// Lambda表达式
public void lambdaDemo() {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 使用lambda过滤和转换
numbers.stream()
.filter(n -> n % 2 == 0)
.map(n -> n * n)
.forEach(System.out::println);
}
// Stream API
public void streamApiDemo() {
List<String> words = Arrays.asList("hello", "world", "java", "stream");
// 统计长度>3的单词
long count = words.stream()
.filter(w -> w.length() > 3)
.count();
System.out.println("Count: " + count);
// 转换成包含长度的map
Map<String, Integer> wordLengths = words.stream()
.collect(Collectors.toMap(
Function.identity(),
String::length
));
}
// Optional处理null
public void optionalDemo() {
Optional<String> optional = Optional.of("Java");
optional.ifPresent(System.out::println);
optional.orElse();
optional.map(String::toUpperCase)
.orElse();
}
}
// Java 10+ - var类型推导
public class ModernJavaFeatures {
public void varDemo() {
var name = "Java"; // 推导为String
var numbers = List.of(1, 2, 3); // 推导为List<Integer>
var map = new HashMap<String, Integer>(); // 推导为HashMap
// 在循环中使用
for (var num : numbers) {
System.out.println(num);
}
}
// Java 13+ - 文本块
public String textBlockDemo() {
String json = """
{
"name": "John",
"age": 30,
"city": "New York"
}
""";
return json;
}
// Java 14+ - Records(数据类)
public record Person(String name, int age, String email) {
// 自动生成构造器、equals、hashCode、toString
// 可以添加验证逻辑
public Person {
if (age < 0) ();
}
}
}
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
public class ConcurrencyDemo {
// 线程安全的计数器
private AtomicInteger counter = new AtomicInteger(0);
// 使用线程池
public void threadPoolDemo() {
ExecutorService executor = Executors.newFixedThreadPool(4);
for (int i = 0; i < 10; i++) {
final int taskId = i;
executor.execute(() -> {
System.out.println("Task " + taskId + " running");
counter.incrementAndGet();
});
}
executor.shutdown();
try {
executor.awaitTermination(1, TimeUnit.MINUTES);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
// 使用CountDownLatch等待多个任务
public void countDownLatchDemo() throws InterruptedException {
CountDownLatch latch = new ();
( ; i < ; i++) {
i;
(() -> {
System.out.println( + taskId + );
{
Thread.sleep();
System.out.println( + taskId + );
} {
latch.countDown();
}
}).start();
}
latch.await();
System.out.println();
}
{
counter.incrementAndGet();
}
();
{
(lock) {
counter.incrementAndGet();
}
}
}
import java.io.*;
import java.nio.file.*;
public class ResourceManmentation {
// try-with-resources 自动管理资源
public String readFileModern(String filename) throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
return reader.lines()
.collect(Collectors.joining("\n"));
}
}
// 多个资源管理
public void multipleResourcesDemo() throws IOException {
try (
FileReader reader = new FileReader("input.txt");
FileWriter writer = new FileWriter("output.txt")
) {
// 使用reader和writer
char[] buffer = new char[1024];
int bytesRead;
while ((bytesRead = reader.read(buffer)) != -1) {
writer.write(buffer, 0, bytesRead);
}
}
}
{
String connectionString;
{
.connectionString = connStr;
System.out.println( + connStr);
}
{
System.out.println();
}
{
System.out.println( + sql);
}
}
-> {
System.out.println( + taskId + );
counter.incrementAndGet();
});
}
executor.shutdown();
}
Exception {
( ()) {
conn.execute();
}
}
}
import java.util.*;
public class CollectionPerformance {
// 选择合适的集合类
public void collectionChoiceDemo() {
// List - 有序,可重复
List<String> list = new ArrayList<>(100); // 指定容量避免扩容
list.add("item1");
list.add("item2");
// Set - 无序,不重复
Set<String> set = new HashSet<>(100); // 指定容量
set.add("item1");
set.add("item2");
// Map - 键值对
Map<String, Integer> map = new HashMap<>(100);
map.put("key1", 1);
map.put("key2", 2);
// 线程安全的集合
Map<String, Integer> concurrent = new ConcurrentHashMap<>();
concurrent.putIfAbsent("key", 1);
}
// 迭代方式的性能考虑
public void iterationDemo(List<String> items) {
// 最快 - 直接索引
for (int i = 0; i < items.size(); i++) {
System.out.println(items.get(i));
}
(String item : items) {
System.out.println(item);
}
(Iterator<String> it = items.iterator(); it.hasNext(); ) {
System.out.println(it.next());
}
items.forEach(System.out::println);
}
}