jdk1.5之后引入了javaAgent技术,javaAgent是运行方法以前的拦截器。咱们利用javaAgent和ASM字节码技术,在JVM加载class二进制文件的时候,将方法耗时及内部调用状况放入处理器,处理器利用栈先进后出的特色对方法调用前后顺序作处理,当一个请求处理结束后,将耗时方法轨迹和入参map输出到文件中,而后根据map中相应参数或耗时方法轨迹中的关键代码区分出咱们要抓取的耗时业务。最后将相应耗时轨迹文件取下来,转化为xml格式并进行解析java
2.线程池本身实现sql
(1)线程是稀缺资源,使用线程池能够减小建立和销毁线程的次数,每一个工做线程均可以重复使用。数据库
(2)能够根据系统的承受能力,调整线程池中工做线程的数量,防止由于消耗过多内存致使服务器崩溃。安全
corePoolSize:线程池核心线程数量服务器
maximumPoolSize:线程池最大线程数量多线程
keepAliverTime:当活跃线程数大于核心线程数时,空闲的多余线程最大存活时间运维
unit:存活时间的单位性能
workQueue:存听任务的队列spa
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执行计划;发现当前 执行计划有索引没命中,因而我就从新作表分析,让数据库决定一个最佳执行计划,问题解决了;因而我就将遇到的此次问题分享给了相关同事。