搜档网
当前位置:搜档网 › 平安科技Java面试题集[1]

平安科技Java面试题集[1]

平安面试题集

一、基础知识问题

1.jsp九大内置对象?

答:(request,response,pageContext,session,application,out,config,page,exception);

2.jsp与servlet的区别?

答:jsp编译后是‘类servlet’,jsp是servlet技术的扩展,是servlet的简易方式,jsp注重于视图,而servlet更注重逻辑。

3.重定向(sendRedirect)与转发(forward)的区别?

答:一个值被存在request中,如果用的重定向方式跳转到页面的话,页面将取不到request对象中的值,而转发就能取到。

调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;

而调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变.

4.怎么解析XML,解析XML的方式有那些?

答:没答完整。

常用方式:dom、sax、JDOM、DOM4J

dom:由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX 那样是一次性的处理。DOM 使用起来也要简单得多。

另一方面,对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好

sax:这种处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。

这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者DOM 快许多。

jdom:JDOM 与DOM 主要有两方面不同。首先,JDOM 仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。

第二,API 大量使用了Collections 类,简化了那些已经熟悉这些类的Java 开发者的使用

dom4j:它合并了许多超出基本XML 文档表示的功能,包括集成的XPath 支持、XML Schema 支持以及用于大文档或流化文档的基于事件的处理。

它还提供了构建文档表示的选项,它通过DOM4J API 和标准DOM 接口具有并行访问功能。

DOM4J 使用接口和抽象基本类方法。DOM4J 大量使用了API 中的Collections 类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。

直接好处是,虽然DOM4J 付出了更复杂的API 的代价,但是它提供了比JDOM 大得多的灵活性。

5.为什么要建立索引?

答:索引方便用户对数据的访问。在应用系统中,为数据库中的表建立正确、合理的索引,可以极大地提高应用系统的性能:

在存取数据时,避免进行表扫描。没有索引,对表中数据的任何访问都要进行表扫描。在表上建立索引,虽然不会完全避免表扫描的执行,但会大大降低它的执行次数。

6.唯一索引与主键的区别?

主键约束是不可以为空也不可以重复,而唯一索引是可以为空不可以重复。

两者的概念不一样,主键是相对表而言,用来防止表中的数据元素重复而设定的唯一标识,索引是为了加快数据检索,提高数据库性能而建立的。

一个表的主键只能有一个,但是唯一索引可能有多个。

主键一定是唯一索引,唯一索引不一定是主键。

7.知不知道Collection?

答:Collection是最基本的集合接口,它的子接口有List、Set,List下又有LinkedList、ArrayList、Vector。(千万不要把Map说进去了,因为Collection跟Map是同级别的)。

8.Collection与Collections的区别?

答:Collection:java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。

Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。

Collections:java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

(例:申明一个list,并向list里添加值,然后通过Collections.sort(list),此list里的值就会排序).

9.Hashtable和HashMap的区别:

答:1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;

2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;

而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:Map Collections.synchronizedMap(Map m)

这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。

3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。

因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。

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

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许

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

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

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

10. 数字签名

概念:数字签名就是我们现实签名的电子化,是用来给电子消息进行签名的方法。一般认为附加上数据单元上的数据或对数据单元的密码转换,这些附加数据或密码转换能被消息接收者用来辨别消息的来源,消息的安全完整性,防止第三方伪造,称为数字签名。

如果A要把消息传给B。要用到A的私钥和A的公钥。

11.Http1.0和Http1.1的区别

1.HTTP/1.0协议使用非持久连接,即在非持久连接下,一个tcp连接只传输一个Web对象.HTTP/1.1默认使用持久连接(然而,HTTP/1.1协议的客户机和服务器可以配置成

使用非持久连接).在持久连接下,不必为每个Web对象的传送建立一个新的连接,一个连接中可以传输多个对象!

2.HTTP/1.1对请求和响应增加了请求头和响应头。

3.HTTP1.1支持断点续传,HTTP1.0不支持。

4.HTTP1.1通过Host请求头部,使得在一台WEB服务器可以用同一个IP,端口,使用不同的主机名创建多个WEB虚拟站点

5.HTTP1.1有身份认证机制,HTTP提供特殊的状态码和头部来帮助Web站点执行身份认证

12.http和https的区别

1.http使用的端口号是80,而https使用但是43;

2.Https需要到证书管理机构申请证书。

3.HTTP的连接简单,无状态,明文传输。Https采用SSL加密的传输+HTTP协议构建的可进行加密传输、身份认证的网络协议更安全

13.XHTML和HTML的区别

XHTML 可以认为是XML 版本的HTML,为符合XML 要求,XHTML 语法上要求更严谨些,XHTML 要求正确嵌套XHTML 所有元素必须关闭,XHTML 区分大小写,XHTML 属性值要用双引号,XHTML 用 id 属性代替 name 属性,XHTML 特殊字符的处理,XHTML不能用属性简写。

14.运行时异常和一般异常有什么区别!

异常表示程序运行过程中可能出现的非正常状态,

运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误.java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常.

15.异常需要继承哪个类

基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。

16.常见的异常有哪些?

1、SQLException:操作数据库异常类

2、ClassCastException:数据类型转换异常。

3、NumberFormatException:字符串转换为数字类型时抛出的异常。

4、ArrayIndexOutOfBoundsException 数组越界

5、StringIndexOutOfBoundsException 字符串越界

6、UnsupportedOperationException 该操作不被支持

7、ArithmeticException 算术错误

8、IllegalArgumentException 非法参数

17.重载和重写的区别

重载就是一个类中多态性的一种表现,如果在一个类中定义了多个同名的方法,他们或有不同的参数个数或有不同的参数类型,则称为方法的重载。重载可以改变返回值类型。因为构造方法不能被继承,所以构造方法能被重载不能被重写。

