2018版JAVA面试题总篇,各大公司面试题汇总(一般人找不到的面试题及答案)

目录

JAVA 面试题................................................................................................................... 1

Java面试题整理............................................................................................................ 10

Java面向对象................................................................................................................. 10

1.    super()与this()的区别?.................................................................................... 10

2.    作用域public,protected,private,以及不写时的区别?........................................... 10

3.    编程输出如下图形。........................................................................................ 10

4.    JAVA的事件委托机制和垃圾回收机制............................................................. 11

5.    在JAVA中,如何跳出当前的多重嵌套循环?.................................................. 11

6.    什么是java序列化,如何实现java序列化?(写一个实例)................................ 11

7.    一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?......... 11

8.    排序都有哪几种方法?请列举。用JAVA实现一个快速排序?......................... 11

9.    Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?... 12

10.         Final类有什么特点?................................................................................ 12

11.         继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?........... 12

12.         内部类的实现方式?................................................................................... 13

13.         用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?.................... 14

14.         如在COLLECTION框架中,实现比较要实现什么样的接口?................... 14

15.         用插入法进行排序代码如下....................................................................... 14

16.         编程:编写截取字符串函数....................................................................... 15

15、Java编程,打印昨天的当前时刻......................................................................... 16

16、文件读写,实现一个计数器................................................................................ 16

17、指出下面程序的运行结果。.............................................................................. 17

18、抽象类和接口的区别?..................................................................................... 17

19、什么是类的返射机制?....................................................................................... 17

20、类的返射机制中的包及核心类?......................................................................... 18

21、得到Class的三个过程是什么?.......................................................................... 18

22、如何唤起类中的一个方法?.............................................................................. 18

23、如何将数值型字符转换为数字(Integer,Double)?........................................ 18

24、如何将数字转换为字符?................................................................................. 18

25、如何去小数点前两位,并四舍五入。................................................................ 18

26、如何取得年月日,小时分秒?.......................................................................... 18

27、如何取得从1970年到现在的毫秒数................................................................. 19

28、如何获取某个日期是当月的最后一天?............................................................ 19

29、如何格式化日期?............................................................................................ 19

30、编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 20

32、String s = new String("xyz");创建了几个String Object?........................................ 20

33、float型float f=3.4是否正确?............................................................................. 20

35、说出一些常用的类,包,接口,请各举5个..................................................... 20

36、java中会存在内存泄漏吗,请简单描述。......................................................... 20

37、java中实现多态的机制是什么?....................................................................... 20

38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?..................................................................................... 21

39、静态变量和实例变量的区别?.......................................................................... 21

41、是否可以从一个static方法内部发出对非static方法的调用?............................ 21

42、写clone()方法时,通常都有一行代码,是什么?.............................................. 21

43、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?........................................................................... 21

45、冒泡排序法...................................................................................................... 21

46、String and StringBuffer的区别?........................................................................ 23

47、用java代码编写堆栈........................................................................................ 23

48、集合的作用是什么?.......................................................................................... 24

49、集合的通用方法有那些?通用方法是什么?(操作)................................................ 24

50、说出ArrayList,Vector, LinkedList的存储性能和特性HashMap和Hashtable的区别 24

51、Collection 和 Collections的区别。................................................................... 25

52、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用。........................ 25

53、List, Set, Map是否继承自Collection接口?......................................................... 25

54、面向对象的特征有哪些方面.............................................................................. 25

55、String是最基本的数据类型吗?.......................................................................... 25

56、int 和 Integer 有什么区别?............................................................................ 26

57、运行时异常与一般异常有何异同?................................................................... 26

58、&和&&的区别?.............................................................................................. 26

59、final, finally, finalize的区别?........................................................................... 26

62、heap和stack有什么区别?............................................................................... 26

63、Static Nested Class 和 Inner Class的不同?....................................................... 26

64、什么时候用assert?.......................................................................................... 26

65、GC是什么? 为什么要有GC?........................................................................... 27

66、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?....................... 27

67、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?..................................... 27

68、Java有没有goto?............................................................................................. 27

69、给我一个你最常见到的runtime exception.......................................................... 27

70、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?.................................................................................................... 28

71、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?............................................................................................................................... 28

72、数组有没有length()这个方法? String有没有length()这个方法?........................ 28

73、构造器Constructor是否可被override?............................................................... 28

74、是否可以继承String类?................................................................................... 28

75、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?.. 28

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

77、编程题: 用最有效率的方法算出2乘以8等於几?............................................. 29

78、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 29

79、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?............................................. 29

80、四种会话跟踪技术............................................................................................ 29

81、编程题: 写一个Singleton出来。...................................................................... 29

83、Java中的异常处理机制的简单原理和应用。..................................................... 30

84、垃圾回收的优点和原理。并考虑2种回收机制。.............................................. 30

85、描述一下JVM加载class文件的原理机制?....................................................... 30

86、char型变量中能不能存贮一个中文汉字?为什么?............................................... 30

88、写一个程序,从文件(c:\test.txt)中查出字符串”mobnet”出现的次数?......... 31

java基础类库(io流,集合类,线程,Socket,AWT,Swing,sql)..................................... 32

1、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?................................................................................................... 32

2、启动一个线程是用run()还是start()?.................................................................... 32

3、线程的基本概念、线程的基本状态以及状态之间的关系..................................... 32

4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?................................................. 32

5、集合框架有什么?............................................................................................... 33

12、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序........................................................................................................................ 33

13、同步和异步有和异同,在什么情况下分别使用他们?举例说明。...................... 35

14、sleep() 和 wait() 有什么区别?.......................................................................... 35

15、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?............................................................................................................... 35

17、输入输出流的理解:........................................................................................... 35

18、请写一个程序的读写,要求用两种方式一种是低层流另一种是高层流。........... 36

19、如何列出某个目录下的所有文件....................................................................... 37

20、用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据?.................................................................................................................... 38

23、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?................ 40

24、请说出你所知道的线程同步的方法................................................................... 40

jdbc数据访问技术.......................................................................................................... 40

1、JDBC如何做事务处理?.................................................................................... 40

2、写出几个在Jdbc中常用的接口........................................................................... 40

3、简述你对Statement,PreparedStatement,CallableStatement的理解........................... 40

4、Java中访问数据库的步骤?............................................................................... 41

5、JDBC中的核心类及其作用是什么?.................................................................... 41

6、执行存储过程用那一个类,如何操作输出参数?(操作)....................................... 42

8、可能会让你写一段Jdbc连Oracle的程序............................................................ 42

9、Class.forName的作用?为什么要用?.................................................................... 42

10、Jdo是什么?...................................................................................................... 42

11、在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法............................................................................................................................... 42

Web编程Jsp&Servlet技术............................................................................................. 43

1、简单说说tomcat的配置?.................................................................................. 43

2、JSP中动态INCLUDE与静态INCLUDE的区别?.............................................. 44

3、forward和redirect的区别?............................................................................... 44

4、Servlet的体系结构是什么?................................................................................. 44

5、如何实现一个自定义的servlet?........................................................................... 44

6、Servlet的生命周期是什么?................................................................................. 44

7、jsp就是一个servlet是否正确?............................................................................ 44

8、请罗列jsp中的脚本、指令及动作?.................................................................... 44

9、JSP的内置对象及方法....................................................................................... 45

10、说出在JSP页面里是怎么分页的?..................................................................... 45

11、include的两种实现方式的区别?........................................................................ 47

12、jsp页面中两种跳转方式分别是什么?有什么区别?............................................. 48

13、描述JSP和Servlet的区别、共同点、各自应用的范围...................................... 48

14、在JSP中如何读取客户端的请求,如何确定某个Jsp文件的真实路径?............ 48

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

16、说明Jsp中errorPage的作用,应用范围。........................................................ 48

17、介绍在Jsp中如何使用JavaBeans...................................................................... 49

19、简单介绍JSP的标记库..................................................................................... 49

20、Servlet中的核心类有那些,各有什么特点?....................................................... 49

21、Servlet中重要的包有那些,有什么区别?.......................................................... 49

22、说出Servlet的生命周期,并说出Servlet和CGI的区别?................................. 50

23、什么情况下调用doGet()和doPost()?................................................................ 50

25、如何现实servlet的单线程模式.......................................................................... 50

27、Request对象的主要方法:............................................................................... 50

28、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?..................................................................................... 51

30、Servlet执行时一般实现哪几个方法?............................................................... 51

5 Hibernate持久层技术................................................................................................... 51

1、在myeclipse加入hibernate环境的全过程是什么?............................................... 51

2、hibernate的核心配置文件是什么及其作用?......................................................... 51

3、hibernate的核心类是什么,它们的相互关系是什么?重要的方法是什么?............. 52

4、关联:................................................................................................................. 52

5、hibernate中的one-to-many或many-to-one中常用的方式是什么?......................... 52

6、Criteria 的作用?................................................................................................. 52

7、DetachedCriteria的作用?................................................................................... 53

8、Query................................................................................................................. 53

9、继承关系的实现................................................................................................. 54

10、tomcat连接池:在容器中预先产生了n个连接实例,客户端不用重新实例化,可以直接取。........................................................................................................................ 54

11、对象的三大状态............................................................................................... 56

12、hibernate常见优化策略.................................................................................. 56

6.    iBatis持久层技术.................................................................................................... 56

用ibatis的原因:................................................................................................... 56

jdbc、hibernate、ibatis的区别............................................................................... 56

ibatis的核心配置文件:............................................................................................. 57

ibatis的核心类:....................................................................................................... 57

7 Structs界面控制层技术................................................................................................ 58

1、请说出struts框架的几大组件?.......................................................................... 58

3、struts的核心类有那些,在MVC模式中其对应的关系是什么?.......................... 58

4、Struts的处理请求的全过程是什么?..................................................................... 59

5、在struts中如何通过一个url找到一个action,它的核心配置文件是什么?........... 59

6、为什么使用MVC,其主要目的是什么?.............................................................. 59

7、对于MVC在action中对应有类有几种,各有什么作用?..................................... 59

8、struts的标记有几类,请列举并说明其作用?....................................................... 59

9、如何在struts中配置数据源在,什么文件?用什么标签?如何取出DataSource?......... 60

10、如何在jbuilder中开发struts?............................................................................ 60

11、如何实现struts的validator框架?.................................................................... 60

13、如何实现国际化?.............................................................................................. 61

8 JSF界面控制层技术.................................................................................................... 62

1、Jsf中的核心类用那些?有什么作用?.................................................................... 62

2、Jsf中的LiftCycle六大生命周期是什么?............................................................. 62

3、如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?...................................................................................................................... 62

4、Jsf中导航的标签是什么?.................................................................................... 62

5、jsf中用户界面组件模型有几类,各代表什么?.................................................... 63

6、表格处理及取值................................................................................................. 63

7、jsf的标签库有哪些?......................................................................................... 63

9 Spring 应用框架技术................................................................................................... 64

1、Spring和Struts的区别?     strusts:是一种基于MVC模式的一个web层的处理。                                                 64

2、什么是aop,aop的作用是什么?......................................................................... 64

3、aop中的关键名词有些那些,相互关系是什么?................................................... 64

4、依赖注入的方式有几种,各是什么?................................................................... 65

5、spring中的核心类有那些,各有什么作用?.......................................................... 65

6、ApplicationContext的作用.................................................................................. 65

7、如何实现资源管理............................................................................................. 65

8、如何实现加入web框架中.................................................................................. 65

9、如何实现事件处理............................................................................................. 66

10、spring的ioc及di代表什么意思?...................................................................... 66

、如何在spring中实现国际化?................................................................................ 66

12、spring的配置的主要标签是什么?有什么作用?................................................... 66

13、spring与ejb2.0的事务管理比较的优缺点?........................................................ 67

14、spring的jdbc与传统的jdbc有什么区别,其核心类有那些?.............................. 67

15、在spring中有几种事务管理,分别是什么?....................................................... 67

16、在spring中如何配代码的事务管理?.................................................................. 68

17、在spring中如何配容器的事务管理,相关的类有那些?...................................... 68

18、如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确? 68

19、spring+hibernate的配置文件中的主要类有那些?如何配置?................................ 68

20、spring+hibernate的代码实现中,对于实现类一定继承于一个类是那一个,它有什么作用。........................................................................................................................ 69

21、如何配置spring+struts?..................................................................................... 69

22、如何在web环境中配置applicationContext.xml文件?......................................... 69

24、Jsf和spring的区别?......................................................................................... 69

jsf:是一种基于MVC模式的一个web层的处理,粒度较struts较细。................... 69

Ejb技术......................................................................................................................... 70

1、weblogic的热发布.............................................................................................. 70

2、在ejb中实现one-to-many................................................................................... 70

3、ejb所用的技术:.................................................................................................. 70

4、实现ejb几个接口,几个类?................................................................................. 70

5、实现ejb相关的配置文件是什么?........................................................................ 70

6、ejb的分类?区别................................................................................................. 71

7、本地接口与远程接口的区别。............................................................................ 71

8、请求处理的过程?............................................................................................... 71

9、statefull的生命周期............................................................................................ 71

10、stateless的生命周期.......................................................................................... 72

11、entityBean的生命周期:..................................................................................... 72

12、EJB需直接实现它的业务接口或Home接口吗,请简述理由。.......................... 72

13、EJB的激活机制............................................................................................... 72

14、EJB是基于哪些技术实现的?并说 出SessionBean和EntityBean的区别,........ 73

15、EJB的分类是什么?各有什么特点?.................................................................... 73

10、EJB中主要的配置文件及作用是什么?.............................................................. 73

15、说出数据连接池的工作机制是什么?.................................................................. 74

16、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别?.................... 74

18、EJB与JAVA BEAN的区别?.......................................................................... 74

19、EJB的角色和三个对象..................................................................................... 74

20、EJB容器提供的服务........................................................................................ 74

21、EJB规范规定EJB中禁止的操作有哪些?........................................................ 75

26、EJB的基本架构............................................................................................... 75

30、如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置............................................................................................................................... 76

31如何查看在weblogic中已经发布的EJB?............................................................. 76

WebService技术............................................................................................................. 76

1、什么是Web Service?.......................................................................................... 76

2、什么是Web容器?.............................................................................................. 77

3、应用服务器有那些?.......................................................................................... 77

5、如何给weblogic指定大小的内存?...................................................................... 77

6、如何设定的weblogic的热启动模式(开发模式)与产品发布模式?.......................... 77

7、如何启动时不需输入用户名与密码?................................................................... 77

8、在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中?............................................... 77

9、说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入 http://主机:端口号//helloword.jsp就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean该如何办?.............................. 78

12、CORBA是什么?用途是什么?............................................................................ 78

13、说说在weblogic中开发消息Bean时的persistent与non-persisten的差别........... 78

14、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。................................................................................................ 78

j2ee模式(MVC模式、Model1,Model2).................................................................... 79

1、j2ee常用的设计模式?说明工厂模式。.............................................................. 79

2、说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法....... 79

3、解释下面关于J2EE的名词................................................................................. 79

4、介绍J2EE、J2SE、J2ME的区别。..................................................................... 80

5、开发中都用到了那些设计模式?用在什么场合?.................................................... 80

6、J2EE是什么?................................................................................................... 80

7、J2EE是技术还是平台还是框架?....................................................................... 80

其他............................................................................................................................... 80

1、当前主流的解析器有那些?................................................................................. 80

2、Dom解析处理的过程是什么?............................................................................. 81

3、Sax解析处理的过程是什么?............................................................................... 82

4、Dom与Sax相比它们的优缺点是什么?............................................................... 83

5、如何将Dom对象写入到文件中?......................................................................... 83

6、用jdom解析xml文件时如何解决中文问题?....................................................... 84

7、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?............................................................................................................................... 84

8、标准建模语言UML中的各种图?........................................................................ 84

9、BS与CS的联系与区别。.................................................................................. 84

10、Uml的概念是什么?主要的工具是什么.............................................................. 85

11、Uml的概念中的九大图形是什么?最重的三个图是什么?各有什么特点?............. 85

13、在类图中如何找类?.......................................................................................... 87

各公司面试题汇总.......................................................................................................... 87

1、         爱博.......................................................................................................... 87

2、         北京安宏睿业科技有限公司....................................................................... 92

3、         北京宝库在线科技有限公司....................................................................... 94

4、         北京东方飞扬软件股份有限公司................................................................ 95

5、北京清元优科技有限公司................................................................................... 98

6、北京瑞尼尔有限公司........................................................................................ 103

7、博达新创、慧点科技面试题目.......................................................................... 106

8、城际快线面试题和答案..................................................................................... 107

9、东方国信科技股份有限公司.............................................................................. 113

10、飞速创想科技有限公司................................................................................... 116

11、高迈致远公司的面试题................................................................................... 117

12、华迪宏图面试题............................................................................................. 119

13、顺藤码........................................................................................................... 121

14、咱网............................................................................................................... 126

15、中盈信安........................................................................................................ 128

16、力鼎软件........................................................................................................ 129

17、中科软面试题................................................................................................. 132

18、北信源JAVA软件开发工程师笔试题.............................................................. 138

19、项目部JAVA开发工程师笔试题目.................................................................. 142

20、北龙泽达(北京)数据科技有限公司.............................................................. 146

21、网递............................................................................................................... 149

22、指联在线........................................................................................................ 152

23、北京国联视讯信息技术股份有限公司.............................................................. 156

24、北京华胜鸣天科技有限公司............................................................................ 161

25、典道互联面试题............................................................................................. 166

26、国电网通........................................................................................................ 171

27、东奥时代和东方时代...................................................................................... 175

28、爱如生数字.................................................................................................... 177

29、东软面试题.................................................................................................... 180

30、北京和信安科软件有限公司............................................................................ 181

 

Java面试题整理

    poi是什么?

   相信很多电商的同仁基本上都会有这样的问题:就比如在后台添加商品的时候,怎么整呢?不可能一条一条的添加吧!答案是肯定的,那么我们该采用怎样的一种方法来使我们的添加更为的简单呢?这个时候就用到了我们的poi。

       通俗的讲,poi就是批量的操作文件或数据的导入以及导出。批量的操作,哈!听着就爽!看起来挺牛的!可能就有很多人会说,这会不会很难?我在这里可以明确的告诉大家,这是一项既简单又实用的一项技术,下面就是poi的一些操作!来吧~

       我们一般采用的是用excel的方式将信息导入或导出,具体的导出实现如下

       首先,我们需要定义一个工作簿,也就是我们所说的excel

        //定义一个工作簿
        Workbook wb=new HSSFWorkbook();

        //创建一个sheet,名字简单取为“111”
      
  Sheet sheet=wb.createSheet("111");  那么一个简单的excel就完成了。

         接下来,就是对excel的一些操作

  1. 读取数据库的信息,这里并没有真正的连接数据库,采用的是使用jdbc工具类的方式
  2. List<Vip> list=JdbcUtil.getList(Vip.class, "select * from vip");2
                    //创建行
                    Row row=sheet.createRow(0);
                    //创建单元格。这里是把数据库的字段写到第一行单元格
                    row.createCell(0).setCellValue("VID");
                    row.createCell(1).setCellValue("Vname");
                     //循环将数据写入到excel
                      int i=1;
                         for (Vip vip : list) {
                            row=sheet.createRow(i);
                            row.createCell(0).setCellValue(vip.getVid());
                            row.createCell(1).setCellValue(vip.getVname());
                            i++;
                         }
                   //输出
                    OutputStream out=new FileOutputStream("F://Test.xls");
                    wb.write(out);
                    out.close();
                    System.out.println("OK");
  3.  当然了,它还有一些其他的小的功能,比如将list转为excel,或将excel转为list,自定义格式了,单元格的换行了等等,还有好多,

 

 Java面向对象

什么是SVN?有一种说法:SVN=版本控制+备份服务器。

它可以帮你记住每次上传到这个服务器的档案内容,并自动赋予 每次变更 一个版本号。

 

我们用来存放(上传过来的)档案的地方叫做Repository。Repository的中文意思是仓库、贮藏室、博物馆。

我们有任何修改都可以上传到Repository里。针对每次的上传,SVN server都会赋予一个新的版本。同时,也会记录每次上传的时间。

我们以后可以从Repository中下载曾经提交的档案。我们可以取到最新的版本,也可以取得之前任何一个版本。如果忘记了版本,还可以靠记忆获取某个日期的版本。

**********************************************************

为什么使用SVN?

1.备份工作档案。万一硬盘坏了,无法修复什么的,放在这里比放在硬盘里安全。

2.版本控制。我们无法保证手中的最新版本永远是对的。很多时候,在经过数天努力工作后,我们才会发现走错了方向。需要退回到数天前。但没有几个人能完全记住自己修改过什么东西。如果没有做好版本控管,那么,最差的情况就是要全部重来。

3.伙伴间的数据同步的重要性。很多时候,除了个人,工作伙伴也需要你的档案。有一个统一的仓库,方便传输和管理。用邮件什么的传,麻烦而且容易出错,并且,不觉得很low吗?

4.备份不同版本是很耗费硬盘空间的。单纯的档案备份,如果一个文件10M,10个版本就是100M,很浪费内存。

 

SVN可以帮助我们解决以上提到的这四个问题,具体来说:

1.SVN Repository可以使计算机上的一个目录,当然也可以是公司的服务器。

2.SVN有很好的版本控管机制。所有上传的版本都会被记录下来,日后可以随时取得某一个时刻的版本。

3.SVN可以让不同的开发者取同样的档案。

4.SVN存放档案,采取的是差异备份的方式。也就是说,只会备份有不同的地方。所以很节省硬盘空间。此外,它也可以针对非文字文件进行差异备份。

 

  1. super()与this()的区别?

This():当前类的对象,super父类对象。

Super():在子类访问父类的成员和行为,必须受类继承规则的约束

而this他代表当前对象,当然所有的资源都可以访问.

在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造.
而在方法中super和this使用的方法就差不多了.只不过super 要考虑是否能访问其父类的资源.

 

  1. 作用域public,protected,private,以及不写时的区别?
  • Public:不同包、同一包、类内都可用
  • Private:类内
  • Protected: 不同包的子类、同一包、类内都可用
  • 不写时:同一包内、类内

 

  1. 编程输出如下图形

* * * * *

* * * *

* * *

* *

*

代码如下:

public class Print {

    public static void main(String[] args) {

        for (int i = 0; i < 5; i++) {

            for (int j = 5; j > i; j--) {

                System.out.print("*");

            }

            System.out.println();

        }

    }

}

  1. JAVA的事件委托机制和垃圾回收机制

java 事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。

垃圾回收机制 垃圾收集是将分配给对象但不再使用的内存回收或释放的过程。如果一个对象没有指向它的引用或者其赋值为null,则次对象适合进行垃圾回收

 

  1. JAVA中,如何跳出当前的多重嵌套循环?

用break; return 方法。

  1. 什么是java序列化,如何实现java序列化?(写一个实例)

序列化:

处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:

将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

 

  1. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以。如果这个类的修饰符是public,其类名与文件名必须相同。

  1. 排序都有哪几种方法?请列举。用JAVA实现一个快速排序?

排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)

快速排序的伪代码。

  1. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的

重写Override,子类覆盖父类的方法,将子类传与父类的引用调用的还是子类的方法。

重载Overloading 一个类多个方法,名称相同,参数个数类型不同。

两者都是Java多态性的不同表现。

Overloaded的方法是可以改变返回值的类型。

 

1, public class Ctest()

{

    Public static void main()

{

System.out.prinln(8+8+”88”+8+8);

}

}

 

168888

  1. Final类有什么特点?

       属性常量

       方法不可以overridding

       类不可以继承

  1. 继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?

答:父类:

package test;

public class FatherClass

{

public FatherClass()

{

System.out.println("FatherClass Create");

}

}

子类:

package test;

import test.FatherClass;

public class ChildClass extends FatherClass

{

public ChildClass()

{

System.out.println("ChildClass Create");

}

public static void main(String[] args)

{

FatherClass fc = new FatherClass();

ChildClass cc = new ChildClass();

}

}

输出结果:

C:>java test.ChildClass

FatherClass Create

FatherClass Create

ChildClass Create

  1. 内部类的实现方式?

答:示例代码如下:

package test;

public class OuterClass

{

private class InterClass

{

Public Interlass()

{

System.out.println("InterClass Create");

}

}

public OuterClass()

{

InterClass ic = new InterClass();

System.out.println("OuterClass Create");

}

public static void main(String[] args)

{

OuterClass oc = new OuterClass();

}

}

输出结果:

C:>java test/OuterClass

InterClass Create

OuterClass Create

  1. JAVA实现一种排序,JAVA类实现序列化的方法(二种)?
  2.  如在COLLECTION框架中,实现比较要实现什么样的接口?
  3. 用插入法进行排序代码如下

package test;

import java.util.*;

class InsertSort

{

ArrayList al;

public InsertSort(int num,int mod)

{

al = new ArrayList(num);

Random rand = new Random();

System.out.println("The ArrayList Sort Before:");

for (int i=0;i<num ;i++ )

{

al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));

System.out.println("al["+i+"]="+al.get(i));

}

}

public void SortIt()

{

Integer tempInt;

int MaxSize=1;

for(int i=1;i<al.size();i++)

{

tempInt = (Integer)al.remove(i);

if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())

{

al.add(MaxSize,tempInt);

MaxSize++;

System.out.println(al.toString());

} else {

for (int j=0;j<MaxSize ;j++ )

{

if

 

(((Integer)al.get(j)).intValue()>=tempInt.intValue())

{

al.add(j,tempInt);

MaxSize++;

System.out.println(al.toString());

break;

}

}

}

}

System.out.println("The ArrayList Sort After:");

for(int i=0;i<al.size();i++)

{

System.out.println("al["+i+"]="+al.get(i));

}

}

public static void main(String[] args)

{

InsertSort is = new InsertSort(10,100);

is.SortIt();

}

}

 

 

JAVA类实现序例化的方法是实现java.io.Serializable接口

Collection框架中实现比较要实现Comparable 接口和 Comparator 接口

 

  1. 编程:编写截取字符串函数

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。

答:代码如下:

public static void split(String source,int num) throws Exception

    {

        int k=0;

        String temp="";

        for (int i = 0; i <source.length(); i++)

        {  

            byte[] b=(source.charAt(i)+"").getBytes();

            k=k+b.length;

            if(k>num)

            {

                break;

            }

            temp=temp+source.charAt(i);        

        }  

        System.out.println(temp);

    }

 

15、Java编程,打印昨天的当前时刻

public class YesterdayCurrent{

public void main(String[] args){

Calendar cal = Calendar.getInstance();

cal.add(Calendar.DATE, -1);

System.out.println(cal.getTime());

}

}

16、文件读写,实现一个计数器

public int getNum(){

int i = -1;

try{

String stri="";

BufferedReader in = new BufferedReader(new FileReader(f));

while((stri=in.readLine())!=null){

i = Integer.parseInt(stri.trim());

}

in.close();

}catch(Exception e){

e.printStackTrace();

}

return i;

}

public void setNum(){

int i = getNum();

i++;

try{

PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false)));

out.write(String.valueOf(i)); //可能是编码的原因,如果直接写入int的话,将出现java编码和windows编码的混乱,因此此处写入的是String

out.close() ;

}catch(Exception e){

e.printStackTrace();

}

}

 

17、指出下面程序的运行结果

class A{

static{

System.out.print("1");

}

public A(){

System.out.print("2");

}

}

class B extends A{

static{

System.out.print("a");

}

public B(){

System.out.print("b");

}

}

public class Hello{

public static void main(String[] ars){

A ab = new B(); //执行到此处,结果: 1a2b

ab = new B(); //执行到此处,结果: 1a2b2b

}

}

  注:类的static 代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造

18、抽象类和接口的区别?

(1)接口可以被多重implements,抽象类只能被单一extends

(2)接口只有定义,抽象类可以有定义和实现

(3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)

当功能需要累积时用抽象类,不需要累积时用接口。

19、什么是类的返射机制?                                                                  通过类(Class对象),可以得出当前类的fields、method、construtor、interface、superClass、modified等,同是可以通过类实例化一个实例、设置属性、唤醒方法。Spring中一切都是反射、struts、hibernate都是通过类的返射进行开发的。

20、类的返射机制中的包及核心类?

  java.lang.Class

  java.lang.refrection.Method

  java.lang.refrection.Field

  java.lang.refrection.Constructor

  java.lang.refrection.Modifier

  java.lang.refrection.Interface

21、得到Class的三个过程是什么?

对象.getClass()

        类.class或Integer.type(int)  Integer.class(java.lang.Integer)

        Class.forName();

22、如何唤起类中的一个方法?

产生一个Class数组,说明方法的参数

通过Class对象及方法参数得到Method

通过method.invoke(实例,参数值数组)唤醒方法

23、如何将数值型字符转换为数字(Integer,Double)?

Integer.parseInt(“1234”)

Double.parseDouble(“123.2”)

24、如何将数字转换为字符?

1+””

1.0+””

25、如何去小数点前两位,并四舍五入。

double d=1256.22d;

d=d/100;

System.out.println(Math.round(d)*100);

26、如何取得年月日,小时分秒

Calendar c=Calendar.getInstance();

        c.set(Calendar.YEAR,2004);

        c.set(Calendar.MONTH,0);

        c.set(Calendar.DAY_OF_MONTH,31);

        System.out.println(c.get(Calendar.YEAR)+"  "+(c.get(Calendar.MONTH)+1)+"  "+c.get(Calendar.DAY_OF_MONTH));

27如何取得从1970年到现在的毫秒数

Java.util.Date dat=new Date();

long now=dat.getTime();

28如何获取某个日期是当月的最后一天

当前日期加一天,若当前日期与结果的月份不相同,就是最后一天。

 

取下一个月的第一天,下一个月的第一天-1

 

public static void main(String[] args)

    {

        Calendar c=Calendar.getInstance();

        c.set(Calendar.YEAR,2004);

        c.set(Calendar.MONTH,0);

        c.set(Calendar.DAY_OF_MONTH,30);

        Calendar c1=(Calendar)c.clone();

        System.out.println(c.get(Calendar.YEAR)+"  "+(c.get(Calendar.MONTH)+1)+"  "+c.get(Calendar.DAY_OF_MONTH));

       

        c.add(Calendar.DAY_OF_MONTH,1);

        if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH))

        {

            System.out.println("是最后一天");

        }

        else

        {

                     System.out.println("不是取后一天");

           

        }

    }

29、如何格式化日期

Import java.text. SimpleDateFormat;

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

Date dat=new Date();

//把日期转化为字符串

String str=sdf.format(dat);

System.out.println(str);

//将字符串转化为日期

Java.util.Date d1=sdf.parse(“yyyy-mm-dd”);

30、编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。

String a=new String("中".getBytes("gb2312"),"iso-8859-1");

String a=new String("中".getBytes("iso-8859-1"));

32、String s = new String("xyz");创建了几个String Object?

new了一个,”XYZ”本来又是一个

两个

33、float型float f=3.4是否正确?

  报错,应当是float f=3.4f

  如果是float f=3(整数)正确

35、说出一些常用的类,包,接口,请各举5个

常用的类:BufferedReader  BufferedWriter  FileReader  FileWirter  String  Integer

常用的包:java.lang  java.awt  java.io  java.util  java.sql javax.xml javax.sevlet javax.ejb.  java.net  javax.faces 

