欢迎来到专业的万有范文网平台! 工作总结 工作计划 心得体会 思想汇报 述职报告 教案设计 整改报告 事迹材料
当前位置:首页 > 范文大全 > 公文范文 > 正文

java框架面试题3篇(全文完整)

时间:2023-02-24 15:25:09 浏览量:

java框架面试题1  1、什么是Java集合API  Java集合框架API是用来表示和操作集合的统一框架,它包含接口、实现类、以及帮助程序员完成一些编程的算法。简言之,API在上层完成以下几件事下面是小编为大家整理的java框架面试题3篇(全文完整),供大家参考。

java框架面试题3篇(全文完整)

java框架面试题1

  1、 什么是Java集合API

  Java集合框架API是用来表示和操作集合的统一框架,它包含接口、实现类、以及帮助程序员完成一些编程的算法。简言之,API在上层完成以下几件事:

  ● 编程更加省力,提高城程序速度和代码质量

  ● 非关联的API提高互操作性

  ● 节省学习使用新API成本

  ● 节省设计新API的时间

  ● 鼓励、促进软件重用

  具体来说,有6个集合接口,最基本的是Collection接口,由三个接口Set、List、SortedSet继承,另外两个接口是Map、SortedMap,这两个接口不继承Collection,表示映射而不是真正的集合。

  2、 什么是Iterator

  一些集合类提供了内容遍历的功能,通过java.util.Iterator接口。这些接口允许遍历对象的集合。依次操作每个元素对象。当使用Iterators时,在获得Iterator的时候包含一个集合快照。通常在遍历一个Iterator的时候不建议修改集合本省。

  3、 Iterator与ListIterator有什么区别?

  Iterator:只能正向遍历集合,适用于获取移除元素。ListIerator:继承Iterator,可以双向列表的遍历,同样支持元素的修改。

  4、 什么是HaspMap和Map?

  Map是接口,Java 集合框架中一部分,用于存储键值对,HashMap是用哈希算法实现Map的类。

  5、 HashMap与HashTable有什么区别?对比Hashtable VS HashMap

  两者都是用key-value方式获取数据。Hashtable是原始集合类之一(也称作遗留类)。HashMap作为新集合框架的一部分在Java2的1.2版本中加入。它们之间有一下区别:

  ● HashMap和Hashtable大致是等同的,除了非同步和空值(HashMap允许null值作为key和value,而Hashtable不可以)。

  ● HashMap没法保证映射的顺序一直不变,但是作为HashMap的子类LinkedHashMap,如果想要预知的顺序迭代(默认按照插入顺序),你可以很轻易的置换为HashMap,如果使用Hashtable就没那么容易了。

  ● HashMap不是同步的,而Hashtable是同步的。

  ● 迭代HashMap采用快速失败机制,而Hashtable不是,所以这是设计的考虑点。

