项目面试

一、详细介绍下你比较熟悉的一个项目:总体上是个什么样的项目、系统功能、业务流程、技术框架亮点、技术难点、你负责的工作,对该项目的框架介绍

二、前端一般用到的技术: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中,是一个过滤器

 

4Hibernate工作原理(简单)

1. 读取并解析配置文件

2. 读取并解析映射信息,创建SessionFactory

3. 打开Sesssion

4. 创建事务Transation

5. 持久化操作

6. 提交事务

7. 关闭Session

8. 关闭SesstionFactory

 

5、hibernate是怎样实现类与类之间的关系?一对一,一对多,多对多(简单)

要点:把所有的类与类都映射在一起,通过配置文件中的many-to-oneone-to-manymany-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、       oraclesql语句的优化注意点,有什么方法、工具分析语句的性能,影响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_idC_idA_minA_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、        oraclelike模糊查询,前面模糊和后面模糊如何写,哪个用到索引?

   Select * from tab where a like ‘A%’  ,如果a字段是有索引,可以用到索引

   Select * from tab where a like ‘%A’  ,就算a字段是有索引,也用不到索引

8、        条件比较的语句中条件前面的索引字段如果使用了函数,就用不到索引了,例如

    Select* from tab where  substra,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

你可能感兴趣的:(面试)