刚才从百度面试出来问了的10道面试题拿出来分享一下

1.比较一下Java和JavaScript

JavaScript与Java是两个公司开发的不同的两个产品。Java是原Sun Microsystems公司推出的面向对象的程序设计语言,特别适合于互联网应用程序开发;而JavaScript是NetScape公司的产品,为了扩张NetScape浏览器的功能而开发的一种可以嵌入Web页面中运行的基于对象和事件驱动的解释性语言。JavaScript的前身是LiveScript;而Java的前身是Oak语言

下面对两种语言建的异同作如下比较

基于对象和面向对象:Java是一种真正的面向对象的语言 即使是开发简单的程序 必须设计对象 JavaScript是种脚本语言 它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基于对象 Objcet-B 解释和编译:Java的源代码在执行之前 必须经过编译 JavaScript是一种解释性编程语言 其源代码不需要经过编译 由浏览器解释执行 目前的浏览器几乎都使用了 JIT 即时编译 技术来提升JavaScript的运行效率

强类型变量和类型弱变量 Java采用强类型变量检查 即所有变量在编译之前必须作声明 JavaScript中变量是弱类型的 甚至在使用变量前可以不作声明 JavaScript的解释器在运行时检查推断其数据类型

2.什么时候用断言?

断言在软件开发中是一种常用的调试方式 很多开发语言中都支持这种机制。一般来说,断言用于保证程序最基本关键的正确性 断言检查通常在开发和测试时开启 为了保证程序的执行效率在软件发布后断言检查通常是关闭的

3.Error和Exception有什么区别?

Error便是系统级的错误和程序不必处理的异常 是恢复不是不可能但是很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这种的情况, Exception表示需要捕捉进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常。从不会发生的2情况。

著名面试题:2005年 摩托罗拉的面试中曾经问过这么一个问题 if a process reports a stack overflow run-time error,what's ths most possible cause ? 给了四个选项 1.lack of memory 2.write on an invalid memory space 3.recursive function calling 4 array index out of boundary Java程序在运行时也可能会遭遇StackOverflowError这是一个无法恢复的错误 只能重洗修改代码了 这个面试题的答案是3 如果写了不能迅速收敛的递归 则很有可能引发栈溢出的错误 如下所示

class StackOverflowErrorTest {

    public static void main(String[] args) {
        main(null);
    }
}

  提示:用递归编写程序时一定要牢记两点:1. 递归公式;2. 收敛条件(什么时候就不再继续递归)。

4.try{}里有一个return语句,那么紧跟着这个try后的finally{}里面的代码会不会被执行 什么时候被执行 在return前还是后?

会执行 在方法返回调用者前执行

注意:在finally中改变返回值的做法是不好的 因为如果存在finally代码块 try中的return语句不会立马返回调用者 而是记录下返回值待finally代码块执行完毕后再向调用者返回其值 然后如果在finally中修改了返回值 就会返回修改后的值 显然在 finally中返回的修改返回值会对程序造成很大的困扰

5.Java语言如何进行异常处理 关键字 throws throw try catch finally 分别如何使用?

Java通过面向对象的方法进行异常处理 把各种不同的异常进行分类 并提供了良好的接口 在Java中每个异常都是一个对象 它是Throwable 类或其子类的实例 当一个方法出现异常后抛出一个异常对象 该对象中包含有异常信息 调用这个对象的方法可以捕获到这个异常并可以对齐进行处理 Java的异常处理是通过5个关键字来实现的 try catch throw throws 和finally 一般情况下是用try来执行一段程序 如果系统会抛出 一个异常对象 可以通过它的类型来捕获它 或者通过总是执行代码块 来处理 try用来指定一块 预防所有异常的程序 catch字句紧跟在try块后面 用老指定你想要的捕获的异常的类型 throw语句用来明确的抛出一个异常 throws用来声明一个方法可能抛出的各种异常 finally为了确保一段代码不管发生很忙异常状况都要被执行 try语句可以嵌套 每当遇到一个try语句异常的结构就会被放入异常栈中 知道所有的try语句都完成 如果下一级的try语句没有对某个异常进行处理 异常占就会执行出栈操作 知道遇到有处理这种异常的try语句或者最终将异常抛给JVM

6.运行时异常与受检异常有何异同?

异常表示程序运行过程中可能出现的非正常状态 运行时异常表示虚拟机的通常操作中可能遇到的异常 是一种常见运行错误 只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关,即使程序设计无误 仍然可能因使用的问题而引发 Java编译器要求方法必须声明抛出可能发生受检异常 但是并不要求必须声明抛出为被捕获的运行时异常 异常和集成一样是面向对象程序设计中经常被滥用的东西 在 Effective java中队异常的使用给出了一下指导原则

1.不要将异常处理用户正常的控制流 设计良好的API不应该强迫它的调用者为了真长的控制流而使用异常

2对可以恢复的情况使用受检异常对编程错误使用运行时异常

3避免不必要的使用受检异常 可以通过一些状态监测手段来避免异常的发生

4.优先使用标准的异常

5.每个方法抛出的异常都要用文档

6.保持异常的原子性

7.不要在catch中忽略掉捕获到的异常

 

7.列出一些你常见的运行时异常?

ArithmeticException 算术异常

ClassCastException 类转换异常

ILLegalAryumentException 非法参数异常

IndexOutOfBoundsException 下标越界异常

NullPointerException 空指针异常

SecurityException 安全异常

8.阐述 final finally finalize的区别?

final 修饰符 有三种用法 如果一个类被声明为final 意味着它不能在派生出新的子类 即不能被继承 因此它和abstract时反义词 将变量声明为 final 可以保证它们在使用汇总不被改变 被声明为final的变量必须在声明试给定初值 而在以后的引用中只能读取不能修改 被声明为final的方法也同样只能使用 不能在子类中被重写

finally 通常放在 try..catch的后面构造总是执行代码块 这就意味者程序无论正常执行还是发生异常 这里的代码只要JVM不关闭都能执行 可以将释放外部资源的代码写在finally块中

finalize Objcet类中定义的犯法 Java中允许使用finalize()方法在卡机收集器将对象从内存中清除出去之前做必要的清理工作 这个方法是由垃圾收集器在销毁对象时调用的 通过重写 finalize()方法可以整理系统资源或者执行其他清理工作

9.阐述ArrayList Vactor LinkedList的存储性能和特性

ArrayList和Vector 都是使用数组方式存储数据 此数组元素数大于实际存储的数据以便增加和插入元素 他们都是允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作 所以索引数据源快而插入数据满 Vector中的方法由于添加了 synchronized修饰 因此Vector时线程安全的容器 但性能上比ArrayList差 因此已经是Java中的遗留容器 LinkedList使用双向链表实现存储 (将内存中的零散的内存单元通过附加的引用关联起来 形成一个可以安轩索引的线性结构 这种链式存储和数据的连续存储方式相比 内存的利用率更高) 按序号索引数据需要进行前向或后向遍历 但是插入数据是只需要记录本项的前后项即可 所以插入速度较快 Vector属于遗留容器 Java早起的版本中提供的容器 已经不推荐使用 但是 由于ArrayList和LinkendListed都是非线程安全的,如果遇到多个线程操作同一个容器的场景 则可以通过工具类 Collections中的synchronizedList方法将其转换成线程安全的容器在使用

 

10.Colleciton和Conllections区别?

Collenciton是一个接口 它是Set List等容器的父接口 Conllections是一个工具类 提供了一系列的静态方法来辅佐容器操作 这些方法包括对容器的搜索 排序 线程安全化等等。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值