企业面试题总汇

更新时间:2024-04-16 19:54:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

企业面试题总汇

1、 请列举至少3个JDK安装目录下的可执行程序(如:javac),并列举几个常用的命令行参数

1、 javac 将Java源代码换成字节代 用法: javac <选项> <源文件> 可能的选项包括: -g 生成所有调试信息 -g:none 生成无调试信息 -g:{lines,vars,source} 生成只有部分调试信息 -O 优化;可能妨碍调试或者增大类文件 -nowarn 生成无警告 -verbose 输出关于编译器正在做的信息 -deprecation 输出使用了不鼓励使用的API的源程序位置 -classpath <路径> 指定用户类文件的位置 -sourcepath <路径> 指定输入源文件的位置 -bootclasspath <路径> 覆盖自举类文件的位置 -extdirs <目录(多个)> 覆盖安装的扩展类的位置 -d <目录> 指定输出类文件的位置 jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...选项: -c 创建新的存档 -t 列出存档内容的列表 -x 展开存档中的命名的(或所有的)文件 -u 更新已存在的存档 -v 生成详细输出到标准输出上 -f 指定存档文件名 -m 包含来自标明文件的标明信息 -0 只存储方式;未用ZIP压缩格式 -M 不产生所有项的清单(manifest)文件 -i 为指定的jar文件产生索引信息 javadoc [options] [packagenames] [sourcefiles] [classnames] [@files] -overview读取 HTML 格式的概述文档 -public 仅显示 public 类和成员 -protected 显示 protected/public 类和成员(缺省) -package 显示 package/protected/public 类和成员 -private 显示所有类和成员 -help 显示命令行选项 -doclet 通过候选 doclet 生成输出 -docletpath 指定 doclet 类文件的查找位置 -sourcepath 指定源文件的查找位置 -classpath 指定用户类文件的查找位置 2.jar 打架包,查看架包 用法: 3.javadoc:根据Java源代码及其说明语句生成的HTML文档 用法: 4.javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件 用法: javah [options] 其中 [options] 包括: -help 打印该帮助信息 -classpath 类的加载路径 -bootclasspath 自举类的加载路径 -d

输出目录 -o 输出文件(仅能使用 -d 或 -o 之一) -jni 生成 JNI 风格的头文件(缺省) -old 生成 JDK1.0 风格的头文件 -stubs 生成 stubs 文件 -version 打印版本信息 -verbose 输出有关本命令所做工作的信息 -force 始终写输出文件 2、 请分析命题:“Java采用自动垃圾回收技术(GC),因此不会出现内存泄露”

对象的建立和放置都是在内存堆栈上面进行的。程序或者其他的对象可以锁定一块堆栈地址来进行其他对象的引用。

当一个对象没有任何引用的时候,Java的自动垃圾回收机制就发挥作用,自动删除这个对象所占用的空间,释放内存以避免内存泄漏。但是内存泄漏并不是就此而完全避免了,当程序员疏忽大意地忘记解除一个对象不应该有的引用的时候,内存泄漏仍然不可避免,不过发生的几率要比不启用垃圾回收机制的C++程序少很多。但是总体来讲,自动垃圾回收机制要安全和简单许多。

3、 请简单描述单子模式(单例模式)的各种不同实现方式,及各自优缺点。请列举至少2中其

他的设计模式及应用场景