java框架面试题2

  1、 在Hashtable上下文中同步是什么意思?

  同步意味着在一个时间点只能有一个线程可以修改哈希表,任何线程在执行hashtable的更新操作前需要获取对象锁,其他线程等待锁的释放。

  2、 什么叫做快速失败特性

  从高级别层次来说快速失败是一个系统或软件对于其故障做出的响应。一个快速失败系统设计用来即时报告可能会导致失败的任何故障情况,它通常用来停止正常的操作而不是尝试继续做可能有缺陷的工作。当有问题发生时,快速失败系统即时可见地发错错误告警。在Java中,快速失败与iterators有关。如果一个iterator在集合对象上创建了,其它线程欲“结构化”的修改该集合对象,并发修改异常(ConcurrentModificationException) 抛出。

  3、 怎样使Hashmap同步?

  HashMap可以通过Map m = Collections.synchronizedMap(hashMap)来达到同步的效果。

  4、 什么时候使用Hashtable,什么时候使用HashMap

  基本的不同点是Hashtable同步HashMap不是的,所以无论什么时候有多个线程访问相同实例的可能时,就应该使用Hashtable,反之使用HashMap。非线程安全的数据结构能带来更好的性能。

  如果在将来有一种可能—你需要按顺序获得键值对的方案时,HashMap是一个很好的选择,因为有HashMap的一个子类LinkedHashMap。所以如果你想可预测的按顺序迭代(默认按插入的顺序),你可以很方便用LinkedHashMap替换HashMap。反观要是使用的Hashtable就没那么简单了。同时如果有多个线程访问HashMap,Collections.synchronizedMap()可以代替,总的来说HashMap更灵活。

  5、为什么Vector类认为是废弃的或者是非官方地不推荐使用?或者说为什么我们应该一直使用ArrayList而不是Vector?

  你应该使用ArrayList而不是Vector是因为默认情况下你是非同步访问的,Vector同步了每个方法,你几乎从不要那样做,通常有想要同步的是整个操作序列。同步单个的操作也不安全(如果你迭代一个Vector,你还是要加锁,以避免其它线程在同一时刻改变集合).而且效率更慢。当然同样有锁的开销即使你不需要,这是个很糟糕的方法在默认情况下同步访问。你可以一直使用Collections.sychronizedList来装饰一个集合。

  事实上Vector结合了“可变数组”的集合和同步每个操作的实现。这是另外一个设计上的`缺陷。Vector还有些遗留的方法在枚举和元素获取的方法,这些方法不同于List接口,如果这些方法在代码中程序员更趋向于想用它。尽管枚举速度更快,但是他们不能检查如果集合在迭代的时候修改了,这样将导致问题。尽管以上诸多原因,oracle也从没宣称过要废弃Vector.


java框架面试题3篇扩展阅读


java框架面试题3篇(扩展1)

——java基础面试题3篇

java基础面试题1

  1、问题:String和StringTokenizer的区别是什么?

  答案:StringTokenizer是一个用来分割字符串的工具类。

  StringTokenizer st = new StringTokenizer(”Hello World”);

  while (st.hasMoreTokens()) {

  System.out.println(st.nextToken());

  }

  输出:

  Hello

  World

  2、问题:transient变量有什么特点?

  答案:transient变量不会进行序列化。例如一个实现Serializable接口的类在序列化到ObjectStream的时候,transient类型的变量不会被写入流中,同时,反序列化回来的时候,对应变量的值为null。

  3、问题:哪些容器使用Border布局作为它们的默认布局?

  答案:Window, Frame, Dialog。

  4、问题:怎么理解什么是同步?

  答案:同步用来控制共享资源在多个线程间的访问,以保证同一时间内只有一个线程能访问到这个资源。在非同步保护的多线程程序里面,一个线程正在修改一个共享变量的时候,可能有另一个线程也在使用或者更新它的值。同步避免了脏数据的产生。

  对方法进行同步: public synchronized void Method1 () { // Appropriate method-related code. }

  在方法内部对代码块进行同步: public myFunction (){

  synchronized (this) {

  // Synchronized code here. }

  }

java基础面试题2

  1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。

  2、Java有没有goto?

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

  3、说说&和&&的区别。

  &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

  &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null&& !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 &++y>0) y会增长,If(x==33 && ++y>0)不会增长

  &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。

  备注:这道题先说两者的共同点,再说出&&和&的特殊之处,并列举一些经典的例子来表明自己理解透彻深入、实际经验丰富。

  4、在JAVA中如何跳出当前的多重嵌套循环? 在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环。例如,

  ok:

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

  for(int j=0;j<10;j++) {

  System.out.println(“i=” + i + “,j=” + j);

  if(j == 5) break ok;

  }

  }

  另外,我个人通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中查找到某个数字。

  int arr[][] ={{1,2,3},{4,5,6,7},{9}};

  boolean found = false;

  for(int i=0;i

  for(int j=0;j

  System.out.println(“i=” + i + “,j=” + j);

  if(arr[i][j] ==5) {

  found = true;

  break;

  }

  }

  }

  5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

  在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。

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

  对于short s1 = 1; s1 = s1 + 1;由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。

  对于short s1 = 1; s1 += 1;由于 +=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

java基础面试题3

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

  char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

  备注:后面一部分回答虽然不是在正面回答题目,但是,为了展现自己的学识和表现自己对问题理解的透彻深入,可以回答一些相关的知识,做到知无不言,言无不尽。

  2、用最有效率的方法算出2乘以8等於几?

  2 << 3,

  因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。

  3、请设计一个一百亿的计算器

  首先要明白这道题目的考查点是什么,一是大家首先要对计算机原理的底层细节要清楚、要知道加减法的位运算原理和知道计算机中的算术运算会发生越界的情况,二是要具备一定的面向对象的设计思想。

  首先,计算机中用固定数量的几个字节来存储的数值,所以计算机中能够表示的数值是有一定的范围的,为了便于讲解和理解,我们先以byte类型的整数为例,它用1个字节进行存储,表示的最大数值范围为-128到+127。-1在内存中对应的二进制数据为11111111,如果两个-1相加,不考虑Java运算时的类型提升,运算后会产生进位,二进制结果为1,11111110,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为11111110,也就是-2,这正好利用溢位的方式实现了负数的运算。-128在内存中对应的二进制数据为10000000,如果两个-128相加,不考虑Java运算时的类型提升,运算后会产生进位,二进制结果为1,00000000,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为00000000,也就是0,这样的结果显然不是我们期望的,这说明计算机中的算术运算是会发生越界情况的,两个数值的运算结果不能超过计算机中的该类型的数值范围。由于Java中涉及表达式运算时的类型自动提升,我们无法用byte类型来做演示这种问题和现象的实验,大家可以用下面一个使用整数做实验的例子程序体验一下:

  int a = Integer.MAX_VALUE;

  int b = Integer.MAX_VALUE;

  int sum = a + b;

  System.out.println(“a=”+a+”,b=”+b+”,sum=”+sum);

  先不考虑long类型,由于int的正数范围为2的31次方,表示的最大数值约等于2*1000*1000*1000,也就是20亿的大小,所以,要实现一个一百亿的计算器,我们得自己设计一个类可以用于表示很大的整数,并且提供了与另外一个整数进行加减乘除的功能,大概功能如下:

  ()这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数 ()有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中 ()提供加减乘除的功能

  public class BigInteger{

  int sign;

  byte[] val;

  public Biginteger(String val) {

  sign = ;

  val = ;

  }

  public BigInteger add(BigInteger other) {

  }

  public BigInteger subtract(BigInteger other) {

  }

  public BigInteger multi*(BigInteger other){

  }

  public BigInteger divide(BigInteger other){

  }

  }

  备注:要想写出这个类的完整代码,是非常复杂的,如果有兴趣的话,可以参看jdk中自带的java.math.BigInteger类的源码。面试的人也知道谁都不可能在短时间内写出这个类的完整代码的,他要的是你是否有这方面的概念和意识,他最重要的还是考查你的能力,所以,你不要因为自己无法写出完整的最终结果就放弃答这道题,你要做的就是你比别人写得多,证明你比别人强,你有这方面的思想意识就可以了,毕竟别人可能连题目的意思都看不懂,什么都没写,你要敢于答这道题,即使只答了一部分,那也与那些什么都不懂的人区别出来,拉开了距离,算是矮子中的高个,机会当然就属于你了。另外,答案中的框架代码也很重要,体现了一些面向对象设计的功底,特别是其中的方法命名很专业,用的英文单词很精准,这也是能力、经验、专业性、英语水*等多个方面的体现,会给人留下很好的印象,在编程能力和其他方面条件差不多的情况下,英语好除了可以使你获得更多机会外,薪水可以高出一千元。

  4、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

  使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:

  final StringBuffer a=new StringBuffer("immutable");

  执行如下语句将报告编译期错误:

  a=new StringBuffer("");

  但是,执行如下语句则可以通过编译:

  a.append(" broken!");

  有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象: public void method(final StringBuffer param){

  }

  实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象: param.append("a");


java框架面试题3篇(扩展2)

——java面试题3篇

java面试题1

  1、&和&&的区别?

  答:&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

  补充:如果你熟悉JavaScript,那你可能更能感受到短路运算的强大,想成为JavaScript的高手就先从玩转短路运算开始吧。

  2、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。

  答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、"hello"和常量都是放在静态区中。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。

  String str = new String("hello");

  上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而"hello"这个字面量放在静态区。

  补充:较新版本的Java(从Java 6的某个更新开始)中使用了一项叫"逃逸分析"的技术,可以将一些局部对象放在栈上以提升对象的操作性能。

  3、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

  答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。

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

  答:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

java面试题2

  1、数组有没有length()方法?String有没有length()方法?

  答:数组没有length()方法,有length 的属性。String 有length()方法。JavaScript中,获得字符串的长度是通过length属性得到的,这一点容易和Java混淆。

  2、在Java中,如何跳出当前的多重嵌套循环?

  答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。(Java中支持带标签的break和continue语句,作用有点类似于C和C++中的goto语句,但是就像要避免使用goto一样,应该避免使用带标签的break和continue,因为它不会让你的程序变得更优雅,很多时候甚至有相反的作用,所以这种语法其实不知道更好)

  3、构造器(constructor)是否可被重写(override)?

  答:构造器不能被继承,因此不能被重写,但可以被重载。

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

  答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的.hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。

java面试题3

  问题1:GregorianCalendar类是什么东西?

  答案:GregorianCalendar提供了西方传统日历的支持。

  问题2:ResourceBundle类是什么?

  答案:ResourceBundle用来存储指定语言环境的资源,应用程序可以根据运行时的语言环境来加载这些资源,从而提供不同语言的展示。

  问题3:为什么Java里没有全局变量?

  答案:全局变量是全局可见的",Java不支持全局可见的变量,因为:全局变量破坏了引用透明性原则。全局变量导致了命名空间的冲突。

  问题4:SimpleTimeZone类是什么?

  答案:SimpleTimeZone提供公历日期支持。

  问题5:while循环和do循环有什么不同?

  答案:while结构在循环的开始判断下一个迭代是否应该继续。do/while结构在循环的结尾来判断是否将继续下一轮迭代。do结构至少会执行一次循环体。

  问题6:Locale类是什么?

  答案:Locale类用来根据语言环境来动态调整程序的输出。

  问题7:面向对象编程的原则是什么?

  答案:主要有三点,多态,继承和封装。

  问题8:介绍下继承的原则

  答案:继承使得一个对象可以获取另一个对象的属性。使用继承可以让已经测试完备的功能得以复用,并且可以一次修改,所有继承的地方都同时生效。


java框架面试题3篇(扩展3)

——java面试题全集3篇

java面试题全集1

  1)Java 中能创建 Volatile 数组吗?

  能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线程同时改变数组的元素,volatile 标示符就不能起到之前的保护作用了。

  2)volatile 能使得一个非原子操作变成原子操作吗?

  一个典型的例子是在类中有一个long 类型的成员变量。如果你知道该成员变量会被多个线程访问,如计数器、价格等,你最好是将其设置为 volatile。为什么?因为 Java 中读取 long 类型变量不是原子的,需要分成两步,如果一个线程正在修改该 long 变量的值,另一个线程可能只能看到该值的一半(前 32 位)。但是对一个 volatile 型的 long 或 double 变量的读写是原子。

  3)volatile 修饰符的有过什么实践?

  一种实践是用 volatile 修饰 long 和 double 变量,使其能按原子类型来读写。double 和 long 都是64位宽,因此对这两种类型的读是分为两部分的,第一次读取第一个 32 位,然后再读剩下的 32 位,这个过程不是原子的,但 Java 中 volatile 型的 long 或 double 变量的读写是原子的。volatile 修复符的另一个作用是提供内存屏障(memory barrier),例如在分布式框架中的"应用。简单的说,就是当你写一个 volatile 变量之前,Java 内存模型会插入一个写屏障(writebarrier),读一个 volatile 变量之前,会插入一个读屏障(read barrier)。意思就是说,在你写一个 volatile 域时,能保证任何线程都能看到你写的值,同时,在写之前,也能保证任何数值的更新对所有线程是可见的,因为内存屏障会将其他所有写的值更新到缓存。

  4)volatile 类型变量提供什么保证?

  volatile 变量提供顺序和可见性保证,例如,JVM或者 JIT为了获得更好的性能会对语句重排序,但是 volatile类型变量即使在没有同步块的情况下赋值也不会与其他语句重排序。 volatile 提供 happens-before 的保证,确保一个线程的修改能对其他线程是可见的。某些情况下,volatile 还能提供原子性,如读 64 位数据类型,像 long 和 double 都不是原子的,但 volatile 类型的 double 和 long 就是原子的。

  5) 10 个线程和 2 个线程的同步代码,哪个更容易写?

  从写代码的角度来说,两者的复杂度是相同的,因为同步代码与线程数量是相互独立的。但是同步策略的选择依赖于线程的数量,因为越多的线程意味着更大的竞争,所以你需要利用同步技术,如锁分离,这要求更复杂的代码和专业知识。

  6)你是如何调用 wait()方法的?使用 if 块还是循环?为什么?

  wait() 方法应该在循环调用,因为当线程获取到CPU 开始执行的时候,其他条件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。下面是一段标准的使用 wait 和 notify 方法的代码:

  // The standard idiom for using the waitmethodsynchronized (obj) {while (condition does not hold)

  obj.wait(); // (Releases lock, andreacquires on wakeup)... // Perform action appropriate to condition}

  参见 EffectiveJava 第 69 条,获取更多关于为什么应该在循环中来调用 wait 方法的内容。


java框架面试题3篇(扩展4)

——java面试题目3篇

java面试题目1

  1.谈谈对XML的理解?说明Web应用中Web.xml文件的作用?

  解答:XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨*台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

  web.xml的作用是配置欢迎页,servlet,filter,listener等的。

  2.jsp有哪些内置对象?作用分别是什么?(至少三个)

  解答:

  1)request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header和session数据的有用的方法。

  2)response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)。

  3)out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

  4)pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。

  5)session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息。

  6)application 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息。

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

  8)page表示从该页面产生的一个servlet实例。

  9)exception 针对错误网页,未捕捉的例外

  3.事务是什么?有哪些属性,并简要说明这些属性的含义。

  解答:事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

  事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

  事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。

  原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

  一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

  隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

  持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

  4、Collection 和 Collections的区别?

  解答:Collection是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有Set 和List;Collections是个java.util下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

  5、HashMap与TreeMap的区别?

  解答:HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。

  6、ArrayList和Vector的区别?

  解答:同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的;数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半。

java面试题目2

  1.试述数据库完整保护的主要任务和措施。

  解答:数据库的完整性保护也就是数据库中数据正确性的维护。数据库完整性包括三个内容:实体完整性规则,参照物完整性规则以及用户定义完整性规则。 前两个是有DBMS自动处理。

  实体完整性规则是说针对于基表中的关键字中属性值不能为空值,是数据库完整性的基本要求,主关键字和元组的唯一性对应。

  参照物完整性规则是不允许引用不存在的元组:即基表中的外关键字要么为空,要么关联基表中必存在元组。

  用户定义完整性规则针对具体的数据环境由用户具体设置的规则,它反应了具体应用中的语义要求。 一个完整性规则一般由下面三部分组成:完整性约束条件设置,完整性约束条件的检查以及完整性约束条件的处理.后两部分在数据库中一般有相应的模块处理。另外触发器也可以做完整性的保护,但触发器大量用于主动性领域。

  2.请说明SQLServer中 from tablea & truncate table tablea的区别

  解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,使HWK值为0,不需要 rollback segment .而Delete是DML操作需要rollback segment 且花费较长时间.

  3. Oracle安装完成后,如何用命令行启动和关闭数据库?

  解答:

  打开

  STARTUP [FORCE] [RESTRICT] [PFILE= filename] [OPEN [RECOVER][ database] | MOUNT | NOMOUNT] STARTUP OPEN:STARTUP缺省的参数就是OPEN,打开数据库,允许数据库的访问。当前实例的控制文件中所描述的所有文件都已经打开。 STARTUP MOUNT:MOUNT数据库,仅仅给DBA进行管理操作,不允许数据库的用户访问。仅仅只是当前实例的控制文件被打开,数据文件未打开。 STARTUP NOMOUNT:仅仅通过初始化文件,分配出SGA区,启动数据库后台进程,没有打开控制文件和数据文件。不能访问任何数据库。 STARTUP PFILE= filename:以filename为初始化文件启动数据库,不是采用缺省初始化文件。 STARTUP FORCE:中止当前数据库的运行,并开始重新正常的启动数据库。 STARTUP RESTRICT:只允许具有RESTRICTED SESSION权限的用户访问数据库。 STARTUP RECOVER:数据库启动,并开始介质恢复

  关闭

  SHUTDOWN有四个参数:NORMAL、TRANSACTIONAL、IMMEDIATE、ABORT。缺省不带任何参数时表示是NORMAL。

  命令SHUTDOWN NORMAL:不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。 SHUTDOWN TRANSACTIONAL:不允许新的连接、不等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。 SHUTDOWN IMMEDIATE:不允许新的连接、不等待会话结束、不等待事务结束、做一个检查点并关闭数据文件。没有结束的事务是自动rollback的。启动时不需要实例恢复。 SHUTDOWN ABORT:不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。启动时自动进行实例恢复。 另外,对于NORMAL、TRANSACTIONAL、IMMEDIATE,DB Buffer Cache的内容写入了数据文件,没有提交的事务被回滚,所有的资源被释放,数据库被“干净”的关闭。 对于ABORT,DB Buffer Cache的内容没有写入数据文件,没有提交的事务也没有回滚。数据库没有dismount和关闭,数据文件也没有关闭。当数据库启动时,需要通过redo log恢复数据,通过回滚段对事务回滚,对资源进行释放。

  4. 类有哪三个基本特性?各特性的优点?

  解答:类具有封装性、继承性和多态性。

  封装性:类的封装性为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。

  继承性:类的继承性提供从已存在的类创建新类的机制,继承(inheritance)使一个新类自动拥有被继承类(父类)的全部可继承的成员。

  多态性:类的多态性提供类中方法执行的多样性,多态性有两种表现形式:重载和覆盖。

java面试题目3

  1.IP地址的编码分为哪俩部分?

  IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。

  2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。

  循环链表,用取余操作做

  3.不能做switch()的参数类型是:

  switch的参数不能为实型。

  4. static有什么用途?(请至少说明两种)

  a.限制变量的作用域

  b.设置变量的存储域

  7. 引用与指针有什么区别?

  a 引用必须被初始化,指针不必。

  b 引用初始化以后不能被改变,指针可以改变所指的对象。

  c 不存在指向空值的引用,但是存在指向空值的指针。

  8. 描述实时系统的基本特性

  在特定时间内完成特定的任务,实时性与可靠性

  9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

  全局变量储存在静态数据库,局部变量在堆栈

  10. 什么是*衡二叉树?

  左右子树都是*衡二叉树 且左右子树的深度差值的绝对值不大于1

  11. 堆栈溢出一般是由什么原因导致的?

  没有回收垃圾资源

  12. 什么函数不能声明为虚函数?

  constructor

  13. 冒泡排序算法的时间复杂度是什么?

  O(n^2)

  14. 写出float x 与“零值”比较的if语句。

  if(x>0.000001&&x<-0.000001)

  16. Internet采用哪种网络协议?该协议的主要层次结构?

  tcp/ip 应用层/传输层/网络层/数据链路层/物理层

  17. Internet物理地址和IP地址转换采用什么协议?

  ARP (Address Resolution Protocol)(地址解析協議)


java框架面试题3篇(扩展5)

——.net基础面试题3篇

.net基础面试题1

  1.什么是.NET?什么是CLI?什么是CLR?IL是什么?

  (1).net用于代码编译和执行的集成托管环境,换句话,它管理应用程序运行的方方面面,包括首次运行的编译,为程序分配内存存储数据和指令,对于应用程序授予或拒绝相应的权限,并启动管理应用程序的执行,剩余内存的在分配。由于所有.net应用程序都是在.net framework上面执行,所以开发人员只需考虑与.net framework打交道,而不必关系和底层操作系统上面的实现包括CLR和BCL

  (2).CLI(common language infrastructure)公共语言基础结构,一项国际性的标准,没有规定标准具体如何实现。相反,它描述了一个CLI*台在符合标准的前提下应该具有什么行为。包含了:运行时(CLR),公共中间语言(CIL),公共类型系统(CTS),公共语言规范(CLS),元数据(Metadata),框架(framework)

  (3)CLR:公共语言运行时,负责加载和运行程序 IL:中间语言,C#编译器将C#代码转换成IL,运行时能够理解IL,并编译成机器码

  2.JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式?

  JIT:Just in time,C#或者是VB.NET的代码首先被编译为IL存储在本地,当要运行这些代码的时候,CLR对IL进行第二次编译转换成机器码运行。好处:可移植性,而且IL在加载到内存中时将受到类型安全性方面检查,这实现了更好的安全性和可靠性。

  GC:垃圾回收(garbage collection),是根据程序的需要自动分配和回收内存的过程。垃圾回收器处理的是引用对象,而且只回收堆上的内存。这意味着假如维持对一个对象的引用,就会阻止GC重用对象使用的内存。在.NET中,垃圾回收器采用的是mark-and-compact算法。在一次垃圾回收周期开始的时候,它要识别对象的所有跟引用,根据这个引用可以遍历每个根引用所标识的一个树形结构,并递归确定所有引用指向的对象。这样一来,垃圾回收器就可以识别所有可达的对象,在执行回收的时候,GC不是枚举所有访问不到的对象,相反,通过压缩所有相邻的可达的对象来执行垃圾回收。不可访问的对象就会被覆盖。垃圾回收的宗旨是提高内存的利用率,它并不是用来清理文件句柄,和数据库连接字符串,端口或者其他有限的资源(终接器finalizer,不能被显示调用,不能传递任何参数,即不能被重载,只有垃圾回收器才能调用终接器,使用Using语句进行确定性终结

.net基础面试题2

  1.类(class)和结构(struct)的区别是什么?它们对性能有影响吗?

  01. 值类型与引用类型

  结构是值类型:值类型在栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,通过使用结构可以创建更多的值类型

  类是引用类型:引用类型在堆上分配地址堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用

  注:1).虽然结构与类的类型不一样,可是他们的"基类型都是对象(object),c#中所有类型的基类型都是object

  2).虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用

  02.继承性

  结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed .

  类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样

  03.内部结构:

  结构: 没有默认的构造函数,但是可以添加构造函数没有析构函数没有 abstract 和 sealed(因为不能继承)不能有protected 修饰符可以不使用new 初始化在结构中初始化实例字段是错误的

  类: 有默认的构造函数 有析构函数 可以使用 abstract 和 sealed 有protected 修饰符必须使用new 初始化

  2..NET BCL里有哪些是类(结构),为什么它们不是结构(类)?

  结构:System.Boolean Byte Char Decimal Double Int32

  堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些 大多数情况下该类型只是一些数据时,结构是最佳的选择

  类:String Object Delegate 接口 等等 包含了大量的逻辑对象,表现抽象


java框架面试题3篇(扩展6)

——java常见面试题目3篇

java常见面试题目1

  第一,谈谈final, finally, finalize的区别。

  final:修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载

  finally:再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

  finalize:方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

  第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

  匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

  第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。

  Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。

  注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象

  第四,&和&&的区别。

  &是位运算符。&&是布尔逻辑运算符。

  第五,HashMap和Hashtable的区别。

  都属于Map接口的类,实现了将惟一键映射到特定的值上。

  HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。

  Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。

  第六,Collection 和 Collections的区别。

  Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

  Collection是个java.util下的接口,它是各种集合结构的父接口。

  第七,什么时候用assert。

  断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的:

  assert(a > 0); // throws an AssertionError if a <= 0

  断言可以有两种形式:

  assert Expression1 ;

  assert Expression1 : Expression2 ;

  Expression1 应该总是产生一个布尔值。

  Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。

  断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:

  javac -source 1.4 Test.java

  要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。

  要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。

  要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。

  可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。

  第八,GC是什么? 为什么要有GC? (基础)。

  GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc() Runtime.getRuntime().gc()

  第九,String s = new String("xyz");创建了几个String Object?

  两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

  第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

  Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

java常见面试题目2

  第一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

  short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

  第二,sleep() 和 wait() 有什么区别? 搞线程的最爱

  sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级

  (b)正在运行的线程因为其它原因而阻塞。

  wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

  第三,Java有没有goto? Goto?

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

  第四,数组有没有length()这个方法? String有没有length()这个方法?

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

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

  方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

  第六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

  Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

  equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

  第七,给我一个你最常见到的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

  第八,error和exception有什么区别?

  error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

  第九,List, Set, Map是否继承自Collection接口?

  List,Set是 Map不是

  第十,abstract class和interface有什么区别?

  声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

  接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的`接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。


