展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

Java基础和常用框架的面试题

Java基础

  • 面向对象:封装、继承、多态

  • 封装:将对象的属性私有化,并提供外界访问的属性和方法

  • 继承:子类拥有父类所有的属性和方法,子类可在父类的基础上扩展

  • 多态:父类引用指向子类对象,子类以父类的身份,使用自己的方法,但不能使用自己特有的方法

  • 全局变量作用于整个项目,成员变量是对象的一部分;局部变量作用于当前方法

  • 序列化:将对象转化为字节序列,反之则是反序列化

  • throw和throws的区别:
    throw在方法体内,表示抛出异常的动作
    throws表示可能会抛出的异常类型

  • 异常处理的方式:try-catch \ throws
    try放可能出现异常的代码,catch捕获后处理;throws在方法头部抛出异常,交给方法的调用者处理

  • Java基本数据类型: Byte、 shot、 int、 long、 float、 double、 char、 boolean

  • 装箱即是基本数据类型转化为封装数据类型,反之则是拆箱

  • String、StringBuffer、StringBuilder区别:

    1. String类存储数值不可改变的字符串,StringBuffer可动态构建字符数据,StringBuilder是一个可变的字符序列
    2. StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象,不同之处在于StringBuilder不需要考虑线程安全
  • 数组与集合:

    1. 数组中的元素为同一类型
    2. 集合相当于可变数组,List存储有序可重复的序列,Set存储无序不可重复的序列,Map以键值对的形式存储,Set、Map的重复数据会覆盖
      3. List的实现类:ArrayList线程不安全,Vector线程是安全的,LinkedList
      4. Set的实现类:HashSet线程不安全,LikedHashSet是HashSet的子类,TreeSet底层是红黑树
      5. Map的实现类:HashMap,TreeMap
  • 重载和重写:

    1. 重载:同一个类中存在多个同名的方法,方法的参数类型和个数不一样
    2. 重写:子类在继承父类时,方法名和参数一样,方法体不一样
  • 抽象类和接口:

    1. 抽象类带有abstract关键字,抽象类里的抽象方法使用abstract关键字
    2. 接口使用interface关键字,接口中的方法不能使用私有和受保护的访问修饰符
    3. 共同点:都有抽象方法,且不能实例化对象
    4. 不同点:抽象类只能单继承,接口可以多实现;抽象类可以有普通方法、构造方法,接口只能有抽象方法
  • servlet生命周期:

    1. Init() 初始化、 service() 处理请求、 destroy() 终止
    2. servlet单实例,为了减少资源消耗
  • get和post请求:get从服务器上获取少量数据,post向服务器发送数据,安全性相对较高

  • 设计模式:

    1. 单例:该类只能返回一个实例
    2. 工厂模式:将new对象的过程交给工厂来管理
      1. 简单工厂:如在工厂类中new多个实现类的对象,其他类中调用工厂类方法传入对应参数 new指定对象
      2. 静态工厂(创建对象的方法定义为静态方法)、万能工厂、可配置工厂(引入外部配置文件,利用反射创建对象)
    3. 工厂方法模式:延迟到继承工厂类的子类来选择 实例哪个对象
    4. 抽象工厂模式:提供 创建相互依赖对象的 接口,无须指定具体的类
    5. 外观模式:为多个复杂的子系统提供一个对外的统一的接口,更容易访问
    6. 适配器模式:将一个类的接口转换为可以兼容其他类的接口
    7. 代理模式:为某个对象提供代理控制该对象的文件
  • json:用于数据传输,json对象是在{}中存键值对,json数组是在[]中存多个json对象

  • 事务:
    a. 事务的特性:原子性、一致性、隔离性、持久性
    b. 编程式事务基于xml配置,声明式事务基于注解
    c. 作用:维护数据库的完整性,要么完全执行,要么完全不执行

  • Ajax:异步请求,局部刷新,用于客户端向web服务端请求或提交数据

  • 线程和进程:
    1. 进程:程序的一次执行过程,线程是更小的执行单位
    2. 创建线程:
    a. 继承Thread类
    b. 实现Runneable接口
    c. 实现Callable接口
    d. 线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度
    3. 线程生命周期:就绪、运行、阻塞、死亡
    4. 线程优先级1-10,越大越高
    5. 死锁:两个线程都持有对方的锁,试图获取对方手里的锁,导致无限循环等待;无法解除死锁,只能强制结束JVM;确保线程获取锁的顺序一致可避免死锁
    6. 线程安全:使用线程安全的类;使用synchronized同步代码块,或者用Lock锁

  • session和cookie:数据保存在session中,session保存在服务端,sessionId保存在cookie中,发送给客户端

  • ==和equal的区别:

    1. equals()比较的是值和hashCode码,==比较的是内存地址
    2. 如果要重写equals(),必须重写hashCode()
  • 内部类:在类内部的类,外部类不能继承内部类,内部类可以继承外部类和内部类

  • 网络编程:

    1. socket可以使一个应用从网络中读取和写入数据,ServerSocket是等待客户端的请求
    2. 客户端向服务器发送请求步骤:
        1.创建一个Socket实例
        2.利用I/O流与服务器进行通信
        3.关闭socket
        
    3. 服务器接收客户端请求步骤:
        1.创建一个ServerSocket实例,监听客户端发来的请求
         2.与客户端获取连接后,创建一个Socket实例,利用I/O流与客户端进行通信,完毕后关闭Socket
    4. 网络:
      应用层:通过应用进程间的交互来完成特定的网络应用,支持HTTP协议,SMTP协议
      运输层:向两台主机进程之间的通信提供通用的数据传输服务,支持TCP、UDP
      网络层:选择合适的网间路由和交换节点,确保数据及时传送
      数据链路层:将网络层交下来的IP数据报组装成帧
      物理层:实现相邻计算机节点之间比特流的透明传送
    5. 建立TCP连接的3次握手:目的是建立可靠的通信信道
      客户端发送带有SYN标志的数据包
      服务端发送带有SYN/ACK标志的数据包
      客户端发送带有ACK标志的数据包
    6. 断开TCP连接需4次挥手:
      客户端发送一个FIN
      服务端收到后,发送一个ACK
      服务端关闭连接,发送一个FIN
      客户端发送ACK
    7. 区别:UDP更有效,TCP更可靠