重写就是子类与父类之间多态性的一种表现,如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写

18.在什么情况下建立索引?如果我的数据访问量都很大那怎么办?

(一):在反问量过大或是访问频繁或访问大表中一小部分的时候需要建立索引,以便提高效率。

(二):可以对大表进行分区,减少I/O操作。

19.子类可以继承父类的private属性吗?

不能,子类只能继承父类的非私有性方法及属性

20.反射机制是什么?

反射机制是JAVA里面的一个特性,在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

21.事物是怎么控制的?

事物是通过并发控制的,

22.事物有哪些特性

原子性,一致性,隔离性,持久性

23. A:Oracle中索引的是怎么一回事?干什么用的?

答:索引是数据库专门为提高查询性能而设定的一种机制

B:那索引会影响插入的性能吗?

答:会,如果用的得当是会提高其性能,如果用的不恰当的话就会影响性能,因为插入一条数据要给数据建立索引,还要分配存储空间,并且可能出现索引区块的结构变化。

24:JDBC中Statement跟PreparedStatement有什么不同?

答:后者采用的是预编译方式,所以它的安全行要比前的高

后者的执行速度要比前者快很多

25.Servlet是继承那个类,说出里面几个常用的方法?

答:继承的是HttpServlet类,里面的方法有:init()、destroy()、service()、doGet()、doPost()

26.EJB熟悉吗?

答:比如:Session Bean、Entity Bean、Massage Driver Bean)

27.Applet的作用:

在Java Applet中,可以实现图形绘制,字体和颜色控制,动画和声音的插入,人机交互及网络交流等功能。

28.weblogic的配置

29.403表示什么错误

禁止访问。

30:weblogic中部署EJB的jar包需要包含的部署描述符文件有:

ejb-jar.xml;weblogic-ejb-jar.xml

31.JA V A源代码的编译器是:

答:javac

32.Oracle数据库属于哪种类型的数据库

答:关系型数据库

33.在JDBC的程序中,Statement的对象表示什么?

答:向数据库发送SQL语句的对象

34.EJB部署描述文件是什么?

Ejb-jar.xml

35.在项目开发中,为了减少软件开发中的技术风险,程序员采取的方式是什么?

答:代码复审;技术测试

36:你了解异常吗?

了解。异常是java程序执行时遇到的非正常情况或意外行为。它可以分为一般异常和运行时异常。一般异常是要自己捕获的,运行时异常不需要自己捕获的。

37:你见过索引吗?恩。访问索引有哪三种方式?

访问索引三种方式:索引唯一扫描,如主键,唯一索引。

索引范围扫描,如有比较符合的时候。

全索引扫描。

38:hibernate是干什么的?有什么作用?

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

39。MVC是什么,能具体讲下吗?

MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很大地实现了数据层与表示层的分离.

MVC作为一种开发模型,通常用于分布式应用系统的设计和分析中,以及用于确定系统各部分间的组织关系.

对于界面设计可变性的需求,MVC(Model-View_Controller)把交互系统的组成分解成模型、视图、控制器三种部件。

40:你用过重载吗?

重载的方法和构造函数(构造函数只能被重载)使用具有不同参数列表的相同方法名称(或构造函数)。

可以改变被重载的方法的修饰符吗?重载时可以改变方法的修饰符的、

41:jfreechart是干什么的?jfreechart是开源的吗?

他是用来做图形报表的,用的时候导进去就可以了,jfreechart是开源的,你可以自己编写jfreechart;

42.String与StringBuffer的区别..?

每次对String类型进行赋值操作是都将生成一个新的String实例;

StingBuffer则不然,它始终是同一个实例

所以在经常动态的改变字符串的值是用StingBuffer效率比较高。

43.数据库索引...?

主要有唯一索引,主键索引,聚集索引,函数索引,域索引等..

优点:

第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。

第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

缺点:

第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。

第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

应该在那些列上创建索引:

在经常需要搜索的列上,可以加快搜索的速度;

在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;

在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;

在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;

在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;

在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

44.java集合...?

List、Set、Map是这个集合体系中最主要的三个接口。

其中List和Set继承自Collection接口

Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。

List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。

Map也属于集合系统,但和Collection接口不同。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、TreeMap 和Hashtable是三个主要的实现类。

SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。

45.关于Serializable接口..?

任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。这样子极大的简化了类的设计。只要设计一个保存一个读取功能就能解决上面说得所有问题。

实现serializable接口的作用是就是可以把对象存到字节流,然后可以恢复!

所以你想如果你的对象没实现序列化怎么才能进行网络传输呢,要网络传输就得转为字节流,所以在分布式应用中,你就得实现序列化,如果你不需要分布式应用,那就没那个必要实现序列化

软件设计:

https://www.sodocs.net/doc/af13882082.html,/wiki/%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1

!

46. 用tcp作为传输协议,要在服务器和客户端之间建立几次通信。

由于TCP和IP是大家熟悉的协议,以至于用TCP/IP或IP/TCP这个词代替了整个协议集。....

建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-

close)造成的。... TCP是因特网中的传输层协议,使用三次握手协议建立连接。

47什么是分布式事物?

分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。为了实现分布式事务,需要使用下面将介绍的两阶段提交协议。* 阶段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来异常结束事务。如果任意一个资源决定异常结束事务,则整个事务取消,不会进行资源的更新。否则,事务将正常执行,除非发生灾难性的失败。为了防止会发生灾难性的失败,所有资源的更新都会写入到日志中。这些日志是永久性的,因此,这些日志会幸免遇难并且在失败之后可以重新对所有资源进行更新。* 阶段二:只在阶段一没有异常结束的时候才会发生。此时,所有能被定位和单独控制的资源管理器都将开始执行真正的数据更新。在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。为了实现分布式事务,必须使用一种协议在分布式事务的各个参与者之间传递事务上下文信息,IIOP便是这种协议。这就要求不同开发商开发的事务参与者必须支持一种标准协议,才能实现分布式的事务。