java框架面试题3篇(扩展7)

——java软件开发工程师面试题宝典3篇

java软件开发工程师面试题宝典1

  1)transient和volatile是java关键字吗?

  如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如: class T

  {

  transient int a; //不需要维持

  int b; //需要维持

  }

  这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存。

  volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变。在多线程程序中,有时两个或更多的线程共享一个相同的实例变量。考虑效率问题,每个线程可以自己保存该共享变量的私有拷贝。实际的变量副本在不同的时候更新,如当进入synchronized方法时。 用strictfp修饰类或方法,可以确保浮点运算(以及所有切断)正如早期的Java版本那样准确。切断只影响某些操作的指数。当一个类被strictfp修饰,所有的方法自动被strictfp修饰。

  strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运

  算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同的硬件*台所执行的结果不一致的话,那就请用关键字strictfp。

  你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字,例如下面的代码:

  strictfp interface A {}

  public strictfp class FpDemo1 {

  strictfp void f() {}

  }

  2. 错误的使用方法

  interface A {

  strictfp void f();

  }

  public class FpDemo2 {

  strictfp FpDemo2() {}

  }

  一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范的。例如一个类被声明为strictfp,那么该类中所有的方法都是strictfp的。

  2)抽象类和接口有什么区别?

  1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

  2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

  3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

  4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

  5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

  6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

  7.接口中的方法默认都是 public,abstract 类型的。

  3)能说一下java的反射(reflection)机制吗?

  开放性和原因连接(causally-connected)是反射系统的两大基本要素

