java面试总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
个人简历可能会被问到的问题:
一、框架
1、Tapestry
1)Tapestry是一个前端MVC+模板技术的框架,实现视图逻辑和业务逻辑的分离
2)Tapestey使用组件技术替代标签库,组件由一系列页面组成,抛了JSP
3)Tapestry 组件容易被自定义开发,代码复用性高
4)Tapestry框架的加载是通过Filter(过滤器)来完成的
5)Tapestry国内使用的比较少,开发文档较少,组件逻辑+ognl表达式的使用较复杂
2、Struts
1)基于MVC 架构,框架结构清晰。
2)类级别的拦截器。
3)Struts2 中的许多特性都是通过拦截器来实现的, 例如异常处理,文件上传,验证等。拦
截器是可配置与重用的
4)可以兼容多种表现层技术. 如:JSP、FreeMarker、Velocity 等
5)使用OGNL: OGNL 可以快捷的访问值栈中的数据、调用值栈中对象的方法
6)组件+标签库+ognl表达式
7)缺点:配置文件满天飞,繁琐,值栈取值等性能较差,适用于追求稳定的系统应用
3、SpringMVC
1)与Spring实现无缝整合集成
2)支持Restful风格
3)spring mvc把所有的请求都提交给DispatcherServlet前置控制器
4)springMVC拦截器是属于HandlerMapping方法级别的
4、Spring
1)降低了组件之间的耦合性,实现了软件各层之间的解耦
2)可以使用容易提供的众多服务,如事务管理,消息服务等
3)容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
4)Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部
5)spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
Spring两大核心技术思想:
AOP:面向切面,就是典型的代理模式的体现。面向切面编程提供声明式事务管理实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
(生成代理类遇到接口的使用jdk动态代理,遇到类的使用cglib生成代理推荐前者后者final方法无法切入)
IOC:依赖注入,控制反转,就是典型的工厂模式,通过sessionfactory去注入实例将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring 会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter方法来注入,而不需要你在A里面new这些bean了。
5、Habenate
1)封装了jdbc,简化了很多重复性代码
2)简化了DAO层编码工作,使开发更对象化了
3)移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了Habernate的缓存机制:
一级缓存:session级的缓存也叫事务级的缓存,只缓存实体,生命周期和session一致。不能对其进行管理。不用显示的调用。
二级缓存:sessionFactory缓存,也叫进程级的缓存,使用第3方插件实现的,也只缓存实体,生命周期和sessionFactory一致,可以进行管理。
6、Mybatis
1) MyBatis是最简单的持久化框架,小巧并且简单易学。
2)提供XML标签,支持编写动态SQL语句。
SQL语句的编写工作量较大
SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
Mybatis优势
MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
MyBatis容易掌握,而Hibernate门槛较高。
Hibernate优势
Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
拦截器的作用?拦截器与过滤器的区别?
1)拦截器是对调用的Action起作用,它提供了一种机制可以使开发者可以定义在一个action 执行的前后执行的代码,只在Action前后执行。同时可以减轻代码冗余,提高重用率。
2) 过滤器是拦截用户请求的,范围明显比拦截器大的多。
6、Activiti5
1)Activiti工作的核心:ProcessEngine对象,Activity工作流引擎
2)
7、Redis
Redis 是一个基于内存的高性能key-value数据库。Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写。
1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
2) 支持丰富数据类型,支持string,list,set,sorted set,hash
3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
RESTful
网络上的所有事物都被抽象为资源
每个资源都有一个唯一的资源标识符
同一个资源具有多种表现形式(xml,json等)
对资源的各种操作不会改变资源标识符