48.什么是分布式开发?

在数据库应用程序的开发过程中,网络已走到社会的各个角落。从金融行业的银行联网、交通行业的售票系统、公安系统的全国户籍管理等等,这些企业或行业单位之间地理分布性或业务分布性,使得一个企业或行业拥有多个网络服务器,如何在这种分布式的网络环境下实现高效的数据库应用程序的开发是一个

重要的问题。

分布式应用开发简单的说,是指将用户界面、控制台服务、数据库管理三个层次部署在不同的位置上。其中用户界面是客户端实现的功能,控制台服务是一个专门的服务器,数据管理是在一个专门的数据库服务器上实现的。

49.EJB 中SessionBean 与EntityBean的区别?

EJB 包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT 等技术实现。

SessionBean 在J2EE 应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB 组件。EntityBean 被用来代表应用系统中用到的数据。对于客户机,SessionBean 是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。

对于客户机,EntityBean 是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。

50.有状态的SeesionBean与EntityBean的区别?

Session Bean 还可以再细分为Stateful Session Bean 与Stateless Session Bean ,这两种的Session Bean 都可以将系统逻辑放在method 之中执行,不同的是Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的Stateful Session Bean的实体。Stateless Session Bean 虽然也是逻

辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫Stateless Session Bean 的时候,EJB Container 并不会找寻特定的Stateless Session Bean 的实体来执行这个method。换言之,很可能数个使用者在执行某个Stateless Session Bean 的methods 时,会是同一个Bean 的Instance 在执行。从内存方面来看,Stateful Session Bean 与Stateless Session Bean 比较,Stateful Session Bean 会消耗J2EE Server 较多的内存,然而Stateful Session Bean 的优势却在于他可以维持使用者的状态。

实体Bean如前一题。

51.什么情况下用有状态的SessionBean.举例你曾经在哪里用到了?

可以在不同的方法调用间保持针对各个客户端的状态。

与客户端的联系必需被维持;通常开销较大。

有状态会话Bean会保存客户端的状态。

如果要频繁的访问,并且多次访问之间会共享一些信息,这时候应该使用有状态会话Bean。对于不经常使用的功能,可以使用无状态会话Bean。无状态会话Bean

的使用要比有状态会话Bean的使用多。

52为什么要用Spring。有什么好处。

(1)松耦合问题.

这个问题我不费太多笔墨.因为太多的文章解释这个问题. 大名叫:依赖注入. 说白了就是根据配置文件动态组装复杂对象. 或许有人又问, 我就是用程序组合也很简单啊. 是的, 你程序组装简单业务的是很简单. 如果组装的对象里面包含了Ejb, 包含了JMS, 包含了远程RMI那就没有这样组装简单了. 就说到这里.不说那么多废话.

(2) AOP, 面向切面编程. 这个功能我们自己是不好设计. 这个功能大家也都知道是干什么, 例如思路方法事务管理, 用户安全验证, 日志记录, 等等. 为了避免将更多代码放进思路方法中去.spring使用这个AOP来监控符合你配置正则表达式思路方法名字. 并允许在执行这个思路方法前后执行你思路方法. 这个是建立在spring上

虽然spring AOP对于大多员就足够了. 但和AspectJ相比, 他只能是功能比较弱解决方案. AspectJ提供了SpringAOP不可能实现多种切点类型. 如果不够用,你可以引入AspectJ. 来帮助你做更多工作.

上面两个是大方面个简单介绍说明. Spring在更多细节中方便了大家工作. 下面我继续依次给以介绍说明.

(3) Bean工厂节省了.

你不用再自己构造工厂了. 不用再用自己构造单例模式了. 不用自己再关心对象创建了. 不用对象了. 切都直接从上下文框架中取就行了. 框架会帮助你构造你需要对象. 你只需要跟上下文打交道就可以了. 当然,你多出了装配工作. 但这是必须要付出代价. 复杂性被集成在了配置里面. 使得你在开发层面只关心业务. 要是配置有可视化工具就太好了. 但别着急, 找找, 现在只有想不到,没有找不到.

(4) 集成Hibernate使用节省了事务显式代码.

这个其实还是切面个好处应用. 配置进去是很简单. 既然能节省工作, 我就给你说下.

(5) Spring 针对区别数据库访问模式提供了区别模板. 分别适用于区别持久机制.

包括: 针对JCA CCI链接, 针对JDBC, 支持命名参数JDBC链接, Hebernate,针对iBATIS sqlMap, Oraclede TopLink. 这些模板使用方式统降低了员使用区别数据库成本.模板使用让你只关心数据准备, 而看不到那些样板代码, 其实那些样板代码都还在, 只是被巧妙隐含到了template中了.

例如: List list = jdbcTemplate.query(“select * from table1”, Object{“a”,”b”}, RowMapper{…..}); 意思表达到了.

其中对数据源引用可以配置使用JNDI以从应用服务器中获取数据库连接. 这样就可以集中处理业务逻辑而不必关心数据库具体情况 .

如果不能从JNDI中取得, 那就必须在spring中配置个连接池. 可以使用开源DBCP. 这个支持多种数据库连接.

(6) 数据库层面缓存Cache使用.

Spring并不提供实际缓存Cache解决方案, 而是要以来第 3方缓存Cache方案. 包括: EHcache,Gigaspaces, JBoss Bache, JCS, OSCache, Coherence .无论采用哪种缓存Cache方案, 对于spring配置都是样. 但缓存Cache配置文件都是要分开. 简化了使用缓存Cache成本.

(7) 安全验证方面节省工作.

基于多种方式用户验证. 都节省了很多工作.

(8) 访问 RMI , 访问 Http Invoker, 访问Web Service

