备战春招-23
【面试题】
- n个有序小文件,合并成有序的一个文件
有点像力扣合并K个升序链表,归并和优先队列(knlogk) - Top K 问题
快排的partition过程O(n) ,或者优先队列也行O(nlogk) - cpu占用高如何排查
- top指令:排查,查看占用cpu高的进程
可看出PID为4060的java进程占用cpu最高 - 查看线程的子进程占用情况,top -p 4606 -H ,将 子进程id 转换成16进制 1228
- 查询具体出现问题的代码位置 jstack 4606|grep 1228 -C 30
- GC如何优化
如果你没有设置内存大小而且出现了大量超时日志,那么你需要在系统中进行GC优化了
- 减少创建对象的总数量。
- 使用StringBuilder或StringBuffer代替String
- 尽可能少的输出日志
- 将转移到老年代的对象数量降到最少(可以通过 调整年轻代的大小 来实现)
- 减少Full GC的时间
和Minor GC相比,Full GC的执行时间长很多。因此,如果执行Full GC的时间过长(超过1s),将导致连接服务的请求超时。如果通过减少老年代的大小来降低Full GC执行时间,会造成OutOfMemoryError或增加Full GC的次数。如果增大老年代大小以期减少Full GC的执行次数,那么执行时间又会增加。因此,需要合理的设置 老年代大小。
GC优化的步骤
监控GC状态
根据分析结果决定是否需要GC优化
设置GC类型和内存大小
分析结果
如果结果满意,将参数应用到所有机器并停止优化