面试手札
tomcat
context.xml在/conf下和/conf/catalina/{hostName}下和再下一级的/${webappName}.xml
JDK
volatile在汇编中插入内存屏蔽指令是的读直接读主内存、写的话,立刻刷新主内存,读写原子性。线程池拒绝策略有:1、抛异常2、丢弃3、丢弃队列中待最久的任务4、交给调用者线程处理并发集合:linkedhashmap按插入有序,或最近使用、concurrentskiplisthashmap有序class.forName加载、并初始化,classLoader.loadClass加载自旋锁:占用CPU时间,不引起线程状态变化、适用竞争不激烈的情况公平锁/非公平锁:unsafe类ClassPath:查找user classes, 可以每个应用定义不同,查找tool.jar、lib目录加载器:启动类加载器(rt.jar)->扩展类加载器(ext/)->应用类加载器(根据classpath)
数据库
事务隔离级别:Read uncommitted、Read committed(Oracle)避免脏读、Repeatable read(Mysql)、Serializable避免幻读
spirng
事务传播:required加入事务(如果已经有),requiredNew创建新事务
ioc作用域:singleton、prototype、request、session、global-session
<bean id="xxx" class="yyyy"><constructor-arg ref="zzz"/><constructor-arg value="aaa"/></bean><bean id="xxx" class="yyyy"><property name="zzzz" ref="aaaa" /></bean>另外还有静态工厂和实例工厂
AOP
before、afterReturning、afterThrowing、after、 around匹配表达式java.lang.String 匹配String类型;java.*.String 匹配java包下的任何“一级子包”下的String类型;如匹配java.lang.String,但不匹配java.lang.ss.Stringjava..* 匹配java包及任何子包下的任何类型;如匹配java.lang.String、java.lang.annotation.Annotationjava.lang.*ing 匹配任何java.lang包下的以ing结尾的类型;java.lang.Number+ 匹配java.lang包下的任何Number的自类型;如匹配java.lang.Integer,也匹配java.math.BigInteger<aop:config><aop:pointcut id="yyy" expression="execution(public * com.invicme.apps.aop.advisor.ArithmeticCalculateImpl.*(..))"/><aop:advisor advice-ref="xxxx" pointcut-ref="yyy" /></aop:config><aop:config><aop:aspect ref="xxx"><aop:before pointcut="execution(** com.invicme.apps.aop.advisor.perform(..))" method="yyy"/></aop:aspect></aop:config>DispatcheServletFrameworkServelet.doGet->processRequest->DispatcheServlet.doSerivice->doDispatch->getHandler、getHadndlerAdapter->前拦截器链->调用handler得到ModelAndView->后拦截器链
Mybatis
#和$的局别,#是加引号,有效防止sql注入
JVM
GC root:方法运行时,方法引用的对象,类静态变量引用的对象,类中常用引用的对象,native方法中引用的对象活动的thread引用的变量,系统类(比如java.util.*)分析内存快照:jmap导出,jhat、Visual VM、MAT查看
设计模式
责任链模式:要么自己处理,要么给下一个处理模板方法模式:定义模板方法,具体方法,钩子方法。应用:HTTPServlet,service为模板方法订阅、发布模式:事件注册,通知
首发于博客园,原文转载请注明出于grass_草