如果要穿越防火墙最后是后两种. 但httpInvoder局限于spring对象. webService 可以多种.平台. 不管使用哪种, spring都为他们配置提供了统简单配置. 使用起来非常方便. Xfire协助你访问webService简单易用.

(9) JMS访问. 大量冗余代码被节省了. 配置好了即可使用. 当然你需要使用activeMQ第 3方队列服务器来接受消息.

(10) 访问EJB.. JNDI都非常简单了. 所有额外工作,你配置好的后, spring都帮你做了. 你要做就是: 使用

(11) 发送邮件的支持.

说实在的. Spring只是更进一层的包装了javaMail. 抽象出来MailSender接口. 配置好bean即可使用. 如果需要验证则配置好用户名密码. 否则只需要配置地址端口即可 . 配置好之后可以注入到各种需要发送邮件的bean中去. 具体发送方式,参考文档去吧.

(12) 调度任务终于不用自己构造复杂的定时器代码了. Spring通过TimerFactoryBean向应程序上下文提供对javaTimer的支持. 不用自己再搞出xml配置了. 配置格式都设计好了.非常方便. 可以调度定时任务, 可以启动定时器, 可以严师定时器启动. 也可以使用Quartz执行定时调度器. JavaTimer没有提供足够的支持这样的调度.

53.什么是域访问?

同一个IP,同一个网络协议,同一个端口,三者都满足就是同一个域,否则就是跨域访问

54.Pafa中是如何处理异常的?

55.常见的SQL优化方法。

(1).查询的模糊匹配

尽量避免在一个复杂查询里面使用LIKE '%parm1%'——红色标识位置的百分号会导致相关列的索引无法使用,最好不要用。

解决办法:

其实只需要对该脚本略做改进,查询速度便会提高近百倍。改进方法如下:

a、修改前台程序——把查询条件的供应商名称一栏由原来的文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台就帮忙定位到具体的供应商,这样在调用后台程序时,这列就可以直接用等于来关联了。

b、直接修改后台——根据输入条件,先查出符合条件的供应商,并把相关记录保存在一个临时表里头,然后再用临时表去做复杂关联

(2).索引问题

在做性能跟踪分析过程中,经常发现有不少后台程序的性能问题是因为缺少合适索引造成的,有些表甚至一个索引都没有。这种情况往往都是因为在设计表时,没去定义索引,而开发初期,由于表记录很少,索引创建与否,可能对性能没啥影响,开发人员因此也未多加重视。然一旦程序发布到生产环境,随着时间的推移,表记录越来越多,这时缺少索引,对性能的影响便会越来越大了。

这个问题需要数据库设计人员和开发人员共同关注

法则:不要在建立的索引的数据列上进行下列操作:

避免对索引字段进行计算操作

避免在索引字段上使用not,<>,!=

避免在索引列上使用IS NULL和IS NOT NULL

避免在索引列上出现数据类型转换

避免在索引字段上使用函数

避免建立索引的列中使用空值。

(3).复杂操作

部分UPDATE、SELECT 语句写得很复杂(经常嵌套多级子查询)——可以考虑适当拆成几步,先生成一些临时数据表,再进行关联操作

(4).update

同一个表的修改在一个过程里出现好几十次,如:

update table1

set col1=...

where col2=...;

update table1

set col1=...

where col2=...

......

象这类脚本其实可以很简单就整合在一个UPDA TE语句来完成(前些时候在协助xxx项目做性能问题分析时就发现存在这种情况)

(5).在可以使用UNION ALL的语句里,使用了UNION

UNION 因为会将各查询子集的记录做比较,故比起UNION ALL ,通常速度都会慢上许多。一般来说,如果使用UNION ALL能满足要求的话,务必使用UNION ALL。还有一种情况大家可能会忽略掉,就是虽然要求几个子集的并集需要过滤掉重复记录,但由于脚本的特殊性,不可能存在重复记录,这时便应该使用UNION ALL,如xx模块的某个查询程序就曾经存在这种情况,见,由于语句的特殊性,在这个脚本中几个子集的记录绝对不可能重复,故可以改用UNION ALL)

(6).在WHERE 语句中,尽量避免对索引字段进行计算操作

这个常识相信绝大部分开发人员都应该知道,但仍有不少人这么使用,我想其中一个最主要的原因可能是为了编写方便吧,但如果仅为了编写简单而损害了性能,那就不可取了

9月份在对XX系统做性能分析时发现,有大量的后台程序存在类似用法,如:

......

where trunc(create_date)=trunc(:date1)

虽然已对create_date 字段建了索引,但由于加了TRUNC,使得索引无法用上。此处正确的写法应该是

where create_date>=trunc(:date1) and create_date

或者是

where create_date between trunc(:date1) and trunc(:date1)+1-1/(24*60*60)

注意:因between 的范围是个闭区间(greater than or equal to low value and less than or equal to high value.),

故严格意义上应该再减去一个趋于0的小数,这里暂且设置成减去1秒(1/(24*60*60)),如果不要求这么精确的话,可以略掉这步

(7).对Where 语句的法则

7.1 避免在WHERE子句中使用in,not in,or 或者having。

可以使用exist 和not exist代替in和not in。

可以使用表链接代替exist。

Having可以用where代替,如果无法代替可以分两步处理。

例子

SELECT * FROM ORDERS WHERE CUSTOMER_NAME NOT IN

(SELECT CUSTOMER_NAME FROM CUSTOMER)

优化

SELECT * FROM ORDERS WHERE CUSTOMER_NAME not exist

(SELECT CUSTOMER_NAME FROM CUSTOMER)

7.2 不要以字符格式声明数字,要以数字格式声明字符值。(日期同样)

否则会使索引无效,产生全表扫描。

例子

使用:SELECT emp.ename, emp.job FROM emp WHERE emp.empno = 7369;