java软件开发工程师面试题宝典2

  1.j2ee是什么?它包含哪些技术?

  从整体来讲,J2EE是使用java开发技术开发企业级应用的工业标准,它是java技术不断适应和醋精企业级应用过程的产物。适用于企业级应用的j2ee,提供一个**立的、可移植的、多用户的、安全的和基于标注呢企业级*台,从而简化企0业应用的开发、管理和部署。J2EE是一个标准,而不是一个现成的产品。

  主要包括以下这些技术:

  (1)Servlet servlet是java*台上的CGI技术。Servlet在服务器端运行,动态的生成web页面。与传统的CGI和其他类似CGI的技术相比,Java Servlet具有更高的效率并更容易使用。对于Servlet,从夫的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并访问的。

  (2)JSP Jsp(java server page)是一种是实现普通静态HTML和动态页面输出混合编码的技术。从这一点看,非常类似Microsoft ASP、PHP等技术。借助形式上的内容和外观表现的分离,web页面制作的任务可以比较方便的话费给页面设计人员和程序员,并方便的通过JSP来合成。在运行时态,JSP将会被首先转换成Servlet,并以Servlet的.形态编译运行,因此它的效率和功能与Servlet相比没有差别,一样具有很高的效率。

  (3)EJB EJB定义了一组可充用的组件:Enterprise Beans。开发人员可以利用这些组件,像搭积木一样建立分布式应用。

  (4)JDBC JDBC(Java DataBase Connectivity,java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语句)数据库访问接口,它使数据库开发人员能够使用标准Java API编写数据库应用程序。JDBC API主要用来连接数据库和调用SQL命令执行各种SQL语句。利用JDBC API可以执行一般的SQL语句、动态SQL语句及带IN和OUT参数的存储过程。JAVA中的JDBC 相当于Microsoft*台中的ODBC(open Database Connectivity)。

  2.测试生命周期、测试过程分为几个阶段、以及各阶段的含义?

  软件测试生命周期一般包括6个阶段:

  (1)技术:产品定义阶段

  (2)分析:外部文档阶段

  (3)设计:文档架构阶段

  (4)构建:单元测试阶段

  (5)测试周期:错误修正,重复系统测试阶段

  (6)最后测试和实施:代码冻结阶段

  3.您做系统设计用各种工具?

  Visio,Rational rose,power designer的

  4.什么是web容器?

  容器就是一种服务程序,在服务器一个端口就有一个提供相应服务的程度,而这个程序就是处理从客户端发出的请求,如java中的Tomat容器,ASP的IIS火舌PWS都是这样的容器。