常用的接口: List  Map  Document  NodeList EjbObject EjbHome SessionBean  EntityBean

36、java中会存在内存泄漏吗,请简单描述。

会。如:int i,i2;  return (i-i2);   //when i为足够大的正数,i2为足够大的负数。结果会造成溢位,导致错误。

37、java中实现多态的机制是什么?

       静态的多态:方法名相同,参数个数或类型不相同。(overloading)

       动态的多态:

              子类覆盖父类的方法,将子类的实例传与父类的引用调用的是子类的方法

              实现接口的实例传与接口的引用调用的实现类的方法。     

38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

动态内存:存放类实例

静态内存:类本身

垃圾收集主要针对的是动态内存,一般当内存不够用时会进行垃圾收集。

或通过System.gc()手动收集,但不保证一定执行。

39、静态变量和实例变量的区别?

static i = 10; //常量

  class A a;  a.i =10;//可变

静态方法可以调用静态变量。

实现方法可以调用静态变量、实例变量

41、是否可以从一个static方法内部发出对非static方法的调用?

不可以,如果其中包含对象的method();不能保证对象初始化.

42、写clone()方法时,通常都有一行代码,是什么?

Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。

43、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

Try:执行部分,产生异常

Catch:捕捉异常

Finally:不管有没有异常都执行

Throws:在方法声明处声明要抛出的异常,调用者必须对其进行处理。

Throw:抛出一个异常

在try中可以抛出异常,一般与声明的异常相同。

自定义异常要继承于Exception或Exception的子类

45、冒泡排序法

//相邻两个数比较,将最小或最大的放到后面,最后面数的不参与比较

public class BubbleSort {

    private static int al[] = new int[10];

    public BubbleSort() {

        al[0]=2;

        al[1]=3;

        al[2]=23;

        al[3]=45;

        al[4]=1;

        al[5]=67;

        al[6]=23;

        al[7]=80;

        al[8]=35;

        al[9]=72;

    }

    public static void main(String[] args) {

        BubbleSort bs = new BubbleSort();

        System.out.println("排序前:");

        display(al);

       

        for(int i=0;i<al.length;i++) {

       

            for (int j = 0; j < al.length-i-1; j++) {

               

                if(al[j]>al[j+1]) {

                    swap(j,j+1);

                }

            }

        }

        System.out.println();

        System.out.println("排序后:");

        display(al);

    }

    private static void display(int[] al2) {

        for (int i = 0; i < al2.length; i++) {

            System.out.print(al2[i]+"  ");

        }

    }

    private static void swap(int i, int j) {

        int temp = al[i];

        al[i]= al[j];

        al[j] = temp;

    }

}

46、String and StringBuffer的区别?

String:长度给定不可变,当多个字符串联合时要先转为StringBuffer,再联合,速度慢。

StringBuffer:长度可变,可以将多个字符串值直接联合,效率高

47、用java代码编写堆栈

public class Stack {

 

    int[] data;

    int maxSize;

    int top;

    public Stack(int maxSize) {

        this.maxSize = maxSize;

        data = new int[maxSize];

        top = -1;

    }

   

    /**

     * 依次加入数据

     * @param data 要加入的数据

     * @return 添加是否成功

     */

    public boolean push(int data) {

        if(top+1== maxSize) {

            System.out.println("栈已满!");

            return false;

        }

        this.data[++top] = data;

        return true;

    }

   

    /**

     * 从栈中取出数据

     * @return 取出的数据

     */

    public int pop() throws Exception{

        if(top==-1) {

            throw new Exception("栈已空!");

        }

        return this.data[top--];

    }

   

    public static void main(String[] args) throws Exception {

        Stack stack=new Stack(1000);

        stack.push(1);

        stack.push(2);

        stack.push(3);

        stack.push(4);

        stack.push(5);

        while(stack.top>=0)

        {

            System.out.println(stack.pop());

        }      

    }

}

48、集合的作用是什么?

数据的传送 增、删、改、查、constainsAll,可以存放不同类型的对象。

49、集合的通用方法有那些?通用方法是什么?(操作)

集合List 的遍历方法有:

Iterator:

Enumeration

For

Get

set

Collection的通用方法有:

    Iterator()

    Add()

    Clear();

    remove()

   

50、说出ArrayList,Vector, LinkedList的存储性能和特性HashMap和Hashtable的区别

ArrayList Vector:以数组的方式存储,增、删慢,查、改快

       ArrayList:线程不安全,速度快

       Vector:线程安全,速度慢(synchoronized)

LikedList: 以单链表的方式存储,增、删快,查、改慢

 

HashMap与Hashtable都实现的Map接口,HashTable线程安全,HashMap线程不安全。

51、Collection 和 Collections的区别。

Collection是集合的根接口,其下有set及list

Collections是集合的算法。

52、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用。

 

在比较时先调用hashCode方法,如果不相同,证明不相等。

如果相同,再调用equals方法,如果equals方法相同,证明相等,不相同,证明不相等。

==:主要用在基本数据类型及引用

Equals:主要是对象或对象引用的比较。

集合中是否包含某一个元素用contains来判断。

53、List, Set, Map是否继承自Collection接口?

List,set继承于Collection

Map没有继承于Collection,其相对是独立的。

属于Collection类型的对象,可以通过构造函数将一个集合构造成另外一个集合。

54、面向对象的特征有哪些方面 

1.抽象:

    找共性,将共有的属性、方法放到父类中

2.继承:

    子类继承于父类,具有父类的所有属性与方法,可以重用,也可以覆盖。

3.封装:

    一个类包括多个属性及方法。

4. 多态性:

    动态:

    静态:

55、String是最基本的数据类型吗?

基本数据类型包括byte、int、char、long、float、double、boolean和short。

java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

56、int 和 Integer 有什么区别?

       Int是基本数据类型,不是对象,占一个内存空间,没有方法。与其同类的有long,char,doble

       Integer是封装类,具有方法及属性。与其同类的有Long,Double.Float

57、运行时异常与一般异常有何异同?

       运行时异常:java JVM抛出的异常,代码中不用处理。

       一般异常:用户抛出的异常,如果用throws 声明了,调用这个方法的代码必须对其处理。

58、&和&&的区别?

       &:与: 左边若为false右边还执行。

       &&:短路与,左边若为false右边不执行。

59、final, finally, finalize的区别?

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

算符可以用来决定某对象的类是否实现了接口。

62、heap和stack有什么区别?

栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。

堆是栈的一个组成元素

 

63Static Nested Class Inner Class的不同

Static Nested Class是被声明为静态(static)的内部类它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

64、什么时候用assert?

assertion (断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个 boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。

65、GC是什么? 为什么要有GC?

GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

66、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型) short s1 = 1; s1 += 1;(可以正确编译)

67、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

 Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回与参数最接近的长整数,参数加1/2后求其floor.

 

68、Java有没有goto?

 java中的保留字,现在没有在java中使用。

 

69、给我一个你最常见到的runtime exception

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

 

一般异常:

    IOException

    FileNotFoundException

    SqlException

   

70、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。任何抽象类都是实际类Object的子类。

71、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

    都不能

72、数组有没有length()这个方法? String有没有length()这个方法?

       数组没有length()这个方法,有length这个属性

String有length()这个方法.

73、构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

74、是否可以继承String类?

String类是final类故不可以继承。

75、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

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

会执行,在return前执行。

77、编程题: 用最有效率的方法算出2乘以8等於几?

2 << 3

78、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

不对,有相同的hash code。

79、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是引用传递

基本数据类型:值

对象: 引用

80、四种会话跟踪技术

Cookie

Session

Hidden

url 重写

81、编程题: 写一个Singleton出来

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

一般Singleton模式通常有几种种形式:

第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {

private Singleton(){}

      //在自己内部定义自己一个实例,是不是很奇怪?

      //注意这是private 只供内部调用

      private static Singleton instance = new Singleton();

      //这里提供了一个供外部访问本class的静态方法,可以直接访问  

      public static Singleton getInstance() {

        return instance;   

      }

    }

    第二种形式:

public class Singleton {

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     

  //使用时生成实例,提高了效率!

  if (instance==null)

    instance=new Singleton();

return instance;   }

}

其他形式:

定义一个类,它的构造函数为private的,所有方法为static的。

一般认为第一种形式要更加安全些

83、Java中的异常处理机制的简单原理和应用。

原理

    有错直接转到异常处理部分或向上抛出。

应用:

JAVA的异常就是错误,有两种一种是运行时,编码可以不用捕捉。一种是一般异常,如果throws声明了,必须进行处理。

84、垃圾回收的优点和原理。并考虑2种回收机制。

优点:

    程序员不用管内存,jvm自动完成,开发方便。运行优先非常低,程序无法清楚实例什么时候被消毁。

 

86、char型变量中能不能存贮一个中文汉字?为什么?85、描述一下JVM加载class文件的原理机制?

JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

 

能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的

 

88、写一个程序,从文件(c:\test.txt)中查出字符串”mobnet”出现的次数?

 

 

java基础类库(io流,集合类,线程,Socket,AWT,Swing,sql)

1、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于Reader Writer。在java.io包中还有许多其他的流,低层流与调层流,高层流主要是为了提高性能和使用方便。

2、启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,启动线程并调用run方法。

3、线程的基本概念、线程的基本状态以及状态之间的关系

线程是进程内的并发,没有自已内存空间,共享进程的,线程间的通信成本较低。

Java中的线程有四种状态分别是:运行、就绪、挂起、结束。

4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?

Extends Thread

Implements Runnable

同步

Public synchronized aa()

{

 

}

 

 

Public void cc(object aa)

{

       synchronized(aa)

{

}

}

 

用synchoronized修饰同步方法。

 

答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方面有两种,分别是synchronized,wait与notify

反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。

 

5、集合框架有什么?

Collection                                                            Map

    List             set                                     HashMap

ArrayList  linkedList  HashSet  TreeSet

 

12、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序

 

public class TestThread

{

    private int j;

    public synchronized void inc()

    {

        j++;

        System.out.println(Thread.currentThread().getName() + "-inc:" + j);

    }

    public synchronized void dec()

    {

        j--;

        System.out.println(Thread.currentThread().getName() + "-dec:" + j);

    }

    public static void main(String[] args)

    {

        TestThread t=new TestThread();

        for (int i = 0; i < 2; i++)

        {

            Thread inc=new Thread(new Inc(t));

            Thread dec=new Thread(new Dec(t));

            inc.start();

            dec.start();

        }

    }

}

   

    class Inc implements Runnable

    {

        private TestThread obj;

        public Inc(TestThread obj)

        {

            this.obj=obj;

        }

        public void run()

        {

//          for (int i = 0; i < 100; i++)

//          {

                this.obj.inc();

//          }

        }

    }

    class Dec implements Runnable

    {

        private TestThread obj;

        public Dec(TestThread obj)

        {

            this.obj=obj;

        }

        public void run()

        {

//          for (int i = 0; i < 100; i++)

//          {

                this.obj.dec();

//          }

        }

    }

 

13、同步和异步有和异同,在什么情况下分别使用他们?举例说明。

同步:上一段代码没的完成,下一段必须等到上一段代码完成后才可以执行。如买票排队

异步:上一段代码没的完成,下一段不必等到上一段代码完成就可以执行。如手机发送短信。

14、sleep() 和 wait() 有什么区别?

Sleep是指休眠给定的时间,当这个时间达到之后,线程会再次醒来。

Wait是等待状态,多长时间不清楚,由另一个线程将其唤醒。

 

15、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

如只其它方法是同步方法,不可以进入。如果不是可以进入。

17、输入输出流的理解:

    在java使用流的机制进行数据的传送,从文件到内存是输入流,从内存到文件是输出流,输入流可以通过 read读取,输出流以write或print写入,对于流可以是分为高层流和低层流,低层以 一个字节或字符为单位进行处理,高层流以一批数据为单位进行处理。

     FileInputStream(System.in)至InputSteamReader至BufferReader

     OutputSteam(System.out)至printStream

     FileReader至BufferedReader

     FileWriter 至 PrintWriter或bufferWriter

分类:

    字节(二进制)

            FileInputStream(低层输入流)

            FileOutputStream(低层输出流)

 

            PrintStream(高层流)  System.out.println()

    字符(一个char)

            FileReader

            FileWriter

 

18、请写一个程序的读写,要求用两种方式一种是低层流另一种是高层流。

 

import java.io.FileWriter;

import java.io.InputStream;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.BufferedReader;

import java.io.FileReader;

 

 

public class Untitled1 {

    public static void writeFileChar() throws Exception {

        FileWriter f = new FileWriter("c:\\aa.txt");

        InputStream is = System.in;

        int c = is.read();

        while (((char) c) != 'x') {

            f.write(c);

            c = is.read();

        }

        f.close();

        is.close();

    }

 

    public static void writeFileString() throws Exception {

        FileWriter f = new FileWriter("c:\\aa.txt");

        BufferedWriter bwr=new BufferedWriter(f);

        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

        String c = bf.readLine();

        while (!c.equals("stop")) {

            bwr.write(c+"\r\n");

            c = bf.readLine();

        }

        bwr.close();

        f.close();

        bf.close();

    }

   

    public static void readFileChar() throws Exception {

       FileReader f = new FileReader("c:\\aa.txt");

       int c = f.read();

       while (c!=-1) {

           System.out.print((char)c);

           c=f.read();

       }

       f.close();

   }

 

   public static void readFileString() throws Exception {

       BufferedReader bf = new BufferedReader(new FileReader("c:\\aa.txt"));

       String c = bf.readLine();

       while (c!=null)

       {

           System.out.println(c);

           c=bf.readLine();

       }

       bf.close();

   }

 

 

    public static void main(String[] args) throws Exception {

        readFileString();

    }

}

19、如何列出某个目录下的所有文件

Import java.io.File;

File f=new File("C:\\");

        File[] f1=f.listFiles();

        for(int i=0;i<f1.length;i++)

        {

            if(f1[i].isDirectory())

            {

                System.out.println("dirctory is"+f1[i].getName());

            }

            else

            {

                System.out.println("file is"+f1[i].getName());

            }

        }

    }

  1. 如何列出某个目录下的所有子目录

public static void main(String[] args) throws Exception

{

       getFile(new File("C:\\entityBean"),"\t");

}

public static void getFile(File f,String sem) throws Exception

{

        System.out.println(sem+f.getName());

        File fl[]=f.listFiles();

        if(fl.length>=1)

        {

            for(int i=0;i<fl.length;i++)

            {

                if(fl[i].isDirectory())

                {

                    getFile(fl[i],sem+"\t");

                }

            }

        }

    }

  1. 判断一个文件或目录是否存在

  File f=new File("C:\\entityBean");

   if(f.exists())

   {

          System.out.println("exist");

   }

    else

    {

        System.out.println("not exist");

    }

Socket

20、用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据?

public class ServerSocket_1

{

    public static void main(String[] args)

            throws Exception

    {

        ServerSocket ss = new ServerSocket(4001);

        Socket s = ss.accept();

        BufferedReader br = new BufferedReader(new InputStreamReader(s.

                getInputStream()));

        PrintStream ps=new PrintStream(s.getOutputStream());

        String temp = br.readLine();

        while (true)

        {

            System.out.println("客户端:"+temp);

            ps.println(temp);

            if (temp.equals("stop"))

            {

                break;

            }

            temp = br.readLine();

        }

        br.close();

        ps.close();

        ss.close();

    }

}

 

public class ClientSocket

{

  public static void main(String[] args) throws Exception

  {

      Socket s = new Socket("localhost", 4001);

      PrintStream ps = new PrintStream(s.getOutputStream());

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

      BufferedReader br_server = new BufferedReader(new InputStreamReader(s.

              getInputStream()));

      String temp = br.readLine();

      while (true)

      {

          ps.println(temp);

          temp = br_server.readLine();

          System.out.println("服务器的信息:" + temp);

          if (temp.equals("stop"))

          {

              break;

          }

          temp = br.readLine();

      }

      s.close();

      br.close();

      br_server.close();

  }

}

 

23、介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)?

答:Collection FrameWork如下:

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set

Map

├Hashtable

├HashMap

└WeakHashMap

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)

Map提供key到value的映射

 

24、请说出你所知道的线程同步的方法

HashTable中的put,get,remove

Vector的相关方法。

 

jdbc数据访问技术

1、JDBC如何做事务处理?

       Con.setAutoCommit(false)

       Con.commit();

       Con.rollback();

2、写出几个在Jdbc中常用的接口

preparedStatement,callableStatement,statement,Connection,ResultSet

3、简述你对Statement,PreparedStatement,CallableStatement的理解

statement用于执行静态 SQL 语句并返回它所生成结果的对象,在执行时确定sql。

 

 

 

PreparedStatement表示预编译的 SQL 语句的对象。 SQL 语句被预编译并且存储在 PreparedStatement 对象中。然后可以使用此对象高效地多次执行该语句,可以传参数,在得到PreparedStatement对象时确定sql.

CallableStatement用于执行 SQL 存储过程的接口。如果有输出参数要注册说明是输出参数。

 

4、Java中访问数据库的步骤?

1连接Oracle数据库

Class.forName(“oracle.jdbc.driver.OracleDriver”);

Connection con=DriverManager.openConnection(“jdbc:oracle:thin:@localhost:1521:DataBase ”,” UserName”,”Password ”)

  1. 利用JDBC检索出表中的数据

Class.forName(“”);

Connection con=DriverManager.openConnection(“ ”,” ”,” ”)

preparedStatment  ps=Con.preparedStatment(“select * from [table]”);

ResultSet rs=ps.executeQuery();

While(rs.next)

{

    Rs.getString(1) 或rs.getString(“字段名”)

}

5、JDBC中的核心类及其作用是什么?

DriverManager

                            Class.forName();

                            DriverManager.openConnection(“”,”sa”,””)

              Connection  

              PreparedStatement(Statement)

                            ResultSet  rs=executeQuery()  dql

                                          While(rs.next())

                                          {

 

}

                            executeUpdate()  dml ddl

6、执行存储过程用那一个类,如何操作输出参数?(操作) 

CallableStatement c=con. prepareCall ("{call getCustomerName(?,?)}");

c.setString(1,"1");

c.registerOutParameter(2,java.sql.Types.VARCHAR);

c.execute();

c.getString(2);

8、可能会让你写一段Jdbc连Oracle的程序.

Class.forName("oracle.jdbc.driver.OracleDriver");

        Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:accp","system","system");

9、Class.forName的作用?为什么要用?

注册一个数据库驱动,将驱动加载到当前的JVM中。

  1. Jdo是什么?  

JDO是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据底层上运行。JDBC只是面向关系数据库(RDBMS)JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。(o/rMapping工具 集合处理)

11、在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法

create or replace package myPack

is

    type c_type is ref cursor;

    procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type);

end;

 

create or replace  package  body myPack

is

    procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type)

  is

    pageTotal int:=0;

    pageFirstRow int:=0;

    pageLastRow int:=0;

    rowTotal int:=0;

  begin

    execute immediate 'select count(*)  from ('||v_sql||')' into rowTotal;

    pageTotal:=ceil(rowTotal/pageSize);

    if(pageIndex<1) then

           raise_application_error(-20001,'页数不能小于1');

    end if;

    if(pageIndex>pageTotal) then

           raise_application_error(-20001,'页数太大,不能读取');

    end if;

    pageFirstRow:=(pageIndex-1)*pageIndex+1;

    pageLastRow:=pageFirstRow+pageSize;

    open c for ' select * from '||v_sql||' where rownum<'||

         pageLastRow||'minus select * from '||v_sql

         ||' where rownum<'||pageFirstRow;   

  end;

end;

Web编程Jsp&Servlet技术

1、简单说说tomcat的配置?

JAVA_HOME=JDK的根目录

CATALINA_HOME=tomcat的根目录

 

CATALINA-HOME\conf\server.xml:可以配置tomcat的端口,可以配置tomcat中下连接池。

CATALINA-HOME\common\lib:存放公用的类包

 

在My eclipse中如何配置tomcat

在eclipse中,选择windows->preference->MyEclipse->ApplicationServer->Tomcat

选择Tomcat 的安装目录,并选择TomCat所需的jdk,选择enable,确定即可。

2、JSP中动态INCLUDE与静态INCLUDE的区别?

jsp:include:在运行时调用另一个页面,变量是可以重复的。

<%@include file=””%>:在转译时合在一起,会成为同一个类,变量不可以重复。

3、forward和redirect的区别?

forward: 转发,在下一个页面中,request保留上一个页面中的request的所有值

   

redirect: 跳转,不传递request对象。

4、Servlet的体系结构是什么?

Servlet

GenericServlet

HttpServlet

自定义

5、如何实现一个自定义的servlet?

extends HttpServlet 并覆盖doPost或doGet方法

 

在web.xml中进行部署

6、Servlet的生命周期是什么?

Init

多次执行doGet或doPost 

destroy

7、jsp就是一个servlet是否正确?

8、请罗列jsp中的脚本、指令及动作?

脚本

                     <%%>  <%=%>  <%!%> <%----%>

              指令

                     <%@page contentType=”text/html;charset=utf-8” language=”java” import=””%>

                     <%@include file=””%>

                     <%@taglib uri=”” prefix=””%>

              动作:

                     <jsp:useBean class=”” id=”” scope=””>  在scope中如果没有实例化一个对象,如果有直接用以前的。

                     <jsp:getProperty name=”” property=””>  向一个bean中设置属性值

                     <jsp:forward >  jsp页的转发

                     <jsp:include page=””>  导入一个jsp页面

9、JSP的内置对象及方法

Request:表示HttpServletRequest对象。取客户端表单域信息及cookie, header, 和session

response :表示HttpServletResponse对象,对客户端的响应返回文本、写cookies。

out:向客户端打印html文本.

pageContext :当前jsp页面的上下文环境,可以得到session、request、application等内置对象,在自定义标签中使用的很多。

Session:表示一个请求的javax.servlet.http.HttpSession对象。Session一个用户多个页面共享同一变量。

application:表示一个javax.servle.ServletContext对象。存放容器级的变量。

config:表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。

page :表示从该页面产生的一个servlet实例

exception:异常,当iserrorpage=true

10、说出在JSP页面里是怎么分页的?

页面需要保存以下参数:(数据库的分页及比较)

总行数:根据sql语句得到总行数

每页显示行数:设定值

当前页数:请求参数

页面根据当前页数和每页行数计算出当前页第一行行数,定位结果集到此行,对结果集取出每页显示行数的行即可。

 

数据库:

Sqlserver:

              SELECT TOP 页大小 *

FROM TestTable

 

WHERE (ID NOT IN

        (SELECT TOP 页大小*(页数-1) id

         FROM 表

         ORDER BY id))

ORDER BY ID

 

 

--pageSize=5  页大小

--pageIndex=2 所要的页

--如果有主键可以,没以及键不行

select top 5 *

from aa where a1 not in

(select top 5 a1 from aa order by a1)

order by a1;

 

oracle:

       select * from '||v_sql||' where rownum<'||

         pageLastRow||'minus select * from '||v_sql

         ||' where rownum<'||pageFirstRow;

 

 

Session

       先取出数据中的所有信息封装到对象并保存在session中,转发到jsp页面做如下处理。

       <table border="1">

    <tr>

      <td>a1</td>

      <td>a2</td>

    </tr>

<%

     List l=(List)session.getAttribute("as");

     //一页显示多少行

     int pageSize=3;

     //总页数

     int pageCount=0;

     int currentPage=1;

     if(l!=null && l.size()>0)

     {

     pageCount=(l.size()/pageSize)+(l.size()%pageSize==0?0:1);

     if(request.getParameter("page")!=null)

     {

       currentPage=Integer.parseInt(request.getParameter("page"));

     }

     if(currentPage<1)

     {

       currentPage=1;

     }

     if(currentPage>pageCount)

     {

       currentPage=pageCount;

     }

     for (int i = (currentPage-1)*pageSize; i <(currentPage-1)*pageSize+pageSize; i++)

     {

       if(i>=l.size())

       {

         break;

       }

       Aa aa=(Aa)l.get(i);

       %>

        <tr>

      <td><%=aa.getA1()%></td>

      <td><%=aa.getA2()%></td>

    </tr>

       <%

       }

     }

%>

<tr>

  <td colspan="2">

    <%

    if(currentPage!=1)

    {

    %>

    <a href="page.jsp?page=1">首页</a>&nbsp;&nbsp;

    <a href="page.jsp?page=<%=currentPage-1%>">上一页</a>&nbsp;&nbsp;

    <%

    }

    if(currentPage!=pageCount)

    {

    %>

    <a href="page.jsp?page=<%=currentPage+1%>">下一页</a>&nbsp;&nbsp;

    <a href="page.jsp?page=<%=pageCount%>">最后一页</a>&nbsp;&nbsp;

    <%

    }

    %>

  </td>

</tr>

  </table>

   

11、include的两种实现方式的区别?

<@include file>:在将jsp生成servlet类前将两个文件和在一起,生成一个java类,一起运行的。所以是一家子,当中的变量名不能重名。

<jsp:include page>:是两个类,是一个调用关系,在运行时动态的调用,不是一家子,可以重复变量。

12、jsp页面中两种跳转方式分别是什么?有什么区别?

转发: 保留上次的request

              <jsp:forward>

              actionMapping.findForWard(“”);

              pageContext.forward();

              request.getRequestDispacher(“a.jsp”).forward(request,response)

跳转:不保留上次的request

              Response.setRedirect(“”)

13、描述JSP和Servlet的区别、共同点、各自应用的范围

Jsp主要在于页面的显示动态生成页面,可以与html标记一起使用,其还是要生成为一个servlet。

Servlet:主要是控制的处理,如调用业务层,跳转不同的jsp页面。

MVC:

              Jsp:V

              Servlet:C

              JavaBean:M

14、在JSP中如何读取客户端的请求,如何确定某个Jsp文件的真实路径?

Request.getparameter(“”)

<%=application.getRealPath("aa.jsp") %>

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

Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。

Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。存储的数据量大,安全性高。占用服务端的内存资源。

16、说明Jsp中errorPage的作用,应用范围。

正常页面中

%@page erropage=”error.jsp”%

              错误页面

                     <%@page iserrorpage=”true”%>

                             有一内置对象:exception

17、介绍在Jsp中如何使用JavaBeans

<jsp:useBean class=”” id=”” scope=””/>

<%

       New 类();

%>

19、简单介绍JSP的标记库

做一个标记处理类 extends TagSupport

通过tld说明标记处理的类的前缀及后缀

在web.xml中说明tld文件

<taglib>

              <taglib-uri>

              <taglib-location>

<taglib>

在jsp页面是引用tld<%@taglib uri=”” prefix=””%>

20、Servlet中的核心类有那些,各有什么特点?

ServletContext:容器,放置全局变量

       setAtribute()

       getAttribute()

ServletConfig:一个servlet的配置

       getInitParameter(”名称”)

HttpServletRequest:封装的所有的请求

       getParameterValue(”名称”)

       getParameterValues(”称”)

getSession();

       getAttribute(” 名称”);

       getRequestDispatch(”a.jsp”).forward(request,response)

HttpServletResponse:响应

       getOut();

       sendRedirect(””)                                             

HttpSession:一个用户多个页面共享同一变量

       setAttribute(””,””)

21、Servlet中重要的包有那些,有什么区别?

javax.servlet.*;javax.servlet.http.*;

22、说出Servlet的生命周期,并说出Servlet和CGI的区别?

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

 

与cgi的区别在于servlet处理服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

23、什么情况下调用doGet()和doPost()?

Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。

25、如何现实servlet的单线程模式

在doGet及doPost方法前加入synchoronized

JSP:

<%@ page isThreadSafe="true"%>

27、Request对象的主要方法:

setAttribute(String name,Object):设置名字为name的request的参数值

getAttribute(String name):返回由name指定的属性值

getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例

getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组

getCharacterEncoding():返回请求中的字符编码方式

getContentLength():返回请求的Body的长度

实例

getInputStream():返回请求的输入流,用于获得请求中的数据

getMethod():获得客户端向服务器端传送数据的方法

getParameter(String name):获得客户端传送给服务器端的有name指定的参数值

getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

getParameterValues(String name):获得有name指定的参数的所有值

getProtocol():获取客户端向服务器端传送数据所依据的协议名称

getQueryString():获得查询字符串

getRequestURI():获取发出请求字符串的客户端地址

getRemoteAddr():获取客户端的IP地址

getRemoteHost():获取客户端的名字

getSession([Boolean create]):返回和请求相关Session

getServerName():获取服务器的名字

getServletPath():获取客户端所请求的脚本文件的路径

getServerPort():获取服务器的端口号

removeAttribute(String name):删除请求中的一个属性

28、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?

  Public String translate (String str) {

    String tempStr = "";

    try {

      tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");

      tempStr = tempStr.trim();

    }

    catch (Exception e) {

      System.err.println(e.getMessage());

    }

    return tempStr;

  }

30、Servlet执行时一般实现哪几个方法?

public void init(ServletConfig config)

public ServletConfig getServletConfig()

public String getServletInfo()

public void service(ServletRequest request,ServletResponse response)

public void destroy()

5 Hibernate持久层技术

1、在myeclipse加入hibernate环境的全过程是什么?

Db-browers加入配置连接

新建工程

加入hibernate环境,指定*.hbm.xml及HibernateSessionFactory文件所在的位置

2、hibernate的核心配置文件是什么及其作用?

Hibernate.cfg.xml:数据库连接、指定相关的映射文件

       *.hbm.xml:具体的o/r mapping说明

3、hibernate的核心类是什么,它们的相互关系是什么?重要的方法是什么?

Configuration

SessionFactory

Session如下方法

                     Save

                     load

                     Update

                     Delete

                  Query q=CreateQuery(“from Customer where customerName=:customerName”)

                     beginTransaction

                     close

                     Transaction

                     Commit()       

4、关联:

       one-to-many

       inverse:主控方,外键的关系有谁控制

              inverse=false 是主控方,外键是由它控制的                

              inverse=true 是被控方,外键与它没关系

              要想实现主控方的控制必须将被控方作为主控方的属性

       cascade:级联

              主表增从表增

              主表修从表修

              主表删从表删

       lazy:延迟

              lazy=false:一下将所有的内容取出,不延时(常用)

              lazy=true:取出部分内容,其余内容动态去取

              通过get可以取出对方的所有内容          

5、hibernate中的one-to-many或many-to-one中常用的方式是什么?

主控方在many这边,不及连删除

6、Criteria 的作用?

       Criteria c=session.createCriteria(Customer.class);

       //设置条件

       c.add(Expression.ge(“字段名”,”值对象”))

              ge:>=

              gt:>

              le:<=

              lt:<

              eq:=

       //排序

              c.addOrder(Order.asc(“字段名”))

       //分页

              c.setFirstResult(1)//从第2行开始提取

              c.setMaxResults(5)//返回5行

7、DetachedCriteria的作用?

产生时不需要session

       DetachedCriteria dc= DetachedCriteria.forClass(Customer.class)

       Criteria c=Dc.getExecutableCriteria(session)

8、Query

1 个或多个属性查询:

       Query query=session.createQuery(”select customername,customerid from Customer”)

       List l=query.list();

       For(int i=0;i<l.size();i++)

{

       Obejct[] object=(Object[])l.get(i);

       Object[0]  object[1]

}

}