不要使用:SELECT emp.ename, emp.job FROM emp WHERE emp.empno = …7369?

(8).对Select语句的法则

在应用程序、包和过程中限制使用select * from table这种方式。

例子

使用

SELECT empno,ename,category FROM emp WHERE empno = '7369…

而不要使用

SELECT * FROM emp WHERE empno = '7369'

(9). 排序

避免使用耗费资源的操作

带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引执行,耗费资源的排序(SORT)功能。DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序

(10).临时表

慎重使用临时表可以极大的提高系统性能。

56.什么是轻量级开发。什么是重量级开发。

轻量级框架侧重于减小开发的复杂度,相应的它的处理能力便有所减弱(如事务功能弱、不具备分布式处理能力),比较适用于开发中小型企业应用。采用轻量框架一方面因为尽可能的采用基于POJOs的方法进行开发,使应用不依赖于任何容器,这可以提高开发调试效率;另一方面轻量级框架多数是开源项目,开源社区提供了良好的设计和许多快速构建工具以及大量现成可供参考的开源代码,这有利于项目的快速开发。例如目前Tomcat+Spring+Hibernate已经成为许多开发者开发J2EE中小型企业应用偏爱的一种架构选择。随着可供选择的框架层出不穷,开发者可以根据需要对应于企业应用三个层次的轻量级框架选择,本文第2节的内容可供选择参考。

而作为重量级框架EJB框架则强调高可伸缩性,适合与开发大型企业应用。在EJB体系结构中,一切与基础结构服务相关的问题和底层分配问题都由应用程序容器或服务器来处理,且EJB容器通过减少数据库访问次数以及分布式处理等方式提供了专门的系统性能解决方案,能够充分解决系统性能问题。

轻量级框架的产生并非是对重量级框架的否定,甚至在某种程度上可以说二者是互补的。轻量级框架在努力发展以开发具有更强大,功能更完备的企业应用;而新的EJB 规范EJB3.0则在努力简化J2EE的使用以使得EJB不仅仅是擅长处理大型企业系统,也利用开发中小型系统,这也是EJB轻量化的一种努力。对于大型企业应用以及将来可能涉及到能力扩展的中小型应用采用结合使用轻量级框架和重量级框架也不失为一种较好的解决方案

57.Spring里面的三个名词,它们分别是什么意思?

IoC (Inversion Of Control)中文名为控制反转,就是由容器来控制业务对象之间的依赖关系,而非传统实现中,由代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。控制权的转移带来的好处就是降低了业务对象之间的依赖程度。

DI 依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者

因此也称为依赖注入。

AOP面向切面编程完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面。

(1)面向切面编程提供声明式事务管理

(2)spring支持用户自定义的切面

面向切面编程(aop)是对面向对象编程(oop)的补充,

面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。

AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,是对应用执行过程中的步骤进行抽象,从而获得步骤之间的逻辑划分。

aop框架具有的两个特征:

(1).各个步骤之间的良好隔离性

(2).源代码无关性

58. PAFA里面有个什么类是和面向对象里面很像的?

59.单例模式用过吗?PAFA框架里面哪里用到过的单例模式?

单例模式即在整个应用中只有一个实例

60.你知道哪些设计模式?

(1) 创建型模式

1) Abstract Factory.(抽象工厂)提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。

2) Builder(生成器)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

3) Factory Method.(工厂方法)定义一个用于创建对象的接口,让子类决定实例化哪一个类。使一个类的实例化延迟到其子类。

4) Prototype(原型)用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

5) Singleton(单例)保证一个类仅有一个实例,并提供一个访问它的全局访问点。

(2) 结构型模式

1) Adapter(适配器)将一个类的接口转换成客户希望的另外一个接口。

2) Bridge(桥接)将抽象部分与它的实现部分分离,使它们都可以独立的变化。

3) Composite(组合)将对象组合成树形结构以表示“部分-整体”的层次结构。

4) Decorator(装饰)动态地给一个对象添加一些额外的职责。

5) Fa?ade(外观)为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

6) Flyweight(享元)运用共享技术有效地支持大量细粒度的对象。

7) Proxy(代理)为其它对象提供一种代理以控制对这个对象的访问。

(3) 行为模式

1) Chain of Responsibility(职责链) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。

2) Command(命令) 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。

3) Interpreter(解释器)给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语句中的句子。

4) Iterator(迭代器) 提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。

5) Mediator(中介者) 用一个中介对象来封装一系列的对象交互。

6) Memento(备忘录)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

7) Observer(观察者) 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。

8) State.(状态)允许一个对象在其内部状态改变时改变它的行为。

9) Strategy(策略) 定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。

10) Template Method(模板方法)定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。

11) Visitor.(访问者)表示一个作用于某对象结构中的各元素的操作。

61.JAVA组件有哪些?

类本身是个细粒度的可重用实现,为了解决功能或机制层面更大粒度重用的问题,又引入了组件的概念。组件的英文是Component。组件对外暴露一个或多个接口,供外界调用。组件内部由多个类来协同实现指定的功能。对于复杂的组件,会包括很多类,还可能包含配置文件、界面、依赖的库文件等,组件也可以包含或者使用其他的组件,构成更大粒度的组件。

一些特定范畴的组件,由软件厂家或者国际权威组织制定并颁布了组件规范,如COM、ActiveX、EJB、JavaBean等。

62.现在已经有很多框架了,为什么还要开发框架?

框架的最大好处就是重用

框架的再一个好处就是可以优化架构。软件架构,亦即体系结构,包括组件元素、元素互助合作模式、基础要求与限制。这说明架构的设计就是将各组件元素以某些理想的合作模式组织起来,以达成系统的基本功能和限制。框架其实就是在特定领域基于体系结构的可重用的设计,即框架是体系结构在特定领域下的应用。框架代表了一种优秀的软件架构。框架定义了扩展方式,从而规范了框架的使用行为。这使得软件能够保持整体架构的稳定性和一致性。

