一、详细介绍下你比较熟悉的一个项目:总体上是个什么样的项目、系统功能、业务流程、技术框架亮点、技术难点、你负责的工作,对该项目的框架介绍
二、前端一般用到的技术:javascript/jstl标签/struts标签/el表达式
1、一般用到的javascript框架有哪些(简单)
回答要点:jquery/prototype/yui/js-ext
2、如果用过jquery,简述下如何把一个数组内容在页面上做循环显示(简单)
回答要点:使用each{}这个方法
3、js的方法可以重载吗?如何实现“重载”(较复杂)
回答要点:js不是面向对象言语,不能重载,但可以模拟“重载”,可以使用arguments或者typeof来判断参数类型实现
三、业务逻辑层,SSH(struts + spring + hibernate)三大框架
1、struts工作原理(简单)
要点:1、客户端浏览器发出HTTP请求。
2、根据web.xml配置,该请求被ActionServlet接收。
3、根据struts-config.xml配置, ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。
4、是否验证,需要验证则调用ActionForm的validate方法,验证失败则跳转到input,成功则继续。
5、Action从ActionForm获得数据,调用javabean 中的业务方法处理数据。
6、Action返回ActionForward对象,跳转到相应JSP页面或Action。
7、返回HTTP响应到客户端浏览器。
2、struts Action是不是线程安全的?(中等)
回答要点:
1.Struts1 Action是单例模式并且必须是线程安全的
2.Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题
3、分析一下struts是如何实现MVC的(较难)
要点:一个基本的MVC最基本的实现的核心的原理,它要通过一个控制器,这个控制器一般是一个servlet,在struts2中,是一个过滤器
4、Hibernate工作原理(简单)
1. 读取并解析配置文件
2. 读取并解析映射信息,创建SessionFactory
3. 打开Sesssion
4. 创建事务Transation
5. 持久化操作
6. 提交事务
7. 关闭Session
8. 关闭SesstionFactory
5、hibernate是怎样实现类与类之间的关系?一对一,一对多,多对多(简单)
要点:把所有的类与类都映射在一起,通过配置文件中的many-to-one、one-to-many、many-to-may
6、如何优化hibernate(中等)
要点:使用双向一对多关联,不使用单向一对多
灵活使用单向一对多关联
不用一对一,用多对一取代
配置对象缓存,不使用集合缓存
一对多集合使用bag,多对多集合使用
7、hibernate 是怎样实现事务处理(难)
要点:处理的难点在于如何在业务处理之前创建Session并开始事务以及在业务处理之后提交事务并关闭Session,处理的方法是通过一个ThreadLocal变量来把创建的Session对象绑定到处理用户请求的线程上去实现session对象的传递和一致。
8、spring对事务配置有哪几个方式:(简单)
要点:声明式、编程式
9、spring整个技术框架主要用了java的哪些底层技术机制(中等)
Java的反射机制
10、spring是怎样管理bean的,主要用了什么样的设计模式?(较难)
工厂模式、单例模式、代理模式,再深入的话可以深入问下各种设计模式是怎样实现的。
11、单例模式的理解,如何配置?不配置是否可以?
12、注入的使用理解?使用注入有什么优点?
13、AOP的了解,如何使用AOP实现权限控制?
四、 oracle数据库(主要在sql语句这块,不用关注DBA那些)
1、 oracle的sql语句的优化注意点,有什么方法、工具分析语句的性能,影响oracle查询性能的因素都有哪些?
PLSQL Developer的可以用执行计划查看oracle语句的效率,是否使用索引等,快捷键是F5
自己在pl/sqldeveloper客户端使用下F5,查看语句的执行计划,写好如何看,使用什么索引?cost等?要理解oracle的执行计划
2、 oracle大数据处理的经验和报表处理,还有做过项目中涉及的一些数据库问题,数据死锁?数据库分析
3、 对一个表中重复的数据如何去重(即删除重复的记录,只是剩下一个)
4、 实现索引的方式? 索引的原理? 索引的代价? 索引的类型?如何强制使用指定的索引?
5、 使用存储过程访问数据库比直接用SQL语句访问有哪些优点?
答案:存储过程是预编译过的,执行时勿须编译,执行速度更快;存储过程封装了一批SQL语句,便于维护数据的完整性与一致性;可以实现代码的复用。
6、 多个表的关联查询 sql语句,最好采用join
例如一共有3张表:
Table A {A_id,B_id,C_id,A_min,A_desc}
Table B {B_id,B_name}
Table C {C_id,C_name}
很明显后面几张表是常量表,A表里面有它们的id,没有name。现在要求查询A表,但是那些_id要用各自的名称_name代替,如何写sql?
最终查询结果要这样:
A_id B_name C_name A_min A_desc
答案
selectA_id,B.B_name,C.C_name,D.D_name,E.E_name,A_min ,A_desc
from A
inner join B on A.B_id= B.B_id
inner join C on A.C_id = C.C_id
多表关联 inner join,left join,right join
内连接INNER JOIN:只显示多表之间与关联条件相匹配的列
外连接: LEFT JOIN :以左表为基础,显示左表中的所有列,不管是否与关联条件相匹配,而右表中的数据只显示与关联条件相匹配的列,不匹配的列以NULL字符填充.
RIGHT JOIN:以右表为基础,显示右表中的所有列,不管是否与关联条件相匹配,而左表中的数据只显示与关联条件相匹配的列,不匹配的列以NULL字符填充.
FULL JOIN :显示多个表中的所有的列,不匹配关联条件的列以NULL字符填充
7、 对oracle的like模糊查询,前面模糊和后面模糊如何写,哪个用到索引?
Select * from tab where a like ‘A%’ ,如果a字段是有索引,可以用到索引
Select * from tab where a like ‘%A’ ,就算a字段是有索引,也用不到索引
8、 条件比较的语句中条件前面的索引字段如果使用了函数,就用不到索引了,例如
Select* from tab where substr(a,1,3) = ‘138’
9、 in 和exist的使用和区别
http://www.baidu.com/#wd=EXISTS%20%E8%83%BD%E7%94%A8%E7%B4%A2%E5%BC%95%E5%90%97&rsv_bp=1&tn=baidu&rsv_spt=3&ie=utf-8&rsv_sug3=11&rsv_sug4=720&rsv_sug2=0&inputT=4&f=8&rsv_sug1=5&bs=in%20%E8%83%BD%E7%94%A8%E7%B4%A2%E5%BC%95%E5%90%97&rsv_n=2