测试开发工程师(复习学习笔记,准备招银提前批电话面)

写在前面:秋招目标岗位:测试开发工程师,最近在准备招银网络科技的电话面,收集了一些资料,做个笔记。

1、静态方法与非静态方法区别
本质区别:静态方法用static修饰,在定义类时已经被装载和分配。非静态方法不加static,定义类时没有占用内存,只有被实例化对象后,对象调用该方法时才会被分配内存。
静态方法只能调用静态成员或静态方法;非静态方法可以调用静态成员或者静态方法,还可以调用其他的非静态成员或者方法。
注:非静态方法被实例化后也可以被静态方法调用

2、jvm类加载过程:加载→验证→准备→解析→初始化→使用→卸载
在准备阶段为静态变量分配内存;
在初始化阶段为普通成员变量赋值

3、抽象类和接口的区别
测试开发工程师(复习学习笔记,准备招银提前批电话面)
(1)抽象类可以有构造方法,接口不能有构造方法;
(2)抽象类可以有普通成员变量,接口中没有普通成员变量,只能是public static final类型;
(3)抽象类可以包含非抽象的普通方法,接口中方法必须全部都是抽象的,即抽象类中方法可以有方法体,接口中的方法不能有方法体;
(4)抽象类中可以包含静态方法,接口中不能有静态方法;
(5)一个类只能继承一个抽象类,但可以实现多个接口。

4、java初始化顺序
在一个java程序中,有类、成员、构造函数、代码块、方法等。
基本顺序为:静态优于非静态,父类优于子类,成员变量优于方法和块
总结起来为:父类静态变量→父类静态块→子类静态变量→子类静态块→父类非静态变量→父类非静态块→子类非静态变量→子类非静态块→子类构造方法

5、重载(overload)和重写(override)
重写是子类对父类允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变,即外壳不变,核心重写。
重载是在同一个类里面,方法名字相同,而参数不同,返回类型可以相同也可以不同。

6、进程与线程
进程:cpu进行资源分配和管理的最小单位
线程:cpu进行调度的最小单位
进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在,反之,线程是进程的一部分,没有自己的地址空间,与进程中的其它线程共享分配给该进程的所有资源。

7、HTTP请求包含的数据格式
请求行+请求头+数据体
请求行:方法+url+HTTP协议版本
请求头:user-agent产生请求的浏览器类型+accept客户端可识别的内容类型列表+host主机地址

8、jvm
jvm是java比较核心的东西,实际上就是建立了一个虚拟环境,使得os与java编译器之间能够相互进行交流。主要包括内存模型、垃圾回收机制、加载机制。
内存模型主要是堆区和栈区、程序技术区、方法区

垃圾回收:垃圾的定义:无任何对象引用的对象。垃圾回收的方法有:标记-清除算法(tracing collector),标记-整理算法(compacting collector),复制算法(copying collector),分代收集(adaptive collector)
引用计数:通过引用计数来判断一个对象是否可以被回收。不失一般性,如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用到,那么这个对象就成为可被回收的对象了。这种方式成为引用计数法。

可达性分析:通过一系列的“GC Roots”对象作为起点进行搜索,如果在“GC Roots”和一个对象之间没有可达路径,则称该对象是不可达的,不过要注意的是被判定为不可达的对象不一定就会成为可回收对象。被判定为不可达的对象要成为可回收对象必须至少经历两次标记过程,如果在这两次标记过程中仍然没有逃脱成为可回收对象的可能性,则基本上就真的成为可回收对象了。
引用:如果Reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。
强引用(strong reference)> 软引用(soft reference)>弱引用(weak refenrence)>虚引用(phantom reference)

标记-清除算法(tracing collector):分为标记和清除两部分。首先标记出所需回收的对象,在标记完成后统一回收被标记的对象。
标记-整理算法(compacting -collector):先标记,标记后让所有的对象都向一端移动,直接清理掉端边界以外的内存。
复制算法(copying collector):将内存按容量分为大小相等的两块,每次只使用其中的一块,当这一块的内存用完了,就将还存活着的对象复制到另外一块内存上面,然后把已使用的内存空间一次清理掉。
分代收集算法:根据各个年代的特点采取最适当的收集算法。1、在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法。只需要付出少量存活对象的复制成本就可以完成收集。2、老年代中因为对象存活率高、没有额外空间对他进行分配担保,就必须用标记-清除或者标记-整理。

9、内存泄漏:当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,导致本该被回收的对象不能被回收而停留在堆内存中,产生内存泄漏。
内存溢出:程序申请内存时,没有足够的内存供申请者使用。

10、计算机网络七层模型
物理层→数据链路层→网络层→传输层→会话层→表示层→应用层
11、TCP/IP五层协议模型
物理层→数据链路层→网络层→传输层→应用层

12、三次握手、四次挥手

13、TCP与UDP区别,TCP为什么可靠

14、http与https区别
HTTPS需要用到ca申请证书,一般免费证书较少,因此需要一定费用。
http是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的ssl(安全套接字协议)加密传输协议
使用不同的连接方式,端口不一样,http80,https443
http连接简单,无状态;https是由ssl+http协议构建的可进行加密传输、身份认证的网络协议

15、什么是死锁,发生死锁的四个必要条件
死锁是指在一组进程中的各个进程均占有不会释放的资源,但因为互相申请被其他进程所占用不会释放的资源而处于一种永久等待状态。
必要条件:1、互斥条件:资源不能被共享,只能由一个进程使用
2、请求与保持条件:已经得到资源的进程可以再次申请新的资源
3、非剥夺条件:已经分配的资源不能从相应的进程中被强制剥夺
4、循环等待条件:系统中若干进程组成环路,该环路中每个进程都在等到相邻进程正占用的资源
Java死锁原因:1、多个线程涉及到多个锁,这些锁存在交叉,可能会导致一个锁依赖的闭环 2、默认的锁申请操作是阻塞的

16、什么是事务,事务的ACID特性
数据库事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。通常包括一个序列对数据库的读写操作。
目的:1、为数据库操作序列提供一个从失败中恢复到正常状态的方法,同时提供数据库在异常状态下仍能保持一致性的方法。2、当多个应用程序并发访问数据库时,可以在这些程序之间提供一个隔离方法,防止彼此的操作互相干扰。
ACID特性
原子性(atomicity):事务被作为一个整体执行,包含在其中的对数据库的操作要么全部执行,要么都不执行。
一致性(consistency):事务应确保数据库的状态从一个一致状态变为了另一个一致状态。
隔离性(isolation):多个事务并发执行,一个事务的执行不影响其他事务执行
持久性:已被提交的事务对数据库的修改应永久保存在数据库

17、捕获异常
Try(用于捕获异常)、catch(用于处理try捕获到的异常)、finally(无论是否捕获或处理异常,finally里的语句都会被执行,当try或catch中遇到return时,finally将在方法返回之前被执行)
Try没有捕获异常:try逐一执行,跳过catch,执行finally及其之后的语句
Try捕获到异常,catch没有处理方法:异常交给jvm处理,finally语句块执行,但是finally之后的语句块不会被执行
Try捕捉到异常,catch有处理方法:执行相应catch,执行finally语句块,执行finally之后的语句块

18、多态
多态指的是 程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,在程序运行期间才会确定,即一个变量到底指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须由程序运行期间才能决定。
实现多态的三个必要条件:
继承:在多态中必须存在着有继承关系的子类和父类
重写:子类对父类的某些方法进行重新定义
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能具备技能调用父类的方法和子类的方法。