4、 /*单例设计模式主要有2种实现方式:懒汉式、饿汉式。 5、 他们分别有如下实现: 6、 饿汉式: 7、 //饿汉式单例类.在类初始化时,已经自行实例化 */ 8、 public class Singleton1 { 9、 //私有的默认构造子 10、 private Singleton1() {} 11、 //已经自行实例化 12、 private static final Singleton1 single = new Singleton1(); 13、 //静态工厂方法 14、 public static Singleton1 getInstance() { 15、 return single; 16、 } 17、 } 18、 懒汉式: 19、 //懒汉式单例类.在第一次调用的时候实例化 20、 public class Singleton2 { 21、 //私有的默认构造子 22、 private Singleton2() {} 23、 //注意,这里没有final 24、 private static Singleton2 single=null; 25、 //静态工厂方法 26、 public synchronized static Singleton2 getInstance() { 27、 if (single == null) { 28、 single = new Singleton2(); 29、 } 30、 return single; 31、 } 32、 } 33、 34、 /*其他设计模式: 35、 1.适配器模式 36、 应用场景:比如说在朋友聚会上遇到一个德国人sarsh,可以我不会德语,她不会中文,我只好求助于我的朋友mary了,他作为我和sarsh之间的adapt,让我和sarsh可以交流了。 37、 2.装饰模式 38、 应用场景:想要自己做礼物送给朋友,拿出去年在华山顶上的照片,在背面写上“最好的礼物”再到街上礼品店买个相框,在找隔壁学美术的朋友设计一个漂亮的盒子装起来,我们都是Decorator。*/ 4、 输出结果

1. public static void main(String[] args)throws Exception{ 2. String str = \中国\; 3. System.out.println(str.getBytes(\).length); 4. System.out.println(str.getBytes(\).length); 5. System.out.println(str.getBytes(\).length); 6. System.out.println(new String(str.getBytes(\),(\)); 7. System.out.println(new String(str.getBytes(\),(\)); 8. System.out.println(new String(str.getBytes(\),(\)); 9. } 10. 输出结果: 11. 6 12. 4 13. 2 14. ?? 15. 中国 16. 中国 5、 使用二分查找法查找字符串数组{\中\元素

6、 public class Query4Half { 7、 8、 static int bsearch( String[] a, String v ) { 9、 int l, r; 10、 l = 0; r = a.length-1; 11、 while ( l <= r ) { 12、 int m = (l+r)/2; 13、 if ( a[m].compareTo(v)==0 ) return m; else 14、 if ( a[m].compareTo(v)>0 ) r = m-1; else 15、 if ( a[m].compareTo(v)<0 ) l = m+1; 16、 } 17、 return -1; 18、 } 19、 20、 public static void main(String[] args) { 21、 String str[] = {\,\,\,\,\,\,\,\}; 22、 int bsearch = bsearch(str, \); 23、 System.out.println(bsearch); 24、 } 6、 请详细阐述Spring事务机制的实现原理?

Spring的事务管理机制实现的原理,就是通过AOP,使用动态代理对所有需要事务管理的Bean进行加载,并根据配置在invoke方法中对当前调用的 方法名进行判定,并在method.invoke方法前后为其加上合适的事务管理代码,这样就实现了Spring式的事务管理。

7、 Spring声明式事务的优点

执行情况提交或者回滚事务。

声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过等价的基于标注的方式),便可以将事务规则应用到业务逻辑中。因为事务管理本身就是一个典型的横切逻辑,正是 AOP 的用武之地。Spring 开发团队也意识到了这一点,为声明式事务提供了简单而强大的支持。

声明式事务管理曾经是 EJB 引以为傲的一个亮点,如今 Spring 让 POJO 在事务管理方面也拥有了和 EJB 一样的待遇,让开发人员在 EJB 容器之外也用上了强大的声明式事务管理功能,这主要得益于 Spring 依赖注入容器和 Spring AOP 的支持。依赖注入容器为声明式事务管理提供了基础设施,使得 Bean 对于 Spring 框架而言是可管理的;而 Spring AOP 则是声明式事务管理的直接实现者,这一点通过清单8可以看出来。 通常情况下,笔者强烈建议在开发中使用声明式事务,不仅因为其简单,更主要是因为这样使得纯业务代码不被污染,极大方便后期的代码维护。

和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。

8、 Struts采用了什么设计模式?并详细说明各个组成部分?

struts采用了MVC设计模式,严格按照mvc设计模式进行设计,实现解耦和,struts2经过前端控制器来转发请求,控制请求流向(也就是我们的控制层)。然后Struts经过模型层去处理数据,把处理结果再交给控制层进行视图解析。这样一个过程严格按照MVC设计模式。

9、 请简要说明WebService的组成部分?以及各个部分使用的协议?

WebService框架核心是基于简单对象访问协议(Simple Object Access Protocol,SOAP)、Web 服务描述语言(Web Service Description Language,WSDL)以及通用描述、发现和集成(Universal Description Discovery and Integration,UDDI)。web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST

在web服务中,有三种可供选择的发送和接受信息的协议:SOAP,HTTP GET,HTTP POST,但是SOAP支持的数据类型更为广泛

SOAP=RPC+HTTP+XMLSOAP简单的理解,就是这样的一个开放协议SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC作为一致性的调用途径,XML作为数据传送的格式,允许服务提供者和服务客户经过防火墙在INTERNET进行通讯交互。

10、请用Java代码实现一个链表结构

10、 public class MyList { 11、 private class Node{ 12、 public Node pre; 13、 public Node next; 14、 public AnyType data; 15、 public Node(AnyType d, Nodep, Node n){} 16、 public Node(){} 17、 } 18、 private int theSize; 19、 private Node Header; 20、 private Node Tail; 21、 public MyList(){} 22、 public void add(AnyType item){} 23、 public boolean isEmpty(){} 24、 public int size(){} 25、 public AnyType get( int idx){} 26、 public void print(){} 27、 } 28、 /*Node类定义了双向链表中节点的结构,它是一个私有类,而其属性和构造函数都是公有的,这样,其父类可以直接访问其属性,而外部类根本不知道Node类的存在。Data是节点中的数据与,pre指向前一个Node节点,next指向后一个Node节点。其构造函数的实现如下,不解释: 29、 View Code*/ 30、 31、 public Node(AnyType d, Nodep, Node n){ 32、 this.data = d; 33、 this.pre = p; 34、 this.next = n; 35、 } 36、 37、 public Node(){ 38、 this.data = null; 39、 this.pre = null; 40、 this.next = null; 41、 } 42、 /*下面我们看一下链表的构造函数实现: 43、 View Code*/ 44、 public MyList(){ 45、 theSize = 0; 46、 Header = new Node(null,null,null); 47、 Tail = new Node(null,Header,null); 48、 Header.next = Tail; 49、 } 50、 /*我们构造了一个带有头、尾节点的双向链表,头节点的Next指向尾节点,为节点的pre指向头节点。链表长度起始为0。 51、 继续贴上链表类其它方法的实现,不解释了,应该比较清楚:*/ 52、 //View Code 53、 54、 public void add(AnyType item){ 55、 Node aNode = new Node(item,null,null); 56、 Tail.pre.next = aNode; 57、 aNode.pre = Tail.pre; 58、 aNode.next = Tail; 59、 Tail.pre = aNode; 60、 theSize++; 61、 } 62、 63、 public boolean isEmpty(){ 64、 return ( theSize == 0); 65、 } 66、 67、 public int size(){ 68、 return theSize; 69、 } 70、 71、 public AnyType get( int idx){ 72、 if(idx > theSize-1 || idx < 0) 73、 throw new IndexOutOfBoundsException(); 74、 Node current = new Node(null,Header,null); 75、 for(int i = 0; i

当某个对象被系统收集为无用信息的时候,finalize()将被自动调用,但是jvm不保证finalize()一定被调用,也就是说,finalize()的调用是不确定的...

12、Servlet中forward()与redirect()的区别是什么?

redirect() 会丢失request的所有信息 它属于页面级的重定向,仅仅让你的浏览器重新访问一个新的url,作为浏览者,能很明显的看到浏览器url地址的变化,这和点击了一个普通的超链接的后果是一样的。

而 RequestDispatcher 的forward() 方法,是转发,需要request 和 response最为参数,就是将用户的请求,连同请求信息等内容,一起转发到服务器的另外一个servlet去处理,它不会丢失request信息。这一过程是服务器内部完成的,作为访问者,是感觉

不到了,或者说是透明的,因此访客浏览器的url 是不会发生变化的。

forward是转发,redirect是跳转。相同点都是为了两个组件之间的相互调用。forward的运行原理是服务器端内部的调用,所以它不需要通过浏览器来请求,所url地址不会改变,request的作用范围也没有中断过,它的作用域仍然有效。而redirect是重定向,是服务器发送消息告诉浏览器,让浏览器重新向新的地址请求,所以,url地址是会改变的,由于重新请求了,因而request也中断了,重新请求了,它的作用范围也失效了,放在request里面的信息也随之而清空了。

13、请列出你所了解的若干个不同类型的runtime exception

NullPointerException - 空指针引用异常 ClassCastException - 类型强制转换异常。 IllegalArgumentException - 传递非法参数异常。 ArithmeticException - 算术运算异常

ArrayStoreException - 向数组中存放与声明类型不兼容对象异常 IndexOutOfBoundsException - 下标越界异常

NegativeArraySizeException - 创建一个大小为负数的数组错误异常 NumberFormatException - 数字格式异常 SecurityException - 安全异常

UnsupportedOperationException - 不支持的操作异常

14、请说明数据库主键、外键的作用。以及独立主键的好处及坏处

SQL的主键和外键的作用:

外键取值规则:空值或参照的主键值。

(1)插入非空值时,如果主键表中没有这个值,则不能插入。 (2)更新时,不能改为主键表中没有的值。

(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。 (4)更新主键记录时,同样有级联更新和拒绝执行的选择。 简而言之,SQL的主键和外键就是起约束作用。

15、简述什么是事物?事物存在哪些属性?

数据库事务是指作为单个逻辑工作单元执行的一系列操作。属性:ACID

1、一致性:将事务中所做的操作捆绑成一个原子单元,即对于事务所进行的数据修改等操作,要么全部执行,要么全部不执行。

2、原子性:事务在完成时,必须使所有的数据都保持一致状态,而且在相关数据中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构都应该是正确的。

3、隔离性:由并发事务所做的修改必须与任何其他事务所做的修改相隔离。事务查看数据时数据所处的状态,要么是被另一并发事务修改之前的状态,要么是被另一并发事务修改之后的状态,即事务不会查看由另一个并发事务正在修改的数据。这种隔离方式也叫可串行性。

4、持久性:事务完成之后,它对系统的影响是永久的,即使出现系统故障也是如此。

16、如何写出高性能的SQL语句?

(1)整合简单,无关联数据库访问: 如果你有几个简单数据库查询语句,你可以把它们整合

到个查询中(即使它们的间没有关系)

(2)删除重复记录: 最高效删除重复记录思路方法 ( 使用了ROWID)例子: DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO);

(3)用TRUNCATE替代DELETE: 当删除表中记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复信息. 如果你没有 COMMIT事务,ORACLE会将数据恢复到删除的前状态(准确地说是恢复到执行删除命令的前状况) 而当运用TRUNCATE时, 回滚段不再存放任何可被恢复信息.当命令运行后,数据不能被恢复.因此很少资源被,执行时间也会很短. (译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)

(4)选择最有效率表名顺序(只在基于规则优化器中有效): ORACLE 解析器按照从右到左顺序处理FROM子句中表名FROM子句中写在最后表(基础表 driving table)将被最先处理在FROM子句中包含多个表情况下,你必须选择记录条数最少表作为基础表如果有3个以上表连接查询,那就需要选择交叉表(ersection table)作为基础表, 交叉表是指那个被其它表所引用表.

(5)WHERE子句中连接顺序.: ORACLE采用自下而上顺序解析WHERE子句,根据这个原理,表的间连接必须写在其它WHERE条件的前, 那些可以过滤掉最大数量记录条件必须写在WHERE子句末尾.

(6)SELECT子句中避免使用 ' * ': ORACLE在解析过程中, 会将'*' 依次转换成所有列名, 这个工作是通过查询数据字典完成, 这意味着将耗费更多时间

(7)减少访问数据库次数: ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引利用率, 绑定变量 , 读数据块等;

(8)在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数

据库访问检索数据量 ,建议值为200 (9)使用DECODE来减少处理时间: 使用DECODE可以避免重复扫瞄相同记录或重复连接相同表. (11) 用Where子句替换HAVING子句;

17、列举JSP的内置对象,同一应用中页面有哪些方法?

九大内置对象:

1.输出输入对象:request对象、response对象、out对象

2.通信控制对象:pageContext对象、session对象、application对象 3.Servlet对象:page对象、config对象 4.错误处理对象:exception对象

① 、直接在URL请求后添加 如:

< a href=\直接传递参数< /a> 特别的在使用response.sendRedirect做页面转向的时候,也可以用如下代码: response.sendRedirect(\,可用request.getParameter(name)取得参数

1. 2. 3. ②、jsp:param 它可以实现主页面向包含页面传递参数,如下:

< jsp:include page=\> < jsp:param name=\ value=\ /> < /jsp:include> 还可以实现在使用jsp:forward动作做页面跳转时传递参数,如下:

1. 2. 3. < jsp:forward page=\> < jsp:param name=\ value=\ /> < /jsp:forward> 通过这种方式和一般的表单参数一样的,也可以通过request.getParameter(name)取得参数 3、设置session和request通过显示的把参数放置到session和request中,以达到传

递参数的目的 session.setAttribute(name,value); request.setAttribute(name,value) 取参数: value=(value className)session.getAttribute(name);

value=(value className)request.getAttribute(name);

大家肯定已经注意到了,在取参数的时候,做了类型转换,这是因为放置在session和request中的对象的属性被看作 java.lang.Object类型的了,如果不转换,在将直付给value时会报classcastexception异常。

18、JSP如何获取HTML FORM中的数据?

html页面的表单

1. 2. 3. 在表单中,action动作和method合起来表示把数据交给mujsp.jsp页面去处理, 在jsp页面呢,用

<% request.getParmerter(\>获取html页面传递过来的数据,

要注意的是,有时候连个页面之间的传递会出现中文乱码现象, 解决乱码的做法是:在jsp页面加上

1. 2. <% request.setCharacterEncoding(\ request.setCharacterEncoding (\> 这样就不用担心编码问题了

另一种:是form表单提交方式获取表单数据。

19、JSP中redirect和forward的区别是什么?(类似12)

forward是使用同一个request,也就是说用forward传递后可以在页面中获取request

中的变量或属性。

redirect是新建一个request用新建的request传递。

比如有三个jsp文件,第一个里面有

20、JSP中对象的传递有哪些方法?

request,session,application,cookie

区别:page的生命周期最短,依次是request,session,application.他们保存在服务器端. cookie是保存在客户端的,用来解决HTTP无状态问题.

范围不同,最小的是page然后request,session,application范围依次增大.

21、Http协议中返回状态200、404、302、301、500、502各式什么含义?

200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

404 (未找到) 服务器找不到请求的网页。

500 (服务器内部错误) 服务器遇到错误,无法完成请求。

502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

22、描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理

实现sessionid的保存和传输。是cookie,将http的请求变得有状态。session的实现是

web服务器的事情,不过很显然默认是利用会话cookie,也就是存放在浏览器内存里的那种cookie来实现的,在cookie里只是存放了SessionID,然后在服务器上建立了一张表,对应客户端的SessionID。这张表是存放在服务器上的进程中的,也就是服务器的内存里,也就是Application里。当客户端请求服务器的时候,如果服务器发现这是一个新的请求,就会分配给他一个SessionID,也就是在浏览器写入一个sessionID的cookie。你可以试一下,在你请求过一次服务器之后,在服务器遍历客户端所有的cookie,就会发现这个叫做SessionID的cookie。

但是,这只是session实现sessionid状态记录的一种方法,如果客户端浏览器禁用了cookie,很多网站还是可以正常登录,还是可以正确识别浏览器的身份,这就是通过url重写的方式,每次交互都携带sessionid的信息。

还有一种方式,就是表单重写,有些服务器会在表单中增加隐藏域,来回传递sessionid。 所以在了解了这个session的原理之后我们可以自己来造一个自己的session,可以使用cookie,也可以使用url重写方式,也可以使用表单方式。 session的结束问题

还有知道了session的原理就会明白一个session会话如何结束,除非服务器端可以清除一个session会话,客户端是没有能力清除session的,关闭浏览器的时候并不能够结束当前的会话(忽略浏览器关闭事件),在不依赖于cookie的session中最明显,你可以记下你的sessionID那串字符串,关闭浏览器,打开,把sessionID自己替换,你就可以恢复刚才的会话了。所谓的20分钟session超时,是服务器每隔20分钟对于不活动的session清除而已。

还有要指出的是依赖于cookie的session是存放在浏览器内存中的,所以一个浏览器的进程就会产生一个session,可以通过任务管理器查看进程,对于IE来说,只有双击桌面上的

浏览器快捷方式才能新启动一个进程的,当然其他类似启动iexplorer.exe的行为也可以 到这里你会发现在依赖于cookie的session中,是需要浏览器的支持的!

对于js的ajax请求,确切的说是xmlhttp这个组件发送的http请求,虽然是你使用js的代码自己制造的,但是依然是借助于浏览器发送的,所以可以获得session。

23、数组String[] str和String str分别怎么获取长度?

size 和 length()

24、请用JAVA实现快速排序算法

1. 2. 3. 4. 5. 6. 7. 8. 9. public class QuickSort { public static int Partition(int a[],int p,int r){ int x=a[r-1]; int i=p-1; int temp; for(int j=p;j<=r-1;j++){ if(a[j-1]<=x){ // swap(a[j-1],a[i-1]); i++; 10. temp=a[j-1]; 11. a[j-1]=a[i-1]; 12. a[i-1]=temp; 13. } 14. } 15. //swap(a[r-1,a[i+1-1]); 16. temp=a[r-1]; 17. a[r-1]=a[i+1-1]; 18. a[i+1-1]=temp; 19. return i+1; 20. } 21. 22. public static void QuickSort(int a[],int p,int r){ 23. if(p

Socket通信的原理大致分为以下几个步骤。 服务器端的步骤如下。

(1)建立服务器端的Socket,开始侦听整个网络中的连接请求。

(2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。

(3)当完成通信后,服务器关闭与客户端的Socket连接。 客户端的步骤如下。

(1)建立客户端的Socket,确定要连接的服务器的主机名和端口。 (2)发送连接请求到服务器,并等待服务器的回馈信息。 (3)连接成功后,与服务器进行数据的交互。 (4)数据处理完毕后,关闭自身的Socket连接。

TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。

UDP:面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。

26、对象封装的原则是什么?

封装原则:隐藏对象的属性和实现细节,仅对外公开接口,并且控制访问级别

在OOP(面向对象)编程中,用类来实现上面的要求。用类实现封装,用封装来实现高内聚,低耦合

高聚合是说一个对象的功能都在内部搞定,紧紧地结合在一起 低耦合是说对象之间的依赖要松散,不要牵一发动全身 只有这样,当系统规模扩大时,才能比较方便

27、请列举几种SQL优化的方法?

1:mysql所在服务器内核 优化;此优化可由系统运维人员完成

2:mysql配置参数优化(my.cnf);此优化需进行压力测试来进行参数调整 3:sql语句及表优化

①、当只要一行数据时使用 LIMIT 1 ②、为搜索字段建索引

③、在Join表的时候使用相当类型的列,并将其索引 ④、千万不要 ORDER BY RAND() ⑤、避免 SELECT *

⑥、永远为每张表设置一个ID 使用 ENUM 而不是 VARCHAR ⑧、尽可能的使用 NOT NULL ⑨、固定长度的表会更快 垂直分割

拆分大的 DELETE 或 INSERT 语句 越小的列会越快

28、请列举几种重复提交的方式?

F5重复提交、浏览器前进和后退按钮重复提交、使用frameset框架右键的此框架重新载入:1、使用遮罩,让用户提交完成之前等待。提交成功后执行页面重定向(redirect)。转到提交成功信息页面;

29、描述在MVC架构模式下,表单从页面提交内容,最后到内容保存到数据持久层中间要做哪些步骤处理?

30、序列化的作用,应用场景

所谓java对象序列化就是将对象的状态转换成字节流,以后可以通过这些值再生成相同状态的对象!对象序列化是对象持久化的一种实现方法,它是将一个对象的属性和方法转化为一种序列化的格式以用于存储和传输,反序列化就是根据这些保存的信息重建对象的过程。 运用场景1:

Java的JavaBeans:Bean的状态信息通常是在设计时配置的,Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息,这需要将对象的状态保存到文件中,而后能够通过读入对象状态来重新构造对象,恢复程序状态。例如Java.io包有两个序列化对象的类。ObjectOutputStream负责将对象写入字节流,ObjectInputStream从字节流重构对象。 运用场景2:

activiti工作流设置流程变量

31、一个表中的ID有多个记录,把所有这个id的记录查出,并显示共有多少条记录数(SQL实现)

1. 2. 3. SELECT id,COUNT(id) FROM `table` GROUP BY id HAVING COUNT(id) > 1 SELECT * FROM (SELECT id,COUNT(id) sumid FROM `table` GROUP BY id) t WHERE t.sumid > 1 32、查询表A中存在ID重复三次以上的记录。(使用SQL实现)

1. 2. 3. SELECT id,COUNT(id) FROM `table` GROUP BY id HAVING COUNT(id) > 3 SELECT * FROM (SELECT id,COUNT(id) sumid FROM `table` GROUP BY id) t WHERE t.sumid > 3 33、Collection和Collections有什么区别?

Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

34、String s = new String(\;请问有几个String对象?分别是

两个或一个,“xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量“xyz”不管出现多少遍,都是缓冲区中的那一个。如果以前就用过‘xyz’直接从缓冲区拿。如果没有就在字符串缓冲区创建这个“xyz”字符串对象,New String每写一遍,就创建一个新的对象。

35、XML是什么?针对它常用的工具包是什么?

XML全称为Extensible Markup Language,意思是可扩展的标记语言。XML语法上和

HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的,常用在保存关系型数据和配置文件。针对它常用的工具包是DOM4J

36、Hibernate的特点及其工作原理,为什么大多数公司都使用Hibernate?

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,

另外hibernate还提供一级缓存和二级缓存。可以进行简单的数据库优化和简洁的HQL编写。使用hibernate需要根据项目来确定。不能根据公司确定。 Hibernate缺点

(1) Hibernate在批量数据处理时有弱势

(2) 针对单一对象简单的增删查改,适合于Hibernate,而对于批量的修改,删除,不适合用Hibernate,这也是OR框架的弱点;要使用数据库的特定优化机制的时候,不适合用Hibernate。

37、Spring的工作流程、以及核心机制?

核心机制:IOC-控制翻转。对象的创建交由spring容器创建。常用方式有构造器创建、静态工厂、实例工厂。底层使用反射技术实现。DI-依赖注入。对象的依赖属性由容器注入。一般使用set方法注入

38、Spring中的事物隔离级别有哪些?事物隔离和传播的特点

ISOLATION_DEFAULT默认级别,根据数据库选择对应隔离级别

ISOLATION_READ_UNCOMMITTED 可以读取未提交数据

ISOLATION_READ_COMMITTED 只能读取已提交数据,解决脏读问题(Oracle默认级别)ISOLATION_REPEATABLE_READ 是否读取其他事务提交修改后的数据,解决不可重复读问题(MySQL默认级别)ISOLATION_SERIALIZABLE 是否读取其他事务提交添加后的数据,解决幻影读问题

39、Flex的优劣点及工作流程

40、不同语言开发的程序之间如何进行通信?

Webservice

41、try{}里有一个return语句,那么紧跟在这个try后的finally{}里德code会不会被执行?什么时候被执行,在return之前还是后?

1. 2. 3. 4. 5. 6. 7. 8. 9. public class Test { public static void main(String[] args) { System.out.println(new Test().test());; } static int test() { int x = 1; try 10. { 11. return x; 12. } 13. finally 14. { 15. ++x; 16. } 17. } 18. } 19. /*---------执行结果 ---------*/ 20. 1 21. /*运行结果是1,为什么呢?主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。 22. */ 42、在web开发中,将GBK字符串,以utf-8的格式进行转换输出

new String(\;

43、有一个长字符串,它的内部包含多个子字符串、子字符串之间用空格隔离,给出算法:如何去掉里面重复的字符串。

44、java递归调用输出一个目录下的所有子目录及文件名称

1. 2. 3. 4. 5. 6. 7. 8. 9. public void fun(File file){ File[] files = file.listFiles(); for(File _file : files){ if(_file.isDirectory()){ fun2(_file); }else{ System.out.println(_file); } } 10. } 45、一个月的图片的网站,用户每检索一次、阅读一张、下载一张图片就会扣除相应的签署,如果让你来设计计费模板、采用何种方式最能

节省各方面的资源,谈谈想法!

46、java中可见的访问修饰符的含义

public:访问不受限制。

protected:访问仅限于包含类或从包含类派生的类型。只有包含该成员的类以及继承的类可以存取.

Internal:访问仅限于当前程序集。只有当前工程可以存取.

protected internal:访问仅限于当前程序集或从包含类派生的类型。 private:访问仅限于包含类型。只有包含该成员的类可以存取.

47、java用什么来判断对象是否是属于某个类或借口的事例?

Instanceof

48、Java中,int和Integer有什么区别

int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的默认

为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0, 所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。

在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是临时的,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0。

另外,Integer提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量

49、Java中,HashMap和Hashtable的区别?

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

就HashMap与HashTable主要从三方面来说。

1.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现

2.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

3.值:只有HashMap可以让你将空值作为一个表的条目的key或value

50、

51 Java中,String和StringBuffer的区别?

1, String : 字符串常量,字符串长度不可变!!!

2, StringBuffer : 字符串变量(Synchronized,即线程安全),如果要频繁对字符串内容

进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString();StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。append方法始终将这些字符添加到缓冲区的末端;而insert方法则在指定的点添加字符。

3, (*延伸) StringBuilder 字符串变量(非线程安全),这是在JDK5.0新增加的!!!,该对象是一个线程不安全的字符串容器,在单线程操作的情况下此对象可以用于取代StringBuffer!!!

4,(String 和 StringBuffer )两者者之间的区别 :

这两者之间的区别主要区别在性能上,String,每次对存放进String当中的字符串进行更改的时候,都会生成一个新的String对象,然后指针指向该对象(虽然Java不承认自己有指针这回事),而一旦当产生的没有引用指向对象过多的时候 ,这个时候GC就会出动,对其进行清理,这个时候,性能就会有所降低!!!而使用 StringBuffer的时候,每次都会对该对象本身进行操作,而不是去创建一个新的对象,所以在多数情况下还是推荐使用该对象!!!

但是某些特殊的情况下,使用String 并不会比StringBuffer慢!!! 例如 : String str = \;&& StringBuffer sb = new StringBuffer(); sb.append(\

在这里的String str = \+ \实际上被翻译成了 str = \

52、Thread和Runnable有什么不同?

首先,Java 中Thread 和 Runnable是实现并发线程的两种方式!!!, 通过两者中的任意一个都可以达到线程并发的目的!!!

区别 :

0,Thread 是一個 Class,Runnable 是一個 interface!!!

1,通过extends Thread,可获得start(), sleep(), 并覆盖run(), 使用时直接用start(),

但有时不太方便通过继承(extends)而进行多线程,例如已继承了其它Class(Java 不允许多重继承)时,就应该实现(implements) Runnable写多线程程序。

2,注意,implements Runnable创建的只有run()方法而没有start(),因此要利用其

它机制来启动。这要创建两个对象,

第一个是Runnable的,

第二个是Thread的,然后把第一个当成参数传给第二个!!!

3,由下面的程序可以看出,实现Runnable的多线程程序要比,继承Thread的多线程程

序灵活的多!!!

4,这里还有一点,就是说使用Runnable实现多线程可以达到资源共享目的,让多个

Thread对象接收同一个Runnable实现类的参数,这样就是多个线程操作同一块资源!!!

例如 :

1. 2. 3. 4. 5. 6. 7. 8. 9. //Runnable 接口的多线程程序举例!!! private class RunnableThread implements Runnable{ /*这个方法中写,多线程执行的程序!!!,因为这里是实现了Runnable所以就算再去继承其他的class也不会违反java成不能多继承的规定!!!*/ public void run(){ } } /*通过将Runnable的实现类作为参数传递给一个Thread对象,然后通过开启Thread对象,就能让其执行自己复写的方法,并且是并发操作!!!*/ Thread runnThread = new Thread(new RunnableThread()); RunnThread.start(); 10. /*1,继承自Thread类的多线程程序 11. private class GenThread extends Thread { 12. //这个方法中写,多线程需要执行的方法!!! 13. public void run() { 14. } 15. } 16. 17. Thread theGenThread = new GenThread(); 18. theGenThread.start(); 53、struts的Action是不是线程安全的?如果不是,有什么方法可以保证Action的线程安全,如果是,请说明原因

Struts1的实现底层是servlet,是单利的,所以在Struts1的开发过程中有很多的时候是需要注意单例导致的线程安全性的问题。

Struts2核心是拦截器,是多例的,每一次的请求都会创建一个新的实例出来,所以它本身是没有线程安全性问题的。

54、Spring的工作机制以及为什么要使用?

Spring的工作记机制:

1、 springmvc将所有的请求都提交给DispatcherServlet,它会委托应用系统

的其他模块负责对请求进行真正的处理工作。

2、 DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的

Controller。

3、 DispatcherServlet请求提交到目标Controller

4、 Controller进行业务逻辑处理后,会返回一个ModelAndView

5、 Dispatcher查询一个或多个ViewResolver视图解析器,找到

ModelAndView对象制定的视图对象 6、 视图对象负责渲染返回给客户端。

AOP:让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到

应用程序代码中。使用AOP后,公共服务(日志、持久性、事务等)就可以分解成方面并应用到域对象上。同时不会增加域对象的对象模型的复杂性。

IoC:允许创建一个可以构造对象的应用环境,然后向这些对象传递他们的协作对象。如倒置所表明的,IoC就像反过来的JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造的。因此由容器负责管理协作对象(collaborator)

Spring既是一个AOP框架,也是一个IoC容器。Spring最好的地方是它有助于您替换对象。有了Spring,只要用JavaBean属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的写作对象。

55、写出两种Java设计模式中不同的单例模式singleton

1. 2. 3. 4. 5. 6. 7. 8. 9. /*第一种(懒汉,线程不安全):所谓懒汉,就是说当这个对象在需要进行获取的时候,再去对该对象进行创建*/ public class Singleton{ private static Singleton instance; //通过将构造方法私有化达到,不能直接通过new 类名(),创建类的目的!!! private Singleton(){} public static Singleton getInstance(){ if (instance == null){ instance = new Singleton(); } 10. return instance; 11. } 12. } 13. 14. /*第二种(懒汉,线程安全):这里的线程安全看起来十分的美好,但是效率却十分的低,所以一般的情况下不会使用这种方式*/ 15. public class Singleton { 16. private static Singleton instance; 17. private Singleton(){} 18. //通过在此使用同步方法,进行将其变成线程安全的!!! 19. public static synchronized Singleton getInstance(){ 20. if (instance == null) { 21. instance = new Singleton(); 22. } 23. return instance; 24. } 25. } 26. 27. /*第三种(饿汉 : 线程安全) : 当该类一旦进行加载(classLoader机制),就需要对其该类中的对象进行创建,同样因此也就使其避免了线程的安全问题*/ 28. public class Singleton { 29. private static Singleton instance = new Singleton(); 30. private Singleton(){} 31. public static Singleton getInstance() { 32. return instance; 33. } 34. } 35. 36. /*第四种(枚举):该方法是Effective Java作者Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,保证只有一个实例,即使使用反射机制也无法多次实例化一个枚举量*/ 37. public enum Singleton { 38. INSTANCE; 39. private Singleton(); 40. } 56、如果client已经有一个接口来访问所需要的服务,我们已经有现成的类来提供这样的服务,但是服务提供的方法和client访问所需要的方法不匹配,那么如何设计变成来提供client服务?

可以写一个代理类,将client中接口的方法写在代理类中,在代理类中调用服务提供的方法。如果用的spring的话,通过配置就能解决这个问题。

57、在HTML中如何包含JavaScript?

1. 2. 3. 4. 5. 6. 7.

8. 9. 11. 12. 13. 14. 15. 18. 19. 20. 21. 进入 58、Javascript中,对象person有name属性,写出两种获取name属性的方法

1. 2. 3. 4. Person.name Person[name] 59、GC是什么,为什么要有GC?

1,GC : 垃圾回收 (GarbageCollection),Java的内存管理,其内置的垃圾回收,是

Java语言的优秀成果,它允许开发者创建新的对象不需要明确内存分配和释放,因为垃圾回收器自动回收内存当中的对象。

2,垃圾收集释放从手工处理内存释放的程序员。其结果是,某些类别的缺陷被消除

或显着减少:这也正是Java的特点(相对于C++来说,程序员不再需要通过痛苦的记忆哪里的内存是释放掉的,而哪一些是没有释放掉的)

内存不安全释放的问题 :

1,当一块内存被释放,同时还存在着指向它,而那些指针中的一个被废弃发生。届时内

存可能已被重新分配到其他使用,具有不可预知的结果。

2,当程序试图发生释放的内存已被释放,并可能已经被再次分配的区域。

3,某些种类的内存泄漏,其中一个程序无法释放由已成为对象占用的内存可达,从而导致内存消耗殆尽。(垃圾收集通常不处理的数据是可到达的无界积累,但实际上将不被使用的程序)……

60、XML文档定义有几种形式?他们之间有何本质区别?解析XML文档有几种方式?

XML文档定义有几种形式:dtd文档类型定义和SchemaXML模式 本质区别:

XML Schema 和DTD都用于文档验证

XML Schema 是内容开放模型,可扩展,功能性强,而DTD可扩展性差。

XML Schema 支持丰富的数据类型,而 DTD不支持元素的数据类型,对属性的类型定义也很有限。

XML Schema 支持命名空间机制,而DTD不支持。

XML Schema 可针对不同情况对整个XML 文档或文档局部进行验证;而 DTD缺乏这种灵活性。

XML Schema 完全遵循XML规范,符合XML语法,可以和DOM结合使用,功能强大;而DTD 语法本身有自身的语法和要求,难以学习。 解析XML文档有几种方式:

DOM:所有内容都封装成对象,并且装入内存中,如果是大本文处理的时候,性能下降。可以做增删改查等一系列操作。

Sax:事件驱动.在读取的过程中.将遇到的文档的各个部分的内容.拆分各个事件.当我们

遇到什么事件的时候,可以选择做相应事.sax只能做查询。

61、什么是java序列化,如何实现java序列化?

我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java对象变成某个格式的字节流再传输,但是,jre本身就提供了这种支持,我们可以调用OutputStream的writeObject方法来做,如果要让java 帮我们做,要被传输的对象必须实现serializable接口,这样,javac编译时就会进行特殊处理,编译的类才可以被writeObject方法操作,这就是所谓的序列化。需要被序列化的类必须实现Serializable接口,该接口是一个mini接口,其中没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的。 例如,在web开发中,如果对象被保存在了Session中,tomcat在重启时要把Session对象序列化到硬盘,这个对象就必须实现Serializable接口。如果对象要经过分布式系统进行网络传输或通过rmi等远程调用,这就需要在网络上传输对象,被传输的对象就必须实现Serializable接口。

62、使用js和JQuery的方式获取表达中对象

1. 2. 3. 4. 5. 6. 7. 8. Js : document.getElementById(“aa”)查询id为aa的元素, document.getElementsByName(“aa”)取name为aa的元素, document.getElementsByTagName(\)获取标签名 jquery对应有$(\),$(\),$(\) 如$(\)取class为aa的元素,$(\)取页面type=text的输入元素等很多,功能比js强大很多 //document.getElementById(“xxx”) //jQuery(“#xxx”); 63、JQuery中什么方法用来把内容追加到指定元素的末尾?

1. 2. 3. 4. 5. 6. JQeuery可以使用 after() 方法在被选元素后插入指定的内容。 语法: $(selector).after(content) $(“p”).after(function(){ //为 p元素的后面需要添加的内容 }); 64、JQuery给按钮添加点击事件?

1. 2. 3. 4. JQuery给 按钮添加事件的语法格式是:$(selector).click() 例如:$(selector).click(function(){ //添加JQuery代码 }); 65、是否可以从一个static方法内部发出对非static方法的调用?

不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。

66、如何把一段逗号分隔的字符串转换成一个数组?

1. 2. 3. 4. 5. 6. 7. 8. 9. //方式一:使用String的split 方法 public static String[] convertStrToArray(String str){ String[] strArray = null; strArray = str.split(\); return strArray; } //方式二:使用StringTokenizer实现 //api说明:StringTokenizer 是出于兼容性的原因而被保留的遗留类 //(虽然在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用 10. //String 的 split 方法或 java.util.regex 包 11. public static String[] convertStrToArray2(String str){ 12. StringTokenizer st = new StringTokenizer(str,\); 13. String[] strArray = new String[st.countTokens()]; 14. int i=0; 15. while(st.hasMoreTokens()){ 16. strArray[i++] = st.nextToken(); 17. } 18. return strArray; 19. } 67、同步和异步有何异同?什么在情况下分别使用?举例说明

1. 2. 3. 4. 5. 6. 7. 8. 9. /*1、举个例子:普通B/S模式(同步)AJAX技术(异步) 同步:通常的意义就是当做了一件与服务器进行交互的事情之后,需要等待服务的响应,然后再进行下一步的操作,也就是常规的与服务器交互的操作机制!!! 步骤 : 提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步: 当用户进行了与服务器的交互操作之后可以继续做其他的事情,而不需要进行等待,因为其所作的更改对于整个页面来说也是局部操作!!! 步骤 : 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕 */ //2、 $.ajax({ type: \, 10. url: \, 11. //传输格式,这里是false,同步传输!!!,通过该参数,修改 传输类型//true则表示为异步传输 12. async: false, 13. success: function(data){ 14. //获取data数据!!! 15. } 16. }); 17. 18. /*3、使用场景!!! 19. 第一、请求的提交是为了页面数据的显示,这时候用户一般不希望看到页面的刷新,是使用AJAX的一个最佳时候。--异步 20. 第二、如果请求提交后,用户能从页面感觉到提交结果,这时候,也最好不要有页面刷新,推荐使用AJAX技术。--异步 21. 第三、如果请求提交后,用户不能从页面感觉到提交动作,如绝大多数时候的数据的增加和修改,这时候则需要页面刷新,不能使用AJAX技术。 22. 第四、复杂的UI,以前对于复杂的C/S模式的UI,B/S模式一向采取逃避的方法,现在则可以放心大胆的使用AJAX来加以解决。*/

68、

69、AOP和IOC的概念以及在Spring中是如何应用?

1.Spring实现了工厂模式的工厂类(在这里有必要解释清楚什么是工厂模式),这个类名为BeanFactory(实际上是一个接口),在程序中通常BeanFactory的子类ApplicationContext。Spring相当于一个大的工厂类,在其配置文件中通过元素配置用于创建实例对象的类名和实例对象的属性。

2. Spring提供了对IOC良好支持,IOC是一种编程思想,是一种架构艺术,利用这种思想可以很好地实现模块之间的解耦。IOC也称为DI(Depency Injection),什么叫依赖注入呢?

1. Class Programmer 2. { 3. Computer computer = null; 4. public void code() 5. { 6. //Computer computer = new IBMComputer(); 7. //Computer computer = beanfacotry.getComputer(); 8. computer.write(); 9. } 10. public void setComputer(Computer computer) 11. { 12. this.computer = computer; 13. } 14. } 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 70、mybaits与Hibernate对比有哪些不同点

相同点:屏蔽jdbc api的底层访问细节,使用我们不用与jdbc api打交道,就可以访问数据。jdbc api编程流程固定,还将sql语句与java代码混杂在了一起,经常需要拼凑sql语句,细节很繁琐。

mybatis的好处:屏蔽jdbc api的底层访问细节;将sql语句与java代码进行分离;提供了将结果集自动封装称为实体对象和对象的集合的功能,queryForList返回对象集合,用queryForObject返回单个对象;提供了自动将实体对象的属性传递给sql语句的参数。 Hibernate是一个全自动的orm映射工具,它可以自动生成sql语句,mybatis需要我们自己在xml配置文件中写sql语句,hibernate要比mybatis功能负责和强大很多。因为hibernate自动生成sql语句,我们无法控制该语句,我们就无法去写特定的高效率的sql。对于一些不太复杂的sql查询,hibernate可以很好帮我们完成,但是,对于特别复杂的查询,hibernate就很难适应了,这时候用mybatis就是不错的选择,因为mybatis还是由我们自己写sql语句。

71、Extjs使用中firebug返回一个TypeError:c is undfined,请问意思?

第一你没有按照extjs的标准传入参数或者传入的参数是空的 第二你的对象在当前页面不存在。

可以确定是你的代码出错,调试方法:逐步注释自己写的js代码,直到无错误,再逐步恢复至有错误,重复持过程不断缩小范围,直到找到错误位置,再仔细分析错误原因当然对自己水平很有信心可以加载压缩前的ext代码,那样根据错误位置可以大致判断错误原因

72、HashMap和Hashtable的区别

1、同步或线程安全:这是两者最重要的区别。HashMap的是不同步的,不是线程安全的,另一方面,Hashtable是线程安全的,同步的。

1-1、何时使用HashMap:答案是,如果您的应用程序不需要任何多线程任务,换句话说HashMap的是对于非线程安全应用程序的更好的选择。哈希表应当在多线程应用中使用。

2、null键和空值:HashMap是允许空键空值的,而Hashtable是不允许空键空值的。 3、迭代器类型:HashTable使用Enumeration,HashMap使用Iterator。 4、性能:HashMap因为是线程不安全的,效率要比Hashtable高。

5、Hashtable是Dictionary类现在是在JDK 1.7过时的子类,因此,它已不再使用。

73、

74、什么是Ajax

1,AJAX =异步JavaScript和XML。

AJAX是用于创建快速,动态网页的技术。

AJAX允许网页可以通过异步交换少量数据与幕后的服务器进行更新。这意味着,有可

能更新网页的部分,无需刷新整个页面。

经典的网页,(不使用AJAX)必须重新加载整个页面如果内容应该改变。

谷歌地图,Gmail,YouTube和Facebook的标签:利用AJAX应用的例子,当然最

常见的百度搜索框也是使用的AJax

1. 2. 3. 4. 5. 6. 7. 8. 9. 2,AJAX使用 1,//原始使用方式!!! function showHint(str) { //判断字符串是不是为空,如果是空,那就直接返回!!! if (str.length == 0){ document.getElementById(\).innerHTML = \; return; } else { //创建一个AJax引擎对象!!! 10. var xmlhttp = new XMLHttpRequest(); 11. //设置回调函数!!! 12. xmlhttp.onreadystatechange = function(){ 13. //判断请求状态是不是成功!!!,成功就获取响应的数据,否则数据获取是没有意义的!!! 14. if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ 15. document.getElementById(\).innerHTML = xmlhttp.responseText; 16. } 17. } 18. //打开链接,第一个参数是请求方式,第二个参数是请求地址!!! 19. xmlhttp.open(\, \ + str); 20. //请求体,如果求情方式是Post这里必须填写!!! 21. xmlhttp.send(); 22. } 23. } 24. 2,//JQuery使用方式!!! 25. $.ajax({ 26. //请求地址 27. url: \, 28. //请求方式 29. type:\, 30. //回调函数 31. succeed:function (mes){ 32. //这个mes就是 33. } 34. }); 75、j2ee常用的设计模式?描述Singleton的作用

0,Java当中总共包含以下23种设计模式!!!

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

1,常用的有 :

0,工厂方法模式、工厂设计模式中包含三种,这里是指普通工厂、就是建立一个工

厂类,对实现了同一接口的一些类进行实例的创建。

1,单例模式、单例对象(Singleton)是一种相对来说更常用的设计模式。在Java

应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。

2,适配器模式、适配器模式将某个类的接口转换成客户端期望的另一个接口表示,

目的是消除由于接口不匹配所造成的类的兼容性问题。

主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 3,装饰器模式、顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是

动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例

4,代理模式、代理模式就是多一个代理类出来,替原对象进行一些操作,同样也

是对类进行动态增强的一种方式

5,策略模式等、策略模式定义了一系列算法,并将每个算法封装起来,使他们可

以相互替换,且算法的变化不会影响到使用算法的客户

-----------------------------以上是常用的六种设计模式----------------------------------

2,Singleton的作用,也就是Singleton的好处,利用这个单例实际模式可以做到什么

1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。(这个

时候如果不需要多个对象,就可以使用单例设计模式进行搞定)!!!

2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。-- 这条与

第一条,的作用就是减少系统开销,降低内存使用!!!

3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的

话,系统完全乱了。--有效的对系统进行控制!!!

4、再比如有些软件的配置文件,不管使用该软件当中什么工具,都会对同一个配置

文件进行读取和修改,这就是单例设计的思想!!!--使用该思想,可以实现某些业务需求!!!

76、XML的解析有哪几种方式,并用其中一种写出解析XML实例

XML的解析方式有很多种,目前常用的主要有:SAX解析和DOM解析

1、SAX解析是基于事件驱动的解析,处理的优点类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。另一方面,由于应用程序没有以任何方式存储数据,所以sax解析不能对文档进行增删改的操作。

2、DOM 解析是的基于文档驱动的解析,类似树的处理,具有以下几个特点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。另一方面,在内存中构造这样的树涉及大量的开销。大型文件完全占用系统内存容量的情况并不鲜见。

此外,创建一棵 DOM 树可能是一个缓慢的过程,因此不适合解析大文档。

77、什么是WEB SERVICE?SOAP和WSDL是什么?

Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。Web Service技术,能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。

SOAP是简单对象访问协议,是一种轻量的、简单的、基于 XML 的结构化数据交换的一个协议规范,用于WebService。它被设计成在 WEB 上交换结构化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP在HTTP协议的基础上时,把编写成XML的REQUEST参数, 放在HTTP BODY上提交给WEB SERVICE服务器(SERVLET,ASP等) 处理完成后,结果也写成XML作为RESPONSE送回用户端,为了使用户端和WEB SERVICE可以相互对应,可以使用WSDL作为这种通信方式的描述文件,利用WSDL工具可以自动生成WS和用户端的框架文件,SOAP具备把复杂对象序列化捆绑到XML里去的能力。

78、举例你所熟悉的设计模式,单例、工厂除外

装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰模式的特点

(1) 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互。

(2) 装饰对象包含一个真实对象的引用。

(3) 装饰对象接受所有来自客户端的请求。它把这些请求转发给真实的对象。

(4) 装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。

79、ext的常用panel

一、属性

frame:布尔类型true 或 false ,为true时表示边框为圆角且具有背景色,取false则反之。 xtype:在EXTJS的可视化组件部署中的一种机制,即通过指定xtype的值,来告诉容量如何初始化所包含的级件,如xtype:\表示使用Ext.form.TextFile来进行初始化当前组件。 二、方法

add(Ext.Component/Object_component):添加一个组件到面板中,运行时方法。 addButton( String/Object config, Function handler, Object scope ) :添加一个按钮到面板中,设计时方法(对象在未构造之前调用)。

_panel.addButton({text:\确 定\按默认宽度自适应创建 _panel.addButton(new Ext.Button({text:\取消\三、事件

render:当前对象被构造后触发(设计时事件)。

renderto(构造参数):将当前对象所生成的HTML对象存放在指定的对象中(运时时事件)。 两者不能同进使用,否则render不起作用。 四、构造参数

items:指定包含在面板中组件的配置数组如textField。 buttons:指定包含面板中按钮的配置数组。

80、java堆和栈的区别

Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程,主要存放线程执行过程中的局部变量,方法的返回值,基本类型的变量(,int, short, long, byte, float, double, boolean, char)以及方法调用的上下文。栈空间随着线程的终止而释放,栈的优势是,存取速度比堆要快,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈有一个很重要的特殊性,就是存在栈中的数据可以共享。

Java中堆是由所有的线程共享的一块内存区域,堆用来保存各种JAVA对象,比如数组,线程对象等,

java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等 指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时 动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

81、SSH/SSI中的工作流程

SSH 为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开

源框架。

集成SSH框架的系统从职责上分为三层:表示层、业务逻辑层、数据持久层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO(Data Access Objects)接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring做管理,管理struts和hibernate。

SSI的框架主要是由struts2,spring以及ibatis组成,或springMVC,spring以及ibatis组成,他们负责各层之间的交互与协作,从而实现整个web端的功能实现与整合。Struts目前主要负责数据传递和控制方面,spring则依靠其强大的依赖注入技术实现了类似bean托管和整合等功能,当然这只是spring功能中的冰山一角,而ibatis作为一种轻量级的OR Mapping框架,提供了半自动化对象关系映射的实现,自由度相对于hibernate更高。SSI框架能够降低我们代码的耦合度,增强了代码的健壮性和可重用性,加快了开发速度,但是也有一些不足之处,比如由于三种框架的配置文件较多,也给我们带来了一些不便,特别是对于较小的应用来说更是如此。

82、WebService中的SOAP是什么协议

SOAP是简单对象访问协议,是一种轻量的、简单的、基于 XML 的结构化数据交换的一个协议规范,用于WebService。它被设计成在 WEB 上交换结构化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议

(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP在HTTP协议的基础上时,把编写成XML的REQUEST参数, 放在HTTP BODY上提交给WEB SERVICE服务器(SERVLET,ASP等) 处理完成后,结果也写成XML作为RESPONSE送回用户端,为了使用户端和WEB SERVICE可以相互对应,可以使用WSDL作为这种通信方式的描述文件,利用WSDL工具可以自动生成WS和用户端的框架文件,SOAP具备把复杂对象序列化捆绑到XML里去的能力。

83、当一个线程进入一个对象的synchronized方法后,其他线程是否可进入此对象的其他方法?为什么?

分情况而定:

1.其他方法前是否加了synchronized关键字,如果没加,则能。 2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。

3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则能。 4.如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this

84、99乘法表

1. 2. 3. 4. 5. 6. 7. 8. /*主要是利用双层for循环来实现,外层循环9次,内层每次循环的次数与外层是第几次循环有关,还要考虑字符串的拼接及换行和制表符的问题,具体代码如下:*/ public class s99{ public static void main(String[] args){ for (int i=1;i<=9;i++) { for (int j=1;j<=i;j++){ System.out.print(i+\+j+\+(i*j)+\); } System.out.print(\); 9. } 10. } 11. } 85、常用的字符转码方式什么?举例说明

1.escape方法对String对象编码,escape方法返回一个包含了\转义序列\的字符串值。 除了ASCII字母和数字,以及这几个符号 *+-/.@_外(共有10+52+7=69个字符不会被编码), 其他所有的字符都会被转义序列替换,标准ASCII码内的字符(0-127)和扩展的ASCII码内 的字符(128-255)都用%xx编码形式代替。字符值大于255的以unicode%uxxxx格式存储。 注意 :escape方法不能够用来对统一资源标示符URI进行编码,因为=&?#等会被编码. 对URI编码应使用encodeURI,对URI参数用encodeURIComponent方法。

2.encodeURI除了ASCII字母和数字,以及这几个符号 *+-/.@_!#$&\\'(),:=?~外(共有10+52+20=82个字符不会被编码),

其他所有的字符都会被转义序列替换,标准ASCII码内的字符(0-127)和扩展的ASCII码内 的字符(128-255)都用%xx编码形式代替。字符值大于255的以utf-8多字节%xx格式存储。 在URI中有特殊意义的字符如?=&等不会被编码。

3.encodeURIComponent除了ASCII字母和数字,以及这几个符号 *-_.~!'()外(共有10+52+9=71个字符不会被编码),其他所有的字符都会被转义序列替换,标准ASCII码内的字符(0-127)和扩展的ASCII码内的字符(128-255)都用%xx编码形式代替。字符值大于255的以utf-8多字节%xx格式存储。可以看到?=&等在URI中有特殊意义的字符也会被编码。 encodeURIComponent方法在编码单个URIComponent(指请求参数)应当是最常用的, 它可以将参数中的中文、特殊字符进行转义,而不会影响整个URL。

86、如何给tomcat指定大小的内存

Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。有以下几种方法可以选用: 第一种方法:

Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下设置:

JAVA_OPTS='-Xms【初始化内存大小】-Xmx【可以使用的最大内存】' 需要把这个两个参数值调大。例如: JAVA_OPTS='-Xms256m-Xmx512m'

表示初始化内存为256MB,可以使用的最大内存为512MB。 第二种方法:环境变量中设 变量名:JAVA_OPTS

变量值:-Xms512m-Xmx512m

第三种方法:前两种方法针对的是bin目录下有catalina.bat的情况(比如直接解压的Tomcat等),但是有些安装版的Tomcat下没有catalina.bat,这个时候可以采用如下方法,当然这个方法也是最通用的方法:

打开tomcatHome/\\bin/\\tomcat5w.exe,点击Java选项卡,然后将会发现其中有这么两项:Initialmemorypool和Maximummemorypool.Initialmemorypool这个就是初始化设置的内存的大小。Maximummemorypool这个是最大JVM内存的大小设置完了就按确定然后再重启TOMCAT你就会发现tomcat中jvm可用的内存改变了。

87、getParameter与getAttribute的区别?

HttpServletRequest类既有getAttribute()方法,也有getParameter()方法,这两个方法有以下区别:

(1)getAttribute是返回对象,必须先存再取才能取到值,否则取不到,即在域空间中获取值;getParameter返回字符串,一般用在两个Web组件之间为链接关系时,类似post,get等方式传入的数据,在被链接的组件中通过getParameter()方法来获得请求参数,即在请求的过程中获取值。

(2)HttpServletRequest类有setAttribute()方法,而没有setParameter()方法。

88、数据库连接池的工作机制是什么?

连接池的实现是以空间换时间。

J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

89、Spring3中依赖注入方式?

依赖注入的3种实现方式分别是:

接口注入(interface injection)接口注入指的就是在接口中定义要注入的信息,并通过接口完成注入。

Set注入(setter injection)Set注入指的就是在接受注入的类中定义一个Set方法,并在参数中定义需要注入的元素。

构造注入(constructor injection)构造注入指的就是在接受注入的类中定义一个构造方法,并在参数中定义需要注入的元素。

90、Hibernate中怎么样实现类之间的关系?

实体类间存在三种关系,一对一,一对多(或者说多对一),多对多。类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、来实现关系的。

91、struts的工作原理

Struts的流程

服务器启动后,根据web.xml加载ActionServlet读取struts-config.xml文件内容到内存。

以登陆为例:第一次进login.jsp会先实例化Form、把默认值赋给表单元素。

输入用户名密码提交表单、提交到action属性的login.do,通过ActionServlet读struts-config.xml文件找到 action下的path属性找到.do,通过name属性找form-beans中的form-bean的name属性得到ActionForm的包名类名,先实例化form,把表单的值填充给form,调用form的validate方法验证、ActionErrors返回null表示验证通过,否则失败返回input指定的页面.验证通过会实例化Action,执行Action的excute方法。

92、final,finally,finalize的区别

1.final为关键字,final定义基本类型变量时,要求变量初始化必须在声明时或者构造函数中,不能用于其它地方。该关键字定义的常量,除了初始化阶段,不能更改常量的值; final

本文来源:https://www.bwwdw.com/article/0cmp.html

Top