java框架面试题3篇(扩展8)

——java软件开发工程师面试题3篇

java软件开发工程师面试题1

  1.存储过程和函数的区别

  从参数的返回其情况来看:

  如果返回多个参数值最好使用存储过程,如果只有一个返回参数值的话可以使用函数。 从调用情况来看:

  如果在SQL语句(DML或者select)中调用的话一定是存储函数或者是存储的分装函数不可以是存储过程,但是调用存储函数的时候还有很多限制以及函数的纯度等级问题,如果实在过程化语句中调用的虎牙,就要看你是实现什么样的功能。函数一般情况先是用来计算并返回一个计算结果而存储过程一般是一用来完成特定的数据操作(比如修改、插入数据库表或执行某些dml语句),所有虽然他们的语法上很相似但用户在使用他们的时候所需要完成的功能大部分情况下是不同的。

  2.试述数据库完整保护的主要任务和措施

  数据库的完整性保护也就是数据库中正确性的维护。数据库的完整性包括三个内容:实体完整性规则、参照物完整性规则和用户定义完整性规则。前两个使用DBMS自动处理。

  实体完整性规则:是说针对基表中的关键字属性不能为空值,是数据库完整性的基本要求,主关键字和元组的唯一性对应。

  参照物完整性规则:是不允许引用不存在的元组:即基表中的外关键字要么为空,要么关联基表中必然存在元组。

  用户定义完整性规则:针对具体的数据环境由用户具体设置的规则,它反映了具体应用中的语义要求。一个完整性规则一般有下面三个部分组成:完整性约束条件设置,完整性约束条件的检验以及完整性约束条件的处理。后两部分在数据库中一般由相应的模块处理。另外触发器也可以做完整性的保护,但触发器大量用于主动性领域。

  3.请说明SQLServer中的delete from tablea & truncate table tablea的区别。

  两者都可以用来删除表中的所有记录。区别在于:truncate是DDL操作,它移动HWK,是HWK值为0,不需要rollback segment ,而Delete是DML操作需要rollback segment 且话费较长时间。

  4.Oracle安装完成后,如何使用命令行启动和关闭数据库?

  打开:STARTUP [RESTRICT] [PFILE=filename] [OPEN [RECOVER][database] ]| MOUNT |NOMOUNT

  STARTUP OPEN:STARTUP :缺省的参数是OPEN,打开数据库,允许数据库的访问。当前实力的控制文件中描述的所有文件都已打开。

  STARTUP MOUNT:MOUNT数据库,仅仅给DBA进行管理操作,不允许数据库用户的访问。仅仅只是当前实例的控制文件打开,数据文件未打开。

  STARTU NOMOUNT :仅仅通过初始化文件,分配出SGA区,启动数据库后台进程,没有打开控制文件和数据文件。不能访问任何数据库。

  STARTUP PFILE=filename :以filename为初始化文件启动数据库。不是采用缺省初始化文件。

  STARTUP FORCE:中止当前数据库的运行,并开始重新正常的启动数据库。

  STARTUP RESTRICT:只允许具有RESTRICTED SESSION权限的用户访问数据库。

  STARTUP RECOVER:数据库启动,并开始介质恢复。

  关闭:shutdown有四个参数:NOMAL、TRANSACTIONAL、IMMEDIATE、ABORT。缺省不带任何参数时表示NORMAL。

  SHUTDOWN NORMA:不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。

  SHUTDOWN TRANSACTIONAL:不允许新的连接、不等待会话结束、等待事务结束做一个检查点并关闭数据文件。启动时不需要实例恢复。

  SHUTDOWN IMMEDIATE:不允许新的连接,不等待会话结束、不等待事务结束、做一个检查点并关闭数据文件。没有结束的事务是自动rollback的。启动时不需要实例恢复。

  SHUTDOWN ABORT:不允许新的连接、不等待会话结束、不等待事务结束、不做检查点并且没有关闭数据文件。启动时自动进行实例恢复。

  另外,对于NORMAL、TRANSACTIONAL、IMMEDIATE,DE Buffer Cache的内容写入了数据文件,没有提交的事务被回滚,所有的资源被释放,数据库*净的关闭。对于ABORT,DB Buffer Cache的内容没有被写入数据文件,没有提交的事务也没有回滚。数据库没有dismount和关闭,数据文件也没有关闭。当数据库启东市,需要通过redo log恢复数据,通过回滚段对事物回滚,对资源进行释放。

