啦啦啦啦,热腾腾的测开面经来了,来自某网络科技的测开一面面试题,感受下难度怎么样?
接口和抽象类的区别?
这题几乎每次都问,参考答案:接口和抽象类都需要实现类去继承和实现才可以实例化,接口的实现类可以implements多个接口类,但抽象类的实现类只能extends一个抽象类,接口只能做方法声明,但抽象类中除了方法声明还可以有具体的方法实现,接口中只能定义静态常量,抽象类中可以定义普通属性,总得来说接口是设计的结果,抽象类是重构的结果。
创建线程的方式有哪些?各有什么区别?
准确的说有4种,分别是:实现Runnable接口,实现Callable接口,继承Thread类,通过线程池的方式创建和管理。
Runnable 和 Callable接口实现的线程有什么不同?
这个问题来自上面问题的引申,通过Callable接口实现的线程可以和Future类结合使用,从而得到线程执行后的结果。
synchronized关键字是如何使用的?
synchronized关键字可以修饰方法、静态方法、代码块,其中修饰静态方法对应的是类锁,其他对应的是对象锁。
Spring的 Ioc 你是如何理解的?
IOC 是Inversion of Control的缩写,直译就是控制反转,没有这个之前,我们使用对象对象先new一个,有了它之后,对象的创建和管理由Ioc容器来控制,这就是主动管理变成被动管理了,所以叫控制反转。这样做的好处:便于bean对象管理,解耦对象间的调用关系,减低复杂度。
JVM垃圾回收的过程?
首先介绍一下JVM中堆内存的组成:JVM堆内存主要由三部分组成:
1)新生代: 伊甸园区,存活区,伸缩区
2)老年代: 老年区,伸缩区
3)元空间(永久代): 元空间,伸缩区
注意:JDK1.8以后,永久代被称作元空间:直接使用物理内存
GC流程:
1)新生对象在新生代的伊甸园区开辟空间,如果伊甸园区的内存空间不足,则发生MinorGC,进行垃圾回收处理,然后再判断处理之后的内存空间是否充足, 如果充足,则将新生对象存放在伊甸园区,否则将继续判断存活区的内存空间 ;
2)如果存活区的内存空间充足,则将伊甸园区的部分活跃对象直接存放在存活区内,如果存活区也没有多余的内存空间,那么将继续判断老年区的内存空间 ;
3)如果老年区的内存空间充足,则将伊甸园区的部分活跃对象存在老年区中,如果老年区也没有多余的内存空间,那么将会发生MajorGC(FullGC), 然后判断老年区是否有多余的内存空间,如果有多余的空间,则可以将对象保存在老年区。否则将会产生OOM(OutOfMemoryError)异常 。
年轻代:采用复制算法(将活跃对象复制到完全未使用的内存空间中,然后对需要垃圾回收的对象进行GC处理)
老年代:采用整理-压缩算法(将需要回收的对象进行整理-压缩) 注意:GC处理只针对新生代和老年代,元空间(永久代)不在GC控制范围内。
性能问题如何定位?
这里理解的是Java的性能问题,考察的应该是性能调优相关的命令和工具,可以说说jstat、jstack、jmap等。
什么是事务?有什么特性?
事务是数据库操作逻辑的最小单元,数据库事务 transanction 正确执行的四个基本要素:
1)原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
2)一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
3)隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆, 必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。
4)持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
MySQL数据库的存储引擎有哪些?有什么差异?
MySQL常见的三种存储引擎为InnoDB、baiMyISAM和MEMORY。其区别体现du在事务安全、存储限zhi制、空间使用、内存使用、插入数据dao的速度和对外键的支持。
有一个学生表,有学生id(sid),课程id(cid),课程成绩(score),请写出SQL查出所有没有挂科(所有课程的成绩都在60以上)的学生id
可以反向思考,只要有一门课的成绩小于60,即就是挂科的
SQL: select sid from students where sid not in (select distinct(sid) from students where score < 60 );
写一个算法模拟随机发扑克牌
一副扑克牌有13x4 + 1x2 = 54张牌,其中13个普通牌有4类花色,技能牌王炸有2类花色,思路:弄两个随机方法就行,一个随机14张牌的种类,一类随机花色即可。
源自公众号 测试开发栈