软通动力面试题集.docx
《软通动力面试题集.docx》由会员分享,可在线阅读,更多相关《软通动力面试题集.docx(10页珍藏版)》请在冰豆网上搜索。
软通动力面试题集
1.Struts的运行机制:
Web应用初始化时,控制器加载分析配置文件(struts-config、xml),获得ActionMapping,配置应用程序
1.ActionServlet接收用户请求
2.ActionServlet根据应用程序配置填充ActionForm
3.ActionServlet根据ActionMapping调用Action的execute方法
4.Action调用业务逻辑类(Model),在简单的程序中也可以在Action的execute方法中执行业务处理
5.业务逻辑类将处理结果返回给Action,Action将处理结果保存在适当的作用域范围之内(session、request等)
6.Action的execute方法向ActionServlet返回ActionForward指明下一步调用的Action或JSP视图
7.JSP视图取得保存在作用域之中的业务处理结果并负责显示HTML页面
大家最好用自己的话来总结出来!
2.常用的集合以及介绍:
(应重点复习)
常用集合set、map、list
set、map就是collection接口的子接口
set接口的实现类:
HashSet、TreeSet
List接口的实现类:
ArrayList、linkedList
Map接口的实现类:
HashMap、TreeMap、Hashtable。
ArrayList与linkedList的区别(略)
HashMap、HashTable区别(略)
3.遍历map的方法:
使用Map接口提供的方法entrySet();
importjava、util、HashMap;
importjava、util、Iterator;
importjava、util、Map;
publicclassMapTest{
publicstaticvoidmain(String[]args){
Map
map、put("a","中国");
map、put("b","ABC");
map、put("c",1000);
/*for(Iterator>it=map、entrySet()、iterator();it、hasNext();){
Entryentry=it、next();
System、out、println(entry);
System、out、println(entry、getKey());
System、out、println(entry、getValue());
}*/
for(Iteratorit=map、keySet()、iterator();it、hasNext();){
Objectkey=it、next();
System、out、println(key);
Objectvalue=map、get(key);
System、out、println(value);
}
}
}
4、字符串相加用“+”与append()的区别
用“+“号每加一次创建一个对象,比如:
字符串常量池中有原字符串:
”abc”
之后要加”de”,加过之后内存中会有”abc”、”abcde”两个字符串!
但”abc”会失去原本指向它的引用变成垃圾回收机制回收的对象!
Append()只就是将字符串追加到原字符串的尾部,始终都就是一个对象!
5.垃圾回收机制原理:
当一个对象赋值为null或者没有指引指向她的时候,那么这个对象就符合垃圾回收机制回收的范围,java虚拟机会不定时的对垃圾进行回收,回收对象之前会调用被回收对象的finalize()方法!
注意Java虚拟机何时来回收垃圾不确定!
6.如何实现多线程:
继承Thread类或者实现Runnable接口
那种好处多:
因为java就是单继承所以一般会采用实现Runnable接口
两种实现方式的区别:
继承Thread类可以创建本类对象直接调用start()方法运行线程(也就就是说本类对象就就是一个线程个人理解)
实现Runnable接口必须用Threadthread=newThread()来获得一个线程!
7、代码的重构:
代码的输入、输出不变,只就是改变中间实现代码!
8、MVC思想
就是model、view、controller的缩写,model代表业务逻辑(通过javabean、EJB组建实现)、view就是应用表示面(由jsp页面产生)、controller就是提供应用处理过程的控制(一般就是一个servlet)。
通过这种设计模式把应用逻辑、处理过程、显示逻辑分成不同的组件实现,可提高组件的交互与重用性。
9、struts1与struts2的区别(见最后一页)
10:
讲解一下Spring
11:
hibernate就是怎么工作的
原理:
1、读取并解析配置文件
2、读取并解析映射信息,创建SessionFactory
3、打开Sesssion
4、创建事务Transation
5、持久化操作
6、提交事务
7、关闭Session
8、关闭SesstionFactory
12:
hibernate的一级与二级缓存就是什么
Hibernate提供了两级缓存,第一级就是Session的缓存。
由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存就是事务范围的缓存。
第一级缓存就是必需的,Session的缓存就是内置的,不能被卸载。
第二级缓存就是一个可插拔的的缓存插件,它就是由SessionFactory负责管理。
由于SessionFactory对象的生命周期与应用程序的整个过程对应,因此第二级缓存就是进程范围的缓存,第二级缓存就是可选的,可以在每个类或每个集合的粒度上配置第二级缓存。
当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。
13:
hibernate的连接池
14:
怎么接收dwr返回的数组或集合
15:
怎么读取一个文本文件(流)
16:
javascript中这么去掉字符串的空格
17:
用ajax的时候怎么运行后台返回的javascript代码
18:
存储过程就是用来干什么的
19:
怎么终止一个线程
抛出异常与等待run()方法结束。
20、悲观锁与乐观锁?
21、Oracle中实现序列用什么关键字?
Sequence
22、数据库中有哪些函数?
23、解析XML的方法?
DOM解析与SAX解析
DOM:
处理大型文件时其性能下降的非常厉害。
这个问题就是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问
SAX:
不现于DOM,SAX就是事件驱动型的XML解析方式。
它顺序读取XML文件,不需要一次全部装载整个文件。
当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问
24、用递归法求n的阶乘?
25、Orcale中左右连接用“+”怎样连接
Oracle数据库左连接“+”在右边,右连接“+”在左边。
26、Equals方法与==的区别。
equals()方法就是用来比较两个字符串值就是否相等而==就是用来比较对象引用就是否相等(也就就是就是否为同一个对象)
27、线程池的问题。
线程池就像数据库连接池一样,就是一个对象池。
所有的对象池都有一个共同的目的,那就就是为了提高对象的使用率,从而达到提高程序效率的目的。
比如对于Servlet,它被设计为多线程的(如果它就是单线程的,您就可以想象,当1000个人同时请求一个网页时,在第一个人获得请求结果之前,其它999个人都在郁闷地等待),如果为每个用户的每一次请求都创建一个新的线程对象来运行的话,系统就会在创建线程与销毁线程上耗费很大的开销,大大降低系统的效率。
因此,Servlet多线程机制背后有一个线程池在支持,线程池在初始化初期就创建了一定数量的线程对象,通过提高对这些对象的利用率,避免高频率地创建对象,从而达到提高程序的效率的目的。
28、struts1的一些配置问题web、xml与struts-config、xml中的一些配置。
29.JavaScript的一个操作流程。
30.一些简单的sql语句,比如说现在数据库中有10记录,要求您写一个语句保留第二条与第五条记录,将其她的记录全部删除。
31.存储过程、触发器
32.Throw与Throws的区别
throw语句用来明确地抛出一个“异常”。
throws用来标明一个成员函数可能抛出的各种“异常”
33.在异常捕获时try,catch,finally中可不可以没有catch语句块。
可以,但try块不能单独执行,后面必须跟catch或者finally、或者两者都有。
34.面向对象有哪些特征,您如何理解?
抽象、继承、封装、多态
35.什么就是多线程?
线程的状态有那几个?
创建线程的方法?
启动线程用什么方法?
线程同步包括的方法?
答:
多线程就是为了同步完成多项任务,不就是为了提高运行效率,而就是为了提高资源使用效率来提高系统的效率。
线程就是在同一时间需要完成多项任务的时候实现的。
线程状态有:
就绪、运行、挂起、结束。
启动线程用start()方法。
线程同步包含的方法:
线程睡眠sleep()、线程让步:
yield()、等待其她线程结束join()等。
36.String、stringBuffer、StringBuilder的区别
37.垃圾回收机制的原理?
final,finally,finalize的区别?
38.内存的泄露以及溢出就是怎么回事?
内存溢出就就是您要求分配的java虚拟机内存超出了系统能给您的,系统不能满足需求,于就是产生溢出。
内存泄漏就是指您向系统申请分配内存进行使用(new),可就是使用完了以后却不归还(delete),结果您申请到的那块内存您自己也不能再访问,该块已分配出来的内存也无法再使用,随着服务器内存的不断消耗,而无法使用的内存越来越多,系统也不能再次将它分配给需要的程序,产生泄露。
一直下去,程序也逐渐无内存使用,就会溢出。
39.数据库连接池的原理?
数据库连接池的基本思想就就是为数据库连接建立一个“缓冲池”。
预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。
更为重要的就是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。
40.数组与链表的区别?
栈以及队列的特点以及区别?
数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小。
而在实际应用中,用户使用数组之前有时无法准确确定数组的大小,只能将数组定义成足够大小,这样数组中有些空间可能不被使用,从而造成内存空间的浪费。
链表就是一种常见的数据组织形式,它采用动态分配内存的形式实现。
需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放