采用框架技术进行软件开发的主要特点包括:领域内的软件结构一致性好;建立更加开放的系统;重用代码大大增加,软件生产效率和质量也得到了提高;软件设计人员要专注于对领域的了解,使需求分析更充分;存储了经验,可以让那些经验丰富的人员去设计框架和领域构件,而不必限于低层编程;允许采用快速原型技术;有利于在一个项目内多人协同工作;大力度的重用使得平均开发费用降低,开发速度加快,开发人员减少,维护费用降低,而参数化框架使得适应性、灵活性增强。

63.什么是注入?

注入就是把某个对象所需要的属性或实例通过外界来设置。如Spring中设值注入是依赖注入的一种,依赖注入早期叫控制反转,也可以称反射,他们的意义都相同。当某个 Java 实例(调用者)需要另一个Java 实例(被调用者)时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。而在依赖注入的模式下,创建被调用者的工作不再由调用者来完成,通常由 Spring 容器来完成,然后注入调用者,因此称为控制反转,也称为依赖注入。

64.什么是压力测试?

压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络宽带。要减少用于测试的资源,可运行一个称为压力器(stressor) 的工具。

65.spring的两大核心是什么?

IoC

(Inversion of Control)

中文译为控制反转,又称为“依赖注入”(DI =Dependence Injection)

IOC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。

其原理是基于OO设计原则的The Hollywood Principle:Don't call us, we'll call you(别找我,我会来找你的)。也就是说,所有的组件都是被动的(Passive),所有的组件初始化和调用都由容器负责。组件处在一个容器当中,由容器负责管理。

简单的来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

AOP

AOP即Aspect-Oriented Programming的缩写,中文意思是面向切面编程,也有译作面向方面编程的,因为Aspect有“方面、见地”的意思。AOP实际上是一种编程思想,由Gregor Kiczales在Palo Alto研究中心领导的一个研究小组于1997年提出[1]。在传统的面向对象(Object-Oriented Progr amming,OOP)编程中,对垂直切面关注度很高,横切面关注却很少,也很难关注。也就是说,我们利用OOP思想可以很好的处理业务流程,却不能把系统中的某些特定的重复性行为封装在某个模块中。比如在很多的业务中都需要记录操作日志,结果我们不得不在业务流程种嵌入大量的日志记录代码。无论是对业务代码还是对日志记录代码来说,今后的维护都是非常

复杂的。由于系统种嵌入了这种大量的与业务无关的其它重复性代码,系统的复杂性、代码的重复性增加了,从而使bug的发生率也大大的增加。

我们需要AOP,关注系统的“截面”,在适当的时候“拦截”程序的执行流程,把程序的预处理和后处理交给某个拦截器来完成。

66.域信任

在两个WebLogic Server 域之间双向通信期间,调用方标识(或内核标识)从一个域传播到另一个域。由于在调用域已经验证了主体,因此在第二个域(服务器)中就没有必要再次验证该主体身份(例如,以Joe 的身份登录到域1 中,当对域2 进行RMI 调用时,仍会对Joe 进行身份验证)。要建立这种关系,必须在两个域之间建立信任。启用内部域信任后,事务可跨越域提交。当一个域的域凭据与另一个域的域凭据相匹配时,就会建立信任关系。EJB、从一个服务器向另一个服务器的JMS 调用、servlet run-as 使用或者从一个服务器到另一个服务器的EJB身份主体的run-as 的使用,这些都是需要在域之间建立信任的例子。这是对两个域之间的互操作性的要求。如果两个域之间没有事务上下文传播要求,那么就没有必要在域之间建立信任。

67. 熟悉Pafa框架吗?

68. Oracle优化器

Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是由优化器(Optimizer)来完成的。不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的。

69.什么是分布式应用

distributed application 分布式应用由不同的运行于分离的运行环境下的组件构成的应用程序,通常是在不同的平台上通过网络互联起来。典型的分布式应用是二端(Client/Server),三端(client/middleware/server)和n端(client/multiple middleware/multiple server)

70.uml中哪些是动态图,哪些是静态图?干什么用?

静态图:类图、对象图、用例图、部署图、构件图

动态图:状态图、顺序图、活动图、协作图

71、EJB组件?

Session Bean...、Entity Bean...、MessageDriven Bean...。

72.数据库的三大范式?

(1)第一范式(1NF):

数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。

例如,如下的数据库表是符合第一范式的:

字段1 字段2 字段3 字段4

而这样的数据库表是不符合第一范式的:

字段1 字段2 字段3 字段4

字段3.1 字段3.2

很显然,在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

(2)第二范式(2NF):

数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。

假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:

(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

这个数据库表不满足第二范式,因为存在如下决定关系:

(课程名称) → (学分)

(学号) → (姓名, 年龄)

即存在组合关键字中的字段决定非关键字的情况。

(3)第三范式(3NF):

在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:

关键字段→ 非关键字段x → 非关键字段y

假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系:

(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)

这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:

(学号) → (所在学院) → (学院地点, 学院电话)

即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。

73.spring用来做什么?

Spring的核心就是两个概念,控制反转(IoC),面向切面编程(AOP)

在SSH中spring 就相当于mvc中的c 起到一个控制器的作用依赖注入

在Spring+hibernate中可以使用spring自带的mvc框架进行开发试图和逻辑都可以用spring来控制

spring相对而言“轻量级”就是非入侵式的,用Spring开发的系统中的类不需要依赖Spring中的类,不需要容器支持(当然Spring本身是一个容器),而且Spring的大小和运行开支都很微量。一般来说,如果系统不需要分布计算或者声明式事务支持那么Spring是一个更好的选择。

74.事务是什么?ejb事务是什么?

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transac tion)之间执行的全体操作组成。

