JVM中常用命令集合

记录在工作排查问题时,使用的一些JVM命令:


1.参数:-verbose:class

作用:显示每个类加载的路径,在排查冲突时,可以使用。

举例:

intellij idea运行TC时,报类冲突问题,如果使用debug,加载的类过多,排查困难。可以在run->edit configration  ,JVM 参数中填入该参数,

则运行TC时,可以在控制台显示各个类加载的路径,便于排查问题。


2. jmap-linux特有,观察jvm物理内存的占用情况

-heap  pid :打印pid的堆信息

-histo pid: 打印pid堆中所有的对象

-histo live:pid  打印pid堆中所有存活的对象,可以分析对象数量和所占内存大小


3.jstat-

作用:

1)查看jvm的GC情况;



参考:

https://www.cnblogs.com/anjijiji/p/6239395.html

http://blog.youkuaiyun.com/zlzlei/article/details/46471627



<think> 嗯,用户这次想了解Java小厂面试的常见问题。结合之前提到的几个引用内容,特别是引用[1][2][3][4]中提到的生产者-消费者问题、集合类、基础语法、JVM等知识点,这些都是小厂常考的范畴。 用户可能是个准备面试的应届生或初级开发者,ta特意强调“小厂”,说明需要的是实用性强、不追求过于底层原理的问题集。小厂面试通常更侧重基础编码能力和实际解决问题能力,而不是高并发或分布式这些高阶内容。 从引用[4]提到的“校园到职场”来看,用户可能需要从学生思维转向工程思维的内容。引用[2]中欢聚集团的面试题其实已经偏难了,小厂通常不会问限流算法这种系统设计题,但JVM基础确实是共性考点。 我注意到用户引用的资料里有几个关键线索: 1. 引用[1]提到的生产者-消费者问题,这是经典的多线程考题 2. 引用[3]的集合类面试题,特别是ConcurrentHashMap这类并发集合 3. 引用[4]的代码优化建议,小厂很看重动手能力 需要特别注意避坑:引用[2]提到的雪花算法时间回拨这种特殊问题,小厂基本不问,但阻塞队列(引用[1])和事务注解(引用[2])这类基础必须保留。另外用户历史问题提到过快速排序,算法部分可以保留基础考察点。 整理回答时要突出三点:一是删减大厂专属的高阶题目,二是增加实际编码类问题比重,三是保留必要的JavaEE生态题(如Spring)。像引用[4]提到的“减少对象创建”这种具体优化建议,应该转化为面试题的参考答案。 </think> 根据小厂Java面试特点(侧重基础、实用性和编码能力),结合经典面试题库和引用资料,整理出以下高频问题及准备建议: --- ### 一、**Java基础核心(必考)** 1. **面向对象** - 封装/继承/多态的应用场景 - 接口 vs 抽象类的区别(引用[4]的代码重构思想) - `String`、`StringBuilder`、`StringBuffer`的区别及内存原理 2. **集合框架(重点!)** - `ArrayList`扩容机制(初始容量、扩容倍数) - `HashMap`底层结构(数组+链表/红黑树)、哈希冲突解决、`ConcurrentHashMap`分段锁原理(引用[3]) - `Fail-Fast`(快速失败) vs `Fail-Safe`(安全失败)机制区别(引用[3]) 3. **异常处理** - `Exception` vs `RuntimeException`的区别 - 自定义异常的应用场景 --- ### 二、**多线程与并发(小厂常考基础)** 1. **线程基础** - 线程创建的3种方式(继承`Thread`、实现`Runnable`、`Callable`+`Future`) - `synchronized`关键字优化(锁升级:无锁→偏向锁→轻量锁→重量锁) 2. **经典模型** - **生产者-消费者模式**(必须掌握!引用[1]) ```java // 典型代码结构(使用BlockingQueue) BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10); // 生产者:queue.put(data); // 消费者:queue.take(); ``` - `wait()`/`notify()`实现原理(手写简易版生产者-消费者) 3. **线程池(重点)** - 核心参数(`corePoolSize`, `workQueue`, `RejectedExecutionHandler`) - 场景题:"任务耗时不同时如何配置线程池?" --- ### 三、**JVM与性能调优(基础概念)** 1. **内存模型** - 堆内存分区(新生代Eden/S0/S1 + 老年代) - 对象从创建到GC的流程(栈上分配→TLAB→Eden→Survivor→Old Gen) 2. **垃圾回收** - GC算法:标记清除、复制算法、标记整理(引用[2]) - 常见GC器:`ParNew`(年轻代) + `CMS`(老年代)组合 3. **排查工具** - `jps`(查看进程)、`jstack`(线程堆栈)、`jmap`(内存快照)基础命令用法 --- ### 四、**数据库与JDBC** 1. **SQL基础** - 联合索引生效原则(最左前缀匹配) - `IN` vs `EXISTS`性能对比 2. **事务与锁** - Spring的`@Transactional`失效场景(如非public方法、自调用问题) - 数据库隔离级别(重点:**不可重复读 vs 幻读**) --- ### 五、**框架相关(侧重Spring)** 1. **Spring IOC** - Bean生命周期(实例化→属性注入→初始化→销毁) - 解决循环依赖(三级缓存机制) 2. **Spring AOP** - JDK动态代理 vs CGLIB区别 - `@Aspect`切面执行顺序控制 --- ### 六、**编码能力考察(小厂重点!)** 1. **手写算法** - 链表反转、二分查找、快速排序(引用历史回答) - 字符串处理(如统计字符出现次数) 2. **设计题** - 单例模式的7种实现(重点:双重检查锁+volatile) - 用阻塞队列实现生产者-消费者(引用[1]) --- ### 七、**高频场景题** 1. **线上问题排查** - CPU突然飙高如何定位?(`top→jstack`查找线程栈) - 内存OOM如何分析?(`jmap -dump`导出堆转储) 2. **设计思想** - "如何优化接口响应速度?"(引用[4]的算法优化方向) - "你用过的设计模式在项目中的实际应用?" --- ### 附:小厂面试特点与应对策略 1. **侧重基础深度**:对`HashMap`扩容、GC算法等要求清晰表述底层逻辑; 2. **强调实用性**:多准备项目中的技术选型原因(如为什么用`Redis`而不用`LocalCache`); 3. **代码能力优先**:刷熟《剑指Offer》中等难度题,重点练习白板编码规范; 4. **避坑指南**:遇到不会的问题直接说"暂未深入研究",避免硬编答案。 > 参考资料整合: > - 阻塞队列解决生产者-消费者问题 [^1] > - JVM调优基础与事务失效场景 [^2] > - 并发集合底层安全机制 [^3] > - 代码重构与算法优化方向 [^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值