刚刚淘宝网电话面试的几个问题
1.JDK1.5中如何创建一个线程池
2.有没有研究过其他框架(SSH除外),比如缓存Cache。
3.有没有做过优化的工作(没有具体谈是什么方便的,应该包括代码的和数据库的)
有知道的帮回复下,做个总结
------解决方案--------------------1.在JDK1.5以上用Executors 创建一个线程池
2.有搜索引擎Lucene.缓存OSCache,
3.数据库数量级大的时个,分表操作过。多线程调度时,内存GC调过
哈哈。。。
------解决方案--------------------http://sunnylocus.iteye.com/blog/223327
这里有一个创建线程池的。
------解决方案--------------------
回答
1. JDK1.5新增ThreadPoolExecutor类,它提供了一个构造方法:
ThreadPoolExecutor pool = new ThreadPoolExecutor(5, 10, 0, TimeUnit.SECONDS, new ArrayBlockingQueue <Runnable> (50), new ThreadPoolExecutor.DiscardPolicy());
//第1个参数表示最少开启多少线程
//第2个参数表示最多开启多少线程
//第3个参数表示线程池维护线程所允许的空闲时间
//第4个参数表示线程池维护线程所允许的空闲时间单位
//第5个参数用来存放我们的任务序列的有序队列
//第6个参数表示当队列满时采取的策略,有4个策略:1.AbortPolicy() 抛出java.util.concurrent.RejectedExecutionException异常2.CallerRunsPolicy() 由调用者执行这个任务3.DiscardOldestPolicy() 抛弃旧的任务4.DiscardPolicy() 抛弃当前的任务
2. webWork、TopLink、Ibatis、EJB、Jbpm、Comm想框架等等,这个太多了,因人而异,不过你既然说出来的,那么至少要能给人解释出来应用场景
3. 这个优化也是挺多的,因人而异回答吧:比如,
页面静态化;
页面缓存;
程序性能优化;
数据库优化,二级缓存,查询缓存等
希望对你有帮助!好运
------解决方案--------------------
哈哈,第一个不会,第二个没看过(谁有时间去看源码)
3:因数据库不同,项目不同,数据库的优化也会不同
oracle
1.内存结构的优化,SGA和PGA自动内存管理或者手动内存管理,特别是选择手动管理时几个重点参数:排序/散列区保留的大小SORT_AREA_SIZE(要权衡内存消耗和I/O数对性能的影响),选择自动PGA管理时PGA_AGGREGATE_TARGET参数的设置。SGA主要是共享池大小的分配,太小不利于SQL重用,发挥不了绑定变量饿的优势,太大的话维护一个大的共享池是很糟糕的事情。块缓冲区缓存,非常重要的一块内存结构,如果太小,查询将永远无法运行结束,如果太大,其他进程无法启动。自动SGA管理时SGA_TARGET参数的设置。还有块大小的设置等等设置。
2.隔离级别的设置,并发控制中主要是在程序中避免出现并发的错误,入什么死锁,丢失更新,重启动,一些为确保一致性读所引起的问题,入undo段块信息被覆盖所造成的ora-01555,这都是经常遇到的问题
还有日志竞争的问题,可能会遇到日志文件同步而等待很长的时间,原因一般为过多的commit,磁盘表现不佳,系统其他进程同LGWR竞争日志文件等
3.数据库表类型的优化,索引类型的优化。表分区,并行执行SQL,数据库直接路径加载外部平面文件
4.sql优化(尽量使用数据库自带的功能,而不要自己去编写),其他的优化细节很多
...
------解决方案--------------------第一个不会,第二个表示自己研究过ibatis和springMVC
第三个 做过sql语句的优化
还在学习中,还有很大的提升空间,工作才俩月,实习刚结束……
------解决方案--------------------用过Executors不知道ThreadPoolExecutor,怎么说呢,使用一个API都不知道人家的工厂生产的什么对象,就在用。
------解决方案--------------------优化无非就是应用服务器集群,缓存,还有db的优化,db的优化很难,是dba的事了。框架我在研究公司写的框架,看得我好累啊。
------解决方案--------------------ThreadPoolExecutor比较interesting,优化很高深。