EJB事物可以是分布式事物。它的所有操作使用不同进程或计算机上的资源。

75.为什么要用DAO层?

答:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。

76、spring怎么控制事务?

(1)编程式事务:在程序中控制事务开始,执行和提交;

使用TransactionTemplate, 使用回调函数执行事务,不需要显示开始事务,不需要显示提交事务,但是出现异常时需要手动回滚;开始、执行和提交事务的过程在模板中定义好了;

使用PlatformTransactionManager,代码量要比使用TransactionTemplate大,需要在程序总中使用TransactionDefinetion和TransactionStatus对象显示开始、提交和回滚事务。

(2)声明式事务:在Spring配置文件中对事务进行配置,无须在程序中写代码;

”声明式“的理解是这样的:Spring配置文件中定义好了这样一个规则,这个规则可以指定对哪些类的哪些方法在执行的时候添加事务控制,并配置好了事务的相关执行属性,就是在这些类的这些方法执行的时候隐式地添加事务开始、执行、提交或回滚的代码(当然我们看不到),然后在程序运行的时候就得执行这个规则,这是Spring提前声明好的,必须照办,不照办不行。

Spring事务代理:Spring为每个加了事务控制的类或方法生成一个代理,用这个代理来控制事务;

77、spring为什么要配置xml文件?有什么用?

首先,可以进行声明式事务控制,减少代码的冗余。

其次,XML文件被广泛使用。方便移植。

再者,配置XML文件可以实现Spring的核心功能,IOC,AOP

78、spring是轻量级框架还是重量级?什么是轻量,什么是重量?

答:轻量级。

广义上讲:

轻量级与重量级是一个相对的概念,主要是对应用框架使用方便性和所提供服务特性等方面做比较的。

比方说EJB就是一个重量级的框架,因为它对所编写的代码有限制,同时它也提供能分布式等复杂的功能。

相比之下,Spring就是轻量级框架,因为它需要的只是普通的Java对象,它所提供的也只是足够中小应用使用的功能。

但是,随着Spring的发展,它也所具有的功能也越来越强大,而EJB的使用也在变得简单,所以这随着技术的发展,这个概率也需要更新。

毕竟它的出现是为了和使用复杂的框架做区别,那么当当家都在不断吸收对方长处的时候这个界线就没有那么明显了。

狭义上讲:

重量组件一般支持线程安全而轻量不支持。

JDK GUI里面的awt包为重量级,swing包尾轻量级。

集合类List、Map、Set为轻量级,Vector、Hashtable为重量级

79、hibernate有什么用?

答:Hibernate的最大的好处就是简化数据库的操作,允许你的代码以对象模式来访问数据库内容,另外对于复杂的表和表之间的关联我们也不用去使用复杂的Select等SQL来操作,而使用对象可以方便获得。

80、你知道设计模式吗?门面模式是怎么回事?工厂模式是用来做什么的?什么时候用单例模式?

Facade模式是客户端和后台之间插入一个中间层——门面,这个门面跟后台的多个类或接口打交道,而客户端只需要跟门面打交道即可。

工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例,一般来说,当某个对象会被频繁访问并且在多线程并发访问时没有线程安全性的问题时,可以考虑使用单例工厂来完成这样的任务,比如DAO

在一个系统要求一个类只有一个实例时才应当使用单例模式。反过来,如果一个类可以有几个实例共存,就不要使用单例模式

类Service类等等这样需要被大量访问的对象。一般来说这并不会带来多大的性能提升。

81、做过测试吗?单元测试是怎么回事?

单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试

82、什么是耦合?

耦合式指两个模块间的关联关系程度,一般在程序开发中要求松耦合

83.Jdk的bug,spring框架的bug

84.Oracle中的数据优化,存储过程和函数的区别

如果返回多个参数值最好使用存储过程,如果只有一个返回值的话可以使用函数;如果在SQL语句(DML或SELECT)中调用的话一定是存储函数或存储的封装函数不可以是存储过程,函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等)。

85.Dwr框架讲解,除了做异步刷新,还用它做了什么

DWR(Direct Web Remoting)是一个开放源码的使用Apache 许可协议的解决方案,它包含服务器端Java 库、一个DWR Servlet 以及JavaScript 库。虽然DWR 不是Java 平台上唯一可用的Ajax-RPC 工具包,但是它是最成熟的,而且提供了许多有用的功能。

可以把服务器端Java 对象的方法公开给JavaScript 代码。使用DWR 可以有效地从应用程序代码中把Ajax 的全部请求-响应循环消除掉。这意味着客户端代码再也不需要直接处理XMLHttpRequest 对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成XML。甚至不再需要编写servlet 代码把Ajax 请求调整成对Java 域对象的调用。

DWR 是作为Web 应用程序中的servlet 部署的。把它看作一个黑盒子,这个servlet 有两个主要作用:首先,对于公开的每个类,DWR 动态地生成包含在Web 页面中的JavaScript。生成的JavaScript 包含存根函数,代表Java 类上的对应方法并在幕后执行XMLHttpRequest。这些请求被发送给DWR,这时它的第二个作用就是把请求翻译成服务器端Java 对象上的方法调用并把方法的返回值放在servlet 响应中发送回客户端,编码成JavaScript。

86.怎么防止盗链

所谓盗链,是指对方网站直接链接您网站上的文件,而不是将其置于自己的服务器上,一般而言,盗链的对象大多为较耗带宽的大体积文件,如图片、视频等,从某种意义上说,这事实上造成了让您为其访问流量买单:不仅您的服务器带宽被无任何回报地占用,而且,往往会在很大程序上影响您网站的访问速度。

其实通过WEB服务器的URL过滤技术,这个伤脑筋的问题会很容易得到解决。

