编程语言基础
难度等级:⭐⭐⭐ 前置知识:无 后续衔接:Web 后端开发、架构设计
学习路径
- 入门阶段:掌握一门语言的基础语法和核心特性
- 进阶阶段:理解运行时原理、性能优化、跨语言对比
- 精通阶段:能够进行语言级别的架构设计和技术选型
一、C# 与 .NET 生态
1.1 C# 语言基础
委托与事件
概念解释
委托(Delegate)是 C# 中类型安全的方法引用,类似于 C/C++ 的函数指针,但具有类型安全和面向对象特性。委托定义了方法的签名(参数类型和返回值类型),可以将方法作为参数传递、存储和调用。事件(Event)是基于委托的发布-订阅机制,用于实现对象间的松耦合通信。
核心要点
- 委托是引用类型,继承自
System.MulticastDelegate,支持多播(链式调用多个方法) - 事件使用
event关键字声明,只能在声明事件的类内部触发,外部只能订阅或取消订阅 Action和Func是框架预定义的泛型委托,分别表示无返回值和有返回值的方法- 事件遵循观察者模式,发布者和订阅者之间解耦
代码示例
// 委托定义
public delegate void MessageHandler(string message);
// 使用 Action 和 Func
Action<string> print = Console.WriteLine;
Func<int, int, int> add = (a, b) => a + b;
// 事件示例
public class Publisher
{
public event EventHandler<string> OnMessage;
public void SendMessage(string msg)
{
OnMessage?.Invoke(this, msg);
}
}
public class Subscriber
{
public void HandleMessage(object sender, string msg)
{
Console.WriteLine($"Received: {msg}");
}
}
// 使用
var pub = new Publisher();
var sub = new Subscriber();
pub.OnMessage += sub.HandleMessage;
pub.SendMessage("Hello");
实际应用场景
- UI 编程:按钮点击、窗口关闭等事件处理
- 异步回调:任务完成后的通知机制
- 插件系统:通过事件实现主程序与插件的通信
- 领域事件:DDD 中的领域事件发布与订阅
LINQ(Language Integrated Query)
概念解释
LINQ 是 C# 3.0 引入的语言集成查询功能,允许使用类似 SQL 的语法对任何实现了 IEnumerable<T> 的集合进行查询操作。它将查询能力直接集成到语言中,提供编译时类型检查和 IntelliSense 支持。
核心要点
- 查询语法(类似 SQL)和方法语法(链式调用)两种写法
- 延迟执行(Deferred Execution):查询在枚举结果时才真正执行
- 立即执行方法:
ToList()、ToArray()、Count()等会立即触发查询 - 可查询对象、数据库(LINQ to Entities)、XML(LINQ to XML)等
代码示例
var people = new List<Person>
{
new Person { Name = "Alice", Age = 25, City = "Beijing" },
new Person { Name = "Bob", Age = 30, City = "Shanghai" },
new Person { Name = "Charlie", Age = 25, City = "Beijing" }
};
// 查询语法
var query = from p in people
where p.Age > 20 && p.City == "Beijing"
orderby p.Name
select p.Name;
// 方法语法(等价)
var methodQuery = people
.Where(p => p.Age > 20 && p.City == "Beijing")
.OrderBy(p => p.Name)
.Select(p => p.Name);
// 分组查询
var grouped = people.GroupBy(p => p.City)
.Select(g => new { City = g.Key, Count = g.Count() });
实际应用场景
- 数据过滤和转换:从集合中筛选、排序、投影数据
- 数据库查询:Entity Framework 中的 LINQ to Entities
- XML 处理:LINQ to XML 替代传统的 DOM 操作
- 内存数据聚合:分组、统计、连接操作
async/await 异步编程
概念解释
async/await 是 C# 5.0 引入的异步编程模型,基于 Task 和 Task<T> 类型,使异步代码的编写和阅读体验接近同步代码。编译器会将 async/await 转换为状态机实现,避免了传统的回调地狱问题。
核心要点
async标记方法为异步方法,方法内可使用awaitawait暂停当前方法执行,等待异步操作完成,不阻塞线程- 返回类型:
Task、Task<T>、void(仅用于事件处理器) ConfigureAwait(false)避免恢复上下文,提高库代码性能- 异常处理:异步异常会被包装到
Task中,通过 try-catch 捕获
代码示例
public async Task<string> DownloadAndProcessAsync(string url)
{
using var client = new HttpClient();
// 异步下载,不阻塞线程
var content = await client.GetStringAsync(url);
// 异步处理
var result = await Task.Run(() => ProcessContent(content));
return result;
}
// 并行执行多个异步操作
public async Task ProcessMultipleAsync()
{
var task1 = DownloadAsync("url1");
var task2 = DownloadAsync("url2");
var task3 = DownloadAsync("url3");
await Task.WhenAll(task1, task2, task3);
var results = await Task.WhenAll(task1, task2, task3);
}
// 异步流(C# 8.0+)
public async IAsyncEnumerable<int> GenerateNumbersAsync()
{
for (int i = 0; i < 10; i++)
{
await Task.Delay(100);
yield return i;
}
}
实际应用场景
- I/O 密集型操作:网络请求、文件读写、数据库查询
- 高并发服务器:避免线程阻塞,提高吞吐量
- UI 应用:保持界面响应性
- 微服务通信:服务间异步调用
泛型与反射
概念解释
泛型(Generics)允许定义类型安全的模板类和方法,在编译时或运行时用具体类型替换。反射(Reflection)使程序能够在运行时检查类型信息、动态创建对象、调用方法。
核心要点
- C# 泛型在运行时保留类型信息(与 Java 类型擦除不同)
- 泛型约束:
where T : class、where T : new()、where T : IComparable - 反射通过
System.Reflection命名空间实现 - 性能考量:反射调用比直接调用慢,可缓存
MethodInfo或使用表达式树优化
代码示例
// 泛型类
public class Repository<T> where T : class, new()
{
private readonly List<T> _items = new();
public void Add(T item) => _items.Add(item);
public T GetById(int id) => _items.FirstOrDefault();
}
// 泛型方法
public T Clone<T>(T source) where T : ICloneable
{
return (T)source.Clone();
}
// 反射示例
public void InspectType(object obj)
{
var type = obj.GetType();
Console.WriteLine($"Type: {type.Name}");
foreach (var prop in type.GetProperties())
{
Console.WriteLine($" {prop.Name}: {prop.PropertyType.Name}");
}
// 动态创建实例
var instance = Activator.CreateInstance(type);
// 动态调用方法
var method = type.GetMethod("ToString");
var result = method.Invoke(instance, null);
}
实际应用场景
- 泛型:集合类、仓储模式、依赖注入容器
- 反射:ORM 框架映射实体、序列化库、插件系统、AOP 代理
1.2 .NET 平台演进
概念解释
.NET 平台经历了从 .NET Framework(Windows 专用)到 .NET Core(跨平台)再到统一平台 .NET 5/6/7/8+ 的演进过程。理解各版本差异对于技术选型和迁移至关重要。
核心要点
- .NET Framework(2002-2016):仅支持 Windows,闭源,版本 1.0-4.8
- .NET Core(2016-2019):跨平台、开源、高性能,版本 1.0-3.1
- .NET 5+(2020-):统一平台,每年一个大版本,LTS 版本支持 3 年
- 关键改进:性能提升、单文件发布、Native AOT、最小 API、Blazor
- 迁移注意事项:检查 API 兼容性、替换已废弃的 API、测试第三方依赖
版本对比 | 特性 | .NET Framework 4.8 | .NET Core 3.1 | .NET 6 (LTS) | .NET 8 (LTS) | |——|——————-|—————|————–|————–| | 跨平台 | 否 | 是 | 是 | 是 | | 性能 | 基准 | 2-5x 提升 | 进一步优化 | 再提升 20%+ | | 部署方式 | 全局安装 | 自包含/框架依赖 | 单文件发布 | Native AOT | | Web 框架 | ASP.NET MVC | MVC/Razor Pages | 最小 API | 最小 API + 源生成器 |
实际应用场景
- 新项目首选最新 LTS 版本(当前 .NET 8)
- 遗留系统迁移:逐步替换不兼容的 API
- 云原生应用:利用容器化和自包含部署
- 性能敏感场景:使用 Native AOT 编译
1.3 CLR 运行时
概念解释
CLR(Common Language Runtime)是 .NET 的执行引擎,负责管理代码执行,提供内存管理、类型安全、异常处理、垃圾回收等服务。理解 CLR 原理对于性能调优和问题排查至关重要。
核心要点
- JIT 编译:IL 代码在运行时编译为机器码,分为 RyuJIT(默认)和 Tiered Compilation
- 垃圾回收(GC):分代回收(Gen 0/1/2),三种模式:Workstation、Server、Background
- 内存模型:托管堆(小对象堆 SOH、大对象堆 LOH)、栈、特殊区域
- 类型系统:CTS(Common Type System)确保跨语言互操作
GC 调优要点
// 查看 GC 信息
var gcInfo = GC.GetGCMemoryInfo();
Console.WriteLine($"Gen 0 collections: {gcInfo.GenerationInfo[0].Collections}");
// 强制回收(通常不推荐,仅用于特定场景)
GC.Collect();
GC.WaitForPendingFinalizers();
// 大对象分配优化
// 使用 ArrayPool<T> 避免频繁分配大数组
var pool = ArrayPool<byte>.Shared;
var buffer = pool.Rent(1024 * 1024);
try
{
// 使用 buffer
}
finally
{
pool.Return(buffer);
}
实际应用场景
- 高吞吐服务:使用 Server GC 模式
- 低延迟场景:使用 Background GC 减少停顿
- 内存泄漏排查:分析 GC Root、对象生命周期
- 性能调优:减少分配、对象池、Span
避免拷贝
二、Java 生态
2.1 Java 语言基础
集合框架
概念解释
Java 集合框架(Collections Framework)提供了一组接口和实现类,用于存储和操作对象组。核心接口包括 List、Set、Map、Queue,每种接口有多个实现类,适用于不同场景。
核心要点
List:有序可重复,ArrayList(随机访问快)、LinkedList(插入删除快)Set:无序不重复,HashSet(O(1))、TreeSet(有序 O(log n))Map:键值对,HashMap(常用)、ConcurrentHashMap(线程安全)、LinkedHashMap(有序)- 迭代器模式:
Iterator安全删除,forEach简洁遍历 - 并发集合:
CopyOnWriteArrayList、ConcurrentHashMap避免Collections.synchronizedXxx
代码示例
// List 使用
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.removeIf(s -> s.startsWith("P"));
// Map 使用
Map<Integer, String> map = new HashMap<>();
map.put(1, "One");
map.computeIfAbsent(2, k -> "Two");
map.merge(1, "Updated", (old, newVal) -> old + " " + newVal);
// Stream 与集合结合
List<String> result = list.stream()
.filter(s -> s.length() > 3)
.map(String::toUpperCase)
.collect(Collectors.toList());
// ConcurrentHashMap
ConcurrentHashMap<String, Integer> concurrentMap = new ConcurrentHashMap<>();
concurrentMap.putIfAbsent("key", 1);
concurrentMap.compute("key", (k, v) -> v == null ? 1 : v + 1);
实际应用场景
- 数据缓存:
ConcurrentHashMap实现本地缓存 - 去重统计:
HashSet去重、HashMap计数 - 任务队列:
PriorityQueue优先级任务、ArrayDeque双端队列 - 配置管理:
LinkedHashMap保持插入顺序
反射与注解
概念解释
反射(Reflection)允许程序在运行时检查类、方法、字段信息并动态调用。注解(Annotation)是元数据机制,为代码添加标记,可被编译器或运行时读取。
核心要点
- 反射类:
Class、Method、Field、Constructor - 性能开销:反射调用比直接调用慢 10-100 倍,可缓存或使用
MethodHandle - 注解定义:
@interface,元注解@Retention、@Target、@Documented - 运行时注解通过反射读取,编译时注解通过 APT(Annotation Processing Tool)处理
代码示例
// 自定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Retry {
int maxAttempts() default 3;
long delayMs() default 1000;
}
// 使用注解
public class Service {
@Retry(maxAttempts = 5, delayMs = 2000)
public void callExternalApi() {
// 可能失败的操作
}
}
// 反射读取注解
public void processAnnotations(Object obj) throws Exception {
Class<?> clazz = obj.getClass();
for (Method method : clazz.getDeclaredMethods()) {
if (method.isAnnotationPresent(Retry.class)) {
Retry retry = method.getAnnotation(Retry.class);
System.out.println("Retry: " + retry.maxAttempts() + " times");
// 实现重试逻辑
}
}
}
实际应用场景
- 框架开发:Spring 依赖注入、MyBatis 映射
- AOP 实现:方法拦截、事务管理
- 序列化:Jackson/Gson 字段映射
- 验证框架:Hibernate Validator 注解验证
IO 与 NIO
概念解释
Java IO 是基于流的阻塞式 I/O 模型,NIO(New IO)是基于缓冲区和通道的非阻塞 I/O 模型。NIO.2(Java 7)进一步提供了异步 I/O 和文件系统 API。
核心要点
- IO:
InputStream/OutputStream、Reader/Writer,面向字节/字符流 - NIO:
Channel、Buffer、Selector,支持多路复用 - NIO.2:
Path、Files、AsynchronousChannel,简化文件操作 - 零拷贝:
FileChannel.transferTo()直接在内核态传输数据
代码示例
// 传统 IO
try (BufferedReader reader = new BufferedReader(
new FileReader("input.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
process(line);
}
}
// NIO.2 文件操作
Path path = Paths.get("data.txt");
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
Files.walk(Paths.get("/tmp"))
.filter(Files::isRegularFile)
.forEach(System.out::println);
// 零拷贝文件传输
try (FileChannel source = new FileInputStream("source.dat").getChannel();
FileChannel dest = new FileOutputStream("dest.dat").getChannel()) {
source.transferTo(0, source.size(), dest);
}
实际应用场景
- 文件处理:批量读取、日志分析
- 网络编程:Netty 基于 NIO 的高性能网络框架
- 大数据传输:零拷贝优化文件/网络传输性能
2.2 JVM 原理
概念解释
JVM(Java Virtual Machine)是 Java 程序的运行环境,提供跨平台能力、内存管理、垃圾回收、即时编译等功能。理解 JVM 原理是进行性能调优和问题排查的基础。
核心要点
- 类加载机制:加载 → 验证 → 准备 → 解析 → 初始化,双亲委派模型
- 内存结构:堆(新生代/老年代)、方法区(元空间)、虚拟机栈、本地方法栈、程序计数器
- 垃圾回收:标记-清除、复制、标记-整理算法,G1、ZGC、Shenandoah 收集器
- JIT 编译:C1(客户端)、C2(服务端)编译器,分层编译
- 调优工具:jstat、jmap、jstack、VisualVM、JFR
JVM 内存模型
+---------------------------+
| 方法区 | (元空间,存储类信息、常量)
+---------------------------+
| 堆 | (对象实例,GC 主要区域)
| +---------+---------+ |
| | 新生代 | 老年代 | |
| +---------+---------+ |
+---------------------------+
| 虚拟机栈 | (方法调用栈帧)
+---------------------------+
| 本地方法栈 | (Native 方法)
+---------------------------+
| 程序计数器 | (当前执行指令地址)
+---------------------------+
GC 调优示例
# G1 收集器配置(推荐)
java -XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:G1HeapRegionSize=16m \
-Xms4g -Xmx4g \
-jar app.jar
# ZGC 配置(超低延迟)
java -XX:+UseZGC \
-Xms8g -Xmx8g \
-XX:+ZGenerational \
-jar app.jar
# 打印 GC 日志
java -Xlog:gc*:file=gc.log:time,uptime,level,tags \
-jar app.jar
实际应用场景
- 内存泄漏排查:分析 Heap Dump、GC Root
- 性能调优:调整堆大小、选择合适的 GC 收集器
- 类加载问题:解决
ClassNotFoundException、ClassCastException - 启动优化:CDS(Class Data Sharing)、AppCDS
2.3 Java 8+ 新特性
概念解释
Java 8 是 Java 历史上最重要的版本之一,引入了 Lambda 表达式、Stream API、CompletableFuture 等特性,极大地提升了 Java 的表达能力和异步编程体验。后续版本持续改进,每半年发布一个新版本。
核心要点
- Lambda 表达式:
(params) -> expression,函数式编程基础 - Stream API:声明式数据处理,支持串行/并行流
- CompletableFuture:组合异步操作,避免回调地狱
- Optional:避免 NullPointerException 的容器类
- 新日期时间 API:
LocalDate、LocalDateTime、ZonedDateTime - Java 9+:模块系统、
var局部变量、Record 类、Pattern Matching
代码示例
// Lambda 与方法引用
List<String> names = people.stream()
.filter(p -> p.getAge() > 18)
.map(Person::getName)
.sorted()
.collect(Collectors.toList());
// CompletableFuture 组合
CompletableFuture<String> future = CompletableFuture
.supplyAsync(() -> fetchUserData())
.thenApply(this::validate)
.thenCombine(
CompletableFuture.supplyAsync(() -> fetchOrderData()),
this::mergeData
)
.exceptionally(ex -> {
log.error("Error", ex);
return fallbackData();
});
// Optional 使用
Optional<User> user = findUserById(id);
String result = user.map(User::getName)
.orElse("Unknown");
// Record 类(Java 14+)
public record Point(int x, int y) {}
var p = new Point(10, 20);
System.out.println(p.x()); // 自动提供访问器
实际应用场景
- 数据处理:Stream 替代循环进行集合操作
- 异步编排:CompletableFuture 实现复杂异步流程
- 空值安全:Optional 减少 null 检查
- 不可变数据:Record 类简化 DTO 定义
三、Python 生态
3.1 Python 语言基础
概念解释
Python 是一门动态类型、解释型的高级编程语言,以简洁易读的语法著称。其核心特性包括装饰器、生成器、上下文管理器等,这些特性使 Python 在快速开发和数据科学领域占据主导地位。
核心要点
- 动态类型:运行时确定类型,灵活但缺少编译时检查
- 装饰器:函数包装器,用于日志、权限、缓存等横切关注点
- 生成器:使用
yield的惰性求值,节省内存 - 上下文管理器:
with语句自动管理资源获取和释放 - GIL(全局解释器锁):限制 CPython 的多线程并行能力
代码示例
# 装饰器
import functools
import time
def timer(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
elapsed = time.perf_counter() - start
print(f"{func.__name__} took {elapsed:.4f}s")
return result
return wrapper
@timer
def slow_function(n):
return sum(i * i for i in range(n))
# 生成器
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
# 使用生成器(惰性求值,不占用大量内存)
for num in fibonacci(1000000):
if num > 1000:
break
# 上下文管理器
from contextlib import contextmanager
@contextmanager
def managed_resource(name):
print(f"Acquiring {name}")
resource = {"name": name}
try:
yield resource
finally:
print(f"Releasing {name}")
with managed_resource("database") as db:
print(f"Using {db['name']}")
实际应用场景
- 装饰器:Flask/FastAPI 路由注册、权限校验、重试机制
- 生成器:大数据流式处理、无限序列、协程基础
- 上下文管理器:数据库连接、文件操作、锁管理
- 数据处理:pandas、numpy 的底层迭代器
3.2 异步编程
概念解释
Python 3.5 引入 async/await 语法,3.7 完善了 asyncio 标准库,使 Python 具备了现代异步编程能力。异步编程通过事件循环和协程实现高并发,特别适合 I/O 密集型场景。
核心要点
- 事件循环(Event Loop):调度和执行协程的核心
- 协程(Coroutine):使用
async def定义的异步函数 await:暂停当前协程,等待异步操作完成asyncio.gather:并发执行多个协程- 异步上下文管理器:
async with - 第三方库:
aiohttp(HTTP)、aiomysql(数据库)
代码示例
import asyncio
import aiohttp
async def fetch_url(session, url):
async with session.get(url) as response:
return await response.text()
async def fetch_all(urls):
async with aiohttp.ClientSession() as session:
tasks = [fetch_url(session, url) for url in urls]
results = await asyncio.gather(*tasks)
return results
# 运行异步代码
async def main():
urls = ["http://example.com/1", "http://example.com/2"]
results = await fetch_all(urls)
print(f"Fetched {len(results)} pages")
asyncio.run(main())
# 异步上下文管理器
class AsyncDatabase:
async def __aenter__(self):
self.connection = await create_connection()
return self.connection
async def __aexit__(self, exc_type, exc_val, exc_tb):
await self.connection.close()
async def use_database():
async with AsyncDatabase() as db:
await db.execute("SELECT * FROM users")
实际应用场景
- Web 框架:FastAPI、aiohttp 构建高性能异步服务
- 爬虫:并发抓取多个网页
- 微服务:异步调用外部 API、消息队列
- 实时应用:WebSocket 长连接管理
3.3 类型注解
概念解释
Python 3.5 引入类型注解(Type Hints),PEP 484 奠定了类型提示的基础。类型注解不会在运行时强制执行,但可以被静态类型检查器(如 mypy、pyright)用于编译时检查,提高代码质量和 IDE 支持。
核心要点
- 基础类型:
int、str、float、bool、bytes - 容器类型:
list[int]、dict[str, int](Python 3.9+ 简化语法) - 可选类型:
Optional[str]等价于str | None - 联合类型:
int | str(Python 3.10+) - 泛型:
TypeVar、Generic[T] - 运行时检查:
pydantic库实现运行时验证
代码示例
from typing import Optional, List, Dict, TypeVar, Generic
# 基础类型注解
def greet(name: str) -> str:
return f"Hello, {name}"
# 可选类型和容器
def find_user(user_id: int) -> Optional[Dict[str, str]]:
# 可能返回 None
return {"name": "Alice"} if user_id == 1 else None
# 泛型(Python 3.12+ 简化语法)
T = TypeVar('T')
class Stack(Generic[T]):
def __init__(self) -> None:
self.items: list[T] = []
def push(self, item: T) -> None:
self.items.append(item)
def pop(self) -> T:
return self.items.pop()
# Python 3.10+ 联合类型
def process(value: int | str) -> str:
return str(value)
# Pydantic 运行时验证
from pydantic import BaseModel, EmailStr
class User(BaseModel):
name: str
email: EmailStr
age: int
user = User(name="Alice", email="alice@example.com", age=25)
实际应用场景
- 大型项目:类型检查减少运行时错误
- API 开发:FastAPI 自动解析和验证请求数据
- 库开发:提供类型存根文件(
.pyi)改善用户体验 - 重构:类型注解帮助理解代码契约
四、跨语言对比
核心特性对比
| 特性 | C# | Java | Python |
|---|---|---|---|
| 类型系统 | 静态强类型,运行时保留泛型 | 静态强类型,泛型类型擦除 | 动态类型,可选类型注解 |
| 异步编程 | async/await(基于 Task) | CompletableFuture、Virtual Threads | asyncio(基于事件循环) |
| 内存管理 | GC(分代,可配置模式) | GC(G1/ZGC/Shenandoah) | 引用计数 + GC(循环引用) |
| 并发模型 | Task Parallel Library、async/await | 线程池、Virtual Threads(21+) | asyncio、multiprocessing |
| 依赖管理 | NuGet | Maven/Gradle | pip/Poetry/uv |
| 编译方式 | JIT(可 AOT) | JIT(JVM) | 解释执行(可编译为字节码) |
| 元编程 | 反射、表达式树、源生成器 | 反射、注解处理、字节码增强 | 装饰器、元类、动态属性 |
| 错误处理 | try-catch-finally、异常过滤 | try-catch-finally、受检异常 | try-except-finally、异常链 |
异步编程模式对比
// C# async/await
public async Task<string> GetDataAsync()
{
var result = await httpClient.GetStringAsync(url);
return Process(result);
}
// Java CompletableFuture
public CompletableFuture<String> getData() {
return CompletableFuture.supplyAsync(() -> httpClient.get(url))
.thenApply(this::process);
}
// Java 21+ Virtual Threads
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
executor.submit(() -> blockingOperation());
}
# Python asyncio
async def get_data():
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return process(await response.text())
性能特征对比
| 场景 | C# (.NET 8) | Java 21 | Python 3.12 |
|---|---|---|---|
| 启动时间 | 中等(Native AOT 快) | 中等(CDS 优化) | 快 |
| 吞吐量 | 高 | 高 | 中 |
| 内存占用 | 中 | 中高 | 低 |
| I/O 密集型 | 优秀 | 优秀 | 良好 |
| CPU 密集型 | 优秀 | 优秀 | 受 GIL 限制 |
技术选型建议
- 选择 C#/.NET:企业级应用、游戏开发(Unity)、Windows 生态、需要高性能和现代语言特性
- 选择 Java:大型企业系统、Android 开发、已有 Java 团队、需要成熟生态和长期支持
- 选择 Python:数据科学、机器学习、快速原型、脚本自动化、AI/LLM 应用开发
五、学习资源推荐
书籍推荐
C#/.NET
- 《C# 12 and .NET 8 – Modern Cross-Platform Development》- Mark J. Price(全面覆盖最新特性)
- 《CLR via C#》- Jeffrey Richter(深入理解 CLR 运行时)
- 《C# in Depth》- Jon Skeet(语言特性演进和最佳实践)
Java
- 《Effective Java》- Joshua Bloch(Java 编程最佳实践,必读)
- 《深入理解 Java 虚拟机》- 周志明(JVM 原理与调优,中文经典)
- 《Java Concurrency in Practice》- Brian Goetz(并发编程权威指南)
Python
- 《Fluent Python》- Luciano Ramalho(Pythonic 编程风格)
- 《Python Cookbook》- David Beazley(实用技巧和模式)
- 《High Performance Python》- Micha Gorelick(性能优化指南)
在线课程
- Microsoft Learn:https://learn.microsoft.com/dotnet/(.NET 官方学习路径)
- Oracle Java Tutorials:https://docs.oracle.com/javase/tutorial/(Java 官方教程)
- Real Python:https://realpython.com/(Python 高质量教程)
- Coursera:各语言的系统性课程
官方文档
- .NET 文档:https://learn.microsoft.com/dotnet/
- Java 文档:https://docs.oracle.com/en/java/
- Python 文档:https://docs.python.org/3/
实践项目建议
- 入门阶段:完成官方教程中的示例项目,掌握基本语法和标准库
- 进阶阶段:构建一个完整的 Web API,集成数据库和认证
- 精通阶段:阅读开源项目源码,参与社区贡献,进行性能调优实践