JAVA面试——常见问题

  • Java关键字
    • transient
      • Java的serialization持久化对象实例时,用来表示一个域不是对象串行化的一部分
    • native
      • 应用于方法,表示用Java之外的语言实现
    • volatile
      • 表示能够被多个线程异步修改的成员变量
      • 确保全部线程看到的指定变量值相同
      • 禁止指令重排序
      • 实现机制:
        • lock前缀指令,造成内存屏障,以前操做必须所有完成
        • 对缓存的修改当即写入主存
        • 写操做后,其余CPU中的缓存无效
  • Java多线程
    • 线程状态:建立、就绪、运行、阻塞、终止
  • Lock与synchronized区别:
    • Lock是一个接口,synchronized是java关键字
    • synchronized发生异常时会自动释放线程占有的锁,Lock须要手动释放
    • Lock能够响应中断
    • 提升读操做的效率
  • 序列化与反序列化:
    • 序列化:对象转换为字节序列
    • 序列化用途:对象持久化,保存在磁盘;网络传输对象
  • Java NIO:
    • Channel(通道)
      • IO中的Steam是单向的,Channel双向,可进行读写
    • Buffer(缓冲区)
      • 读写数据是都放到Buffer中
    • Selector(选择器)
      • 轮询每一个注册的通道,有注册事件发生,进行处理
      • 同步非阻塞IO,对IO的读写是同步阻塞的,经过线程复用,将IO准备事件分离
      • 单线程管理多个通道,没必要建立并维护多个线程,减小线程上下文切换致使的开销
      • SelectorKey表示一个到达的事件
  • 同步&非同步、阻塞&非阻塞
    • 同步:对象是多个进程或多个线程,可否并发执行,能则两个线程是同步的
    • 阻塞:单进程或线程,等待(阻塞)仍是返回标志信息(非阻塞)
    • 同步IO&异步IO:
      • 同步IO:IO操做完成以前,线程阻塞
      • 异步IO:IO操做不会致使请求线程阻塞,IO操做两个阶段都是由内核完成,不会阻塞用户线程
      • IO:1)查看是否就绪 2)数据拷贝
      • 区别:数据拷贝是由用户仍是内核完成
      • 阻塞IO是反映在IO操做的第一个阶段(查看是否就绪)
  • JAVA设计模式:
    • 代理模式:
      • 为其余对象提供代理,控制对此对象的访问(Thread实现Runnable接口)
    • 策略模式:
      • 定义一系列算法,将每一个算法封装,能够相互替换
    • 单例模式:
      • 系统中只有一个实例,用在资源共享
      • 数据库链接池、线程池
      • 构造函数设置为private,定义static变量储存实例
    • 装饰模式:
      • 在不改变原类和使用继承的状况下,动态扩展一个对象的功能。
      • 经过建立一个包装对象,包裹真实对象
    • 工厂模式:
      • 解耦合
    • 原型模式
    • 模板方法模式
  • 内存泄露:
    • 无用对象持续占有内存空间而得不到释放
    • 缘由:长生命周期对象持有短生命周期对象
  • Servlet、Tomcat、Spring MVC关系
    • Servlet:小型JAV程序,运行在Web服务器中处理用户请求
    • Tomcat:做为Web应用服务器,是一个Servlet容器,对Servlet进行管理
    • 一个基本的流程:
      • tomcat接收请求,找到合适的Servlet来处理请求,若是该Servlet没加载,就顺便编译加载到JVM,若是加载了,就调init方法初始化,调Service方法处理request并返回responser,观测Servlet状态变化,在结束时调用destory方法
    • Spring MVC:Spring 提供的一个MVC框架,把保存数据Map的Model、页面显示的View、控制器Controller三者分析,简化web项目开发难度
    • Spring Boot 将Tomcat设为默认容器,Spring MVC的入口是一个Servlet(前置控制器DispatcherServlet),前置控制器拦截请求,分发给Controller处理
  • String StringBuffer StringBuilder
    • String用final修饰, 不可变
    • 都用字符数组保存字符串char[] value
    • StringBuffer加同步锁,线程安全;StringBuilder没加
  • 接口与抽象类区别
    • 一个类能够实现多个接口,可是只能实现一个抽象类
    • 接口中的实例变量是final类型的
    • 一个类须要实现接口中的全部方法,抽象类不必定
    • 接口中的方法不能实现,抽象类能够有非抽象的方法
    • 接口不能经过new实例化,但能够声明
  • Servlet
    • 负责接收用户HttpServletRequest,并将HttpServletResponse反馈给用户
    • 不是线程安全的
相关文章
相关标签/搜索