如果WEB服务器用的是APACHE的话,那么使用APACHE自带的Url Rewrite功能可以很轻松地防止各种盗链,其原理是检查REFER,如果REFER的信息来自其他网站则禁止访问所需要的资源。还可以通过session保存上一页面的信息,当下载页面得到的信息和session里面不符合则不下载。或中间做个redirect判断上一页面的参数

87.请列举一下jstl常用的标签?

88.如果我想显示一个列表,请问用jstl怎么实现?

89.如果我实现以下功能:程序运行期内每当用户访问一次,就记录一次,然后通过这个记的值得出用户访问程序(页面)的次数。怎么实现?

用application、数据库记录、静态全局变量

90.Oracle、MySql、Sqlserver你都会?那你知道它们这间有哪些区别?

(1).数据库自带函数的区别,比如:

取整(截取)

Sqlserver:select cast(-1.002 as int) value

oracle:select trunc(-1.002) value from dual

取随机数

sqlserver:select rand() value

oracle:select sys.dbms_random.value(0,1) value from dual;

子串位置 --返回3

sqlserver:select CHARINDEX('s','sdsq',2) value

oracle:select INSTR('sdsq','s',2) value from dual

删除空格

sqlserver:ltrim,rtrim

oracle:ltrim,rtrim,trim

(2).服务平台区别:

Sqlserver只能用于windows下。Oracle,mysql可以用于所有主流的平台上.

(3).性能及安全上

Oracle在处理并发性比sqlserver,mysql好

Oracle在安全上比sqlserver,mysql好。

Oracle是目前性能最高的数据库

(4)其他的区别

编写存储过程和函数方法不一样。

部分DDL操作不一样。

还有很多……

91.如果我想限定要返回的行数,Oracle、MySql、Sqlserver分别怎么做到的?

oracle利用rownum实现、Sqlserver利用top直接限制返回的行数、MySql用limit关键字直接限制返回的行数。

92.Jdbc获得数据源的方式有哪些?

答:1、jndi方式,由tomcat等服务器产生数据源。2、通过数据库厂商提供的驱动程序获得数据源。

93.对线程的了解

一个程序至少有一个线程,线程可以单独实现程序中一个功能。线程有四种状态:就绪、运行、挂起、终止。

线程分为同步和异步,并且可以做让步,睡眠,暂停,设置优先级等操作

可以通过继承Thread或实现Runnable接口来实现线程,通过start来启动一个线程,run方法来定义要运行的程序。

94.普通的类,可以让它休眠吗?

不可以,sleep()方法是Thread类的静态方法

95. 线程类,一定要导入thread包吗?

是的。

96 .FIFO用那种方式效率最高

LinkedList

97.根据继承关系通过equals和“==”判断一些关系

98.EJB的三大对象

Remote,home,bean

99.用final修饰的类,方法,属性,的性质和用法。

final关键字是最终的、最后的意思,在程序中可以用来修饰类、成员变量和方法的声明,由该关键字修饰的内容都是不可变的。

final修饰的数据是常量,常量既可以出现在类的内部,也可以出现在方法或构造方法的内部。在程序中常量只能赋值一次。

final关键字也可以修饰方法,final修饰的方法称作最终方法,最终方法不能被覆盖,也就是不能在子类的内部重写该方法。

final关键字也可以修饰类,final修饰的类称作最终类,最终类不能被继承,也就是该类不能有子类。

100.网络连接和分布式连接的区别?

分布式连接是指连接是在分布式的网络中。

101.UML那种图是关系到时间?

时顺图

102.用例的特点?

103.JAVA命名规范

(1)包的命名

Java包的名字都是由小写单词组成。为保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。

例如:net.frontfree.javagroup

(2)类的命名

类的名字必须由大写字母开头而单词中的其他字母均为小写;

如果类名称由多个单词组成,则每个单词的首字母均应为大写,如TestPage;

如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample;

由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。如:Circle

(3)方法的命名

方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头。

例如:sendMessge

(4)常量的命名

常量的名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。例如:MAX_V ALUE 关于常量的命名方法,无论什么时候,均提倡应用常量取代数字、固定字符串。

常量可以集中在程序开始部分定义或者更宽的作用域内

(5)参数的命名

参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,请在尽量保证参数名称为一个单词的情况下使参数的命名尽可能明确。

还有比如注释,变量命名等

二、非技术问题

问题1、你有多少本java方面的书?列举几本。

答:十几本。有《java编程思想》、《疯狂java讲义》、《轻量级JavaEE企业开发》等

问题2、你知道哪些国内外著名的java大师?

答:李刚、张孝祥,孙鑫

问题3、你知道你们公司有多少人在平安这边工作吗?

答:自己了解下,如果你不知道人家会反问你:不知道?你到东南融通多久了?是不是新招来的?

答:不是,我之前外派到其它地方工作,所以对平安公司这边不太了解。

问题4、说一说你觉得自己比较优秀的地方?

答:技术方面,我对代码调优有一定的能力。比较喜欢研究程序结构(架构)方面的东西。

然后个人的学习能力比较强。会主动去接触,也能很快接收新的技术。(请自我发挥)

问题5、你对自己有什么要补充的吗?

(可以补充下你擅长的技术,或你的兴趣爱好,及表示对工作的积极热情,勤奋好学)

问题6、你觉得你比其他JAVA人员更出色的地方?

(请谦虚但不要丢失自信,最好能够圆场)

问题7.自己项目讲解,项目的细节化,关键是项目中的数据是怎么样优化的。用了几台服务器,几台服务器之间是怎么沟通的。

问题8.项目团队合作,在平时的项目中是怎么样和同事,上司沟通项目的。

问题9.看过源码没有,看过哪些源码,感觉怎么样。

问题10.介绍下你之前做的项目。你都负责哪些模块。

相关主题