avatar
文章
377
标签
447
分类
12
首页
留言板
知识库
归档
标签
分类
关于
Dai Wei
搜索
首页
留言板
知识库
归档
标签
分类
关于

Dai Wei

类加载器详解(重点)
发表于2021-08-18|Java
双亲委派类加载请求先委派父加载器,父无法加载才由子尝试。保证 java.lang.String 等核心类统一,防止用户伪造核心 API。 三层加载器Bootstrap(C++)→ Platform(Extension)→ Application。线程上下文类加载器(TCCL)常用于 SPI,如 JDBC 驱动加载。 何时破坏委派Tomcat 隔离 Web 应用、OSGi 模块化、热部署需要平行或自定义委派。实现 loadClass 重写 findClass 加载字节码即可,注意 defineClass 安全边界。 排查ClassNotFoundException 是加载阶段找不到;NoClassDefFoundError 是初始化或链接后运行时缺失,栈含义不同。 课堂外的思考学习「类加载器详解(重点)」时,我把自己放在线上值班的情境里:如果告警与这一主题相关,我能否在较短时间内建立假设并用数据验证?这种提问方式逼迫我从「看过」变成「讲得清楚、做得到」,也避免笔记沦为标题摘抄。 与同事的讨论方式我会用白板画出状态机、内存布局或调用链,请同事挑错。若被追问「更高并发或更老 JDK...
类加载过程详解
发表于2021-08-08|Java
五阶段加载:读字节流生成 Class 对象。验证:文件/format/字节码/符号引用合法性。准备:静态变量零值分配。解析:符号引用转直接引用(可延迟)。初始化:执行 clinit。 初始化时机new、反射、子类触发父类、主类、MethodHandle 等。接口 default 方法有特例。主动引用才初始化,被动使用父类静态字段不会初始化子类。 例子123class Parent { static { System.out.println("P"); } }class Child extends Parent { static { System.out.println("C"); } }// 仅 Child.staticField 访问顺序:P → C 理解顺序有助于解释静态块死锁等诡异问题。 课堂外的思考学习「类加载过程详解」时,我把自己放在线上值班的情境里:如果告警与这一主题相关,我能否在较短时间内建立假设并用数据验证?这...
类文件结构详解
发表于2021-07-30|Java
文件骨架魔数 CAFEBABE → 版本号 → 常量池(Utf8、Class、NameAndType 等)→ 访问标志 → 类/父类/接口索引 → 字段表 → 方法表 → 属性表(Code、LineNumberTable)。 为什么学结构读懂字节码才能理解反射、动态代理、Lambda 生成类;排查 NoClassDefFoundError 时也常要确认常量池引用是否有效。 动手1javap -v Hello.class | head -40 对照输出找 constant_pool 里的 #1=#2+#3 形式,建立「符号引用 vs 直接引用」的直觉。 课堂外的思考学习「类文件结构详解」时,我把自己放在线上值班的情境里:如果告警与这一主题相关,我能否在较短时间内建立假设并用数据验证?这种提问方式逼迫我从「看过」变成「讲得清楚、做得到」,也避免笔记沦为标题摘抄。 与同事的讨论方式我会用白板画出状态机、内存布局或调用链,请同事挑错。若被追问「更高并发或更老 JDK 版本会怎样」,答不上来就回到文首原文链接查 primary source,而不是凭记忆...
JVM 专题:内存区域、类加载、垃圾回收、参数调优与线上排查
发表于2021-07-20|Java
模块串联先建立运行时数据区全景,再看 class 文件与类加载双亲委派;然后深入 GC 算法与收集器,配合常用 JVM 参数做压测;最后用 jcmd、MAT、Arthas 走一遍线上排查流程。 工具箱jps/jstat/jmap/jstack 是 JDK 自带;VisualVM、GCeasy 看 GC 日志;heap dump 用 MAT 找泄漏 dominator tree。 实践建议本地用 -Xlog:gc* 打开统一日志(JDK9+),调一次 Young GC 频率与 Full GC 触发条件,比背收集器名字更有体感。 课堂外的思考学习「JVM 专题:内存区域、类加载、垃圾回收、参数调优与线上排查」时,我把自己放在线上值班的情境里:如果告警与这一主题相关,我能否在较短时间内建立假设并用数据验证?这种提问方式逼迫我从「看过」变成「讲得清楚、做得到」,也避免笔记沦为标题摘抄。 与同事的讨论方式我会用白板画出状态机、内存布局或调用链,请同事挑错。若被追问「更高并发或更老 JDK 版本会怎样」,答不上来就回到文首原文链接查 primary sour...
最重要的JVM参数总结
发表于2021-07-11|Java
堆与栈-Xms/-Xmx 堆初始/最大; -Xss 线程栈。生产常设 Xms=Xmx 稳定 GC。 元空间-XX:MetaspaceSize/-XX:MaxMetaspaceSize 限制类元数据,防止动态代理/generate 类撑爆。 GC 日志(JDK9+)1-Xlog:gc*,gc+age=trace:file=gc.log:time,uptime,level,tags OOM 行动-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heap.hprof 保留案发现场;配合 Error 文件 -XX:ErrorFile。 调参先测量后修改,避免迷信网上模板。 课堂外的思考学习「最重要的JVM参数总结」时,我把自己放在线上值班的情境里:如果告警与这一主题相关,我能否在较短时间内建立假设并用数据验证?这种提问方式逼迫我从「看过」变成「讲得清楚、做得到」,也避免笔记沦为标题摘抄。 与同事的讨论方式我会用白板画出状态机、内存布局或调用链,请...
大白话带你认识 JVM
发表于2021-07-01|Java
JVM 是什么Java 源码编译成字节码,JVM 负责解释/ JIT 执行,并提供自动 GC、线程调度、安全沙箱。一次编写到处运行,靠的是针对不同 OS 的 JVM 实现。 与 JRE/JDKJDK = JRE + 开发工具;JRE = JVM + 核心类库。现在 Oracle 发行版趋向整包 JDK,但概念仍常用。 执行路径javac → .class → ClassLoader 加载 → 字节码验证 → 解释执行,热点代码 JIT 编译成本地代码。理解这条链,后面学内存与 GC 才有落脚点。 类比JVM 像操作系统里的「小操作系统」,管理 Java 世界的内存与线程。 课堂外的思考学习「大白话带你认识 JVM」时,我把自己放在线上值班的情境里:如果告警与这一主题相关,我能否在较短时间内建立假设并用数据验证?这种提问方式逼迫我从「看过」变成「讲得清楚、做得到」,也避免笔记沦为标题摘抄。 与同事的讨论方式我会用白板画出状态机、内存布局或调用链,请同事挑错。若被追问「更高并发或更老 JDK 版本会怎样」,答不上来就回到文首原文链接查 pr...
MongoDB常见面试题总结(下)
发表于2021-06-22|数据库
下半部分面试聚焦分片键设计、聚合性能与安全模型。线上问题多出在「键选错」和「管道全表扫」。 分片键设计原则选高基数、低频率变更、与查询模式匹配的字段。复合键常把范围查询字段放前。避免单调递增键导致写热点;必要时用 hashed shard key。 块迁移与平衡Balancer 在 shard 间迁移 chunk;迁移期间有短暂性能波动。jumbo chunk 无法迁移需人工拆分或改键。 索引策略1234567// 覆盖常见列表查询db.logs.createIndex({ appId: 1, ts: -1 })// 聚合前尽量 $match 前置并用索引db.logs.aggregate([ { $match: { appId: "a", ts: { $gte: ISODate("2026-01-01") } } }, { $group: { _id: "$level", count: { $sum: ...
NoSQL基础常见面试题总结
发表于2021-06-12|数据库
NoSQL 不是「不要 SQL」,而是为特定数据模型与扩展模式做了取舍。理解 trade-off 才能正确选型。 NoSQL 解决什么问题当数据量大、结构多变、访问模式清晰且需要横向扩展时,键值、文档、宽列、图四类 NoSQL 各有优势。它们并非不能表达关系,只是存储与查询方式不同。 与关系型的关键差异 维度 关系型 NoSQL 模型 固定表结构 灵活 schema 扩展 垂直+分库分表 原生分片横向扩展 事务 成熟 ACID 多数最终一致,部分有限事务 查询 SQL 标准化 API/查询语言因产品而异 四类怎么选 键值(Redis):缓存、会话、计数、分布式锁。 文档(MongoDB):内容、配置、嵌套 JSON 业务对象。 宽列(HBase/Cassandra):时序、海量稀疏列、写多读少。 图(Neo4j):社交关系、推荐、风控关联分析。 实践建议先用关系型把业务跑通,出现明确瓶颈再引入 NoSQL。跨存储的一致性用 Outbox、CDC 或业务补偿,不要幻想「双写一定一致」。 CAP 与 BASE 怎么落地分布式环境下 ...
MongoDB常见面试题总结(上)
发表于2021-06-03|数据库
MongoDB 面试上半部分常考架构分层、WiredTiger 与副本集行为。把「写入如何持久、故障如何切换」讲清楚是关键。 架构分层驱动 → mongos(分片路由)→ shard/replica set → 存储引擎。单机开发用 standalone;生产至少三节点副本集。 WiredTiger 要点默认存储引擎,支持文档级并发控制、压缩与 checkpoint。缓存(Cache)命中决定读性能;脏页刷盘与 journal 保证崩溃恢复。 副本集选举心跳检测主节点;不可达触发选举,多数派选新主。priority、votes、arbiterOnly 影响角色。写操作默认要求主确认,可调 w: majority 防 rollback 窗口丢写。 oplog 作用固定大小 capped collection,记录幂等操作,供从节点重放与变更流(Change Streams)消费。 实践建议三节点跨可用区部署;备份用 mongodump+ oplog 或云快照;升级前读 release notes 看存储格式变化。 存储与 journal写操作先写 journal 再 ...
MongoDB 专题:文档模型、索引、副本集、分片、事务与常见面试题
发表于2021-05-24|数据库
MongoDB 以 BSON 文档为中心,适合 schema 演进快的业务。学习时要把「灵活」与「可控」平衡好。 文档模型要点集合里存 JSON/BSON 文档,字段可嵌套数组与对象。同一集合内文档结构可以不同,但生产仍建议约定 schema 版本,避免字段爆炸。 核心机制 索引:单字段、复合、多键(数组)、文本、地理空间;注意 ES 与 Mongo 文本索引差异。 副本集:一主多从+仲裁,选举 failover;写关注 writeConcern,读关注 readPreference。 分片:按 shard key 水平切分;选好键避免热点与 jumbo chunk。 事务:4.0 副本集、4.2 分片支持多文档事务,但有性能与大小限制。 实践建议12db.orders.createIndex({ userId: 1, createdAt: -1 })db.orders.find({ userId: 123 }).sort({ createdAt: -1 }).limit(20) 大文档拆子文档;高频更...
1…181920…38
avatar
Dai Wei
软件开发者,记录技术探索与实践
文章
377
标签
447
分类
12
Follow Me
公告
分享软件开发、工程实践与持续学习中的思考。
最新文章
Trae + MiniMax 多场景实战:Redis 故障排查与跨语言重构2026-08-28
Kimi K3 实战:全栈项目、Java 项目改造与 3A 游戏 Demo2026-08-23
测试开发学习路线(2026 最新版):AI 时代如何从测试走向质量工程2026-08-20
IDEA + Qoder 插件多场景实战:接口优化与代码重构2026-08-18
DeepSeek V4 + Claude Code 实战:代码能力深度测评2026-08-14
分类
  • AI 编程28
  • Java103
  • 人工智能39
  • 分布式系统26
  • 学习路线5
  • 开发工具11
  • 数据库42
  • 系统设计26
标签
线程优先级 DBMS 大模型 Java基础 命令 Top K 安全 Loop 计算机网络 Raft 贪心 修饰权限 TCC 最终一致性 召回 网络编程三要素 服务调用 分布式理论 知识体系 复杂度 红黑树 Unsafe 面试 Java26 BASE 内存管理 语音 redo log Kimi NoSQL Seata CAS 优化器 RDB 线程通信 面试题 IDE 死锁 ZAB 编排
归档
  • 八月 2026 7
  • 七月 2026 7
  • 六月 2026 6
  • 五月 2026 7
  • 四月 2026 6
  • 三月 2026 4
  • 二月 2026 5
  • 一月 2026 5
网站信息
文章数目 :
377
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2017 - 2026 By Dai Wei框架 Hexo 8.1.2|主题 Butterfly 5.7.0
搜索
数据加载中