常用框架

  • 在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入

  • Bean:构成Spring应用核心的Java对象,由IoC实例化,是单例

  • IoC:将实现某个功能的bean交给spring容器来管理;创建对象,管理对象

  • DI: 属性注入(setting)、构造器注入、El表达式动态注入( #{}的方式 )

  • AOP:连接点(被拦截到的点) 通知、切点(对连接点拦截的定义) 切面(切点+通知)、目标对象(被通知的对象)

  • 面向切面编程:通过预编译方式和运行期间动态代理实现程序功能的统一维护

  • 织入:将切面应用到目标对象并创建新的代理对象的过程

  • springMVC工作流程:前端控制器进行全局流程控制、处理器映射决定控制器处理请求、视图解析器决定控制器处理后的结果如何渲染

  • Mybatis:

    1. ${}不防值注入 #{}防值注入
    2. mapper接口中 方法内的参数会传递给注解中sql的参数,接口全限定名+方法名定位一个mapperdStatement,用来发送sql语句
    3. mapper接口+xml映射、mapper接口+注解
    4. 步骤:创建session工厂,创建session对象,执行sql,提交事务,关闭会话
    5. 一级缓存作用域是session,二级缓存作用域是整个命名空间,可跨session
  • JDBC:

    1. 步骤:导入驱动,加载驱动,连接数据库,发送sql语句,处理结果集
    2. 不足:频繁创建和释放,资源浪费;Mybatis配置连接池管理连接,
      Mybatis中java代码和sql语句分离,易于维护,
      Mybatis传参时以及处理结果集时自动映射
posted @ 2021-04-30 00:13  DogLeftover  阅读(130)  评论(0编辑  收藏  举报