高级面试

本文详细介绍了Java性能调优、线程池原理、容器原理、RESTful规范及其应用,通过实例分析解决高并发场景下的性能问题,包括内存阻塞、GC优化、数据库瓶颈定位与解决等核心技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.java 探针

jdk1.5以后引入了javaAgent技术,javaAgent是运行方法之前的拦截器。我们利用javaAgent和ASM字节码技术,在JVM加载class二进制文件的时候,将方法耗时及内部调用情况放入处理器,处理器利用栈先进后出的特点对方法调用先后顺序做处理,当一个请求处理结束后,将耗时方法轨迹和入参map输出到文件中,然后根据map中相应参数或耗时方法轨迹中的关键代码区分出我们要抓取的耗时业务。最后将相应耗时轨迹文件取下来,转化为xml格式并进行解析

2.线程池自己实现

(1)线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。

(2)可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。

corePoolSize:线程池核心线程数量

maximumPoolSize:线程池最大线程数量

keepAliverTime:当活跃线程数大于核心线程数时,空闲的多余线程最大存活时间

unit:存活时间的单位

workQueue:存放任务的队列

handler:超出线程范围和队列容量的任务的处理程序

运行原理:

      刚开始都是在创建新的线程,达到核心线程数量5个后,新的任务进来后不再创建新的线程,而是将任务加入工作队列,任务队列到达上线5个后,新的任务又会创建新的普通线程,直到达到线程池最大的线程数量10个,后面的任务则根据配置的饱和策略来处理。我们这里没有具体配置,使用的是默认的配置AbortPolicy:直接抛出异常。

3.容器的原理与底层

容器:Collection收集,集合。本身也是一个对象,只不过它可以容纳其他的对象。

 

4.RESTFUL 说明

按照HTTP协议的规定:

GET方法是安全且幂等的

POST方法是既不安全也不幂等的(可以用来作为所有写操作的通配方法),

PUT、DELETE方法都是不安全但幂等的。

 

4.说说项目中遇到的印象最深的一个问题? 我想一下啊,我说一下一次性能调优的问题;我们系统在有一个阶段,每天高峰期的时候都会比较卡,都通过重启解决;我解决这个问题后系统很久都不需要重启了; 首先分析是否是内存阻塞或者full GC导致应用卡死,于是我打开了full GC日志,并使用jstack dump线程下来,我就发现没有进行full GC,很多线程在wait;于是我 就怀疑是数据库问题,我就联系了运维,让他帮忙导出数据库的报告;导出来之后我就发现有一个sql的磁盘io占用90%多;于是我就看了下该SQL执行计划;发现当前 执行计划有索引没命中,于是我就重新做表分析,让数据库决定一个最佳执行计划,问题解决了;于是我就将遇到的这次问题分享给了相关同事。

转载于:https://my.oschina.net/u/2322635/blog/394921

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值