java软件开发工程师面试题2

  1.类有哪三种基本特性?各特性的优点?

  类具有封装性、继承性、和多态性。

  封装性:类的封装性为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类中的私有变量和类中的方法的实现细节。

  继承性:类的继承性提供从已存在的类的创建新类的机制,继承(inheritance)使一个新类自动拥有被继承类(父类)的全部可继承的成员。

  多态性:类的多态性提供类中方法执行的多样性,多态性有两种表现形式:重载和覆盖。

  2.谈谈对XML的理解?说明web应用中web.xml文件的作用?

  XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language标砖通用标记语言)。XML是Internrt环境中跨*台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。拓展标记语言XML是一种简单的实际存储语言,使用一系列简单的`标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

  Web.xml的作用是配置欢迎页,servlet 、filter、listenter等的。

  3.Jsp有哪些内置对象?作用分别是什么?

  1).request 表示HttpServlet Request对象。它包含了有关浏览器请求的信息,并且提供了几个获取cookie,header和session数据的有用的方法。

  2).response表示HttpServletResponse对象,并且提供了几个用于设置送回浏览器的响应的方法(如cookies,header信息等)

  3).out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法能用于向浏览器回送输出结果

  4).pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象API,并且包装了用用的servlet相关功能的方法。

  5).session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息。

  6).application表示一个javax.servlet.ServletContext对象,这有助于查找有关servlet引擎和servlet环境信息。

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

  8).page表示从该页面产生的一个servlet实例

  9).exceptiom针对错误页面,未捕捉的例外

  4.事务是什么?有哪些属性,并且简要说明这些属性的含义。

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

  事务具有4个属性:原子性、一致性、隔离性、持续性。这4个属性通常称之为ACID特性。

  原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的著操作要么都做,要么都不做。

  一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

  隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

  持久性(durability):持久性也称之为永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。


java框架面试题3篇(扩展9)

——java面试题集3篇

java面试题集1

  1.Java的HashMap是如何工作的?

  HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值。

  HashMap 基于 hashing 原理,我们通过 put ()和 get ()方法储存和获取对象。当我们将键值对传递给 put ()方法时,它调用键对象的 hashCode ()方法来计算 hashcode,让后找到 bucket 位置来储存值对象。当获取对象时,通过键对象的 equals ()方法找到正确的键值对,然后返回值对象。HashMap 使用 LinkedList 来解决碰撞问题,当发生碰撞了,对象将会储存在 LinkedList 的下一个节点中。 HashMap 在每个 LinkedList 节点中储存键值对对象。

  2.什么是快速失败的故障安全迭代器?

  快速失败的Java迭代器可能会引发ConcurrentModifcationException在底层集合迭代过程中被修改。故障安全作为发生在实例中的一个副本迭代是不会抛出任何异常的。快速失败的故障安全范例定义了当遭遇故障时系统是如何反应的。例如,用于失败的快速迭代器ArrayList和用于故障安全的迭代器ConcurrentHashMap。

  3.Java BlockingQueue是什么?

  Java BlockingQueue是一个并发集合util包的一部分。BlockingQueue队列是一种支持操作,它等待元素变得可用时来检索,同样等待空间可用时来存储元素。

  4.什么时候使用ConcurrentHashMap?

  在问题2中我们看到ConcurrentHashMap被作为故障安全迭代器的一个实例,它允许完整的并发检索和更新。当有大量的并发更新时,ConcurrentHashMap此时可以被使用。这非常类似于Hashtable,但ConcurrentHashMap不锁定整个表来提供并发,所以从这点上ConcurrentHashMap的性能似乎更好一些。所以当有大量更新时ConcurrentHashMap应该被使用。

  5.哪一个List实现了最快插入?

  LinkedList和ArrayList是另个不同变量列表的实现。ArrayList的优势在于动态的增长数组,非常适合初始时总长度未知的情况下使用。LinkedList的优势在于在中间位置插入和删除操作,速度是最快的。

  LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

  ArrayList实现了可变大小的数组。它允许所有元素,包括null。 每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。

java面试题集2

  1.Iterator和ListIterator的.区别

  ●ListIterator有add()方法,可以向List中添加对象,而Iterator不能。

  ●ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

  ●ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

  ●都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。

  2.什么是CopyOnWriteArrayList,它与ArrayList有何不同?

  CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的。相比较于ArrayList它的写操作要慢一些,因为它需要实例的快照。

  CopyOnWriteArrayList中写操作需要大面积复制数组,所以性能肯定很差,但是读操作因为操作的对象和写操作不是同一个对象,读之间也不需要加锁,读和写之间的同步处理只是在写完后通过一个简单的"="将引用指向新的数组对象上来,这个几乎不需要时间,这样读操作就很快很安全,适合在多线程里使用,绝对不会发生ConcurrentModificationException ,因此CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存。

  3.迭代器和枚举之间的区别

  如果面试官问这个问题,那么他的意图一定是让你区分Iterator不同于Enumeration的两个方面:

  ●Iterator允许移除从底层集合的元素。

  ●Iterator的方法名是标准化的。

  4.Hashmap如何同步?

  当我们需要一个同步的HashMap时,有两种选择:

  ●使用Collections.synchronizedMap(..)来同步HashMap。

  ●使用ConcurrentHashMap的

  这两个选项之间的首选是使用ConcurrentHashMap,这是因为我们不需要锁定整个对象,以及通过ConcurrentHashMap分区地图来获得锁。

  5.IdentityHashMap和HashMap的区别

  IdentityHashMap是Map接口的实现。不同于HashMap的,这里采用参考*等。

  ●在HashMap中如果两个元素是相等的,则key1.equals(key2)

  ●在IdentityHashMap中如果两个元素是相等的,则key1 == key2

推荐访问: