-
Java基本数据类型: Byte、 shot、 int、 long、 float、 double、 char、 boolean
-
String、StringBuffer、StringBuilder区别:
- String类存储数值不可改变的字符串,StringBuffer可动态构建字符数据,StringBuilder是一个可变的字符序列
- StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象,不同之处在于StringBuilder不需要考虑线程安全
-
数组与集合:
- 数组中的元素为同一类型
- 集合相当于可变数组,List存储有序可重复的序列,Set存储无序不可重复的序列,Map以键值对的形式存储,Set、Map的重复数据会覆盖
-
重载和重写:
- 重载:同一个类中存在多个同名的方法,方法的参数类型和个数不一样
- 重写:子类在继承父类时,方法名和参数一样,方法体不一样
-
抽象类和接口:
- 抽象类带有abstract关键字,抽象类里的抽象方法使用abstract关键字
- 接口使用interface关键字,接口中的方法不能使用私有和受保护的访问修饰符
- 共同点:都有抽象方法,且不能实例化对象
- 不同点:抽象类只能单继承,接口可以多实现;抽象类可以有普通方法、构造方法,接口只能有抽象方法
-
servlet声明周期:
- Init() 初始化、 service() 处理请求、 destroy() 终止
- servlet单实例,为了减少资源消耗
-
get和post请求:get从服务器上获取少量数据,post向服务器发送数据,安全性相对较高
-
设计模式:
- 单例:该类只能返回一个实例
- 工厂模式:将new对象的过程交给工厂来管理
- 简单工厂:如在工厂类中new多个实现类的对象,其他类中调用工厂类方法传入对应参数 new指定对象
- 静态工厂(创建对象的方法定义为静态方法)、万能工厂、可配置工厂(引入外部配置文件,利用反射创建对象)
- 工厂方法模式:延迟到继承工厂类的子类来选择 实例哪个对象
- 抽象工厂模式:提供 创建相互依赖对象的 接口,无须指定具体的类
- 外观模式:为多个复杂的子系统提供一个对外的统一的接口,更容易访问
- 适配器模式:将一个类的接口转换为可以兼容其他类的接口
- 代理模式:为某个对象提供代理控制该对象的文件
-
Json:用于数据传输,json对象是在{}中存键值对,json数组是在[]中存多个json对象
-
事务:
- 事务的特性(原子性、一致性、隔离性、持久性)、事务的作用(回滚机制确保数据的正确)
- 编程式事务基于xml配置,声明式事务基于注解
-
Ajax:异步请求,局部刷新,用于客户端向web服务端请求或提交数据
-
线程和进程:
- 创建线程:
- 继承Thread类
- 实现Runneable接口
- 实现Callable接口
- 线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度
- 线程生命周期:就绪、运行、阻塞、死亡
- 死锁:两个线程都持有对方的锁,视图获取对方手里的锁,导致无限循环等待;无法解除死锁,只能强制结束JVM;确保线程获取锁的顺序一致可避免死锁
- 线程安全:使用线程安全的类;使用synchronized同步代码块,或者用Lock锁
-
session和cookie:数据保存在session中,session保存在服务端,sessionId保存在cookie中,发送给客户端
-
==和equal的区别:
- equals()比较的是值和hashCode码,==比较的是内存地址
- 如果要重写equals(),必须重写hashCode()
-
多态:拥有继承关系、重写父类方法、父类引用指向子类对象
-
内部类:在类内部的类,外部类不能继承内部类,内部类可以继承外部类和内部类
-
网络编程:
- socket可以使一个应用从网络中读取和写入数据,ServerSocket是等待客户端的请求
- 客户端向服务器发送请求步骤:
1.创建一个Socket实例
2.利用I/O流与服务器进行通信
3.关闭socket
- 服务器接收客户端请求步骤:
1.创建一个ServerSocket实例,监听客户端发来的请求
2.与客户端获取连接后,创建一个Socket实例,利用I/O流与客户端进行通信,完毕后关闭Socket