分组: "select count(*),productname from Product group by productname order by productname"

取值与属性一样

配置的查询,在*.hbm.xml中

       <query name="sql">

    <![CDATA[

           from Product where productid=:productid

    ]]>

</query>

       Query query=session.getNamedQuery(sql);

联接1

       "from Customer as customer join fetch customer.buySet":将多的放到buySet属性中,得出的结是Customer有一个,Buy有多个

联接2

"from Customer as customer join customer.buySet":得出的对象,customer与buy是1对1

子查询:

       "from Customer as customer where (select count(*) from customer.buySet)>1"

9、继承关系的实现

       1、两个表,子类重复父类的属性。

       2、一个表,子类父类共用一个表

                <class name="Users" table="users" discriminator-value="Users">

                     <discriminator column="DISCRIMINATOR_USERTYPE" type="string"/>

<subclass name="admin" discriminator-value="admin">

                             <property name="adminRemark" column="admin_remark" type="string" />

                    </subclass>

                </class>

       3、两个表,子类引用父类的主键,享用公共的字段或属性。

    <class name="Users" table="users">

        <id name="userid" column="USERID" type="string">

            <generator class="assigned"/>

        </id>

        <property name="pwd" column="pwd" type="string" />

             <joined-subclass name="Guest" table="guest">

                    <key column="USERID"/>

               <property name="guestRemark" column="guest_remark" type="string" />

        </joined-subclass>

</class>

批量删除

       Query query=session.createQuery("update"或"delete");

       query.executeUpdate();

10、tomcat连接池:在容器中预先产生了n个连接实例,客户端不用重新实例化,可以直接取。

       6.1、在tomcat-5.0\conf\server.xml中</host>前面加入如下内容

     <Context path="/app1" docBase="app1" debug="0"    reloadable="true" crossContext="true">  

       <Resource name="jdbc/sa" auth="Container" type="javax.sql.DataSource"/>  

                <ResourceParams name="jdbc/sa">

                 <parameter>         

                        <name>factory</name>       

                        <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>       

                 </parameter>                 

              <parameter>         

                                 <name>driverClassName</name>       

                      <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>       

                 </parameter>               

              <parameter>  

                      <name>url</name>       

                    <value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev;SelectMethod=cursor</value>         

             </parameter>        

                 <parameter>                    

                     <name>username</name>          

                       <value>sa</value>                

              </parameter>        

                 <parameter>                    

                     <name>password</name>                     

                     <value></value>  

                 </parameter>        

                 <parameter>                    

                     <name>maxActive</name>                   

                      <value>20</value>                

              </parameter>

                 <parameter>         

                      <name>maxIdle</name>                       

                     <value>10</value>                

              </parameter>                 

              <parameter>  

                      <name>maxWait</name>                      

                     <value>-1</value>                

              </parameter>        

                 </ResourceParams>    

       </Context>

       6.2、将sql-server包拷贝到C:\tomcat-5\common\lib

       6.3、jdbc测试代码

              Context initCtx = new InitialContext();

            Context envCtx = (Context)initCtx.lookup("java:comp/env");

              ds = (DataSource)envCtx.lookup("jdbc/sa");

              Connection conn = ds.getConnection();

       6.4、hibernate通过连接池实现连接

              <session-factory name="foo">

                     <property name="connection.datasource">java:comp/env/jdbc/sa</property>  <!--指定tomcat连接池-->

                     <property name="show_sql">true</property> <!--是否显示sql-->

                     <property name="dialect">org.hibernate.dialect.SQLServerDialect</property> <!--hibernate的驱动管理器-->

                     <mapping resource="com/accp/t15/Customer.hbm.xml"/>

              </session-factory>

 

11、对象的三大状态

       自由(transient)

              与session无关

       持久(persistent)

              由session来管理

              在持久状态中通过get方法取出对方

       游离(detached)

              被session抛弃    

12、hibernate常见优化策略

       用最新版本的hibernate

       制定合理的缓存策略

       采用合理的session管理机制

       尽量使用延迟加载

              many

              大文本、大文件

       设定合理的批处理参数(batch-size)

       如有可能,选用uuid作为主键生成器

       如有可能,选用基于version的乐观锁替代悲观锁

       开发过程中,打开hibernate的SQl日志输出(hibernate.show_sql=true),通过观察hibernate生成的sql语句进一步了解其实现原理,从而指事实上更好的实现策略。

  1. iBatis持久层技术

 

ibatis的原因:

       只对开发团队提供几条Select SQL(或存储过程)以获取所需数据,具体的表结构不予公开。

       开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现

       系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句

       (或存储过程)才能达到系统性能设计指标。

jdbc、hibernate、ibatis的区别

       jdbc:手动

              手动写sql

              delete、insert、update要将对象的值一个一个取出传到sql中,不能直接传入一个对象。

              select:返回的是一个resultset,要从ResultSet中一行一行、一个字段一个字段的取出,然后封装到一个对象中,不直接返回一个对象。

       ibatis的特点:半自动化

              sql要手动写

              delete、insert、update:直接传入一个对象

              select:直接返回一个对象                 

       hibernate:全自动

              不写sql,自动封装

              delete、insert、update:直接传入一个对象

              select:直接返回一个对象

ibatis的核心配置文件:

       sqlmapclient.xml:数据库连接及相关o/rMapping的映射文件(hibernate.cfg.xml)

       sqlmapBuy.xml:具体的o/rmapping映射(*.hbm.xml)

              四大标记:

                     select

                     update

                     delete

                     insert

                     procedure

ibatis的核心类:

       SqlMapClientBuilder:加载配置文件,返回一个会话。

       SqlMapClient:具体的会话

              List list=queryForList("标签名",object);

              Object obj=queryForObject("标签名",object);

              delete("标签名",object)

              update("标签名",object)

              insert("标签名",object)

工程的使用:

       将ibatisfactory拷贝到工程目录下

       将ms的3个包及ibatis的三个包拷贝到/WEB-INF/lib下

       修改ibatisfactory中的abatorConfig.xml文件

       进入ibatisfactory目录运行java -jar  abator.jar abatorConfig.xml true

       将sql标记、select、update、insert、delete的副本删除

spring&ibatis:

       dataSource

       sqlMapClient:SqlMapClientFactoryBean

              configLocation

                     classpath:sqlMapClient.xml

                     /WEB-INF/sqlMapClient.xml

              dataSource

       transactionManager:DataSourceTransactionManager

              dataSource

       customerDao extends SqlMapClientDaoSupport

              sqlMapClient

       buyDao

              sqlMapClient

       Facade

              buyDao

              customerDao

       abstractProxy:TransactionProxyFactoryBean

              transactionManager

              transactionAttributes

       facadeProxy

              target:façade

7 Structs界面控制层技术

1、请说出struts框架的几大组件?

              1、MVC

              2、标签库

              3、校验框架

              4、国际化

              5、tiles

3、struts的核心类有那些,在MVC模式中其对应的关系是什么?

C

ActionServlet

       RequestProcessor

       Action

       actionMapping(struts-config.xml)

       actionFormard

V

ActionForm

Jsp

M

       Dao

       Manager(facade)

4、Struts的处理请求的全过程是什么?

url-> ActionServlet(process)-> RequestProcessor(process)->实例化form ->填充form值->进行校验->实例化action->调用execute

5、在struts中如何通过一个url找到一个action,它的核心配置文件是什么?

配置文件是struts-config.xml

6、为什么使用MVC,其主要目的是什么?

让v与M强制解耦,提高可重用性(旅馆的服务员(C))

7、对于MVC在action中对应有类有几种,各有什么作用?

Action:

1)    基本的

DispatchAction:

2)    存在多个方法,根据页面传入的表单域的值调用不同的方法,表单域的名称在<action param=””/>标记中进行配置

LookupDispatchAction

3)    多个按钮用同一个action的不同方法。实现getMap方法,说明每一个按钮在*.properties中的键名及键值,在struts-config.xml通过parameter说明按钮的名称,按钮的值对应*.properties的值,通过值找键名,通过键名找Map中的键名找到值就是相应的方法。

    MappingDispatchAction:未知

    forwordAction:直接跳转到不同页面不执行逻辑(???)

    类所在的包:org.apache.struts.actions.ForwardAction

8、struts的标记有几类,请列举并说明其作用?    

Bean:

<bean:define scope=”” name=”” property=”” id=””/>

<bean:write  name=”customer” property=”customerName”/>            

<bean:message key=””/>国际化

Logic:

<logic:iteator>  //将集合的内容取出

<logic:present>  //

<logic:equals> //

Html:

<html:file>上传文件

<html:select property=”sex”>

          <html:options collection=”” property=”” labelProperty=””/>

</html:select>

9、如何在struts中配置数据源在,什么文件?用什么标签?如何取出DataSource?     

Struts-config.xml

<data-sources>

            <data-source key="data" type="org.apache.commons.dbcp.BasicDataSource">

                   <set-property property="driverClassName"   value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />

                    <set-property property="url"     value="jdbc:microsoft:sqlserver://localhost:1433;databaseName=t23" />

                    <set-property property="username" value="sa" />

                    <set-property property="password" value="" />             

             </data-source>

       </data-sources>

 

DataSource ds=(DataSource)this.getServlet().getServletContext().getAttribute("data");

              Connection con=ds.getConnection();

10、如何在jbuilder中开发struts?    

    工程

    Web模型(选中struts1.2.8,会自加在web –inf中生成tld及struts-config.xml,并加载相关的类包)

    建一个ActionForm

    建一个Action

    修改struts-config.xml文件

11、如何实现struts的validator框架?  

           手动:

                  public class myForm extends ActionForm   

                  {

                         public ActionErrors validate()

                         {

actionErrors.add(ActionErrors.GLOBAL_MESSAGE,new ActionMessage("properties中的键名"));

                         }

                  }    

                  struts-config.xml中修改action的标签validate=true

                         input="错误页面"

                  如果validate方法中的ActionErrors不为空且size>0时

                  会回到input页面。

           自动

                  public class myForm extends ValidateForm 

                  {

                         不能覆盖validate方法。

                         //public void validate()

                         //{

   

                         //}

                  }    

                  在struts-config.xml文件中加入插件

                         <plug-in className="org.apache.struts.validator.ValidatorPlugIn">

                                    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />

                       </plug-in>

    修改validation.xml中的内容

           errors.required={0} is required.

           errors.minlength={0} can not be less than {1} characters.

 

           <formset>

                  <form name="loginForm">

                         <field property="userName" depends="required">

                                <arg0 key="userName" />

                         </field>

                         <field property="pwd" depends="required,minlength">

                                <arg0 key="pwd" />

                                <arg1 key="${var:minlength}" resource="false"/>

                                <var>

                                       <var-name>minlength</var-name>

                                       <var-value>6</var-value>

                                </var>

                         </field>

                  </form>

           </formset>

           struts-config.xml中修改action的标签validate=true

                         input="/错误页面"

13、如何实现国际化?

国际化:不用修改代码,就适用于不同的语言国家

本地化:如果要适应一个国家,要修改源代码

实现过程:

       在struts-config.xml中用如下标签说明资源文件名,注意其只是文件名,没有语言_国家

               <message-resources parameter="struts.ApplicationResources" />

       在资源文件对应的目录struts中加入适应不同语言、国家的properties文件

              ApplicationResources_zh_CN.properties 中国

              ApplicationResources_en_US.properties us

       如果不是英语要转码

              native2ascii -encoding gb2312 源 ApplicationResources_zh_CN.properties

       在jsp页面中用

              <bean:message key=""/>取出信息

8 JSF界面控制层技术

1、Jsf中的核心类用那些?有什么作用?   

核心类

              FacesServlet

LiftCycle    FacesContext 

       

2、Jsf中的LiftCycle六大生命周期是什么?

恢复视图->应用请求值->校验->更新模型->调用应用程序->呈现响应

3、如何管量web层中的Bean,用什么标签。如何通过jsp页面与Bean绑定在一起进行处理?

<managed-bean>

                  <managed-bean-name>checkNumber</managed-bean-name>

           <managed-bean-class>jsf1.CheckNumber</managed-bean-class>

                  <managed-bean-scope>session</managed-bean-scope>

</managed-bean>

4、Jsf中导航的标签是什么?

<navigation-rule>

                  <from-view-id>/main.jsp</from-view-id>

                  <navigation-case>

                         <from-outcome>success</from-outcome>

                         <to-view-id>/result.jsp</to-view-id>

                  </navigation-case>

</navigation-rule>

5、jsf中用户界面组件模型有几类,各代表什么?

UI组件、事件监听、显示、类型转换、验证

6、表格处理及取值

import javax.faces.model.DataModel;

import javax.faces.model.ListDataModel;

       DataModel:代表一个表格,其可以从客户端传上来。

              实例化:

                     DataModel dm=new ListDataModel();

              将一个list值放入到DataModel中.  

                     dm.setWrappedData(list)

              将客户端当前行取出

                     (LogsVO) dm.getRowData()

对于多条的查询及增删改在模型中加入了如下属性:           

       模型的名称是bean,其下的属性是

              DataModel dm:代表返有的行数据

              VO vo:代表一行数据。

                     取一行:

                            vo=(VO) dm.getRowData();

                            通#{bean.vo.属性名},如果修改对应信息自动修改。

                     增加一行:

                            this.vo=new VO();

                            通#{bean.vo.属性名},显示肯定无值,但客户输入值提交后会将值勤写入

7、jsf的标签库有哪些?

       核心:f

              校验

                     <f:validateDoubleRange>

                     <f:validateLength>

              转化

                     <f:convertDateTime pattern="yyyy-MM-dd"/>                 

                     <f:convertNumber type="currency"/>

              选择框:

                     <f:selectItem/>

                     <f:selectItems/>

             

       html:h

              选择控件:

                     <h:selectOneRadio>:一个string

                     <h:selectManyCheckBox>:一个String数组

                     <h:selectOneMenu>:组合框架选择一个    

                     <h:selectManyMenu>:组合框架选择多个

                     <h:selectOneList>:下拉列表选择一个

                     <h:selectManyList>:下拉列表选择多个

              表格:

                     <h:dataTable value="集合" var="集合中的一个">

                            <h:column>

                                   <!--头-->

                                   <f:facet name=”header”>

                                          <h:outputText >

                                   </f:facet>

                                   <!--具体的行值-->

                                   <h:outputText value=""/>

                            <h:column>                       

                     </h:dataTable>

9 Spring 应用框架技术

1、Spring和Struts的区别?
      strusts:是一种基于MVC模式的一个web层的处理。

       Spring:提供了通用的服务,ioc/di aop,关心的不仅仅web层,应当j2ee整体的一个服务,可以很容易融合不同的技术struts hibernate ibatis ejb remote springJDBC springMVC

2、什么是aop,aop的作用是什么?

Oop:纵向的业务

Aop:oop的一个横向的服务,是对oop进一步的补充,提供安全、事务、日志等的集中式处理,相关的装备before、around、after exception

3、aop中的关键名词有些那些,相互关系是什么?

拦截器: 代理

装备(advice)

目标对象

关切点:条件

连接点:方法、属性

4、依赖注入的方式有几种,各是什么?

Setter

Interface

constructor

5、spring中的核心类有那些,各有什么作用?

BeanFactory:产生一个新的实例,可以实现单例模式

BeanWrapper:提供统一的get及set方法

ApplicationContext:提供框架的实现,包括BeanFactory的所有功能

6、ApplicationContext的作用

beanFactory

国际化(getMesage)

资源管理:可以直接读取一个文件的内容(getResource)

加入web框架中(加入一个servlet或监听器)

事件处理

7、如何实现资源管理

使用

applicationContext.getResource(“classpath:文件名”):在src根目录下,在类路径下

applicationContext.getResource(“classpath:/chap01/文件名”): 以src根目录下的基准往下走。

applicationContext.getResource(“file:c:/a.properties”):在系统文件目录下。

8、如何实现加入web框架中

在web.xml中加入如下同容,在启动web服务器时加载/WEB-INF/applicationContext.xml中的内容。

<servlet>

<servlet-name>context</servlet-name>

<servlet-class>

org.springframework.web.context.ContextLoaderServlet

</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

通过如下类得到ApplicationContext实例

                     WebApplicationContextUtils.getWebApplicationContext

9、如何实现事件处理

事件

              Extends ApplicationEvent

监听器

              Implements ApplicationListener

事件源

              Implements ApplicationContextAware

在applicationContext.xml中配置事件源、监听器

先得到事件源,调用事件源的方法,通知监听器。

10、spring的ioc及di代表什么意思?

Ioc:程序在运行过程中,根据配置文件动态加载所依赖的配置类

、如何在spring中实现国际化?

    在applicationContext.xml加载一个bean

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">

              <property name="basename">

                     <value>message</value>

              </property>

</bean>

    在src目录下建多个properties文件

    对于非英文的要用native2ascii -encoding gb2312 源  目转化文件相关内容

    其命名格式是message_语言_国家。

    页面中的中显示提示信息,键名取键值。

    当给定国家,系统会自动加载对应的国家的properties信息。

    通过applictionContext.getMessage(“键名”,”参数”,”区域”)取出相关的信息。

12、spring的配置的主要标签是什么?有什么作用?

<beans>

                     <bean id=”” class=”” init=”” destroy=”” singleton=””>

                            <property name=””>

                                   <value></value>

                            </property>

                            <property name=””>

                                   <ref local></ref>

                            </property>

                     </bean>

</beans>

13、spring与ejb2.0的事务管理比较的优缺点?

测试:

                     Spring:pojo

                     Ejb:二个接口一个类,一堆配置文件

事务类型

                     Spring:jdbc jta  hibernate

                     Ejb:jta

成本

                 Spring:普通容器(tomcat jboss)

                 Ejb:weblogic jboss

开发的周期:

                     Spring远比ejb快.

14、spring的jdbc与传统的jdbc有什么区别,其核心类有那些?

Spring的jdbc:节省代码,不管连接(Connection),不管事务、不管异常、不管关闭(con.close() ps.close )

JdbcTemplate(dataSource):增、删、改、查

TransactionTemplate(transactionManager):进行事务处理

15、在spring中有几种事务管理,分别是什么?

代码管理的事务处理

TransactonTemplate的execute方法中的内部类TransactionCallback中的doInTransaction方法中使用。

public void make()

       {    

              TransactionTemplate jtm=new TransactionTemplate(this.getTransactionManager());

              jtm.execute(new myClass1());

       }

       public class myClass1 implements TransactionCallback

       {

 

              public Object doInTransaction(TransactionStatus trans)

              {

                     JdbcTemplate jdbc=new JdbcTemplate(dataSource);

                     jdbc.execute("insert into customer(customerName) values('b')");

                     jdbc.execute("insert into customer(customerName) values('b')");

                     return null;

              }           

       }

                     容器管理的事务处理

16、在spring中如何配代码的事务管理?

Datasouce

                     transactionManager

                     userDao要注入

                            Datasouce

                            transactionManager

              通过如下类实现

                            TransactionTemplate

                            JdbcTemplate

17、在spring中如何配容器的事务管理,相关的类有那些?

Datasource

transactionManager

userDao要注入

Datasouce

Proxy代理

Target:userDao:代理对象(目标对象)

transactionAttributes(那些方法需要事务处理)

transactionManager(事务处理服务)

18、如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确?

不需要

19、spring+hibernate的配置文件中的主要类有那些?如何配置?

在myeclipse中先加入spring环境再加入hibernate环境。

       如果spring与hibernate结合在一起可以不需要hibernate.cfg.xml文件是否正确?

       spring+hibernate的配置文件中的主要类有那些?如何配置?

              dataSource

              sessionFactory:hibernate.cfg.xml

              transactionManager

              userDao (extends HibernateDaoSupport) 

                     sessionFactory

              facade

              proxy

                     sessionFactory

                     transactionManager

                     facade

20、spring+hibernate的代码实现中,对于实现类一定继承于一个类是那一个,它有什么作用。

extends HibernateDaoSupport,可以节省代码。

21、如何配置spring+struts?

    在struts-config.xml加入一个插件,通过它加载applicationContext.xml

    在struts-config.xml修改action-mapping标记,具体action交给了DelegateActionProxy

    通过DelegateActionProxy进入一spring的环境。

    在spring的applicationContext.xml加入<bean name="/login" class="" singleton="false"/>

22、如何在web环境中配置applicationContext.xml文件?

<listener>

              <listener-class>

                     org.springframework.web.context.ContextLoaderListener

              </listener-class>

       </listener>

       或:

       <servlet>

              <servlet-name>context</servlet-name>

                     <servlet-class>

                            org.springframework.web.context.ContextLoaderServlet

                     </servlet-class>

              <load-on-startup>1</load-on-startup>

       </servlet>

       通过如下方法取出applicationContext实例:

       ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext);

24、Jsf和spring的区别?

jsf:是一种基于MVC模式的一个web层的处理,粒度较struts较细。

       Spring:提供了通用的服务,ioc/di aop,关心的不仅仅web层,应当j2ee整体的一个服务,可以很容易融合不同的技术struts hibernate ibatis ejb remote springJDBC springMVC

 

Ejb技术

1、weblogic的热发布

       将ear、jar、war拷到C:\bea\user_projects\domains\mydomain\applications目录

       weblogic会自动发布

       通过jbuilder将ear或jar或war部署到服务器上。

2、在ejb中实现one-to-many

       1、在many中的将外键字段属性删除

       2、在删除many中的值时要将Collection转化为ArrayList,

          并反向遍历ArrayList,先删除ArrayList中值,根据

          ArrayList删除反回的对象转化为many的远程接口,通过

          远程接口将many删除

3、ejb所用的技术:

Jndi:java naming directory inferface

Rmi:    remote method invoke

4、实现ejb几个接口,几个类?

       两个接口一个类

       extends EJBHome

              通过jndi得到home接口

              create方法调用服务端的ejbCreate方法,在服务端产生一个EntityBean或SessionBean实例,向客户端返回一个远程接口。

              通过find方法在从服务端找到一个EntityBean实例,向客户端返回一个远程接口。

       extends EJBObject

              在客户端通过rmi调用远程服务端方法。

              通过remove方法调用服务端的ejbRemove方法,将EnityBean删除

       implements SessionBean

              在服务端实现真正的处理,实现核心业务

5、实现ejb相关的配置文件是什么?

       ejb-jar.xml:说明ejb的两个接口一个类的。

       weblogic-ejb-jar.xml:说明ejb的JNDI名

       weblogic-rdbms-ejb.xml:o-rMapping实现数据库表、字段与ejb属性对应的关系。

ejb2.0的开发

       1、用jbuilder集成环境

       2、可以用eclipse开发,用源代码注释说明,用ant执行xdoclet,xdoclet通

              过源代码注释自动生相关的配置、两个接口一个类。

              /**

              *     @stateLess

              *     @remote

              */

6、ejb的分类?区别

       sessionBean

              stateless:方法间不保留(1..1)

              statefull:方法间保留(1..n)

       entityBean:持久化

              cmp:增删改容器

              bmp:增删改手动jdbc

       message driver bean

              异处的消息处理

7、本地接口与远程接口的区别。

       EJBHome(在不同的进程或主机间调用,即不同的jvm)

       EJBObjet

       EJBLocalHome(在同一进程,同是jvm中)

       EJBLocalObject   

8、请求处理的过程?   

       会话

              url

              factory

       通过jndi得到一个home实例

       在客户端通过home实例在服务端产生一个sessionBean,客户端返回一个接口

       客户端通过远程接口调用方法。

9、statefull的生命周期

       不存在

              setSessionContext

              create--->ejbcreate

       就绪:可以调用remove方法将sessionBean删除、可以调用服务端的任何方法。

              ejbPassivate(从就绪到挂起)

              ejbActivate(从挂起到就绪)

       挂起      

              如果超时自动删除

10、stateless的生命周期

       不存在

              setSessionContext

              create--->ejbcreate

              remove-->ejbremove

       就绪

11、entityBean的生命周期:

       不存在

              setEntityContext

              create--->ejbcreate

       入池

              空房子,没加载数据

              ejbActivate

              ejbPassivate

       就绪

              remove-->ejbRemove

              加载了数据库的数据

 

12、EJB需直接实现它的业务接口或Home接口吗,请简述理由。

远程接口和Home接口不需要直接实现,

他们的实现代码是由服务器产生的,

程序运行中通过接口调用服务端产生的实例。

13、EJB的激活机制

以Stateful Session Bean 为例:其Cache大小决定了内存中可以同时存在的Bean实例的数量,根据MRU或NRU算法,实例在就绪和挂起状态之间迁移。

 

就绪:从文件到内存,调用ejbActivate方法

挂起:从内存到文件,调用ejbPassivate方法

14、EJB是基于哪些技术实现的?并说 出SessionBean和EntityBean的区别,

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

SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作。例如访问数据库、调用其他EJB组件.

EntityBean被用来代表应用系统中用到的数据.对于客户机,

SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑;

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 的优势却在于他可以维持使用者的状态.

15、EJB的分类是什么?各有什么特点?

sessionBean:主机重起消失

       Stateless:不记忆

       StateFull:一个用户多个操作可记忆

EntityBean:持久的数据库中

       Cmp:容器通过o/r mapping实现数据的持久化,不写sql,实现方便,在速度慢。

       Bmp:通过jdbc实现持久化,实现复杂,速度快

messageBean:提供异步处理。

10、EJB中主要的配置文件及作用是什么?

EJB部署时需要三个文件:

    Ejb-jar.xml:

    将二个接口一个类打包在一起,给EJB一个名称。

    说明当前的sessionBean的事务是由容器处理的。

    其在所有的服务器上是通用的。

    Weblogic-ejb-jar.xml:

    将一个EJB名称,对应一个JNDI,在仅对weblogic服务器

    Weblogic-rdbms-jar.xml:

    实现o/r mapping的说明,相当于*.hbm.xml

15、说出数据连接池的工作机制是什么?

容器或相关的应用程序在其池中实例化多个边接,当应用程序在使用时,容器直接将池中的连接取出应用程序直接使用,同时当应用程序使用完后,容器还可以将连接收回。从而提高系统的效率。

16、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别?

sessionBean:是一个过程

entityBean:是持久化,代表的是一个业务实体,有主键。

Struts+sessionBean+entityBean

EJB2.0加入的本地接口及本地home

EJB1.1中只有远程接口及远程home

18、EJB与JAVA BEAN的区别?

Java Bean 是可复用的组件,任何一个Java类都可以是一个Bean。但通常情况下,Java Bean是被容器所创建(如Tomcat)的,所以Java Bean具有如下特点:

一个无参的构造器

实现Serializable接口

私有属性

公有get set方法

Enterprise Java Bean 是一个分布式组件,其特点是

基于(RMI)技术的,可以被远程访问(跨进程、跨计算机)。

EJB必须被布署在Webspere、WebLogic容器中,不能直接访问ejb,而是通过容器访问ejb,容器是ejb访问的一个代理。

19、EJB的角色和三个对象

六个角色组成,分别是

EJB组件开发者(Enterprise Bean Provider):sun

应用组合者(Application Assembler)真正的开发商

部署者(Deployer):

EJB 服务器提供者(EJB Server Provider):sun ibm 小机

EJB 容器提供者(EJB Container Provider):weblogic jboss

系统管理员(System Administrator):维护员

三个对象是Remote(Local)接口、Home(LocalHome)接口,Bean类

20、EJB容器提供的服务

主要提供

安全

事务管理

分布式

jts

声明周期管理

代码产生

持续性管理

锁和并发行管理等服务。

21、EJB规范规定EJB中禁止的操作有哪些?

1.不能操作线程和线程API(线程API指非线程对象的方法如notify,wait等),

2.不能操作awt,

3.不能实现服务器功能,

4.不能对静态属生存取,

5.不能使用IO操作直接存取文件系统,

6.不能加载本地库.,

7.不能将this作为变量和返回,

8.不能循环调用。

26、EJB的基本架构

答:一个EJB包括三个部分:

 

Remote Interface 接口的代码

 

package Beans;

 

import javax.ejb.EJBObject;

import java.rmi.RemoteException;

 

public interface Add extends EJBObject

{

//some method declare

}

 

Home Interface 接口的代码

 

package Beans;

 

import java.rmi.RemoteException;

 

import jaax.ejb.CreateException;

import javax.ejb.EJBHome;

 

public interface AddHome extends EJBHome

{

//some method declare

}

 

EJB类的代码

 

package Beans;

 

import java.rmi.RemoteException;

import javax.ejb.SessionBean;

import javx.ejb.SessionContext;

 

public class AddBean Implements SessionBean

{

//some method declare

}

30、如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置

缺省安装中使用DemoIdentity.jks和DemoTrust.jks KeyStore实现SSL,需要配置服务器使用Enable SSL,配置其端口,在产品模式下需要从CA获取私有密钥和数字证书,创建identity和trust keystore,装载获得的密钥和数字证书。可以配置此SSL连接是单向还是双向的。

31如何查看在weblogic中已经发布的EJB?

可以使用管理控制台,在它的Deployment中可以查看所有已发布的EJB

WebService技术

1、什么是Web Service?

Web Service就是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。

使用的技术:

HTTP、XML、SOAP(简单对象访问协议)、WSDL

优点:

       跨平台、跨语言、跨系统

SOAP协议:

       SOAP协议(Simple Object Access Protocal,简单对象访问协议)

       Tcp/ipàhttp->soap,soap 通过xml文件传送信息

缺点:

 (1).WebService使用了XML对数据封装,会造成大量的数据要在网络中传输。

 (2).WebService规范没有规定任何与实现相关的细节,包括对象模型、编程语言,这一点,它不如CORBA。

2、什么是Web容器?

实现J2EE规范中web协议的应用.该协议定义了web程序的运行时环境,包括:并发性,安全性,生命周期管理等等.

       就是在tomcat、weblogic下运行jsp、servlet、struts

3、应用服务器有那些?

BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat

5、如何给weblogic指定大小的内存?

在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以调整最小内存为32M,最大200M

6、如何设定的weblogic的热启动模式(开发模式)与产品发布模式?

可以在管理控制台中修改对应服务器的启动模式为开发或产品模式之一。或者修改服务的启动文件或者commenv文件,增加set PRODUCTION_MODE=true。

7、如何启动时不需输入用户名与密码?

修改服务启动文件,增加 WLS_USER和WLS_PW项。也可以在boot.properties文件中增加加密过的用户名和密码.

8、在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中?

保存在此Domain的config.xml文件中,它是服务器的核心配置文件。

9、说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入 http://主机:端口号//helloword.jsp就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean该如何办?

Domain 目录服务器目录applications,将应用目录放在此目录下将可以作为应用访问,如果是Web应用,应用目录需要满足Web应用目录要求,jsp文件可以直接放在应用目录中,Javabean需要放在应用目录的WEB-INF目录的classes目录中,设置服务器的缺省应用将可以实现在浏览器上无需输入应用名。

12、CORBA是什么?用途是什么?

CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture),由对象管理组织 (Object Management Group,缩写为 OMG)标准化。它的组成是接口定义语言(IDL), 语言绑定(binding:也译为联编)和允许应用程序间互操作的协议。其目的为:用不同的程序设计语言书写在不同的进程中运行,为不同的操作系统开发。

13、说说在weblogic中开发消息Bean时的persistent与non-persisten的差别

