1,类的生命周期? 有7个阶段
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、
验证(Verification)、准备(Preparation)、解析(Resolution)、 初始化(Initialization)、
使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析3个部分统称为连接(Linking)
2,简述 tcp 和 udp的区别?
UDP TCP
是否连接 无连接 面向连接
是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制
连接对象个数 一对一,一对多,多对一和多对多交互通信 只能一对一通信
传输方式 面向报文 面向字节流
首部开销 首部开销小,仅8字节 首部最小20字节,最大60字节
适用场景 适用于实时应用(IP电话,视频会议,直播等) 适用于要求可靠的传输应用,例如文件传输
总结
TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。
虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为
对数据准确性要求高,速度可以相对较慢的,可以选用TCP
3,什么是 Java 虚拟机?为什么 Java 被称作是“平台无关的编程语言”?
1
java虚拟机是执行字节码文件(.class)的虚拟机进程。
java源程序(.java)被编译器编译成字节码文件(.class)。然后字节码文件,将由java虚拟机,
解释成机器码(不同平台的机器码不同)。利用机器码操作硬件和操作系统
2
因为不同的平台装有不同的JVM,它们能够将相同的.class文件,解释成不同平台所需要的机器码。
正是因为有JVM的存在,java被称为平台无关的编程语言
4,Servlet的生命周期?
servlet的生命周期顾名思义就是从servlet出现到消亡(销毁)的全过程。
主要分为以下几个阶段:
加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求响应(服务阶段)—>销毁
servlet生命周期三个方法:
init()初始化阶段
service()处理客户端请求阶段
destroy()终止阶段
容器(tomcat等)装载servlet
实例化阶段
1.1 当客户端首次发送第一次请求后,由Servlet容器去解析请求,根据请求找到是否有对应的servlet。
1.2 判断是否有Servlet实现类的对象存在?存在则直接使用,不存在则先创建一个servlet实现类的对象。
初始化阶段
Servlet 初始化是其生命周期的第一个阶段,也是其他阶段的基础。只有完成了初始化,Servlet 才能处理来自客户端的请求。
Servlet 初始化阶段分为 2 步:
加载和实例化 Servlet;
调用 init() 方法进行初始化
1.加载和实例化
Servlet 容器负责加载和实例化 Servlet。
当容器启动或首次请求某个 Servlet 时,容器会读取 web.xml (配置load-on-startup=1,默认为0)或
@WebServlet 中的配置信息,对指定的 Servlet 进行加载。加载成功后,容器会通过反射对 Servlet 进行实例化。
2.调用 init() 方法进行初始化
加载和实例化完成后,Servlet 容器会创建一个servlet对象并调用servlet的init方法(在servlet生命周期内只能调用一次init方法)去初始化 Servlet 实例。
请求响应阶段
初始化完成后调取service()方法,由service()判断客户端的请求方式。
3.1 如果是get请求,则执行doGet()方法。
3.2 如果是post请求,则执行doPost()。
3.3 处理方法完成后会作出相应的结果返回给客户端,单次请求处理完毕。
当用户发送第二次以后的请求时,会判断对象是否存在,但是不再执行init(),而直接执行service方法调取doGet() / doPost()方法。
服务终止阶段
当服务器关闭,重启或移除 Servlet 实例时Servlet调取destroy()方法进行销毁,宣告生命周期的结束。