java面试总结

来源:互联网 发布:淘宝联盟下单后失效 编辑:程序博客网 时间:2024/06/16 06:52
1,对spring的理解,主要有两大功能,对象管理和与业务无关的功能分离,控制反转和面向切面,控制反转是将对象的生命周期交由spring来管理,通过配置文件,在需要的对象中引入对象即可,在使用的时候spring 来加载。很好的体现了java的多态,在需要时侯注入不同的对象执行不同的行为。面向切面主要讲与逻辑无关的功能拆出来,比如说日志功能,还有接口统计功能,都可以单独出来。
2,设计模式,代理模式和策略模式,单例模式,代理模式主要为了提高程序的性能而设计的,在hibernate的延迟加载中得到充分体现,可以在不需要的时候生成一个简单的代理对象,真正用到的时候再装载真实的对象。策略模式为了避免将多种业务逻辑写多个ifelse而设计的,将每一种逻辑拆分成一个类,方便以后的扩展。
3.hibernate是orm框架,与mybatis相比做了更完善的封装,我自己的hql语言,mybatis更能应对复杂的业务,可定制化sql。hibernate对数据库的可移植性支持的比较好。hibernate 一二级缓存,一级缓存是session缓存,是事务级别的缓存,不可卸载,session对象的生命周期一般应对一个数据库事务或一个应用事务。二级缓存又称为sessionfactory缓存,进程范围内或者集群范围内的缓存,可能存在并发问题,采取适当的并发策略,该策略采取的将缓存的数据做事务级别的隔离。二级缓存默认是不启用的,可选的插件。hibernate的session延迟加载实现要解决两个问题,一个是session的正常关闭和确保请求中访问的是同一个session。hibernate的session是对java.sql.connection的封装,一个session对应一个connecttion。
4,string对象是不可变得,stringbuffer对象内容是可变的,后者是线程安全的,方法上应用同步机制。
5,抽象类和接口 抽象类是对事物的抽象,接口是对行为的抽象,抽象类的方法可以部分实现细节而接口不可以,抽象类可以有静态方法或静态代码块而接口不可以,一个类只能继承一个抽象类但可以实现多个接口。
6,对于分页查询,数据量不大的情况下用数据库的分页机制,limit。数据量百万级别的时候会有性能问题。可以考虑在表中建一个单独的自增长字段,并建立索引,在分页查询的时候直接判断大小即可实现。还有一种机制将旧的数据移到一张特殊表中,以经常查询的字段和页码建立索引,将数据以json形式保存成一个字段,这样就可以降低数据级别。
7,多线程和并发,两种方式,继承thread或者实现runnable接口,当线程共享资源时用实现runnable接口,目前用的是tomcat线程池实现多线程。设置最大线程数250左右,并发量大的时候,加多台应用服务器,用nginx做负载均衡。多台服务器存在session同步问题,可以建一台数据库服务器来存储所有的session,所有的应用服务器从session服务器来获取session
8、struts2和springmvc对比,实现机制不同,struts2基于filter实现的,springmvc基于servlet实现的,前者路径映射级别到类,后者可以到方法,前者配置文件较多,后者可以和spring更好的搭建。
原创粉丝点击