persistent方式的MDB可以保证消息传递的可靠性,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来,而non-persistent方式的消息将被丢弃。

14、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。

Web ServiceWeb Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。

JAXP(Java API for XML Parsing) 定义了在Java中使用DOM, SAX, XSLT的通用的接口。这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码。

JAXM(Java API for XML Messaging) 是为SOAP通信提供访问方法和传输机制的API。

WSDL是一种 XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务)。

SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。

UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

j2ee模式(MVC模式、Model1,Model2)

1、j2ee常用的设计模式?说明工厂模式。

Java中的23种设计模式:

Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式),

Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式),

Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),

Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),

Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),

Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),

Observer(观察者模式), State(状态模式), Strategy(策略模式),

Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)

工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

2、说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法

Session Facade Pattern:使用SessionBean访问EntityBean

Message Facade Pattern:实现异步调用

EJB Command Pattern:使用Command JavaBeans取代SessionBean,实现轻量级访问

Data Transfer Object Factory:通过DTO Factory简化EntityBean数据提供特性

Generic Attribute Access:通过AttibuteAccess接口简化EntityBean数据提供特性

Business Interface:通过远程(本地)接口和Bean类实现相同接口规范业务逻辑一致性

ejb架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及开发效率。项目越复杂,项目队伍越庞大则越能体现良好设计的重要性。

3、解释下面关于J2EE的名词

(1)JNDI:Java Naming & Directory Interface,JAVA命名目录服务.主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能.

(2)JMS:Java Message Service,JAVA消息服务.主要实现各个应用程序之间的通讯.包括点对点和广播.

(3)JTA:Java Transaction API,JAVA事务服务.提供各种分布式事务服务.应用程序只需调用其提供的接口即可.

(4)JAF: Java Action FrameWork,JAVA安全认证框架.提供一些安全控制方面的框架.让开发者通过各种部署和自定义实现自己的个性安全控制策略.

(5)RMI:Remote Method Interface,远程方法调用

 

4、介绍J2EE、J2SE、J2ME的区别。

J2ee:企业级,主要的application server的web及应用服务

J2se:标准版, 没有application server

J2me:手机、pda的嵌入式开发

 

5、开发中都用到了那些设计模式?用在什么场合?

每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC的设计模式。用来开发JSP/Servlet或者J2EE的相关应用。简单工厂模式等。

6、J2EE是什么?

J2EE 是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型 (enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。

7、J2EE是技术还是平台还是框架?

    J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。

    J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。

其他

1、当前主流的解析器有那些?

DOM:文档对象模型(document object model)

SAX

2、Dom解析处理的过程是什么?

package ss;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.DocumentBuilder;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.Attr;

import org.w3c.dom.NodeList;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.Transformer;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

 

public class XmlParser

{

    public static void main(String[] args)

            throws Exception

    {

        xmlwriter();

    }

 

    public static void xmlparser()

            throws Exception

    {

        DocumentBuilderFactory xdf = DocumentBuilderFactory.newInstance();

        DocumentBuilder db = xdf.newDocumentBuilder();

        Document d = db.parse("C:\\A1\\customer.xml");

        NodeList nl = d.getElementsByTagName("customer");

        for (int i = 0; i < nl.getLength(); i++)

        {

 

            Element e = (Element) nl.item(i);

            Attr a = e.getAttributeNode("customerID");

            System.out.println(a.getNodeValue());

            NodeList nl1 = e.getElementsByTagName("customerName");

            System.out.println(nl1.item(0).getFirstChild().getNodeValue());

        }

    }

    public static void xmlwriter() throws Exception

    {

        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

        DocumentBuilder db=dbf.newDocumentBuilder();

        Document d=db.parse("C:\\A1\\customer.xml");

        NodeList nl=d.getElementsByTagName("customerName");

        for(int i=0;i<nl.getLength();i++)

        {

           Element e=(Element) nl.item(i);

           System.out.println(e.getFirstChild().getNodeValue());

           e.getFirstChild().setNodeValue(e.getFirstChild().getNodeValue()+"111111111111111");

        }

        TransformerFactory tff=TransformerFactory.newInstance();

        Transformer tf=tff.newTransformer();

        tf.transform(new DOMSource(d),new StreamResult("c:\\aa.xml"));

    }

}

 

DocumentBuilderFactory

              DocumentBuiler db

              Document d=db.parse(“具体文件路径”);

              NodeList nl=d.getElementsByTagName(“节点名”)

3、Sax解析处理的过程是什么?

import org.xml.sax.helpers.DefaultHandler;

import org.xml.sax.SAXException;

import org.xml.sax.Attributes;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

public class SaxParser extends DefaultHandler

{

    public void characters(char[] ch, int start, int length)

            throws SAXException

    {

        String temp=new String(ch,start,length);

        System.out.println(temp);

    }

 

    public void endDocument()

            throws SAXException

    {

        System.out.println("正在开始一个文档");

    }

 

    public void endElement(String namespaceURI, String localName, String qName)

            throws SAXException

    {

        System.out.println("结束元素"+qName);

    }

 

    public void startDocument()throws SAXException

    {

        System.out.println("开始文档");

    }

 

    public void startElement(String namespaceURI, String localName,

                             String qName, Attributes atts)

            throws SAXException

    {

         System.out.println("开始元素"+qName);

    }

    public static void main(String[] args) throws Exception

    {

        SAXParserFactory spf=SAXParserFactory.newInstance();

        SAXParser sp=spf.newSAXParser();

        sp.parse("C:\\A1\\customer.xml",new SaxParser());

    }

}

4、Dom与Sax相比它们的优缺点是什么?

DOM可以访问任何一个节点,要将所有资源全部加载,比较耗内存,可以修改。

              SAX只能顺序读,不可随意访问,不可写,但速度快。

Dom中的核心接口有那些?

Node

       TextNode

Element 

Arr

NodeList

Document

5、如何将Dom对象写入到文件中?

TransformerFactory

Transformer通过如下方法进行处理

Transformer(DOMSource(Document d),ResultStream(OutputStream o))

6、用jdom解析xml文件时如何解决中文问题?

类文件是utf-8,xml文件头也应是utf-8 如<?xml version="1.0" encoding="UTF-8" ?>

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

a: 两种形式 dtd  schema,

b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的),

c:有DOM,SAX,STAX等

 DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问

SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问

STAX:Streaming API for XML (StAX)

 

8、标准建模语言UML中的各种图?

静态图

用例图、类图、对象图、构件、部署,

动态图(行为图)

活动图,协作图,状态、时序

9、BS与CS的联系与区别。

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。

B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。

C/S 与 B/S 区别:

1.硬件环境不同:

  C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.

  B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行

2.对安全要求不同

  C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.

  B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。

3.对程序架构不同

  C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.

  B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟.

4.软件重用不同

  C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.

  B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子

5.系统维护不同

  C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统

  B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.

6.处理问题不同

  C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统

  B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小.

7.用户接口不同

  C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高

  B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本.

8.信息流不同

  C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低

  B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心。

10、Uml的概念是什么?主要的工具是什么

Uml:统一建模语言

工具:Rational Rose、PowerDesigner

11、Uml的概念中的九大图形是什么?最重的三个图是什么?各有什么特点?

类图

       继承

关联:(1..n  n..1  n..n)

依赖

实现接口

聚集

组成

类图的生命周期(开发的所有阶段都使用)

              总体设计

              详细设计

              开发:以类图进行开发

              测试

Use-case图

       关系

                     用例与用例

包含(include):必须调用

                            扩展(extends):可以调用也可以不调用

                     角色与角色的关系

                            泛化

                     用例与角色的关系:

                            用例与角色:通知

                            角色与用例:调用

              元素

                     用例

                     角色

                     系统边界

Use-case图的生命周期

              需求

              整体设计

              测试(单元测试、集成测试、系统测试、用户验收)

时序

              元素

横坐标:对象

纵坐标:  时间

作用

                     找类

                     找方法

                     验证系统的正确

生命周期

                     详细设计

活动(流程图)

作用

                     分析业务

构件图

       作用:说明组件与组件之间的关系,依赖关系

部署

       作用:说明安装软件的主机之间的关系,系统运行时的性能的主要影响者。

协作

       对象与对象之间的调用协作。

状态

       一个对象状态在不同的动作下的变化。

       对象

              说明对象

13、在类图中如何找类?

找名词

 

 

 

 

 

 

 

 

 

 

 

各公司面试题汇总

  1. 爱博
  • JAVA相关技术
  1. 请选出能正确赋值的项

public class A {

    private int a;

    public int change(int m){

        return m;

    }

}

public  class B extends A{

  public int b;

  public static void main(String[] args) {

      A aa=new A();

      B bb=new B();

      int k;

      //px

  }

}

在px出可以正确赋值的代码有:

  1. k=m
  2. k=b
  3. k=aa.a
  4. k=bb.change(30)
  5. k=bb.a

答:D

  1. 以下哪个集合类不是继承自Collection接口?

  A、List     B、Set   C、SortedList D、Map

答:D

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

答:会执行,在return前执行

  1. 在接口(interface)中可以声明常量。如下代码:

interface Verbose{

      int SILENT=0;

      int TERST=0;

   

      void setVerbosity(int level);

      int getVerbosity();

}

  其中setVerbositygetVerbosity这两个方法被省略的域声明修饰符是public,请说出常量SILENT TERST被省略的域声明修饰符是什么?

答:public

  1. 与反射(reflection)相关的类都包含在哪些包中?请简述反射的作用。

答:java.lang.reflection包和java.lang包;

通过反射可以使程序代码访问装载到JVM 中的类的内部信息,获取已装载类的属性信息;获取已装载类的方法;获取已装载类的构造方法信息

  1. 谈一下你所知道的深拷贝和浅拷贝的概念,以及在java中实现深拷贝的方法

答:

  1. 什么是java对象的序列化(又叫串行化),如何实现java对象的序列化

答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流

  1. 请介绍Struts2框架的大致处理流程

答:当web容器收到一个请求时,它将请求传递给一个标准的过滤器链,其中包括ActionContentCleanUp过滤器及其他过滤器(如继承SiteMesh的插件),这是非常有用的技术,接下来,需要调用FilterDispatcher核心过滤器,它调用ActionMapper确定请求调用哪个Action,ActionMapper返回一个收集了Action详细信息的ActionMapping对象。接下来FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager)从配置文件中读取配置信息,然后创建ActionInvocation对象。实际上ActionInvocation被创建的同时,填充了需要的所有对象和信息,它在调用Action之前会依次调用所有配置的拦截器。一旦Action执行返回结果字符串,ActionInvocation负责查找结果字符串对应的Result,然后执行这个Result。通常情况下Result会调用一些模板(jsp等)来呈现页面。之后拦截器会被再次执行(顺序和Action执行之前相反),最后相应,被返回给在web.xml中配置的那些过滤器。

  1. 请简单介绍一下如何优化Hibernate

答:1) 用最新版本的hibernate

2) 制定合理的缓存策略

3) 采用合理的session 管理机制

4) 尽量使用延迟加载

    5) 如有可能,选用uuid 作为主键生成器

    6) 如有可能,选用基于version 的乐观锁替代悲观锁

    7) 开发过程中,打开hibernate 的 SQl 日志输出(hibernate.show_sql=true),通过观察hibernate 生成的 sql 语句进一步了解其实现原理,从而指事实上更好的实现策略。

  1. AOP和IOC的全称是什么?OGNL表达式的作用是什么?

答:1) AOP面向切面编程:将程序中涉及的公共问题集中解决,最后通过配置文件切入到业务逻辑代码中

    2) IOC:控制反转,指的就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接控制。即组件之间的依赖关系由容器在运行期决定

3) OGNL表达式的作用:a、赋值和取值   b、类型转换

二、SQL题

1、数据库中存在着一个名秒People的表,表结构及数据如下:

    ID(number型)  Name(Varchar2型)

  1            a

    1. b
    2. b
    3. c
    4. a
    5. c

要求执行一个删除语句,当Name列上有相同时,只保留ID这列上值小的

例如:删除后结果应如下:

        ID(number型)  Name(Varchar2型)

 1           a

2           b

5           c

答:1) 表连接

delete from testu a where a.id not in(select min(b.id) from testu b where a.name=b.name);

2) 子查询

delete from testu where id not in(select min(id) from testu  where name in (select  name from testu group by name having count(name)>1) group by name)

and name not in (select name from testu group by name having count(name)=1)

解题思路:1、先查询出现次数在两次以上的人的姓名

        select  name from testu group by name having count(name)>1

         2、查询出现次数是1次的人名

        select  name from testu group by name having count(name)=1

         3、查询出现两次以上人名的人的id的最小值

        select min(id) from testu  where name in (select  name from testu group by name having count(name)>1) group by name

          4、删除不是出现两次以上人名并且id不是最小的人,并且人名不在出现次数是1的人名中的人

delete from testu where id not in(select min(id) from testu  where name in (select  name from testu group by name having count(name)>1) group by name)

and name not in (select name from testu group by name having count(name)=1)

2、简述数据库表在什么情况下不适合使用索引

答:1)当表中数据量很少时,无需使用索引

    2)当表中的数据不被频繁搜索时,无需使用索引

三、JavaScript题

1、完成foo函数的内容,要求能够弹出对话框提示当前选中的是第几个单选框。

<html>

    <body>

    <script>

      function foo(){

        //此处添加代码

}

     </script>

    <form name=”form1” onsubmit=”return foo()”>

        <input type=”radio” name=”radioGroup” />

        <input type=”radio” name=”radioGroup” />

        <input type=”radio” name=”radioGroup” />

        <input type=”radio” name=”radioGroup” />

        <input type=”radio” name=”radioGroup” />

        <input type=”radio” name=”radioGroup” />

        <input type=”submit” />

    </form>

    </body>

</html>

答:var items=document.getElementsByName("radioGroup");

        for(var i=0;i<items.length;i++){

            if(items[i].checked){

                alert("您选中的是第"+(i+1)+"个单选框");

                break;

            }

        }

四、使用div+css的方式简单实现一个如图所示的登录界面,要求如下:

 

    1. 登录部分(灰色部分)的宽度为300px,在整个页面中央显示;
    2. 登录部分背景色为#CCC,字体颜色为#FF0000

答:<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>登录界面</title>

<style type="text/css">

    #divLogin{

        width:300px;

        height:200px;

        background-color:#CCC;

        color:#FF0000;

        text-align:center;

        padding-top:50px;

    }

</style>

</head>

<body>

    <center>

    <div id="divLogin">

    <form>

        <p>昵称:<input type="text" /></p>

            <p>密码:<input type="text" /></p>

            <p><input type="submit" value="登录" /></p>

        </form>

    </div>

    </center>

</body>

</html>

五、程序设计

请编写一段代码,实现猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒的效果。

要求:

  1. 要有联动性,老鼠和主人的行为是被动的
  2. 要考虑可扩展性,猫的叫声可能引起其他联动反应
  1. 北京安宏睿业科技有限公司
  2. Java基础数据类型,它们的长度.

答:byte   1byte

    Short  2byte

int    4byte

long   8byte

char        1byte

boolean  1bit=1/8byte

float    4byte

double   8byte

  1. 写出常用的linux命令,作用

答:

  1. 谈谈 collection framework ,重点是继承关系

答:Collection: List:ArrayList和LinkedList     Set: HashSet和TreeSet

   Map: HashMap和TreeMap

  1. 写出JSP内置对象,作用?

答:out

       request

       response

       session

       application

       page

       pageContext

       config

       exception

  1. Hibernate内 load()和get()方便的区别

答:当数据库中不存在要查找的主键时,get返回null;load引发异常;get方法直接得到对象,不管是否使用该对象,load方法后并未执行查询方法,当使用该对象的属性时方执行查询语句

  1. 优化以下代码:

String str = “world”;

public void method(){

       for(int i = 0;i<10;i++){

       str += “j”;

}

Systyem.out.print(str);

}

答:StringBuffer str =new StringBuffer(“world”);

public void method(){

       for(int i = 0;i<10;i++){

       str.append(“j”);

}

Systyem.out.print(str);

}

  1. 写sql语句   表内数据复制 表之间数据复制 删除表内重复数据 

答:

  1. 谈谈MVC各部分主要有哪些实现技术,怎么实现?

答:M-Model 使用JavaBean实现

       V-View   使用JSP实现

       C-Controller   使用Servlet实现

       jsp接收用户输入,将请求提交给Servlet;Servlet处理客户端请求,并调用JavaBean进行业务处理,将处理后结果转到相应的JSP页面显示

9.  打印什么?

public class Base{

static int i= 1;

       public Base(){

       Systyem.out.print(“Parent constructor code ”);

Systyem.out.print(i);

 

}

       static{

       i = 10;

       Systyem.out.print(“Parent static code ”);

 

}

}

 

public class Child extends Base{

       static int i = 1;

public Child(){

       Systyem.out.print(“Child constructor code ”);

       Systyem.out.print(i);

}

       static{

       i = 20;

       Systyem.out.print(“Child static code ”);

 

}

}

 

Main(){

       Parent p = new Child();

}

 

答:Parent static code Child static code Parent constructor code 10Child constructor code 20

    1. 北京宝库在线科技有限公司
  1. Java里有没有多继承?如果有如何实现?

答:没有多继承

    可以使用接口来实现

  1. 谈谈MVC

答:M-Model 使用JavaBean实现

       V-View   使用JSP实现

       C-Controller   使用Servlet实现

       jsp接收用户输入,将请求提交给Servlet;Servlet处理客户端请求,并调用JavaBean进行业务处理,将处理后结果转到相应的JSP页面显示

 

  1.   int a = 1;

     int b = 1;

     Integer c = 10;

        Integer d = 20;

Integer e = 30;

        Integer f = 30;

        Systyem.out.print(a==b);

Systyem.out.print(c==d);

Systyem.out.print(e==f);

打印什么 为什么?

       答:true  false  true

4.

       for(char a =’A’;a<90;a++){

       Systyem.out.print(a);

}

能正常运行吗?如果能,打印什么?

答:能

   ABCDEFGHIJKLMNOPQRSTUVWXY

  1. 表单post提交和get提交的区别

答:get提交走地址栏,长度在0-255之间,安全性低

    post提交数据地址栏无显示,长度无限制,安全性高

  1. getCurrentSession() 和 openSession()的区别

答:getCurrentSession()获取当前session

    openSession()开始一个新的session

  1. 谈谈数据库连接池的机制。

答:服务器管理数据库连接,将一定数量的连接放置于连接池中,访问需要时直接从连接池中提取空闲连接,使用完毕后,将连接放回到连接池中;

  1. ArrayList 和 LinkedList的区别

答:ArrayList是顺序结构存储,执行查询速度较快,执行增删操作速度较慢

       LinkedList是链表结构存储,执行查询速度较慢,执行增删速度较快

  1. 转发 和 重定向的区别

答:转发地址栏不变,将请求从一个页面转发到另一个页面,页面之间共享request域对象

       重定向地址栏发生变化,重新发起一次新请求,两个页面的request域不同

  1. 谈谈 Spring的事务管理

答:声明式事务,即业务逻辑代码不变,通过配置文件对业务逻辑方法进行事务管理

  1. List和Set区别,如何判断 Set的对象是不是同一个对象

答:Set唯一,无序(即下标不连续,无法通过下标访问集合元素,通常使用迭代器迭代访问)List可重复,有序(即下标连续,可通过下标访问集合元素)

       可以使用contains方法验证Set中是否包含此对象

  1. JSP与Servlet的区别 共同点? 各自的适应范围.

答:相同点:都可以处理客户端请求,并发回响应

       区别:Servlet以java代码为主,中间穿插html标记,适用于处理业务

                jsp以html标记为主,中间穿插java代码,适用于显示数据

  1. 谈谈 拦截器 过滤器 监听器。

答:拦截器时Struts2所特有的,只能针对于向Action发起的请求,在Action处理之前或之后完成一些工作

   过滤器是针对所有请求,即使请求的是一个图片或者html页面,也可以针对一个目录或所有请求,在请求到达之前和响应之前完成一些工作

       监听器是针对于某些特定的操作,比如服务器的启动和停止;会话的创建和销毁等;

  1. web.xml是WEB项目必备的吗,有何作用?

答:是,部署描述符,描述一切服务器端内容,如果此文件不存在或有问题,则整个web项目无法访问

  1. 谈谈一下你对AOP的理解。

答:面向切面编程,即将业务逻辑中通用的内容提取处理,单独编写,然后通过配置文件将该内容切入到业务逻辑中,通过修改配置文件,在不影响项目的情况下可适当增减功能

  1. 一家公司,成立于2009年,效益很差,老板找到你问你
    1. 公司有几个部门?
    2. 每个部门有几个人?
    3. 我想找出公司内业绩最差和最好的人,看看它们分别是哪个部门的,分别给予处罚和奖励。
    4. 给我开除每个部门业绩最差的3个人。

设计数据库,用图表画出,并写出SQL语句实现老板的问题。

答:

 

    1. 北京东方飞扬软件股份有限公司

一、JAVA开发

  1. 您经常看的JAVA书籍有哪些?

答:JAVA编程思想、Java Web整合开发等

  1. 你经常在网上逛得技术论坛有哪些?

答:CSDN、ITEye

  1. List、Set、Map是否继承自Collection接口?

答:List和Set继承自Collection,Map不是

  1. 如果某个类没有复写hashCode()方法,那这个类是否能正常的运行在HashSet集合中,原因是什么?

答:可以,hashCode()是object类中的一个方法,在hashSet中是来判断两个对象是否为同一个的标志,有时候需要自己判断,所有需要重写hashCode()方法。

  1. 请问给下段程序的屏幕输出时什么?

String[] argg={"a","1","b","8"};

        Set s=new TreeSet();

        s.addAll(Arrays.asList(argg));

    System.out.println(s);

答:[1, 8, a, b]

    TreeSet构造一个新的空 set,该 set 根据其元素的自然顺序进行排序;插入该 set 的所有元素都必须实现 Comparable 接口,支持比较。

  1. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?

答:用iterator()方法区分是否重复

Equals方法检测两个对象是否相等(指两个对象的内容是否相等)

==用于比较引用和比较基本数据类型:比较基本数据类型如果两个值相等结果为true

比较引用时,如果引用指向内存中的统一对象结果为true

  1. 是否做过xml解析?主要是用哪些解析工具?是否使用过xml数据库?请列举xml数据库的名字。

答:做过xml解析,可以是用dom、dom4j、Sax或者jdom进行解析

  1. 是否开发过WebService或调用过WebService?如果是,请简单描述您是如何应用的。

答:是用XFire框架开发过WebService

  1. 请用JavaScript代码编写一个面向对象的实体类。

答:function person(name,age){

              this.name=name;

              this.age=age;

}

Person.prototype={

       Constructor:person,

sayName:function(){

       alter(this.name)

}

}

  1. 是否使用过struts、hibernate、spring等开源框架,如果使用过请简单描述一下您是怎么使用的。如果有用过其他框架请将名称列出来。

答:Hibernate是一个开源的对象关系映射框架,对JDBC进行了轻量级的封装,可是用OOP思想来操纵数据库;

   Struts是一个优秀的MVC框架.可以利用明确的关注点原则,开发动态Web应用

   Spring提供了通用

的服务,ioc/di、aop,关心的不仅仅web层,可以很容易融合不同的技术struts,hibernate,ibtas

  1. 请简要描述您对Ms SqlServer数据库、Oracle数据库,DB2数据库的熟悉程度

答:熟练使用SQLServer和Oracle数据库;DB2知道但没用过

  1. 您知道哪些新技术?

答:JQuery、Ext、Json

  1. 您还在哪些技术方面有突出特长(例如:安全技术,protal,自动建站,WAP,GIS等),请简要列举。

答:

  1. 用System.out.println打印出如下图案(菱形)

答:  //打印正三角

        for(int row=1;row<=5;row++){

            //打印空格

            for(int line=5-1;line>=row;line--){

                System.out.print(" ");

            }

            //打印*

            for(int col=1;col<=2*row-1;col++){

                System.out.print("*");

            }

            System.out.println();

        }

        //打印倒三角

        for(int row=5-1;row>=1;row--){

            //打印空格

            for(int line=5-1;line>=row;line--){

                System.out.print(" ");

            }

            //打印*

            for(int col=1;col<=2*row-1;col++){

                System.out.print("*");

            }

            System.out.println();

        }

  1. 有一组数字,1,12,3,5,8,13……请问13后面是什么数字,如果可以的话请用代码来回答

答:21

           int one=1;

        int two=1;

        System.out.print(one+"\t"+two+"\t");

        for(int cnt=1;cnt<=18;cnt++){

            int three=one+two;

            System.out.print(three+"\t");

            one=two;

            two=three;

        }

    打印此数列的前20个数字

二、逻辑、项目经验及其他

1、如果您有无穷的水,一个3升的和一个5升的提桶,您如何准确称出4升的水?

答:先装满3升水,然后点倒入5升的桶内,然后在装满3升水,倒入5升桶内,5升桶满后,3升桶内剩1升水;将5升桶中的水倒掉,将3升桶内剩余水倒入5升桶内,在装满3升水倒入5升桶内正好是4升水。

2、请粗略的估算一个全北京有多少个加油站。回答两个问题:您的思考过程是什么?您估算的值是多少?

答:两个;中石油和中石化

3、在房里有三盏灯,房外有三个开关,在房外看不见房内的情况,你只能进门一次,你用什么方法来区分那个开关控制那一盏灯?

答:先打开第一个开关,10分钟后,关闭第一个开关,打开第二个开关并开门进入屋内,正在亮着的灯是第二个开关的,用手摸一下另外两个灯,热的是第一个开关的,剩余的就是第三个开关的

4、1000天之后是哪一天?怎么计算?(可以有多种答案)

答:1001

5、北京清元优科技有限公司

第一部分:数学与逻辑

第1-8题:请从理论上和逻辑的角度在后面的空格中填入后续字母或数字

       1.  A、D、G、J、___M__

       2.  1、3、6、10、__15___

3.  1、1、2、3、5、__8___

4.  21、20、18、15、11、__6___

5.  8、6、7、5、6、4、__5___

6.  65536、256、16、__4___

7.  1、0、-1、0、__1___

8.  3968、63、8、3、__2___

 

 

第九题答案:d

第十题答案:a

 

第十一题答案:C

第十二题答案:C

 

第十三题答案:bd

第十四题答案:bc

第二部分:计算机基础知识

  1. 写出你知道的排序算法名称及其复杂度(至少三种)

答:1)冒泡排序(简单)

       2)插入排序 (最复杂)

    3)选择排序  (较复杂)

  1. 给出TCP,IP,HTTP,FTP之间的层次关系(参照网络七层协议划分)

答:百度“网络七层协议”

  1. 设有下列数据表

职工号

姓名

车间

车间主任姓名

职工工资

 

 

 

 

 

       如何将该数据表的对应关系规范化到第三范式

答:车间编号  车间名称 车间主任名称

     职工号   姓名    职工工资   所属车间编号

  1. 设有学生表A和考试成绩表B,结构如下:

A  A表主键(a)

字段名

含义

a

学号

b

姓名

c

性别,0表示男1表示女

d

年龄

B  B表主键(a,b,c)

字段名

含义

a

学号

b

课程号

c

考试时间(yyyymmdd,例如:20041201)

d

考试成绩(百分制,60分及格)

  1. 写一个sql语句,列出”200411”号课程考试成绩不及格的学生的学号、姓名、年龄

Select a,b,d from A where a in(select a from B where b=’200411’ and d<60)

  1. 写一个sql语句,列出考试成绩不及格的课程门数大于6门的学生的学号、姓名、年龄

Select a,b,d from A where a in(Select a from b where d<60 group by a having count(*)>6)

  1. 写一个sql语句,列出考试成绩尚未及格的课程门数大于6门的女生的学号、姓名、年龄

Select a,b,d from A where a in(Select a from b where d<60 group by a having count(*)>6) and c=1

 

第三部分:实际开发经验

  • 程序设计部分5,6题任选一题即可)

[使用任意一种语言均可]

  1. 编写一个表达式,计算月收入为x元时的个人所得税,假定x<=5000。所得累进税率为5%,累进点为1000元,1500元和3000元

如: x=1200时,税为(1200-1000)*5%

       x=2000时,税为(2000-1000)*5%+(2000-1500)*5%

       x=5000时,税为(5000-1000)*5%+(5000-1500)*5%+(5000-3000)*5%

特别注意:要求写的是一句的表达式,而不是一段程序,其中不得有分行符,尽量短

x>3000? (x-1000)*5%+(x-1500)*5%+(x-3000)*5%:x>1500? (x-1000)*5%+(x-1500)*5%:(x-1000)*5%

  1. 编写字符串查找函数

函数有三个参数,一个是源字符串,一个是目标子串,一个是查找方向(自右向左或自左向右),函数实现按照查找方向在源字符串中查找目标子串,并返回查找到的位置。查不到返回-1

答:public  int  findStr(String source,String target,int type){

              int position=-1;

              if(type==0){ //自左向右

position=source.indexOf(target);

}else{     //自右向左

       position=source.lastIndexOf(target);

}

              return position;

}

  • 开发工具部分
  1. Java/J2ee基础知识
        1. Java有哪些基本数据类型,String是不是基本数据类型,他们有何区别?

答:byte short int long float double char boolean,值类型

    String不是基本数据类型,引用类型

        1. 如何将数值型字符转换为数字(Integer、Double),如何将数字转换为字符?

答:Integer.parseInt  Double.parseDouble

数字+””

(char)数字

        1. float型float f=3.4是否正确?

答:不正确,默认小数是double类型,应为3.4f

        1. 请解释抽象类和接口的区别?

答:抽象类中可以有常量、变量、构造、正常方法和抽象方法,可以被继承,其子类如果不重写,子类也是抽象类;

       接口中可以有常量和抽象方法,可以被实现,子类必须重写其抽象方法

       抽象类可以继承类也可以实现接口;接口只能继承接口

        1. 请解释String和StringBuffer的区别?

答:String固定字符串

       StringBuffer是可变字符串

        1. 请解释forward和redirect的区别?

答:

        1. 请解释jsp中动态include和静态include的区别?

答:jsp:include动态include,包含的是结果

    @include 静态include,包含的是代码

        1. 请解释ArrayList与Vector的区别,HashMap与Hashtable的区别及Hashtable的原理

答:

        1. 请解释关于j2ee的名词:JNDI、JMS、JTA、RMI

答:

        1. 什么是web容器?

答:tomcat、weblogic、jboss、jerrt

        1. 什么是Wb Service?

答:

  1. java编程

写出下列程序的运行结果:

public class X{

       private static int a;

       public static void main(String[ ] args){

              modify(a);

              System.out.println(a);

}

public static void modify (int a){

              a++;

}

}

答:输出0

    • 主观题
  1. 你关心IT业界尤其是软件行业的各种最新动态吗?请简单举出IT业界最近比较热门的两三个话题
  2. 你最喜欢自己的哪些优点?对你个人成长起了多大的积极作用?
  3. 你如何定义成功?你觉得什么样的企业能给你的成功创造更多的机会?

6、北京瑞尼尔有限公司

  1. Swing组件一般使用MVC结构,MVC指的是Model(模型层)、View(视图层)Contorller(控制层)
  2. 执行如下代码后,c的值是(-1)。(如果是死循环,请填写“无解”)

