- 博客(66)
- 资源 (2)
- 收藏
- 关注
原创 JAVA面试-JVM篇 08-对象在内存中的布局包含哪些部分
对象由对象头 + 实例数据 + 对齐填充三部分组成Mark Word在不同锁状态下复用存储空间,是锁升级和 GC 的基础JVM 自动字段重排序优化内存布局,减少填充浪费开启压缩指针(-XX:+UseCompressedOops)可显著减少对象头中类型指针和引用类型字段的大小。
2026-06-21 18:30:00
219
原创 JAVA面试-JVM篇 07-对象在JVM中的创建过程是怎样的
对象创建五步中,内存分配和并发安全是面试追问的高频点。分配方式取决于 GC 收集器是否带压缩整理功能(指针碰撞 vs 空闲列表)并发安全通过 TLAB(首选)和 CAS(兜底)两种手段保证对象头是理解锁升级、GC 年龄的基础,Mark Word 在不同锁状态下复用存储空间。
2026-06-20 18:30:00
208
原创 JAVA面试-JVM篇 06-字符串常量池为什么要移到堆中
字符串常量池在 JDK7 之前存放在中。很多人误以为这是 JDK8 元空间替换永久代时才发生的,实际上是 JDK7 先移走了字符串常量池,JDK8 才彻底移除永久代。本文讲清移动的原因和好处。
2026-06-19 19:00:00
213
原创 JAVA面试-JVM篇 05-元空间与永久代的区别为什么JDK8要替换永久代
方法区在 JDK7 之前由**永久代(PermGen)**实现,JDK8 后被**元空间(Metaspace)**取代。两者本质都是方法区,但最大的区别在于内存位置:永久代在 JVM 堆内,元空间在本地内存。本文讲清为什么 JDK8 要替换永久代。
2026-06-18 19:30:00
205
原创 JAVA面试-JVM篇 04-虚拟机栈会发生哪些异常
虚拟机栈(Java Virtual Machine Stack)是线程私有的内存区域,每个方法调用对应一个栈帧入栈,方法结束则出栈。本文用流程图和表格拆解栈的内部结构,并说清 `StackOverflowError` 和 `OutOfMemoryError` 的发生场景。
2026-06-17 18:15:00
188
原创 JAVA面试-JVM篇 03-JVM运行时数据区哪些是线程私有的哪些是共享的
JVM运行时数据区是Java程序运行时的内存划分方案,理解哪些区域是线程私有的、哪些是共享的,是JVM调优和故障排查的基础。本文用一张总图、两张分类流程图和一张对比表格,帮你一次性理清。
2026-06-16 18:00:00
243
原创 JAVA面试-JVM篇 02-G1垃圾收集器的工作原理是什么与CMS的区别
G1(Garbage-First)是JDK9默认的垃圾收集器,全面取代CMS。它打破了传统分代收集的物理限制,采用**Region分区设计**,兼顾吞吐量与低延迟,支持用户设置最大停顿时间。本文讲解G1核心工作原理,并通过表格对比其与CMS的关键差异。
2026-06-15 20:30:00
311
原创 JAVA面试-JVM篇 01-CMS垃圾收集器的工作流程是什么有什么优缺点
CMS(Concurrent Mark Sweep)是JDK1.5推出的**并发低延迟老年代垃圾收集器**,核心目标是最小化GC全局停顿(STW)时间。它采用标记-清除算法,将大部分耗时操作与用户线程并发执行,仅保留必要的短暂停顿,是互联网、电商等对响应时间敏感场景的里程碑式设计。
2026-06-09 19:00:00
226
原创 JAVA面试-并发篇 10-为什么不推荐使用 Executors 创建线程池
Executors 是 JDK 提供的线程池工具类,虽然使用简单,但**生产环境严禁使用**。其封装的线程池存在**无界队列、无界线程、参数不可控**三大致命隐患,极易引发 OOM 崩溃和服务雪崩。本文结合具体场景说明隐患原因,并详解 ThreadPoolExecutor 核心参数与执行逻辑。
2026-06-08 18:45:00
357
原创 JAVA面试-并发篇 09-LockSupport 和 waitnotify 的区别
`wait/notify`是Object类的原生线程通信方法,依赖`synchronized`同步锁;`LockSupport`是JUC提供的线程阻塞唤醒工具,是AQS的核心底层组件。本文通过对比表、流程图和**完整可运行代码**,清晰讲解两者的使用差异与核心特性。
2026-06-08 18:30:00
254
原创 JAVA面试-并发篇 08-ConcurrentHashMap 线程安全原理与JDK版本区别
ConcurrentHashMap是Java并发包中高效的线程安全哈希表,解决了HashMap线程不安全、Hashtable全表锁性能低下的问题。它通过细粒度锁机制保证线程安全,JDK7与JDK8的底层实现差异显著,本文通俗讲解其安全原理和两个版本的核心区别。
2026-06-08 18:15:00
504
原创 JAVA面试-并发篇 07-CAS底层原理是什么有什么缺陷如何解决
CAS(Compare And Swap,比较并交换)是Java无锁并发编程的核心原子操作,基于CPU底层原语实现,无需加锁即可保证线程安全,是JUC原子类、AQS同步器的核心基石。本文通俗讲解CAS的底层执行原理、三大核心缺陷,以及对应的解决方案。
2026-06-05 20:45:00
205
原创 JAVA面试-并发篇 05-并发包AQS队列实现原理是什么
AQS(AbstractQueuedSynchronizer)是Java.util.concurrent包的核心基石,为ReentrantLock、CountDownLatch、Semaphore等几乎所有并发工具提供了统一的同步实现框架。其核心思想是:用一个volatile修饰的int型state变量表示同步状态,配合一个FIFO的**CLH(Craig, Landin, and Hagersten)**双向等待队列,实现线程的排队、阻塞与唤醒机制,解决了同步器实现的重复劳动问题。
2026-06-04 18:45:00
294
原创 JAVA面试-并发篇 06-ReentrantLock如何实现公平锁的以及可重入吗
ReentrantLock是JUC并发包下基于AQS实现的独占锁,**支持可重入**,并提供公平锁、非公平锁两种模式。本文讲解可重入实现原理,明确公平锁获取失败后的入队规则,清晰对比两种锁的核心差异。
2026-06-04 18:45:00
251
原创 JAVA面试-并发篇 04-synchronized和ReentrantLock 的区别是什么
摘要: Java中synchronized和ReentrantLock是两种主流锁机制,核心区别如下: 实现与特性:synchronized是JVM内置关键字,自动加锁/释放,简单但功能有限;ReentrantLock是JDK类,需手动管理锁,支持公平锁、中断、超时等高级功能。 性能与场景:低竞争时synchronized更优(JDK1.6+优化后),高竞争时ReentrantLock更稳定;公平锁会降低吞吐量,默认非公平锁性能更高。 选型建议:简单场景优先用synchronized(安全易用),需高级功能
2026-06-02 19:00:00
261
原创 JAVA面试-并发篇 02-synchronized 锁可以重入吗
摘要: Java的synchronized锁具备可重入机制,允许同一线程多次获取同一把锁而避免死锁。其核心原理是通过计数器实现:加锁时计数器+1,释放时-1,归零后锁才真正释放。重量级锁通过Monitor的owner和count字段实现;轻量级锁则依赖线程栈中的锁记录链表。若无可重入,递归调用同步方法会导致线程自我阻塞。典型误区包括混淆不同线程的重入、静态/实例锁混用等。可重入机制对性能影响极小,但需严格匹配加锁/释放次数,确保线程安全。
2026-06-01 18:15:00
251
原创 JAVA面试-并发篇 03-使用synchronized doublecheck实现单例有什么坑
DCL单例模式最常见的错误是忘记使用volatile关键字,导致指令重排序引发的空指针异常。完整流程是:1) 分配内存→2) 初始化→3) 引用赋值,但JVM可能重排序为1→3→2。当线程A执行到步骤3时,instance已非null但对象未初始化,此时线程B直接获取这个半成品对象就会出错。正确写法必须用volatile修饰instance变量,禁止指令重排序。这是90%开发者容易忽略的关键点,不加volatile的DCL单例在多线程环境下存在严重隐患。
2026-06-01 18:15:00
276
原创 JAVA面试-并发篇 01-synchronized 锁类型有哪些以及如何转化
摘要:Java synchronized锁升级遵循无锁→偏向锁→轻量级锁→重量级锁的单向路径,由线程竞争强度触发。偏向锁适合单线程场景,轻量级锁通过CAS处理交替访问,重量级锁应对激烈竞争。批量重偏向(20次撤销)和批量撤销(40次撤销)优化锁机制。常见误区包括锁可降级(实际仅GC时可能)和轻量级锁绝对高效(竞争激烈时性能反降)。锁转化通过Mark Word状态变化实现,重量级锁会引发线程阻塞。
2026-05-29 10:21:18
383
原创 土豆烧鸡腿
土豆烧鸡腿准备半个大蒜 一片姜鸡腿 飞水油 蒜 姜 辣椒 鸡腿 炒土豆 炒盐 豆瓣酱炒 + 醋老抽 上色 炒【可选】加开水 一个八角 煮 起锅
2016-09-25 10:12:01
487
原创 JAVA AIO例子
AioServer.javapackage aio;import nio.NioServerHandle;public class AioServer { public static void main(String[] args) { new AioServerHandle().start(); try {
2016-07-17 09:23:49
1462
原创 JAVA NIO例子
NioServer.javapackage nio;import bio.BioServerHandle;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class NioServer { public static void main(Stri
2016-07-17 09:21:00
540
原创 JAVA BIO例子
关键点:out.flush(); // 强制刷新BioServer.java:package bio;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class BioServer { public static void main(
2016-07-17 09:15:47
2291
原创 松式爆炒土豆丝
松式爆炒土豆丝1、切丝2、水泡 ,换水(来个2~3次)3、放油烧7成熟,加盐,加大蒜 ,加肉丝4、加土豆丝,一直大火,不停翻炒;中途放点水5、起锅
2016-07-15 15:52:46
661
原创 JAVA BIO、NIO、AIO理解
BIO NIO AIO 是三种网络Socket编程模式 三者区别见下表 名词解释Jdk支持版本性能编程复杂度设计BIO阻塞IO>=jdk1.0差简单端对端NIO非阻塞IO>=jdk1.4
2016-07-15 15:43:49
496
原创 TCP粘包、拆包
TCP粘包、拆包 客户端发服务端发送了两个数据包a和b粘包:服务端一次性接收到了a和b拆包:服务端第一次接收了a和b的一部分,第二次接收到了b的剩余部分 粘包、拆包原因:1、应用程序写入的字节大小 >Socket发送缓冲区大小2、TCP分段:TCP data部分的大小 >MSS (Max Segment Size)3、IP分片:以太网帧的payload(数据
2016-07-15 13:46:13
435
原创 JAVA Netty例子
类图(源代码见下方):netty jar:https://bintray.com/netty/downloads/netty/5.0.0.Alpha2NettyServer.javapackage netty;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;imp
2016-07-13 21:21:07
1209
原创 剁椒鱼头
材料:鱼头一个大蒜大蒜、生姜末红肉椒小米椒二两豆芽( 可选)1、划鱼摸盐 一个鱼头两勺 到处都要,包括里外2、野山椒两包 水倒入 切碎3、野山椒末、红肉椒末、一个大蒜 蒜末、生姜末 搅拌4、撒在鱼头上面 腮里面也要5、撒老干妈6、蒸 30分钟左右(看火了)
2016-06-28 17:44:32
588
1
原创 红烧毛豆
毛豆一斤蒜蓉 红辣椒1、毛豆两头剪2、水烧开,一勺盐 煮3分钟左右3、烧油开 ,加 蒜蓉 红辣椒4、放入毛豆炒,加一勺盐 胡椒 味精,起锅5、放生抽、陈醋 搅拌
2016-06-28 17:39:41
796
原创 如何制作牛肉虾
食材:牛肉2斤基围虾1斤四川印象 大红袍1袋配菜:胡萝卜、黄瓜、土豆制作过程:1、水烧沸腾,牛肉丢进去,逼出血水2、拿出牛肉,洗锅,放油,油烧开后,将牛肉炒2~3分钟3、加入开水,至沸腾;再加入大红袍,最小火炖1小时4、大火,加入开水,至沸腾;放配菜和基围虾 ,5分钟5、起锅,放到火锅盆中
2016-03-20 13:42:43
643
原创 订单水平拆库项目
1、调研 数据分析,接口分析 where条件分析2、方案确定, 什么维度拆分,多少台机器3、方案实施 1) id生成策略2)性能测试 TCP Copy引流测试(时间问题)3)数据同步工具 - 字符集utfmb4 占4个字节的生僻字问题4)商家维度分页性能问题4、上线方案 1)分布上线,先上读接口2)整体上线 - 上线清单 ,回滚预案3
2016-03-19 14:28:59
432
原创 Zookeeper选举过程
假设有5台机器znode状态:looking、following、leading 、observing(提高读取效率)初始化:1、服务器d为1启动,广播,没有应答,此时处于looking状态2、服务器id为2启动,与1交换,胜出;由于选举没有超过半数,此时处于looking状态3、服务器id为3启动根据,前面的理论,被选举为leader4、服务器id为4、5
2016-03-19 14:16:30
524
原创 spring分布式事务应用
开源分布式事务处理框架:jotm atomikosjotm配置:spring声明一个jotm事务管理器,数据源配置jotm底层是通过savepoint实现,需要看数据库本身是否支持XA分布式事务
2016-03-19 11:36:44
300
原创 SQL优化
大的角度减少调用 : 批量+缓存主备库拆分小的角度1、索引group by ,order by 加索引字段别用函数、别运算default值 null不走索引like ‘%ss’不要*2、update不要update全字段3、事务避免大事务4、大数据先分页、再join少用临时表少用blo
2016-03-16 14:42:06
333
原创 Mysql 存储引擎有哪些
innodb oltpmyisam insert select专用memory 内存ndb 分布式archive 可压缩索引区别:btree索引hash索引聚集索引消耗:内存消耗磁盘消耗事务控制:事务数据、索引缓存批量插入更新mvcc
2016-03-16 11:26:23
423
原创 系统变慢怎么办
1、数据库 【慢sql优化、数据迁移、配置提升、水平垂直拆分】2、应用服务【缓存、jvm、代码层面等】3、前端web【js css合并 、cdn、http合并】4、负载均衡5、网络设置6、机器配置7、木马 病毒
2016-03-15 15:57:53
294
原创 后台系统拆分
做好的三件事情1、领域划分:粒度【会员营销 or 营销】,分层【基础服务、应用服务、UI】2、前段框架替换 sitemesh -> iframe + ace ,尽量对原来页面影响范围小3、sso单点登陆,jsonp跨域访问 ;编写sso组件,通过http+sign保证安全性
2016-03-15 15:44:46
1235
原创 hessian总结
hessian:远程调用框架,基于http性能:socket > netty > hessian >= dubbo > spring mvc序列化:hessianinput hessianoutput,性能优于java序列化工具,去掉类一些不必要序列化的东西,复杂类可能有些问题
2016-03-15 11:27:10
381
SpringCloudDemo.rar
2020-01-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