一、一条sql执行时间过长,你如何优化,从哪些方面?
1.查看sql是否涉及多表的联表查询或者子查询,如果有的话,看是否能进行业务拆分,相关字段冗余的话合并成临时表
2.涉及链表的查询,是否能进行分表查询,单表查询后的结果进行字段整合
3.如果上述两种方式都不管用的话,非要链表查询的话,那么考虑对相应的查询条件做索引。加快查询速度
4.针对数据量大的表进行历史表分离,(如交易流水表)
5. 数据库的主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,mysql有自带的binlog实现 主从同步
6.explain(执行计划)分析sql语句,查看执行计划,分析索引是否用上,分析扫描行数等等
7.查看mysql执行日志,看看是否有其他方面的问题

二、简单说说线程池的原理和实现
多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。
假设一个服务器完成一项任务所需要的时间为:t1创建线程时间,t2在线程中执行任务的时间,t3销毁线程时间。如果t1+t3远大于t2,则可以采用线程池,以提高服务器的性能。
一个线程池包括以下四个基本组成部分:
1、线程池管理器(thread pool):用于创建并管理线程池,包括创建线程池、销毁线程池、添加新任务;
2、工作线程(poolworker):线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;
3、任务接口(task):每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等;
4、任务队列(taskqueue):用于存放没有处理的任务。提供一些缓冲机制。
线程池技术正是关注如何缩短t1,t3时间的技术,从而提高服务器程序性能的。它把t1,t3分别安排在服务器程序的启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有t1,t3的开销了。
线程池不仅调整t1,t3的时间段,而且它还显著减少了创建线程的数目,看一个例子:
假设一个服务器一天要处理50000个请求,并且每个请求需要一个单独的线程完成。在线程池中,线程一般是固定的,所以产生线程总数不会超过线程池中线程的数目,而如果服务器不利用线程池来处理这些请求则线程总数为50000.一般线程池的大小远小于50000。所以利用线程池的服务器程序不会为了创建50000而在处理请求时浪费时间,从而提高效率。

三、简单说说Spring事务机制
Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛的使用,仅供学习参考。
Spring声明式事务让我们从复杂的事务处理中得到解脱。使得我们再也无需去处理获得连接、关闭连接、事务提交、事务回滚等这些操作。再也无需我们在与事务相关的方法中处理大量的try…catch…finally代码。我们在使用Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为、事务的隔离级别、事务的超时值和事务的只读标志组成。我们在对事务划分时,需要进行事务定义,也就是配置事务的属性。

四、日常项目中,如果你接手,你准备从哪些方面调优?

1.OQL
 2.Eclipse memory analyzer 工具使用。