促销
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
Java 25
所有任务
所有级别
Creating Objects via Reflection
JAVA 25 SELF
等级 62,
课时 3
如何在运行时动态创建对象并管理类:为什么
Class.newInstance()
已经过时,如何正确使用
getConstructor
/
getDeclaredConstructor
和
Constructor.newInstance
,如何通过
Method.invoke
调用方法,以及通过
Field
读取/修改字段。我们将梳理常见异常(如
ReflectiveOperationException
等)、模块系统的限制、实用做法,以及一个用于动态实例化的迷你工具。另外——一张清晰的流程示意图。
反射与依赖注入(Dependency Injection)
JAVA 25 SELF
等级 62,
课时 4
在本讲中我们解析 Java 中反射的实践:如何通过
Class
、
Field
和
Method
读取私有字段(
setAccessible
(
true
))并构建一个简单的序列化器;DI 容器如何通过注解(
@Inject
、
@Autowired
)经由构造器和字段注入依赖;基于
Proxy
与
InvocationHandler
的动态代理如何拦截调用;它们在实践中用于哪些场景(
Spring
、
JUnit
、
Jackson
),以及常见的限制与错误。
日志记录基础:java.util.logging、Log4j、SLF4J
JAVA 25 SELF
等级 63,
课时 0
为什么应用需要日志,以及为什么仅靠
System.out.println
在生产环境并不可靠。我们将讲解
ERROR
/
WARN
/
INFO
/
DEBUG
/
TRACE
这些级别,内置的
java.util.logging
以及配置文件
logging.properties
,并认识
Log4j 2
、
Logback
和日志门面
SLF4J
。我们将与控制台输出进行对比,添加依赖,并讲解配置与使用中的典型错误。
日志格式与日志级别:best practices
JAVA 25 SELF
等级 63,
课时 1
讲解一条好的日志消息由哪些部分组成(时间、级别
INFO
/
ERROR
、logger 名称、文本、堆栈),如何通过 SLF4J/Log4j2 模板正确格式化(用
"{}"
替代字符串拼接),如何记录异常(
logger.error(..., ex)
),何时使用
ERROR
/
WARN
/
INFO
/
DEBUG
/
TRACE
等级,以及最佳实践:不要包含敏感数据、消息清晰易懂、使用关联 ID(
orderId
、
userId
)和合理配置
log4j2.xml
。
多线程与 Web 应用中的日志记录
JAVA 25 SELF
等级 63,
课时 2
如何在多线程与 Web 环境中让日志可靠:现成库的线程安全性(
Logback
、
Log4j 2
、
java.util.logging
)、
MDC
上下文及
requestId
传递、与 Spring 过滤器和错误处理器的集成、与
System.out
的区别、线程池的细节以及微服务中的追踪(traceId,
OpenTelemetry
)。讲解实用示例与常见错误,使用
SLF4J
与
Logger
作为
static
final
字段。
JVM 监控:JMX、VisualVM、Java Flight Recorder
JAVA 25 SELF
等级 63,
课时 3
这节课是关于监控
JVM
的实用指南:如何通过
JMX
和
JConsole
读取标准指标,如何在
VisualVM
中可视化查看内存、线程并对方法进行性能剖析(包括
heap dump
与
thread dump
),以及如何使用
Java Flight Recorder
录制“黑匣子”,并在
JDK Mission Control
中进行分析。我们会展示启动命令(
-XX:StartFlightRecording
),讲解
GC
/线程 的典型分析场景以及常见错误。
性能剖析与代码优化:工具与方法
JAVA 25 SELF
等级 63,
课时 4
讲清性能剖析与监控的区别、哪些指标重要(方法耗时、内存、线程、锁),以及应该使用哪些工具:
VisualVM
、
Java Flight Recorder
,还有商业剖析器。实操分析一个“慢”的计算器,学习查找“热点”、分析
heap dump
,并通过更换算法、减少分配和缓存来消除瓶颈。最后用一张优化流程的可视化图和常见错误解析作结。
JVM 内存结构:栈、堆、PermGen/MetaSpace
JAVA 25 SELF
等级 64,
课时 0
在 JVM 运行过程中,局部变量、对象以及类的元数据分别会进入哪里:我们将拆解线程栈、堆以及 PermGen → MetaSpace 的演进。还会讨论
GC
的工作方式、常见的内存错误(
StackOverflowError
、
OutOfMemoryError
)以及启动参数对其的影响(
-Xss
、
-Xmx
、
-XX:MaxMetaspaceSize
)。附上示意图、mermaid 图表和可运行示例。
垃圾回收器:G1、ZGC、Shenandoah,对比
JAVA 25 SELF
等级 64,
课时 1
在本讲中我们将解析垃圾回收器(
GC
)在
JVM
中如何工作,经典的
Serial
/
Parallel
/
CMS
与现代的
G1
、
ZGC
和
Shenandoah
有何不同,什么是Young Generation与Old Generation,为什么会发生
Stop-the-World
Pause以及如何将其最小化。实践中我们将看到如何通过标志启用不同的 GC(
-XX:+UseG1GC
、
-XX:+UseZGC
、
-XX:+UseShenandoahGC
),如何设置Pause(
-XX:MaxGCPauseMillis
)与堆大小(
-Xms
/
-Xmx
),如何阅读日志(
-Xlog:gc*
)以及如何避免常见错误(例如强制调用
System.gc()
)。
局部变量、内存泄漏、弱引用
JAVA 25 SELF
等级 64,
课时 2
通过本课你将了解局部变量存放在哪里(线程栈)以及它与堆有何不同,为什么在 Java 中尽管有 GC 仍然可能发生内存泄漏,以及如何避免它们。我们将分析真实场景:“常驻”的
static
-集合、未取消订阅的监听器和缓存。认识引用家族:
SoftReference
、
WeakReference
、
PhantomReference
,以及容器
WeakHashMap
。练习修复泄漏,并讨论为什么调用
System.gc()
只是给 JVM 的提示而非命令,以及
OutOfMemoryError
可能带来的后果。
内存分析工具:jmap、jvisualvm
JAVA 25 SELF
等级 64,
课时 3
JVM 内存问题诊断实用指南:使用
jmap
工具生成堆转储(
heap dump
),通过
-heap
和
-histo
查看摘要,在
jvisualvm
中分析应用(标签页
Monitor
、
Heap Dump
、
Threads
、
Profiler
),通过示例定位一次泄漏,并了解
Eclipse MAT
和
jconsole
。最后给出常见错误与建议。
解析内存使用中的常见错误
JAVA 25 SELF
等级 64,
课时 4
动手解析为什么 Java 应用会发生内存“泄漏”并变卡:遗忘的监听器(
addActionListener
/
removeActionListener
)、永不清理的静态集合、未关闭的资源(建议:
try-with-resources
)、持有外部引用的匿名/内部类,以及滥用
System.gc()
。我们将学会阅读 GC 日志(
-Xlog:gc*
、
-XX:+PrintGCDetails
)、选择回收器、基于
WeakHashMap
构建缓存、进行监控(
jvisualvm
、
jconsole
)、分析堆转储,并正确设置
-Xmx
/
-Xms
。最后——真实的泄漏示例及其修复。
显示更多
1
...
27
28
29
30
Please enable JavaScript to continue using this application.