首页 课程 师资 教程 报名

高级面试问题:中软Java面试题

  • 2019-08-07 14:15:16
  • 2020次 动力节点

u=413209375,3586319870&fm=11&gp=0.jpg

  1、谈谈final, finally, finalize的区别。 


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


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


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


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


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


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


         Static nested class(嵌套类)是将内部类声明为static。普通内部类对象隐式地保存了一个引用,指向创建它的外围类对象,不能有static数据和static字段。嵌套类意味着:1> 要创建嵌套类的对象,并不需要其外围类的对象;2>不能从嵌套类的对象中访问非静态的外围类的对象。


  4、&和&&的区别。 


        & 是两个数相与,是位运算符


       &&是布尔逻辑运算符,连接两个条件表达式的,两个条件表达式都为真时,整个才为真


  5、HashMap和Hashtable的区别。 


    都属于Map接口的类,实现了将惟一键映射到特定的值上。HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的,是线程安全的。


  6、Collection 和 Collections的区别。 


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


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


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


       List,Set是  Map不是 


  8、ArrayList和Vector的区别。 


  .    1>同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 2>数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半 


  9、什么时候用assert。 


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

 

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


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


                       System.gc() 


                       Runtime.getRuntime().gc() 


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


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


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


          Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;因为返回最接近参数的 long。通过加上 1/2 将该结果舍入为整数,取结果的基数并将其强制转换为 long 类型。换句话说,结果等于以下表达式的值: (long)Math.floor(a + 0.5d)


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


         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编译器会对它进行特殊处理,因此可以正确编译。


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


         sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。


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


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


  16、是否可以继承String类?


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


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


        overload一般翻译为重载,表示多个函数共用同一个函数名,为了保证调用这些同名函数时能正确区分究竟应该调用的是其中的哪一个,重载的各个函数的参数表(不考虑形参名)必须彼此不同,通常简略地说成“不同参数表”。它对返回值的类型没有任何要求,所以你可以随意为每一个重载的函数设置返回类型,相同也行,不同也行。


         override一般翻译为覆盖,表示子类对从父类继承来的虚函数重新定义,它要求参数表必须跟父类中被覆盖的那个函数的参数表完全相同,返回值类型原则上也要求相同,但如果返回类型是父类的指针或者父类的引用,覆盖时返回类型允许是子类的指针或者子类的引用。


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


        Set是Collection容器的一个子接口,它不允许出现重复元素,当然也只允许有一个null对象。 equals()区分更合适。为什么用equals()而不用==来区分? 应该从它俩的区别谈起,==是用来判断两者是否是同一对象(同一事物),而equals是用来判断是否引用同一个对象。再看一下Set里面存的是对象,还是对象的引用。根据java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象,也就出现了重复元素。所以应该用equals()来判断。


  关注动力节点IT培训机构官网,更多面试相关问题及技巧。


选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交