a=0;c=0;

do{

       c--;

       a=a-1;

}while(a>0);

  1. 在JAVA中,一个类被声明为final类型,表示什么意思?

答:final表示不可改变的,final修饰类表示此类不可被继承

  1. 写出JAVA常用的设计模式(至少5种),说明抽象工厂设计模式?

答:Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式),

   Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式), 

   Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),

   Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),

   Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式), 

   Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式), 

   Observer(观察者模式), State(状态模式), Strategy(策略模式),

   Template Method(模板方法模式), Chain Of Responsibleity(责任链模式) 

   抽象工厂设计模式:

  1. 数据库有表A(id,firstname,lastname)和表B(id,lastname),A和B的数据完整并且id相匹配。现要把B的lastname字段的数据填入到A的lastname字段位置,请写出对应的sql语句(注:实现方式不限,是用的sql语句越少越好)

答:

  1. 写一个封装JDBC连接数据库功能的类,数据库不限。

答:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

 

import org.apache.log4j.Logger;

 

/**

 * 数据通用操作类

 */

abstract class BaseDao {

       protected Logger log=Logger.getLogger(BaseDao.class);

       private Connection connect;       //连接对象

       private PreparedStatement pstmt;  //执行语句对象

       protected ResultSet rs;           //结果集对象

      

       /**

        * 开库

        */

       public void open(){

              try {

                     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

              connect=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=StudentDB","sa","sa");

              } catch (ClassNotFoundException e) {

                     log.error("加载驱动错误:"+e.getMessage());

              }catch (SQLException e) {

                     log.error("数据库连接错误:"+e.getMessage());

              }

       }

       /**

        * 关库

        */

       public void close(){

              try {

                     if(rs!=null)

                            rs.close();

                     if(pstmt!=null)

                            pstmt.close();

                     if(connect!=null)

                            connect.close();

              } catch (SQLException e) {

                     log.error("数据库关闭错误:"+e.getMessage());

              }

       }

       /**

        * 通用方法:执行增删改操作

        * @param sql      要执行的sql语句

        * @param params   sql语句多需参数

        * @return         影响行数

        */

       public int executeUpdate(String sql,Object...params){

              int row=0;

              try{

                     open();

                     pstmt=connect.prepareStatement(sql);

                     if(params!=null && params.length>0){

                            for(int cnt=0;cnt<params.length;cnt++){

                                   pstmt.setObject(cnt+1, params[cnt]);

                            }

                     }

                     row=pstmt.executeUpdate();

              }catch(SQLException ex){

                     log.error("执行增删改操作错误:"+ex.getMessage());

              }finally{

                     close();

              }

              return row;

       }

       /**

        * 通用方法:执行查询操

        * @param sql     要执行的语句

        * @param params  所需参数

        * @return        结果集

        */

       public ResultSet executeQuery(String sql,Object...params){  //...表示可有可无,可多可少

              try{

                     open();

                     pstmt=connect.prepareStatement(sql);

                     if(params!=null && params.length>0){

                            for(int cnt=0;cnt<params.length;cnt++){

                                   pstmt.setObject(cnt+1, params[cnt]);

                            }

                     }

                     rs=pstmt.executeQuery();

              }catch(SQLException ex){

                     log.error("执行查询操作错误:"+ex.getMessage());

              }

              return rs;

       }

}

  1. 有100元人民币,要买100份材料,其中A材料3元/份,B材料2元/份,C材料0.5元/份,问能买A、B、C这三种材料各多少份?要求这100元刚好画完,且三种材料都买齐,请编写出程序。(注:如果实在写不出代码,请用文字描述解题思路)

答:   for(int numA=1;numA<34;numA++){

            for(int numB=1;numB<49;numB++){

                int numC=100-numA-numB;

                if(numA*3+numB*2+numC*0.5==100){

System.out.println("材料A"+numA+"个\t材料B"+numB+"个\t材料C"+numC+"个\t");

                }

            }

        }

  1. 介绍Java中Collection Framework,(Collection的继承和实现图)

答:List和Set接口实现了Collection接口

ArrayList和LinkedList类实现了List接口

HashSet和TreeSet实现了Set接口

  1. 有一个保护N个Integer的向量(Vector),它包含的Integer可以是1到N+1中的任何一个,但是互不相同,也就是说Vector中不包含重复的值。因为有N个对象,并且可能得到的值有N+1个,所以有一个值没有包含在这个Vector中,请编程找到这个Vector中没有包含的整数(只可以使用Vector.get(),Vector.getSize()两个方法)。

答:

 

7、博达新创、慧点科技面试题目

1.写出配置java环境变量的路径。

path="%JAVA_HOME%  + jdk安装路径";

2.写出6个常用的html标签。

head、style、table、h1、br、center、marquee、strong

3.jsp有哪些内置对象?作用是什么?

request 用户端请求,此请求会包含来自GET/POST请求的参数

response网页传回用户端的回应

page指向当前JSP页面本身,有点像类中的this指针

pageContext 网页的属性是在这里管理

session与请求有关的会话期

application   应用程序对象,servlet正在执行的内容

out 用来传送回应的输出

config   配置对象,servlet的架构部件

exception 例外对象

4.jsp有哪些动作?作用分别是什么?

jsp:include: 在页面被请求的时候引入一个文件

jsp:useBean:寻找或者实例化一个JavaBean

jsp:setProperty:设置JavaBean的属性

jsp:getProperty:获取JavaBean的属性

jsp:forword:把请求转到一个新的页面

jsp:plugin:根据浏览器类型为Java插件生成Object或者Embed标记

5.GC是什么?为什么实用GC?

GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动检测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

6.error和Exception有什么区别?

error表示恢复不是不可能但是很困难的情况下的一种严重问题(例:内存溢出),不可能指望程序能处理这样的情况。

Exception表示一种设计或实现问题,也就是说,它表示如果程序运行正常,从不会发生的情况。

7.sleep()和wait()有什么区别?

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会让给其它线程,但是监控状态依然保持,到时候会自动恢复,调用sleep不会释放对象锁。

wait是Object类的方法,对此方法对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify方法(或notifyAll)后本线程猜进入对象锁定池准备获得对象锁进入运行状态。

8.String s=new String("xyz")创建了几个String Object?

两个或者一个,"xyz"对应一个对象,这个对象放在字符串常量缓冲区,常量"xyz"不管出现多少遍,都是缓冲区中的那一个。new String每写一遍,就创建一个新的对象,但是创建"xyz"对象时,系统检查缓存里面是否存在"xyz"对象,如果有着调用缓存里的对象,没有这创建新对象。

9.short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?

对于short s1=1;s1=s1+1;由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型是,编译器将报告需要强制转换类型的错误。

对于short s1=1;s1+=1;由于+=是java语言中规定的运算符,java编译器会对它进行特殊处理,因此可以正确运行。

10.Java中的异常处理机制的简单原理和应用。

异常:是指java程序运行时(非编译)所发生的非正常情况或错误。

java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示,该对象中包含有异常信息。java对异常进行分类,不同类型的异常分别用不同的java类表示,所有异常表示的根类为java.lang.Throwable下面又派生了两个子类:Error和Exception。

11.heap和stack有什么区别?

java的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。

堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,所以,他不会随方法的结束而消失。

12.JSP中动态include与静态include的区别?

动态include用jsp:include实现<jsp:include page=include.jsp  flush=true />它总是检查所含文件中变化,适合用于包含动态页面,并且可以带参数

静态include用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@include file=include.html%>

 

8、城际快线面试题和答案

1:mvc设计模式各部分都用什么技术,怎么实现的。

       模型(Model),视图(View)和控制Controller)。 MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。 View层用于与用户的交互,通常用JSP来实现。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作

 

2:hibernate的工作机制,为什么要用Hibernate.

 

原理:  1.读取并解析配置文件

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

       3.打开Sesssion

       4.创建事务Transation

       5.持久化操作

       6.提交事务

       7.关闭Session

       8.关闭SesstionFactory

为什么要用:      1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

 

··         2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

 

              3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

 

              4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

 

 

3: Struts工作机制?为什么要使用Struts?

工作机制:

Struts的工作流程:

在web应用启动时就会加载初始化ActionServlet,ActionServlet从

struts-config.xml文件中读取配置信息,把它们存放到各种配置对象

当ActionServlet接收到一个客户请求时,将执行如下流程.

-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;

-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;

-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;

-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;

-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;

-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件;

-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;

 

为什么要用:

JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。

 

 

4:spring工作机制及为什么要用?

1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。

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

3.DispatcherServlet请请求提交到目标Controller

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

5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象

6.视图对象负责渲染返回给客户端。

 

为什么用:

{AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。

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

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

 

 

5:j2ee是平台还是框架?

 

 平台。J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。

 

6:简述一下Hibernate中load()和get()方法。

 

       1. 对于Hibernate get方法,Hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据 库中没有就返回null       ·。这个相对比较简单,也没有太大的争议。主要要说明的一点就是在这个版本中get方法也会查找二级缓存!

       2. Hibernate load方法加载实体对象的时候,根据映射文件上类级别的lazy属性的配置(默认为true),分情况讨论:

       (1)若为true,则首先在Session缓存中查找,看看该id对应的对象是否存在,不存在则使用延迟加载,返回实体的代理类对象(该代理类为 实体类的子类,由CGLIB动态生成) 。等到   具体使用该   对象(除获取OID以外)的时候,再查询二级缓存和数据库,若仍没发现符合条件的记录,则会抛出一 个ObjectNotFoundException。

       (2)若为false,就跟Hibernate get方法查找顺序一样,只是最终若没发现符合条件的记录,则会抛出一个ObjectNotFoundException。

 

7:jsp的内置对象有哪些?简述其作用。

 

       1、request对象:客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。

       2、response对象:response对象包含了响应客户请求的有关信息。

       3、session对象:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。

       4、out对象:是向客户端输出内容常用的对象

       5、page对象:page对象就是指向当前JSP页面本身,有点象类中的this指针。

       6、application对象:application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后       连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象       的生命。

       7、exception对象:exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则       无法编译。

       8、pageContext对象:pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属   性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。

       9、config对象:config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信       息(通过传递一个ServletContext对象)。

 

8:简述一下struts1。

 

       Struts的工作流程:

       在web应用启动时就会加载初始化ActionServlet,ActionServlet从

       struts-config.xml文件中读取配置信息,把它们存放到各种配置对象

       当ActionServlet接收到一个客户请求时,将执行如下流程.

       -(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;

       -(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;

       -(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;

       -(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;

       -(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;

       -(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件;

       -(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;

 

9:odbc和jdbc的区别。

 

JDBC与ODBC都可以实现类似的功能,但JDBC与ODBC的区别是他们的开发架构不同,其实现细节上也有所差异。

 

      谈到JDBC与ODBC的区别,JDBC和ODBC其实都是用来连接数据库的启动程序。ODBC中文姓名叫做开放数据库互联,是 Microsoft性能开发的开放服务框架中有关数据库的一个的组成部份,它建立一组有关的规则,并帮助了一组对数据库访问的达标实际运用程序编程接口。简单的说,ODBC那是实际运用程序与数据库系统停止交互的道具。一个的给予ODBC的实际运用程序对数据库的操作不依赖于的数据库系统,不支持与数据库管理系统打交道,所有的数据库操作由对应的数据库系统的ODBC驱动程序来完成。从而没成绩出现以同一的方法来处理所有的数据库。

 

      而JDBC与ODBC类似,也是一个的实际运用程序与数据库停止通信的中间个人公司。只是她们的开发商不相同而已。JDBC是由Sun个人公司向联系型数据库系统厂商帮助JDBC的规格与需求;然后各大厂商遵循达标规格设计出符合自己数据库产业商品的JDBC驱动程序。虽然JDBC与ODBC都没成绩出现类似的功能,但是她们的开发架构不相同,其出现细节上也有所差异。为此数据库编程必需要了解这方面的差异,并在打工中根据实际情况来选取合适的数据库驱动程序。

 

      JDBC与ODBC的区别:JDBC的优点。

 

      JDBC实际运用程序接口是JAVA程序语言内针对数据存取所涉及的程序开发接口,其内部是由许多类与接口构成。而ODBC则是由C语言来开发的。由于两者开发平台的不相同,为此开发不相同种各自的特点也就传递到了这连个数据库启动程序中。根据笔者的了解,相对ODBC数据库启动程序来说,JDBC 有如下几个优点。若笔者概括的不够全方面的话,欢迎来补全。

 

      1、JDBC要比ODBC简易理解。学过编程的也许会有一个的直观的感想,那是JAVA语言要比C语言好学的多。由于JAVA语言的设计思路是面向对象的,跟人的认识思维较量接近,为此较量简易被人接受,研究起来也相对简易一点。而C语言则就较量抽象了,跟人的认识规则有确定的距离。为此她们开发出来的产业商品也有类似的特点。在ODBC中,虽然没成绩出现与数据库的交互,但是出现起来较量复杂。如一个的简单的查询,也需求分为好几块内容;而在 ODBC驱动程序内部再去停止整合,停止一些复杂的操作。这不仅降低了数据库启动程序的性能,而且也给程序开发者开发实际运用程序带来了确定的负面效果。而JDBC数据库启动程序在设计的时间就包含了大部份基本数据操作功能,为此在编写一些常规的数据库操作语句时,如查询、更新等等,其所需求的源代码比 ODBC要少的多。故从这方面来说,JDBC数据库启动程序要比ODBC简易理解。

 

      2、JDBC数据库驱动程序是面向对象的,完全遵循JAVA语言的优良特性。通常情况下,只要有JAVA车功能需设计基础的用户都没成绩在最短时间内了解JDBC驱动程序的架构,较量简易上手,没成绩轻而易举的开发出强悍的数据库实际运用程序。而ODBC的话,由于其内部功能复杂,源代码编写要求高。为此即使是一个的C语言的高手,仍然需求花费不少的时间去了解那个数据库启动程序;在编写源代码的时间,还离不开有关的参考书本。

 

      3、JDBC的移植性要比ODBC要好。通常情况下,安装完ODBC驱动程序之后,还需求经过确定的配置才能够应用。而不相同的配置在不相同数据库服务器之间不能够通用。也那是说,装一次需求配置一次。但是JDBC数据库驱动程序则不相同。假如采用JDBC数据库驱动程序的话,则知需求选取适当的 JDBC数据库驱动程序,就不需求停止额外的配置。在安装过程中,JDBC数据库驱动程序会自己完成有关的配置。为此JDBC的移植性要比ODBC要好。

 

      总之JDBC与ODBC都是数据库的启动程序,它们的本质是相同的,都是为了处理SQL语句而设计的。而且JDBC在设计的时间,其也是在ODBC 的基础上停止设计的,并保留了ODBC数据库驱动程序的部份功能。或者说,咱们没成绩把JDBC看作是ODBC的另一个的高级版本也未尝不可。JDBC主要在操作上、友好性上做了确定的改进。

 

      JDBC与ODBC的区别:什么时间采用JDBC?

 

      虽然说JDBC数据库启动程序比ODBC来说具有不少的优点,但是也并不是说在所有的情况下采用JDBC数据库启动程序都能够起到不错的效果。数据库编程还需求根据企业的实际实际运用环境来停止选取。通常情况下,假如符合下面几种情况的任何一种,笔者意见采用JDBC数据库驱动程序。

 

      一是采用Oracle个人公司的Oracle JDeveloper 10G来开发实际运用程序。JDeveloper 10G是Oracle个人公司帮助的一个的可视化的开发环境。没成绩帮助数据库编程与开发方便的完成一些复杂的功能。如数据库开发没成绩借那个道具来设计 WEB实际运用程序的网页运行程序;如没成绩用来开发业务服务层组件;如没成绩在JSP与JClient实际运用程序内出现数据绑定功能等等。特别是在利用那个道具开发业务服务层组件的时间,没成绩直接浏览与存取业务组件所对应的数据。数据库开发不用等到实际运用程序撰写好后才测试数据库的存取功能。显然那个特性让数据库开发在开发数据库实际运用程序的时间格外的便利。而为了配合那个开发道具,Oracle个人公司专门开发了对应的JDBC驱动程序。为此假如数据库开发采用JDeveloper开发道具的话,那么采用JDBC要比采用ODBC的兼容性要好。所以假如采用了这种开发道具的话,最好能够采用 JDBC数据库启动程序。

 

      二是假如实际运用程序采用的是JAVA开发平台的话,那么最好应用JDBC数据库启动程序。其实JDeveloper采用的也是JAVA开发平台。这主要是由于假如JAVA程序直接调用ODBC的C语言实际运用程序接口时,较量简易产生安全方面的难点。如Java语言是不采用指针的(由于指针的处理效率较量慢),而ODBC所采用的C语言却应用了大量的指针。为此假如应用JAVA语言平台来开发数据库实际运用程序,若采用ODBC数据库驱动程序的话,就不那么合适了。另外由于JDBC也是JAVA语言开发的,所以其兼容性也会好许多。为此笔者意见,假如数据库开发采用的是JAVA语言开发平台的话,那么最好采用JDBC驱动程序,而不是ODBC驱动程序。

 

      在更多相关的情况下,数据库编程与开发没成绩根据自己的习惯来选取合适的数据库驱动程序。

 

      JDBC与ODBC的区别:能否从ODBC顺利过渡到JDBC?

 

      也许数据库编程以前采用的是ODBC驱动程序,而假如数据库编程目前需求采用JDBC驱动程序,那么能否出现顺利过渡呢?正确回答是肯定的。在 JDBC驱动程序中有一类叫作JDBC-ODBC桥接启动程序。这种类别的JDBC数据库驱动程序其底层是经过ODBC驱动程序来连接数据库的。假如原先的实际运用程序是基于ODBC数据库驱动程序的,或者数据库没有帮助对应的JDBC驱动程序,则数据库编程没成绩利用JDBC-ODBC桥接驱动程序来出现。也那是说,桥接驱动程序没成绩利用现有的ODBC驱动程序来存取联系型数据库。为此者不仅没成绩保留先前的开发架构(经过ODBC来存取数据),还没成绩立即应用JAVA作为新的开发环境,从而出现ODBC数据库驱动程序到JDBC的顺利转型。

 

      不过在采用这种桥接驱动程序的时间,需求留意几个难点。一是那个桥接驱动程序仍然需求用到ODBC数据库驱动程序。由于桥接驱动程序直接联系的对象是ODBC驱动程序,然后再经过ODBC驱动程序去访问数据库。为此在客户端必需先安装并配置好ODBC驱动程序。假如采用的是三层式的开发框架,也需求安装ODBC驱动程序。其次,在这种模式下,实际运用程序先调用JDBC,然后再经过JDBC调用ODBC,最后再跟数据库停止通信。显然其中间多了几个环节。由于其中间环节较量多,但数据访问出现难点的时间,就不怎样好查难点。这就好像一道水管,假如中间的接口多了的话,则除了漏水的几率就较量高。假如真的除了漏水的话,则查询漏水点的时间也会较量困难。为此笔者以为,采用桥接类别的JDBC驱动程序只是权宜之计。在适当的时间,数据库开发还是需求调整原先的开发架构,全部都转到JDBC驱动程序上来。桥接程序只是为数据库开发争取确定的时间。虽然那个转型过程中的阵痛是较量痛的,但确是不可避免的。长痛不如短痛,笔者意见数据库开发还是及早停止过渡为好。并在估计的情况下,把以前的开发架构也停止调整,以采用真正意义上的JDBC驱动程序。。

 

 

10:说一说你用到的HTTP协议。

 

 

 

11:简述手写ajax的步骤。

9、东方国信科技股份有限公司

1. <table id="myTable">

       <tr>

           <td onclick="innsertTr">d</td>

           <td>d</td>

       </tr>

   </table>

   写一个javascript方法insertTr 实现创建一行,行里面最少一个<td>.

答:function innsertTr(){

       var table=document.getElementById("myTable");

       var tr=document.createElement("tr");

       var td1=document.createElement("td");

       td1.innerHTML="002";

       var td2=document.createElement("td");

       td2.innerHTML="gjj";

       tr.appendChild(td1);

tr.appendChild(td2);

       table.firstChild.appendChild(tr);

   }

2.Servlet 与JSP的区别

答:jsp是一种特殊的Servlet,jsp先转译成.java,在编译成.class即Servlet,然后执行

    Servlet是以Java代码为主,中间穿插html标签

    jsp是以html标签为主,中间穿插java代码,是一个轻量级组件

3. s=1+2-3+4-5+6+...+n

  写一个方法int sum(int n) 输入n   返回s

答:int  sum (int n){

         if(n<=1)

           return n;

 

         int s=1;

        for(int i=2;i<=n;i++){

          if(i%2==0){

            s+=i;

           }else{

            s-=i;

          }

         }

      

       return s;

    }

4.使用线程同时读取100个文件。例如:F001,F002....

答:

5.创建索引为什么提升查询效率?

答:创建索引后会创建一个索引表,该表存储某条记录在内存中的位置,查询时,先进索引表中找到该记录的位置,然后直接跳向该位置;索引页存储的数据量比数据页要少,因此索引页较少,查找速度就快

6.public class Student {

       private String name;

       private int age;

       public String getNameString() {

              return name;

       }

       public void setName(String name) {

              this.name = name;

       }

       public int getAge() {

              return age;

       }

       public void setAge(int age) {

              this.age = age;

       }

      }

public class Grade {

       private String name;

       private List<Student> students;

       public String getName() {

              return name;

       }

       public void setName(String name) {

              this.name = name;

       }

       public List<Student> getStudents() {

              return students;

       }

       public void setStudents(List<Student> students) {

              this.students = students;

       }

}

已知request中有个名字为cs的年级   用struts标签输出所有学员的信息。

答:<s:iterator value=#request.cs.students>

         <s:property value=”name”/>

         <s:property value=”age”/>

</s:iterator>

7.写出你所熟悉的Java开源框架,写出该框架的3个特点。

答:Log4J、Struts、Hibernate、Spring、XFire、IBaties、Web Work

8.写出转发和重定向的区别。

答:

9.public class A {

      

       public String prime1;

       public StringBuffer prime2;

      

    public A (){

           System.out.println("A");

    }

   

    public void method1(String a){

           prime1=a.replace("a", "b");

    }

   

    public void method2(String b){

           prime2=prime2.append(b);

    }

}

public class B extends A{

       public B (){

              System.out.println("B");

       }

      

       public void method1(String s){

              try {

                     prime1=s.substring(0, s.indexOf("d"));

              } catch (Exception e) {

                     prime1=s.substring(0, 3);

              }finally{

                     System.out.println("finally");

              }

       }

       public static void main(String[] args) {

              A a =new B();

              a.method1("baibain");

              a.method2("baibain");

              System.out.println(a.prime1);

              System.out.println(a.prime2);

       }

}

     写出程序输出的结果。

答;A

B

        finally

        空指针异常

10、oracle的decode方法的含义

答:decode(“字段名“,值1,结果1,值2,结果2,值3,结果3,其他结果)

10、飞速创想科技有限公司

1、写一个类,检查一个用户名中是否包含有不能接受的敏感字符(作为参数传入),参数列表:string user,String badWords(其中后面一个参数以','为分隔符分制),如:"a,*,&,^",包含有特殊字符返回false ,否则返回true.

答:public boolean check(String user,String badWords){

              String[] items=badWords.split(",");

              for(String temp : items){

                     if(user.contains(temp)){

                            return false;

                     }

              }

              return true;

       }

 

2、抽象类和接口的区别,分别用在什么场景答:抽象类可以有正常方法和抽象方法,接口都是抽象方法;抽象类中有变量和常量,接口中只有静态常量;接口使用修饰符修饰后,内部所有方法如没有修饰符,则默认与接口修饰符相同,抽象类中方法如没有修饰符,默认都是default;abstract抽象类interface接口;抽象类只能继承一个,接口可是实现多个;抽象类可以有构造,接口中没有;抽象类中有私有成员,接口中无法存在私有成员;

单继承使用抽象类,多继承使用接口;

 

3、写一个常量

答:访问修饰符  final  数据类型  常量名称=常量值;

 

11、高迈致远公司的面试题

  1. 请简要说明你对包的理解

答:包是java的一种组织形式,物理上以目录的形式存在;作用是将一组逻辑相关的类放在一起便于管理,并可以避免命名冲突

  1. 请简要说明你对接口的理解

答:接口定义了一组规范,接口是一种能力;一个类继承了接口后必须实现接口中的所有方法,该类就具有了这个接口所具有的能力;接口不可以被实例化

  1. 请简要说明你对多态的理解

答:同一事物在不同情况表现出来的不同形态,在代码中体现为方法重载OverLoad和方法重写上OverRide;重载方法当同一个方法传入不同参数时能实现不能的效果;重写方法当声明为父类对象指向不同的子类引用时,调用重写方法会实现不同的效果;多态有利于代码的可维护性和可扩展性

  1. 请简要说明你对static的理解

答:static是修饰符,可以修饰方法、成员变量和块;static修饰的内容属于类而不属于任何对象

       static块,当类加载时会被自动执行,只执行一次

       static方法,类的方法,使用类名直接方法,该方法只能访问静态成员

       static变量,类的变量,使用类名直接访问

  1. 请简要说明你对关联关系的理解

答:关联关系指的是两个类之间的关系,有多对一、一对一、一对多、多对多

  1. 请简要说明do-while、while-do、for几种循环在使用时的区别

答:do-while先执行一次循环体,在判断条件,循环至少执行一次

       while-do 先判断条件在执行循环,循环可能一次都不执行,未知循环此数

       for 先判断条件在执行循环,循环可能一次都不执行,已知循环次数使用

  1. 在基本数据类型转换时,遵循一个什么样的规律

答:要转换的两个类型之间必须兼容;当由小范围类型转换为大范围类型时,成为自动转换;当由大范围类型转换为小范围类型时需要强制转换

  1. 在引用数据类型转换时,遵循一个什么样的规律

答:要转换的两个必须兼容;当由子类引用转换为父类引用时,直接赋值即可,称为向上转型;当由父类引用转换为子类引用时,需要强制转换,称为向下转型

  1. 请说明表达式“floatMax>floatMin?floatMax:floatMin”是什么含义

答:三元运算符,当?前条件为真时返回?后内容,当条件为假时返回:后内容

    上述表达式如果floatMax大于floatMin则返回floatMax的值,反之,返回floatMin的值

  1. 请说明在哪些地方可以使用break语句

答:循环中和switch中

  1. 请说明下列static块的含义

static{

       courses=new SWCCourse [7];

       courses[0]=new SWCCourse( );

       courses[1]=new SWCCourse( );

       courses[2]=new SWCCourse( );

       courses[3]=new SWCCourse( );

       courses[4]=new SWCCourse( );

       courses[5]=new SWCCourse( );

       courses[6]=new SWCCourse( );

}

答:当类加载后即创建一个包含7个元素的对象数组,并为数组的每一个对象都实例化了

  1. 请解释try-catch-finally语法结构的执行逻辑

答:先执行try块,如果try块没有问题,则执行finally块;如果try中引发异常,则执行catch块,再执行finally块;finally块执行完毕后程序继续向下运行

  1. 请解释进程与线程的差别是什么

答:每启动一个程序,操作系统都会为其单独分配一个地址空间,即开启一个进程;每一个进程由n多个线程组成的,多个线程共享同一个进程,没有独立的地址空间

  1. 请解释下列代码的执行逻辑是什么

switch(con){

       case 1:

              System.out.println(“ONE”);

              break;

       case 2:

       case 3:

              System.out.println(“TWO”);

       case 10:

              System.out.println(“THREE”);

              return;

       default:

              System.out.println(“OUT”);

}

答:输入1,则输出ONE;输入2或3,都输出TWO和THREE;输入10,输出THREE;输入其他数字,则输出OUT

  1. Struts中需要继承哪个类处理客户请求,需要继承哪个类来接收用户输入的数据,并写出这两个类中需要实现的方法

答:Struts1Action类处理客户请求,ActionForm类接收用户输入

       Action实现execute方法,ActionForm实现reset和validate方法

  1. 根据自己的理解,简述Hibernate的执行原理

答:加载hibernate.cfx.xml文件;得到SessionFactory;打开Session;开启事务;执行增删改查操作;提交或回滚事务;关闭Session和SessionFactory

  1. 分析Hibernate中,HQL和通用SQL的区别

答:HQL操作的类、SQL操作的是表

  1. 根据自己的理解,分别介绍一个Spring Ioc和Spring Aop

答:Spring Ioc控制反转,只当一个依赖与另一个类时,依赖关系不由代码实现,而是通过配置文件在运行时注入

    Spring AOP面向切面编程,将业务逻辑和公共代码分来编写,在配置文件中通过代理将公共代码切入到业务逻辑中区

  1. 以前使用过什么版本管理工具/配置工具

答:SVN

  1. 执行Checkin(VSS/ClearCase)commit(CVS)命令的目的

答:Checkin/Commit是将编写的客户端代码提交到服务器的版本管理器上

Checkout/update是将版本管理服务器的代码更新到本地客户端中

12、华迪宏图面试题

1 、web开发

       (1) 请简要阐述servlet 生命周期中的几个重要方法

        答:(1)加载和实例化(2)初始化(3)请求处理(4)服务终止   

       (2)如何实现servlet的单线程模式

              答:<%@ page isThreadSafe=”false”%>

       (3)XML文档定义有几种形式,它们有何本质区别,解析XML文档有哪几种方式

              答:①两种形式 dtd  schema

②本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的)

③解析XML文档有DOM,SAX,STAX等方式

2、java基础

       (4)请说明hashMap和hashTable的区别,如何将hashMap变为线程同步

答: HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像VectorArrayList一样。
.HashTable不允许null(keyvalue都不可以),HashMap允许null(keyvalue都可以)
.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样
.HashTable使用EnumerationHashMap使用Iterator

HashTablehash数组默认大小是11,增加的方式是 old*2+1HashMaphash数组的默认大小是16,而且一定是2的指数。

哈希值的使用不同,HashTable直接使用对象的hashCode

       (5)请说明反射机制,反射机制的包以及核心类是什么?

              答:反射机制的包是java.lang.reflect

核心类:Constructor 提供关于类的单个构造方法的信息以及对它的访问权限。

Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。

Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。

Modifier 类提供了 static 方法和常量,对类和成员访问修饰符进行解码。

Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。

 

       (6)public、portected、private以及不写时的区别

答:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly

 

当前类

同一package

子孙类

其他包

public

protected

×

friendly

×

×

private

×

×

×

 

3、开源框架

(7)阐述SSH2基本流程

              答:客户端请求-->web.xmlfilter(applicationContext.xml实例化sping容器)-->struts.xml-->对应的action(由sping实例action-->调用service层(spring注入)-->调用dao层(spring注入)---与数据库进行交互---->返回dao--->返回service--->返回action--->得到result---->客户端接收

 

       (8)描述spring的事务机制,如果知道可以说明实现原理

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

       (9)myBatis与Hibernate区别

答:mybatis是把sql语句与java代码分离了...sql语句在xml文件配置的...

hibernateORM框架,它对jdbc进行了封装,在分层结构中处于持久化层,它能建立面向对象的域模型和关系数据模型之间的映射.它大大简化了dao层的编码工作

       (10)使用struts完成一个login处理;参数如何接受?view层的校验如何做?业务检验如何做?阐述处理流程(面试口述)

              答:在action类中提供私有属性,并提供get,set方法(自己杜撰的)

 

DB数据库

       (11)说说你对索引的认识对索引的认识、

              答:索引是对数据库表中一列或多列的值进行排序的一种结构

       (12)有一个数据库people,表有字段name,age,address三个属性一个数据库people,表有字段name,age,address三个属性(注:没有主键,现在如果表中有重复的数据,请删除重复只留下其中的一条,重复的定义就是两条记录的name,age,address值都一样)

答:   1. CREATE TEMPORARY TABLE tmp_table select * from people group by name,age,address having COUNT(DISTINCT name)=1 ;

delete from people ;

insert into people select * from tmp_table ;

 

T表:(字段:IDNAMEADDRESSPHONELOGDATE
E表:(字段:NAMEADDRESSPHONE
       (13)将表T中的字段LOGDATE中为2001-02-11的数据更新为2003-01-01,请写出应的SQL语句、(该字段类型为日期类型)

       答:update  T  set   logdate = to_date('2003-01-01', 'YYYY-MM-DD')
WHERE  LOGDATE=TO_DATE('2001-02-11', 'YYYY-MM-DD');

       (14)请写出将T表中第3~5行数据列出来的SQL语句

       答:SELECT *
FROM   (SELECT ROWNUM AS NO,T1.* FROM T T1)
WHERE  NO BETWEEN 3 AND 5;

       (15)请写出将表T中name存在重复的记录都列出来的SQL语句(按name排序)

         答:SELECT T1.*   FROM   T  T1 WHERE  1=1  AND    1< (SELECT COUNT(*)        FROM   T T2    WHERE  T2.ID=T1.ID)  ORDER BY T1.NAME;

 

 

13、顺藤码

1.oracle数据库的数据类型有哪些?

: Integer, varchar2,double,date,varchar,number,char,clob,blob

 

2. public class   A{

   int i=1;

   int j=i++;

   if(i>++j && i++==j){

      i+=j;

        System.out.println(i);

  }

 

}

 :不满足条件不会进入if循环, i 不输出任何东西

 

3. String b="asdfgh"

  lastIndexOf("df");

 : 返回2

 

4. abstract和Inteface的区别:

 : (1)inteface需要实现,要用implements,abstract 需要继承,要用extends.

    (2)一个类可以实现多个Inteface,但一个类只能继承一个abstract

    (3)Interface中的每一个方法都是抽象方法,都只是声明的没有方法体,实现类

      必须要实现。而abstract 的子类可以有选择地实现。

 

5. overrideoverload的区别:

 :override(重写)

  1. 方法名、参数、返回值相同。
  2. 子类方法不能缩小父类方法的访问权限
  3. 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)
  4. 存在于父类和子类之间
  5. 方法被定义为final不能被重写

       Overload(重载)

  1. 参数类型、个数、顺序至少有一个不相同。
  2. 不能重载只有返回值不同的方法名。
  3. 存在于父类和子类、同类中

 

6. 可以作用在switch()上的数据类型有哪些?

 : int String

 

7. StringBufferString的区别:

: String对象的修改都是重新创建一个新的对象,然后把新的值保存进去。String final类,即不能被继承。

 

8. StringBuffer与StringBuilder的区别:

: (1)在值运行速度方面的比较: StringBuilder > StringBuffer

   (2)StringBufferStringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的的,不像String 一样创建一些对象进行操作,所有速度就快了。

   (3) StringBuilder:线程非安全的

      SringBuffer:线程是安全的

 

  1. 11.final  finally  finalize  的区别:

:final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子                  类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

 

  1. errorexception的区别是什么?

     :error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

   

11. 启动一个线程的方法是run()  还是  start()?

 :启动线程肯定要用start()方法

 

  1. ArrayList Vector 的区别:

     : Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
  VectorArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间

ArrayListVector在从指定位置取得元素,从容器的末尾增加和删除元素都非常的有效,所有的这些操作都能在一个常数级的时间(O(1))内完成。但是从一个其他的位置增加和删除一个元素就显得颇为费时,差不多需要的时间为O(n-i),这里的n代表元素个数,i代表要增加和删除的元素所在的位置。这些操作需花费更多的时间,因为你需要挨个移动i和更高位置的元素。那么,以上这些到底说明了什么呢?

13.HashMapHashTable的区别:

  : hastmap是一个接口 map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null keynull value,而hashtable不允许。

HashMapHashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key,由于非线程安全,效率上可能高于Hashtable
HashMap允许将null作为一个entrykey或者value,而Hashtable不允许。

 

  1. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

  基本原理就是虚拟机每隔一段时间就会运行一次垃圾回收或是在虚拟机认为需要的时候。
主动调用是System.gc()。垃圾回收器运行了当然会收回内在。但悲剧的是,垃圾回收是任何程序员都无法自己控制的,也就是说即使调用了System.gc(),也只是通知虚拟机要回收垃圾,至于虚拟机什么时候运行回收器就不知道了。

 

15.写一个Singleton出来。

  :public class SingleTon {

       private SingleTon(){

              }

 

       //实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间

       private final static SingleTon instance = new SingleTon();

       public static SingleTon getInstance(){

              return instance;

       }

}

 

  1. servlet的生命周期是:

 :3 个阶段: 始化阶段、运行阶段、销毁阶段。

 

17.forward redirect的区别

 :forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,

然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,

一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

 

18.jsp有哪些内置对象?作用分别是什么? 分别有什么方法?

:JSP共有以下9个内置的对象:

request 用户端请求,此请求会包含来自GET/POST请求的参数

response 网页传回用户端的回应

pageContext 网页的属性是在这里管理

session 与请求有关的会话期

application servlet 正在执行的内容

out 用来传送回应的输出

config servlet的构架部件

page JSP网页本身

exception 针对错误网页,未捕捉的例外

 

19.JSPServlet有哪些相同点和不同点,他们之间的联系是什么?

 :JSPServlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"servlet"

ServletJSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。

JSP的情况是JavaHTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

 

20.UML是什么?用来干什么?

 :Unified Modeling Language
统一建模语言
程序设计的时候用来画类图,时序图,等等

 

  1. Struts2  Spring   Hibernate 理解或是工作原理这方面的知识

 :struts2侧重于控制器功能,当客户端发送一个地址请求,Struts(通过配置文件)根据请求代码做出反映,并进行页面调用或转发。

hibernate框架主要是负责连接数据库,把每个数据表转化为一个类,表中的每行数据相当于类的一个对象,hibernate通过对象的方式进行读取操作。
    spring是由控制反转切面编程这些设计模式开发出来的。spring包有许多类和方法,有像hibernate那样操作底层数据库功能的方法,有可以操作复杂的业务操作,这要看调用它什么样的接口和方法。由于它特殊的设计模式,使得它可以灵活地与其它框架整合,主要是通过配置文件的方式来完成。springhibernate整合在实际上替代了hibernate,因为它对hibernate的方法进行了包装。

 

  1. 设计模式有多少种  说出你了解的设计模式和你知道的实际模式

 :ABSTRACT FACTORY 抽象工厂
    BUILDER 生成器
    FACTORY METHOD 工厂方法
    ROTOTYPE 原型
    SINGLETON 单件
    ADAPTER 适配器
    BRIDGE 桥接
    COMPOSITE 组成
    DECORATOR 装饰
    FACADE 外观
    FLYWEIGHT 享元
    PROXY 代理
  CHAIN OF RESPONSIBILITY 职责链
  COMMAND 命令

 

  1. Hibernate 对象的三大状态

  : (1)瞬时

     (2) 持久

      (3) 游离

 

  1. Is  Iterator   a  class  or  Inteface  what is  its  use?(迭代器是一个类还是一个接口? 它是如何使用的?)

  :是一个类

     对已集合类中的任何一个实现类,都可以返回这样一个Iterator对象。就和循环一样,好处是可以适用于任何一个类,而且实际上java对他进行了优化,比直接用index访问快一点

 

  1. 写出Sql对表执行的CRUD语句

 ::insert into table_name values(条件,条件,....)

:delete from table_name where 条件

update table_name set 字段=新值 where 条件

:select * from table_name

 

  1. IOC的理解是什么?  DI有几种实现方式?

 :控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称DI

DI的三种实现方式:

方式一:接口注入,在实际中得到了普遍应用,即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中。
方式二:Type2 IoC: Setter injection对象创建之后,将被依赖对象通过set方法设置进去
方式三:Type3 IoC: Constructor injection对象创建时,被依赖对象以构造方法参数的方式注入

 

  1. Xpath   UML   JSTL  RIA  IOC  QBC  OGNL  LazyLoad  分别代表什么技术

  : Xpath -- XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。

     UML -- 统一建模语言(UML Unified Modeling Language的缩写)是用来对软件密集系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言

JSTL -- JSTLJSP Standard Tag Library JSP标准标签库)是一个不断完善的开放源代码的JSP标签库

RIA -- RIA技术,类似于单机版的应用程序,在很大程度上跳出了浏览器的限制,具有丰富美观的界面和交互能力,但它又是地地道道的网络程序,具有快速修改和部署的能力。它基于XMl,脚本语言和web service,可以产生丰富而强大的应用。

IOC -- 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。

   QBC -- QBC查询就是通过使用Hibernate提供的Query By Criteria API来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口。

   OGNL -- OGNLObject-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。

   LazyLoad -- 代表延迟加载,表示不在同一次执行中运行所有 SQL语句

 

  1. what  is Transient  variable?(什么是瞬时态?)

 :瞬时态的对象是刚刚用new关键字创建出来的,还没有进入Session,此时的对象没有和数据库中的记录对应。

14、咱网

  1. final finally  finalize 什么区别

答:final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载

finally-再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize-方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的

  1. Anoymouse Inner class (匿名内部类) 是否可以继承其他类  是否可以实现其他接口

答:不能继承类,但可以实现接口

  1.  & 和&& 的区别

答:区别主要答两点:

a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且 可以操作数值型

b.逻辑操作不会产生短路

  1. HashMap 和HashTable的区别

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

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

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

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

  1. 重写和重载的区别

答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。

重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。

Overloaded的方法是可以改变返回值的类型

  1. set元素是不能重复的,那么用什么方法来区分?用==  或者用 equals()它们有何去区别

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。equals()和==方法决定引用值是否指向同一对象,equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值

  1. error和exception区别

答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况;exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况

  1. 给出一个runtime Exception

答:NullPointerException、IOExcpetion、ClassNotFoundException、FileNotFoundException

  ArrayIndexOutOfBoundException、NumberFormatException、SQLException、ClassCastException

  1. abstract class 和  interface

答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

  接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口

  1. list 实现类有哪些?并按照存储结构,机制简单说一下

答:ArrayList和LinkedList

ArrayList顺序结构,执行查询较快,执行增删较慢

LinkedList链表结构,执行增删较快,执行查询较慢

  1. 在Hibernate应用中Java对象的状态有哪些?

答:瞬时、持久和游离

刚实例化的对象,存了数据,并未和数据库建立连接时对象状态瞬时的

瞬时对象经过save或者将数据库中数据查询放入实体类中,此时该对象状态时持久的

持久对象在数据库连接关闭后,转换为游离状态

游离状态的对象经过update操作后,转换为持久状态

持久对象经过delete操作后,转换为瞬时状态

  1. 简述下inverse 和cascade的作用

答:cascade级联操作,可以级联save-update、delete、all、none

    Inverse在级联操作时控制权由谁管理,true-由外键方管理,false-由主键方管理

  1. 什么是AOP  ,作用是什么

答:面向切面编程:将程序中公共部分提取出来,通过配置文件切入到业务逻辑代码中

  1. 写出一个排序方式   

答:冒泡、插入

  1. 使用cookie的好处?                                                 

答:在客户端可以较长时间存储数据,只要在有效期内通过本机访问,都可以使用该数据

    安全性较低

15、中盈信安

1、java中是否可以多重继承,如果不能用什么代替?

答:不可以,使用接口替代

2.你对jndi的理解

答:java命名和目录接口,即通过执行名称找到指定的资源,此资源可在web服务器上配置

3.java GUI 有哪些 ,特点是什么?

答:图形用户界面,awt和swing

4垃圾回收的机制是什么?能否手动回收?

答:System.GC()方法或者finalize方法手动回收;默认是自动垃圾回收

5.异常机制的原理?

答:

 

 

6关于基线的理解

答:

 

16、力鼎软件

JAVA基础

  1. 下面语句执行后,k值是(B)

Int m =3,n=6;   while((m++)<(--n))++k;

A.0  B.1  C.2   D.3

  1. 设i、j为int型变量,a为int型数组,以下选项正确的赋值是(  A.C  )

A.i=i+1  B.a{0}=7  C.i++;--j   D.a(0)=66

3.java语言的类间的继承关系是(B)

        A.多重的  B.单重的 C.线程的D.不能继承的

4.设有定义int i=6,则执行以下语句后,i的值为(C)

        i+=i-1;

        A.10   B.121  C.11 D.10

5.下列选项中,用于自定义子类时声明的父类的关键字是(C)

              A.interface  B.package C.extendsD.class

6.若已定义byte[] x = {11,22,33,66},其中0≤k≤3,则对x数组元素错误的引用是(c)

        A.x[5-3]  B. x[k] C. x[k+5] D.x[0]

7.下列语句执行后,ch1的值是(B)

    Char ch1 ='A',ch2 = 'W'if(ch1+2<ch2)++ch1;

A.'A' B.'B'C.'C' D.B

8.下列语句执行后,i的值是(D)

Int i=8,j=16;if(i-1>j)i--;else j--;

A.15 B.16 C.7 D.8

 

9.下列语句执行后,k的值是(C)

Int i=10,j=18,k=30;

Switch(j-i){case 8:K++; case 9:K+=2; case 10:K+=3;

defalut:K/=j;}

A.31 B.32 C.2 D.33

10.下面语句执行后,i的值是(B)

For(int I =0,j=1;i<5;j+=3)i=i+j;

A.4 B.5 C.6 D.7

Javascript基础知识

  1. 在javascript中,命令按钮(button)支持是事件包括事件(D)
  1. onClick B.onChange C.onSelect D.onSubmit

2.在javascript中,可以使用Date对象的(A)方法返回该对象的日期

A.getDate B.getMonth C.getYearD.getTime

3.那个对象可以获得屏幕的大小(B)、

A.window B.screen C.navigatorD.screenX

4.setinterval ("alert('welcome');",1000);(D)

A.等到1000s后在弹出一个对话框

B.等到1s后弹出一个对话框

C.语句报错,语法有问题

D.每隔1s弹出一个对话框

 

5.window对象的open方法返回值是(A)

A.没有返回值

B.boolean类型,表示当前窗口是否打开成功

C.返回打开新窗口的对象

D.返回int类型的值,开启窗口的个数

数据库

  1. 数据库系统的核心是(A)
  1. 数据库 B.数据库管理系统 C.数据库模型D.软件工具

2.SQL语言具有的功能(D)

A.关系规范、数据操作、数据控制

B.数据定义、数据操作、数据控制

C.数据定义、数据规范化、数据控制

D.数据定义、关系规范化、数据操作

3.SQL语言的数据操纵语句包括select、insert、update和delete,最重要,也是最频繁使用的语句是(A)

        A.selectB.insertC.updateD.delete

4.在关系数据库设计中,设计关系模式是(B)的任务。  

A.需求分析阶段

B.感念设计阶段

C.逻辑设计阶段

D.物理设计阶段

 

5.(C)是DBMS的基本单位,它是用户定义的一组逻辑一致的程序序列。

A.程序B.命令C.事物D.文件

6.下列sql语句中,创建关系表的是(B)

A.alterB.createC.updateD.insert

7.数据库的(C)是为了保证由授权用户对数据库所做的修改不会影响数据一致性的损失。

A.安全性B.完整性C.并发控制D.恢复

8.数据库进行的基本工作单位。如果一个事务执行成功,则全部更新提交;如果一个事务执行失败,则已做过的更新恢复原状,好像所有的事务从来没有过这些更新,这样保持数据库处于(B)的状态。

A.安全性B.一致性C.完整性D.可靠性

9.对并发操作若不加以控制,可能会带来数据的(D)问题。

A.不安全B.死锁C.死机D.不一致

10.已知表T1中有两行数据,T2表中有三行数据则执行,“select a,* from T1 a,T2 b”后,返回的行数是(C)

A.2  B.3  C.5  D.6

算法题

  • 基础篇
  1. 写出一个singleton的示例代码。

 

class Singleton {

     

    //私有,静态的类自身实例

    private static Singleton instance = new Singleton();

     

    //私有的构造子(构造器,构造函数,构造方法)

    private Singleton(){}

     

    //公开,静态的工厂方法

    public static Singleton getInstance() {

        return instance;

    }

}

或者

class LazySingleton {

    //初始为null,暂不实例化

    private static LazySingleton instance = null;

     

    //私有的构造子(构造器,构造函数,构造方法)

    private LazySingleton(){}

     

    //公开,静态的工厂方法,需要使用时才去创建该单体

    public static LazySingleton getInstance() {

        if( instance == null ) {

            instance = new LazySingleton();

        }

        return instance;

    }  

}

 

  1. 利用递归算法求N!(n为一整数型,并且0<=n<10)。
     public int factorial(int m)

     {

               if (m < 0)

                     return 0;

               else if ( m == 1)

                     reteurn 1;

                else if (m > 1)

                    return m * factorial(m-1);

     }

17、中科软面试题

1、String API

char charAt(int index)

//返回指定索引处的 char 值。

int codePointAt(int index)

//返回指定索引处的字符(Unicode 代码点)。

int codePointBefore(int index)

//返回指定索引之前的字符(Unicode 代码点)。

int codePointCount(int beginIndex, int endIndex)

//返回此 String 的指定文本范围中的 Unicode 代码点数。

int compareTo(String anotherString)

//按字典顺序比较两个字符串。

int compareToIgnoreCase(String str)

//不考虑大小写,按字典顺序比较两个字符串。

String concat(String str)

//将指定字符串联到此字符串的结尾。

boolean contains(CharSequence s)

//当且仅当此字符串包含 char 值的指定序列时,才返回 true。

boolean contentEquals(CharSequence cs)

//当且仅当此 String 表示与指定序列相同的 char 值时,才返回 true。

boolean contentEquals(StringBuffer sb)

//当且仅当此 String 表示与指定的 StringBuffer 相同的字符序列时,才返回 true。

static String copyValueOf(char[] data)

//返回指定数组中表示该字符序列的字符串。

static String copyValueOf(char[] data, int offset, int count)

//返回指定数组中表示该字符序列的字符串。

boolean endsWith(String suffix)

//测试此字符串是否以指定的后缀结束。

boolean equals(Object anObject)

//比较此字符串与指定的对象。

boolean equalsIgnoreCase(String anotherString)

//将此 String 与另一个 String 进行比较,不考虑大小写。

static String format(Locale l, String format, Object... args)

//使用指定的语言环境、格式字符串和参数返回一个格式化字符串。

static String format(String format, Object... args)

//使用指定的格式字符串和参数返回一个格式化字符串。

byte[] getBytes()

//使用平台默认的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。

void getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin)

//已过时。 该方法无法将字符正确转换为字节。从 JDK 1.1 起,完成该转换的首选方法是通过 getBytes() 构造方法,该方法使用平台的默认字符集。

byte[] getBytes(String charsetName)

//使用指定的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

//将字符从此字符串复制到目标字符数组。

int hashCode()

//返回此字符串的哈希码。

int indexOf(int ch)

//返回指定字符在此字符串中第一次出现处的索引。

int indexOf(int ch, int fromIndex)

//从指定的索引开始搜索,返回在此字符串中第一次出现指定字符处的索引。

int indexOf(String str)

//返回第一次出现的指定子字符串在此字符串中的索引。

//不包含该字符串返回 -1

int indexOf(String str, int fromIndex)

//从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。

//不包含该字符串返回 -1

String intern()

//返回字符串对象的规范化表示形式。

int lastIndexOf(int ch)

//返回最后一次出现的指定字符在此字符串中的索引。

int lastIndexOf(int ch, int fromIndex)

//从指定的索引处开始进行后向搜索,返回最后一次出现的指定字符在此字符串中的索引。

int lastIndexOf(String str)

//返回在此字符串中最右边出现的指定子字符串的索引。

int lastIndexOf(String str, int fromIndex)

//从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引。

int length()

//返回此字符串的长度。

boolean matches(String regex)

//通知此字符串是否匹配给定的正则表达式。

int offsetByCodePoints(int index, int codePointOffset)

//返回此 String 中从给定的 index 处偏移 codePointOffset 个代码点的索引。

boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)

//测试两个字符串区域是否相等。

boolean regionMatches(int toffset, String other, int ooffset, int len)

//测试两个字符串区域是否相等。

String replace(char oldChar, char newChar)

//返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。

String replace(CharSequence target, CharSequence replacement)

//使用指定的字面值替换序列替换此字符串匹配字面值目标序列的每个子字符串。

String replaceAll(String regex, String replacement)

//使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。

String replaceFirst(String regex, String replacement)

//使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的第一个子字符串。

String[] split(String regex)

//根据给定的正则表达式的匹配来拆分此字符串。

String[] split(String regex, int limit)

//根据匹配给定的正则表达式来拆分此字符串。

boolean startsWith(String prefix)

//测试此字符串是否以指定的前缀开始。

boolean startsWith(String prefix, int toffset)

//测试此字符串是否以指定前缀开始,该前缀以指定索引开始。

charSequence subSequence(int beginIndex, int endIndex)

//返回一个新的字符序列,它是此序列的一个子序列。

String substring(int beginIndex)

//返回一个新的字符串,它是此字符串的一个子字符串。

String substring(int beginIndex, int endIndex)

//返回一个新字符串,它是此字符串的一个子字符串。

char[] toCharArray()

//将此字符串转换为一个新的字符数组。

String toLowerCase()

//使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

String toLowerCase(Locale locale)

//使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。

String toString()

//返回此对象本身(它已经是一个字符串!)。

String toUpperCase()

//使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

String toUpperCase(Locale locale)

//使用给定的 Locale 规则将此 String 中的所有字符都转换为大写。

String trim()

//返回字符串的副本,忽略前导空白和尾部空白。

static String valueOf(boolean b)

//返回 boolean 参数的字符串表示形式。

static String valueOf(char c)

//返回 char 参数的字符串表示形式。

static String valueOf(char[] data)

//返回 char 数组参数的字符串表示形式。

static String valueOf(char[] data, int offset, int count)

//返回 char 数组参数的特定子数组的字符串表示形式。

static String valueOf(double d)

//返回 double 参数的字符串表示形式。

static String valueOf(float f)

//返回 float 参数的字符串表示形式。

static String valueOf(int i)

//返回 int 参数的字符串表示形式。

static String valueOf(long l)

//返回 long 参数的字符串表示形式。

static String valueOf(Object obj)

//返回 Object 参数的字符串表示形式。

 

2、JSP中getParameter与getAttribute有何区别?

——getParameter得到的都是String类型的。或者是http://a.jsp?id=123中的123,或者是某个表单提交过去的数据。

——getAttribute则可以是对象。

——getParameter()是获取POST/GET传递的参数值;

——getAttribute()是获取对象容器中的数据值;

——getParameter:用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。

——getAttribute:用于服务器端重定向时,即在sevlet中使用了forward函数,或struts中使用了mapping.findForward。getAttribute只能收到程序用setAttribute传过来的值。

——getParameter()是获取POST/GET传递的参数值;

——getAttribute()是获取SESSION的值;

另外,可以用setAttribute,getAttribute发送接收对象.而getParameter显然只能传字符串。

setAttribute   是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。   这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。

getParameter只是应用服务器在分析你送上来的request页面的文本时,取得你设在表单或url重定向时的值。

getParameter       返回的是String,       用于读取提交的表单中的值;        

getAttribute       返回的是Object,需进行转换,可用setAttribute设置成任意对象,使用很灵活,可随时用。

 

3、图片上传及读取(从页面到数据库的整个流程)?

使用struts2做上传时,在action中需要这几个属性:

private File myFile; //上传的文件  这个变量名,与页面上file标签的name对应

private String myFileContentType; //上传文件的类型

private String myFileName; //上传文件的文件名

setter&getter省略

因为文件是以流的形式读取到后台,所以

InputStream ips=new FileInputStream(myFile);

byte[] bt=new byte[ips.available()];//此处调用的ips的方法是获取流中文件的数量,用来动态创建数组

ips.read(bt);

ips.close();

然后,再将数组bt存入数据库中就可以了,在oracle中,与数组对应的类型是blob

需要注意的是,要做上传的话,页面上需要一些更改:

第一是form的的属性要写成如下

<form id="myform" name="myform" method="post" enctype="multipart/form-data">

第二是注意form的提交方式,因为文本和图片一起提交,用jquery等ajax函数无法提交,但是jquery-form插件ajaxSubmit函数可以提交不过比较麻烦,建议用myform.submit()或者Submit按钮提交;

 

从数据库中读取图片显示出来,就比较麻烦了,struts.xml中需要如下配置

<result name="download" type="stream">

<param name="contentType">image/jpg/</param>

<param name="inputName">inputStream</param>

<param name="contentDisposition">inline;filename="hlm.jpg"</param>

<param name="bufferSize">40960</param>

</result>

action中

public String getimgbgn() throws Exception {

byte[] bt = bgnBiz.getimg(bgn);//从数据库中查询图片

inputStream = new ByteArrayInputStream(bt);将图片数组读入到流中

return "download";

}

这时在页面上,用js动态生成显示图片<img>标签的src地址,就可以显示了

 

  1. 事务是什么?有什么作用?Spring事务如何配置?

(1):事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。 事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。

(2):事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,滚回到事务开始的状态。

(3)统观spring事务,围绕着两个核心PlatformTransactionManager和TransactionStatus
spring提供了几个关于事务处理的类:
TransactionDefinition //事务属性定义
TranscationStatus //代表了当前的事务,可以提交,回滚。
PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。

一般事务定义步骤:

TransactionDefinition td = new TransactionDefinition();

TransactionStatus ts = transactionManager.getTransaction(td);

try

{ //do sth

transactionManager.commit(ts);

}

catch(Exception e){transactionManager.rollback(ts);}


spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。

编程式主要使用transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.

void add()

{

    transactionTemplate.execute( new TransactionCallback(){

        pulic Object doInTransaction(TransactionStatus ts)

       { //do sth}

    }

}


声明式:

使用TransactionProxyFactoryBean:

<bean id="userManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
   <property name="transactionManager"><ref bean="transactionManager"/></property>
   <property name="target"><ref local="userManagerTarget"/></property>
   <property name="transactionAttributes">
    <props>
     <prop key="insert*">PROPAGATION_REQUIRED</prop>
     <prop key="update*">PROPAGATION_REQUIRED</prop>
     <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
    </props>
   </property>
</bean>


围绕Poxy的动态代理 能够自动的提交和回滚事务
org.springframework.transaction.interceptor.TransactionProxyFactoryBean

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

 

 


5、request和session的区别?

(1)request和session的作用

request是获取信息--通过用户提交的表单,查询字符串,cookie等获得信息
session是服务端用来保存一些数据(通常是标记状态的,当然也可以保存别的)

session是服务端的记录变量,可以跟踪记录访问者动作,比如登录,退出等。
request用在数据提交,表单数据等

(2)request和session的优点和缺点
request占用资源比较少 安全性也比较高 可是相对来说 缺乏持续性
而session则相对来说 对资源的消耗会大点 安全性相对来说也会稍微低点 可是它能实现比如会话跟踪技术 个有优点和缺点
不过 个人觉得 如果可以使用request的情况下 尽量使用request 因为相对于服务器来说 资源的消耗这个问题还是比较重要的

 

6、如何把字符串转换成日期格式?

  Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2005-06-09");

  String now = new SimpleDateFormat("yyyy年MM月dd日").format(date);

 

  1. sql语句:查询每个公司2005-2008年的收入综合,按id排序?

Select sum(收入) from 表名 where 年 between (2005,2008) group by 公司名 order by id;

18、北信源JAVA软件开发工程师笔试题

  1. 请写出Java基本数据类型对应的包装类
    答:byte Byte  , shot  Short ,int Integer , long  Long, float Float ,double Double ,char Character,  boolean Boolean
  2. 请写出jdk1.5新增的新特性(至少写出4个),谈谈个人对jdk7新增特性的了解
    答:jdk 1.5 新增特性 1.泛型  2.for-each 循环 3.自动拆包装包   4枚举  5.可变参数
           1.7 对Java集合的增强支持  switch 中可用String  数值可加下划线 支持二进制文字
    自动资源管理  简化了可变参数方法的调用
  3. 请写出几个你常碰到的运行时异常,关键字throw 和 throws的区别
           FileNotFoundException ArrayIndexOutOfBoundsExption   throw 用于抛出异常  而throws 表示该方法可能会抛出XX异常  调用该方法时必须处理该异常
  4. 区别:break,continuem,return 的作用
           break 用于跳出循环  continue用于跳出本次循环   return 用于返回 返回值
  5. 写出一个枚举使用场景(至少一个)
           参数是N个固定的值  例如颜色 固定的值
  6. 画图说明servlet的生命周期
          

写出jsp规范的3个指令和9大隐式对象,并简单阐述其作用

三个指令:
page指令  指令用于定义JSP页面的各种属性
Include指令 用于引入其它JSP页面
 taglib指令 引入标签库
9大隐式对象:
Request    保存了很多客户端请求的信息
Response   生成服务器端响应,然后将响应结果发送到客户端
Page       代表页面本身 也就是servlet中的this
PageContext   jsp页面的上下文 可以访问页面中的共享数据
Config    代表jsp配置信息
Application   代表jsp所属的web应用本身
Session  代表一次会话
Out   代表jsp页面的输出流
Exception 代表其他页面的异常和错误

  1. 画图说明 转发和重定向的执行流程
           重定向转发
  2. 写出web开发的四个域对象及其生命周期

    page   jsp有效 离开该页面
    request  一次请求   当前请求-下次请求
    session  一次会话 创建  至session过期或会和结束
    application 当前web应用 创建 至服务器关闭
  3. 简单谈谈 你对mvc开发模式的理解
           MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,
     用于组织代码用一种业务逻辑和数据显示分离的方法,这个方法的假设前提是如果业务逻辑被聚集到一个部件里面,
     而且界面和用户围绕数据的交互能被改进和个性化定制而不需要重新编写业务逻辑MVC被独特的发展起来用于映射传统的输入、
     处理和输出功能在一个逻辑的图形化用户界面的结构中。
  4. 写出你最常用到的设计模式(至少4个)
        单例模式   抽象工厂  代理模式    命令模式
  5. 请写出一个递归程序
                  public static void DecimalToBinary(int num){

           if(num ==0){   
                                   return;

            }else{

                  DecimalToBinary(num/2); 

                    System.out.print (num%2);

            }

            }

请用两种方式对:5,4,7,1,9,6,3,8,1进行升序排序
       一、   int[] nums = {5,4,7,1,9,6,3,8,1};
            Arrays.sort(nums);
    二、 int[] nums = {5,4,7,1,9,6,3,8,1};

     

      for(int j=0;j<nums.length-1;j++){

         for(int i=j+1;i<nums.length;i++){

            int temp = nums[j];

            if(temp>nums[i]){

               nums[j]=nums[i];

               nums[i]=temp;

            }

         }

      }
      

  1. 用javascript脚本语言写一个简单的计算器

     
  2. 谈谈你对ajax异步交互的使用场景:
           在填写表单内容时,需要保证数据的唯一性(例如新用户注册填写的用户名),因此必须对用户输入的内容进行数据验证。
        自动更新页面
     
  3. 分别写出MySQL、MS Sql 、Oracle d的分页查询语句

    --mssqlserver的分页查询语句:

    select top 10 * from t where id not in (select top 20 id from t order by id ) order by id 

    select top 10 * from t where id in (select top 20 id from t order by id) order by id desc

-mysql的分页查询语句:

    select * from t order by id limit 20,10 
--oracle的分页查询语句:

    select * from (select rownum r,* from t where r<=30) where r>20
 

  1. 写出至少10个常用的Linux命令;
    cat /proc/version 显示内核的版本
    cat /proc/mounts 显示已加载的文件系统cat /proc/mounts 显示已加载的文件系统
    df -h 显示已经挂载的分区列表
    ls -lh 显示权限
    passwd 修改口令
    useradd user1 创建一个新用户
    whereis halt 显示一个二进制文件、源码或man的位置
    which halt 显示一个二进制文件或可执行文件的完整路径
     
  2. 综合题:按照以下需求画出简单的用类图和时序图

远程呼叫管理平台 “远程协助” 进行远程技术支持,同时系统记录所有人员的对话信息;

要求:1.用户有角色之分:管理员、运维人员、用户;

          2.用户通过聊天窗口进行呼叫运维人员,运维人员不在线时,用户可以给其留言,在线时可以发送文件给运维人员:

          3.请求事件有类别和等级之分,
 

19、项目部JAVA开发工程师笔试题目

一、选择题

1.下列语句哪个正确(d)

A 、Java程序编译后 会产生machine code

B、Java程序经编译后会产生 bvte code

C、Java 程序经编译后会产生DDL

D、以上都不正确

  • 提供Java存取数据库能力的包是(a)
  1. Java.sql  B、java.awt  C、java.lang D、java.wing
  1. 执行如下程序代码

a=0;c=0

Do{

--c;

a=a-1;

}while(a>0);

后,c 的值是(c)

A 、0   B、1    C、-1   D、死循环

 

  1. 下列标识不合法的有(c)

      A、new      B、$UsdoLLars   C、1234   D、car.taxi

  5、不能用来修是interface 的有(acd)

  1. private      B、public   C、protected   D、static

  6.铺设一条排水管道,负责施工的是七名挖土工人,他们工作了7个小时,挖出7米长的沟。如果以同样的速度继续挖,那么,要在50小时内挖出50米长的沟,需要(c)名挖土工;

A、50   B、5    C、7   D、以上都不对

 

  1. 一名衣着华丽的女顾客看中了 w珠宝商店里的一直钻石戒指, 与老板讨价还价,讲好价钱是800元 女顾客拿出了一张1000元的钞票, 珠宝店的老板为了找钱,拿了这张钞票向隔壁的杂货店老板兑换成零钱,然后把200元钱找给顾客,过了一会,杂货店老板发现那张钞票是假的,而顾客有早已拿着钻石戒指走了,出于无奈珠宝店老板值得自认晦气赔给了杂货店老板。请问,珠宝店老板在这笔生意中一共损失了?(b)

 A:800 元  B、1000元  C、1200元   D 、1800元   E:2000元

 

  1. 判断题

1.Java程序中的起始类名称必须与存放该类的文件名相同(Y)

2.unicode 是用16位来表示一个字的。(Y)

3.Java中char 可以存放一个中文字(Y)

4.原生类的数据类型均可任意转换(N)

 

  1. 简答题

       1.有两条不规则的绳子 , 燃烧每条绳子需要一个小时,问:怎样通过燃烧两条绳子测量出标准的十五分钟?

 

先将一条绳子的两头一起点燃,点燃的同时将另一条绳子的一头点燃。当第一条绳子烧完的时候正好是30分钟,这个时候将第二条绳子的另一头也同时点燃 开始计时。当第二条绳子也烧完的时候,就是过了15分钟。

 

       2.请列举出三种或三种以上支持Java 的web服务器 .

常用的有tomcatjettyjbossweblogic、等

  1. 当一个对象呗当作参数传递到一个方法后   , 此方法可以改变这个对象的属性, 并返回变化后的结果,那么这里到底是值传递 还是引用传递?请说明原因。

是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

 

  1. 有两张数据表A 和B

   A表中偶两个字段  aid,bid

   B表中有两个字段bid,name

两张表的数据量都是百万级的  ,a表的bid 和b表的bid关联,现A表中有些无效数据,这批数据的bid在B表中不存在, 要求写条 oracle 可识别的sql语句将这些数据删除

Delete a where a.bid not in (select b.bid from b);

 

  1. 有两张数据表 A 和B

 A表有字段s_id,m_id,g_id,a_num

 B表有字段 s_id,m_id, g_id,b_num

A表的s_id,m_id,g_id 和B表的对应字段关联,现需要将两张表的数据合并,即要得到s_id,m_id,g_id,a_num,b_num,  其中B表的s_id,m_id g_id 是A表的 s_id , m_id g_id 的子集,请写出一条sql语句实现这个功能,要求A表中s_idm_id,g_id 全部出现  只是对应的B表 的b_num 显示为0

 

  1. 请说明数据库中为什么要设置主键和外键?什么是事物处理?

外键是关系数据库三个完整性的五个约束条件之一,是表与表之间建立的一种关系。

就是把多件事情当做一件事情来处理。要么一块执行 ,要么一起回滚!

 

四:编程题

 

  1. 编程实现矩阵显示   , 具体要求为输入参数打印相应的矩阵 , 矩阵的样式如下(以输入4为例

  例如:

       0000

       0111

       0122

       0123

int param=100;

        for (int i = 0; i < param; i++) {

            for (int j = 0; j < param; j++) {

                if (j>i) {

                    System.out.print(i);

                }else{

                    System.out.print(j);

                }

            }

            System.out.println();

        }

  1. 用 1、2、2、3、4、5、 这六个数字, 用Java 写一个main函数 打印出不同的排列,如:

   512234,412345 等..  要求: “4”不能子啊第三位  “3”与 “5”不能相连

 int limit;

         int need=6;

                  int[] temp = {1,2,2,3,4,5};

                  limit=temp.length;

                  int[] result = new int[need];

                  int w;

                  Random rand = new Random();

                 int a=1;

                 int b=0;

                  while((result[2]==4)||Math.abs(a-b)==1){

                     for (int i = 0; i < need; i++) {

                          w = rand.nextInt(limit - i) + i;

                          int t = temp[i];

                         temp[i] = temp[w];

                         temp[w] = t;

                         result[i] = temp[i];

                     }

                     for (int j = 0; j < result.length; j++) {

                        if (result[j]==3) {

                            a=j;

                        }

                        if (result[j]==5) {

                            b=j;

                        }

                    }

                  }

    for (int i = 0; i < result.length; i++) {

        System.out.print(result[i]);

    }

  1. 请判断如下代码是否有错,如果有请指出:

   public class Test{

Public void test(){

Private String aaa=””;

Int I =aaa.length();}

}

不能加private public  private p都是小写的,int i也是小写的

  1. 写出如下代码的执行情况

              Public class Test{

Public void test1(String str){

System.out.println(str);

}

Public static void main(String[] args){

Test t = new Test();

t = null;

t.test1(“abc”);

}

}

空指针异常

五:问答题

  1. 请简单描述你个人期望的工作环境。
  2. 请简要概述一下程序员的基本职责。

 

 

20、北龙泽达(北京)数据科技有限公司

  1. 是否可以继承string类,为什么?

答:不可以继承string类,因为string类是用final修饰的,是final类。

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

答:会执行,在return前面执行。

  1. 请写出Test类执行的输出结果

public class ObjA

{

       static int _param1 = 0;

       private String _param2 = “bjfu”;

public int getParam1()

{

       return _param1;

}

public void setParam1(int  param1){

       ObjA._param1=param1;

}

public String getParam2(){

       return _param2;

}

public void setParam2(String  param2){

       _param2=param2;

}

}

public class Test

{

       static void changeValue(ObjA  objA)

{

       if (null != objA)

{

       objA.setParam1(2);

       objA.serParam2(“hello!”);

}

}

static void changValue(String b)

{

       If(null !=b){

              b = b.toUpperCase();

}

System.out.println(b);

}

public static void main (String [] args)

{

       String b=”abc”;

       changValue(b); 

       System.out.println(b); 

       ObjA objA =new ObjA();

       ObjA objB =new ObjA();

       changValue(objA);

       System.out.println(objA.getParam1());

System.out.println(objA.getParam2());

 

System.out.println(objB.getParam1());

System.out.println(objB.getParam2());

 

}

 

}

答:ABC

       abc

       2

       hello

       2

       bifu

  1. 接口和抽象类的作用和异同?

答:接口和抽象类都是用来实现多态,实现代码的重用性。但是两者的区别在于:

(1)接口中不能有构造方法,而抽象类中可以有构造方法。

(2)接口中只能定义静态常量(也是默认形式),而抽象类中可以定义普通成员变量。

(3)接口中只能定义公共的抽象方法,并且方法中不能包含方法体,而抽象类中可以包含普通方法,并且可以是public 、protected。

(4)接口中不能包含静态方法,而抽象类中可以有。

(5)一个类可以实现多个接口,但一个类只能继承一个抽象类。            

  1. 编码实现List<String>输出为以“,”分割字符串,要求最后一个字符串后不加“,”;其中List<String>至少有100个String对象,以你认为的最优方式实现

例如List<String> list=new ArrayList<String>();list.add(“a”);list.add(“b”);

结果为:String result=”a,b”;

答: String result=””;

for(int i=0;i<list.size();i++){

       result+=list.get(i)+”,”;

}

result=result.substring(0,result.lastIndexOf(“,”));

 

  1. JSP中有哪些常用的内置对象(至少写出3个),并写出该对象一些常用方法(1-2个即可)

答:request           getAttribute(String name)   返回指定属性的属性值

                                   getParameter(String name)    返回name指定参数的参数值

getParameterValues(String name) 返回包含参数name的所有值的数组

       response                      getWriter();    返回可以向客户端输出字符的一个对象

                                          getCharacterEncoding()  返回响应的是何种字符编码

                                          sendRedirect(String location);      重新定向客户端请求

       session                         getId();   返回session创建时JSP引擎为它设置的惟一ID号

getValueNames();  返回一个包含此session中的所有可用属性的数组

  1. forward和redirect的区别?

答:(1)从地址栏显示来说

forward是转发,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取出来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL;

              (2)从数据共享来说

                     forward转发页面和转发到的页面可以共享request里面的数据

                     redirect不能共享数据

              (3)从运用地方来说

                     forward一般用于登陆的时候,根据角色转发到相应的模块

                     redirect一般用于用户注销登陆时返回主页面和跳转到其它的网站等

              (4)从效率上说

                     forward高  redirect低

  1. 页面间对象传递的方法有哪些(至少写出2个)?

答:page、request、session、application、cookie

  1. 有三个数据库表,表结构如下:

student(学生表)

sid(学号)

sname(姓名)

01

张三

02

李四

03

王五

course(课程表)

cid(课程编号)

cname(课程名称)

01

语文

02

数学

03

英语

result(成绩表)

sid(学号)

cid(课程编号)

score(成绩)

01

01

65

01

02

76

01

03

86

02

01

97

02

02

57

02

03

88

03

01

90

03

02

79

03

03

82

1:试写出单条SQL语句,输出学生学号,学生姓名,总分,并按照成绩总分由高到低排序。

答:select student.sid as 学号,student.sname as 姓名,r.sumScore as 总分 from student inner join (select sid, sum(score) as sumScore from result group by sid) r on r.sid=student.sid order by r.sumScore desc

2:试写出单条SQL语句,输出各科目的平均分。

答:select course.cname as科目,r.avgScore as 平均分 from course

inner join (select cid, avg(score) as avgScore from result group by cid) r on course.cid=r.cid

10、编码实现JDBC操作数据库,在学生表中插入一条记录(表结构见题目9学生表),假设学号使用的是MySQL的自增主键,学生姓名为“新生”。

提示:数据库连接获取方式可使用Connection conn=ds.getConnection();

答:Class.forName(“com.mysql.jdbc.Driver”);

Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306:Score”,”root”,”root”);

Statement stmt=conn.createStatement();

String sql=”insert into student (snam) values (‘新生’)”;

stmt.executeUpdate(sql);

stmt.close();

conn.close();

11、使用HTML和javascript实现如下界面和功能:

这是一个div,点击“显示图片”按钮,此处将显示文本框中指定地址的图片

http://www.bjfu.edu.cn/images/head_l.png                             显示图片

功能描述:当浏览器用户点击按钮“显示图片”时,DIV中显示输入框中指定地址的图片。建议采用你熟悉的javascript框架,比如JQuery

<div id=”img”></div>

<input type=”text” id=”imgPath” value=”图片路径”/>

<input type=”button” id=”viewimg”/>

答:<script type=”text/javascript”>

              $(document).ready($(“#viewimg”).click(

                     function(){

                            var imgPath=$(“#imgPath”).val();

                            $(“#img”).html(“<img src=’”+imgPath+”’/>”);  

}

));

</script>

21、网递

一、选择题

 

1、下列语句哪一个正确( )

       A、Java 程序经编译后会产生 machine code

       BJava 程序经编译后会产生 byte code

       C、Java 程序经编译后会产生 DLL

       D、以上都不正确

2、提供 Java 存取数据库能力的包是( )

       Ajava.sql    B、java.awt   C、java.lang  D、java.swing

3、执行如下程序代码

       a=0,c=0

       do{

              --c;

              a=a-1;

       }while(a>0);

       后,c 的值是( )

       A、0      B、1      C-1     D、死循环

4、下列标示符不合法的有( )

       a、new   B$Usdollars      C、1234 D、car.taxi

5、不能用来修饰 interface 的有( )

       APrivate     B、public      Cprotected  Dstatic

6、建设一条排水管道,负责施工的是七名挖土工,他们工作了7小时,挖出7米长的沟。如果以同样的速度继续挖,那么,要在50小时内挖出50米的沟,需要( )名挖土工:

       A、50    B、5      C7      D、以上都不对

7、一位衣着华丽的女顾客看中了w珠宝商店里的一只钻石戒指,与店老板讨价还价后,讲好价钱是800元,女顾客拿出一张1000元的钞票。珠宝点老板为了找钱,拿了这张钞票向隔壁的杂货店兑换成零钱,然后把200元找给顾客。过了一会儿,杂货店老板发现那张钞票是假的,而顾客又早已拿了钻石戒指走了。出于无奈,珠宝店老板只得自认晦气,拿出1000元,赔给了杂货店老板。请问珠宝店老板在这笔生意中一共损失了?

       A、800元     B1000   C、1200元   D、1800元   E、2000元

 

二、判断题

 

1、Java程序中的起始类名称必须与存放该类的文件名相同。()

2、Unicode 是用 16 位来表示一个字的。( )

3、Java 中的 char 可以存放一个中文字。( )

4、派生类中的数据类型均可任意转换。 (× )

 

三、简答题

 

1、有两条不规则的绳子,燃烧每条绳子需要一个小时。问 怎样通过燃烧两条绳子测量出标准的十五分钟?

答:两根绳子同时点燃一头。去其中一根绳子点燃另一头。当其中一根绳子烧完之后(消耗半小时)另一根绳子还能燃烧半小时。这时将其另一头点燃正好还能燃烧十五分钟

2、请列举出三种或三种以上支持 java 的 web 服务器。

       答:Tomcat、Jboss、WebLogic

3、有一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并可返还变化后的结果。那么这里到底是值传递还是引用传递?请举例说明原因。

       答:是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的

4、有两张数据表 A 和 B ,A 表中有两个字段 aid、bid,B表中有两个字段 bid 、name。两张表的数据量级都是百万级的。A 表的bid和B表的bid关联,现在A表中有些无效数据,这批数据的bid在B表中不存在。要求写条 oracle 可识别的SQL语句将这些数据删除。

       答:delete from A where bid not in select bid from B

5、有两张数据库表A和B,A表有字段s_id、m_id、g_id、a_num。B表有字段s_id、m_id、b_num。A表的s_id、m_id、g_id和B表的对应字段关联。现在需要将两张数据表的数据合并,即要得到s_id、m_id、g_id、a_num、b_num。其中B 表的s_id、m_id、g_id是A 表的s_id、m_id、g_id的子集,请写出一条sql语句实现这个功能,要求A表中s_id、m_id、g_id全部出现。只是对应的B表的b_num显示为0.

       答:select a.s_id,a.m_id,a.g_id,a.a_num,b.b_num from A left join B on A.s_id=B.s_id

6、请说明数据库中为什么要设置主键和外键?什么是事物处理?

       主键和外键:确保数据的安全性和完整性

       事物处理:为保证数据库内容的一致,就要将数据库的一组操作作为一个整体来进行,要么全部成功完成,要么全部失败退出。如果由于故障或其它原因而使一组操作中有一些完成,有一些未完成,则必然会使得数据库中的数据出现不一致,从而使得数据库的完整性受到破坏。因此,更新操作序列必须作为一个整体在DBMS执行时出现,即“要么全做,要么全不做”。

四、编程题

 

1、编程实现矩阵现实,具体要求为输入参数打印出相应维数的矩阵,矩阵样式如下( 以输入 4 为例 ):

       0000

       0111

       0122

       0123

       答:

       public void test(int num){

        for(int i=0;i<num;i++){

            for (int j = 0; j < num; j++) {

                System.out.print(j<=i?j:i);

            }

            System.out.println();

        }

    }

2、用1、2、2、3、4、5 这六个数字,用java写一个 main 函数,打印出所有不同的排列,如:512234、412345等,要求:"4" 不能再第三位,"3" 与 "5" 不能相连。

      

 

 

3、请判断如下代码是否有错,如果有请指出:

       public class Test{

              public void test(){

                     private String aaa="";  //错 方法中声明变量仅能使用 final 修饰only final is permitted

                     int i=aaa.length();

              }

       }

4、写出如下代码的执行情况:

       public class Test{

              public void test1(String str)

              {

                     System.out.println(str);

              }

              public static void main(String[] args)

              {

                     Test t=new Test();

                     t=null;

                     t.test1("abc");

              }

       }

       答:空指针异常,程序停止

五、问答题

 

1、请简单描述你个人期望的工作环境。

2、请简要描述一下程序员的基本职责。

22、指联在线

1、简述你对J2EE的理解。

       答:Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)

2、GC是什么?为什么要有GC?

: GC是垃圾收集的意思(Gabage Collection,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

3、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的语句会执行吗?如果执行,什么时候被执行?

       答:会在return之前执行

4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

   答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方面有两种,分别是synchronized,waitnotify

wait():使一个线程处于等待状态,并且释放所持有的对象的lock

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

 

5、你用过那几种设计模式?请写出其中一种模式的代码

       答:单例设计模式

       public class Test {

   

        private Test() {

        }

   

        private static Test test;

   

        public static synchronized Test getTest(){

            if(test==null)

                test=new Test();

            return test;

        }

   

}

6、谈谈你对Spring的理解。

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

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

譬如,Class Programmer

{

  Computer computer = null;

  public void code()

  {

         //Computer computer = new IBMComputer();

         //Computer computer = beanfacotry.getComputer();

         computer.write();

  }

  public void setComputer(Computer computer)

  {

         this.computer = computer;

  }

}
另外两种方式都由依赖,第一个直接依赖于目标类,第二个把依赖转移到工厂上,第三个彻底与目标和工厂解耦了。在spring的配置文件中配置片段如下:

<bean id=”computer” class=”cn.interview.Computer”>

</bean>

 

<bean id=”programmer” class=”cn.interview.Programmer”>

  <property name=”computer”  ref=”computer”></property>

</bean>

3. Spring提供了对AOP技术的良好封装, AOP称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的代码,例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP。实现AOP功能采用的是代理技术,客户端程序不再调用目标,而调用代理类,代理类与目标类对外具有相同的方法声明,有两种方式可以实现相同的方法声明,一是实现相同的接口,二是作为目标的子类在,JDK中采用Proxy类产生动态代理的方式为某个接口生成实现类,如果要为某个类生成子类,则可以用CGLI B。在生成的代理类的方法中加入系统功能和调用目标类的相应方法,系统功能的代理以Advice对象进行提供,显然要创建出代理对象,至少需要目标类和Advice类。spring提供了这种支持,只需要在spring配置文件中配置这两个元素即可实现代理和aop功能,例如,

<bean id=”proxy” type=”org.spring.framework.aop.ProxyBeanFactory”>

  <property name=”target” ref=””></property>

  <property name=”advisor” ref=””></property>

 

</bean>

 

7、你在那些项目中使用过Spring,简述Spring在项目中的作用。

             

8、解析xml有哪些方法?

       :DOM,SAX,STAX

DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问

STAX:Streaming API for XML (StAX)

 

9、一个益智题,2个人,一个说实话,一个说谎话,有一个岔路口,2个人分别在一个路口上,让你问2个人一样的一个问题,来判断出哪条路通往说谎国,哪个通往真话国。

 

10、用arrayList,或者vector实现queue。

 

11、请写出SQL语句

       A字段m、n、x、y,其中 m、n为number 类型,x为字符类型:

       1) 创建表A,并且m 不能重复, n 初始值为 0, m、n、y不能为空

create table A

(

       m number unique not null,

       n number default 0 not null,

       x varchar2(20),

       y date not null

)

       2) 修改表A,把n的初始值改为1

       alter table A modify (n number default 1 );

       3) 查询表A中 m 大于 500 并且 y 为前一天的当前时间以前的所有数据

       select * from A where m>500 and y<sysdate-1

       4) 查询表A中 x 字段共有多少种情况,并输出条数大于200的情况的数据

       select count(n) from A group by x having  count(x)>20

       5) 查询表A中 x 为空并时间介于当前时间与前一天当前时间的所有数据

       select * from A where x is null and y between sysdate-1 and sysdate

       6) 往表A中插入一条数据,令 n 值为 3, x 值为 "xyz",y 值为2007 年 12月 5日 12时 02 分 12秒

       insert into A values (3,3,'xyz',to_date('2007-12-5 12:02:12','yyyy-MM-dd hh:mi:ss'));

       7) 删除表A中所有时间为整点的数据

       delete  from A where to_char(y,'mi')=0 and to_char(y,'ss')=0;

       8) 表B 与表A具有相同的数据结构,怎样把表A中的数据导入表B中。

       insert into B select * from A

 

12、几千万行记录的数据表,如何设计以保证查询更新效率最高。

      

13、写出 shell 命令。

       1) 动态显示一个文本文件的最后几行记录。

              tail 文件名 –要求的行数

       2) 统计一个文件的行数。

      

       3) 显示当前系统开放的端口

       nmap –PS localhost

       4) 删除文件名包含 "abc" 的所有文件

 

14、你知道哪几种通讯协议,你分别掌握程度如何。

      

15、你的职业规划。

 

16、你为这次笔试打分。

23、北京国联视讯信息技术股份有限公司

概念题

  1. 请简述JAVA类首次装入JVM时(即通过new调用创建时)的初始化顺序:(涉及元素:静态变量,静态代码块,构造函数)

JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。    

 先初始化父类的静态代码--->初始化子类的静态代码-->  (创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数

类只有在使用New调用创建的时候才会被JAVA类装载器装入 

3、创建类实例时,首先按照父子继承关系进行初始化

 4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法

 5、类消除时候,首先消除子类部分,再消除父类部分

 

  1. 请写出设计模式中单例(singleton)模式的原型

 

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

一般Singleton模式通常有几种种形式:

第一种形式:定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {

   private Singleton(){}

   //在自己内部定义自己一个实例,是不是很奇怪?

   //注意这是private 只供内部调用

   private static Singleton instance = new Singleton();

   //这里提供了一个供外部访问本class的静态方法,可以直接访问  

   public static Singleton getInstance() {

    return instance;   

     }

}

  1. 请说明cookie与session有何区别和联系(参考方面:时效性,存储位置,存储大小)

 

存储位置:Cookie 数据存放在客户的浏览器上,session数据放在服务器上

安全性:cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,session比较安全

性能:session会在一定时间内保存在服务器上,当访问增多时,会比较占用服务器资源,COOKIE相对对服务器的压力小,性能较好

存储大小:单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能是3K

 

  1. 请说明get与post的区别(参考方面:缓存特性,数据传输量等)

数据传输量:get数据的传输量较小,受URL长度限制,而post可以传输大量的数据,所以在上传文件只能用Post

安全性:get是不安全的,传输的时候数据会显示在URL上,post的所有操作

操作对用户来说都是不可见的

Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据

缓存问题:get方法提交数据,数据会被缓存在浏览器上,当其他人在访问的时候可以从历史记录中获取到数据,安全性降低,post提交会更安全

  1. 请列举jsp中的内置对象及作用

aplication :表示一个javax.Servlet.ServletContact对象,这有助于查找有关servlet实例的初始化参数

session:表示一个请求的javax.servlet.http.HttpSession对象,Session可以存储用户的状态信息

 request:表示HTTPServletRquest对象,它包含了有关浏览器请求的信息

 response:表示HTTPServletRsponse对象,它提供了几个用于设置浏览器的相应的方法

 out:javax.jsp.JspWriter的一个实例,并提供了几个方法是你能够用于向浏览器会送输出结果

page:表示从该页面产生的一个servlet实例

 pageContext :表示一个javax.Servlet.PageContact对象,它是用于方便存取各种范围的名字空间。

config:表示一个javax.Servlet.ServletConfig对象。该对象用于存储servlet实例的初始化参数

  1. 请列举3~5个开源项目并说明其特性或功能(ssh除外)

A:Apache log4j,实现日志的分级记录管理;(此为样例)

B:DWR Ajax框架

C:Validator 验证框架                                                             

D:  WebWorkJava开源Web开发框架】

E:   EclipseJava开源IDE

 

  1. dropshow 代表什么意思?

 

  1. 验证控件:验证时间某个时间段

使用Validator进行验证

 

  1. 客户端控件和服务器控件的区别

 

 

  1. 简述三层开发

MVC是Model-View-Controller的简写。

"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现)

"View" 是应用的表示面(由JSP页面产生)

"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用

 

  1. 存储过程的原理?

存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可

在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。

  1. 什么是AJAX?

Ajax是异步JavaScript和XML,有机地利用了一系列相关的技术。

Ajax的核心是以JavaScript,css,DOM,xml运用XMLHttpRequest对象进行客户端与服务器间的数据传输。

实现局部刷新功能和将状态保存在客户端,从而常用资源可以有效被缓存和利用,可以由客户端处理一些服务器端处理的功能。

 

 

  1. MVC的交互流程?

MVC是Model-View-Controller的简写 M 模型 V 视图 C 控制器
模型封装了对数据和对数据的操作,是实际进行数据处理和计算的地方。
视图是应用和用户之间的接口,它负责将应用显现给用户和显示模型的状态。
控制器负责视图和模型之间的交互。

V发出请求-》经由控制器处理-》模型层-》反馈给v

 

  1. 值类型和引用类型的区别?

1、值类型通常被分配在栈上,它的变量直接包含变量的实例,使用效率比较高。

2、引用类型分配在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例。

3、值类型继承自ValueType(注意:而System.ValueType又继承自System.Object);而引用类型继承自System.Object。

4、值类型变量包含其实例数据,每个变量保存了其本身的数据拷贝(副本),因此在默认情况下,值类型的参数传递不会影响参数本身;而引用类型变量保存了其数据的引用地址,因此以引用方式进行参数传递时会影响到参数本身,因为两个变量会引用了内存中的同一块地址。

5、值类型有两种表示:装箱与拆箱;引用类型只有装箱一种形式。我会在下节以专门的篇幅来深入讨论这个话题。

6、典型的值类型为:struct,enum以及大量的内置值类型;而能称为类的都可以说是引用类型。

7、值类型的内存不由GC(垃圾回收,Gabage Collection)控制,作用域结束时,值类型会自行释放,减少了托管堆的压力,因此具有性能上的优势。例如,通常struct比class更高效;而引用类型的内存回收,由GC来完成,微软甚至建议用户最好不要自行释放内存。

8、值类型是密封的(sealed),因此值类型不能作为其他任何类型的基类,但是可以单继承或者多继承接口;而引用类型一般都有继承性。

9、值类型不具有多态性;而引用类型有多态性。

10、值类型变量不可为null值,值类型都会自行初始化为0值;而引用类型变量默认情况下,创建为null值,表示没有指向任何托管堆的引用地址。对值为null的引用类型的任何操作,都会抛出NullReferenceException异常。

11、值类型有两种状态:装箱和未装箱,运行库提供了所有值类型的已装箱形式;而引用类型通常只有一种形式:装箱。

 

 

  1. 什么是设计模式?

Factory(工厂模式)、Singleton(单例模式)、Proxy(代理模式)等,统称为设计模式,在java中有23中设计模式,可以简便开发便于理解

  1. 简单工厂和抽象工厂的区别?

 

  1. 什么是webservice?

Web Service 是一种新的web应用程序分支,他们是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。 Web Service是一种应用程序,它可以使用标准的互联网协议,像超文本传输协议(HTTP)和XML,将功能纲领性地体现在互联网和企业内部网上。可将Web服务视作Web上的组件编程。

特点:开放性,跨平台性,开放性

 

 

 

辨析题

  1. 请简要说明一下编码的用途,以及处理字符编码的一般思路或原则:

ASCII—美国信息交换标准码,用来处理英文(大小写) ,数字等字符数据:(此为样例)

ISO-8859-1—是单字节编码,ISO-8859-1编码是一个8位的容器。

GB2312—基于区位码设计的,可以得到某个拼音在一级汉字区位中的范围

GBK—是GB2312编码的超集,可以快速定位

Unicode—Unicode(统一码、万国码、单一码、标准万国码)是业界的一种标准,是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案

UTF-8—在UTF-8的编码的传输过程中即使丢掉一个字节,根据编码规律也很容易定位丢掉的位置,不会影响到其他字符。

 

 

处理字符编码的一般思路或原则:

Java程序与其他媒介交互时字符和字节的转换过程,如果这些转换过程中容易产生乱码。解决Java乱码问题的关键在于在字节与字符的转换过程中,你必须知道原来字节或转换后的字节的编码方式,转换时采用的编码必须与这个编码方式保持一致,修改一个属性charset尝试着解决

  1. 判断类Sub继承Base,即 Sub extends Base

A  Sub instanceof Base  选择:真  假

B  Base instanceof Sub  选择:真  假        

C  Sub.Class()==base.Class() 选择: 真 假                                        

   

  1. 比较:

 

是否支持基本类型

 

自动改变大小

速度比较

同步支持

 

 

 

 

 

 

Vector

支持

 

翻倍

较快

支持

ArrayList

支持

 

只增加50%

不支持

 

 

编程题

 

  1. 在不定义新变量的前提下,实现两个变量数据的交互,例如:int x=1, y=2;

 

  1. 编写代码排序以下数字(按照从小到大的次序):1,6,125,25,56,12,36,75,96,250

         Public void sort(){

Int[] array={1,6,125,25,56,12,36,75,96,250};

for (int j=0;j< array.length;j++){

                System.out.print(array [j]+"  ");

         }

 

 

 

}

 

  1. 请补充完整以下代码(测试,编码思路的严密性)

         Public class Book{

            Private int id;

                    Private String name;

                     Private StringBuffer description;

                     Public Book(){super();}

                     Public int getId(){return id;}

                     Public  String getName(return this.name;)

                     Public StringBuffer getDescription(return this.description)

                     Public Boolean equals(Object o){//完成此函数,条件当其所有对应属性都相等时才返回为真;

 

}

}

  1. 编写一段程序片段将一个集合List<String> list中的数据,数量不定,输出到一个每行3列的HTML表格中,如果当前行数不足3列,则以空格补齐本行即可

 

 

 

数据库题

 

  1. 表结构如下表假设word列有重复数据,要求写一条SQL语句去除重复数据(即保留任意一条重复数据)

序号

列名

数据类型

1

Id

Int

2

Word

Nvarchar(50)

select  distinct表名.Id,表名.Word       from  表名 where 条件

 

  1. 关于数据库查询方面的题

建用户信息表:

UserInfo

字段:

UserID 主键 自增长; UserName; UserSex; UserDesc

请写出针对用户信息进行增删改查的存储过程.

 

 

 

 

建立WEB应用程序, 使用用户空间Add.ascx List.ascx, 并开发简单用户表单的提交页面 UserInfoLIst.aspx和 UserInfoEdit.aspx 数据查看页面创建左右分框架页面, 左侧页面显示 [增加用户] 和 [用户列表]等链接, 右侧则显示链接对应页面. 并使用AJAX打开右侧页面.

 

使用之前写的存储过程提取和修改数据.

 

 

 

24、北京华胜鸣天科技有限公司

第一题:(过程可以写在后面)

学校的毕业话剧演出由四个小美女来出演小红帽、美羊羊、女巫和公主的角色。没人在排练时的角色与演出时的角色不同。

 

排练时出演小红帽的人会撒谎,通过如下消息,请判断四人在演出和排练时分别出演什么角色。

 

梅:“排练时,兰的角色是演出时竹的角色。”

兰:“菊排练时扮演的是美羊羊。”

竹:“演出时我演公主。”

菊:“兰演出时扮演的是美羊羊。”

 

第二题: 解数独题

(数独是九宫格(即3格宽x3格高) ) 正方形状,每一格又细分为一个九宫格,在没一个小九宫格中,分别填上1~9个数字,让每一个大九宫格没一列,没一行的数字都不重复。

 

 

8

 

 

1

7

4

 

 

 

 

6

 

9

 

 

 

 

 

 

 

4

8

 

3

 

 

 

 

3

 

 

8

5

 

 

 

 

 

2

7

5

6

 

 

 

 

9

 

 

6

 

 

 

 

6

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

1

 1

 

 

 

 

 

8

3

 

 

1、Which line contains a constructor in this class definition?

public class Counter{//(1)

 int current ,step;

public Counter(int startVaue,int stepValue){//(2)

set(startValue);

setStepValue(steValue);

}

public int get(){return current;}//(3)

public void set(int value){current==value;}//(4)

public void setStepValue(int stepValue){step==stepValue;}//(5)

}

1)Code marked with (1) is a constructor

2)Code marked with (2) is a constructor

3)Code marked with (3) is a constructor

4)Code marked with (4) is a constructor

5)Code marked with (5) is a constructor

 

2、An instance member...

1)is also called a static member

2)is always a variable

3)is never a method

4)belongs to a single instance,not to the class as a whole

5)always represents an operation

 

3、Given the following class,which statements can be inserted at position I without causing the code to fail compilation?

public class Q6db8{

int a ;

int b=0;

static int c;

public void m(){

int d;

int e=0;

//Position 1

}

}

1)a++

2)b++

3)c++

4)d++

5)e++

 

  1. What is wrong with the following code?

Class MyException extends Exception{}

Public class qb4ab{

Public void foo(){

Try{

   Bar();

}finally{

   Baz();

}catch(MyException e){

}

Public void bar() throws MyException{

Throw new Exception();

}

 

Public void baz() throws RuntimeException{

Throw new RuntimeException();

}

}

  1. ) Since the method foo() does not catch the exception generated by the method baz(), it must declare the RuntimeException in its throws clause.
  2. ) A the try block cannot be followed by both a catch and  a finally block.
  3. ) An empty catch block is not allowed.
  4. ) A catch block cannot follow a finally block.
  5. ) A finally block must always follow one or more catch blocks.

 

5、What will happen when you attempt  to compile  and run the following program by passing the Test class to the Java  interpreter?

Class Test{

Public static void main{

System.out.print(“hello”);

}

}

Select the one right answer.

  1. the program does not compile because main() is not  defined correctly.
  2. The program compiles but when you try to run the interpreter complies that it cannot find the main() method it needs to run.

C) the program compiles but you cannot run it because the class is not declared as public .

D) the program compiles and runs without an error but does not display anything in the standard output .

E) the program compiles and displays “hello ” in the standard output when you in run it.

 

6、Give those code snippets:

Boolean  b1=new Boolean(true);

Boolean  b2=new Boolean(true);

Which expressions are legal Java expressions that return true?

Select all valid answer.

  1. b1=b2
  2. b1.equals(b2)

C)  b1&b2

D)  b1|b2

E)  b1&&b2

F)  b1||b2

 

7、Given this code snippet:

try{

tryThis();

return;

}catch(IOException x1){

System.out.println("exception 1");

return ;

}catch(Exception x2){

System.out.println("exception 2");

return ;

}finally{

System.out.println("finally");

}

What will appear in the standard  output if try This() throws a NumberFormatException?

Select the one right answer.

a)Nothing

b)"exception 1",followed by "finally"

c)"exception 2",followed by "finally"

d)"exception 1"

e)"exception 2"

选择: C

 

8、Giver these class definitions;

class Superclass{}

class Subclass1 extends Superclass{}

class Subclass2 extends Superclass{}

and these objects;

Superclass a =new Superclass();

Subclass1 b=new Subclass1();

Subclass2 c=new Subclass2();

which of the following explains the result of the statement;

b=(Subclass1)c;

Selected  the one  right answer;

a)Illegal at compile time

b)Legal at compile time but possibly illegal at runtime

c)Definitely legal at runtime

 

9、简述以下代码是在做什么事情?

Public static javax.ejb.EJBHome getEJBHome(String JNDIName) throws NameNotFoundException,NamingException

{

java.util.Hashtable env=new java.util.Hashtable(1);

env.put(javax.naming.context.INITIAI_CONTEXT_FACTORY,”com.kivasoft.eb.jndi.GDSInitContextFactory”);

Javax.naming.Context initContext=new javax.naming.InitalContext(env);

If(initContext==null){

   Throw new RuntimeException(“getEJBHome could’t retrieve initial context ”);

return(javax.ejb.EJBHome)initContext.lookup(JNDIName);

}

 

10: 请从空白处填写代码,满足以下功能:

A)  从请求中得到用户名和口令(请求通过web浏览器中的HTML页面提交, 页面中用户名对象名为userName, 口令对象名为 password)

B)  如果用户名为”admin” , 口令为 password ,则讲登陆成功,将页面转到 loginSuccess.jsp页面,并在session 存放用户名(username)和密码 (password)

C(  如果用户名和空灵为其他值,转到error.jsp

Public class TestServlet extends HttpServlet

{

   Public void service(HttpServletRequest request,HttpServletResponse resopnse) throws ServletException,IOException

{

     //Include following lins in all servlet......

     Try{

 

         //请在此添写代码 

         If(userName.equals(“admin”) && password.equals(“password”)){

          request.getsession..setAttribute("username",admin);

          request.getsession..setAttribute("password",password);

 

          Request.sendRedirect(“loginSuccess.jsp”);

         }else{

          Request.sendRedirect(“error.jsp”);

         }

 

     }catch(Exception e){

     }

}

}

25、典道互联面试题

 

典道的笔试分A-B卷,题型有:

1.选择题30道(每道2分 共60分)

2.代码阅读题4道(每道5分 共20分)

3.程序逻辑题2道(每道10分 共20分)

 

不管是A-B卷,考察的范围都是基础知识,这个是和几个做B卷的同学那了解到的,主要的考点如下:

考点名称

考试频率

难易度

备注

 

数组

 

 

值传递与址传递

 

 

Main函数

 

 

线程

 

 

Swing与awt

 

 

Ascii码

请务必记住常用ascii码,代码题都有考

 

运算符优先级

去网上百度一下

 

Oop思想

 

 

方法重载与重写

 

 

 

 

方法与类的命名规则

 

 

逻辑思维

 

 

 

其他的记得不是很清楚了,不过不会超过基础知识这个范围,但光靠书(accp6.0)上那些还不够,建议找些参考书学习一下,越基础越好。

 

以下是A卷代码阅读题

 

 

  1. 建一个数组,顺序输出10位数,然后把这10位数再倒序输出

public class Test {

public static void main(String[] args) {

  int[] arr=new int[]{1,2,3,4,5,6,7,8,9,10}; 

  System.out.println("-------顺序输出------");

    for (int i = 0; i < arr.length; i++) {

    System.out.print(arr[i]+",");

  }

    System.out.println();

    System.out.println("-------倒叙输出------");

    for (int j = arr.length-1; j >=0 ; j--) {

    System.out.print(arr[j]+",");

  }

}

  1. 考的是方法重载,它是将两个方法的参数顺序颠倒了一下,看题的时候要注意。

3.

public class Test5 {

   public static void main(String[]args){

      int[] arr=new int[]{1,2,3,4,5,6,7,8};

     

      a(arr);

      b(arr);

      a(arr);

     

   }

  

  

   static void a(int arr[]){

      for(int temp:arr){

         System.out.println(temp);

      }

   }

  

   static void b(int arr[]){

      for(int i=0;i<arr.length;i++){

         arr[i]*=i;

      }

   }

}

 

输出结果是:56

 

 

以下是A卷手写代码题:

  1. 请用1234组成N数值不重复个十百位都不重复3位数, 一共有几个? 分别是什么?

共有:24

分别是:123,124,132,134,142,143,213,214,231,234,241,243,312,314,321,324,341,342,412,413,421,423,431,432,

参考答案:

Int count=0;

For(int i=1;i<=4;i++){

 

   For(int j=1;j<=4;j++){

 

   For(int k=1;k<=4;k++){

     

      If(i!=j&&i!=k&&j!=k){

         Count++;

         System.out.println(i*100+j*10+k);

      }

 

}

}

}

 

一共有24个,公式:4*3*2=24,具体数学公式请见排列算法。

 

 

  1. 查询子串在父串中出现的次数:

 

 

参考答案:

 

设:str1为父串,str2为字串,则:

 

 

public class Test6 {

   public static void main(String[]args){

      String str1="hdsajkfhuisadhifnokfasdfdasdoksdfsdsfsok";

      String str2="ok";

      String temp="";

      int count=0;

     

      for(temp=str1;temp!=null&&str2.length()<=str1.length();){

         if(str1.indexOf(str2)==0){

            System.out.println(str1.indexOf(str2));

            count++;

         }

         str1=str1.substring(1);

      }

     

      System.out.println("共出现了:"+count+"");

     

     

     

     

   }

}

 

 

以下是B卷手写代码题:

 

  1. 如果有“123空格abc空格zzz空格”,求数字、英文字符、空格在这个字符串中出现的次数:

 

参考答案:

 

 

public class Test {

   public static void main(String[]args){

     

      int strCount=0;

      int numberCount=0;

      int nulCount=0;

     

      String str="123abc a s d A Z";

     

      char[]arr=str.toCharArray();

     

      for(int i=0;i<arr.length;i++){

        

         int temp=(int)arr[i];

         if(temp>=65&&temp<=122){

            strCount++;

         }

        

         if(temp>=49&&temp<=57){

            numberCount++;

         }

        

         if(temp==32){

            nulCount++;

         }

        

      }

     

      System.out.println(strCount);

      System.out.println(numberCount);

      System.out.println(nulCount);

     

     

   }

}

 

  1. 还是1234组成3位数的,上面有答案,我就不赘述了。

 

写在最后的:请注意,参考答案只是个人思路解题,可能与考官所想不相符,有时也达不到预期效果,如果你有自己的见解,那么最好用你自己的代码写出来

 

 

26、国电网通

1.spring的通知有哪些

      答:前置通知、后置通知、环绕通知和异常通知

 

2.spring里bean的作用域

      答:1、singleton作用域

          2、prototype

          3、request

          4、session

          5、global session

 

 

3.将一个文件里的内容逆序写入另一个文本文件

       答:文本文件直接用IO流读取写入!read方法读…write方法写,用FileReader  FileWriter的实例对象

4.jsp实现分页

       答:首先要定义四个变量:

int pageSize:每页显示多少条记录

int pageNow:希望显示第几页

int pageCount:一共有多少页

int rowCount:一共有多少条记录

说明:

pageSize是指定的 pageNow是用户选择的

rowCount是计算出来的 该计算式为

if(rowCount%pageSize==0){

pageCount=rowCount/pageSize;

}else{

pageCount=rowCount/pageSize+1;

}

(技巧:

数据库插入:

insert into 表名(字段1,2,。。。)select 字段1,2,...from 表名

)

查询语句

select top pageSize字段名列表from表名where id not in

(select top pageSize*(pageNow-1)id from 表名)

以我们前面的users表为例,显示第二页,该查询语句就是:

select top 3 * from users where userId not in(select top 3 userId from users)

(select top 3 userId from users):选出这个表的前三条 前面再选三条

 

<h1>用户信息列表</h1>

<%

//定义四个分页会用到的变量

int pageSize=3;

int pageNow=1;//默认显示第一页

int rowCount=0;//该值从数据库中查询

int pageCount=0;//该值是通过pageSize和rowCount

//接受用户希望显示的页数(pageNow)

String s_pageNow=request.getParameter("pageNow");

if(s_pageNow!=null){

//接收到了pageNow

pageNow=Integer.parseInt(s_pageNow);

}

//查询得到rowCount

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

Connection ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;dataBaseName=System","sa","");

Statement sm=ct.createStatement();

ResultSet rs=sm.exeuteQuery("select count(*) form users ");

if(rs.next()){

rowCount=rs.getInt(1);

}

//计算pageCount

if(rowCount%pageSize==0){

pageCount=rowCount/pageSize;

}else{

pageCount=rowCount/pageSize+1;

}

//查询出需要显示的记录

rs=sm.exeuteQuery("select top "+pageSize

+" * from users where userId not in(select top "

+pageSize*(pageNow-1)+" userId from users) ");

%>

//显示

 

<table border="1">

<tr><td>用户ID</td><td>用户名字</td><td>密码</td><td>电邮</td><td>级别</td></tr>

<%

while(rs.next()){

%>

 

<tr><td><%=rs.getInt(1)%></td><td><%=rs.getString(2)%></td>

<td><%=rs.getString(3)%></td><td><%=rs.getString(4)%></td><td><%=rs.getInt(5)%></td></tr>

<%}%>

</table>

<%

//上一页

if(pageNow!=1){

out.println("<a href=wel.jsp?pageNow="+(pageNow-1)+">上一页</a>");

}

//显示超链接

for(int i=1;i<=pageCount;i++){

out.println("<a href=wel.jsp?pageNow="+i+">["+i+"]</a>");

}

//下一页

if(pageNow!=pageCount){

out.println("<a href=wel.jsp?pageNow="+(pageNow+1)+">下一页</a>");

}

%>

 

5.编一个java程序实现数据库缓冲池

    答:a.增加

String s1="insert into tableNames (id,name,password) values(myseq.nextval,?,?);"

Class.forName(driver);

Connection conn = DriverManager.getConnection(url,dbUser,dbPwd);

PreparedStatement prepStmt  = conn.prepareStatement(s1);

prepStmt.setString(1,name);

prepStmt.setString(2,password);

ResultSet rs=stmt.executeUpdate();

b、删除

String s2="delete from tbNames where name=?";

Class.forName(driver);

Connection conn = DriverManager.getConnection(url,dbUser,dbPwd);

PreparedStatement prepStmt  = conn.prepareStatement(s2);

prepStmt.setString(1,name);

ResultSet rs=stmt.executeUpdate();

c、修改

String s3=“update tbNames set name=? where id=?”;

Class.forName(driver);

Connection conn = DriverManager.getConnection(url,dbUser,dbPwd);

PreparedStatement prepStmt  = conn.prepareStatement(s3);

prepStmt.setString(1,name);

prepStmt.setString(2,id);

ResultSet rs=stmt.executeUpdate();

d、查询

String s4="select id,name,password from tbNames";

Class.forName(driver);

Connection conn = DriverManager.getConnection(url,dbUser,dbPwd);

Statement stmt=conn.createStatement();

ResultSet rs = stmt.executeQuery(s4);

while(rs.next){

int id=rs.getInt(1);

String name = rs.getString(2);

String pwd=rs.getString(3);

System.out.println(id+name+pwd);                     }

 

 

6.如何控制表和数据库索引提高数据库性能

       答:1.使用索引

           2.分表(横向或纵向)

           3.网络环境,服务器配置,数据库服务器,数据库对象,sql语句

7.jdbc查询的步骤

     答:七个步骤

             1、加载JDBC驱动程序:  

             2、提供JDBC连接的URL

             3、创建数据库的连接 

             4、创建一个Statement   

             5、执行SQL语句 

             6、处理结果       两种情况:   

                 1、执行更新返回的是本次操作影响到的记录数。   

                 2、执行查询返回的结果是一个ResultSet对象。  

             7、关闭JDBC对象   

8.statement和preparedStatement的区别

        答:Stataement 速度比PrepardStatement慢

            PreparedStatement 是预编译,对SQL进行优化以后操作,而且批量的插入速度原高于Statement.

            Statement 的创建的速度很慢,要对SQL语句优化,因此效率低。常用选择PreparedStatement.

9.描述一下JVM加载class文件的原理机制

        答:在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备、解析

            装载:查找和导入类或接口的二进制数据;

            链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;

            校验:检查导入类或接口的二进制数据的正确性;

            准备:给类的静态变量分配并初始化存储空间;

            解析:将符号引用转成直接引用;

            初始化:激活类的静态变量,初始化Java代码和静态Java代码块

27、东奥时代和东方时代

  1. 实现了排序的集合类是HashMap
  2. 关于释放锁的顺序与加锁的反序一致
  3. 字节流和字符流的区别每次处理的字节数不同
  4. 进栈序列为 1 2 3 4,假设进栈和出栈可以同时交替进行,则可能的出栈顺序为:

5.final 的用法(简单)

       A.final修饰的变量一旦被赋值,将等同于一个常量

       B.

       C.

       D.

6.在com.a包下有个类,如果希望com.b包下的所有类都可以访问它,则修饰符必须public

7..算法的空间复杂度指什么?

       A.算法本身所占用的内存

       B.   

       C.

       D.算法在执行过程中所占用的内存

8.如果一个集合采用链表存储结构,那它在内存中

       A.必须是连续的

9.代码:父子类,声明父类对象,指向子类引用,调用同名方法,打印什么?(简单)

       A. 父类的

写出你所知道的Java框架?

      毛豆1  毛豆2   struts    hibernate   斯普润英   jquery    jso  ajx  

 

 

写出你常使用的Java类库,包括JDK自带和第三方的类库?

      什么意思?

.写出你知道的Javascript框架?CSS框架?

     .....

.除了Java,你还了解那些技术,掌握到那种程度?

     .net    仅仅是知道

写出你常去的技术网站,一般你遇到问题,都去哪找解决方案?

   百度,一般有问题寻他千百度

.如果你的技术经理,经常要求你在细节上配合进行修改,你会怎么做?

     公司的利益大于一切

.在日常的开发中,你会采取哪些措施、用什么工具加快开发速度和提高开发质量?

        我会每天做出租车来公司,不迟到, 以便加快开发速度

接收用户输入,TDD is a Java technology ,编写程序将字符串反转,得到如下结果:technology java a is TDD,并写出单元测试,测试得到的结果是否和预期一致。

 

 

1.你所知道框架优缺点 

      简单,加快了开发速度。

2你所知道设计模式干什么用 用在什么场合。

            不知道、

3.单例模式改错

       单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称   为单例类的特殊类

4.死锁的几种情况

         2

5.hashMap和Hashtable区别

        首字母大小写不一样

6.String 和StringBuffer和Stringbuileder的区别

     String字符串字符串常量,是不可更改的常量

     StringBuffer是字符串变量,它的对象是可以扩充和修改的。

      Stringbuileder 一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步

 

7.ArrayList,Vector区别

          Vector 类在 java 中可以实现自动增长的对象数组;

            ArrayList就是传说中的动态数组

 

8.垃圾收集器

       就是把垃圾收集起来

9.什么情况下调用doGet()和doPost()?

           doGet,doPost 区别是什么,什么时候要用doGet,什么时候用doPost 1.get 是获取 post 是发  2.get post 都是提交数据的方式。 get 方式传递数据时,参数在浏览器的地址可以看得到。适合少量数据的传输, 方便 post传输的数据数量不限,并且浏览器地址看不到

 

10.oracle改变试图是否改变基表  视图是否赞空间

        一般视图基本不占用空间但物化视图是占用空间的,修改视图对基表没影响。

 

11.JVM加载class文件的原理机制

    Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备、解析
    装载:查找和导入类或接口的二进制数据;
    链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
    校验:检查导入类或接口的二进制数据的正确性;
         准备:给类的静态变量分配并初始化存储空间;
         解析:将符号引用转成直接引用;
初始化:激活类的静态变量,初始化Java代码和静态Java代码块

 

12.heap和stack的区别

 

   heapstack有什么区别 栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素

 

28、爱如生数字

1 flex 是什么

答:flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison语法分析器生成器 一起使用。

2 xml 是什么 解析时用到的包有哪些

答:利用以下工具都可以实现对xml 文件的解析 ,dom4j, jdom, SAX,DOM
3 spring 工作流程  核心原理

答:Spring的核心就在于他的IOC(控制反转)和AOP(面向切面编程),IOC就是用来管理所有的业务对象,AOP也就是可以在调用的方法前后可以附加另外的行为

4 介绍 struts2

答:Struts 2是Struts的下一代产品。是在 struts 和WebWork的技术基础上进行了合并,全新的Struts 2框架。

5 连接池 工作原理

答:连接池的基本原理是,先初始化一定的数据库连接对象,并且把这些连接保存在连接池中。当程序需要访问数据库的时候,从连接池中取出一个连接,数据库操作结束后,再把这个用完的连接重新放回连接池

6  Collection 和 Collections的区别

答:Collection是集合类的上级接口,继承与他的接口主要有Set List.
Collections
是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

7 介绍一下 面向对象

答:面向对象是一种编程思想

8 接口 与 抽象类

答:抽象类里面可以有非抽象方法,但接口里只能有抽象方法

9 EJB与JAVA BEAN的区别

答:两种不同级别的东西,JAVA BEAN是简单的数据封装,ejb分实体bean,回话bean,消息驱动bean。

10 Nested Class 与 inner class 区别

答:使用Static定义的Class就是外部类,可以通过外部类. 内部类直接访问
Inner Class是不能被外部访问的,只能通过外部类的实例再找到内部类实例。

11静态变量和实例变量的区别

答:静态的可以直接用类名点变量就可以直接调用,非静态的在别的类中只能先实例化,再用对象点变量就可以调用;

12 String、StringBuffer、StringBuilder的区别

答:String 是字符串类 最常用于简单的字符串操作
StringBuffer 是字符串缓冲。 适用于复杂的字符串增删改操作。
StringBuilder 是与 StringBuffer 兼容的 API 简化。 该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。

13 一个类被final修饰,表示什么?一个变量被final修饰,表示什么?

答:可以修饰成员变量。类变量。局部变量。类。方法。
其中final修饰的变量成为有名常量。局部变量只有final才可以修饰。
它以为这不能扩充子类。或改变变量的值。它修饰的类又叫做最终类

14 jsp中forward和redicte的区别?

答:forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

15 线程/同步实现的方法有几种?怎样实现?

答:实现线程有两种 继承Thread类或者实现Runnable接口... 实现同步也有两种,一种是用同步方法,一种是用同步块.. 同步方法就是在方法返回类型后面加上synchronized

16 描述你对设计模式的理解,列举你熟悉的几种设计,并简单描述

答:一、Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点

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

    三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。

    四、Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示。

    五、Prototype,原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建

17 你最近阅读了什么技术书籍?请描述其主要思想?你对其思想有什么见解?

答:《汉译世界学术名著丛书》是商务印书馆出版发行的翻译世界各国学术名著,范围涵盖哲学、历史、政治、经济、军事、自然科学、人文科学等领域。该丛书收录并重印了一部分该出版社于民国时期出版的曾经影响过中国的译作。由于该丛书所收录著作皆堪称经典,因此在各界,特别是学界颇受好评。丛书自1981年起结辑出版,迄今已有十二辑近500种,实为我国文化出版的心血之作。这套丛书将国外丰富精深的学术思想引入中国,开阔了几代读者的视野,滋养了几代学人的情操,被陈原赞许为“迄今为止,人类已经达到过的精神世界。”

18 请描述以下几个开源项目的用途spring ,hibernate

答:struts:简单点说就是让你写的程序层次分明了
hibernate:提供了完全面向对象的数据库操作
spring:在这里我们可以认为它是为了程序以后可以更好的扩展灵活,或者说它是为了更好的管理对象的理合适一些

19 顺序输入1-100  3的倍数用T代替,5的倍数用F代替,既是3又是5的倍数输出TF

 

 


For(int i =1 ;i<=100;i++){

If(i%3==0&&i%5==0){

I = TF;

}else if(i%3==0){

I=T;

}else if(i%5==0){

I=F;

}

}

 

 

20 求两个正整数的最大公约数

Public int Y(int i,int j){

Int temp;

If(i<j){

For(int z =i;z >=1; z--){

If(i%z==0&&i%j==0){

Return z;

}

}

}else if(i>j){

For(int z =j;z >=1; z--){

If(i%z==0&&i%j==0){

Return z;

}

}

 

}else{

Return j;

}

}

21 为什么项目较大,资源较丰富时使用EJB,而不使用Hibernate?

答:Hibernate只能适用于中小型项目用在大项目上容易产生问题,而EJB则稳定性高

29、东软面试题

1 、java中的动态include  和  静态include的写法和区别

答:<%@ include file="index.jsp"%>  (静态)主要是对静态页面的引入 不会检查所包含文件的变化
 <jsp:include page="index.jsp" flush="true"/> (动态)主要是对动态的页面的引入,它总会检查所引入页面的变化

2、java的静态变量(不为null)可能会被垃圾回收吗?为什么?

答:静态变量 程序刚开始运行创建 直到程序结束才回收的

3、请阐述服务器与客户端之间维护一个会话的过程

答:没找到!

4、请提供一个思路,限制某个请求的会话个数

答:没找到!

5、如何维护代码的健壮性

答:降低系统的耦合度,尽量采用面向接口编程,遵守SRP(单一职能原则)、OCP开闭原则、依赖倒置等原则

6、一个表里的某个字段有重复的值  如何显示这些重复的值

答:--:查找stuid,stuname重复的记录
select stuid,stuname from stuinfo
group by stuid,stuname
having(count(*))>1

 

7、hibernate对象有几种状态,针对这几种状态应做何操作

(1)瞬态:

 表示该实体对象在内存中是自由存在的,也就是说与数据库中的数据没有任何的关联即,该实体从未与任何持久化上下文联系过 ,没有持久化标识(相当与主键)。

 瞬态实体的特征有:         

与数据库中的记录没有任何关联,也就是没有与其相关联的数据库记录 与Session没有任何关系,也就是没有通过Session对象的   实例对其进行任何持久化的操作。

 (2)持久态:

    指该实体对象处于Hibernate框架所管理的状态,也就是说这个实体对象是与Session对象的实例相关的。处于持久态的实体对象 的最大特征是对其所作的任何变更操作都将被Hibernate持久化到数据库中。

 处于持久态的对象具有的特征为:                           

每个持久态对象都于一个Session对象关联             

处于持久态的对象是于数据库中的记录相关联的             

Hibernate会根据持久态对象的属性的变化而改变数据库中的相应记录 

(3)游离态:

 处于持久态的实体对象,当他不再与Session对象关联时,这个对象就变成了游离态。

 游离态对象的特征有:           

游离态对象一定是由持久态对象转换而来           

游离态实体不再于Session关联           

游离态实体对象与数据库中的数据没有直接联系,主要表现在对其进行的修改不再影响到数据库中的数据           

游离态实体对象在数据库中有相应的数据记录(如果该记录没有被删除)

30、北京和信安科软件有限公司

===这是笔试题

1.abstract class和接口的区别

抽象类:可以没有抽象方法;抽象类的属性可以是私有的。

 

2.编码转换,怎样实现将ISO-8859-1编码的字符串转换为GBK编码的字符串

       String s=new String(istr.getBytes(),"GBK")

3.String s = new String("xyz");创建了几个String Object?

 两个

 

4.String and StringBuffer的区别?

   String: Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

 

   StringBuffer 线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

   可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

 

5.说出ArrayList,Vector, LinkedList的存储性能和特性

 

 

 

6.List, Set, Map的存储特性,有什么区别

 

 

 

7.int 和 Integer 有什么区别?

       int是一般类型 int 必须声明

       Integer是引用类型,是一个类

 

8.final, finally, finalize的区别?

       final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被     声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须            在声明时给定初值,而在以后的

       引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

       finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,  那么相匹配的 catch 子句就会执行,然后             控制就会进入 finally 块(如果有的话)。

       finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是          由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖           finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

 

 

9.Servlet的生命周期是什么?

加载和实例化>初始化>请求处理>服务终止 

 

10.request和redirect的区别?

       request:请求地址,等待响应,地址栏不会改变

       reponse:重新定向到另外的地址,地址栏发生改变

 

11.JSP的内置对象及方法

 

12.什么情况下调用doGet()和doPost()?

get请求 响应doGet方法

post请求 响应doPost方法

 

13.面向对象的特性(抽象、继承、封装、多态)

 

14.常见的WEB服务器有哪些

 

15.j2ee常用的设计模式?说明工厂模式

 

16.BS与CS的联系与区别

 

17.写一个SQL表联接查询

(重复)

 

18.写出存取COOKIE的代码

 

--下面是面试时候问我的

1.HashMap和Hashtable的区别、、

       ①hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和       containsKey()方法。

       ②hashTable同步的,而HashMap是非同步的,效率上逼hashTable要高。

       ③hashMap允许空键值,而hashTable不允许。

 

 

2.Java中的异常处理机制的简单原理和应用

 

3.运行时异常和一般异常(解释并举例)

一般异常:也成checked异常,不处理会在编译时报错

运行时异常:在运行时报错

4.说明SSH

 

5.解释多线程及应用

 

6.同步和异步的区别(用在哪里)

 

7.解释MVC

 

8.了解一下存储过程

 

9.ORACLE中的函数

to_date to_char nvl

10.JSP的内置对象

application exception out config pageContext page request response session

 

 

猜你喜欢

转载自blog.csdn.net/qq_40001362/article/details/81904846