JAVA面经复习(十五)

面试难度:<mark>☆☆☆</mark>

问:如何判断链表有环?

答:1、采用快慢指针判断指针是否重合。2、采用哈希数组,判断是否重复出现节点。

问:二分查找?

答:采用左右指针的方式不断的找中间的节点,从而实现logn的查询。

问:二叉树前序遍历?

答:经典的遍历方式。

问:有一个表,ID,NAME,SUB,SCORE,分别代表学号,姓名,学科,成绩。1、请问怎么查找平均成绩大于90的信息?2、请问怎么查找表中所有学科?

答:
1、select sub
from student
group by ID
having avg(score)>90;
2、select distinct sub
from student;

问:事务的特性,介绍一下

答:原子性,一致性,持久性,隔离性,即ACID。原子性指的是事务的执行必须是完整的,不可以数据插入一半后不再进行插入。一致性是指事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。持久性,是指事务对数据库修改的内容是长期生效的。隔离性是指多个事务间的执行没有干扰,同一时间只能有一个事务进行请求。

问:抽象类和接口的区别

答:抽象类中可以有实体类方法,而接口中没有。接口中不允许有实体方法。同时,由于java是单类继承,实现抽象类的限制会比实现接口更大一些。

问:面向过程的特征,详细再说说他们

答:(???)面向过程没有特定的特征,就是采用代码实现具体的功能。如果是说的面向对象的特征,那么就是封装,继承,多态。封装是指将功能和变量包装起来,对外提供唯一的接口进行访问,保证了安全性。继承,是指一个类继承另外一个类的成员变量、方法等,从而实现的代码的复用。多态,分为动态多态和静态多态,静态多态是重写为主,对父类的方法进行重写,使得一个方法具备多个功能,动态多态是指通过强制类型转换父类对象为子类对象,从而在运行时,获得对应子类的方法。

问:数组和链表有啥区别,分别在哪里分配空间

答:数组固定分配空间,链表按照代码实际需要依次生成空间。同时数组的查询速度比链表更快,链表的插入和删除速度比数组要更快。数组在栈中固定分配空间,链表是在堆中自由分配空间。

参考资料:
菜鸟突击一面