Skip to main content

java

当进行Java开发、性能优化、并发编程或设计模式应用时,分析代码质量和最佳实践。

소스 정보

저장소
microwind/ai-skills
최근 소스 활동
2026년 3월 29일 10:41
감지된 SKILL.md 언어
중국어
스타
83
포크
24

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
4 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
Java编程
description
当进行Java开发、性能优化、并发编程或设计模式应用时,分析代码质量和最佳实践。
license
MIT
# Java编程技能 ## 概述 Java是企业级应用开发的主流语言,从Java 8到Java 21的演进引入了大量现代特性。不同版本的Java在特性支持、性能、和编程范式上有显著差异。选择合适的特性和避免性能陷阱对于构建高质量应用至关重要。 **核心原则**: 好的Java代码应该清晰高效、资源管理清楚、并发安全、充分利用语言特性。坏的Java代码会内存泄漏、性能低下、难以维护。 ## 何时使用 **始终:** - Java项目代码审查 - 性能优化和调优 - 并发编程和线程安全分析 - 内存管理和GC优化 - 设计模式应用 - 框架集成和最佳实践 **触发短语:** - "Java性能优化" - "并发编程最佳实践" - "Stream API用法" - "Lambda表达式应用" - "内存泄漏检测" - "Java 8/11/21特性" ## Java编程技能功能 ### 核心语言特性 - 类和接口设计 - 继承和多态 - 异常处理机制 - 泛型编程 - 注解和元数据 ### Java 8特性(函数式编程) - Lambda表达式 - 函数式接口 - Stream API - Optional类型 - 方法引用 ### Java 11及以后特性 - var局部变量类型推导 - 文本块(Text Blocks) - 密封类(Sealed Classes) - 记录类(Records) - 模式匹配(Pattern Matching) ### 并发编程 - Thread和Runnable - 同步机制(synchronized, Lock) - 并发容器(ConcurrentHashMap等) - 线程池和ExecutorService - 内存模型和volatile ### 集合框架 - List, Set, Map使用 - 迭代器和遍历 - Collections工具类 - 性能特性(时间复杂度) - 自定义集合 ### I/O和资源管理 - try-with-resources - Stream和Reader/Writer - NIO和非阻塞I/O - 文件操作 - 资源泄漏防护 ## 常见问题 ### 性能问题 - **问题**: String拼接性能 - **原因**: 循环中使用String +操作 - **解决**: 使用StringBuilder或StringBuffer - **问题**: 集合初始化过小 - **原因**: 不设置初始容量导致频繁扩容 - **解决**: 根据预期数据量设置初始容量 - **问题**: 流慢速的I/O操作 - **原因**: 没有使用缓冲 - **解决**: 使用BufferedReader/BufferedWriter ### 并发问题 - **问题**: 竞态条件 - **原因**: 多线程访问共享数据没有同步 - **解决**: 使用synchronized、Lock或线程安全容器 - **问题**: 死锁 - **原因**: 获取锁的顺序不一致 - **解决**: 规定统一的锁获取顺序 - **问题**: 内存可见性问题 - **原因**: 没有使用volatile或happens-before关系 - **解决**: 正确使用同步机制建立happens-before关系 ### 资源泄漏 - **问题**: 文件没有关闭 - **原因**: 异常时没有释放资源 - **解决**: 使用try-with-resources自动管理 ## 代码示例 ### Java 8 - Lambda和Stream ```java 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); String result = optional.orElse("Default"); String mapped = optional.map(String::toUpperCase) .orElse("EMPTY"); } } ``` ### Java 11/ 17特性 ```java // 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) throw new IllegalArgumentException("Age cannot be negative"); } } } ``` ### 并发编程 ```java 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 CountDownLatch(3); for (int i = 0; i < 3; i++) { final int taskId = i; new Thread(() -> { System.out.println("Task " + taskId + " starting"); try { Thread.sleep(100); System.out.println("Task " + taskId + " done"); } finally { latch.countDown(); } }).start(); } latch.await(); // 等待所有任务完成 System.out.println("All tasks completed"); } // 同步化访问 public synchronized void synchronizedMethod() { counter.incrementAndGet(); } // Lock接口 private final Object lock = new Object(); public void lockDemo() { synchronized (lock) { counter.incrementAndGet(); } } } ``` ### 资源管理和异常处理 ```java 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); } } // 资源自动关闭 } // 自定义AutoCloseable资源 public static class DatabaseConnection implements AutoCloseable { private String connectionString; public DatabaseConnection(String connStr) { this.connectionString = connStr; System.out.println("Opening connection to " + connStr); } @Override public void close() { System.out.println("Closing connection"); } public void execute(String sql) { System.out.println("Executing: " + sql); } } // 使用自定义资源 public void customResource (final int taskId = i; executor.execute(() -> { System.out.println("Task " + taskId + " running"); counter.incrementAndGet(); }); } executor.shutdown(); } public static void main(String[] args) throws Exception { try (DatabaseConnection conn = new DatabaseConnection("jdbc:mysql://localhost/mydb")) { conn.execute("SELECT * FROM users"); } // 连接自动关闭 } } ``` ### 集合框架性能考虑 ```java 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)); } // 推荐 - 增强for循环 for (String item : items) { System.out.println(item); } // 通用 - 迭代器 for (Iterator<String> it = items.iterator(); it.hasNext(); ) { System.out.println(it.next()); } // 函数式 - 可读性好但可能有额外开销 items.forEach(System.out::println); } } ```
GitHub에서 보기