面试题总结2

来源:互联网 发布:淘宝怎么打造一个爆款 编辑:程序博客网 时间:2024/06/05 04:12

1.常见的异常分为哪两种?常见的异常基类以及常见的异常

  • Throwable是java语言中所有错误和异常的超类,它有两个子类:Error   Exception
  • 异常的种类:
    • Eorror: Eorror称之为错误,是程序无法处理的,如OutOfMemoryError、ThreadDeath等,出现这种错误唯一能做的就是听之任之,交给JVM来处理,不过JVM大多情况下会选择终止线程。
    • Exception:是程序可以处理的异常,它又分为两种:运行时异常(UnCheckedException)、检查异常(CheckedException)。
      • CheckedException发生在编译阶段,必须使用try....catch/throws手动处理,否则编译不通过。
      • UnCheckedException发生在运行阶段,具有不确定性,主要由于程序的逻辑问题引起的,难以排查,一般编译器会自动处理。
    • 常见异常的基类:
      • IOException
      • RuntimeException



2.Java中的NIO、BIO、AIO分别是什么?
  • NIO
    • 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才能启动一个线程进行处理。
    • NIO方式适用于连接数目多且连接比较短的(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
  • BIO
    • 同步并阻塞,服务器实现模式一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善。
    • BIO方式适用于连接数目比较少且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用,JDK1.4以前的唯一选择,但程序直观易懂
  • AIO
    • 异步非阻塞,服务器模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。
    • AIO方式适用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较负责,JDK1.7开始支持。
3.所了解的设计模式,单例模式的注意事项,jdk源码哪些用到了你说得设计模式?
  • 所了解的设计模式
    • 工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到子类。
    • 单例模式:保证一个类只有一个实例,并且提供一个访问它的全局访问点。
    • 适配器模式:将一个类的接口转为客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些可以一起工作。
    • 装饰者模式:动态的给一些对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。
    • 代理:为其他对象提供一种代理以控制对这个对象的访问。
    • 迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,又不需要暴露该对象的内部表示。
  • 单例模式的注意事项:
    • 尽量使用懒加载
    • 双重检索实现线程安全
    • 构造方法为private
    • 定义静态的Singleton instance对象和getInstance()方法
  • jdk中用到的设计模式
    • 装饰者模式:I/O流中
    • 迭代器模式:iterator
    • 单例模式:java.lang.Runtime
    • 代理模式:RMI
4.匿名内部类是什么?如何访问在其外面定义的变量?
  • 匿名内部类是什么
    • 匿名内部类是没有访问修饰符的
    • 匿名内部类没有构造方法
    • 当所在方法的形参需要被匿名内部类使用,这个形参必须为fianlly
  • 如何访问在其外面定义的变量
    • 当所在方法的形参需要被匿名内部类使用,这个形参必须为fianlly
5.为什么要实现内存模型?

  • 内存模型就是为了在现代计算机平台中保证程序的可以正确的执行,但是不同的平台实现是不同的
  • 编译器中生成的指令顺序,可以与源代码中顺序不同
  • 编译器可能把变量保存在寄存器而不是内存中
  • 处理器可以采用乱序或并等方式来执行命令
  • 缓存可能改变将写入变量提交到主内存的次序
  • 保存在处理器本地缓存中的值,对其他处理器是不可见的



1 0
原创粉丝点击